Trame con canali alfa
Esistono due modi per codificare le mappe di texture che presentano trasparenza più complessa. In ogni caso, un blocco che descrive la trasparenza precede il blocco a 64 bit già descritto. La trasparenza è rappresentata come bitmap 4x4 con 4 bit per pixel (codifica esplicita) o con un minor numero di bit e interpolazione lineare analoga a quella usata per la codifica dei colori.
Il blocco di trasparenza e il blocco di colori sono disposti come illustrato nella tabella seguente.
Indirizzo word | Blocco di 64 bit |
---|---|
3:0 | Blocco trasparenza |
7:4 | Blocco a 64 bit descritto in precedenza |
Codifica esplicita delle texture
Per la codifica esplicita delle texture (formato BC2), i componenti alfa dei texel che descrivono la trasparenza vengono codificati in una bitmap 4x4 con 4 bit per texel. Questi quattro bit possono essere ottenuti tramite un'ampia gamma di mezzi, ad esempio dithering o usando i quattro bit più significativi dei dati alfa. Tuttavia vengono prodotti e vengono usati proprio come sono, senza alcuna forma di interpolazione.
Il diagramma seguente mostra un blocco di trasparenza a 64 bit.
Nota Il metodo di compressione di Direct3D usa i quattro bit più significativi.
Le tabelle successive illustrano come vengono disposte le informazioni alfa in memoria per ogni parola a 16 bit.
Layout per word 0:
BITS | Alfa |
---|---|
3:0 (LSB*) | [0][0] |
7:4 | [0][1] |
11:8 | [0][2] |
15:12 (MSB*) | [0][3] |
*bit meno significativo, bit più significativo (MSB)
Layout per word 1:
BITS | Alfa |
---|---|
3:0 (LSB) | [1][0] |
7:4 | [1][1] |
11:8 | [1][2] |
15:12 (MSB) | [1][3] |
Layout per word 2:
BITS | Alfa |
---|---|
3:0 (LSB) | [2][0] |
7:4 | [2][1] |
11:8 | [2][2] |
15:12 (MSB) | [2][3] |
Layout per word 3:
BITS | Alfa |
---|---|
3:0 (LSB) | [3][0] |
7:4 | [3][1] |
11:8 | [3][2] |
15:12 (MSB) | [3][3] |
Il confronto dei colori usato in BC1 per determinare se il texel è trasparente non viene usato in questo formato. Si presuppone che senza il colore, il confronto dei dati di colore viene sempre considerato come se fosse in modalità a 4 colori.
Interpolazione alfa lineare a tre bit
La codifica della trasparenza per il formato BC3 si basa su un concetto simile alla codifica lineare usata per il colore. Due valori alfa a 8 bit e una bitmap 4x4 con tre bit per pixel vengono archiviati nei primi otto byte del blocco. I valori alfa rappresentativi vengono usati per interpolare i valori alfa intermedi. Sono disponibili informazioni aggiuntive nel modo in cui vengono archiviati i due valori alfa. Se alpha_0 è maggiore di alpha_1, vengono creati sei valori alfa intermedi dall'interpolazione. In caso contrario, quattro valori alfa intermedi vengono interpolati tra gli estremi alfa specificati. I due valori alfa impliciti aggiuntivi sono 0 (completamente trasparente) e 255 (completamente opaco).
Il seguente esempio di codice illustra questo 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
}
Il layout di memoria del blocco alfa è il seguente:
Byte | Alfa |
---|---|
0 | Alpha_0 |
1 | Alpha_1 |
2 | [0][2] (2 MSBs), [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 LSBs) |
5 | [2][2] (2 MSBs), [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 LSBs) |
Il confronto dei colori usato in BC1 per determinare se il texel è trasparente non viene usato con questi formati. Si presuppone che senza il colore, il confronto dei dati di colore viene sempre considerato come se fosse in modalità a 4 colori.
Argomenti correlati
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per