グラフィックスパイプラインとは?
グラフィックスパイプラインはパイプライン処理なので全ての手順は順番に逐次処理で行います。
以下の画像の通りの手順はいくつかあり、使い方次第増える手順も沢山ありますが、今回は基本の流れを話したいと思います!
3Dデータ
3Dデータとは、アプリケーションがCPUからGPUに渡すデータとGPUのプロパティであります。特に多くに使われているデータはこちらです。
- アトリビュート: 3D形状の頂点の座標、色、法線情報、配列で表現されているのでバッファーと呼ばれることもあります。
- ユーニフォム: 一つのオブジェクトに対するデータ
- テクスチャ: 2D画像。主にはメッシュに貼り付けるため
- プロパティ: GPUの設定。描画の仕方を指定します。プロパティによって渡しているデータは、線分データ、あるいは、三角のデータなどの情報をGPUに伝えられます。
バーテックスシェーダー
各頂点で行われる処理です。主には3D空間から2Dの画面空間の計算はここで行われます。
シェープアセンブリ
GPUが渡されたプロパティーに従って形状を作ります。よくあるのはTriangle List, Line List, Point Listです。
ラスター
2D空間にある三角と線分をピクセル化します。ラスターの前のデータは2Dですが、HTMLのようなPixelXYでの値でなく、Zが無くなっただけの数学用の座標です。
フラグメントシェーダー
ラスターが計算されたらピクセルの色を添える情報が揃うのでフラグメントシェーダーで各ピクセルの色がこの段階で決まります。テクスチャを貼ったり、ぼやけたり、モノクロームみたいなエフェクトはここで行われます。各ピクセルのインプット情報(色、法線など)は頂点から線形補間で自動で計算されます。
テストとブレンド
各ピクセルの色が決まったら結果画像にブレンドされますがその前にDepth Test(前後判定)が行われます。このピクセルは結果画像に書かれて良いと決まったら、そのピクセルは結果画像にブレンドされます。簡単に説明しますとブレンドは新しいピクセルの色をどう結果画像に染めるかの処理です。通常、上書きすればいいのですが、半透明の場合は既にある色と混ぜる時もあります。
フレームバッファーの出力
全てのブレンディングが終わったら結果画像がCPUに送られます。その画像はモニターに描画するか、ファイルとして保存することも可能ですが、CPU側の処理次第となります。
最後に
最後までお読み頂きましてありがとうございました。少しは3Dグラフィックスの流れについて理解頂けたでしょうか?次回のグラフィックス記事を楽しみにしていてください。