メニュー
目次
3次元CG
3次元CGとは
2次元のCGでは平面上の座標(x,y)を使用して線や曲線を計算した.3次元CGでは点として奥行きzを含めた(x,y,z)で計算するように拡張される.これにより,3次元空間上に直線や曲線で構成された面を定義し,面と面を組合せることで立体を表現する.
例えば,一番単純に曲面だけで構成される立体物として球がある.半径rの球の表現は次の式になる.
x2+y2+z2=r
しかし,現在コンピュータの画面は2次元の平面である.そのため最終的に計算された立体の像を,表示画面上の平面に投影することで立体物の「絵」を描き,それを人間が観ることになる.
立体ディスプレイも研究されているものの普及はまだまだな状態にある.例えばホログラムや,煙などに立体を投影する装置や,バーチャルリアリティでよく使用される両眼それぞれに右目用画像と左眼用画像を見せる眼鏡状のヘッドマウントディスプレイなどがある.
モデリング
球のような単純な曲面ならまだしも,例えば人体など複雑な形状の場合,その曲面すべてを表現する数式を用意するのは困難である.そこで,実際には多角形の面を複数組み合わせることで立体を近似する.この多角形のことをポリゴン(polygon)と呼ぶ.
ポリゴンの頂点の座標を決定し,ポリゴンをうまく組み合わせて立体を作成することをモデリング(modeling)と呼ぶ.一般的に,モデリングは専用のモデリングツール(モデリングソフト)を利用して作業する.モデルには次の種類がある.
- ワイヤフレーム(wireframe)モデル ポリゴンの線だけを構成したもの
- サーフェス(surface)モデル ポリゴンの面だけで構成されたもの
- ソリッド(solid)モデル 面の向き(内と外)を区別可能な情報を持たせ,ひとつの立体としたもの
- メタボール(metaball) ポリゴンでは近似しにくい,すべて曲面だけからなる立体(人体など)を表現するためのもの
- パーティクル(particle) ポリゴンでは表現不可能な,雲や炎のような不定型な物体を,微小な粒子(点・微小面)の集合として表現したもの
ワイヤフレームは,昔コンピュータの処理能力が低かったことにやむを得ず使用されたもので,現在ではCGの学習用に使う程度で,実際に利用される例はまず見かけない.
サーフェスモデルは,線ではなく,多角形のポリゴンに面の情報を持たせることで,後述の隠面消去を実現したものである.
ソリッドモデルでは,単純な面の情報だけでなく,面の向き(どちらが外側か,立体の内側か)の情報を持たせて立体として定義できるように拡張されたモデルである.簡単な構造の立体物(直方体,円柱など)をプリミティブ(primitive: 基本立体)としてあらかじめ用意し,それらを組み合わせたり,重ね合わせることでさらに複雑な立体を定義するブール演算(論理演算)を行うこともできる.例えば,円柱と半径の小さい円柱を,円の中心を重ねて減算させて,竹輪状の物体を定義できる.このような演算による立体表現をCSG表現(Constructive solid geometry representation)と呼ぶ.
メタボールとは,中心が一番密度が濃く周辺にいくにつれ薄くなるような球体(または回転楕円体)のことである.ブラブ(blob)とも呼ばれる.これを複数組み合わせることで,複雑な曲面形状を表現するモデルである.人体のようなすべて曲面だけから構成されるものをうまく表現することができる.
パーティクルでは,ある程度の幅を持った範囲に多数のパーティクルをばらまき,全体の移動方向を決定し,その大きな方向に従いながらもひとつひとつの粒子はランダムな誤差を持たせながら位置を移動させることで,ゆらぎのある動きをシミュレートできるようになる.さらに粒子には平均寿命を与えておき,寿命がきたものから消滅したり,決められた確率であらたな粒子を生成したりもさせる.
レンダリング
モデリングされた物体は,単純にポリゴン表面に塗られた色で表現してはリアルに見えない.そこで光源からの光を考慮して表面の反射光の強さなどに応じて明暗の度合を変えたり,別の色に着色される.これをレンダリングと呼ぶ.
隠線消去・陰面消去
ワイヤフレームは針金細工のように面を持たないため,人間の目から見て手前側だけでなく裏側の構造まで透けて見えるが,面を持つサーフェスモデルやソリッドモデルの場合,陰に隠れて見えない部分を計算して求めて隠す処理を行うことができる.これを隠線消去,隠面消去と呼ぶ.
レンダリング時には,当然ひとつひとつのポリゴンの面を光を計算する前にこの処理を行って描画すべき面を決定しておく必要がある.この処理を実現するには,Zバッファ法が有名である.通常のデジタル画像は2次元配列された画素の集合であるが,それに対応するもう一枚の画像データを用意する.そちらには,画素としての色情報・明度情報などを格納するのではなく,視点からの距離を書き込むのである.これをZバッファと呼び,Zバッファに格納されたデータを距離画像と呼ぶ.ポリゴンのデータをひとつずつ通常の画像へ描画する際に,Zバッファに現在その画素位置の距離情報と,描画しようとしているポリゴンの距離情報を比較して,ポリゴンの方が近い場合にだけ描画する.この処理をすべてのポリゴンを描画するまで繰り返すことで,より近いポリゴンだけが描画され,残りは陰に隠れることとなる.
シェーディング
レンダリングするには,各ポリゴンの面の反射率などや拡散率などの情報も必要となる.その上で光源を設定して各面が実際にどの程度明るく見えるのかなどを計算する必要がある.計算対象となる光は,鏡面反射光・拡散反射光・環境光などがある.
ゲームなどでは,リアルタイムに映像を生成する必要があるため,これら各ポリゴンの明るさを高速に計算しなければならない.これをシェーディングと呼ぶ.
影(shadow)と陰(shade)の違い: ある物体の光源にてらされない部分のことを陰,その物体によって地面などに生じる光のあたらない部分のことを影と呼ぶ.シェーディングの他に,この影を作成するシャドウイングもある.
シェーディングをポリゴン単位で行うと,ポリゴンの境界線が目立ち,角張った立体に見える.そこで2つ以上の面が交差する境界上では,それら面の法線方向の平均をとった上で中間の面があるかのように(角を丸めたかのように)シェーディングを行うことで境界をうまくぼかす処理が行われる.これをスムーズシェーディングと呼ぶ.スムーズシェーディングには,グーローシェーディングとフォンシェーディングがよく用いられる.
レイトレーシング
ポリゴン単位ではなく,一画素一画素,原理的に正しく光の強さを計算する方法がレイトレーシング(光線追跡)である.ある画素に届く光を,光源からの距離・表面の反射率など諸条件をすべて逆算して求め,ただしくその画素の明るさや色を決定する.いわば,手抜き無しにまじめにすべて計算する方法で一番正確に物体の画像を生成することができるものの,膨大な計算時間が必要となる.(現代のコンピュータならば実際にかかる時間は数十秒単位であり,リアルタイム処理には遠い状態である.)
マッピング
各ポリゴンの面に表面の色が存在する.その色の明るさを光の加減により変えることでレンダリングが行われる.その際,単にポリゴンごとの色を決めるのではなく,各面に絵を張り付けることをテクスチャマッピングと呼ぶ.テクスチャとは物体表面の模様を表し,物体の質感に影響を与える.
また,ポリゴンの表面に微細な凹凸を付けることをバンプマッピングと呼ぶ.
アニメーションと座標変換
二次元平面上の幾何学図形の変形にはアフィン変換が用いられる.三次元の場合にはより一般的な射影変換を行う.
アフィン変換では,幾何学図形に対して次の操作が可能である.
- 回転
- 拡大・縮小
- 平行移動
- ずれ変換
また,ある図形から別の図形に連続的に変化させることをモーフィングと呼ぶ.元の図形のある点と,別の図形の対応点をあらかじめ定義しておき,間を変化分を補間させる仕組である.3DCGの場合には,ポリゴンの頂点の対応をとることで行われることになる.
3DCGでは,一般のアニメーションのように一枚一枚変化した絵を人間が設定するだけではなく,このような変形操作や視点位置を変更して座標などを再計算させたりすることで,自動的に動きを作成することも多い.
リアルタイム(秒間30フレーム)に連続した絵を表示させるために,通常コンピュータではダブルバッファリングを用いる.これは描画用の画面を2セット用意しておき,一枚を表示中に裏側で次に表示する絵を生成する技法のことをいう.現代のパソコンのグラフィック装置には大抵この機能がハードウェアとして組み込まれている.
CPUとGPU
このようなポリゴンの描画や,三次元座標の計算,Zバッファ,レンダリングなどは通常のコンピュータではCPUがそれぞれひとつひとつ計算を行うことで実現される.しかし,現代のコンピュータではCPUとは別にグラフィック装置にGPUと呼ぶ装置が組み込まれている.これはこうした幾何学計算などを高速に行うためのグラフィックプロセッサである.パソコンとは別に,家庭用ゲーム機では,CPUよりもこのGPUの性能が重視されてきた.