モデルのデータ(形状,属性)をもとにしてリアルな画像を生成することをレンダリング(rendering, 描写)という。 レンダリングのアルゴリズムには,つぎのようなものがあるが, ふつうの 3D ソフトでは,スキャンライン,レイトレーシングなどが使われることが多い。
画家のアルゴリズム (painter's algorithm)
ポリゴンを,遠方の面から順に塗ることによって隠面消去を行うという単純な方法。 CADソフトなどのレンダリングに使われることがある。 影や透明体は扱えない。アンチエイリアシング不可。
Z バッファ法 (Z-buffer algorithm)
各ポリゴンを順に塗っていくという単純な方法。このとき,画面のピクセルごとに,塗ったポリゴンの z の値(奥行き)をバッファ(一時的なメモリのこと)に記憶しておき,つぎに同じピクセルに別のポリゴンが来たときに,zの値を比較して,すでに塗ったポリゴンよりも手前である場合だけ改めて塗るという方法。
処理が速いので,リアルタイムで表示する必要がある CAD やゲームのレンダリングなどで使われることが多い。
また,多くのグラフィックチップが,ハードウェアレベルで z バッファ法をサポートしている。
単純なので速いが,影や半透明体が扱えない,アンチエイリアスができないなどの欠点がある。
* 影は,デプスバッファという方法を用いれば擬似的に可能。
* アンチエイリアスは,仮想ピクセルを導入してオーバーサンプリングを行えば可能。
スキャンライン法 (scanline method)
画面の走査線 (scanline) ごとに,走査線に掛かるポリゴンを探し出し,前後判定をして塗っていく方法。比較的速いので,広く使われる。アンチエイリアシングができる。影や屈折は不可。向こうが透けて見えるだけの半透明体は可。
* 影は,デプスバッファという方法を用いれば擬似的に可能。
レイトレーシング (ray tracing, 光線追跡法)
視点から画面の各ピクセルに向けて光線 (ray) を出し,屈折,反射などの物理現象をシミュレートしながら,光線を光源まで逆に辿ることによって画像を生成する方法。
影,屈折,映り込みなどが表現できるので写真的なリアルな画像が得られる。
広がった光源による照明効果も可能 (原理的には,あらゆる物理現象が表現可能)。
アンチエイリアシングは,1つのピクセルの中の多数の点の色を計算して平均化する (over-sampling) などの方法で行う。
レイトレーシングは計算時間がかかることが欠点であるが,コンピュータの処理速度の向上で,あまり問題ではなくなった。
図.レイトレーシングの例
レンダリングして画像を作るためには,色のほかにシェーディングのための属性を与えなければならない。
オブジェクトに,面の向きに応じた明暗や陰 (shade) をつけることを「シェーディング」(陰 shade と影 shadow は 3D CG では別扱いなので,「陰影」と訳してはいけない),または「反射モデル」,「照明モデル」などとよぶ。
シェーディング属性は,簡単なわりにはリアルな表現ができるということで,つぎの3成分で指定することが多い。
これをフォン (Phong) の反射モデルという。 Phong はベトナム出身の人。
(1) アンビェント (ambient) 成分 − 環境光
周辺の物体からの間接光による明るさのこと。光源からの直射光が全く当たらない陰の部分の明るさはこの成分だけで決まる。
0% で真っ黒になる。
立体の置かれた環境に応じて数%のレベルで与えるとよい。
(2) ディフューズ (diffuse) 成分 − 拡散反射光
直接照明の光が乱反射することによる,表面の明るさのこと。光線との角度に応じて明るさが変わる。ふつう,簡単のため入射光があらゆる方向に等方に乱反射するとして,面の明るさを入射角の cos に比例する(Lambert の法則)ようにする。材質に応じて調整する。
(3) スペキュラー (specular) 成分 − 鏡面反射光
表面に光沢がある場合の反射成分,いわゆるハイライトの強さ。サイズも変えられる。金属と非金属では光の反射のメカニズムが異なるので,スペキュラーの入れ方も違う。すなわち,金属ではスペキュラーに金属特有の色が付く。いっぽう,非金属ではスペキュラーの色は光源の色と同じになる。
スペキュラーの強度分布の計算には Phong の式や, それを改良した Blinn の式が使われるが, 2010年代に入って GGX という式もよく使われるようになった。
この3成分の組み合わせで,かなり幅広い質感を表現することができる。例えば
・プラスチックでは,スペキュラーを鈍く弱くする。
・ガラスでは,アンビェントとディフューズを弱くし,スペキュラーを鋭くする。
・光沢のある金属では,アンビェントとディフューズを弱くし,スペキュラーを強く鋭くする。
スペキュラーの色は金属の色と同じにする。
【注.フラットシェーディングとスムーズシェーディング】
ポリゴンからなるモデルをシェーディングするとき,ポリゴンの向きに応じてそのまま面の明るさを決めることをフラットシェーディング (flat shading), 表面を滑らかに見せるように陰をつけることをスムーズシェーディング(smooth shading)という。
フラットシェーディング | スムーズシェーディング (Phong) |
スムーズシェーディングの方法としては,単に各ポリゴンの色を補間して滑らかに見せるグーロー (Gouraud) シェーディング (Gouraud はフランス人の名前) と,ポリゴンの各面の法線ベクトル (面に垂直な方向のベクトル) を補間して滑らかに見せるフォン (Phong) シェーディングがある。 グーローシェーディングにはスペキュラーを正しく表現できないという問題があるので,ふつうはフォンシェーディングが使われる。CAD などの分野でスペキューラーを必要としないときは,計算の速いグーローシェーディングが使われることがある。
単に色を付けてシェーディングするだけではものたりないとき,柄 (がら) を物体の表面に貼り付けるマッピング (mapping,写像のこと) という方法がある。 テクスチャ(柄)を貼り付けるテクスチャマッピング(texture mapping),物体のまわりの風景を貼り付けて映り込みのように見せかける リフレクションマッピング (reflection mapping,環境マッピングともいう),凹凸の情報を貼り付けて表面に凹凸があるように見せかけるバンプマッピング (bump mapping)などがある。 マッピングではないが,柄を空間の関数として与え,切り口に柄が現れるソリッドテクスチャ (solid texture) も,木目・大理石などの質感を出すために利用される。
テクスチャマッピング |
リフレクションマッピング (環境マッピング) |
バンプマッピング (皮膚の凹凸) |
バンプマッピング (波紋) | ソリッドテクスチャ | ソリッドテクスチャ |
局所照明によるレイトレーイング | 大域照明によるレイトレーイング |