texm3x3spec - ps
Effectue une multiplication de matrices 3x3 et utilise le résultat pour effectuer une recherche de texture. Cela peut être utilisé pour la réflexion spéculaire et le mappage de l’environnement. texm3x3spec doit être utilisé conjointement avec deux instructions texm3x3pad - ps .
Syntaxe
texm3x3spec dst, src0, src1 |
---|
where
- dst est le registre de destination.
- src0 et src1 sont des registres sources.
Notes
Versions du nuanceur de pixels | 1_1 | 1_2 | 1_3 | 1_4 | 2_0 | 2_x | 2_sw | 3_0 | 3_sw |
---|---|---|---|---|---|---|---|---|---|
texm3x3spec | x | x | x |
Cette instruction effectue la dernière ligne d’une multiplication de matrices 3x3, utilise le vecteur résultant comme vecteur normal pour refléter un vecteur de rayons oculaires, puis utilise le vecteur réfléchi pour effectuer une recherche de texture. Le nuanceur lit le vecteur de rayons oculaires à partir d’un registre constant. La multiplication de matrices 3x3 est généralement utile pour orienter un vecteur normal vers l’espace tangent correct pour la surface en cours de rendu.
La matrice 3x3 est composée des coordonnées de texture de la troisième étape de texture et des deux étapes de texture précédentes. Le vecteur post-réflexion résultant (u,v,w) est utilisé pour échantillonner la texture à l’étape de texture finale. Toute texture affectée aux deux étapes de texture précédentes est ignorée.
Cette instruction doit être utilisée avec deux instructions texm3x3pad. Les registres de texture doivent utiliser la séquence suivante.
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
texm3x3spec t(m+2), t(n), c0 // Perform third row of matrix multiply
// Then do a texture lookup on the texture
// associated with texture stage m+2
La première instruction texm3x3pad exécute la première ligne de la multiplication pour rechercher u'.
u' = TextureCoordinates(étape m)UVW * t(n)RVB
La deuxième instruction texm3x3pad effectue la deuxième ligne de la multiplication pour rechercher v'.
v' = TextureCoordinates(étape m+1)UVW * t(n)RVB
L’instruction texm3x3spec effectue la troisième ligne de la multiplication pour rechercher w'.
w' = TextureCoordinates(étape m+2)UVW * t(n)RVB
L’instruction texm3x3spec effectue ensuite un calcul de réflexion.
(u' , v' , w' ) = 2*[(N*E)/(N*N)]*N - E
où le N normal est donné par
N = (u' , v' , w' )
et le vecteur de rayons oculaires E est donné par le registre constant
E = c# (Toute constante register---c0, c1, c2, etc.--peut être utilisée)
Enfin, l’instruction texm3x3spec échantillonne t(m+2) avec (u',v',w') et stocke le résultat dans t(m+2).
t(m+2)RVBA = TextureSample(étape m+2)RGBA utilisant (u' , v' , w' ) comme coordonnées
Exemples
Voici un exemple de nuanceur avec les mappages de texture et les étapes de texture identifiées.
ps_1_1
tex t0 // Bind texture in stage 0 to register t0 (tn must
// be defined in some way before it is used)
texm3x3pad t1, t0 // First row of matrix multiply
texm3x3pad t2, t0 // Second row of matrix multiply
texm3x3spec t3, t0, c# // Third row of matrix multiply to get a 3-vector
// Reflect 3-vector by the eye-ray vector in c#
// Use reflected vector to lookup texture in
// stage 3
mov r0, t3 // Output the result
Cet exemple nécessite la configuration de l’étape de texture suivante.
- L’étape 0 se voit attribuer une carte de texture avec des données normales. Il s’agit souvent d’une carte de bosses. Les données sont des normales (XYZ) pour chaque texel. Les coordonnées de texture à l’étape n définissent où échantillonner cette carte normale.
- Le jeu de coordonnées de texture m est attribué à la ligne 1 de la matrice 3x3. Toute texture affectée à l’étape m est ignorée.
- Le jeu de coordonnées de texture m+1 est attribué à la ligne 2 de la matrice 3x3. Toute texture affectée à l’étape m+1 est ignorée.
- Le jeu de coordonnées de texture m+2 est affecté à la ligne 3 de la matrice 3x3. L’étape m+2 est affectée à une carte de texture de volume ou de cube. La texture fournit des données de couleur (RVBA).
- Le vecteur de rayons oculaires E est donné par un registre constant E = c#.
Rubriques connexes