次の方法で共有


texm3x3vspec - ps

3x3 行列乗算を実行し、結果を使用してテクスチャ参照を実行します。 これは、目線ベクトルが一定ではない反射反射と環境マッピングに使用できます。 texm3x3vspec は、2 つの texm3x3pad - ps 命令と組み合わせて使用する必要があります。 視線ベクトルが一定の場合、 texm3x3spec - ps 命令は同じ行列乗算とテクスチャ参照を実行します。

構文

texm3x3vspec dst, src

 

where

  • 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 と同じように動作しますが、目線ベクトルはテクスチャ座標の 4 番目のコンポーネントから取得されます。 通常、3x3 行列乗算は、レンダリングされるサーフェスの正しい接線空間に法線ベクトルを向ける場合に便利です。

3x3 マトリックスは、3 番目のテクスチャ ステージと前の 2 つのテクスチャ ステージのテクスチャ座標で構成されます。 結果として得られる反射後ベクトル (UVW) を使用して、ステージ 3 でテクスチャをサンプリングします。 前の 2 つのテクスチャ ステージに割り当てられたテクスチャは無視されます。

この命令は、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

2 番目の texm3x3pad 命令は、乗算の 2 行目を実行して v' を見つけます。

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

texm3x3spec 命令は、乗算の 3 行目を実行して 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 命令は t(m+2) を (u',v',w') と共にサンプリングし、結果を t(m+2) に格納します。

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

テクスチャ マップが識別され、テクスチャ ステージが識別されたシェーダーの例を次に示します。

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 は、テクスチャ座標データの 4 番目のコンポーネント (q) の命令に、ステージ m、m+1、m+2 で渡されます。

ピクセル シェーダーの手順