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

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

Для каждого непрозрачного или 1-разрядного альфа-блока сохраняются два 16-разрядных значения (формат RGB 5:6:5) и битовая карта 4 x 4 с 2 битами на пиксель.For each opaque or 1-bit alpha block, two 16-bit values (RGB 5:6:5 format) and a 4x4 bitmap with 2 bits per pixel are stored. Это в сумме составляет 64 бита для 16 текселей или четыре бита на тексель.This totals 64 bits for 16 texels, or four bits per texel. В битовой карте блока предусматриваются 2 бита на тексель для выбора из четырех цветов, два из которых хранятся в закодированных данных.In the block bitmap, there are 2 bits per texel to select between the four colors, two of which are stored in the encoded data. Другие два цвета являются производными от эти сохраненных цветов путем линейной интерполяции.The other two colors are derived from these stored colors by linear interpolation. Этом макет показан на следующей схеме.This layout is shown in the following diagram.

схема битовой карты

Формат 1-разрядного альфа-значения может быть отличен от формата непрозрачного цвета путем сравнения двух 16-разрядных значений цвета, сохраненных в блоке.The 1-bit alpha format is distinguished from the opaque format by comparing the two 16-bit color values stored in the block. Они обрабатываются как целые числа без знака.They are treated as unsigned integers. Если первый цвет больше, чем второй, подразумевается, что определены только непрозрачные тексели.If the first color is greater than the second, it implies that only opaque texels are defined. Это означает, что для представления текселей используются четыре цвета.This means four colors are used to represent the texels. В четырехцветном кодировании существует два производных цвета, а все четыре цвета распределяются равномерно в цветовом пространстве RGB.In four-color encoding, there are two derived colors and all four colors are equally distributed in RGB color space. Этот формат аналогичен формату RGB 5:6:5.This format is analogous to RGB 5:6:5 format. В противном случае для 1-разрядной альфа-прозрачности используются три цвета, а четвертый резервируется для представления прозрачных текселей.Otherwise, for 1-bit alpha transparency, three colors are used and the fourth is reserved to represent transparent texels.

В кодировке тремя цветами существует один производный цвет, а четвертый 2-разрядный код резервируется для указания прозрачного текселя (данные альфа-канала).In three-color encoding, there is one derived color and the fourth 2-bit code is reserved to indicate a transparent texel (alpha information). Этот формат аналогичен RGBA 5:5:5:1, где заключительный разряд используется для кодирования альфа-маски.This format is analogous to RGBA 5:5:5:1, where the final bit is used for encoding the alpha mask.

В следующем примере кода показан алгоритм определения того, выбрано ли трех- или четырехцветовое кодирование.The following code example illustrates the algorithm for deciding whether three- or four-color encoding is selected:

if (color_0 > color_1) 
{
    // Four-color block: derive the other two colors. 
    
    // 00 = color_0, 01 = color_1, 10 = color_2, 11 = color_3
    // These 2-bit codes correspond to the 2-bit fields 
    // stored in the 64-bit block.
    color_2 = (2 * color_0 + color_1 + 1) / 3;
    color_3 = (color_0 + 2 * color_1 + 1) / 3;
}    
else
{ 
    // Three-color block: derive the other color.
    // 00 = color_0,  01 = color_1,  10 = color_2,  
    // 11 = transparent.
    // These 2-bit codes correspond to the 2-bit fields 
    // stored in the 64-bit block. 
    color_2 = (color_0 + color_1) / 2;    
    color_3 = transparent;    

}

Перед наложением рекомендуется установить компоненты RGBA для пикселя прозрачности равными нулю.It is recommended that you set the RGBA components of the transparency pixel to zero before blending.

В следующих таблицах показана схема памяти для 8-байтового блока.The following tables show the memory layout for the 8-byte block. Предполагается, что первый индекс соответствует координате по оси Y, а второй соответствует координате по оси X.It is assumed that the first index corresponds to the y-coordinate and the second corresponds to the x-coordinate. Например, шаг текселя [ 1 ] [ 2 ] ссылается на пиксель текстуры на карте (x, y) = (2, 1).For example, Texel[1][2] refers to the texture map pixel at (x,y) = (2,1).

Ниже приведена схема памяти для 8-байтового блока (64-разрядная версия).The following is the memory layout for the 8-byte (64-bit) block:

Адрес словаWord address 16-разрядное слово16-bit word
00 Цвет _ 0Color_0
11 Цвет _ 1Color_1
22 Битовое слово _ 0Bitmap Word_0
33 Битовое слово _ 1Bitmap Word_1

 

Цвет _ 0 и цвет _ 1, цвета с двумя крайними, размещаются следующим образом:Color_0 and Color_1, the colors at the two extremes, are laid out as follows:

BitsBits ColorColor
4:0 (ЛСБ * )4:0 (LSB*) Компонент синего цветаBlue color component
10:510:5 Компонент зеленого цветаGreen color component
15:1115:11 Компонент красного цветаRed color component

 

*Наименьший значащий бит*least-significant bit

Битовое слово _ 0 располагается следующим образом:Bitmap Word_0 is laid out as follows:

BitsBits ТексельTexel
1:0 (LSB)1:0 (LSB) Шаг текселя [ 0 ] [ 0]Texel[0][0]
3:23:2 Шаг текселя [ 0 ] [ 1]Texel[0][1]
5:45:4 Шаг текселя [ 0 ] [ 2]Texel[0][2]
7:67:6 Шаг текселя [ 0 ] [ 3]Texel[0][3]
9:89:8 Шаг текселя [ 1 ] [ 0]Texel[1][0]
11:1011:10 Шаг текселя [ 1 ] [ 1]Texel[1][1]
13:1213:12 Шаг текселя [ 1 ] [ 2]Texel[1][2]
15:14 (от старшего * )15:14 (MSB*) Шаг текселя [ 1 ] [ 3]Texel[1][3]

 

*наиболее значащий бит (старший)*most significant bit (MSB)

Битовое слово _ 1 размещается следующим образом:Bitmap Word_1 is laid out as follows:

BitsBits ТексельTexel
1:0 (LSB)1:0 (LSB) Шаг текселя [ 2 ] [ 0]Texel[2][0]
3:23:2 Шаг текселя [ 2 ] [ 1]Texel[2][1]
5:45:4 Шаг текселя [ 2 ] [ 2]Texel[2][2]
7:67:6 Шаг текселя [ 2 ] [ 3]Texel[2][3]
9:89:8 Шаг текселя [ 3 ] [ 0]Texel[3][0]
11:1011:10 Шаг текселя [ 3 ] [ 1]Texel[3][1]
13:1213:12 Шаг текселя [ 3 ] [ 2]Texel[3][2]
15:14 (MSB)15:14 (MSB) Шаг текселя [ 3 ] [ 3]Texel[3][3]

 

Пример кодирования непрозрачного цветаExample of opaque color encoding

В примере кодирования непрозрачного цвета предположим, что красный и черный цвета находятся на разных краях диапазона.As an example of opaque encoding, assume that the colors red and black are at the extremes. Красный цвет — _ 0, а черный — цвет _ 1.Red is color_0, and black is color_1. Существует четыре интерполированных цвета, которые образуют равномерно распределенный между ними градиент.There are four interpolated colors that form the uniformly distributed gradient between them. Чтобы определить значения для битовой карты 4 x 4, используются следующие расчеты.To determine the values for the 4x4 bitmap, the following calculations are used:

00 ? color_0
01 ? color_1
10 ? 2/3 color_0 + 1/3 color_1
11 ? 1/3 color_0 + 2/3 color_1

Битовая карта выглядит согласно следующей схеме.The bitmap then looks like the following diagram.

Схема развернутой структуры точечного рисунка для красного и черного цветов.

Это выглядит как следующий набор цветов на иллюстрации.This looks like the following illustrated series of colors.

Примечание    . В изображении в верхнем левом углу отображается пиксель (0, 0).Note   In an image, pixel (0,0) appears on the top left.

 

иллюстрация непрозрачного закодированного градиента

Пример 1-битовой кодировки AlphaExample of 1-bit alpha encoding

Этот формат выбирается, когда 16-разрядное целое число без знака, цвет _ 0, меньше, чем 16-разрядное целое число без знака, цвет _ 1.This format is selected when the unsigned 16-bit integer, color_0, is less than the unsigned 16-bit integer, color_1. Пример использования этого формата — листья на дереве на фоне голубого неба.An example of where this format can be used is leaves on a tree, shown against a blue sky. Некоторые тексели могут быть отмечены как прозрачные, и в то же время три оттенка зеленого по-прежнему доступны для листьев.Some texels can be marked as transparent while three shades of green are still available for the leaves. Два цвета располагаются по краям, а третий является интерполированным цветом.Two colors fix the extremes, and the third is an interpolated color.

Ниже приведена иллюстрация с примером такого рисунка.The following illustration is an example of such a picture.

иллюстрация кодирования 1-разрядного альфа-значения

Там, где изображение выглядит белым, тексель будет закодирован как прозрачный.Where the image is shown as white, the texel would be encoded as transparent. Компоненты RGBA прозрачных текселей должны быть установлены равными 0 перед началом наложения.The RGBA components of the transparent texels should be set to zero before blending.

Кодировка битовой карты для цветов и прозрачности определяется с помощью следующих вычислений.The bitmap encoding for the colors and the transparency is determined using the following calculations.

00 ? color_0
01 ? color_1
10 ? 1/2 color_0 + 1/2 color_1
11   ?   Transparent

Битовая карта выглядит согласно следующей схеме.The bitmap then looks like the following diagram.

Схема развернутого растрового макета для более светлого зеленого и темного зеленого цвета.

Связанные темыRelated topics

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