Tekstur alfa buram dan 1-bit
Format tekstur BC1 adalah untuk tekstur 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 oleh interpolasi linier. Tata letak ini diperlihatkan dalam diagram berikut.
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 ditentukan. 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.
Ini terlihat seperti rangkaian warna yang diilustrasikan berikut ini.
Catatan Dalam gambar, piksel (0,0) muncul di kiri atas.
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, yang 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.
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.
Topik terkait
Sumber daya tekstur terkompresi
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk