Tekstur alfa buram dan 1-bit

Format tekstur BC1 adalah untuk tekstur yang buram atau memiliki satu warna transparan.

Untuk setiap blok alfa buram atau 1-bit, dua nilai 16-bit (format RGB 5:6:5) dan bitmap 4x4 dengan 2 bit per piksel disimpan. Ini total 64 bit untuk 16 texel, atau empat bit per texel. Dalam bitmap blok, ada 2 bit per texel untuk dipilih di antara empat warna, dua di antaranya disimpan dalam data yang dikodekan. Dua warna lainnya berasal dari warna yang disimpan ini dengan interpolasi linier. Tata letak ini diperlihatkan dalam diagram berikut.

diagram of the bitmap layout

Format alfa 1-bit dibedakan dari format buram dengan membandingkan dua nilai warna 16-bit yang disimpan dalam blok. Mereka diperlakukan sebagai bilangan bulat yang tidak ditandatangani. Jika warna pertama lebih besar dari yang kedua, itu menyiratkan bahwa hanya texel buram yang didefinisikan. Ini berarti empat warna digunakan untuk mewakili texel. Dalam pengodean empat warna, ada dua warna turunan dan keempat warna didistribusikan secara merata dalam ruang warna RGB. Format ini dianalogikan dengan format RGB 5:6:5. Jika tidak, untuk transparansi alfa 1-bit, tiga warna digunakan dan yang keempat dicadangkan untuk mewakili texel transparan.

Dalam pengodean tiga warna, ada satu warna turunan dan kode 2-bit keempat dicadangkan untuk menunjukkan texel transparan (informasi alfa). Format ini dianalogikan dengan RGBA 5:5:5:1, di mana bit akhir digunakan untuk mengodekan masker alfa.

Contoh kode berikut mengilustrasikan algoritma untuk memutuskan apakah pengodean tiga atau empat warna dipilih:

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;    

}

Disarankan agar Anda mengatur komponen RGBA dari piksel transparansi ke nol sebelum memadukan.

Tabel berikut menunjukkan tata letak memori untuk blok 8-byte. Diasumsikan bahwa indeks pertama sesuai dengan koordinat y dan yang kedua sesuai dengan koordinat x. Misalnya, Texel[1][2] mengacu pada piksel peta tekstur pada (x,y) = (2,1).

Berikut ini adalah tata letak memori untuk blok 8-byte (64-bit):

Alamat word Kata 16-bit
0 Color_0
1 Color_1
2 Bitmap Word_0
3 Bitmap Word_1

 

Color_0 dan Color_1, warna pada dua ekstrem, ditata sebagai berikut:

Bit Warna
4:0 (LSB*) Komponen warna biru
10:5 Komponen warna hijau
15:11 Komponen warna merah

 

*bit paling tidak signifikan

Bitmap Word_0 ditata sebagai berikut:

Bit Texel
1:0 (LSB) Texel[0][0]
3:2 Texel[0][1]
5:4 Texel[0][2]
7:6 Texel[0][3]
9:8 Texel[1][0]
11:10 Texel[1][1]
13:12 Texel[1][2]
15:14 (MSB*) Texel[1][3]

 

*bit paling signifikan (MSB)

Bitmap Word_1 ditata sebagai berikut:

Bit Texel
1:0 (LSB) Texel[2][0]
3:2 Texel[2][1]
5:4 Texel[2][2]
7:6 Texel[2][3]
9:8 Texel[3][0]
11:10 Texel[3][1]
13:12 Texel[3][2]
15:14 (MSB) Texel[3][3]

 

Contoh pengodean warna buram

Sebagai contoh pengodean buram, asumsikan bahwa warna merah dan hitam berada di ekstrem. Merah color_0, dan hitam color_1. Ada empat warna terinterpolasi yang membentuk gradien yang didistribusikan secara seragam di antaranya. Untuk menentukan nilai untuk bitmap 4x4, perhitungan berikut digunakan:

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

Bitmap kemudian terlihat seperti diagram berikut.

Diagram of the expanded bitmap layout for Red and Black.

Ini terlihat seperti rangkaian warna yang diilustrasikan berikut.

Catatan Dalam gambar, piksel (0,0) muncul di kiri atas.

 

illustration of an opaque encoded gradient

Contoh pengodean alfa 1-bit

Format ini dipilih ketika bilangan bulat 16-bit yang tidak ditandatangani, color_0, kurang dari bilangan bulat 16-bit yang tidak ditandatangani, color_1. Contoh di mana format ini dapat digunakan adalah daun di pohon, ditunjukkan pada langit biru. Beberapa texel dapat ditandai sebagai transparan sementara tiga nuansa hijau masih tersedia untuk daun. Dua warna memperbaiki ekstrem, dan yang ketiga adalah warna terinterpolasi.

Ilustrasi berikut adalah contoh gambar seperti itu.

illustration of 1-bit alpha encoding

Di mana gambar ditampilkan sebagai putih, texel akan dikodekan sebagai transparan. Komponen RGBA dari texel transparan harus diatur ke nol sebelum memadukan.

Pengodean bitmap untuk warna dan transparansi ditentukan menggunakan perhitungan berikut.

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

Bitmap kemudian terlihat seperti diagram berikut.

Diagram of the expanded bitmap layout for lighter green and darker green.

Sumber daya tekstur terkompresi