texm3x3vspec - ps
Melakukan perkalian matriks 3x3 dan menggunakan hasilnya untuk melakukan pencarian tekstur. Ini dapat digunakan untuk refleksi spekular dan pemetaan lingkungan di mana vektor sinar mata tidak konstan. texm3x3vspec harus digunakan bersama dengan dua texm3x3pad - instruksi ps . Jika vektor sinar mata konstan, instruksi texm3x3spec - ps akan melakukan penggandaan matriks dan pencarian tekstur yang sama.
Sintaks
texm3x3vspec 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 |
---|---|---|---|---|---|---|---|---|---|
texm3x3vspec | x | x | x |
Instruksi ini melakukan baris akhir operasi perkalian matriks 3x3, menafsirkan vektor yang dihasilkan sebagai vektor normal untuk mencerminkan vektor sinar mata, lalu menggunakan vektor yang tercermin sebagai alamat tekstur untuk pencarian tekstur. Ini berfungsi seperti texm3x3spec - ps, kecuali bahwa vektor sinar mata diambil dari komponen keempat dari koordinat tekstur. Perkalian matriks 3x3 biasanya berguna untuk mengorientasikan vektor normal ke ruang tangen yang benar untuk permukaan yang dirender.
Matriks 3x3 terdiri dari koordinat tekstur tahap tekstur ketiga dan dua tahap tekstur sebelumnya. Vektor pasca pantulan (UVW) yang dihasilkan digunakan untuk mengambil sampel tekstur di tahap 3. Tekstur apa pun yang ditetapkan ke dua tahap tekstur sebelumnya diabaikan.
Instruksi ini harus digunakan dengan instruksi texm3x3pad. Register tekstur harus menggunakan urutan berikut.
tex t(n) // Define tn as a standard 3-vector (tn must
// be defined in some way before it is used)
texm3x3pad t(m), t(n) // where m > n
// Perform first row of matrix multiply
texm3x3pad t(m+1), t(n) // Perform second row of matrix multiply
texm3x3vspec t(m+2), t(n) // Perform third row of matrix multiply
// Then do a texture lookup on the texture
// associated with texture stage m+2
Instruksi texm3x3pad pertama melakukan baris pertama perkalian untuk menemukan u'.
u' = TextureCoordinates(stage m)UVW * t(n) RGB
Instruksi texm3x3pad kedua melakukan baris kedua dari perkalian untuk menemukan v'.
v' = TextureCoordinates(stage m+1)UVW * t(n)RGB
Instruksi texm3x3spec melakukan baris ketiga dari perkalian untuk menemukan w'.
w' = TextureCoordinates(stage m+2)UVW * t(n)RGB
Instruksi texm3x3vspec juga melakukan perhitungan pantulan.
(u' , v' , w' ) = 2*[(N*E)/(N*N)]*N - E
di mana N normal diberikan oleh
N = (u' , v' , w' )
dan vektor sinar mata E diberikan oleh
E = (TextureCoordinates(stage m)Q ,
TextureCoordinates(stage m+1)Q ,
TextureCoordinates(stage m+2)Q )
Terakhir, sampel instruksi texm3x3vspec t(m+2) dengan (u',v',w')dan menyimpan hasilnya dalam t(m+2).
t(m+2)RGBA = TextureSample(stage m+2)RGBA menggunakan (u' , v' , w' ) sebagai koordinat
Contoh
Berikut adalah contoh shader dengan peta tekstur yang diidentifikasi dan tahap tekstur diidentifikasi.
ps_1_1
tex t0 // Bind texture in stage 0 to register t0
texm3x3pad t1, t0 // First row of matrix multiply
texm3x3pad t2, t0 // Second row of matrix multiply
texm3x3vspec t3, t0 // Third row of matrix multiply to get a 3-vector
// Reflect 3-vector by the eye-ray vector
// Use reflected vector to do a texture lookup
// at stage 3
mov r0, t3 // Output the result
Contoh ini memerlukan penyiapan tahap tekstur berikut.
- Tahap 0 diberi peta tekstur dengan data normal. Ini sering disebut sebagai peta benjolan. Data adalah (XYZ) normal untuk setiap texel. Koordinat tekstur pada tahap n menentukan cara mengambil sampel peta normal ini.
- Kumpulan koordinat tekstur m ditetapkan ke baris 1 dari matriks 3x3. Tekstur apa pun yang ditetapkan untuk tahap m diabaikan.
- Kumpulan koordinat tekstur m+1 ditetapkan ke baris 2 dari matriks 3x3. Tekstur apa pun yang ditetapkan ke tahap m+1 diabaikan.
- Kumpulan koordinat tekstur m+2 ditetapkan ke baris 3 dari matriks 3x3. Tahap m+2 diberi peta tekstur volume atau kubus. Tekstur menyediakan data warna (RGBA).
- Vektor sinar mata E diteruskan ke dalam instruksi dalam komponen keempat (q) data koordinat tekstur pada tahap m, m+1, dan m+2.
Topik terkait