コンピュータグラフィックス 第3回

モデリング


概要

CGによる画像生成では、まず描きたい物体の形・位置・大きさなどをコンピュータ内部の データとして表現しなければならない。 この作業が「モデリング」であり、できあがったデータが「モデル」である。


形状モデル


ソリッドモデルの形状表現


境界表現の局所変形


曲面・曲線

立体の稜線を曲線で、面を曲面で表す方法について説明する。 表示のときに曲線を近似的に折れ線として、曲面をポリゴンの 集まりとして表現する場合でも、モデルは曲線・曲面で表現して おくとメモリの節約になる。

曲線・曲面の表現形式

2次曲線

2次曲線は a x2 + b y2 + c + 2dxy + 3ex + 2fy = 0 のような陰関数表現によって表現される代数曲線である。 係数によって楕円、放物線、双曲線に分類される。 2次曲線が円錐曲線ともよばれるのは、円錐面の断面線として得られるからである。

2次曲線は、平行移動と回転によって、標準系 (canonical form) に変換できる。


パラメトリック曲線

パラメトリック曲線は、おのおのの座標がパラメータの陽関数形式で表現された曲線である。 関数が多項式であれば「多項式曲線 (polynominal curve)」、 有理式であれば「有理式曲線 (rational curve)」と呼ばれる。

複雑な曲線は、複数のセグメント(区間)からなる複合曲線 (composite curve) で表される。各セグメントはそれぞれ1つの式で表わされている。 各セグメントが多項式曲線であれば区分多項式曲線 (piecewise polynominal curve), 有理式曲線であれば区分有理式曲線とよぶ。

CGでは、ファガーソン曲線、ベジエ曲線、Bスプライン曲線、 有理ベジエ曲線、NURBS (非一様性有理Bスプライン曲線)がよく利用される。


ベジエ曲線

ベジエ曲線 (Bezier curve) は、制御点(control point)とよばれる 複数の点 { Pi } を、ある比率で混合することにより 表される多項式曲線である。

n次のベジエ曲線を定義するにはn+1個の制御点が必要である。 CGでは3次のベジエ曲線がよく用いられる。 この場合制御点はP0, P1, P2, P3の4点である (1 ≤ t ≤ 1)。

P(t) = P0B30(t) + P1B31(t) + P2B32(t) + P3B33(t) ...式(3.21)

混合比を表す関数 B3i(t)は3次の バーンスタイン基底関数 (Bernstein basic function)は式(3.22)である。

B30(t) = (1 - t)3
B31(t) = 3 t (1 - t)2
B32(t) = 3 t2 (1 - t)
B33(t) = t3

一般に n 次のベジエ曲線は、n+1個の制御点にn次のバーンスタイン基底関数 Bin(t)を混合比として P(t) = Σni=0 PiBin(t)である。また、バーンスタイン基底関数は Bin(t) = iCn t i(1-t) n-i である。

ベジエ曲線では、 曲線の両端点が両端の制御点 P0, Pn に一致し(端点一致性)、 そこでの接ベクトルがベクトルP0P1および ベクトルPn-1 , Pnの向きと一致する。 また、制御点によって定義される凸包 (convex hull) の中に、曲線が完全に含まれる。


Bスプライン曲線

Bスプライン曲線 (B-spline curve) は、制御点 { Pi } と ノット列 (knot vector) { ti } によって定義された曲線である。 複数の多項式曲線を接続して1本の曲線としたもので、 接続点でのパラメータの値を指定するのがノットである。

ノット列を使ってBスプライン基底関数を求める。 一様3次Bスプライン基底関数は 式(3.30) となる。 一様n次Bスプラインのとき 「Cn-1連続」となるので、 一様3次Bスプラインでは C2連続であり、法線方向だけでなく 曲率まで連続となる。


2次曲面・トーラス面

2次曲面は、2次多項式によって表現される代数曲面である。

 a x2 + b y2 + c z2  2eyz + 2fzx + g2xy + 2hx 2iy + 2jz = 0  式(3.34) 

2次曲面はa〜jの値によって図(3.34)の9種類に分類される。


パラメトリック曲面

パラメトリック曲面 (parametric surface) は、座標がS=F(u,v)として 表現された曲面である。 Fがu,vについての多項式や有理式である、多項式曲面や有理曲面がよく用いられる。 Fがu,vについてそれぞれn次、m次であるときは n×m次曲面とよばれ、 n=mのときは双n次曲面と呼ばれる。

複雑な形状は、複数の曲面(パッチ、patch)をつなぎあわせて表現し、 複合曲面 (composite surface) とよぶ。

CGでよく使うのは、双3次クーンズ曲面、ベジエ曲面、Bスプライン曲面、 有理ベジエ曲面、NURBS曲面である。 このうち、制御点を用いて形状を決定する4種類の曲面の性質が表(3.3)である。

ベジエ曲面

ベジエ曲面 (Bezier surface) は (n+1)×(m+1)個の格子状に並べた 制御点 { Pij } によって定義される曲面である。 P00, Pn0, P0m, Pnm の4個の制御点が4隅の位置を指定し、その他の制御点で 曲面の形を定める。 ベジエ曲面は、 u をパラメータとする曲線の制御点をパラメータ v 方向 に沿って移動するような、ベジエ曲線の移動軌跡とみなすことができる。

CGでは、3次までのベジエ曲面がよく用いられる。 双3次ベジエ曲面は、16個の制御点P00, ..., P33 によって定められる(図3.37)。

ベジエ曲面は次の式であたえられる。

 S(u,v) = Σi=03 Σj=03 PijBi3(u) Bj3(u)
  Bin(u) = nCi ui (1-u)n-i    n次のバーンスタイン基底関数
  Bjm(u) = mCj uj (1-u)n-j    m次のバーンスタイン基底関数

レンダリングにおける曲面の扱い

曲面形状に対して、レンダリング処理をほどこしディスプレイモニタに表示する場合、 「曲面表現のままで処理する方法」と、 「曲面をポリゴンで近似してから処理する方法」がある。 ポリゴンで近似する方法は、 曲面をポリゴンに分割する処理を付加するだけで あとはハードウェアが高速にレンダリングできるので、 よく使われている。


ポリゴン曲面の表現

ポリゴン曲面

ポリゴン曲面 (polygon surface) とは、数式で表現された曲面でなく、 多数の細かいポリゴンの集合として表現された曲面である。 ポリゴンの集まりで表現された形状データをメッシュ (mesh) とよぶ。

パラメトリック曲面を用いる方法では曲面パッチ間の連続性が問題になるが、 ポリゴン曲面ではこれが保証されているのが利点である。

ポリゴン表現の面としては、平面性が保証されている三角形を使うことが多い。

細分割曲面

細分割曲面 (subdivision surface) は、初期メッシュに単純な分割操作を 再帰的に適用してなめらかな曲面を得る手法である。


細分割曲面は分割操作を無限回適用した極限として定義されるが、個々の ポリゴンをスクリーンへ投射したときの大きさが1画素より小さくなれば それ以上の分割は不要である。


平滑化処理

3次元デジタイザなどを用いて実物からポリゴン曲面データを得た場合は、 ノイズを除去するために、ポリゴン曲面の平滑化(smoothing)処理を行う。

ポリゴン曲面の平滑化には、画像処理用のフィルタを用いることもできるが、 曲面固有の特徴(周波数、曲率など)を考慮したフィルタが提案されている。


パラメータ化

ポリゴン曲面では、パラメトリック曲面のようなパラメータ座標系(u,v) からの写像は存在しない。テクスチャマッピングをする場合には、 パラメータ座標系からの写像を構築する(パラメータ化、parametrization)。


詳細度制御

ポリゴン曲面が視点からある程度離れていると、それぞれの面が1画素にも 満たない大きさになる。 その場合は、ポリゴン曲面に簡単化(simplification)を行うと処理が効率化できる。 形状の詳細度を調整する手法を、ポリゴン曲面の詳細度(LOD: Level of Detail) 制御とよぶ。



そのほかの形状表現法

自然物や現象の表現に適した表現方法について説明する。

ボクセル

立体を3次元の格子点上の小立方体の集合で表すのがボクセル表現である。 ボクセル表現はデータ構造が簡単で集合演算を簡単に行うことができる。 各ボクセルに、その部分の透過率などのデータを持たせ、 物体内部まで表現したデータをボリュームデータと呼ぶ。 ボリュームデータをレンダリングするには、


八分木

「四分木」は画像集合で定義された2次元図形を表す手法である。 図形全体を囲う正方形を縦横に2等分することで4個の小正方形が 図形に完全に含まれるか、全く含まれない場合はこれ以上分割しない。 部分的に含まれる場合は、正方形を再帰的に分割する。

「八分木」は3次元図形に適用したもの。 ボクセル表現のデータを縮小したものに相当する。


フラクタル

全体形状と部分形状に相似関係があるとき、「自己相似性を持つ」といい そのような図形を「フラクタル」と呼ぶ。 コッホ曲線、マンデルブロ集合、ジュリア集合などがある。


「フラクタル次元」はフラクタル図形の複雑さを表す尺度である。 n倍のサイズの図形をつくるためにA 個の基本図形が必要なとき、 その空間は log A /log n 次元である。

雲、海岸線、シダの葉などの自然物の図形をコンピュータの計算によって 作り出す手法として、中点変位法、 IFS (Iterated Function system)を用いる方法、 生成文法を利用する方法などがある。


メタボール

メタボールは、濃度分布を持つ球の集合によって形状を定義するもので、 雲や人体などの表現に使われる。 濃度の和が一定となる面(等値面)によって曲面を表す。 濃度分布は正規分布に基づく分布、区分的な2次関数などで定義される。 メタボールをレンダリングするにはレイトレーシング法が必要であり、 時間がかかる。 そのため、濃度分布をボクセルで表現し、マーチングキューブ法などで ポリゴン化する場合もある。


パーティクル

形が不定で明確な表面が存在しない物体(葉の集まりとしての樹木、 火の粉の集まりとしての炎、水滴の集まりとしての滝など)は、 一定の規則で生成したパーティクル(粒子)の集まりで表現する。

パーティクルは、位置や色などの属性を持ち、ある規則にしたがって 生成・移動・消滅する。物理的な裏付けの有る規則を用いることで、 リアルなモデルを作ることができる。