オススメ機能
Twitter
お気に入り
記事履歴
ランキング
お気に入りタイトル/ワード

タイトル/ワード名(記事数)

最近記事を読んだタイトル/ワード

タイトル/ワード名(記事数)

LINEで4Gamerアカウントを登録
[CEDEC 2011]効率的にバランスを取ってはいけない。クリーチャーの動きをプロシージャルアニメーションで作るには
特集記事一覧
注目のレビュー
注目のムービー

メディアパートナー

印刷2011/09/12 21:13

イベント

[CEDEC 2011]効率的にバランスを取ってはいけない。クリーチャーの動きをプロシージャルアニメーションで作るには

バンダイナムコゲームス技術部 技術開発課リードプログラマ 辛 孝宗氏
画像集#001のサムネイル/[CEDEC 2011]効率的にバランスを取ってはいけない。クリーチャーの動きをプロシージャルアニメーションで作るには
 モーションキャプチャはリアルな動きが作れるが,プレイヤーの操作にインタラクティブにキャラクターを反応させるためには,膨大な量のデータを用意しておく必要がある。そこで注目されるのが,動きを自動で生成するプロシージャルアニメーションだ。
 「CEDEC 2011」の2日めに開催された「物理エンジンを利用したクリーチャーのプロシージャルアニメーション」というセッションは,まさにそんなアニメーションを実現する手法の一例を紹介してくれる内容だった。リアルで楽しい動きを実現するノウハウも解説されたので簡単にレポートしてみたい。


トルク制御でリアルに反応するキャラクターを作る


 セッションを担当したのはバンダイナムコゲームスの辛 孝宗氏。パネルディスカッション「ゲーム開発マニアックス」にもパネリストとして参加するなど,ゲーム物理の第一人者の一人といってよい人物だ。

 辛氏が本セッションのために作成したクリーチャーは,丸い胴体に8本の足を持つシンプルなものだが,このクリーチャーがよたよたと歩く姿はなかなか可愛い。もちろん,実際のゲームでも,このクリーチャーに肉付けしてやれば立派なキャラクターとして活躍してくれるだろう。

セッションで例題になったクリーチャーがこれ。このクリーチャーが,周囲の環境やプレイヤーとインタラクティブに反応しながら,よたよたと歩いてくれる
画像集#002のサムネイル/[CEDEC 2011]効率的にバランスを取ってはいけない。クリーチャーの動きをプロシージャルアニメーションで作るには

 例えば,このクリーチャーが障害物に遭遇したらよろけたり,風が吹いてきたら風に抵抗するように動いたりという具合に,環境やプレイヤーと反応しつつ,リアルに動くようにするにはどうしたらいいのか,というのがセッションのテーマである。

 辛氏はまず,もっともシンプルな方法として足の角度を設定して動かすという方法を紹介する。簡単にいえば,クリーチャーが歩くように足の角度を変化させるというやり方だ。角度を変えていけば,あとのインタラクションは物理エンジンがやってくれるので,それに任せるわけである。

関節のジョイントを決める。ヒンジ型だったりユニバーサル型だったり,あるいはボールジョイントで動く自由度が変わる。つまり設定できる角度の自由度が決まるわけだ
画像集#003のサムネイル/[CEDEC 2011]効率的にバランスを取ってはいけない。クリーチャーの動きをプロシージャルアニメーションで作るには
続いて足の動かし方を決める。多足クリーチャーの足の動かし方には,いろいろな方法があるが,これはRippleと呼ばれる足の動かし方を8足に拡張したもの。1つのバーが1つの足に対応し,濃淡が足を振る,足を接地させるという動作に対応する
画像集#004のサムネイル/[CEDEC 2011]効率的にバランスを取ってはいけない。クリーチャーの動きをプロシージャルアニメーションで作るには

 関節のタイプが決まれば,各関節に設定可能な角度の範囲が決まる。そして足を動かす順番を決めれば,あとは足の角度を設定するだけでアニメーションが生まれる。インタラクティブな動きは物理エンジンがやってくれるので,プロシージャルアニメーションとして成立するというやり方である。

足の関節の角度の自由度などを物理エンジンに設定,足を歩行に合わせて動かしてあげれば,あとは物理エンジンがやってくれる
画像集#005のサムネイル/[CEDEC 2011]効率的にバランスを取ってはいけない。クリーチャーの動きをプロシージャルアニメーションで作るには

 しかし,辛氏によると,この方法では動きが面白くならないという。例えば,「クリーチャーが安定しすぎる」(辛氏)そうだ。クリーチャーに外力がかかっても,強引に足の角度を変えるのでクリーチャーの反応が硬くなるということだろう。結果,このクリーチャーは状況に反応できず,面白くないということになる。

角度で制御するクリーチャーは面白くないと辛氏。例えば「足を引っ掛けたらよろけるような,それっぽい動きがほしい」が,この方法ではそうならないのでつまらないと辛氏はいう
画像集#006のサムネイル/[CEDEC 2011]効率的にバランスを取ってはいけない。クリーチャーの動きをプロシージャルアニメーションで作るには

 そこで,辛氏が8足クリーチャーで採用しているのが「トルクで制御する」方法だという。トルクというのは回転する力のこと。関節の回転の力を変化させて足を動かすことで歩行アニメーションをさせてやるわけだ。力を制御するのだから,外力との相互作用は柔らかく反応して,インタラクションが生まれやすいということが想像できる
 というわけで,辛氏は回転運動の力学を紹介する。

回転運動の力学。左側はお馴染みのニュートンの運動方程式,左側がそれに対応する回転運動の方程式だ。Tがトルク=回転する力で若干の差はあるが,運動方程式と大差があるわけではない
画像集#007のサムネイル/[CEDEC 2011]効率的にバランスを取ってはいけない。クリーチャーの動きをプロシージャルアニメーションで作るには

 トルクで制御する,つまり足が目的の角度に動く力を関節に与えて,その力を制御してクリーチャーを動かすわけだ。では,その力はどう導けばいいのだろうか。力から足の位置を導くのは力学の式を使えばいいので比較的容易だ。そのような計算を順動力学などといったりするが,ここでほしいのはその逆,「足を目的の位置まで動かすための力」である。
 辛氏が8足クリーチャーで採用しているのはPID制御という,制御理論では割りとポピュラーな方法だったが,まずそれがどういうものかを簡単に紹介しておこう。
 クリーチャーの足を目的の位置まで移動させる場合に,誰でも思いつくもっとも簡単なやり方は「目的の位置まで遠ければ力を大きくし,近ければ力を弱める」というものだろう。このような制御の方法をP制御という。

P制御と,その問題点。P制御では目標の角度までの差分に比例ゲインKを乗じた力を与えるというシンプルなものだが,これは目標位置で振動してしまうのであまりよろしくない
画像集#008のサムネイル/[CEDEC 2011]効率的にバランスを取ってはいけない。クリーチャーの動きをプロシージャルアニメーションで作るには

 スライドにも書かれているように,P制御は非常にシンプルなやり方ではあるが,バネでいう「フックの法則」とほぼ同じ式になってしまう。つまり,バネのように振動してしまうという重大な欠点がある。足が目的の角度を通り過ぎて戻ってまた通りすぎて……というのを繰り返してしまうのだ。
 これを解決する最もシンプルなやり方は,比例ゲインKを目標位置に近いほど下げてやるというようにKを変化させる方法だろう。そのような制御法をPD制御という。

PD制御は,目的に近づくほど比例ゲインKを小さくするというやり方だ。やや複雑な式が出ているが,これはそういうことを言っている
画像集#009のサムネイル/[CEDEC 2011]効率的にバランスを取ってはいけない。クリーチャーの動きをプロシージャルアニメーションで作るには

 PD制御はシンプルで悪くないやり方だが「外力がかかると目標に到達しない可能性がある」(辛氏)。どういうことかというと,例えばクリーチャーに押し戻そうとする力が働いたときでも比例ゲインKは変わらないということだ。そのため目標付近で外力がかかるとうまく動いてくれない可能性がある。
 この問題を修正するのがPID制御で,入れた力に対する反応の差(Differential)を与えてやろうという一種のフィードバック制御である。

入力した力に対する応答の差を項として加えたPID制御がこれ。外力を加えると,それに応じて力を増すというモデルになる
画像集#010のサムネイル/[CEDEC 2011]効率的にバランスを取ってはいけない。クリーチャーの動きをプロシージャルアニメーションで作るには

 さて,以上で個々の足の制御は分かったと思うが,これをクリーチャー全体の動きにどうつなげるかが問題になる。辛氏は階層で制御するという方法を提案した。つまり,胴体の動きから足の動きへとつなげるというやり方である。
 道の動きは3D空間では6通りの自由度を持つ。この6通りの自由度を足の動きにつなげていくという方法だ。

これは飛行機の例だが,3D空間にある物体はスライドのような6通りの自由度がある
画像集#011のサムネイル/[CEDEC 2011]効率的にバランスを取ってはいけない。クリーチャーの動きをプロシージャルアニメーションで作るには
6通りの動きと,それぞれの足の動きに対応付けたのが,このマトリクス。このような2階層の制御を行えばいいと辛氏は提案する
画像集#012のサムネイル/[CEDEC 2011]効率的にバランスを取ってはいけない。クリーチャーの動きをプロシージャルアニメーションで作るには

 以上,個々の足の制御は割りとシンプルなPID制御を使い,クリーチャー全体は2層のマトリクスで関連付けていくという方法で,物理エンジンを使い8足の可愛いクリーチャーが動きまわるというわけである。


バランスの制御でゲームらしい演出を


 ところで,このクリーチャーのデモで辛氏が盛んに見せてくれたのが「足を切ってしまう」というデモだった。クリーチャーは,よたりながらも,バランスを取って歩こうとする。その反応はなかなか面白い。辛氏によると「タイミングがよければ6本を切ってもなんとかバランスを取ろうとする」そうだ。
 そのような反応をどう作り出すかを説明してくれた。ここで出てくるのがロボット工学ではお馴染み支持多角形である。

ロボットでは,重心が足を結んだ多角形内に入っていれば倒れないことが知られている。足を結んだ多角形を支持多角形という
画像集#013のサムネイル/[CEDEC 2011]効率的にバランスを取ってはいけない。クリーチャーの動きをプロシージャルアニメーションで作るには

 重心……動力学的な重心(Zero Moment Point:ZMP)を,支持多角形内に収めるように動くことが,倒れずバランスを取ろうとする動きになる。辛氏はこまかな方法までは説明していなかったが,8足クリーチャーでは足裏にかかる力の応力のベクトルを計算してZMPを求めるというやり方になるのだろうと思う。

ZMPを計算し,それを8足クリーチャーの動きにつなげていく方法がこれ。胴体の重心を見て足を動かすことで”よろめき”という面白い動きにつなげていくことができるそうだ
画像集#014のサムネイル/[CEDEC 2011]効率的にバランスを取ってはいけない。クリーチャーの動きをプロシージャルアニメーションで作るには

 単に「倒れない」ということを実現するなら,迅速に重心を支持多角形に入るように動かしてしまえばいいのだが,それでは見た目的に面白くない。「ここがロボット工学と違うところ」だと辛氏はいう。よろよろとよろける,ちょこちょことバランスを取ろうとするという動きに面白さを加えることが演出につながっていくというわけだ。

ロボット工学では,とにかく効率的にバランスを取るのが正義になるが,ゲームでは違うと辛氏はいう。要は見た目に面白くすることがゲームの演出なのだ
画像集#015のサムネイル/[CEDEC 2011]効率的にバランスを取ってはいけない。クリーチャーの動きをプロシージャルアニメーションで作るには

 以上のように,物理を使ったプロシージャルアニメーションはロボット工学,制御理論などの要素が満載だが,一方で最後に辛氏が強調したように動きの面白さ,見た目の楽しさも同時に創り出していく必要がある。ここらあたりが,ゲーム的に非常に重要だというのが結論である。その面白い動きを作り出すためにも,ロボット工学や制御理論が必須なわけで,こうした他分野の知見を取り込みながら楽しいアニメーションが実現され,ゲーマーが楽しめるタイトルにつながってくることを願いたい。
  • この記事のURL:
4Gamer.net最新情報
プラットフォーム別新着記事
総合新着記事
企画記事
スペシャルコンテンツ
注目記事ランキング
集計:03月18日〜03月19日