ベルレ積分によるフルインタラクティブな動的なさざ波
動くさざ波を法線マップを動かして表現していたものを動的なものにするためには、要するに法線マップ自体を動的生成すればよいことになる。
法線マップの生成は、凹凸を濃淡で表現したハイトマップから生成すればよいことは、この連載の「法線マップ」の回で紹介した。となれば、さざ波となる凹凸を表現するハイトマップを何らかの方法で生成し、このハイトマップから法線マップを生成すればよいという方針が見えてくる。
このさざ波のハイトマップ生成には、何らかの動的な波動シミュレーションを行う必要があるわけだが、現在もよく見られるのが、ベルレ積分法(Verlet Intergration)だ。
ベルレ積分は前の状態と現在の状態の差分情報から速度を算出して次の状態を求める離散的な積分方法で、GPUがテクスチャに対して実行させる演算モデルに非常に適していることからよく用いられる。
「どんなさざ波を起こすか」というテーマについても様々な理論やアイディアがあるが、周波数の高い細かいさざ波は複数の同心円状の波紋を多数発生させる手法がよく用いられるようだ。
ベルレ積分を毎フレーム(あるいは毎フレームでなくとも定期的なフレーム間隔で)、繰り返し行うことで、次の状態のハイトマップ(≒次の状態のさざ波)が求まる。
この水面に対し、他のキャラクタが干渉を及ぼしたり、何かを投げ入れたりするような干渉があった場合は、そこに新たなる波の"種"をハイトマップテクスチャに対して描き込めばいい。あとは、次の状態はベルレ積分を行うことで自動的に求まってしまう。
この手法の動的なさざ波をリアルタイム実装して、広く公開したのはNVIDIAのGeForce 4 Tiシリーズ用のデモ「Tidepool」であった。(続く)
NVIDIAのGeForce 4 Tiシリーズ用のデモ「Tidepool」(2002)より。デモはNVIDIAのサイトからダウンロードできる |
(トライゼット西川善司)