イベント
[CEDEC 2011]効率的にバランスを取ってはいけない。クリーチャーの動きをプロシージャルアニメーションで作るには
「CEDEC 2011」の2日めに開催された「物理エンジンを利用したクリーチャーのプロシージャルアニメーション」というセッションは,まさにそんなアニメーションを実現する手法の一例を紹介してくれる内容だった。リアルで楽しい動きを実現するノウハウも解説されたので簡単にレポートしてみたい。
トルク制御でリアルに反応するキャラクターを作る
セッションを担当したのはバンダイナムコゲームスの辛 孝宗氏。パネルディスカッション「ゲーム開発マニアックス」にもパネリストとして参加するなど,ゲーム物理の第一人者の一人といってよい人物だ。
辛氏が本セッションのために作成したクリーチャーは,丸い胴体に8本の足を持つシンプルなものだが,このクリーチャーがよたよたと歩く姿はなかなか可愛い。もちろん,実際のゲームでも,このクリーチャーに肉付けしてやれば立派なキャラクターとして活躍してくれるだろう。
例えば,このクリーチャーが障害物に遭遇したらよろけたり,風が吹いてきたら風に抵抗するように動いたりという具合に,環境やプレイヤーと反応しつつ,リアルに動くようにするにはどうしたらいいのか,というのがセッションのテーマである。
辛氏はまず,もっともシンプルな方法として足の角度を設定して動かすという方法を紹介する。簡単にいえば,クリーチャーが歩くように足の角度を変化させるというやり方だ。角度を変えていけば,あとのインタラクションは物理エンジンがやってくれるので,それに任せるわけである。
関節のタイプが決まれば,各関節に設定可能な角度の範囲が決まる。そして足を動かす順番を決めれば,あとは足の角度を設定するだけでアニメーションが生まれる。インタラクティブな動きは物理エンジンがやってくれるので,プロシージャルアニメーションとして成立するというやり方である。
しかし,辛氏によると,この方法では動きが面白くならないという。例えば,「クリーチャーが安定しすぎる」(辛氏)そうだ。クリーチャーに外力がかかっても,強引に足の角度を変えるのでクリーチャーの反応が硬くなるということだろう。結果,このクリーチャーは状況に反応できず,面白くないということになる。
そこで,辛氏が8足クリーチャーで採用しているのが「トルクで制御する」方法だという。トルクというのは回転する力のこと。関節の回転の力を変化させて足を動かすことで歩行アニメーションをさせてやるわけだ。力を制御するのだから,外力との相互作用は柔らかく反応して,インタラクションが生まれやすいということが想像できる
というわけで,辛氏は回転運動の力学を紹介する。
トルクで制御する,つまり足が目的の角度に動く力を関節に与えて,その力を制御してクリーチャーを動かすわけだ。では,その力はどう導けばいいのだろうか。力から足の位置を導くのは力学の式を使えばいいので比較的容易だ。そのような計算を順動力学などといったりするが,ここでほしいのはその逆,「足を目的の位置まで動かすための力」である。
辛氏が8足クリーチャーで採用しているのはPID制御という,制御理論では割りとポピュラーな方法だったが,まずそれがどういうものかを簡単に紹介しておこう。
クリーチャーの足を目的の位置まで移動させる場合に,誰でも思いつくもっとも簡単なやり方は「目的の位置まで遠ければ力を大きくし,近ければ力を弱める」というものだろう。このような制御の方法をP制御という。
スライドにも書かれているように,P制御は非常にシンプルなやり方ではあるが,バネでいう「フックの法則」とほぼ同じ式になってしまう。つまり,バネのように振動してしまうという重大な欠点がある。足が目的の角度を通り過ぎて戻ってまた通りすぎて……というのを繰り返してしまうのだ。
これを解決する最もシンプルなやり方は,比例ゲインKを目標位置に近いほど下げてやるというようにKを変化させる方法だろう。そのような制御法をPD制御という。
PD制御はシンプルで悪くないやり方だが「外力がかかると目標に到達しない可能性がある」(辛氏)。どういうことかというと,例えばクリーチャーに押し戻そうとする力が働いたときでも比例ゲインKは変わらないということだ。そのため目標付近で外力がかかるとうまく動いてくれない可能性がある。
この問題を修正するのがPID制御で,入れた力に対する反応の差(Differential)を与えてやろうという一種のフィードバック制御である。
さて,以上で個々の足の制御は分かったと思うが,これをクリーチャー全体の動きにどうつなげるかが問題になる。辛氏は階層で制御するという方法を提案した。つまり,胴体の動きから足の動きへとつなげるというやり方である。
道の動きは3D空間では6通りの自由度を持つ。この6通りの自由度を足の動きにつなげていくという方法だ。
以上,個々の足の制御は割りとシンプルなPID制御を使い,クリーチャー全体は2層のマトリクスで関連付けていくという方法で,物理エンジンを使い8足の可愛いクリーチャーが動きまわるというわけである。
バランスの制御でゲームらしい演出を
ところで,このクリーチャーのデモで辛氏が盛んに見せてくれたのが「足を切ってしまう」というデモだった。クリーチャーは,よたりながらも,バランスを取って歩こうとする。その反応はなかなか面白い。辛氏によると「タイミングがよければ6本を切ってもなんとかバランスを取ろうとする」そうだ。
そのような反応をどう作り出すかを説明してくれた。ここで出てくるのがロボット工学ではお馴染み支持多角形である。
重心……動力学的な重心(Zero Moment Point:ZMP)を,支持多角形内に収めるように動くことが,倒れずバランスを取ろうとする動きになる。辛氏はこまかな方法までは説明していなかったが,8足クリーチャーでは足裏にかかる力の応力のベクトルを計算してZMPを求めるというやり方になるのだろうと思う。
単に「倒れない」ということを実現するなら,迅速に重心を支持多角形に入るように動かしてしまえばいいのだが,それでは見た目的に面白くない。「ここがロボット工学と違うところ」だと辛氏はいう。よろよろとよろける,ちょこちょことバランスを取ろうとするという動きに面白さを加えることが演出につながっていくというわけだ。
以上のように,物理を使ったプロシージャルアニメーションはロボット工学,制御理論などの要素が満載だが,一方で最後に辛氏が強調したように動きの面白さ,見た目の楽しさも同時に創り出していく必要がある。ここらあたりが,ゲーム的に非常に重要だというのが結論である。その面白い動きを作り出すためにも,ロボット工学や制御理論が必須なわけで,こうした他分野の知見を取り込みながら楽しいアニメーションが実現され,ゲーマーが楽しめるタイトルにつながってくることを願いたい。
- この記事のURL:
キーワード