ニュース
[CEDEC 2007]鉄拳6に採用された国産物理エンジン「OctaveEngine」とは
同社では,インタラクションを重視した物理エンジンを目指しているようで,現在発表されている「OctaveEngine 1.0」では,特定の用途に特化したエンジンを揃えている。バンダイナムコゲームスの「鉄拳6」に採用された実績を持つ実力派である。現在サポートされているのは,水面,砂,空の3種類のシミュレーションだ。今回は水面と砂についての解説が行われた。
OctaveEngineの水面表現
OctaveEngineでは,水面専用のモジュールが作られており,パーティクルベースのものよりははるかに自然な水面が実現されている。ただ,ここで扱われるのは「水」ではなく,「水面」であり,格子状の点の変移で波などを表しているシステムに対する改良版という位置付けのようである。
これまでの水面を表現する方法では波動方程式やベルヌーイの法則をもとに水面を解くのだそうだが,OctaveEngineでは,質量と運動量の推移を直接解くことで物理演算を行っているという。そのため,厳密なシミュレーションではないが,制約が少なく,水位が大きく変わったり,流速が激しくても対応できるほか,ほかの方法では実現しにくかった水底の影響を表現することもできる。粘性などを考慮することで,さらに多彩な表現も可能になる。さまざまな力を直接扱っているので,水飛沫などの表現も自然にできるという。
このあたりはムービーを見ていただいたほうが分かりやすいだろう。解像度が低くて申し訳ないが,だいたいの動きの特徴は確認できるはずだ。
→ OctaveEngineによる水面表現 (43秒:5MB,MPEG-1)
→ 鉄拳6での水面処理 (46秒:5.4MB,MPEG-1)
業界初の砂のシミュレーション
砂は,一般的な流体とは違い,安息角というものがあって,ある程度以下の角度になると流れが止まってしまうという性質を持っている。
→砂のシミュレーション (1分22秒:7.73MB,MPEG-1)
水と砂の複合処理
砂の「濡れ」表現は入ってないようで,見ているとちょっと違和感のある部分もあるが,地形をダイナミックに操作しても破綻しない処理が実現されていることが分かる。
→水と砂の複合処理 (1分16秒:7.15MB,MPEG-1)
GPGPUとCell SPUでの展開
物理演算というのは,やり始めると膨大なものとなり,CPUによる処理では追いつかなくなってくる傾向がある。Havok FXやPhysXではGPUによる演算や,専用アクセラレータの開発が行われている。OctaveEngineでも,GPUによる処理とPLAYSTATION 3のSPUによる並列化を進めている。物理エンジンを実用的なものとするためには,必須の選択といってよいだろう。セッションでは,GPGPU(General Purpose GPU)とSPUでの実装についての注意点などが解説された。GPUでの処理は,元々の目的の特性から,データなどはテクスチャとして用意してGPUでアクセスすることになる。また,計算結果の出力もテクスチャへの書き出しとなる。これにはレンダーターゲットの指定で任意のテクスチャに書き込むようにする。GPUの世代にもよるが,シェーダモデル3.0世代では,レンダーターゲットは4か所しか指定できないので,入力データは多数用意できるものの,出力先は4か所に制限されることに注意が必要になる。
また,処理の特性上,演算を細かく分けて何回も回すよりも,複雑な演算にまとめてでも,レンダリングパス数を少なくすると処理効率が上がるという。
PLAYSTATION 3のSPUを使用する場合は,SPUで扱えるローカルメモリが非常に小さいので,それに合せた最適化が必要になる。並列処理の管理は,SPURS(SPU Runtime System)に任せているようだ。処理は,演算領域単位で分割してスレッド化されている。
これは,先ほど挙げた鉄拳6用に実装されたもので,SPUを1〜6個使用できる専用筐体で動作するという。
将来的な展開:OctaveEngine Next
現在実装されている水面にしても砂にしても,基本的な処理は2次元平面上の格子点の制御を基本としている。このため,限られた部分にしか適用できなかったのだが,3次元化すればさまざまな部分に応用がきき,ゲーム全体に適用できるものとなる。
2次元から3次元に移行するには,制御点を格子から,位置の自由な粒子にしてラグランジュ法で立体的に展開していくことになる。さらに剛体,流体,布など複数の物理モデルを同時に適用し,複雑な状態の物体の挙動も表現できるようになるという。
最近のGPUはストリームプロセッサが大量に用意されているので,それらを活用することで,複雑な処理も可能になると見ているようだ。
粒子法を採用する場合,いくつかの問題点があるという。格子だと近傍の点は固定されていたので,力の伝播などを扱いやすかったのだが,位置の自由な粒子では,近くにあるほかの粒子を知ることが難しいということだ。これはBSPなどの空間分割法によってある程度効率化できるのだが,GPUで処理する場合には,1ピクセルの範囲に複数の点を入れることができないので問題になるのだという。プロメック・ソフトウェアでは,RGBAの画素コンポーネント単位で点を記録することでこの問題を回避しているという(特許出願中だそうだ)。
これにより,粒子法の完全GPU処理が可能になり,次世代国産物理エンジンの基本部分が確立されている。次世代版の技術デモでは,液体と剛体の混在したシーンでの相互作用などが示されていた。ムービーを見れば,単なる水面ではなく,水としてさまざまな使い方ができそうな液体の様子が確認できるだろう。
→次世代版のデモ映像 (36秒:3.45MB,MPEG-1)
現状のOctaveEngineは,Havokのようなゲーム全体に関わる物理エンジンではなく,特定部分の物理的表現に留まっているが,今後はさまざまな部分にも適用できるものとなるだろう。
プロメック・ソフトウェアは,物理エンジンはあくまで道具にすぎないので,優れたゲームに組み込んで活用してほしいと語っていた。国産物理エンジンの今後に期待したいところだ。
- この記事のURL: