■■■ RoundEngine とは? ■■■




■ サブディビジョン 曲面化


1. Catmull-Clark をゲームで使うためには

Catmull-Clark が GPU と相性が悪いことは既に述べた。では、この Catmull-Clark データをゲームで使用する方法は無いのか?

その解の一つが、「Catmull-Clark データをそのままゲームで使う」のでは無く、「Catmull-Clark データを曲面に変換し、その曲面をゲームで使う」方法だ。
最近の GPU に限れば、曲面と GPU の相性は比較的良い。ただし CAD でよく用いられる NURBS という複雑な曲面は、GPU との相性は良くない。ベジェ曲面やグレゴリー曲面(どちらも一番単純な形式のモノ)が、GPU と相性が良いのである。

なお曲面化すると、元の Catmull-Clark よりも入力データ量は増える。しかしポリゴンを入力データとする場合に比べれば小さくて済むので、十分メリットがあると考えられる。


2. 近似 Catmull-Clark サブディビジョン

「Catmull-Clark → 曲面 変換」(以後、曲面変換 と略) で有名な方法として、
  • 近似 Catmull-Clark サブディビジョン
    (Approximating Catmull-Clark Subdivision : 以後、ACC と略)
がある。また ACC は、変換後の曲面が "ベジェ曲面"、"グレゴリー曲面" のどちらであるかによって、「ベジェACC」「グレゴリーACC」に分かれるが、ここでは(より高性能な)グレゴリーACC の方を「ACC」と呼ぶことにする。


3. ACC の曲面変換

ACC の曲面変換は、独自の数式に基づいて行われる。これにより単純な実装が可能となるが、反面 形状が少し複雑な状態になった場合に対処することが難しくなる。
例えば「隣り合う曲面での曲がり方が激しい」ときに、うまく対応出来なかったりするのだ。


4. グレゴリー曲面

グレゴリー曲面はベジェ曲面と異なり、隣り合う曲面どうしを滑らかに繋ぐことが出来る。しかし "滑らかに繋ぐ" 操作を行った場合、曲面内部の自由度(表現力)が落ちるのが欠点である。

逆に "滑らかに繋ぐ" 操作を行なわなかった時は、曲面内部の自由度は落ちないが、当然 滑らかには繋がらない (曲面間で折れる)。ちなみに「グレゴリーACC」では、滑らかに繋ぐことを犠牲にして、曲面内部の自由度の方を取っているように思われる。

なお実際には、PCやゲーム機内部で「曲面 → ポリゴン 変換」(以後、ポリゴン変換 と略) されることで、3DCG 画像として表示する。


5. 「事前処理」と「ゲームアプリ側の処理」

"ACC の曲面変換" をゲームに使う場合、すべての処理をゲームアプリ側で行うと、「Catmull-Clark そのものをアプリ内に組み込む」よりも遅くなってしまう。
そこで、
  • a)  「ACC の曲面変換」は事前に済まし、曲面データを作成しておく。
    b)  a. の曲面データをゲームアプリに読み込ませ、「ポリゴン変換」を GPU に任せる。
とすれば良い (すなわちゲームアプリ内で行うのは、b. のみ)。



(C)2013-2016 EISHIN, All Rights Reserved.