グラフィックス パイプライン

Direct3D グラフィックス パイプラインは、リアルタイム ゲーム アプリケーション用のグラフィックスを生成できるように設計されています。 データは、構成可能またはプログラミング可能な各ステージを通じて、入力から出力へと流れます。

すべてのステージは、Direct3D API を使用して構成できます。 一般的なシェーダー コア (角丸四角形のブロック) の機能を利用するステージは、HLSL プログラミング言語を使用することによってプログラミングできます。 これにより、パイプラインは柔軟性および適応性が非常に高くなっています。

最もよく使用されるのは、頂点シェーダー (VS) ステージとピクセル シェーダー (PS) ステージです。 これらのシェーダー ステージを用意しない場合は、既定の何もしない、パススルー頂点シェーダーとピクセル シェーダーが使われます。

Direct3D 11 のプログラム可能なパイプラインでのデータ フローの図

入力アセンブラー ステージ

入力アセンブラー (IA) ステージは、三角形、線、点などのパイプラインにプリミティブ データと隣接性データを提供し (セマンティクス ID など)、まだ処理されていないプリミティブの処理を減らすことでシェーダーの効率を高めます。

  • 入力

    メモリ内のユーザーが入力したバッファーからのプリミティブ データ (三角形、線、点)。 隣接性データが含まれる場合もあります。 三角形では、三角形ごとに 3 つの頂点と、場合によって三角形ごとに隣接性データの 3 つの頂点になります。

  • 出力

    システム生成値 (プリミティブ ID、インスタンス ID、頂点 ID など) が添付されたプリミティブ。

頂点シェーダー ステージ

頂点シェーダー (VS) ステージでは、頂点を処理し、多くの場合は変換、スキン、照明の適用などの操作を実行します。 頂点シェーダーは 1 つの入力頂点を受け取り、1 つの出力頂点を生成します。 変換、スキン適用、変形、頂点ごとの照明など、頂点ごとの個別の操作です。

  • 入力

    システム生成値 VertexID と InstanceID を持つ単一の頂点。 頂点シェーダーの各入力頂点は、最大 16 個の 32 ビット ベクトル (それぞれ最大 4 要素) で構成できます。

  • 出力

    単一の頂点。 各出力頂点は、最大 16 個の 32 ビット 4 要素ベクトルで構成できます。

ハル シェーダー ステージ

ハル シェーダー (HS) ステージは、モデルの 1 つのサーフェスを効率的に多数の三角形に分割する、テセレーション ステージの 1 つです。 ハル シェーダーは、パッチごとに 1 回呼び出され、低次サーフェスを定義する入力制御点を、パッチを構成する制御点に変換します。 また、ハル シェーダーは、いくつかのパッチごとの計算を行い、データをテッセレータ (TS) ステージとドメイン シェーダー (DS) ステージに提供します。

  • 入力

    1 ~ 32 個の入力制御点。これらがまとまって低次サーフェスを定義します。

  • 出力

    1 ~ 32 個の出力制御点。これらがまとまってパッチを構成します。 ハル シェーダーは、テッセレータ (TS) ステージの状態を宣言します。これには、テセレーションで使用する制御点の数、パッチ面の種類、分割の種類が含まれます。

テッセレータ ステージ

テッセレータ (TS) ステージは、ジオメトリ パッチを表すドメインのサンプリング パターンを作成し、サンプルを接続する一連の小さいオブジェクト (三角形、点、または線) を生成します。

  • 入力

    テッセレータは、ハル シェーダー ステージから渡されるテッセレーション係数 (ドメインをどの程度詳細にテッセレーションするかを指定する) およびパーティションの種類 (パッチのスライスに使用するアルゴリズムを指定する) を使用して、パッチごとに 1 回動作します。

  • 出力

    テッセレータは、uv (およびオプションとして w) 座標およびサーフェス トポロジをドメイン シェーダー ステージに出力します。

ドメイン シェーダー ステージ

ドメイン シェーダー (DS) ステージでは、パッチ内の細分化されたポイントの頂点の位置を計算します。つまり、各ドメイン サンプルに対応する頂点の位置を計算します。 ドメイン シェーダーは、テッセレータ ステージの出力ポイントごとに 1 回実行され、ハル シェーダーの出力パッチや出力パッチ定数、およびテッセレータ ステージの出力 UV 座標への読み取り専用アクセスが可能です。

  • 入力

    ドメイン シェーダーは、ハル シェーダー (HS) ステージからの出力の制御点を利用します。 ハル シェーダーの出力: 制御点、パッチ定数データ、テセレーション係数 (テセレーション係数には、固定関数テッセレータによって使用される値と、整数テセレーションによる丸め前の未処理の値を含めることができ、ジオモーフィングなどが容易になります)。 ドメイン シェーダーは、テッセレータ (TS) ステージからの出力座標ごとに 1 回呼び出されます。

  • 出力

    ドメイン シェーダー (DS) ステージでは、出力パッチ内の細分化されたポイントの頂点の位置を出力します。

ジオメトリ シェーダー ステージ

ジオメトリ シェーダー (GS) ステージでは、プリミティブの全体の三角形、線、点が、隣接する頂点と共に処理されます。 これは、ジオメトリ増幅と減幅をサポートします。 ジオメトリ シェーダー ステージは、ポイント スプライト拡張、動的パーティクル システム、Fur/Fin の生成、シャドウ ボリュームの生成、単一パスでのキューブマップへのレンダリング、プリミティブ単位のマテリアル スワップ、プリミティブ単位のマテリアル セットアップ (プリミティブ データとしての重心座標の生成も含まれています。これにより、ピクセル シェーダーはカスタム属性補間を実行できます) などのアルゴリズムに適しています。

  • 入力

    1 つの頂点を処理する頂点シェーダーとは異なり、ジオメトリ シェーダーの入力はプリミティブ全体 (三角形の 3 つの頂点、線の 2 つの頂点、点の 1 つの頂点など) の頂点です。

  • 出力

    ジオメトリ シェーダー (GS) ステージでは、1 つの選択したトポロジを形成する複数の頂点を出力することができます。 利用可能なジオメトリ シェーダーの出力トポロジには、tristriplinestrip、およびpointlist があります。 生成されるプリミティブの数は、ジオメトリ シェーダーの呼び出し内で自由に変えることができますが、生成可能な頂点の最大数は、静的に宣言する必要があります。 ジオメトリ シェーダーの呼び出しから生成されるストリップの長さは任意で、新しいストリップは RestartStrip HLSL 組み込み関数を使用して作成できます。

ストリーム出力ステージ

ストリーム出力 (SO) ステージでは、直前のアクティブなステージからメモリ内の 1 つ以上のバッファーに、頂点データを連続して出力 (ストリーミング) します。 メモリにストリーミングされたデータは、CPU からの入力データまたはリード バックとして、パイプラインに再循環させることができます。

  • 入力

    前のパイプライン ステージの頂点データです。

  • 出力

    ストリーム出力 (SO) ステージでは、ジオメトリ シェーダー (GS) ステージなど、直前のアクティブなステージからメモリ内の 1 つ以上のバッファーに、頂点データを連続して出力 (ストリーミング) します。 ジオメトリ シェーダー (GS) ステージがアクティブではなく、ストリーム出力 (SO) ステージがアクティブである場合、ストリーム出力ステージでは、ドメイン シェーダー (DS) ステージから (DS もアクティブでない場合は、頂点シェーダー (VS) ステージから) メモリ内のバッファーに頂点データを継続して出力します。

ラスタライザー ステージ

ラスタライザー (RS) ステージは、表示されないプリミティブをトリミングし、ピクセル シェーダー (PS) ステージ用にプリミティブを準備して、ピクセル シェーダーを呼び出す方法を決定します。 リアルタイム 3D グラフィックスを表示するために、(図形やプリミティブで構成された) ベクター情報を (ピクセルで構成された) ラスター画像に変換します。

  • 入力

    ラスタライザー ステージに渡される頂点 (x、y、z、w) は同次クリップ空間と見なされます。 この座標空間では、X 軸は右向き、Y 軸は上向き、Z 軸はカメラから遠ざかる方向を向きます。

  • 出力

    レンダリングする必要がある実際のピクセル。 ピクセル シェーダーによる補間で使用するためのいくつかの頂点属性が含まれています。

ピクセル シェーダー ステージ

ピクセル シェーダー (PS) ステージはプリミティブの補間データを受信し、カラーなどのピクセル単位のデータを生成します。

  • 入力

    パイプラインがジオメトリ シェーダーなしに構成されている場合、ピクセル シェーダーは 16 個の 32 ビット、4 成分の入力に制限されます。 それ以外の場合、ピクセル シェーダーは 32 ビット、4 成分の入力を 32 個まで受け取ることができます。 ピクセル シェーダーの入力データには (パースペクティブ補正あり/なしで補間可能な) 頂点属性が含まれます。または、ピクセル シェーダーの入力データをプリミティブ単位の定数として処理することもできます。 ピクセル シェーダー入力は、宣言された補間モードに基づき、ラスター化されているプリミティブの頂点属性から補間されます。 プリミティブがラスター化前にクリップされた場合は、クリッピング処理中に補間モードが受け入れられます。

  • 出力

    ピクセル シェーダーは、32 ビット、4 成分の色を 8 つまで出力できます。ピクセルが破棄された場合は色を出力することはできません。 ピクセル シェーダーの出力レジスタの成分は、使用前に宣言する必要があります。レジスタごとに異なる出力書き込みマスクを使用できます。

出力結合 (OM) ステージ

出力マージャー (OM) ステージでは、各種出力データ (ピクセル シェーダー値、深度とステンシルの情報) をレンダー ターゲットおよび深度/ステンシル バッファーの内容と結合し、最終的なパイプラインの結果を生成します。

  • 入力

    出力マージャー入力は、パイプラインの状態、ピクセル シェーダーによって生成されたピクセル データ、レンダー ターゲットの内容、深度/ステンシル バッファーの内容です。

  • 出力

    最終的にレンダリングされるピクセルの色。