AI最前線の現場から【スクウェア・エニックス】 キャラクターの身体を作る
はじめに
前回までの解説で、ゲームの中のキャラクターの人工知能を「キャラクターAI」と呼び、第1回ではその基本となるエージェント・アーキテクチャを、第2回では特にエージェント・アーキテクチャの中から「認識」と「意思決定」モジュールについて解説しました。今回は前回に引き続きエージェント・アーキテクチャの「運動生成」モジュールについて解説します。
身体と知能の問題
キャラクターAIの特徴は「身体の運動と共に知能を考えなければならない」というところです。これはとても当たり前のことのように思えますが、世間で言う「人工知能」のほとんどは「問題を解くための人工知能」であり、「自分の身体」というものを持っていません。ところが、キャラクターAIとロボットだけは身体と共に知能を考えなければなりません。しかし、キャラクターAIとロボットの身体運動の技術はかなり異なります。キャラクターAIの運動はモーション・キャプチャなどで準備したアニメーションデータを再生することで実現しますが、ロボットは各関節のモーターなどを制御して実現します。また、ゲームではキャラクターの運動は環境とインタラクティブに動作しなければなりません(図1)。つまりデジタルゲームにおけるキャラクターの身体運動と知能の問題は、新しい固有の分野なのです。今回はこのデジタルゲームにおける「身体と知能」の問題を見ていきましょう。
身体とアニメーション
キャラクターの身体とアニメーションは運動生成モジュールから作り出します。キャラクターAIはその際に身体と知能と環境世界が調和するように運動を作らねばなりません。
まず基本として、「キャラクターのアニメーション」はアニメーションデータを再生することで「歩く」「走る」「剣を振る」などを実現します。それぞれの行動ごとにアニメーションを準備し、そのデータを再生するのです。しかし、梯子を登っている時は歩けませんし、剣を振っている時にジャンプはできません。このように身体の状態を把握しておかなければ、身体に正確な命令を出すことはできません。
ここで人間の身体運動を考えてみましょう。人間の知能も身体のすべてを把握しているわけではありません。意識が身体に命令を投げると「どうやって実際の筋肉や骨を動かすのか」を担当する無意識の知能が働いて命令が運動の詳細に分解され、現在の姿勢や環境に合わせた運動が実現されます。例えば、意識が「腕を上げろ」と思えば腕は上がりますが、我々は「どうやって腕を上げるか」を理解しているわけでも、直接的に筋肉や骨を動かせるわけでもありません。そこには「腕を上げる」命令を実際の運動に展開する見えない知能があるわけです。
キャラクターを制御する3つの層
キャラクターの人工知能も同様です。意思決定モジュールは行動を決めますが、実際に身体運動を作り出すのは運動生成モジュールです。キャラクターには意思決定とは独立して身体は身体として解かなければならない問題が多くあり、それをこのモジュールが役割分担します。「FINAL FANTASY XV」のキャラクター制御では、知能から身体を含むシステムを「3つの層」に分けて制御を行っています(図2)。
最上層にあるのが「意思決定」です。意思決定の機能は、そこから決定された行動を出力することです。「ステート・マシン」でも「ビヘイビア・ツリー」でも、そのハイブリッド型の「AI グラフ」でも同様です(これらの詳細については第2回を参照)。意思決定モジュール自体もAIグラフ内で階層的な構造になっていることを解説しましたが、ここで言う階層構造は、その階層構造とは異なります。知能と身体を含めた、より大きなキャラクター全体の設計における階層構造です。
中間にあるのが、「身体層」(ボディ・レイヤー)です。ここでは身体の状態を大まかに定義しています。「走っている」のか、「ジャンプしている」のか、「梯子を登っている」のか、などを状態(ステート)で管理しています。状態ごとに行える行動を制限するほか、反射的に行った行動(ダメージリアクションなど)による身体の状態変化を知能に知らせる、といった役割を持ちます。
最下層にあるのが「アニメーション層」です。ここではアニメーション同士の遷移やアニメーション遷移が滑らかに行われるように制御します(「ブレンディング」と呼ぶ)。
キャラクターの行動を制御するには、意思決定から身体へ「走る」「剣を振る」「歩く」「座る」といったアニメーションをさせるように命令を出す必要があります。中間層を通して、こららの行動に対応するアニメーションを再生します。このアニメーションを制御するのが「AnimGraph」です。AnimGraphはステート・マシン構造になっており、再生するアニメーションデータに対応するノード間を遷移します(図3)。
しかし、あるアニメーションからあるアニメーションへ遷移する場合には、連続して移行する仕組みが必要になります。そこで、前のアニメーションと次のアニメーションの遷移時間に2つのアニメーションを重ね合わせて滑らかに移行するように見せる「アニメーション・ブレンディング」が行われます。AnimGraphでは、それぞれのアニメーション同士のブレンド時間やブレンド方法が決められており、いつでも自然に移行するようにアーティストが調整します。
また、身体は環境の制限や外からの作用を受けながらアニメーションを変形します。例えば、地面を蹴ったり、物をつかんだり、視線が固定される場合には身体のあるポイントが拘束状態になるようにアニメーションが微調整されます(「インバース・キネマティクス」と呼ぶ)。さらに、突発的な大きなアニメーションの変化には「プロシージャル・アニメーション」が対応します。これは、その場、その状況に合わせて既存のアニメーションから新しいアニメーションを生成する技術です。
シミュレーションによる攻撃領域の学習
自分自身が作り出したものなら、なんでも知っている。単純なものの場合は、その通りかもしれません。しかし、ゲーム・キャラクターのように複数のエンジニアとアーティストが関わる場合にはそうはいきません。モーション、AI、身体層、複数の要素が絡み合っているからです。
ここで1つ大きなテーゼがあります。動物が環境に合わせて自分の身体を動かすためには、まず自分の身体能力を知る必要がある、ということです。これはとても当たり前のことのように思えます。人間は自分がどれぐらい早く走れるかを知っています。もし何か敵対する動物などに追いかけられた際に、そのまま走って逃げきれるのか、木に登った方がいいのか、あるいは崖を飛び越える(この場合も自分の速度と跳び越えられる距離の関連を知らねばなりません)方がいいのかを知っておく必要があります。
そこでFINAL FANTASY XVでは、開発中に実際にキャラクターを何度も動かして、キャラクターの運動能力を抽出します。そして、その情報をキャラクターが環境内で行動を決定するために使用します。例を示しながら解説しましょう。
モンスターは自分の周りのどれぐらいの領域を攻撃できるでしょうか。モンスターは手を払ったり、体当たりしたりして敵を攻撃します。「どのようなモーションならば周囲の領域に攻撃を当てられるのか」という攻撃領域をシミュレーション(実際に動かして)で解析します。具体的には、まずモンスターの周りの空間に小さな球を配置し、モンスターを動かして衝突した球をマーキングします。マーキングした球をシンプルな基本立体図形に近似して攻撃領域として記憶する、という流れです。
例えば、ベヒモスの右手の払いがどれぐらいの領域にヒットするかをシミュレーションします(図4)。そして、ゲーム内では「この領域に敵が来れば攻撃をヒットできる」ことがわかるので、攻撃が行動の候補に上がる、という仕組みです。
シミュレーションによる移動の学習
次に、キャラクターの移動モーションを解析してみましょう。移動で問題となるのが「指定したポイントにきちんと止まれるか」です。よく似た問題に「どれぐらいの角度で曲がれるか」という問題もあります。キャラクターはすぐに止まれたり、直角に曲がれたりするわけではありません。止まるためには徐々にスピードを落とす必要がありますし、曲がるためにはそれぞれの身体運動に合わせた曲がり方があります。
また、ある速度で走っているキャラクターが「どれぐらい前からスピードを落とせば目標地点で止まれるのか」「どれぐらいの旋回半径(どれぐらいの半径の円軌道)ならば直角に曲がれるのか」は、キャラクターそれぞれが持つモーションによります。その具体的な数値を知るには、速度を変化させながら、実際にモーションを動かしてみるしかありません。
例えば、ある速度で走っているキャラクターが止まるためにどれぐらいの距離が必要かをシミュレーションする場合を考えてみます。実際にゲームと同じ条件のテスト環境マップで走らせておき、停止命令を出して立ち止まるモーションへと遷移させ、その時に距離を測定します。これで速度に依存した停止距離がわかります。
旋回半径も同様です。ある速度で走っているキャラクターにコーナーを曲がる動作を行わせて、その速度でどれぐらいの旋回半径の軌道を描くかを測定します。それを複数の速度でテストすると図5のようなグラフになります。このデータをそれぞれのキャラクターに記憶させて利用することで正確な位置で止まったり、曲がったりができるようになります。
第3回まとめ
さて、第3回では、以下のようなことを見てきました。
- 意思決定に従って環境に合わせた身体運動を構築する
- 身体運動は身体構造と周囲の環境との物理的な関係を考えて生成しなければならない
- キャラクターの身体を環境に「馴染ませる」ためにはシミュレーションによる学習を行う必要がある
今回は運動生成モジュールについて思考から身体の問題まで踏み込んで解説しました。これでキャラクターAIについての解説は完結です。
次回は最終回となります。キャラクターAIから離れて「メタAI」と「ナビゲーションAI」について解説します。この2つが「何だっけ?」という方は、第1回の内容を見直しておきましょう。お楽しみに!
【第3回参考文献】
白神 陽嗣、横山 貴規、並木 幸介、三宅陽一郎
FINAL FANTASY XV -EPISODE DUSCAE-におけるキャラクターAIの意思決定システム
(CEDEC 2015、SQUARE ENIX PUBLICATIONS) http://www.jp.square-enix.com/tech/publications.html
今村 紀之、川地 克明
FINAL FANTASY XV -EPISODE DUSCAE- のアニメーション ~接地感向上のためのとりくみ~
(CEDEC 2015、SQUARE ENIX PUBLICATIONS) http://www.jp.square-enix.com/tech/publications.html
連載バックナンバー
Think ITメルマガ会員登録受付中
全文検索エンジンによるおすすめ記事
- AI最前線の現場から【スクウェア・エニックス】デジタルゲームのための人工知能入門
- AI最前線の現場から【スクウェア・エニックス】ゲーム・キャラクターはどのように意志決定するのか
- AI最前線の現場から【スクウェア・エニックス】 ゲームそのものを認識するメタAI
- 「FFXV」に活かされたAIとは?「Pokémon GO」に続くARゲームの登場も間近か…日々進化するゲーム業界のAI・ARに迫る
- 3Dモデルのダウンロード・インポートとアニメーションの調整
- VRゲームのグラフィックを強化しよう(前編)
- ゲームのデザインデータの作り方
- キャラクターの移動
- AIR 1.1日本語版登場!
- ゲームの実装を行う