ジオメトリシェーダを活用した新表現(6)~ディスプレースメントマッピング

分割しただけの3Dモデルに対し、直接ディスプレースメントマッピングを行っても良いのだが、せっかくポリゴン分割したので、この分割した3Dモデルをより滑らかに見せる工夫も同時に実装すると高品位な描画が期待できる。

ATIのジオメトリシェーダを使ったテッセレーションの仕組みでは、そうしたアイディアまでも同時に実装されていた。

テッセレーションの際に新しく生成されるポリゴンに対し、その頂点座標を高次曲面生成技法の「ベジェ曲面」(Bezier Curved Surface)の方程式で算出される位置へと近似するのだ。ベジェ曲面の座標や法線ベクトルの計算方法や、そうした情報を分割された三角形の頂点情報へはめ込む具体的な手段については、ATIの開発者サイトに論文が掲載されているので、そちらを参照して欲しい。

簡単に概念だけを説明すると、分割対象の三角形の3頂点を通るベジェ曲面を生成し、その曲面に、分割した三角形を当てはめていくようなイメージになる。ATIの実装では3つの頂点をベジェ曲面の制御点として三次ベジェ曲面を用いている。なお、この法線ベクトルを滑らかに紡いでいくような曲面分割方法は、「法線ベクトル(Normal Vector)」の"N"と、「紡ぐ」「補う」の"PATCH"を取ってN-PATCH法、あるいは「PN Triangle」(PN=Point Normal)法と呼ばれる。

三次ベジェ曲面

入力頂点

左が各頂点を直線で結んでから陰影処理を行ったもの。右は各頂点を三次ベジェ曲面で結び陰影処理を行ったもの

ポリゴン分割レベル(上段)と、その分割レベルでベジェ曲面を適用したときのレンダリング結果(下段)

3頂点を通るベジェ曲面はいくつかのパターンが考えられるが、制御パラメータとして各頂点の法線ベクトルを導入すれば適合するベジェ曲面は自ずと決まってくる。この図は3頂点の法線ベクトルに応じて異なる3つのベジェ曲面を示したもの

このようにして、ポリゴンを分割して、N-PATCHで変位させてできた3Dモデルを、再び頂点シェーダに戻してVTFにて凹凸情報で整形してディスプレースメントマッピングを実行……これでジオメトリ関連の処理は完了となる。このあとはピクセルシェーダのフェーズへと移行するわけだ。

低ポリゴンモデルを適宜ポリゴン分割し、ハイトマップでディールをディスプレースメントマッピングする……というのが理想的な実装。VTFとテッセレーションの仕組みを実装すればこれが可能になる

さらにこの仕組みを高度にしていくならば、視点からの距離に応じて、出っ張り具合や引っ込み具合がある一定レベル以上の凹凸についてのみ、ディスプレースメントマッピングでジオメトリレベルでの変位を実践し、それ以下の凹凸については、法線マップによるバンプマッピングで表現するようにすればいいだろう。こうした適応型処理でディスプレースメントマッピングと法線マップによるバンプマッピングを使い分ければ、ジオメトリ負荷とピクセル負荷をバランスさせることができるはずだ。(続く)

理想は視点からの距離に応じてバンプマッピングとディスプレースメントマッピングを同時に使い分けるハイブリッド方式

(トライゼット西川善司)