Tekstur dengan saluran alfa

Ada dua cara untuk mengodekan peta tekstur yang menunjukkan transparansi yang lebih kompleks. Dalam setiap kasus, blok yang menjelaskan transparansi mendahului blok 64-bit yang sudah dijelaskan. Transparansi direpresentasikan sebagai bitmap 4x4 dengan 4 bit per piksel (pengodean eksplisit), atau dengan lebih sedikit bit dan interpolasi linier yang dianalogikan dengan apa yang digunakan untuk pengodean warna.

Blok transparansi dan blok warna disusun seperti yang diperlihatkan dalam tabel berikut.

alamat Word Blok 64-bit
3:0 Blok transparansi
7:4 Blok 64-bit yang dijelaskan sebelumnya

Pengodean tekstur eksplisit

Untuk pengodean tekstur eksplisit (format BC2), komponen alfa texel yang menjelaskan transparansi dikodekan dalam bitmap 4x4 dengan 4 bit per texel. Empat bit ini dapat dicapai melalui berbagai cara seperti dithering atau dengan menggunakan empat bit paling signifikan dari data alfa. Namun mereka diproduksi, mereka digunakan sama seperti mereka, tanpa bentuk interpolasi.

Diagram berikut menunjukkan blok transparansi 64-bit.

diagram blok transparansi 64-bit

Catatan Metode kompresi Direct3D menggunakan empat bit yang paling signifikan.

 

Tabel berikut menggambarkan bagaimana informasi alfa ditata dalam memori, untuk setiap kata 16-bit.

Tata letak untuk kata 0:

Bit Alpha
3:0 (LSB*) [0] [0]
7:4 [0] [1]
11:8 [0] [2]
15:12 (MSB*) [0] [3]

 

*bit paling tidak signifikan, bit paling signifikan (MSB)

Tata letak untuk kata 1:

Bit Alpha
3:0 (LSB) [1] [0]
7:4 [1] [1]
11:8 [1] [2]
15:12 (MSB) [1] [3]

 

Tata letak untuk kata 2:

Bit Alpha
3:0 (LSB) [2] [0]
7:4 [2] [1]
11:8 [2] [2]
15:12 (MSB) [2] [3]

 

Tata letak untuk kata 3:

Bit Alpha
3:0 (LSB) [3] [0]
7:4 [3] [1]
11:8 [3] [2]
15:12 (MSB) [3] [3]

 

Perbandingan warna yang digunakan dalam BC1 untuk menentukan apakah texel transparan tidak digunakan dalam format ini. Diasumsikan bahwa tanpa perbandingan warna data warna selalu diperlakukan seolah-olah dalam mode 4 warna.

Interpolasi alfa linear tiga-bit

Pengodean transparansi untuk format BC3 didasarkan pada konsep yang mirip dengan pengodean linier yang digunakan untuk warna. Dua nilai alfa 8-bit dan bitmap 4x4 dengan tiga bit per piksel disimpan dalam delapan byte pertama blok. Nilai alfa perwakilan digunakan untuk menginterpolasi nilai alfa menengah. Informasi tambahan tersedia dengan cara dua nilai alfa disimpan. Jika alpha_0 lebih besar dari alpha_1, enam nilai alfa perantara dibuat oleh interpolasi. Jika tidak, empat nilai alfa menengah diinterpolasi antara alfa ekstrem yang ditentukan. Dua nilai alfa implisit tambahan adalah 0 (sepenuhnya transparan) dan 255 (buram penuh).

Contoh kode berikut mengilustrasikan algoritma ini.

// 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
}

Tata letak memori blok alfa adalah sebagai berikut:

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)

 

Perbandingan warna yang digunakan dalam BC1 untuk menentukan apakah texel transparan tidak digunakan dengan format ini. Diasumsikan bahwa tanpa perbandingan warna data warna selalu diperlakukan seolah-olah dalam mode 4 warna.

Sumber daya tekstur terkompresi