|
会場:San Jose McEnery Convention Center
その名は「HAVOK FX」。今回は、これが一体、どのような技術なのかを解説していきたい。
■ 2種類の物理エンジンがある
大別して、物理エンジンは「ゲームプレイ物理(Game Play Physics)」と「効果物理(Effects Physics)」に分けられる。 たとえば敵に対して銃撃(ゲーム展開)を行ない、その銃弾が敵の胸に命中(衝突判定)、そのエネルギーを受けて敵は死亡(ゲーム展開)し、敵は吹っ飛んだり倒れたりする(Ragdoll物理)というシーンがあったとする。これはゲーム進行が物理を駆動したり、あるいは逆に駆動された物理がゲームを進行させたりしている事例だ。ゲームプレイ(ゲーム内ルールやゲーム進行)に密接に関わりを持った物理シミュレーションを「ゲームプレイ物理」という。 このゲームプレイ物理で重要なのは、「そのシミュレーションの品質」、「そのシミュレーションがゲームルールに盛り込めるだけのカスタマイズ性を備えているか」といった部分になる。 一方、効果物理とは、ゲーム進行によって発生させられたイベントや、ゲームプレイ物理の結果、派生して起こる物理制御を差す。 効果物理のシミュレーションそのものはゲームプレイ物理と何ら変わりがないし、「そのタイプの物理はゲームプレイ物理だけど、このタイプの物理は効果物理」というカテゴライズはできないので説明が難しい。まあ、ゲームプレイ物理が“親”だとすれば、効果物理は“子”……このような階層構造をイメージすれば感覚的に理解できるかもしれない。 傾向としては、具体的には液体や気体のようなものを取り扱う流体物理や、布の挙動のシミュレーションなど、ローカルで処理系として独立させても問題ないようなタイプの物理が効果物理となることが多いようだ。 この効果物理はゲームのコンテンツに関わりの少ないシミュレーションになることから、ゲーム進行を司るゲームループ(ゲームロジック)から独立させて処理しても問題がなさそうだ。つまり、並列処理をしても良さそうだということになる。つまり、これはマルチスレッド処理のテーマに最適ということになるわけだ。
さらにソフトウェア的に独立性が高いということは、この部分のハードウェア的なアクセラレーションはやりやすいということにもなる。そんなわけでNVIDIAとHAVOKは「効果物理はGPUでアクセラレーションできる」と考えたのだ。
■ HAVOK FXは効果物理 2005年、NVIDIAとHAVOKの両社の研究開発チームがタッグを組んで共同開発プロジェクトを立ち上げ、開発がスタートしたのが「HAVOK FX」だ。 GPUは、浮動小数点ベクトル演算器を並列実装したものであり、データ駆動型の並列プロセッサということができる。プログラマブルシェーダ3.0仕様(Shader Model: SM3.0)では、ピクセルシェーダに動的条件分岐がサポートされ、実行命令数にも制限がなくなっており、プログラマビリティも向上している。GPU-ビデオメモリ間は非常に高速なメモリ帯域が確保されており、パフォーマンスも高い。
上手く実装すれば、GPUを高速な物理アクセラレータとして利用できるのではないか……とHAVOKとNVIDIAは考えたのだ。
実はGPUも、入力されたデータに演算を施してこれをメモリに書き出すという処理が行なえるという意味において、できることやっていることはCPUとさほど変わらない。GPUにとってのメモリはフレームバッファ(レンダーターゲット)やテクスチャになるわけだが、最終的に映像としてディスプレイに出力せず、その結果を単なる数値データ列として何かに利用すれば、GPUを汎用プロセッサとして活用したことになる。これが数年前から注目を集めてきた「GP GPU(General Purpose GPU)」というソリューションだ。
NVIDIAとHAVOKが開発したHAVOK FXは、いわばGPGPUの一形態ということなのである。
■ HAVOK FXの動作の仕組み
(1) Integrate 初動計算
(1)はそのオブジェクトがどう動くかを処理するフェーズだ。処理すべき加速度や向きといった情報を、各オブジェクトに対して反映していく。
(2)は(1)の結果を踏まえて、誰と誰が衝突するかもしれないという判定をしてそのペアを見つけるフェーズだ。
(3)は(2)の結果を踏まえて実際の衝突の物理シミュレーション結果を適用していくフェーズだ。算出された挙動を持って(1)へと舞い戻る。
そこでHAVOK FXではこの部分は(1)の結果を読み出して、CPUのマルチスレッドプログラムの実行で衝突判定を取っている。CPU側に持ってくることでゲームロジック側の介入を挟み込めるメリットもある。 (3)は複雑だ。衝突は1対1ではなく1対複数の場合もあり、これは(2)同様にGPU向きの処理でないように思える。
最も基本的な方針としては、(2)の結果によって導き出された、「誰と誰が衝突している可能性がある」という「衝突リンク」を順番に処理していくものになるが、1対複数に衝突しているケースでは相互依存性があるためにGPU向きの並列処理に流し込めない。
これまたCPUに処理させなければならないか、と思いきや、このあたりの処理のマルチスレッド化に明るいHAVOKでは、賢い方法でこの処理をGPUに実装している。同じオブジェクトが2度登場しないように衝突リンクをグループ分けして、このグループ単位でGPUに流し込むのだ。
■ ゲームプレイ物理とHAVOX FXのインタラクトについて HAVOKでは、“親”となるゲームプレイ物理はCPU側で処理される。この点がAGEIAのPhysXシステムと異なる部分である。効果物理は、あくまで“子”の物理処理なので、“親”のゲームプレイ物理との相互作用について考える必要がある。 親はCPU、子はGPUで処理されるHAVOKだが、上記(2)のフェーズで、CPUが物理シミュレーションに関与できるようになったタイミングがあるので、ここでパラメータに更新をかければいい。
デモンストレーションでは、竜巻に巻かれる無数の空き缶や三角ポールといったゴミの様子が公開されたが、ゴミ同士の衝突は効果物理としてGPUで処理されるが、この竜巻の挙動はCPUのシミュレーションで実行され、その挙動更新は(2)のフェーズのときにCPUの管理下で行なわれる。
さらに、最新のゲームプレイ物理エンジンのHAVOK4では、このHAVOK FXとの完全な統合を実現しており、ゲームプレイ物理(HAVOK4)と効果物理(HAVOK FX)との連携もしっかり行なわれている。つまり、ゲームプレイ物理で動かしているキャラクタと効果物理で動かしているパーティクルや小道具とのインタラクトなども問題なく処理できるということだ。 これはゲームプレイ物理で動かしているキャラクタの物理衝突形状をシミュレーション実行前(場合によっては実行毎)に効果物理の衝突形状を取り扱っているGPU側のビデオメモリに転送してしまい、効果物理シミュレーション実行時には、その他のオブジェクトと同列に処理してしまうことで実現する。ゲームプレイ物理で動かしているキャラクタが動いた場合は、そのキャラクタの更新情報だけを毎フレームごとにGPU側に転送すればいい。
これで、効果物理で動かしたオブジェクトが、ゲームプレイ物理で動かしたキャラクタを突き抜けたり……といったことがなくなる。この仕組みにより、ゲームプレイ物理で動かしているキャラクタに着せた服について布シミュレーションを効果物理を実行させるといったことなども問題なくできるわけだ。
なお、ゲームプレイ物理(HAVOK4)→効果物理(HAVOK FX)への一方向のインタラクトだけでなく、逆へのインタラクトももちろん可能となっている。HAVOK FXは、毎シミュレーション終了後の、その時点でのオブジェクトの向きや位置、その他のカスタム付随情報までを列記した頂点バッファを取り出すことができるので、これを利用すればいいのだ。GPUからPCI Expressバスを通じてのデータ取り出しは遅いというのが定説ではあるが、HAVOKが実験した限りでは3Dゲーム処理に求められる性能に事足りるということであった。
なお、HAVOK FXは立体的な衝突形状(Convex Model)を持った剛体物理だけでなく、シンプルなパーティクル制御、流体物理までをサポートする。その証拠デモンストレーションとして、パーティクルシステムを使った3Dキャラクタと蒸気とのインタラクト、パーティクルシステムを使った大量の飴玉の挙動やパーティクルベースの水の表現などが披露された。
■ HAVOK FXはRADEON X1000シリーズでも動作可能 ~Geforce 6 + 7、GeForce + RADEONといった異種デュアルGPUでも動作可能!? HAVOK FXのパフォーマンスは、GPUの性能に大きく依存する。 最初、HAVOK FXはNVIDIAのSLIシステムと連動した発表のされ方をしたので、SLIシステムでなければHAVOK FXが動作できないような報道もあったが、実際には、シングルGPUのシステムでもHAVOK FXは動作する。その場合、GPUはHAVOK FXとグラフィックス描画の両方を行なうことになるので、ビデオメモリ容量が十分なビデオカードでないとグラフィックスの解像度が上げられないといった弊害も出てくる。
現実的には、GPUを2個同時に駆動させるデュアルGPUシステムの方がHAVOK FXのアクセラレーションは強く効いてくる。これは片方のGPUを完全にHAVOK FX専用に利用できるからだ。
さて、筆者がHAVOK関係者にインタビューしたところ、面白い情報を得ることができた。 ひとつは、HAVOK FXはATIのGPUでも問題なく動作できるというもの。HAVOK FXはプログラマブルシェーダ3.0(SM3.0)仕様のGPUであれば動作できるので、RADEON X1000シリーズでも問題なく動作できるのだそうだ。なお、RADEON X1000シリーズは、SM3.0の機能のうち、頂点シェーダからテクスチャアクセスを可能にするVTF(Vertex Texture Fething)に対応していないが、HAVOK FXではVTFを利用していないので問題がないのだという。 もうひとつの情報は、異なる仕様のGPUを組み合わせたデュアルGPUシステムでもHAVOK FXが動作できるというもの。つまり、GeForce 6800でHAVOK FX、GeForce 7900で3Dグラフィックスレンダリング……といったことが可能だというのだ。たとえばユーザーがGPUを買い換えた際、新しく購入した新GPUにグラフィックスを担当させ、もともと持っていたGPUにHAVOK FXを実行させるといったことが可能になる。 HAVOK技術者によれば、「GeForce 7シリーズが最速なのは間違いないが、先代のGeForce 6シリーズも物理エンジンアクセラレータとしては必要十分な性能を持っている」という。これは「旧ビデオカードの新たな使い道」として3Dゲームファンには朗報だろう。 また、ATIとNVIDIAの混在環境で、RADEONに物理、GeForceで描画……といったことはできるのかとHAVOK技術者に聞いてみたところ、「やったことはないが技術的には可能だし、多分大丈夫」との返答が得られた。ゲームによって物理と描画担当を切り替えてみるなど、コンフィギュレーションをいじるのもかなり楽しそうだ。 AGEIAに対するアドバンテージは? との質問には「AGEIAのPhysXは物理エンジンアクセラレータ『PhysXカード』を購入しなければアクセラレーションできないが、HAVOK FXでは手持ちのGPUでアクセラレーションできる点が特長」という。 さらに、「SLIを組めば、普段は2基のGPUで倍速レンダリングマシンとして活躍でき、一方HAVOK FX採用タイトルを動作させるときには片方のGPUを物理エンジンアクセラレータに回すことができて、一台二役の活用ができる」と補足した。 このようにHAVOK FXの優位点アピールしつつも「もしAGEIAかPhysXの仕様をオープンにするのであれば、HAVOKをPhysXチップでアクセラレーションできるようにしてもいいと思っている」とも言っていた。Havokはソフトウェアメーカーなので、アクセラレーションできれば、そのハードウェアの種類はGPUでもPPU(物理エンジンプロセッサ)でもなんでも問わないという姿勢のようだ。
HAVOK FXは今年の夏に製品版が出荷され、実際の採用ゲームの登場はその後になる。2006年は、物理エンジンのアクセラレーションというテーマが熱くなりそうである。
□Game Developers Conference(英語)のホームページ http://www.gdconf.com/ □Game Developers Conference(日本語)のホームページ http://japan.gdconf.com/ □関連情報 Game Developers Conference 2006 記事リンク集 http://game.watch.impress.co.jp/docs/20060324/gdclink.htm (2006年3月26日) [Reported by トライゼット西川善司]
また、弊誌に掲載された写真、文章の転載、使用に関しましては一切お断わりいたします ウォッチ編集部内GAME Watch担当game-watch@impress.co.jp Copyright (c) 2006 Impress Watch Corporation, an Impress Group company. All rights reserved. |
|