texm3x3spec - ps

Realiza una multiplicación de matriz 3x3 y usa el resultado para realizar una búsqueda de texturas. Esto se puede usar para la reflexión especular y la asignación de entornos. texm3x3spec debe usarse junto con dos texm3x3pad - instrucciones ps .

Sintaxis

texm3x3spec dst, src0, src1

 

where

  • dst es el registro de destino.
  • src0 y src1 son registros de origen.

Comentarios

Versiones del sombreador de píxeles 1_1 1_2 1_3 1_4 2_0 2_x 2_sw 3_0 3_sw
texm3x3spec x x x

 

Esta instrucción realiza la fila final de una multiplicación de matriz 3x3, usa el vector resultante como vector normal para reflejar un vector de rayos oculares y, a continuación, usa el vector reflejado para realizar una búsqueda de textura. El sombreador lee el vector de rayos oculares de un registro constante. La multiplicación de matriz 3x3 suele ser útil para orientar un vector normal al espacio tangente correcto para la superficie que se representa.

La matriz 3x3 consta de las coordenadas de textura de la tercera fase de textura y las dos fases de textura anteriores. El vector de reflexión posterior resultante (u,v,w) se usa para muestrear la textura en la fase final de textura. Se omite cualquier textura asignada a las dos fases de textura anteriores.

Esta instrucción debe usarse con dos instrucciones de texm3x3pad. Los registros de textura deben usar la secuencia siguiente.

 
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 primera instrucción texm3x3pad realiza la primera fila de la multiplicación para buscar u'.

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

La segunda instrucción texm3x3pad realiza la segunda fila de la multiplicación para buscar v'.

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

La instrucción texm3x3spec realiza la tercera fila de la multiplicación para buscar w'.

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

A continuación, la instrucción texm3x3spec realiza un cálculo de reflexión.

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

donde el N normal se da mediante

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

y el vector de rayos oculares E lo da el registro constante

E = c# (se puede usar cualquier constante register--c0, c1, c2, etc.-)

Por último, las muestras de instrucciones texm3x3spec t(m+2) con (u',v',w') y almacenan el resultado en t(m+2).

t(m+2)RGBA = TextureSample(stage m+2)RGBA using (u' , v' , w' ) as coordinates

Ejemplos

Este es un sombreador de ejemplo con los mapas de textura y las fases de textura identificadas.

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

En este ejemplo se requiere la siguiente configuración de la fase de textura.

  • A la fase 0 se le asigna un mapa de texturas con datos normales. Esto se conoce a menudo como un mapa de golpes. Los datos son normales (XYZ) para cada elemento de textura. Las coordenadas de textura en la fase n definen dónde muestrear este mapa normal.
  • El conjunto de coordenadas de textura m se asigna a la fila 1 de la matriz 3x3. Se omite cualquier textura asignada a la fase m.
  • El conjunto de coordenadas de textura m+1 se asigna a la fila 2 de la matriz 3x3. Se omite cualquier textura asignada a la fase m+1.
  • El conjunto de coordenadas de textura m+2 se asigna a la fila 3 de la matriz 3x3. A la fase m+2 se le asigna un mapa de textura de volumen o cubo. La textura proporciona datos de color (RGBA).
  • El vector de rayos oculares E lo da un registro constante E = c#.

Instrucciones del sombreador de píxeles