ニュース
「破壊された破片がプルプル震えない物理シミュレーション」が,PS4世代のグラフィックス表現を変える
Richard Tonge氏(PhysX Principal Engineer, NVIDIA) |
次世代のゲームグラフィックスに使われるかもしれない,リアルタイムの「ジッターフリー物理シミュレーション」についての講演である。
柱が崩れる物理シミュレーションデモ
「Pillar」を振り返る
今から1年ほど前,NVIDIAが「GeForce GTX 680」を発表したときに公開した,「Pillar」(柱)という技術デモを覚えている人はいるだろうか。下に示したのは,発表に合わせて公開された,NVIDIAのマーケティング担当副社長 Ujesh Desai(ユージャッシュ・デサイ)氏がGeForce GTX 680を紹介するムービーだが,1分26秒から先がPillarのデモだ。
見た目は「大理石の柱をゴムボールで壊す」という,地味かつシュールなデモだが,実は事前計算なしに,自由な形状でジオメトリを破壊するという,「リアルタイム・ノンリニア破壊」を実現した,技術的には画期的なものだったりする。
だが,Tonge氏による講演で語られたのは,自由破壊の部分ではなく,破壊された破片の運動や衝突を計算する剛体物理シミュレーションについてである。
現状のゲーム向けリアルタイム物理シミュレーションは,コンピュータで計算しやすいように,離散的な概念を導入して処理される。たとえば,運動しているオブジェクトがなにかと衝突した場合は,オブジェクト同士の接触点にかかるエネルギーを計算する。計算のパラメータには,高校の物理で習うような,質量や速度,摩擦といった係数が利用される。
こうした「接触点における,運動と力に関する不等式拘束条件の問題」を解く際には,線形相補性問題(Linear Complementarity Problem:LCP)の解法を考える必要がある。
箱同士,あるいは箱と斜面の接触点での,運動と力を計算する速度ベースの物理シミュレーションをイメージしたスライド |
このときによく用いられる計算方法が,反復計算を行って解の収束を期待する数値計算法である,「ガウス・ザイデル法」や「ヤコビ法」だ。
反復計算によって,適切な数値に収束させる計算法のイメージ図。「板(図の横線)を貫通しない」という条件のもとに、安定する状態に至るまで運動方程式を反復計算して解く |
ただ,ざっくりまとめてしまうと,ガウス・ザイデル法は並列計算の効率が悪く,「ジッター現象」が起こりやすい。物理シミュレーションを採用したアプリケーションで,計算結果を反映したオブジェクトの挙動が安定せず,プルプル振動してしまうようなものを見た記憶がある人も多いのではないかと思うが,あれがジッター現象だ。一方のヤコビ法は並列計算の効率が高く,ジッター現象も起こりにくいが,計算の収束が遅いのでリアルタイム物理シミュレーションに使うのは難しい。
ガウス・ザイデル法での計算のイメージ図。この場合,6回の計算で収束させている |
各接触点での運動量を,独立して計算するヤコビ法のイメージ図。その分、収束は遅い |
ひとつのオブジェクトを,接触点ごとに分割
……ではどうやって分割するのが適当なのか?
PhysXの物理シミュレーションは,前者のガウス・ザイデル法をベースとした処理を行うが,そのままではジッター現象という問題がつきまとう。Tonge氏はガウス・ザイデル法を使いながら,ジッター現象を起こりにくくする方策を模索したという。そこで考案されたのが,パラメータを分割するアイデアだ。
このアイデアでは,ひとつのオブジェクトが複数の接触点でほかと衝突している場合,これを接触点ごとに分割した「サブオブジェクト」と見なす。そして「サブオブジェクトはそれぞれ,ひとつの接触点でほかと衝突している」として処理するのだ。
独立性の高い部分を並列計算する,発展型のガウス・ザイデル法。同じ色の接触点は,互いに相関性がない独立した事象と考えられるので,並列計算できる |
Tonge氏が最初に思いついたこの方法は,「空間分割」(Spatial Splitting)とでもいうやり方だった。しかしTonge氏が言うには,この方法ではジオメトリの分割計算が高負荷であるうえに,分割したジオメトリを格納するためにメモリ消費量も増大し,分割したサブオブシェクトを再結合する処理も高負荷になる問題があったそうだ。そのため,結局導入は断念されてしまった。
オブジェクトを空間分割する概念図。上1つと下2つの球に挟まれた,中央の球について計算する。この状態で,真ん中の球を接触点ごとに,空間分割して考えるアイディアをTonge氏は考案した |
しかし空間分割だと,計算負荷とメモリ負荷が高く付きそうなので却下(Dead end) |
そこでTonge氏は,さらに大胆なアイデアとなる「Mass Splitting」(マススプリッティング,質量分割)を考案した。オブジェクトを同一形状のまま,質量とともに仮想的に分割して,それを各接触点の衝突計算に用いるという手法だ。これなら計算の収束も早く,ジッター現象もほぼ解消するという見込みだったが,果たして大成功。そこで,Mass Splittingの概念を導入して実現したのが,2012年のPillarデモだったというわけである。
新しいアイデアでは,先の「上1つ、下2つの球に挟まれた中央の球」について計算する際に,「接触点は1つで,重さは3分の1の同サイズの球体が3つ」に分かれていると考えることにした |
この方法はうまくいった! |
Pillarデモ実行時におけるある破片の挙動を追ったもの。縦軸が運動エネルギー量,横軸が時間経過だ。赤はガウス・ザイデル法による計算結果,緑がMass Splitting法による計算結果で,前者は運動エネルギーが安定しておらず,上下に振れてジッターが起きているのに対し,後者ではすぐに運動エネルギーが安定するのが見て取れる |
Unreal Engine 3ベースの技術デモで効果を実証
「Unreal Engine 3」(以下,UE3)にはPhysXが標準搭載されているが,これを用いて制作された技術デモ「Art Gallery」にも,Tonge氏の新手法が採用されている。下に掲載したムービーでは,建物の壁や床にロケットランチャーを撃ち込み,その破片が飛び散る様子が描かれているが,破片の動きに新手法の効果が窺えよう(※ちょっと極端だが)。
PlayStation 4に代表される次世代機向けゲームでは,物理シミュレーションが,今以上に重要度を増すと言われている。ゲームに応用できる物理シミュレーションは,今後も新たな革新的技術がどんどん登場してくるのだろう,と感じた講演であった。
GPU Technology Conference公式Webサイト(英語)
- 関連タイトル:
PhysX
- この記事のURL:
Copyright(C)2008 NVIDIA Corporation