【Watch記事検索】
最新ニュース
【11月30日】
【11月29日】
【11月28日】
【11月27日】
【11月26日】

CESA DEVELOPERS CONFERENCE 2005レポート

PhysX物理演算チップとマルチコア世代マシンが実現する
次世代物理シミュレーションのゆくえ

8月29日~31日開催

会場:明治学院大学 白金キャンパス

 CEDEC2005の開催2日目となる今日、物理エンジンベンダーとして躍進を続けるAGEIAによる講演が行なわれた。AGEIAは「NovodeX」物理エンジンとそのハードウェアアクセラレータである「PhysX」チップの開発を行ない、先進ゲームデベロッパーに提供している企業。

 今回の講演では「次世代マルチコアおよびPhysXのスケーラビリティのための先進物理」と題打ち、同社のアプリケーションエンジニアであるトーマス・ラサンスキ氏がプレゼンテーションを行なった。Xbox 360やプレイステーション 3、最新PCといったマルチコアプロセッサを複数搭載する次世代ゲームプラットフォームにおいて、いかに効率的な物理シミュレーションとそれに基づいたゲームを実現していくかが主題。完全にプログラマ向けの内容であり、専門用語とプログラム・コードが随時出てくる専門性の高いセッションとなった。


■ ゲーム業界最先端の物理エンジン

 同社は世界中のゲームデベロッパの注目を集めている企業だ。今回のセッションも満員御礼の大盛況。なぜこれほど関心を引くのか。その理由は同社の物理エンジンの先進性にある。

 同社の開発した「NovodeX」物理エンジンは、従来の物理エンジンのパラダイム「イベント・ドリブン・フィジック (イベント駆動物理)」に対し、「フィジック・ドリブン・イベント (物理駆動イベント)」という新しいパラダイムのもと開発されたエンジンだ。同エンジンが見据えるのは、ゲーム環境を構成するほとんどの物体が物理エンジンによって制御される世界である。

 従来のゲームではごく一部の物体が物理制御されるのみであったが、ゲーム環境のほとんどが物理制御されたオブジェクトで満ちている世界では、「箱が転がる」、「板が傾く」といった物理現象が他の物理オブジェクトに干渉せずにいられないので、ある現象が連鎖的に別の現象を引き起こしていく。言い換えると、物理処理をきっかけとしてゲーム上のイベントが発生していくことが世界の基本力学となるわけだ。これが「フィジック・ドリブン・イベント」の基本的な考え方である。

 そして同社が開発した「PhysX」チップは、「NovodeX」物理エンジンによる物理処理をハードウェアで高速化する「PPU (Physics Processing Unit)」である。グラフィックレンダリングを高速化する「GPU (Graphics Processing Unit)」の物理処理専用版だと考えればよいだろう。物理処理を高速化する専用のハードウェアというのは、少なくともゲーム業界では初の試み。このチップの能力はなかなかのもので、Pentium 4 3GHz程度のCPUに比べると2桁ほど違うパフォーマンスが発揮されるようだ。

 同社の物理エンジンはこのように優れたポテンシャルを持つため、先進ゲームデベロッパから熱い注目を浴びている。同エンジンがEpic-Gamesの開発する「UnrealEngine3.0」に採用されていることは有名だが、国内においてもソニーやセガなどの大手ゲーム企業、あるいはガンホー・オンライン・エンターテイメントのようなオンラインゲームに特化する企業も、同社との業務提携やエンジンのライセンシング契約を結んでいる。同社ウェブサイトのニュースリリースを眺めていると、大手ゲーム企業はのきなみ同エンジンの採用を考えているのではないかと思えるほどだ。一昔前は「Havoc」物理エンジンが主流であったが、業界全体を眺めてみると、その流れが一気に「NovodeX」および「PhysX」に世代交代しているようである。


■ 「物理」に満ちた世界

 AGEIAが提唱する次世代ゲームの世界は、「フィジック・ドリブン・イベント」の考え方が代表するように、あらゆる3Dオブジェクトが物理処理によって制御される世界だと思われる。触れるものすべてが、本来あるべき挙動を示す世界である。

 想像してみよう。ゲームステージを構成するあらゆる3Dオブジェクトを動かすことができ、破壊することができる世界。たとえば壁を破壊して通れるようにする、あるいは橋を爆破して通れないようにする。部分的にこのような要素を表現したゲームは過去にもあったが、それは「物理処理」によってではなく、ゲームデザイナーがあらかじめ設定した「イベント」によって駆動するものであった。「イベント」によって駆動する環境の変化は、あらかじめデザインされた組み合わせ以上の広がりを持つことはない。

 物理制御によってこのような現象が引き起こせる世界では、プレーヤーを取り巻く環境そのものがプレーヤーとの相互作用によってダイナミックに変化していくので、毎回のゲームプレイが全く異なったバリエーションとなる可能性が高くなる。確かに、無秩序に何でも破壊できるようなゲームが優れているとはいえないが、こういった「可能性」を考えられること自体、ゲームデザイナーのインスピレーションを刺激し、全く新しいゲームが生まれる余地を広げていくのである。物理処理の地平が広がっていくことは、開発者とゲームユーザーの双方にとって良いニュースであることは確かだろう。

 当然、このような物理処理が基本となる世界を作り出すには、大量の物理オブジェクトを同時に、そして相互に作用するよう処理する必要がある。

 従来のゲームプラットフォームはシングルプロセッサのアーキテクチャであり、レンダリング、サウンド処理、ユーザー入力、そしてゲームロジックといった多様な処理をひとつのCPUコアを共有して行なう必要があった。このため物理処理に割けるCPUパワーは僅かで、非常に限られた物理環境しか構築できなかったわけだ。

 こういった旧来の物理環境については、「Half-Life2」のような、フィールドを歩いていると時々、物理処理されたオブジェクトを目にするといったものを想像してほしい。ゲーム中にあるシーソーやブランコのような物理駆動するオブジェクトを触ってみて、それがゲーム性にはあまり影響しないことがわかるだろう。気の利いた物理処理の活用法としては、クレーンで物体を吊り上げて移動させるといったもので、「もっとましな使い道あるんじゃないの?」と考えた人も多いと思う。しかし、シングルプロセッサという限られた資源の中では、それで精一杯であったのも事実。ここに物理エンジンの進化に対する確かなニーズがあるわけだ。


■ マルチプロセッサ環境で膨大な物理処理を行なうために

このセッションはプログラマ向けに、マルチプロセッサが利用できる次世代ハードウェアにおける物理処理に焦点を合わせた内容となった
 AGEIAは次世代の物理環境を実現するプラットフォームとして、マルチプロセッサのプラットフォームに注目する。今後登場してくるゲームプラットフォームでは、マルチコア、マルチCPUをうまく活用することによってより多くの物理オブジェクトを制御できるようになるとラサンスキ氏は言う。

 Xbox 360やプレイステーション 3のような次世代プラットフォームでは、CPUパワーが非常に強力な反面、メモリが非常に限られている。このため、グラフィックの表現力を従来より多様性のあるものにするためには、単にデータを増やしていく方法ではなく、計算によってエフェクトや挙動を作り出していくアプローチが必要だ。

 実際、ソニーやマイクロソフトはデータを増やすよりも計算によって映像表現を増やしていく事を推奨しているという。これには、ウィル・ライト氏が開発中の「Spore」に見られるプロシージャルなコンテンツ生成や、「PhysX」のような物理エンジンが実現する物理駆動によるイベント発生が含まれるのだろう。

 次世代プラットフォームは総じて複数のプロセッサが同時に利用できる環境となっており、あるプロセッサでゲームを動かすために必要なメカニズムを実行しつつ、別のプロセッサでプロシージャルなコンテンツ生成や物理処理を平行して行なうようなプログラムアーキテクチャが効果を発揮する。しかし従来の開発手法では特定のCPUコアにばかり負荷がかかってしまうためうまくいかない。マルチプロセッサに分散処理をさせることを前提として、必要な概念をあらかじめ織り込んだ製品設計をする必要があるのだ。

 AGEIAの「PhysX」は、こういったマルチプロセッサ世代のプラットフォームにおいて、効率的なプログラムモデル実現していく仕組みを前提にデザインされているものだそうだ。演台に立つラサンスキ氏は、マルチプロセッサを有効に活用するため求められるプログラミングモデルを、「PhysX SDK」を用いたソースコード例を中心に解説していく。当然ながらハードコアなプログラマ向けの内容となったため、読者の皆さんにそのままお伝えすることは難しい。キモとなる要素をかいつまんで紹介しよう。


■ マルチプロセッサのための物理クラスとゲームループ戦略

マルチプロセッサを活用した物理処理を実現するためには、物理処理の内容によりいくつかのカテゴリに整理することが重要になるとのこと。本質を捉えた考え方だ
 ラサンスキ氏はまず、ゲームで実行される物理処理を並列処理するためには、物理処理をいくつかのカテゴリ、「物理クラス」に分けて考えることを説明。

 物理クラスとは、プレーヤーキャラクタの制御などの「アプリケーション物理」、「Half-Life2」に見られるようなプレーヤーと直接インタラクトすることで駆動する「ゲームプレイ物理」、パーティクルシステムなど映像表現に使われる「エフェクト物理」、衣服や髪の毛の動きのようにダイナミクスが自己完結する「物理アイランド」、そしてフィールドなどゲームロジックを実行するための環境を生成する「準備物理」だという。

 これらのカテゴリ分けは、プレーヤーとのインタラクションの頻度や、グラフィックとして表示すべきタイミングによって決定されているようだ。つまり、「アプリケーション物理」は、プレーヤーが入力を行なう機会が来るたびに毎回行なう必要があるが、「ゲームプレイ物理」はプレーヤーが接触した時点で同期すればよく、あとは並列的に実行しても良い。あるいは、髪の毛の動きを制御する「物理アイランド」などに至っては、プレーヤーの挙動如何にかかわらず、自己完結して処理を続けることができる。ここに分散処理のためのヒントがありそうだ。

 ラサンスキ氏は続けて、ゲームプログラムでこれらの物理クラスを実際に実装する際にゲームループをどのように設計していかという具体論を説明する。名づけて「ゲームループの設計戦略」というテーマだが、これは以下の分類になるのだそうだ。

・インライン物理
 「アプリケーション物理」を実行する。ユーザーの入力に応じてゲームループに同期して実行され、並列処理はしない。

・フルフレーム物理
 「ゲームプレイ物理」を実行する。表示が必要なタイミングで結果を出す必要があり、並列処理は部分的に行なう。

・フレーム遅延物理
 「エフェクト物理」、「物理アイランド」、「準備物理」を実行する。前回のゲームフレームで演算された結果を利用するため1フレームの遅延が生ずる。並列処理を多用する。

・ジャストインタイム物理
 「エフェクト物理」を実行する。パーティクルエフェクトなどの大量のシミュレーション結果を、直接ビデオチップに供給することで即時のレンダリングを行なう。並列処理を多用。

・マルチフレーム物理
 「物理アイランド」、「準備物理」を実行する。ゆっくり動くオブジェクトや遠方のオブジェクトに関して複数フレームにまたがって処理を行ない、並列処理がベース。

ゲームループを構成する物理処理のカテゴリをすべて統合すると、このような構成となる。横列に並ぶ処理は別のプロセッサで実行される並列処理だ
 ゲームループ上で実行される物理処理を上記のようなカテゴリに分け、それぞれに適した実装方法をおこなうことで、マルチプロセッサをフルに活用するプログラミングモデルを実現するというのがラサンスキ氏の説明する趣旨だ。上記に続いて実際のゲームループの構造、そしてプログラムコードの作例と解説が示された。

 いちプログラマとして感想を述べるならば、AGEIAの提案する「物理クラス」、「ゲームループの設計戦略」とその実例は、マルチプロセス処理の特性と快適なゲームプレイの実現といったテーマで考える限り、非常に理にかなった内容である。実際にゲームをプレイする快適さやゲームプレイの充実度といったプレーヤーの都合を十二分に考えた構成であり、かつ、マルチプロセッサという気難しいシステムへの対応としても理想的なソリューションである。

わかりずらいが、左は実際に表示されるグラフィックモデル。右の2つは、ディティルが異なる物理モデルを可視化したもの。こういった情報量のスケーリングを可能にするという
 実際の並列処理プログラム工程においては、各処理が情報を同期するタイミングをどこに設定するか、どこからどこまでを並列化するのかといった問題が開発者の頭を悩ませる。こういった問題を一から解決していくと時間がかかるので、ゲーム全体の開発工程的には悪影響が大きい。

 並列処理がバグの温床になりやすい点も問題である。プログラムの流れが非常に複雑なので、一見まともに動いているように見えても、ちょっとしたことで原因不明のバグが発生し、その原因究明のために数週間の開発期間が無駄になったりする。また、設計をどこかで誤るとプロセッサをストールさせてしまい、シングルプロセッサより劣るパフォーマンスになってしまったりする。このため、開発に利用する物理エンジンなどのミドルウェアが並列処理を前提としたデザインになっていることは、プログラマにとって死活問題なのである。

実際のプログラム例はサンプルコードを解説することで進められた。完全に技術者向けの内容である
 「PhysX SDK」はこういった問題をスマートに解決するための設計がなされており、ゲーム制作という現実の問題を解決する上で開発者の労力を大幅に削減し、安定した製品を生み出せる物理エンジンであるとの印象を受けた。「UnrealEngine3.0」のような次世代のメインストリームになるであろう影響力のあるゲームエンジンでこの物理エンジンが採用されている事実にも納得できる。

 このようなエンジンが普及していけば、ゲーム開発に携わるプログラマはマルチプロセッサを利用したリッチな物理エンジンの活用をどんどん提案していけるだろうし、ゲームデザイナーも、そのポテンシャルを活用したゲームを考案する機会が増えていくだろう。これは全く新しいゲームが生まれる余地を大きく広げることになる。


■ 剛体物理はもう古い!? 流体シミュレーションにこだわったデモセッション

 では、このような技術を活用した次世代のマルチプロセッサプラットフォームで、一体どのようなゲームシーンが表現できるのだろうか。なんといっても、ゲームユーザにとっては、技術がどうこうよりも「ゲームがスゴいかどうか」が重要なのである。

 ラサンスキ氏はこれを実際のデモンストレーションによって示してくれた。

6,000個の球体が転がり落ちるデモ。球体は相互に作用し、滝のように流れ落ちていく。「PhysX」チップを使用したバージョンでは非常になめらかに動いていた
 始めに行なわれたデモでは、HTテクノロジに対応したPentium 4を2基搭載したマルチプロセッサPC上での「PhysX」チップの能力が示された。Pnetium 4は1基で仮想的な2つのコアを提供するものなので、2×2で都合4基のプロセッサがあることになる。

 使用されたプログラムは段々畑のような地形を転がり落ちる6,000個の球体をシミュレートするものだが、「PhysX」チップを用いないソフトウェア処理では動きが非常にカクカクしており、CPU利用率は4基のプロセッサとも100%。ここで「PhysX」チップを利用するプログラムに切り替えると動きがいきなりスムーズに。60fpsは出ていたであろうが、CPU利用率は1基が50%程度、残り3基は完全なフリー状態と、処理能力に大変な余裕が生まれた様子を示していた。「PhysX」チップの処理能力が相当に高いことが伺える。

 「PhysX」チップはPCでのみ利用できるが、それを搭載しないXbox 360やプレイステーション 3においても、並列処理に特化したコアを持つため、こういった物理シミュレーションを行なえるパワーが得られるとのことだ。これを実際にどのように実装していくかについては詳しい説明はなかったが、次世代機のスペックを考えると十分に期待できる。

 さて、この処理能力を生かしてどんな物理シミュレーションを行なうかが問題だが、次にデモンストレーションされたのは流体シミュレーションを行なうプログラム。画面中央に配置された車の上から溶岩や水、ドライアイスの煙のような質感の異なる流体が流れ落ちるというデモだ。物理エンジンのデモでありがちな「ラグドール」のような剛体ではなく、流体であることがポイント。

このデモでは流体が剛体の上を流れ落ちる挙動がシミュレートされる様子を見ることができた。流体の質感の違いにより、流れ落ちる様子もきちんと変化する

 流体の物理というものは、ラグドールのような剛体物理に比べ計算量が果てしなく多い。複雑に形状を変化させる流体を適切にシミュレートするには、物体を構成する要素を細かいメッシュに分解し、各々を相互作用を計算にいれて全体の挙動を導いていく「有限要素法」的な手法が必要となるが、この方法で説得力のある映像を作るための計算量は、単純な剛体物理に比べて必要な計算量の桁が3つも4つも違ってくるものなのだ。

 このデモでは、車体に流れ落ちる流体が非常に滑らかなフレームレートで、かつ、説得力のある動きを示しており、非常にインパクトのある映像を見ることができた。「PhysX」チップのポテンシャルを最も感じ取れる内容といえる。

 ラサンスキ氏はさらに、3Dメッシュを「ゴム人形」のように挙動させるデモを紹介。これは、とあるチューリッヒ大学の教授が論文発表を行なったアルゴリズムを実装したものだという。このデモでは、牛や人間といった3Dモデルが作用の力に応じて適切に変形する様子が示された。

 デモに使われたモデルにはボーンが設定されておらず、純粋にメッシュ単位の物理処理により伸びたり縮んだりといった動きを見せる。消しゴムのような素材で作られた人形を想像すると良いだろう。硬さパラメータを変えると、牛の形状だったモデルが重力に負け、プリンやスライムのようにドロドロになってしまう状況も再現される。スクリーンショットではわからないが、実際に動いてるところを目撃するとなかなかショッキングな映像である。実際のゲームへの応用は想像することも難しいが、こういった物体を仮想世界でいじくりまわすことが面白そうなことは確かである。


■ 流体物理をも可能にする「PhysX」のポテンシャルに思う

「UnrealEngie3.0」ベースで開発されている次世代ゲームのムービーのデモンストレーション。相互物理作用によって破壊された貯水庫から流体が流れ出す様子がリアルに描写されていた
 このように今回のデモセッションは従来の「剛体物理」に変わるソリューションとして「流体物理」を提示する部分が印象的であった。「PhysX」のように剛体物理を軽々とこなす強力なプロセッシングパワーの応用分野としては、確かに流体物理に未来がありそうだ。説明の中でラサンスキ氏は、さらっとではあるが、このような技術がフライトシミュレーション分野においても有効であるとの考えを示した。

 筆者の認識では、現在のフライトシミュレータは、航空機の挙動を「職人芸的」な、謎の変数まみれのプログラムで無理やり再現しているところがある。しかし大気と機体との関係を有限要素法でリアルタイムに解いていくアプローチが可能になれば、フライトシミュレータはもっとリアルにダイナミックに、「本来あるべき」挙動を再現することができるようになるだろう。損害を受けて羽根の一部が吹き飛んだ状態のフライトモデルも無理なく再現することができる。フライトシムファンの筆者としてはいろいろと想像が広がるところだ。ドライビングシミュレータなどでも車体のゆがみやたわみを有限要素法で再現していくアプローチにより、よりリアルで自由度の高いものを実現することが可能になっていくだろう。

 極端なことを言えば、この世に存在する物体に「剛体」は存在しない。あらゆる物体には弾性や粘性があり、外力が加えられたり温度が変わったりすると伸びたり縮んだり、たわんだりゆがんだりして変形するものだ。こういった物体の動きは従来のゲームで使われていたような剛体物理では再現できず、膨大な計算を要する方法でしか解くことができない。「PhysX」の活用は、純粋にゲームというよりシミュレータ分野での応用が楽しみな技術であるとの印象を抱いた。

 今回このセッションで紹介された物理エンジン、そして「PhysX」チップは、ゲームが物理シミュレーションを活用していける環境を整え、より多くのゲームが高度な物理処理を搭載する世界を拓いていく基本技術になっていくことだろう。現在のところ「PhysX」に対応したゲーム製品はまだ出荷されていないが、Xbox 360、プレイステーション 3といった次世代ゲーム機、そして次世代のPCゲームにおいては標準的なものになっていくかもしれない。そのとき、ゲームはどのような楽しみをプレーヤーに提供してくれるだろうか。きっと、もっとダイナミックで面白い世界を与えてくれるに違いない。

 そんな手ごたえを感じさせる、非常にエキサイティングなセッションだった。物理処理とゲームの未来に大きな期待を寄せたい。

□コンピュータエンタテインメント協会(CESA)のホームページ
http://www.cesa.or.jp/
□「CEDEC 2005」のページ
http://cedec.cesa.or.jp/
□「CEDEC 2005 Developers Night」のページ
http://cedec.cesa.or.jp/headline/0801.html
□ageiaのホームページ
http://www.ageia.com/
□関連情報
【8月29日】CESA、「CESA DEVELOPERS CONFERENCE 2005」を開催
“次世代”を見据えた意欲的なセッションが目白押し
http://game.watch.impress.co.jp/docs/20050829/cedec_01.htm
【3月18日】3Dゲームファンのための最新物理エンジン講座
~3Dゲームのための物理エンジンアクセラレータ「PhysX」はブレイクするか?
http://game.watch.impress.co.jp/docs/20050318/ageia.htm

(2005年8月31日)

[Reported by kaf@ukeru.jp]



Q&A、ゲームの攻略などに関する質問はお受けしておりません
また、弊誌に掲載された写真、文章の転載、使用に関しましては一切お断わりいたします

ウォッチ編集部内GAME Watch担当game-watch@impress.co.jp

Copyright (c)2005 Impress Corporation, an Impress Group company. All rights reserved.