イベント
[CEDEC 2009]決め手はテンソル,物理シミュレーション導入の勘どころ
CEDEC 2009の初日に行われた「ゲーム物理の扱い方」と題されたセッションは,そんな物理を敬遠しているゲームデザイナやプログラマを対象に,ゲームでうまく物理を利用するためのポイントを紹介するという内容。4Gamerの読者としては逆に,物理を採用した調整不足のゲームに起こりうる奇妙な動作の理由を知る手がかりにもなる内容を含んでいたので,セッションの概要を紹介してみたい。
剛体の表現では慣性テンソルの調整が鍵を握る
ゲームにおける物理は,もっぱらオブジェクト同士の相互作用を表現するのに利用されている。オブジェクト同士が衝突であるとか,転がる,砕ける,落ちる……といった挙動を物理で計算するわけだ |
デザイナの手によるキーフレームアニメーションを使った動きには有限のパターンしかないが,物理を利用すれば無限のパターンが生み出される。パターンが多様になるうえ,デザイナーの負担を減らせる |
ゲームにおける物理について改めて説明するまでもないとは思うが,簡単にまとめてしまえばゲーム中に登場するオブジェクト(物体)の動きを物理計算を使って表現することで,より現実に近い動きを表現しようというモノだ。使用される計算はニュートン物理に代表される古典物理のレベルで「物理といってもたいして難しいものではない」(櫻井氏)。
物理を使う欠点には,計算負荷が高いということが挙げられる。ごく簡単な計算を行うといってもオブジェクトの数が増えれば計算量が増えるうえ,ゲームではフレームの描画に合わせて計算を行う必要があるので計算時間が限られていることがネックになる。
一方,利点は「物理法則に従って得られる挙動のパターンは無限」(櫻井氏)という点だ。
物理を利用する利点は大きいわけだが,冒頭で述べたように調整が難しいといった理由で採用を避けるゲームデザイナは少なくない。実際,「設定を変えただけであっという間に挙動が不安定になる」(松生氏)ということがよく起こる。
ゲーム物理では,剛体(堅いオブジェクト)に形状,位置,速度,質量といったパラメータを設定して計算させるが,松生氏によるとパラメータの中で挙動を安定させるキーになるのが慣性テンソルだという。
物理パラメータの設定が難しいのがゲーム物理の難点。設定がうまくないとラグドール(ここで言うラグドールは物理で動かされる人体などのこと)の関節が伸びてしまうなど不自然な動きを見せることも少なくないという |
剛体が持つパラメータのうち,共同を安定させるキーになるのが慣性テンソルだという。「慣性テンソルを理解しないまま物理シミュレーションを適用するのは危険がある」(松生氏) |
慣性テンソルというのは,回転のしやすさ(回転モーメント)を,より一般化した数学表現のことだが,ここでは回転のしやすさを表すパラメータくらいに考えておけば十分だ。慣性テンソルが大きければ回転しづらく,また回転しだすと止めづらい。逆に慣性テンソルが小さければ簡単に回り出すが,回転は簡単に止まる。
慣性テンソルは物体の形状や重量配分から決めることができるが,物理エンジンでは「慣性テンソルが小さくなりすぎると物体の動きが安定しない」(松生氏)のだという。そのため,物体の形状から想定される慣性テンソルをそのまま使ってしまうとオブジェクトの動きが安定しない結果になりやすいそうだ。
慣性テンソルは物体を回転する軸から眺めるとおおよその大きさが分かる。回転軸から見た大きさが小さければ慣性テンソルは小さく,大きければ慣性テンソルは大きくなるわけだ |
例えば,棒のような剛体なら断面方向の慣性テンソルだけが極端に小さくなってしまうため不安定になりやすいという。不安定を抑えるには慣性テンソルを,実際より太い棒として設定するとうまくいく |
そもそも,なぜラグドールの関節が不自然に伸びたりするのだろうか。関節は物体と物体同士の相互作用……ぶつけるであるとか,くっつけるというような計算(制約:コンストレイントという)を使って動きを表現している。物体同士の相互作用というのは,簡単に言えば二つの物体の速度と位置,そして二つの物体の質量比を使って計算できるが,速度や位置は数学的また時間的な制約から近似的にしか求められない。慣性テンソルは質量のほうにかかってくるので,慣性テンソルの違いが近似の誤差を拡大してしまい,関節などが自然な形には表現できない結果を引き起こすという。
では,実際にどういうことが起きるのだろうか。簡単な例として4つの関節を持つ鎖でつり下げられた錘の例が紹介された。
右中央図のような鎖でつり下げられた錘に対して慣性テンソルを質量配分どおりに設定すると,錘を振ったときにジョイントが離れてしまう。それを解決するには,質量配分を変える(鎖に対して錘を軽くする)方法もあるが,鎖の部分の慣性テンソルを錘に対して大きくするという調整で,より自然な動きが再現できるという。
これはラグドールの場合も同様で,実際の人体の質量配分どおりにすると関節が伸びてしまう現象が起きる。下の例を見てほしい。
実際の人体の質量に合わせてオブジェクトの質量の配分を決める。そのラグドールの手を固定して動かすと,手の関節が伸びてしまうという |
実際にシミュレーションした例。少々分かりづらいが手を固定して左右にラグドールを振ると手の関節が離れていることが分かると思う |
固定されている手を優先して質量を配分し直す |
04すると左右に振っても関節が伸びない |
ゲーム物理と実際の物理は違う〜意味を理解したうえでパラメータの調節が必要
以上の関節の動きに加えて,扉の動きなどの説明があったが,ザックリまとめてしまえば「パラメータの意味を理解したうえで,パラメータをうまく調節して自然な動きを再現しよう」ということになる。
慣性テンソルのように分かりづらいパラメータを,意味を理解せずに調整してもいい結果は得られない。また,理解して現実通りにパラメータを設定してもやはりうまくいかない。ラグドールの重量配分など,まるっきり現実とかけ離れているが,実際に動かすと「それっぽく」動いてくれることが分かる。ゲームは本当の意味での物理シミュレーションではないのだから「それっぽく」動いてくれるほうが重要なのだ。
物理エンジンの普及に応じて,今後も物理を取り込んだゲームが増えるだろう。パラメータの調整がうまくないゲームももちろん増えるはずだ。ゲーム中のオブジェクトの不自然な挙動を見たら,今回の記事を少し思い出してくれると「あ,なるほどな」と納得できるかもしれない。
(C)Copyright 1999-2008 Havok.com Inc (or its licensors). All Rights Reserved.
Copyright(C)2008 NVIDIA Corporation