グラフィックスパイプラインとシェーダの役割をリストにしてまとめてみます。(頂点シェーダ編)
参考資料は以下のもの。
少し古いですが業界からは評価が高い本です。中古でもとりあえず買ってみるのをおすすめ。
ゲーム制作者になるための3Dグラフィックス技術 増補改訂版
著:西川善司
今回は書く量が多いので複数回に分割します。
まずは、グラフィックスパイプラインの流れを確認。
※DirectX 11/SM 5世代のグラフィックスレンダリングパイプラインについて。(Win7世代のGPU)
1 | 3Dモデルの構築・配置 | ||
2 | 仮想空間にモデルを配置
(ローカル座標→ワールド座標) |
頂点シェーダ | 頂点パイプライン |
3 | 頂点単位で陰影処理 | 頂点シェーダ | 頂点パイプライン |
4 | ポリゴンの分割及び形状変形 | テッセレーションステージ | 頂点パイプライン |
5 | 頂点の増減 | ジオメトリシェーダ | 頂点パイプライン |
6 | カメラ空間への展開
(ワールド座標→カメラ座標) |
頂点パイプライン | |
7 | クリッピング&陰影処理 | ||
8 | トライアングルセットアップとラスタライズ | ||
9 | ピクセル単位での陰影処理 | ピクセルシェーダ | ピクセルパイプライン |
10 | テクスチャの適応 | ピクセルシェーダ | ピクセルパイプライン |
11 | レンダーバックエンド
(アルファ・深度・ステンシル・フォグ・ブレンディングなど) |
ピクセルパイプライン | |
12 | 出力 |
<ポイント>
- 2, 3. 頂点シェーダ
- 通常は頂点パイプラインからGPU処理を行う。
- 頂点シェーダでの陰影処理は、「光源ベクトル」「視線ベクトル」「法線ベクトル」の3つのベクトルを使って、どのくらい光が視線方向に反射するかを(マテリアルごとに)計算する。
- 頂点シェーダでは、テクスチャ座標(UV座標)の計算も行う。
- 4. テッセレーションステージ
- これは、高ポリモデルと低ポリモデルを視点距離によって切り替えるLODの役割をレンダリングパイプラインで実装したもの。
- このステージは、「ハルシェーダ」「テッセレータ」「ドメインシェーダ」の3つのステージシェーダからなる。
- ハルシェーダ
- ハルとは、外殻(hull)を意味する
- 3Dモデルの表皮をどういう形状にするか、ポリゴン分割計画を行うプログラマブルシェーダ。
- 重要な役割は、「ポリゴンをどのくらい分割するか」「分割したポリゴンが高次曲面の場合はその制御点も算出」ということ。
- キャラクタの目は他より高ポリゴンに分割する!とかいうのもハルシェーダに書けば実装可
- テッセレータ
- ハルシェーダが作ったポリゴン分割計画を実行する
- ドメインシェーダ
- 高次曲面用の制御点はこのシェーダで整形する。
- ディテールを記載したテクスチャ(ディスプレースメントマップ)を読み込んで、ポリゴンを変形させるディスプレースメントマッピングの処理はココで行う。
- 5. ジオメトリシェーダ
- 頂点を増減させ、ポリゴンを自在に生成できるシェーダ。
- 地面に草のポリゴンを植え付けたり、キャラクタに毛を生やす事もできる。
- パイプラインの逆の流れ(ジオメトリシェーダ→頂点シェーダ)に戻ることが出来るため再帰的な処理が可能。
- 6.7 .
- 6. はワールド座標からカメラ座標へ座標変換する。この座標変換を一般に透視変換という。
- 7. は、描画する必要がないポリゴンを破棄し、視界にかするポリゴンは司会範囲内のポリゴンに切り取る処理(クリッピング)を行う。
- 隠面処理は、視点から見えないポリゴンを破棄する処理のこと。
箇条書きですが、今日はココまで。