Compartilhar via


texm3x3vspec - ps

Executa uma multiplicação de matriz 3x3 e usa o resultado para executar uma pesquisa de textura. Isso pode ser usado para reflexão especular e mapeamento de ambiente em que o vetor de raios oculares não é constante. texm3x3vspec deve ser usado em conjunto com dois texm3x3pad – instruções ps . Se o vetor de raios oculares for constante, a instrução texm3x3spec - ps executará a mesma multiplicação de matriz e pesquisa de textura.

Sintaxe

texm3x3vspec dst, src

 

onde

  • dst é o registro de destino.
  • src é um registro de origem.

Comentários

Versões do sombreador de pixel 1_1 1_2 1_3 1_4 2_0 2_x 2_sw 3_0 3_sw
texm3x3vspec x x x

 

Esta instrução executa a linha final de uma operação de multiplicação de matriz 3x3, interpreta o vetor resultante como um vetor normal para refletir um vetor de raios oculares e, em seguida, usa o vetor refletido como um endereço de textura para uma pesquisa de textura. Funciona exatamente como texm3x3spec - ps, exceto que o vetor de raios oculares é retirado do quarto componente das coordenadas de textura. A multiplicação de matriz 3x3 normalmente é útil para orientar um vetor normal para o espaço tangente correto para a superfície que está sendo renderizada.

A matriz 3x3 é composta pelas coordenadas de textura do terceiro estágio de textura e os dois estágios de textura anteriores. O UVW (vetor pós-reflexão) resultante é usado para amostrar a textura no estágio 3. Qualquer textura atribuída aos dois estágios de textura anteriores é ignorada.

Esta instrução deve ser usada com a instrução texm3x3pad. Os registros de textura devem usar a sequência a seguir.

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

A primeira instrução texm3x3pad executa a primeira linha da multiplicação para localizar u'.

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

A segunda instrução texm3x3pad executa a segunda linha da multiplicação para localizar v'.

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

A instrução texm3x3spec executa a terceira linha da multiplicação para localizar w'.

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

A instrução texm3x3vspec também faz um cálculo de reflexão.

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

em que o N normal é dado por

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

e o vetor de raios oculares E é dado por

E = (TextureCoordinates(stage m)Q ,

TextureCoordinates(stage m+1)Q ,

TextureCoordinates(stage m+2)Q )

Por fim, a instrução texm3x3vspec mostra t(m+2) com (u',v',w')e armazena o resultado em t(m+2).

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

Exemplos

Aqui está um sombreador de exemplo com os mapas de textura identificados e os estágios de textura identificados.

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

Este exemplo requer a configuração do estágio de textura a seguir.

  • A fase 0 recebe um mapa de textura com dados normais. Isso geralmente é conhecido como um mapa de colisão. Os dados são normais (XYZ) para cada texel. As coordenadas de textura no estágio n definem como amostrar esse mapa normal.
  • O conjunto de coordenadas de textura m é atribuído à linha 1 da matriz 3x3. Qualquer textura atribuída ao estágio m é ignorada.
  • O conjunto de coordenadas de textura m+1 é atribuído à linha 2 da matriz 3x3. Qualquer textura atribuída ao estágio m+1 é ignorada.
  • O conjunto de coordenadas de textura m+2 é atribuído à linha 3 da matriz 3x3. O estágio m+2 recebe um mapa de textura de volume ou cubo. A textura fornece dados de cor (RGBA).
  • O vetor de raios oculares E é passado para a instrução no quarto componente (q) dos dados de coordenadas de textura nos estágios m, m+1 e m+2.

Instruções de sombreador de pixel