다음을 통해 공유


texm3x3vspec - ps

3x3 행렬 곱셈을 수행하고 그 결과를 사용하여 텍스처 조회를 수행합니다. 이는 눈 광선 벡터가 일정하지 않은 정반사 및 환경 매핑에 사용할 수 있습니다. texm3x3vspec은 두 개의 texm3x3pad - ps 명령과 함께 사용해야 합니다. 눈 광선 벡터가 일정하면 texm3x3spec - ps 명령은 동일한 행렬 곱셈 및 텍스처 조회를 수행합니다.

Syntax

texm3x3vspec dst, src

 

라는 설치 관리자 실행 파일에 포함됩니다. 여기서

  • dst는 대상 레지스터입니다.
  • src는 원본 레지스터입니다.

설명

픽셀 셰이더 버전 1_1 1_2 1_3 1_4 2_0 2_x 2_sw 3_0 3_sw
texm3x3vspec x x x

 

이 명령은 3x3 행렬 곱셈 연산의 마지막 행을 수행하고 결과 벡터를 법선 벡터로 해석하여 눈 광선 벡터를 반영한 다음 반사된 벡터를 텍스처 조회를 위한 텍스처 주소로 사용합니다. texm3x3spec - ps와 동일하게 작동하지만 눈 광선 벡터는 텍스처 좌표의 네 번째 성분에서 가져옵니다. 3x3 행렬 곱은 일반적으로 렌더링되는 표면의 올바른 탄젠트 공간에 법선 벡터의 방향을 지정하는 데 유용합니다.

3x3 행렬은 세 번째 텍스처 단계와 이전 두 텍스처 단계의 텍스처 좌표로 구성됩니다. 결과 반사 후 벡터(UVW)는 3단계에서 텍스처를 샘플링하는 데 사용됩니다. 이전 두 텍스처 단계에 할당된 모든 텍스처는 무시됩니다.

이 명령은 texm3x3pad 명령과 함께 사용해야 합니다. 텍스처 레지스터는 다음 시퀀스를 사용해야 합니다.

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

첫 번째 texm3x3pad 명령은 u'를 찾기 위해 곱셈의 첫 번째 행을 수행합니다.

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

두 번째 texm3x3pad 명령은 곱셈의 두 번째 행을 수행하여 v'를 찾습니다.

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

texm3x3spec 명령은 곱하기의 세 번째 행을 수행하여 w'를 찾습니다.

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

texm3x3vspec 명령은 반사 계산도 수행합니다.

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

// 여기서 일반 N은 다음과 같이 지정됩니다.

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

// 눈 광선 벡터 E는 다음과 같이 지정됩니다.

// E = (TextureCoordinates(stage m)Q ,

// TextureCoordinates(stage m+1)Q ,

// TextureCoordinates(stage m+2)Q )

마지막으로 texm3x3vspec 명령은 (u',v',w')를 사용하여 t(m+2)를 샘플링하고 결과를 t(m+2)에 저장합니다.

t(m+2)RGBA = (u' , v' , w')를 좌표로 사용하는 TextureSample(stage m+2)RGBA

예제

다음은 식별된 텍스처 맵과 식별된 텍스처 단계가 있는 예 셰이더입니다.

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

이 예에는 다음과 같은 텍스처 단계 설정이 필요합니다.

  • 0단계에는 일반 데이터가 있는 텍스처 맵이 할당됩니다. 이는 종종 범프 맵이라고 합니다. 데이터는 각 텍셀에 대한(XYZ) 법선입니다. n 단계의 텍스처 좌표는 이 법선 맵을 샘플링하는 방법을 정의합니다.
  • 텍스처 좌표 집합 m은 3x3 행렬의 1행에 할당됩니다. 단계 m에 할당된 모든 텍스처는 무시됩니다.
  • 텍스처 좌표 집합 m+1은 3x3 행렬의 행 2에 할당됩니다. m+1 단계에 할당된 모든 텍스처는 무시됩니다.
  • 텍스처 좌표 집합 m+2는 3x3 행렬의 행 3에 할당됩니다. 단계 m+2에는 볼륨 또는 큐브 텍스처 맵이 할당됩니다. 텍스처는 색상 데이터(RGBA)를 제공합니다.
  • 눈 광선 벡터 E는 m, m+1, m+2 단계에서 텍스처 좌표 데이터의 네 번째 성분(q)의 명령으로 전달됩니다.

픽셀 셰이더 명령