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

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

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

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

LINEで4Gamerアカウントを登録
[GDC2008#27]パーティクルによる,リアルな挙動の液体表現を目指して
特集記事一覧
注目のレビュー
注目のムービー

メディアパートナー

印刷2008/02/22 22:11

イベント

[GDC2008#27]パーティクルによる,リアルな挙動の液体表現を目指して

Simon Green氏
画像集#002のサムネイル/[GDC2008#27]パーティクルによる,リアルな挙動の液体表現を目指して
 GDC08では,NVIDIAのSimon Green(サイモン・グリーン)氏による,パーティクルを使用した液体表現についての講演が行われた。液体表現について広く網羅したものになっていたので,紹介してみたい。

 一般的に,水面を表現する方法自体は,だいたい次の3種類に分けられる。

  • Grid(グリッド)
  • Particle(パーティクル)
  • Heightfield(ハイトフィールド)

画像集#003のサムネイル/[GDC2008#27]パーティクルによる,リアルな挙動の液体表現を目指して
 ざっくり説明すると,グリッドは格子状の各点を制御して面の運動を表すもの。パーティクルは微粒子の集合で液体を近似するもので,ハイトフィールドは水面の高さだけを操作する手法だ。
 さて,本稿で取り上げるパーティクルによる液体表現とは,簡単にいえば「水の代わりに粒子を使って水面を表現する」ことを指す。水の分子レベルで考えれば,たいへん理にかなっており,水面だけでなく,水の跳ねた状態などといった多彩な表現が可能ということもあって,多くのシステム(≒ゲームタイトル)で用いられている。
 ただ,粒子が大きいと非常に不自然になりやすく,見栄えがよろしくない。そのため,たくさんのパーティクルを使うことでより自然にしたいところだが,今度はNの二乗で描画負荷が上がってしまい,非常に“重い”処理になってしまう。一般的に「パーティクルで自然な水面を作るのは相当難しい」という論調が支配的な所以(ゆえん)だ。

 しかし難しいとはいうものの,要するに,ある程度の大きさの粒子によるパーティクル動作を処理しつつ,それをできるだけ“液体ぽく”描画してやればよい。Green氏のセッションでは,その方法として

  • Marching Cubes(マーチングキューブ)
  • Density-based Shading(デンシティベースドシェーディング)
  • Motion Blur(モーションブラー)

という3手法が紹介された次第である。

 マーチングキューブ法は3次元のバッファを使ってデータを処理するためメモリ消費が激しいようだが,かなり綺麗な出力を出しているのが分かる。ボリュームデータから等高面を出す標準的な手法だそうだ。

画像集#004のサムネイル/[GDC2008#27]パーティクルによる,リアルな挙動の液体表現を目指して

 デンシティベースドシェーディングという手法では,密度や法線情報を利用する。基本的に密度をベースにレンダリングを行い,近接するパーティクルでは法線を補間して面をつないでいくようだ。パーティクルのスプライトを拡大し,α情報をつけて重ね書きすることで滑らかな面を形成するらしい。

画像集#005のサムネイル/[GDC2008#27]パーティクルによる,リアルな挙動の液体表現を目指して

 モーションブラーを使う手法では,パーティクルの速い動きに対応し,長方形をジオメトリシェーダで生成することで,動いている液体が不自然に見えないように工夫している。

画像集#006のサムネイル/[GDC2008#27]パーティクルによる,リアルな挙動の液体表現を目指して

画像集#007のサムネイル/[GDC2008#27]パーティクルによる,リアルな挙動の液体表現を目指して
 将来的には,メッシュやハイトフィールドと組み合わせてパーティクルを扱うようなアルゴリズムにすることで,パーティクルが必要ないところでは負荷の軽い手法で液体を表現し,水しぶきや波頭などといった3次元的な形状が必要になったときだけパーティクルを生成するようにして,高精度のパーティクル処理をできるだけ低負荷で行うようなものが登場してくるとGreen氏。そうなれば液体表現もかなり手軽に扱えるものになりそうだ。


画像集#008のサムネイル/[GDC2008#27]パーティクルによる,リアルな挙動の液体表現を目指して
 ところで,NVIDIAがこれまでに公開してきたテクニカルデモのうち,最初に液体表現を扱ったものは,「簡単なシェーダを使って,平面上に波があるように見せる」というものだった。GeForce3の時代だ。
 GeForce FX時代には,液体の流れを示すデモが作られた。2次元の「Navier-Stokes」(ナビエ−ストークス)方程式を解くものだ。Navier-Stokes方程式は,流体の状態を表す方程式で,この手の処理では必ず登場する定番の数式である。普通に解くのは難しいので,どうやって簡略化するかなどが決め手となる。
 そしてその後,GPUベースのパーティクルシステムや,「CEDEC 2007」時に紹介した,3次元のNavier-Stokes方程式を解く煙のデモへと続いていったわけだ。

画像集#009のサムネイル/[GDC2008#27]パーティクルによる,リアルな挙動の液体表現を目指して 画像集#010のサムネイル/[GDC2008#27]パーティクルによる,リアルな挙動の液体表現を目指して
画像集#011のサムネイル/[GDC2008#27]パーティクルによる,リアルな挙動の液体表現を目指して 画像集#012のサムネイル/[GDC2008#27]パーティクルによる,リアルな挙動の液体表現を目指して

 GPUの高速化とCUDAの展開によって,パーティクルベースの演算処理もかなり現実的なものとなってきた。今後さらにGPUの演算能力が上がり,レンダリングアルゴリズムが改良されていけば,かなりリアルな挙動を見せる液体を扱った作品も増えてくるだろう。3Dゲームで水面から飛沫が上がっているのを見たら,パーティクルが使われているのだと思い出してみてほしい。


  • この記事のURL:
4Gamer.net最新情報
プラットフォーム別新着記事
総合新着記事
企画記事
スペシャルコンテンツ
注目記事ランキング
集計:11月28日〜11月29日