Bagikan melalui


texbem - ps

Terapkan transformasi peta lingkungan benjolan palsu. Ini dicapai dengan memodifikasi data alamat tekstur register tujuan, menggunakan data perturbasi alamat (du,dv), dan matriks lingkungan benjolan 2D.

Sintaks

texbem 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
texbem x x x

 

Data warna merah dan hijau dalam register src ditafsirkan sebagai data perturbasi (du,dv).

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, dan digunakan untuk mengambil sampel tahap tekstur saat ini.

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 yang ditandatangani. Data format campuran hanya berfungsi jika dua saluran pertama berisi data yang ditandatangani. Untuk informasi selengkapnya tentang format permukaan, lihat D3DFORMAT.

Ini dapat digunakan untuk berbagai teknik berdasarkan perturbasi alamat, termasuk pemetaan lingkungan per piksel palsu dan pencahayaan difus (pemetaan benjolan).

Saat menggunakan instruksi ini, texture register harus mengikuti urutan berikut.

// The texture assigned to stage t(n) contains the (du,dv) data
// The texture assigned to stage t(m) is sampled
tex     t(n)                    
texbem  t(m),  t(n)      where m > n

Perhitungan yang dilakukan dalam instruksi ditunjukkan di bawah ini.

// 1. New values for texture addresses (u',v') are calculated
// 2. Sample the texture using (u',v')

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

Daftarkan data yang telah dibaca oleh texbem - ps atau texbeml - instruksi ps tidak dapat dibaca nanti, kecuali oleh texbem lain - ps atau texbeml - ps.

// 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
texbem t1, t0       ; Compute (u',v')
                    ; Sample t1 using (u',v')
mov r0, t1          ; Output result

texbem memerlukan tekstur berikut dalam tahap tekstur berikut.

  • Tahap 0 diberi peta benjolan dengan data perturbasi (du, dv).
  • Tahap 1 menggunakan peta tekstur dengan data warna.
  • Instruksi ini 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.

Instruksi Pixel Shader