【レポート】

CEDEC2005 - 物理エンジンの現状と仕組みを理解する

5 AGEIAの物理エンジン「NovodeX」の仕組み

    西川善司  [2005/09/14]

    続いて、語られたのはNovodeXのより細かい仕様についてだ。

    AGEIAのNovodeXでの物理シミュレーションは、大まかに考えるとアクター(Actor)、形状(Shape)、シーン(Scene)といった要素レベルに分解できる。

    • アクター
      アクターはシミュレート対象の剛体オブジェクトを指し、これは可動するもの、静止し続けるもののいずれもサポートされる。この剛体オブシェクトには位置、速度、質量、衝突弾性などのパラメータが内包され、物理計算の際に利用される。
    • 形状
      剛体オブジェクトに設定する衝突形状。NovodeXでは前述したように立方体、球体、凹凸体の他、それらを組み合わせた複合体までがサポートされる。
    • シーン
      複数のアクター同士の物理シミュレーションを行うセット(世界)に相当するもの。

    さて、実際のNovodeXの活用では、複数のシーンを作ることができ、それぞれのシーンはアプリケーション側で特別な指定がない限りは相互干渉のない、独立したスレッドとして生成される。このスレッド生成は自動的に行われ、ゲームアプリケーション側の制御は不要となっている。もっとも将来的にはこのスレッド制御をアプリケーション側に解放するメソッドも思案中なのだとのこと。

    生成されたスレッドはNovodeXの物理処理実行部で処理されるわけだが、この際、動作対象となるプラットフォームごとに、内部的なサブスレッドを生成するという。例えばCELLならば7基のSPEをフル稼働するようなスレッドにしたり……といった具合だ。

    アクターは便宜上、基本的にはシーン毎に固有な管理となるが、複数のシーンで再利用することはできる。ゲームシステム側でそうした複数シーンをまたぐアクターの管理やシーンに対するアクターの再設定を行えば、この制限は事実上ないものと同じにできる。

    そして各アクターは、衝突物理に必要な複雑な形状データを共有設定可能となっており、これはメモリ使用節約に大きく貢献する。同一形状キャラクタが複数個、群集で登場する場合でも形状データはたった1つでいいわけだ。

    形状データは共有されるが、衝突判定やアニメーションによる形状回転変形などの固有パラメータはキャラクタ個数分、個別に管理処理されるので整合性に関する管理をゲームシステム側で行う必要はない。

    この仕組みはXbox 360の3コアCPUで共有される大容量1MBのL2キャッシュとの相性がよいとのことで、形状データがL2キャッシュに載ったときには複数のCPUコアで最高速に複数のキャラクタの物理処理が行えるという。

    無数の人体キャラと車両物理制御の車とが衝突し合うNovodeXのデモ。この場合、登場キャラクタは多いが衝突モデル形状は人体と車の2つ分だけ……ということだ

    また、NovodeXは、3Dグラフィックスの描画メソッドとして一般的なダブルバッファ技法を模倣した物理処理としてのダブルバッファシステムをサポートするとしている。

    3Dグラフィックスのダブルバッファとは、あるフレームを表示している間に、表示していないバックバッファの方に描画し、この描画が完了したと同時に表示フレームとバックバッファを入れ替えるテクニックのこと。

    NovodeXのダブルバッファは、これとはちょっと意味合いが異なり、NovodeXシステム側に1つ前の状態の物理処理結果を保存しておくことができるというものになっている。これは読み込みのみ可能なバッファとしてアクセスでき、例えば落下中のオブジェクトの動きを予測したり……といったゲーム内AIのパラメータとして利用できる……としている。

    新着記事

    特設サイトの情報

      人気記事

      一覧

      イチオシ記事

      新着記事

      特別企画

      マイナビニュースマガジン