Ресурсы сжатых текстурCompressed texture resources

Карты текстуры — это цифровые изображения, нарисованные на трехмерных фигурах для визуальной детализации.Texture maps are digitized images drawn on three-dimensional shapes to add visual detail. Они сопоставляются с этими фигурами на этапе растеризации, и этот процесс может потреблять большие объемы системной шины и памяти.They are mapped into these shapes during rasterization, and the process can consume large amounts of both the system bus and memory. Чтобы уменьшить объем памяти, потребляемый текстурами, Direct3D поддерживает сжатие поверхностей текстуры.To reduce the amount of memory consumed by textures, Direct3D supports the compression of texture surfaces. Некоторые устройства Direct3D поддерживают сжатые поверхности текстур по умолчанию.Some Direct3D devices support compressed texture surfaces natively. На таких устройствах после того как вы создали сжатую поверхность и загрузили в нее данные, поверхность можно использовать в Direct3D как любую другую поверхность текстуры.On such devices, when you have created a compressed surface and loaded the data into it, the surface can be used in Direct3D like any other texture surface. Direct3D обрабатывает распаковку, если текстура сопоставлена трехмерному объекту.Direct3D handles decompression when the texture is mapped to a 3D object.

Сжатие хранилища эффективность и текстурыStorage efficiency and texture compression

Все форматы сжатия текстур являются степенью двух.All texture compression formats are powers of two. Это не означает, что текстура обязательно должна быть квадратной, но означает, что значения x и y должны быть степенями двух.While this does not mean that a texture is necessarily square, it does mean that both x and y are powers of two. Например, если текстура изначально имеет размер 512 на 128 байтов, следующая текстура будет иметь размеры 256 на 64 и так далее, при этом каждый уровень будет уменьшаться на степень двух.For example, if a texture is originally 512 by 128 bytes, the next mipmapping would be 256 by 64 and so on, with each level decreasing by a power of two. На более низких уровнях, где текстура фильтруется до 16 на 2 и 8 на 1, будут присутствовать неиспользованные биты, поскольку блок сжатия — это всегда блок текселей 4 на 4.At lower levels, where the texture is filtered to 16 by 2 and 8 by 1, there will be wasted bits because the compression block is always a 4 by 4 block of texels. Неиспользованные части блока отбиваются.Unused portions of the block are padded.

Несмотря на существование неиспользованных битов на более низких уровнях, совокупное преимущество значительно.Although there are wasted bits at the lowest levels, the overall gain is still significant. В худшем случае в теории можно создать структуру 2000 на 1 (нулевая степень 2).The worst case is, in theory, a 2K by 1 texture (2⁰ power). В этом случае шифруется только одна строка пикселей на блок, остальная часть блока не используется.Here, only a single row of pixels is encoded per block, while the rest of the block is unused.

Смешивание форматы в единый ТекстурныйMixing formats within a single texture

Обратите внимание, что любая текстура должна указывать, что ее данные хранятся по 64 или 128 битов на группу из 16 текселей.It is important to note that any single texture must specify that its data is stored as 64 or 128 bits per group of 16 texels. Если 64-разрядные блоки (то есть формат BC1 компрессии блоков) используются для текстуры, можно смешать непрозрачные и 1-разрядные альфа-форматы в блоках одной текстуры.If 64-bit blocks - that is, block compression format BC1 - are used for the texture, it is possible to mix the opaque and 1-bit alpha formats on a per-block basis within the same texture. Другими словами, сравнение абсолютное значение целого числа без знака цвет_0 и цвет_1 выполняется уникально для каждого блока 16 текселя.In other words, the comparison of the unsigned integer magnitude of color_0 and color_1 is performed uniquely for each block of 16 texels.

Однако если используются 128-разрядные блоки, необходимо задать альфа-канал в явном (формат BC2) или интерполированном режиме (формат BC3) для всей текстуры.Once the 128-bit blocks are used, the alpha channel must be specified in either explicit (format BC2) or interpolated mode (format BC3) for the entire texture. Как и с цветом, при использовании интерполированного режима (формат BC3) на уровне блоков можно использовать режим восьми или шести интерполированных альфа-каналов.As with color, when interpolated mode (format BC3) is selected, then either eight interpolated alphas or six interpolated alphas mode can be used on a block-by-block basis. Еще раз сравнения абсолютное значение альфа-канал_0 и альфа-канал_1 однозначно выполняется на основе блок за блоком.Again the magnitude comparison of alpha_0 and alpha_1 is done uniquely on a block-by-block basis.

Direct3D предоставляет службы для сжатия поверхностей, которые служат для текстурирования трехмерных моделей.Direct3D provides services to compress surfaces that are used for texturing 3D models. Этот раздел содержит сведения о создании данных на сжатой поверхности текстуры и работе с этими данными.This section provides information about creating and manipulating the data in a compressed texture surface.

В этом разделеIn this section

РазделTopic ОписаниеDescription

Непрозрачный и 1-битовый альфа-текстурыOpaque and 1-bit alpha textures

Формат текстуры BC1 предназначен для непрозрачных текстур и текстур с одним прозрачным цветом.Texture format BC1 is for textures that are opaque or have a single transparent color.

Текстуры с альфа-каналыTextures with alpha channels

Существует два способа кодирования карт текстур с более сложной прозрачностью.There are two ways to encode texture maps that exhibit more complex transparency. В каждом случае блок, описывающий прозрачность, предшествует 64-разрядному блоку, который уже был описан.In each case, a block that describes the transparency precedes the 64-bit block already described. Прозрачность представляется либо в виде точечного рисунка 4x4 с 4 битами на пиксель (явная кодировка) или с меньшим количеством битов и линейной интерполяцией, которая аналогична тому, что используется в кодировании цвета.The transparency is either represented as a 4x4 bitmap with 4 bits per pixel (explicit encoding), or with fewer bits and linear interpolation that is analogous to what is used for color encoding.

Сжатие блокаBlock compression

Сжатие блоков — это метод сжатия текстур с потерями с целью уменьшения размера текстуры и нагрузки на память и, соответственно, повышения производительности.Block compression is a lossy texture-compression technique for reducing texture size and memory footprint, giving a performance increase. Текстура, сжатая по блокам, может быть меньше, чем текстура с 32 битами на цвет.A block-compressed texture can be smaller than a texture with 32-bits per color.

Форматы сжатых текстурCompressed texture formats

Этот раздел содержит сведения о внутренней организации форматов сжатых текстур.This section contains information about the internal organization of compressed texture formats. Эти сведения не нужны для того, чтобы использовать сжатые текстуры, потому что для преобразования форматов можно использовать функции Direct3D.You do not need these details to use compressed textures, because you can use Direct3D functions for conversion to and from compressed formats. Однако эта информация окажется полезной, если потребуется выполнять операции со сжатыми поверхностными данными напрямую.However, this information is useful if you want to operate on compressed surface data directly.

 

Связанные разделыRelated topics

ТекстурыTextures