Texturas con canales alfa
Hay dos maneras de codificar mapas de textura que muestran transparencia más compleja. En cada caso, un bloque que describe la transparencia precede al bloque de 64 bits ya descrito. La transparencia se representa como un mapa de bits de 4x4 con 4 bits por píxel (codificación explícita), o con menos bits y interpolación lineal que es análogo a lo que se usa para la codificación de color.
El bloque de transparencia y el bloque de color se organizan como se muestra en la tabla siguiente.
Dirección de Word | Bloque de 64 bits |
---|---|
3:0 | Bloque de transparencia |
7:4 | Bloque de 64 bits descrito anteriormente |
Codificación de textura explícita
Para codificación de textura explícita (formato BC2), los componentes alfa de los elementos de textura que describen la transparencia se codifican en un mapa de bits de 4x4 con 4 bits por elemento de textura. Estos cuatro bits se pueden lograr a través de una variedad de medios, como la dithering o mediante los cuatro bits más significativos de los datos alfa. Sin embargo, se producen, se usan igual que son, sin ninguna forma de interpolación.
En el diagrama siguiente se muestra un bloque de transparencia de 64 bits.
Nota El método de compresión de Direct3D usa los cuatro bits más significativos.
En las tablas siguientes se muestra cómo se diseña la información alfa en la memoria, para cada palabra de 16 bits.
Diseño de la palabra 0:
bits | Alpha |
---|---|
3:0 (LSB*) | [0][0] |
7:4 | [0] [1] |
11:8 | [0] [2] |
15:12 (MSB*) | [0] [3] |
*bit menos significativo, bit más significativo (MSB)
Diseño de la palabra 1:
bits | Alpha |
---|---|
3:0 (LSB) | [1] [0] |
7:4 | [1][1] |
11:8 | [1] [2] |
15:12 (MSB) | [1] [3] |
Diseño de la palabra 2:
bits | Alpha |
---|---|
3:0 (LSB) | [2] [0] |
7:4 | [2] [1] |
11:8 | [2][2] |
15:12 (MSB) | [2] [3] |
Diseño de la palabra 3:
bits | Alpha |
---|---|
3:0 (LSB) | [3] [0] |
7:4 | [3] [1] |
11:8 | [3] [2] |
15:12 (MSB) | [3][3] |
Comparación de colores usada en BC1 para determinar si el elemento de textura es transparente no se usa en este formato. Se supone que sin el color compara los datos de color siempre se trata como si estuviera en modo de 4 colores.
Interpolación alfa lineal de tres bits
La codificación de transparencia para el formato BC3 se basa en un concepto similar a la codificación lineal utilizada para el color. Dos valores alfa de 8 bits y un mapa de bits de 4x4 con tres bits por píxel se almacenan en los ocho primeros bytes del bloque. Los valores alfa representativos se usan para interpolar valores alfa intermedios. Hay información adicional disponible en la forma en que se almacenan los dos valores alfa. Si alpha_0 es mayor que alpha_1, la interpolación crea seis valores alfa intermedios. De lo contrario, se interpolan cuatro valores alfa intermedios entre los extremos alfa especificados. Los dos valores alfa implícitos adicionales son 0 (totalmente transparente) y 255 (totalmente opaco).
En el ejemplo de código siguiente se muestra este algoritmo.
// 8-alpha or 6-alpha block?
if (alpha_0 > alpha_1) {
// 8-alpha block: derive the other six alphas.
// Bit code 000 = alpha_0, 001 = alpha_1, others are interpolated.
alpha_2 = (6 * alpha_0 + 1 * alpha_1 + 3) / 7; // bit code 010
alpha_3 = (5 * alpha_0 + 2 * alpha_1 + 3) / 7; // bit code 011
alpha_4 = (4 * alpha_0 + 3 * alpha_1 + 3) / 7; // bit code 100
alpha_5 = (3 * alpha_0 + 4 * alpha_1 + 3) / 7; // bit code 101
alpha_6 = (2 * alpha_0 + 5 * alpha_1 + 3) / 7; // bit code 110
alpha_7 = (1 * alpha_0 + 6 * alpha_1 + 3) / 7; // bit code 111
}
else {
// 6-alpha block.
// Bit code 000 = alpha_0, 001 = alpha_1, others are interpolated.
alpha_2 = (4 * alpha_0 + 1 * alpha_1 + 2) / 5; // Bit code 010
alpha_3 = (3 * alpha_0 + 2 * alpha_1 + 2) / 5; // Bit code 011
alpha_4 = (2 * alpha_0 + 3 * alpha_1 + 2) / 5; // Bit code 100
alpha_5 = (1 * alpha_0 + 4 * alpha_1 + 2) / 5; // Bit code 101
alpha_6 = 0; // Bit code 110
alpha_7 = 255; // Bit code 111
}
El diseño de memoria del bloque alfa es el siguiente:
Byte | Alpha |
---|---|
0 | Alpha_0 |
1 | Alpha_1 |
2 | [0] [2] (2 MSB), [0][1], [0][0] |
3 | [1] [1] (1 MSB), [1][0], [0][3], [0][2] (1 LSB) |
4 | [1] [3], [1][2], [1][1] (2 LSB) |
5 | [2] [2] (2 MSB), [2][1], [2][0] |
6 | [3] [1] (1 MSB), [3][0], [2][3], [2][2] (1 LSB) |
7 | [3] [3], [3][2], [3][1] (2 LSB) |
Comparación de colores usada en BC1 para determinar si el elemento de textura es transparente no se usa con estos formatos. Se supone que sin el color compara los datos de color siempre se trata como si estuviera en modo de 4 colores.
Temas relacionados
Recursos de textura comprimidos