ピクセル シェーダー ステージ
ピクセル シェーダー ステージ (PS) を使用すると、ピクセル単位の照明や後処理などの豊富なシェーディング手法が可能になります。 ピクセル シェーダーは、定数変数、テクスチャ データ、頂点ごとの補間値、およびその他のデータを組み合わせてピクセル単位の出力を生成するプログラムです。 ラスタライザー ステージでは、プリミティブでカバーされるピクセルごとにピクセル シェーダーを 1 回呼び出しますが、シェーダーの実行を回避するために、NULL シェーダーを指定できます。
ピクセル シェーダー
テクスチャをマルチサンプリングする場合、ピクセル シェーダーはカバーされるピクセルごとに 1 回呼び出され、カバーされるマルチサンプルごとに深度/ステンシル テストが行われます。 深度/ステンシル テストに合格したサンプルは、ピクセル シェーダーの出力色で更新されます。
ピクセル シェーダーの組み込み関数は、画面空間 x と y に関して数量の派生関数を生成または使用します。 派生物の最も一般的な用途は、テクスチャ サンプリングの詳細レベル計算を計算し、異方性フィルタリングの場合は、異方性の軸に沿ってサンプルを選択します。 通常、ハードウェア実装では複数のピクセル (2x2 グリッドなど) でピクセル シェーダーが同時に実行されるため、ピクセル シェーダーで計算された数量の派生物を、隣接するピクセルの同じ実行ポイントでの値の差分として合理的に近似できます。
入力
ジオメトリ シェーダーなしでパイプラインを構成する場合、ピクセル シェーダーは 16、32 ビット、4 コンポーネントの入力に制限されます。 それ以外の場合、ピクセル シェーダーは最大 32、32 ビット、4 コンポーネントの入力を受け取ることができます。
ピクセル シェーダー入力データには、頂点属性 (遠近法補正の有無にかかわらず補間可能) が含まれるか、プリミティブ定数として扱うことができます。 ピクセル シェーダー入力は、宣言された補間モードに基づいて、ラスター化されるプリミティブの頂点属性から補間されます。 ラスター化の前にプリミティブがクリップされた場合、クリッピング プロセス中も補間モードが適用されます。
頂点属性は、ピクセル シェーダーの中心位置で補間 (または評価) されます。 ピクセル シェーダー属性補間モードは、引数 または 入力構造体で、要素ごとに入力レジスタ宣言で宣言されます。 属性は線形に補間することも、重心サンプリング 使用することもできます。 重心評価は、ピクセルがプリミティブで覆われているがピクセルの中心がカバーされない場合をカバーするために、マルチサンプリング中にのみ関連します。重心評価は、(カバーされていない) ピクセル中心にできるだけ近い位置で行われます。
入力は、他のパイプライン ステージで使用されるパラメーターをマークする システム値セマンティックで宣言することもできます。 たとえば、ピクセル位置は、SV_Position セマンティックでマークする必要があります。 IA ステージでは、(SV_PrimitiveIDを使用して) ピクセル シェーダーに対して 1 つのスカラーを生成できます。ラスタライザー ステージでは、(SV_IsFrontFaceを使用して) ピクセル シェーダーに対して 1 つのスカラーを生成することもできます。
出力
ピクセル シェーダーは、最大 8、32 ビット、4 コンポーネントの色、またはピクセルが破棄された場合は色を出力できません。 ピクセル シェーダー出力レジスタ コンポーネントは、使用する前に宣言する必要があります。各レジスタには、個別の出力/書き込みマスクが許可されます。
深度データが深度バッファーに書き込まれるかどうかを制御するには、深度書き込み有効化状態 (出力結合ステージ) を使用します (または、破棄命令を使用してそのピクセルのデータを破棄します)。 ピクセル シェーダーは、(SV_Depth セマンティックを使用して) 深度テスト用の省略可能な 32 ビット、1 コンポーネント、浮動小数点、深度値を出力することもできます。 深度値は oDepth レジスタに出力され、深度テストの補間された深度値を置き換えます (深度テストが有効になっていると仮定)。 固定関数深度またはシェーダー oDepth の使用の間で動的に変更する方法はありません。
ピクセル シェーダーはステンシル値を出力できません。
関連トピック