イベント
[GDC2008#41]100万パーティクルの流体を処理する国産物理エンジン「OctaveEngine」
パーティクルでの液体表現についてはすでに解説しているとおり。表示をリアルにするには大量のパーティクルを使う必要があるのだが,負荷はどんどん高くなる。だから大量のパーティクルを使うのは,現状では難しい……と考えるのが普通なのだが,逆に個々の物体を非常に処理のシンプルなパーティクルで置き換え,すべての処理を再現してみようというのが狙いである。通常のオブジェクトの衝突判定をやめて,ポリゴンなどもパーティクルの集合で表現しているという。
「どこまでできるか試してみた」という100万パーティクルのシーンでは,NVIDIAのレンダリングユニットTESLAを3基並べて(ハイエンドGPU6個分に相当)演算してもまだ重めだ。カタログスペックだと3T(テラ)FLOPSくらいになるはずで,実際の演算では理論値どおりの性能が出ることはないとしても,1TFLOPS近い性能は出ているはず。CPUは2年で2倍,GPUは1年で2倍の割で進化しているので,これくらいの演算能力を持つプロセッサも,遠からず登場してくるのだろう。
シーンには,液体の入った水槽と回転する歯車(透明だがパーティクルの集合で作られている)があり,1粒のパーティクルとほかのパーティクルとの間には,相互作用が働いている。ある程度近いと(設定された直径の3倍くらいだと)引力が働き,近づきすぎると斥力が働く。遠いパーティクルとの間に相互作用はない。
これだけの演算ユニットをつぎ込んでいる割にはちょっと地味めなのだが,演算自体よりも,演算結果を3基の演算ユニットからPC本体に転送し,描画を行うまでの部分がボトルネックになっているという。PCの外部バスを使用するため,そこでつっかえるのはどうしようもない。これがPCの内部バスに収まれば,性能も上げやすくなるはずだ。
2D物理演算お絵描きツール
上述したデモの隣には,同じエンジンを2Dで使用したツールが展示されていた。これは画面にいろいろな機能を持った絵を描いて動作させられるという,ちょっと面白いものだ。
メニューから剛体(Rigid)を選んで箱を描けば変形しない箱ができ,ばね(Spring)を選んで線を結べば伸び縮みするゴムが箱に取り付けられる。ジェットエンジンを付けて飛ばしてみたり,回転体を指定したりもできる。また,火で加熱されると状態変化を起こして水が水蒸気になったり,氷で冷やされてまた水滴になったりといった様(さま)が確認できる。Wiiリモコンによる移動/回転にも対応しており,おもちゃとして見てもよい感じだ。
展示用に作ったツールで名前もないということなのだが,結構評判がよいので配布することも検討しているらしい。
砂と水のシミュレーション
そのほか,以前紹介したようなものと似た,砂のシミュレーションも展示されていた。これについては,近くこの機能を搭載したゲームも発売されるとのこと。
砂の処理はハイトフィールドで行われているので,非常に高速である。CPU処理でも十分に楽しめる。
物理エンジンは,エフェクト系物理を主としたものとゲームロジック系物理を主としたものに大別されるが,OctaveEngineが目指すのはゲームロジック系のものだという。OctaveEngineでは,流体は水面の形状を決定するだけではなくて,水の運動による力の伝達なども含んだ,意欲的な実装も検討されている。
当然,冒頭で述べたように演算量が膨大になるのだが,ハードウェア性能の問題は時間が解決するものとして研究を進めているのだという。
演算量問題さえ克服されれば,すべてをパーティクルで表現するという手法は,剛体も弾性体も布も気体もすべてのものをシンプルに表現できる。CG映画のようなレンダリングシーン内でインタラクティブに動き回れる,OctaveEngineはそういった環境の実現を目指しているのだという。
- この記事のURL: