効果 (Direct3D 11)

DirectX 効果はパイプライン状態のコレクションであり、 HLSL で記述された式と、効果フレームワークに固有の構文によって設定されます。

効果をコンパイルした後、効果フレームワーク API を使用してレンダリングします。 効果機能は、ジオメトリと単色を出力するピクセル シェーダーを変換する頂点シェーダーのような単純なものから、複数のパスを必要とし、グラフィックス パイプラインのすべてのステージを使用し、シェーダーの状態と、プログラム可能なシェーダーに関連付けられていないパイプラインの状態を操作するレンダリング手法まで多岐に渡ります。

最初の手順では、コントロールする状態を効果で整理します。 これには、シェーダーの状態 (頂点、ハル、ドメイン、ジオメトリ、ピクセルおよびコンピューティング シェーダー)、シェーダーで使用されるテクスチャとサンプラーの状態、およびその他のプログラム不可能なパイプライン状態が含まれます。 テキスト文字列としてメモリ内に効果を作成できますが、通常は、効果の状態を効果ファイル (.fx 拡張子で終わるテキスト ファイル) に格納するのに便利なサイズが十分に大きくなります。 効果を使用するには、(HLSL 構文と効果フレームワーク構文をチェックするために) コンパイルし、API 呼び出しを通じて効果の状態を初期化し、レンダリング API を呼び出すようにレンダー ループを変更する必要があります。

効果は、特定の効果に必要なすべてのレンダリング状態を、手法と呼ばれる 1 つのレンダリング関数にカプセル化します。 パスは、レンダリング状態を含む手法のサブセットです。 マルチ パス レンダリング効果を実装するには、1 つの手法内で 1 つ以上のパスを実装します。 たとえば、1 セットの深度/ステンシル バッファーでジオメトリをレンダリングし、その上にスプライトをいくつか描画するとします。 最初のパスでジオメトリ レンダリングを実装し、2 番目のパスでスプライト描画を実装できます。 効果をレンダリングするには、レンダー ループで両方のパスをレンダリングするだけです。 効果には、任意の数の手法を実装できます。 もちろん、手法の数が多いほど、効果のコンパイル時間が長くなります。 この機能を利用する 1 つの方法は、さまざまなハードウェアで実行するように設計された手法を使用して効果を作成することです。 これにより、検出されたハードウェア機能に基づいて、アプリケーションでパフォーマンスを正常にダウングレードできます。

一連の手法をグループにグループ化できます (構文は "fxgroup" を使用します)。 手法は、任意の方法でグループ化できます。 たとえば、複数のグループを作成し、素材ごとに 1 つずつ作成できます。各マテリアルには、ハードウェア レベルごとに手法を使用できます。各手法には、特定のハードウェア上のマテリアルを定義するパスのセットがあります。

このセクションの内容

トピック 説明
効果での状態の整理
Direct3D 11 では、特定のパイプライン ステージの効果の状態が構造体別に整理されます。
エフェクト システム インターフェイス
効果システムでは、効果の状態を管理するための複数のインターフェイスが定義されています。
特殊なインターフェイス
ID3DX11EffectVariable には、インターフェイスを必要な特定の種類のインターフェイスにキャストするためのメソッドが多数用意されています。
効果のインターフェイスとクラス
Effects 11 でクラスとインターフェイスを使用する方法は多数あります。
効果のレンダリング
効果は、情報を格納したり、状態のグループを使用してレンダリングしたりするために使用できます。
効果の複製
効果を複製すると、効果の 2 つ目のコピーとほぼ同じコピーが作成されます。
Stream Out 構文
stream out を使用するジオメトリ シェーダーは、特定の構文で宣言されます。
効果 10 と効果 11 の違い
このトピックでは、効果 10 と効果 11 の違いについて説明します。

Direct3D 11 用プログラミング ガイド