texbeml - ps
Terapkan transformasi peta lingkungan benjolan palsu dengan koreksi luminance. Hal ini dicapai dengan memodifikasi data alamat tekstur register tujuan, menggunakan data perturbasi alamat (du,dv), matriks lingkungan benjolan 2D, dan luminance.
Sintaks
texbeml dst, src |
---|
Di mana
- dst adalah register tujuan.
- src adalah register sumber.
Keterangan
Versi shader piksel | 1_1 | 1_2 | 1_3 | 1_4 | 2_0 | 2_x | 2_sw | 3_0 | 3_sw |
---|---|---|---|---|---|---|---|---|---|
texbeml | x | x | x |
Data warna merah dan hijau dalam register src ditafsirkan sebagai data perturbasi (du,dv). Data warna biru dalam register src ditafsirkan sebagai data luminance.
Instruksi ini mengubah komponen merah dan hijau dalam register sumber menggunakan matriks pemetaan lingkungan benjolan 2D. Hasilnya ditambahkan ke kumpulan koordinat tekstur yang sesuai dengan nomor register tujuan. Koreksi luminans diterapkan menggunakan nilai luminance dan nilai tahap tekstur bias. Hasilnya digunakan untuk mengambil sampel tahap tekstur saat ini.
Ini dapat digunakan untuk berbagai teknik berdasarkan perturbasi alamat seperti pemetaan lingkungan per piksel palsu.
Operasi ini selalu menafsirkan du dan dv sebagai jumlah yang ditandatangani. Untuk versi 1_0 dan 1_1, pengubah input Penskalaan Bertanda Tangan Register Sumber (_bx2) tidak diizinkan pada argumen input.
Instruksi ini menghasilkan hasil yang ditentukan ketika tekstur input berisi data format campuran. Untuk informasi selengkapnya tentang format permukaan, lihat D3DFORMAT.
// When using this instruction, texture registers must follow
// the following sequence:
// The texture assigned to stage tn contains the (du,dv) data
// The texture assigned to stage t(m) is sampled
tex t(n)
texbeml t(m), t(n) where m > n
Contoh ini menunjukkan perhitungan yang dilakukan dalam instruksi.
// 1. New values for texture addresses (u',v') are calculated
// 2. Sample the texture using (u',v')
// 3. Luminance correction is applied
u' = TextureCoordinates(stage m)u +
D3DTSS_BUMPENVMAT00(stage m)*t(n)R +
D3DTSS_BUMPENVMAT10(stage m)*t(n)G
v' = TextureCoordinates(stage m)v +
D3DTSS_BUMPENVMAT01(stage m)*t(n)R +
D3DTSS_BUMPENVMAT11(stage m)*t(n)G
t(m)RGBA = TextureSample(stage m) menggunakan (u',v') sebagai koordinat
t(m)RGBA = t(m)RGBA *
[(t(n)B * D3DTSS_BUMPENVLSCALE(tahap m)) +
D3DTSS_BUMPENVLOFFSET(tahap m)]
Mendaftarkan data yang telah dibaca oleh instruksi texbem atau texbeml tidak dapat dibaca nanti, kecuali oleh texbem atau texbeml lain.
// This example demonstrates the validation error caused by
// t0 being reread
ps_1_1
tex t0
texbem t1, t0
add r0, t1, t0
(Instruction Error) (Statement 4) Register data that has been read by
texbem or texbeml instruction cannot be read by other instructions
Contoh
Berikut adalah contoh shader dengan peta tekstur yang diidentifikasi dan tahap tekstur yang diidentifikasi.
ps_1_1
tex t0 ; Define t0 to get a 2-tuple DuDv
texbeml t1, t0 ; Compute (u',v')
; Apply luminance correction
; Sample t1 using (u',v')
mov r0, t1 ; Output result
Contoh ini memerlukan tekstur berikut dalam tahap tekstur berikut.
- Tahap 0 diberi peta benjolan dengan data perturbasi (du, dv).
- Tahap 1 diberi peta tekstur dengan data warna.
- texbeml mengatur data matriks pada tahap tekstur yang diambil sampelnya. Ini berbeda dari fungsionalitas alur fungsi tetap di mana data perturbasi dan matriks menempati tahap tekstur yang sama.
Topik terkait