CGができるまで — 3Dモデルが1枚の絵になる旅

ゲームも映画のCGも、もとをたどれば「三角形の頂点座標のリスト」にすぎません。それが毎秒60回、画面の色付きの点(画素)に変わる — その流れ作業グラフィックスパイプラインの全体地図を、動かしながらつかみます。

1. 全体地図 — 頂点データが画素になるまで

3Dモデルの実体は、三角形の頂点座標 (x, y, z) がずらりと並んだだけのデータです。これが絵になるまでには、決まった順番の加工場を通ります。工場のベルトコンベアと同じ「流れ作業」なのでパイプラインと呼ばれます。

まずは下のデモで全体の流れを眺めてください。「1ステージずつ見る」ボタンを押すと、各加工場の役割を順に確認できます。

グラフィックスパイプライン — 光る粒がデータの旅
光る粒=処理されていく三角形のデータ。ステージを通過するたびに姿が変わります(点の集まり → 変換された三角形 → 画素のかたまり → 色付きの画素)。「1ステージずつ見る」を押すと流れが止まり、各ステージの説明が出ます。再生を押せば流れに戻ります。
POINT — パイプライン=流れ作業 前の三角形がラスタライズされている間に、次の三角形は座標変換の真っ最中 — 各ステージは同時に別のデータを処理できる。この分業のおかげで、GPUはわずかな時間で大量の三角形をさばける。
1フレームの持ち時間 = 1 ÷ 60 ≈ 16.7 ms 60fpsのゲームでは、この時間内にパイプライン全体を走り切って1枚の絵を完成させる。何十万〜何百万個の三角形ぶん。

2. 頂点の旅 — 回して、カメラに映す

最初のステージは座標変換と投影。頂点を回転・移動して世界に配置し(くわしくは次のレッスン)、カメラから見た2D画面上の位置に映します。

「3Dを2Dに映す」と聞くと難しそうですが、核心は驚くほど単純で、奥行き z で割るだけ。遠い点ほど大きな数で割られて中央に寄る — これが遠近法の正体です。下の立方体で確かめてください。

ワイヤフレームの立方体 — 8個の3D頂点を2D画面へ映す
オレンジの頂点1個に注目 — 3D座標が2Dの画面座標に化ける様子を左上に表示しています。カメラ距離を縮めると手前と奥の「割られ方」の差が広がり、遠近感が強くなります。
画面のx = f · x ⁄ z  画面のy = f · y ⁄ z 奥行き z で割るから、遠いものほど小さく写る(f はレンズの焦点距離にあたる定数)。透視投影はレッスン03でくわしく。

3. 点 → 線 → 面 — 「物体らしさ」の作られ方

頂点だけでは、モデルはただの点の群れです。点を辺で結ぶと形が見え(ワイヤフレーム)、面を塗って光の当たり方を計算すると、はじめて「物体」に見えます。同じ立方体を3通りに描き比べてみましょう。

同じ立方体を3通りに描く
③では、カメラに背を向けた面を描かない背面カリングと、面の向きと光の角度から明るさを決める簡単な陰影(レッスン07のテーマ)まで入っています。データ量でいえば「頂点8個+どの頂点で面を作るかのリスト」だけで、この見た目が作れます。
注意 — 画面は毎回ゼロから描き直している CGは「一度描いた絵を少しずつ動かしている」のではない。静止して見える画面も、毎秒60回、何もない状態からパイプラインを走らせて全部描き直している。だから視点も光もモデルも、次のフレームでは自由に変えられる。

4. 絵は「描き重ね」でできる

1枚の完成画像も、内部では部品ごとに順番に描き重ねられてできあがります。背景、奥のもの、手前のもの、そして影や光の仕上げ。下の再生ボタンで、1フレームぶんの絵が組み上がる様子をスローで見てみましょう。

1枚の絵ができるまで — 描き重ねをスロー再生
実際のGPUはZバッファ(レッスン06)のおかげで描く順番に縛られませんが、「たくさんの部品を1枚のフレームに描き重ねる」という本質は同じです。この数秒の工程を、本物は16.7ミリ秒でやってのけます。
一歩先へ — GPUという専用工場 このパイプラインを専門にこなすのがGPU。数千個の小さな計算コアが頂点や画素を同時に処理する(レッスン11)。近年はレイトレーシング専用コア(レッスン09〜10)や、ニューラルネットで絵を仕上げる技術(レッスン12)も、この工場に加わりつつある。

5. まとめ — パイプラインの地図を持って進もう

ここから先のレッスンは、この地図の各ステージをひとつずつ拡大して見ていく旅です。まずは次のレッスンで「座標変換」から。