レンダリングパイプライン
入力アセンブラ
アプリケーションから送られてきた頂点のデータをGPUで処理しやすい形に変換する
頂点シェーダー
頂点情報を受け取り、適切な座標変換を行い次のステージへ渡す
頂点ごとに実行される
テッセレーション
ジオメトリ
カリング
ラスタライズ
早期深度テスト
複数のプリミティブが重なったとき、カメラに一番近いもののみを描写する必要がある
この処理を「深度テスト」あるいは「Zテスト」と呼ぶ
「Zバッファ」と呼ばれる、スクリーンと縦横サイズが同じメモリ領域を用意し、描画が決定したピクセルのクリップ空間でのZ座標を書き込んでおく
次に同じピクセルに書き込む際、Zバッファ上の値を確認し、すでに書き込まれたピクセルよりも後ろにある場合、そのピクセルを破棄する
これにより、最も手前にあるピクセルだけがフレームバッファ上に残り続け、最終的に描画対象になる
フラグメントシェーダー
ピクセルと各種データを受け取り、最終的にスクリーンに表示するカラー値を決定する
ピクセルごとに実行される
出力マージャ
フラグメントシェーダーから出力された色データに各種テストを適用し、その全てに合格した場合にのみ、フレームバッファに書き込みを行う
テストには以下の3つがあり、テスト終了後に「ブレンディング」が行われ、ようやくフレームバッファにカラーが書き込まれる
深度テスト
早期深度テストが行われなかったピクセルに対して深度テストを実行する
ステンシルテスト
フラグメントシェーダーが出力したカラーをフレームバッファに書き込むかどうかを、ステンシルマスクと呼ばれるデータを参照して判定する
プリミティブを任意の形に切り抜くような処理を行える
アルファテスト
フラグメントシェーダーが出力したカラーをフレームバッファに書き込むかどうかを、そのカラーのα値を参照して判定する
ブレンディング処理の前に不要な処理を破棄して処理負荷を軽減するのが主な役割
ブレンディング
フラグメントシェーダーが出力したカラー値を、フレームバッファに既に書き込まれているカラーと混ぜ合わせた上でフレームバッファに書き込む処理
半透明なピクセルを書き込む際や、複数のライトの効果を合算する際に使用する
コンピュートシェーダー