次の方法で共有


texm3x3spec - ps

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

構文

texm3x3spec dst, src0, src1

 

where

  • dst は宛先レジスタです。
  • src0 と src1 はソース レジスタです。

注釈

ピクセル シェーダーのバージョン 1_1 1_2 1_3 1_4 2_0 2_x 2_sw 3_0 3_sw
texm3x3spec x x x

 

この命令は、3x3 行列乗算の最後の行を実行し、結果のベクトルを通常のベクトルとして使用して視線線ベクトルを反射し、反射ベクトルを使用してテクスチャルックアップを実行します。 シェーダーは、定数レジスタから視線ベクトルを読み取ります。 通常、3x3 行列乗算は、レンダリングされるサーフェスの正しい接線空間に法線ベクトルを向ける場合に便利です。

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

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

最初の 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

次に、texm3x3spec 命令によってリフレクション計算が行われます。

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

ここで、通常の N は、

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

目線ベクトルEは定数レジスタによって与えられる

E = c# (任意の定数 register--c0、c1、c2 など---を使用できます)

最後に、texm3x3spec 命令は 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 (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

この例では、次のテクスチャ ステージの設定が必要です。

  • ステージ 0 には、通常のデータを含むテクスチャ マップが割り当てられます。 これは、多くの場合、バンプ マップと呼ばれます。 データは、各テクセルの (XYZ) 法線です。 ステージ n のテクスチャ座標は、この法線マップをサンプリングする場所を定義します。
  • テクスチャ座標セット m は、3x3 行列の行 1 に割り当てられます。 ステージ m に割り当てられたテクスチャは無視されます。
  • テクスチャ座標セット m+1 は、3x3 行列の行 2 に割り当てられます。 ステージ m+1 に割り当てられたテクスチャは無視されます。
  • テクスチャ座標セット m+2 は、3x3 行列の行 3 に割り当てられます。 ステージ m+2 には、ボリュームまたはキューブ テクスチャ マップが割り当てられます。 テクスチャは、カラー データ (RGBA) を提供します。
  • 視線ベクトル E は、定数レジスタ E = c# によって指定されます。

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