E)     テクスチャステージステート

テクスチャステージステートは、固定機能ピクセルパイプラインでの色の合成法を設定します。一部は、ピクセルシェーダ1_Xにおける変数を設定します。値を設定する時には、IDirect3DDevice9::SetTextureStageState(テクスチャステージ, ステート種類, 値)で設定します。

テクスチャステージステート

機能

D3DTSS_COLOROP

色を合成する方法

D3DTSS_COLORARG1

色引数の最初の引数

D3DTSS_COLORARG2

色引数の2つめの引数

D3DTSS_COLORARG0

色引数の2つめの引数

D3DTSS_ALPHAOP

テクスチャα合成処理の方法

D3DTSS_ALPHAARG1

α引数の最初の引数

D3DTSS_ALPHAARG2

α引数の2つめの引数

D3DTSS_ALPHAARG0

α引数の3つめの引数

D3DTSS_BUMPENVMAT00

バンプ マッピング行列の00成分に対する浮動小数点値

D3DTSS_BUMPENVMAT01

バンプ マッピング行列の01成分に対する浮動小数点値

D3DTSS_BUMPENVMAT10

バンプ マッピング行列の10成分に対する浮動小数点値

D3DTSS_BUMPENVMAT11

バンプ マッピング行列の11成分に対する浮動小数点値

D3DTSS_TEXCOORDINDEX

テクスチャステージで使用するテクスチャ座標インデックスの指定

D3DTSS_BUMPENVLSCALE

バンプマップ輝度に使用する浮動小数点数のスケール

D3DTSS_BUMPENVLOFFSET

バンプマップ輝度に使用する浮動小数点数のオフセット

D3DTSS_TEXTURETRANSFORMFLAGS

テクスチャステージのテクスチャ座標の座標変換を制御

D3DTSS_RESULTARG

このステージの結果のデスティネーション レジスタを選択するための設定

D3DTSS_CONSTANT

ステージごとの色定数

 

D3DTSS_COLOROP

このテクスチャステージステートは、それぞれのテクスチャステージでの色を合成する方法を決めます。値は、D3DTEXTUREOP 列挙型で指定されます。最初のテクスチャステージ (ステージ 0) の初期値は D3DTOP_MODULATE です。それ以外のステージの初期値はD3DTOP_DISABLE です。D

3DTEXTUREOP 列挙型には、次の種類があります。

      D3DTOP_DISABLE

このテクスチャ ステージ、およびより高いインデックスを持つステージからの出力をすべて無効にします。テクスチャ マッピングを無効にするには、これを最初のテクスチャ ステージ (ステージ 0) のカラー処理として設定します。カラー処理が有効になっているときは、アルファ処理を無効にすることはできません。カラー ブレンディングが有効な場合、アルファ処理を D3DTOP_DISABLE に設定すると、不定の動作が生じます。

      D3DTOP_SELECTARG1

このテクスチャ ステージの最初の色、またはアルファ引数を変更せずに出力として使用します。この処理は、D3DTSS_COLOROP テクスチャ ステージ ステートで使用すると色引数に影響を与え、D3DTSS_ALPHAOP で使用した場合にはアルファ引数に影響を与えます。

S = Arg1

      D3DTOP_SELECTARG2

このテクスチャ ステージの 2 番目の色、またはアルファ引数を変更せずに出力として使用すします。この処理は、D3DTSS_COLOROP テクスチャ ステージ ステートで使用すると色引数に影響を与え、D3DTSS_ALPHAOP で使用した場合にはアルファ引数に影響を与えます。

S = Arg2

      D3DTOP_MODULATE

引数の成分を乗算します。

S = Arg1 * Arg2

      D3DTOP_MODULATE2X

引数の成分を乗算し、その積を左に 1 ビットだけシフト (2 で乗算するのと同じ) して明るくします。

S = (Arg1 * Arg2) << 1

      D3DTOP_MODULATE4X

引数の成分を乗算し、その積を左に 2 ビットだけシフト (4 で乗算するのと同じ) して明るくします。

S = (Arg1 * Arg2) << 2

      D3DTOP_ADD

引数の成分を加算します。

S = Arg1 + Arg2

      D3DTOP_ADDSIGNED

バイアス値 -0.5 を引数の成分に加算し、値の有効範囲を -0.5 から 0.5 にします。

S = Arg1 + Arg2 – 0.5

      D3DTOP_ADDSIGNED2X

バイアス値 -0.5 を引数の成分に加算し、その積を左に 1 ビットだけシフトします。値の有効範囲を -1.0 から 1.0 にします。

S = (Arg1 + Arg2 – 0.5) << 1

      D3DTOP_SUBTRACT

1 引数の成分から、対応する第 2 引数の成分を減算します。

S = Arg1 - Arg2

      D3DTOP_ADDSMOOTH

1 および第 2 引数を加算し、次にその積を合計から減算します。

S = Arg1 + Arg2 - Arg1 * Arg2

  = Arg1 + Arg2 (1 – Arg1)

      D3DTOP_BLENDDIFFUSEALPHA

各頂点からの補間アルファを使用して、このステージの線形補間をします。

S = Alpha * Arg1 + (1 - Alpha) Arg2

      D3DTOP_BLENDTEXTUREALPHA

このステージのテクスチャからのアルファを使用して、このステージの線形補間をします。

S = Alpha * Arg1 + (1 - Alpha) Arg2

      D3DTOP_BLENDFACTORALPHA

レンダリング ステートで設定されるスカラー アルファ (D3DRS_TEXTUREFACTOR) を使用して、このステージの線形補間をします。

S = Alpha * Arg1 + (1 - Alpha) Arg2

      D3DTOP_BLENDTEXTUREALPHAPM

あらかじめ乗算されたアルファを使用するテクスチャ ステージの線形補間を実行します。

S = Arg1 + (1 - Alpha) Arg2

      D3DTOP_BLENDCURRENTALPHA

前のテクスチャ ステージからのアルファを使用して、このステージの線形補間を行います。

S = Arg1 + (1 - Alpha) Arg2

      D3DTOP_PREMODULATE

現在のテクスチャ ステージと次のテクスチャ ステージの間で乗算を行います。

      D3DTOP_MODULATEALPHA_ADDCOLOR

1 引数のアルファを使用して第 2 引数のカラーを調整し、その結果を第 1 引数に加算します。この処理は、カラー処理 (D3DTSS_COLOROP) でのみサポートされます。

S = Arg1 + Arg1α Arg2

      D3DTOP_MODULATECOLOR_ADDALPHA

引数を調整し、第 1 引数のアルファを加算します。この処理は、カラー処理 (D3DTSS_COLOROP) でのみサポートされます。

S = Arg1 * Arg2 + Arg1α

      D3DTOP_MODULATEINVALPHA_ADDCOLOR

D3DTOP_MODULATEALPHA_ADDCOLOR に類似していますが、第 1 引数のアルファを反転した値を使用します。この処理は、カラー処理 (D3DTSS_COLOROP) でのみサポートされます。

S = Arg1 + (1 - Arg1α) Arg2

      D3DTOP_MODULATEINVCOLOR_ADDALPHA

D3DTOP_MODULATECOLOR_ADDALPHA に類似していますが、第 1 引数の色を反転した色を使用します。この処理は、カラー処理 (D3DTSS_COLOROP) でのみサポートされます。

S = Arg1α+ (1 - Arg1) Arg2

      D3DTOP_BUMPENVMAP

次のテクスチャ ステージの環境マップ (輝度なし) による、ピクセル単位のバンプ マッピングを実行します。この処理は、カラー処理 (D3DTSS_COLOROP) でのみサポートされます。

      D3DTOP_BUMPENVMAPLUMINANCE

次のテクスチャ ステージの環境マップ (輝度あり) による、ピクセル単位のバンプ マッピングを実行します。この処理は、カラー処理 (D3DTSS_COLOROP) でのみサポートされます。

      D3DTOP_DOTPRODUCT3

各引数の要素を (符号付要素として) 乗算して積を加算し、得られた合計値をすべてのカラー チャネルに、アルファを含めて複製します。この処理はカラー処理とアルファ処理に対してサポートされます。

S = Arg1R* Arg1R+ Arg1G* Arg1G+ Arg1B* Arg1B

DirectX 6.0 および 7.0 のマルチテクスチャ処理では、上記の入力は、符号付きデータをシミュレートするため、使用する前にすべて 0.5 シフトされ (y = x - 0.5)、結果のスカラーは正の値に制限されて、3 つの出力チャネルすべてに複製されます。また、カラー処理としては、rgb 成分を更新したアルファを更新しないことに注意する必要があります。

ただし、ピクセルシェーダでは、出力を .rgb または .a コンポーネント、またはその両方 (デフォルト) にルーティングすることを指定できます。アルファ チャネルで個別のスカラー処理を指定することもできます。

      D3DTOP_MULTIPLYADD

積和演算をします。最後の 2 つの引数を取り、これらを乗算し、残りの入力引数に加算し、これを結果に配置します。

S = Arg1 + Arg2 * Arg3

      D3DTOP_LERP

1 ソース引数で指定された割合で、第 2 および第 3 ソース引数の間を線形補間します。

S = Arg1 * Arg2 + (1 – Arg1) * Arg3

 

D3DTSS_COLORARG1

このテクスチャステージステートは、そのステージに対する色引数の最初の引数になります(Arg1でかかれている成分です)。D3DTA列挙型で値を指定します。初期値は、D3DTA_TEXTUREです。

D3DTA列挙型には、次の種類があります。引数フラグと修飾子を組み合わせることはできますが2 つの引数フラグを組み合わせることはできません。

 

引数フラグ

      D3DTA_CURRENT

このテクスチャ引数は、前のブレンディングステージの結果を使います。最初のテクスチャステージ(ステージ0)の場合、この引数は D3DTA_DIFFUSE と同じ結果になります。前のブレンディングステージがバンプマップテクスチャ(D3DTOP_BUMPENVMAP 処理)を使用している場合、バンプマップ テクスチャの前のステージからテクスチャが選択されます。s が現在のテクスチャ ステージを表し、s – 1 にバンプマップ テクスチャがある場合、この引数はテクスチャ ステージ s – 2 からの結果出力になります。読み取りと書き込みに対する操作が行われます。

 

      D3DTA_DIFFUSE

このテクスチャ引数は、グーローシェーディング処理中に頂点の成分から補間して得られた拡散光の色です。頂点が拡散色を含まない場合の初期値は 0xFFFFFFFF になります。属性は読み取り専用です。

 

      D3DTA_SELECTMASK

すべての引数に対応するマスク値です。テクスチャ引数の設定には使用しません。

 

      D3DTA_SPECULAR

テクスチャ引数は、グーローシェーディング処理中に頂点の成分から補間された鏡面反射光の色になります。頂点が鏡面反射色を含んでいない場合、初期値は0xFFFFFFFF になります。属性は読み取り専用です。

 

      D3DTA_TEMP

このテクスチャ引数は、読み書き用のテンポラリレジスタの色になります。D3DTA_TEMP は、D3DPMISCCAPS_TSSARGTEMPが有効な場合にサポートされます。このレジスタの初期値は、(0.0, 0.0, 0.0, 0.0) です。属性は読み書きです。

 

      D3DTA_TEXTURE

このテクスチャ引数は、このテクスチャステージのテクスチャのデータになります。属性は読み取り専用です。

 

      D3DTA_TFACTOR

このテクスチャ引数は、D3DRS_TEXTUREFACTORについての前回のIDirect3Ddevice9::SetRenderState を呼び出したときのテクスチャ係数になります。属性は読み取り専用です。

 

修正子フラグフラグ

      D3DTA_ALPHAREPLICATE

処理をする前に、アルファ成分をすべての色成分に複製します。これは読み込む時の修飾子です。

 

      D3DTA_COMPLEMENT

引数を反転した色を使用します。たとえば、引数の結果が変数 x によって参照される場合、その値は 1.0 - x になります。これは読み込む時の修飾子です。

 

D3DTSS_COLORARG2

このテクスチャステージステートは、そのステージに対する色引数の2つめの引数になります(Arg2でかかれている成分です)。D3DTAで値を指定します。値は、D3DTA_CURRENTです。

 

D3DTSS_COLORARG0

このテクスチャステージステートは、そのステージに対する色引数の3つめの引数になります(Arg3でかかれている成分です)。D3DTOP_MULTIPLYADDとD3DTOP_LERPの場合に使います。この設定は、D3DTEXOPCAPS_MULTIPLYADD または D3DTEXOPCAPS_LERPがサポートされていなければなりません。初期値は、D3DTA_CURRENTです。

 

D3DTSS_ALPHAOP

このテクスチャステージステートは、D3DTEXTUREOP列挙型のメンバによって識別されるテクスチャα合成処理の方法を決定します。最初のテクスチャステージ (ステージ0) の初期値は D3DTOP_SELECTARG1 であり、それ以外のステージの初期値は D3DTOP_DISABLE です。

 

D3DTSS_ALPHAARG1

このテクスチャステージステートは、そのステージに対する最初のα引数で、D3DTA列挙型により識別されます。初期値は D3DTA_TEXTURE です。ステージにテクスチャが設定されていない場合は、D3DTA_DIFFUSE が初期値になります。

 

D3DTSS_ALPHAARG2

このテクスチャステージステートは、そのステージに対する2番目のα引数で、D3DTA列挙型により識別されます。初期値は D3DTA_CURRENT になります。

 

D3DTSS_ALPHAARG0

このテクスチャステージステートは、そのステージに対する3番目のα引数で、D3DTA列挙型により識別されます。D3DTOP_MULTIPLYADDとD3DTOP_LERPの場合に使います。この設定は、D3DTEXOPCAPS_MULTIPLYADD または D3DTEXOPCAPS_LERPがサポートされていなければなりません。初期値は D3DTA_CURRENT になります。

 

D3DTSS_BUMPENVMAT00D3DTSS_BUMPENVMAT11

テクスチャ ステージ ステートは、バンプ マッピング行列の2行2列の行列の各係数に対する浮動小数点値になります。初期値は 0.0 です。値は、-8から+8の間でなければなりません。

 

D3DTSS_TEXCOORDINDEX

このテクスチャステージで使用するテクスチャ座標インデックスを指定します。各頂点に関して、8つのテクスチャ座標を設定することができます。もし、頂点データにテクスチャ座標が含まれていない時には、テクスチャ座標には、(0,0)のUV値が使われます。

このフラグは、固定機能頂点処理でのみ使用します。頂点シェーダでは使用しません。頂点シェーダを使ってレンダリングするときは、各ステージのテクスチャインデックスをデフォルト値に設定しなければいけません。各ステージのデフォルトのインデックスは、ステージ インデックスと同じになります。このステートには、テクスチャステージで使用する各頂点の座標セットのゼロから始まるインデックスを設定します。

各アプリケーションでは、(設定されるインデックスとの論理和として) D3DTSS列挙型のいずれかを設定して、テクスチャ トランスフォーム用の入力テクスチャ座標を自動的に生成するようDirect3D に要求できます。

ゼロに解決される D3DTSS_TCI_PASSTHRU を除いて、設定されるインデックスと以下のフラグのいずれかを使用すると、テクスチャ ラッピング モードの決定にインデックスが厳密に使用されます。このフラグは環境マッピングを行う場合には特に有効です。

D3DTSS列挙型は次の種類があります。

      D3DTSS_TCI_PASSTHRU

頂点フォーマット内の指定されたテクスチャ座標を使用します。

      D3DTSS_TCI_CAMERASPACENORMAL

このステージのテクスチャ座標変換の入力テクスチャ座標として、カメラ空間に座標変換された頂点法線を使用すします。

      D3DTSS_TCI_CAMERASPACEPOSITION

このステージのテクスチャ座標変換の入力テクスチャ座標として、カメラ空間に座標変換された頂点位置座標を使用します。

      D3DTSS_TCI_CAMERASPACEREFLECTIONVECTOR

このステージのテクスチャ座標変換の入力テクスチャ座標として、カメラ空間に座標変換された反射ベクトルを使用します。反射ベクトルは入力頂点位置座標と法線ベクトルから計算されます。

      D3DTSS_TCI_SPHEREMAP

球環境マップのために指定されたテクスチャ座標を使用します。

 

D3DTSS_BUMPENVLSCALE

バンプマップ輝度に使用する浮動小数点数のスケール値です。初期値は 0.0 です。

 

D3DTSS_BUMPENVLOFFSET

バンプマップ輝度に使用する浮動小数点数のオフセットです。初期値は 0.0 です。

 

D3DTSS_TEXTURETRANSFORMFLAGS

テクスチャステージのテクスチャ座標の座標変換を制御する D3DTEXTURETRANSFORMFLAGS 列挙型によって指定されるステートです。初期値はD3DTTFF_DISABLEです。

D3DTEXTURETRANSFORMFLAGS列挙型は次の種類があります。

      D3DTTFF_DISABLE

テクスチャ座標はラスタライザに直接渡されます。

      D3DTTFF_COUNT1

ラスタライザは 1D テクスチャ座標を想定します。

      D3DTTFF_COUNT2

ラスタライザは 2D テクスチャ座標を想定します。

      D3DTTFF_COUNT3

ラスタライザは 3D テクスチャ座標を想定します。

      D3DTTFF_COUNT4

ラスタライザは 4D テクスチャ座標を想定します。

      D3DTTFF_PROJECTED

テクスチャ座標は、ラスタライザに渡される前に最後の要素ですべて分割されます。たとえば、このフラグが D3DTTFF_COUNT3 と共に指定されている場合、1 番目および 2 番目のテクスチャ座標は、ラスタライザに渡される前に、3 番目の座標で分割されます。

 

D3DTSS_RESULTARG

このステージの結果のデスティネーション レジスタを選択するための設定です。D3DTA列挙型で設定されます。

この値は、D3DTA_CURRENT (初期値) または D3DTA_TEMP に設定できます。D3DTA_TEMP は、入力引数として以降のステージに読み込むことができるテンポラリレジスタです。フォグ ブレンダおよびフレーム バッファに渡される最終的な色は D3DTA_CURRENT から取得されるので、最後にアクティブなテクスチャステージステートはカレントへの書き込みに設定しなければいけません。この設定は、D3DPMISCCAPS_TSSARGTEMPが有効な場合にサポートされます。

 

D3DTSS_CONSTANT                                                                                                                                                                                                                                                                                                                                                                                                                                         

ステージごとの定数色です。定数色がサポートされているかどうかは、D3DPMISCCAPSのD3DPMISCCAPS_PERSTAGECONSTANTを調べればわかります。D3DTSS_CONSTANTはD3DTA_CONSTANTで使われます。