texm3x3vspec - ps

Esegue una matrice 3x3 moltiplica e usa il risultato per eseguire una ricerca di trama. Questo può essere usato per la reflection speculare e il mapping dell'ambiente in cui il vettore di raggio oculare non è costante. texm3x3vspec deve essere usato insieme a due texm3x3pad - istruzioni ps . Se il vettore a raggi oculari è costante, l'istruzione texm3x3spec - ps eseguirà la stessa ricerca matrice e trama.

Sintassi

texm3x3vspec dst, src

 

dove

  • dst è il registro di destinazione.
  • src è un registro di origine.

Commenti

Versioni di Pixel shader 1_1 1_2 1_3 1_4 2_0 2_x 2_sw 3_0 3_sw
texm3x3vspec x x x

 

Questa istruzione esegue la riga finale di un'operazione di moltiplicazione della matrice 3x3, interpreta il vettore risultante come vettore normale per riflettere un vettore a raggio oculare e quindi usa il vettore riflesso come indirizzo di trama per una ricerca trama. Funziona proprio come texm3x3spec - ps, ad eccezione del fatto che il vettore di raggio oculare viene preso dal quarto componente delle coordinate della trama. La moltiplicazione della matrice 3x3 è in genere utile per orientare un vettore normale allo spazio tangente corretto per il rendering della superficie.

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 (UVW) viene usato per campionire la trama nella fase 3. Tutte le trame assegnate alle due fasi di trama precedenti vengono ignorate.

Questa istruzione deve essere usata con l'istruzione texm3x3pad. I registri trama 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
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

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(fase m+1)UVW * t(n)RGB

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

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

L'istruzione texm3x3vspec esegue anche un calcolo di reflection.

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

dove la normale N viene data da

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

e il vettore di raggio oculare E viene dato da

E = (TextureCoordinates(fase m)Q ,

TextureCoordinates(fase m+1)Q ,

TextureCoordinates(fase m+2)Q )

Infine, gli esempi di istruzioni texm3x3vspec 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 di trama identificate e le fasi della trama identificate.

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

Questo esempio richiede la configurazione della fase di trama seguente.

  • La fase 0 viene assegnata una mappa della trama con dati normali. Questo è spesso definito mappa di urto. I dati sono normali (XYZ) per ogni texel. Le coordinate della trama nella fase n definiscono come eseguire l'esempio di questa normale mappa.
  • Il set di coordinate 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 trama m+2 viene assegnato alla riga 3 della matrice 3x3. La fase m+2 viene assegnata una mappa di trama del volume o del cubo. La trama fornisce dati di colore (RGBA).
  • Il vettore oculare E viene passato all'istruzione nel quarto componente (q) dei dati delle coordinate della trama in fasi m, m+1 e m+2.

Istruzioni sul pixel shader