お気に入りタイトル/ワード

タイトル/ワード名(記事数)

最近記事を読んだタイトル/ワード

タイトル/ワード名(記事数)

印刷2008/02/26 20:53

イベント

[GDC2008#48]ハイトフィールドを使った実用的な流体表現

 流体モノの第2弾だ。AGEIAはハイトフィールド(Height Field)を使った水の表現についてのセッションをGDC08で行っていた。
 ハイトフィールドとは,水面の高さを示すバッファを操作して液体表現を行うもの。2.5次元(つまり,モノは3次元なのだがデータ構造が2次元ですみ,簡単に扱える)形状の波しか描画できないという制限はあるものの(逆巻く波は無理),その範囲でなら十分にそれっぽい液体を高速に表現できる手法だ。
 まず最初に,動画から見てもらったほうがいいかもしれない。


 これがハイトフィールドの簡単な例だ。最初に1次元での波の動き,そしてそれを2次元に拡張した動きを示している。いずれもそれぞれの地点の水位の高さだけを操作して実現された波である。

 講演を行ったMatthias Muller-Fischer氏は,液体表現でもっとも基礎となるコードを挙げ,これはC言語における“Hello World”と同じものだとした。uとvの二つの配列をループ内で処理していく簡単なコードだ。

 また,ハイトフィールド以外の波の作り方をいくつか挙げていたが,とくにオフラインで計算する手法では512×512×512という大容量のボクセルを使い,1フレームあたり10〜50秒もかけてレンダリングが行われる。さすがに画像は綺麗で水の挙動も問題ないのだろうが,ゲームで使うには,もっとローコストでなければならないのはいうまでもない。


 そのためには,まず解像度を下げること,3次元から2次元にすること,見えている部分だけ処理すること,遠くにいくほど手を抜くこと(LoD)などを駆使していく必要があるという。物理演算の解像度は下げつつも,シェーダを使って見た目は高解像度でレンダリングする手法などを紹介していた。いくつかある波の表現方法で,ハイトフィールドはかなり負荷が軽いことも,当然ながらゲーム向きな手法といえる。

 最初に示した式のように,ループ内でデータを加算していると,値が大きくなりすぎるなど,発散して破綻してしまうことがある。この場合,いくつか対処法があるのだが,結局のところ,物理的に正しい処理を行うとコストがかかったり,うまく丸め込める保証をすることが難しくなる。範囲外になったら切り捨てるような処理は物理的には正しくない。しかしそういった割り切りもリアルタイム処理では必要になるようだ。


 波頭が立つような大きな波はハイトフィールドでは実現できないわけだが,そういう状態になる部分から別途パーティクルを生成することで波頭を実現することもできる。そういったハイブリッドな液体表現の研究も行われているという。


 別の記事で述べたように,コストを十分にかければパーティクルによる液体表現は自由度が高く,今後検討するに値する技術である。しかし,液体を扱う多くの場合においてハイトフィールドでまかなえることも事実であり,あくまで現状で“使える”技術としての意義は失われるものではない。PhysXでは,登場当時からの車に水がかかるデモなどで見られるように,パーティクルによる液体の表現が追求されている(粗くていま一つ自然ではないが)。PhysX用のSDKでは,近くハイトフィールド用のライブラリが追加され,簡単なコードで実装できるようになるとのことで,より実用的な液体表現が加わることになる。
 NVIDIAに吸収され,どうなることかと思われたAGEIAだが,今後はCUDAなどにも技術が移され,より広い形でゲームに反映されていくと思われる。PhysX PPUなしでも物理エフェクト全開のゲームが多く登場することを期待したい。
  • 関連タイトル:

    ミドルウェア/開発ツール

  • この記事のURL:
line
4Gamer.net最新情報
トピックス
セブン-イレブンネット
セブン-イレブンネットで購入

LightWave v9 Win-USB (電子マニュアル) キャンペーン版

LightWave v9 が特別価格で購入できるキャンペーンを実施中

セブン-イレブンネットで購入

三国群英伝ONLINE

7月13日までにご注文頂きますと7月18日(発売予定日)のお届けが可能です。