目次
序文
グラフィックス レンダリング パイプラインのプロセス全体は C 言語で実装されていますが、いくつかの理論はまだ十分に知られていないため、ここでは面接の質問の理論を要約します。
1. GPUレンダリング処理
すべてのレンダリングは、CPU から GPU にデータを転送するプロセスです。
GPU の観点からのレンダリングは非常に簡単です。プログラムの全体的な枠組みとしては、大きく以下のステップに分かれます。
アプリケーションはグラフィック API (opengl/dx12) を呼び出します。
GPU ドライバーへの API 呼び出し。
GPU ドライバーは、グラフィックス API 関数を GPU 読み取り可能なコードに変換する役割を果たします。
CPUはメモリ上のデータをGPUに転送します。
この時点で、GPU にはデータとプログラム コードがあり、それを実行して画像を画面にレンダリングできます。
2. グラフィックス レンダリング パイプライン
2.1 レンダリング パイプラインの概要
- アプリケーションステージ:CPU上で動作するステージで、一般的に入力操作処理、アニメーション処理、イベント処理などに使用されます。
- ジオメトリ ステージ:頂点ごとおよびプリミティブごとの操作を担当します。
- ラスタライズ:変換された投影頂点とシェーディング情報に基づいてピクセルごとに描画する操作。画面内の 2D ポイントを画面上のピクセルに変換します。
2.2 全体的なプロセス
アプリケーションステージ --> ジオメトリステージ --> ラスタライズステージ --> ピースごとのソースステージ --> 後処理
2.3 適用段階
シーンの基本データの設定: モデルのサイズ、位置と回転情報、光源の種類と照明情報、カメラ パラメーターの収集 粗粒度カリングとアルゴリズム
アクセラレーション: ジオメトリに送信する必要のないオブジェクト情報のカリングステージ 例: 錐台カリングとオクルージョン カリングの
設定 レンダリング状態、レンダリング準備完了パラメータ: レンダリング タイプが後ろから前か、前から後ろかなど。
Call Draw Call: CPU が GPU にレンダリングを開始するように通知します。
2.4 幾何学段階
1. 頂点データの入力
2. 頂点シェーダー(ワールド変換マトリックス)
頂点変換: モデル座標系 --> 世界座標系 --> 観測座標系 --> 投影座標系 通称: MVP マトリックス
頂点カラーリング: 頂点ライティングなどのデータを計算し、頂点カラーを設定します。
3. テッセレーション (三角形を複数の三角形に分割、オプション)
4. ジオメトリ シェーダ (点を線または多角形に分割するためのオプション)
5. プリミティブのアセンブリ
投影: カメラのタイプ (正投影または透視図) に基づいて正規化されたデバイス座標に変換します。
クロップ: レンダリングせずに画面をはみ出す
カリング: 裏側のポイントはレンダリングされません
スクリーンマッピング: 公式スクリーンの座標位置にマッピングされた、-1 から 1 までの投影座標系
2.5 ラスタライズ段階
6. ラスタライズ
補間法によりフラグメントの色情報を計算
2.6 ソース段階ごと
7. フラグメントシェーダ 画面の最終的な色を決定し、各フラグメントの着色操作を実現します
8. 混合とテスト
- 透明度試験
- ステンシルテストと深さテスト
- テストに合格したフラグメントをカラー バッファーの色とブレンドします。
9. ターゲット バッファへの出力: フレーム バッファ (FrameBuffer) またはレンダリング テクスチャ (RenderTexture) の場合があります。
2.7 後処理
- さまざまな画面上の効果: 被写界深度、ブルーム、ガウスぼかしなど。