Condividi tramite


texm3x3spec - ps

Esegue una moltiplicazione di una matrice 3x3 e usa il risultato per eseguire una ricerca di trama. Questa opzione può essere usata per la reflection speculare e il mapping dell'ambiente. texm3x3spec deve essere usato insieme a due texm3x3pad - istruzioni ps .

Sintassi

texm3x3spec dst, src0, src1

 

dove

  • dst è il registro di destinazione.
  • src0 e src1 sono registri di origine.

Commenti

Versioni del pixel shader 1_1 1_2 1_3 1_4 2_0 2_x 2_sw 3_0 3_sw
texm3x3spec x x x

 

Questa istruzione esegue la riga finale di una moltiplicazione di una matrice 3x3, usa il vettore risultante come vettore normale per riflettere un vettore di raggio oculare e quindi usa il vettore riflesso per eseguire una ricerca di trama. Lo shader legge il vettore del raggio oculare da un registro costante. La moltiplicazione della matrice 3x3 è in genere utile per orientare un vettore normale allo spazio tangente corretto per la superficie di cui viene eseguito il rendering.

La matrice 3x3 è costituita dalle coordinate della trama della terza fase della trama e dalle due fasi precedenti della trama. Il vettore post reflection risultante (u,v,w) viene usato per campionare la trama nella fase finale della trama. Tutte le trame assegnate alle due fasi precedenti della trama vengono ignorate.

Questa istruzione deve essere usata con due istruzioni texm3x3pad. I registri delle trame devono usare la sequenza seguente.

 
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 prima istruzione texm3x3pad esegue la prima riga della moltiplicazione per trovare u'.

u' = TextureCoordinates(stage m)UVW * t(n)RGB

La seconda istruzione texm3x3pad esegue la seconda riga della moltiplicazione per trovare v'.

v' = TextureCoordinates(stage m+1)UVW * t(n)RGB

L'istruzione texm3x3spec esegue la terza riga della moltiplicazione per trovare w'.

w' = TextureCoordinates(stage m+2)UVW * t(n)RGB

L'istruzione texm3x3spec esegue quindi un calcolo di reflection.

(u' , v' , w' ) = 2*[(N*E)/(N*N)]*N - E

dove la N normale è data da

N = (u' , v' , w' )

e il vettore del raggio oculare E è dato dal registro costante

E = c# (qualsiasi costante register--c0, c1, c2 e così via)

Infine, gli esempi di istruzioni texm3x3spec t(m+2) con (u',v',w') e archiviano il risultato in t(m+2).

t(m+2)RGBA = TextureSample(stage m+2)RGBA usando (u' , v' , w' ) come coordinate

Esempio

Ecco un esempio di shader con le mappe delle trame e le fasi della trama identificate.

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

Questo esempio richiede la configurazione della fase di trama seguente.

  • Alla fase 0 viene assegnata una mappa delle trame con dati normali. Questa operazione viene spesso definita mappa d'urto. I dati sono normali (XYZ) per ogni texel. Le coordinate delle trame nella fase n definiscono dove campionare questa mappa normale.
  • Il set di coordinate della trama m viene assegnato alla riga 1 della matrice 3x3. Qualsiasi trama assegnata alla fase m viene ignorata.
  • Il set di coordinate della trama m+1 viene assegnato alla riga 2 della matrice 3x3. Qualsiasi trama assegnata alla fase m+1 viene ignorata.
  • Il set di coordinate della trama m+2 viene assegnato alla riga 3 della matrice 3x3. Alla fase m+2 viene assegnata una mappa del volume o della trama del cubo. La trama fornisce dati di colore (RGBA).
  • Il vettore del raggio oculare E viene fornito da un registro costante E = c#.

Istruzioni per pixel shader