3Dゲームファンのためのグラフィックス講座

西川善司の3Dゲームファンのための「Panta Rhei」講座(後編)

流体シミュレーションはゲームグラフィックスに革新をもたらすか!?

6月取材

カプコン本社

 2013年2月のPS4発表会にて、カプコンが公開した次世代ゲームエンジン「Panta Rhei」。その実力に迫るレポートの後編となる今回、スポットをあてるのは「流体シミュレーション」の部分だ。

 「流体シミュレーション」というキーワードだけでは、なかなかピンと来ない人も多いかと思うが、2月のPS4発表会にて公開された「Panta Rhei」ベースのリアルタイム映像デモ『deep down(仮)』でも、この流体表現が効果的に駆使されているシーンがある。それは、ドラゴンが放つ火炎ブレス攻撃の表現だ。

【「『deep down』(仮)」Teaser Trailer】
「Panta Rhei」を駆使して作り上げられたリアルタイム映像デモ『deep down』。実際のゲームとしてのプロジェクトとしても進行中でもある

【著者近影】

今回の取材で、最も感動が大きかったのは「Panta Rhei」の流体表現だ。『deep down』の映像ではドラゴンの火炎ブレス攻撃での活用が印象的だったが、水などの表現にも応用されたときには、どんなビジュアルになるか楽しみだ。確実に言えるのは、「バイオハザード」シリーズの次世代機向け新作では、火炎放射器の表現が流体になってきっと凄いことになるということだ(笑)。ブログはこちら

グリッドベースの流体シミュレーション

 本編映像だけでは、演出やカット割りの関係でややわかりにくいかもしれない。そこで、今回、特別に、この流体シミュレーションの実験段階の映像を頂けたので、こちらの方も見ていただこう。

【ビルボード vs 流体1】

 最初に出てくるのがビルボードパーティクルベースの炎の表現だ。炎のアニメーションが描かれたテクスチャを四辺形ポリゴン(クワッド)に貼り付けてスプライトのように動かすもので、PS3、Xbox 360世代のグラフィックスでは見慣れた表現だ。むしろ、見慣れすぎているために、こちらの表現に何の違和感も覚えない人が多いかもしれない。

 続いて、「Panta Rhei」が実装し、『deep down』で用いられた流体ベースの炎の表現が出てくるが、どちらがリアルかは一目瞭然だろう。以下が同時に違いを比較した映像になる。

【ビルボード vs 流体2】

伊集院勝氏(株式会社カプコン、大阪開発部、プログラム開発統制室、室長)

伊集院氏:我々が目指している次世代ゲームグラフィックスとは、このような、今までリアルタイムではできなかった表現を積極的に実装していくことなんです。

 この超リアルな炎の動き、そして、その描画には特殊手法が用いられている。まずは、「動き」の部分の解説から始めるとしよう。

 結論から言えば、この動きこそが、流体シミュレーションによるものなのだ。こうした流体シミュレーションには、無数の粒子(パーティクル)を用いて計算するパーティクルベースの手法もあるが、「Panta Rhei」が採用した流体シミュレーションは、流体シミュレーションの最小単位とする小さな立方体(グリッド)で空間を分割して実践するグリッドベースのものになる。ちなみに、ボクセルはグラフィックスを取り扱うのに対し、グリッドはシミュレーションに必要なパラメータを取り扱うという違いはあるが、データ構造的には近いものがある。

 前編で取り扱ったシーンのボクセルによる分割化では、MIP-MAP構造を採用して、高い解像度のボクセル構造から粗い解像度のボクセル構造までをMIP-MAP的な階層にして管理していることを解説したが、流体シミュレーションのグリッドは、そうした階層化は施しておらず、単一の解像度のグリッドでシミュレーションが実践される(後段のレイマーチングでNULLグリッドをスキップするための粗い解像度のグリッドを中間生成するがシミュレーション自体は単一解像度のグリッドで行なわれる)。なので、上のデモ映像中のT字路型の廊下に対して火炎が放出されている場面では、このT字路の形状で単一の解像度のグリッドが割り当てられているイメージとなる。ただし、表現対象の流体全体がシーン内を移動する場合は、それに合わせてこのグリッドも移動する。

清水大輔氏(株式会社カプコン、大阪開発部、技術研究室、プログラマー)

清水氏:『deep down』のリアルタイム映像デモではたいまつを持って洞窟内を歩くシーンがありますが、この時のたいまつの炎は流体で表現されています。キャラクターがたいまつを持って移動していますが、この時、シミュレーション用のグリッドもたいまつの動きに合わせて動いています。

【たいまつ】
『deep down』においては、たいまつの炎の表現にも流体シミュレーションが使われている

 グリッドベースの流体シミュレーションでは、各グリッド間で引き起こる物質の移動、すなわち移流量を求める方程式がポイントになるが、「Panta Rhei」ではその移流方程式の解法にはセミ・ラグランジアン法を採用している。セミ・ラグランジアン法はグリッドベースの解法なのだが、グリッド間で疑似的にパーティクルを飛ばすような概念を導入する方法になる。

 そして、「Panta Rhei」では、移流方程式を実際に解くためのソルバには、二次マコーマック(2nd Order MacCormack)法や、ソルバを補うVorticity Confinement法などが用意されゲーム開発チーム側のグラフィックス開発者やアーティスト側はそれらから適宜選択することができると言う。

 また、思い通りの動きになるように、アーティストなど側で設定した、渦を巻くようなベロシティを描いたテクスチャベースの「乱流場」(Turbulance Field)を与えることもできるようになっているようだ。

【セミ・ラグランジアン】
渦を巻くようなベロシティを描いたテクスチャベースの「乱流場」(Turbulance Field)を与えることもできるようになっている

 「Panta Rhei」が提供する流体シミュレーションは、ゲーム向けのものであるため、リアルタイム動作に適したレベルの衝突判定の仕組みも導入されている。

 衝突判定形状はカプセル型や球型など。シーン内に人間型のキャラクターがいたとすれば、その形状を覆うような形でこうした衝突判定形状モデルを当て込んでいくことになる。比較的大ざっぱな衝突判定にはなるが、流体そのものがぼんやりとしたものではあるので特に問題にはならない。

 もちろんグリッドの境界も衝突相手として設定できるようにはなっている。上のT字路廊下の火炎デモで、廊下の壁に炎が反射する描写が見て取れるが、それはこの設定で表現されている。

【流体の衝突判定】
『deep down』より。流体で表現された炎に対して、戦士が盾でこれを回避する様子。これは紛れもなく流体に適用された衝突判定の効果によるもの

 「Panta Rhei」の流体シミュレーションは、ゲーム向けの軽めの実装になっているとは言え、同時多発的に活用すれば処理負荷としては重くなってくる。そこで、「Panta Rhei」では、流体シミュレーションの更新頻度を下げて、描画フレームレートとは非同期なシミュレーションを行なうことにも対応している。

 例えば、描画フレームレートが30fpsで、流体シミュレーション更新頻度が15fpsだった場合、1フレーム分、シミュレーションが更新されないことになるが、こうしたケースでは、流体シミュレーションにおけるソルバを稼動させず、流体シミュレーション用のグリッドパラメータを更新させずに、補間フレームを生成することで間をつなぐ。具体的には、セミ・ラグランジアン法による移流計算だけをテンポラリ的に行ない、その結果を、後段の流体グラフィックス描画パイプラインに受け渡すような流れを取っているという。

【流体の補間】
シミュレーションの更新が行なわれない間は補間で対応する

清水氏:現在は、流体用の衝突判定形状モデルはその他の物理シミュレーション用衝突判定形状モデルとは共用化していません。また、『deep down』では、流体シミュレーションの補間フレーム機能は活用しませんでした。現在はそれほど詳しくお話しできませんが、流体という、アーティスト達が扱いにくそうなものを、極力思い通りに扱えるようにするツールを開発しました。ビューポート上で流体シミュレーショングリッドのサイズを変えることができたり、流体シミュレーションを任意の時間軸まで飛ばしたり、停止させたり、中途から再開させたりといったこともできるようになっています。

(トライゼット西川善司)