萌えハッカーニュースリーダー

2025/06/19 20:01 How to write a (software) 3D polygon pipeline (2000)

出典: https://www.cbloom.com/3d/techdocs/pipeline.txt
hakase
博士

ロボ子、今日は3Dポリゴンパイプラインをソフトウェアで作る話じゃぞ!Transform, Light & Clip、略してTLCじゃ。

roboko
ロボ子

TLCですか。なんだか懐かしい響きですね。現代のCPUでもGPUみたいにパイプライン処理が重要なんですね。

hakase
博士

そうなんじゃ!深いパイプライン処理、条件分岐の排除、状態変化の最小化、メモリアクセスの削減!これらがCPUでも大切になってくるんじゃ。

roboko
ロボ子

なるほど。オブジェクトはIndexed Primitivesとして格納するんですね。頂点配列とインデックスを使うと。

hakase
博士

その通り!ソフトウェアT&LではIndexed Listsを使うのがミソじゃ。レンダリングAPIは `TLC_Primitive` という関数で、頂点、インデックス、変換情報などを渡すんじゃ。

roboko
ロボ子

各VBにAABB(Axis-Aligned Bounding Box)を関連付けるんですね。これは、ビューフラスタムの外にあるVBを早期に拒否するためですか?

hakase
博士

さすがロボ子、よく分かっておる!AABBを使って、無駄な処理を減らすんじゃ。クリップフラグもここで計算するぞ。

roboko
ロボ子

PipelineVert(PV)という構造体が出てきました。View空間の位置、法線、クリップフラグ、スクリーン空間の位置、色、テクスチャ座標などが格納されるんですね。

hakase
博士

そうじゃ!PVはアクティブな頂点のセットを格納する静的な配列なんじゃ。クリッピングで頂点が増えることも考えて、パディングも入れておくのがポイントじゃぞ。

roboko
ロボ子

Model->World変換とWorld->View変換を連結してModel->View変換(MVT)を作成し、グラム・シュミットの正規直交化でMVTを正規直交化するんですね。法線の変換のためですか?

hakase
博士

ビンゴ!ライティングはモデル空間ではなく、View空間で行うのが効率的なんじゃ。法線は正規直交化されたMVTで回転させるのがミソじゃぞ。

roboko
ロボ子

クリップフラグは、頂点がビューフラスタムのどの平面の外にあるかを示すんですね。三角形のクリッピングでは、3つの頂点のクリップフラグをチェックして、三角形が完全に見えない場合はスキップすると。

hakase
博士

その通り!背面を向いている三角形もスキップじゃ。可視の頂点に対してのみライティングを計算するんじゃぞ。

roboko
ロボ子

クリッピングが必要な場合は、VisibleIndexListに追加するんですね。クリッピングはまれなので、最適化よりも、完全に内側または外側の三角形を迅速に見つけることが重要、と。

hakase
博士

そうそう。レンダリングでは、PV構造を2つの部分に分割して、ハードウェアに渡すんじゃ。`PipelineVertA`と`PipelineVertB`じゃな。

roboko
ロボ子

最適化として、VBソースデータの圧縮、複数のUVの使用、rgba、uv、法線を含めない選択肢があるんですね。

hakase
博士

コンソールでのソフトウェアT&Lでは、圧縮されたVBと三角形リストをメインメモリからストリームインして、PVにアンパック、処理してメインメモリにフラッシュバックするんじゃな。

roboko
ロボ子

ストリップの処理では、クリッピングは通常どおりに進めるが、ストリップを分割するんですね。LOD(Level of Detail)は、GPUだけでなく、CPUやメモリの負荷を軽減するために重要、と。

hakase
博士

LODは重要じゃぞ!法線をより正確に変換するには、MVT(スケールを反転)で法線を変換し、その後で法線を正規化する必要があるんじゃ。

roboko
ロボ子

Naiveな実装と比較すると、この実装はCPUキャッシュの利用効率が良く、可視でない頂点もライティングしないため、効率的、と。

hakase
博士

その通り!ロボ子、今日はよく頑張ったのじゃ!最後に一つ、3Dポリゴンパイプラインをマスターすると、夢の中でもポリゴンが見えるようになるらしいぞ!

roboko
ロボ子

それは…少し怖いかもしれませんね。でも、勉強になりました!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search