エフェクト (Direct3D 10)
DirectX エフェクトは、HLSL で記述された表現とエフェクト フレームワーク固有の構文で設定されたパイプライン ステートの集合です。エフェクトをコンパイルした後に、エフェクト フレームワーク API を使用してレンダリングします。エフェクト機能は、ジオメトリをトランスフォームする頂点シェーダーや単色を出力するピクセル シェーダーなどの単純なものから、複数のパスを必要とし、グラフィックス パイプラインの各種ステージを使用して、シェーダー ステートだけでなく、プログラム可能なシェーダーに関連付けられていないパイプライン ステートも操作するレンダリング テクニックに及びます。
最初の手順は、エフェクトで制御したいステートを編成することです。このステートには、シェーダー ステート (頂点、ジオメトリおよびピクセル シェーダー)、シェーダーによって使用されるテクスチャーやサンプラー ステート、およびその他のプログラムできないパイプライン ステートがあります。エフェクトは、メモリー内にテキスト文字列として作成できますが、通常はサイズが大きくなるため、エフェクト ステートをエフェクト ファイル (拡張子 .fx を末尾に持つテキスト ファイル) に格納すると便利です。エフェクトを使用するには、そのエフェクトをコンパイルし (HLSL 構文とエフェクト フレームワーク構文のチェック)、API 呼び出しでエフェクト ステートを初期化し、レンダリング ループを修正してレンダリング API を呼び出す必要があります。
エフェクトは、特定のエフェクトで必要となるすべてのレンダリング ステートをテクニックと呼ばれる単一のレンダリング関数にカプセル化します。パスは、レンダリング ステートを含んだテクニックのサブセットです。複数のパスのレンダリング エフェクトを実装するには、1 つまたは複数のパスを 1 つのテクニックに実装します。たとえば、あるジオメトリを 1 組の深度/ステンシル バッファーでレンダリングし、あるスプライトをその上に描画するとします。ジオメトリのレンダリングは第 1 パスに、スプライトの描画は第 2 パスに実装できます。エフェクトをレンダリングするには、レンダリング ループで両方のパスをレンダリングします。任意の数のテクニックをエフェクトに実装することができます。もちろん、テクニックの数が多くなるにつれて、エフェクトのコンパイル時間が長くなります。この機能を活用する 1 つの方法は、異なるハードウェア上で実行するように設計されたテクニックを用いてエフェクトを作成することです。これによって、アプリケーションでは、検出されたハードウェア能力に基づいてパフォーマンスを適切にダウングレードすることが可能になります。