イベント
FINAL FANTASY XVにおける障害物とのインタラクション制御手法〜キャラの環境認識と適応した行動について
最近のいわゆるリアル描写にこだわったタイプのゲームにおいて,最先端の技術を採用したものについては,各キャラクターの「環境の認識」「認識した環境への動的なインタラクション」という表現が実装されている。
これは,はっきり言ってしまえば,ゲームメカニクス(ゲームの展開,ゲーム性)に大きく作用するものではないため,一般的なプレイヤーがそうした表現に対して意識を向ける機会はあまりないかもしれない。しかし,ゲームをプレイしていて「なんとなく今までよりもキャラの動きがリアル」「キャラクターの立ち振る舞いがまるで本当に生きているみたい」と感じることがあったとすれば,そうした技術が適用されている作品の可能性が高い。
この講演で発表されている内容は,実際にFFXVで採用されている技術ということもあり,聴講者からはかなり高い関心が寄せられた。
障害物の乗り越えを「待機」「ダッシュ」「乗り越え」の3状態で考える
FFXVをプレイしたことがある人ならば,登場する多くのキャラが,周辺環境に対して,プレイヤーの操作とは無関係に自発的にアクションを行うことがあることに気づいたことだろう。
茂み間を抜けようとすれば枝を押しどける動作をし,近くに岩壁があれば,下ろしていた手を上げて,岩壁に手を添えたりもする。ゲーム進行にはまったく影響のないアニメーションだが,こうした行動を連続で見ていると,キャラクターが本当に生きているように見えてくる。
今回のセッションにおいて,メインテーマとして取り扱われたのは,こうした自発アニメーションのなかでもアクション性の高い「障害物の乗り越え」についてであった。
FFXVにおける障害物乗り越えは,アニメーションの状態遷移として大別すると「待機」「ダッシュ」「乗り越え」の3状態からなっている。
「ダッシュ」状態は「走る」行動なわけだが,直進だけでなくカーブしながらの「走る」動作も考えられるので,「ダッシュ」状態は,「左曲がりダッシュ」「直進ダッシュ」「右曲がりダッシュ」の3パターンを適宜合成して出力する。例えば少しだけ曲がりながらのダッシュは「直進ダッシュ」のブレンド率を高くして出力するようなイメージだ。
「乗り越え」時の移動量と速度の調整
「乗り越え」に関してはもう少し複雑な処理が必要になる。「乗り越え」のアニメーションは,走ったまま片足で足場に乗り上げ,そのまま駆け上がって降りる動作までで成り立っている。
実際のゲームシーンでは,さまざまな高さの障害物があるため,乗り越え対象の障害物を検出すると,その高さに合わせて,キャラクターの移動量を調整することになる。
「乗り越え」の基本アニメーションは,踏み切って(ジャンプして)から片足が足場に到達するまでの移動量の情報を持っているので,そのときに飛び越える足場の高さに応じて,基本アニメーションの移動量を変調するようなスケール処理をかけることになる。川地氏によれば,FFXVではその「乗り越え」基本アニメーションのどのパートが調整対象になるかはあらかじめ定義してあるそうだ。
たとえば移動量だけでなく,速度関しても配慮する。「ダッシュ」状態の速度と「乗り越え」状態の速度が不連続になると継ぎ接ぎ感が漂ってしまうため,この速度変位を滑らかにつなぐ処理も行う。また,その自然な速度変位を継続させる感じで「乗り越え」状態のアニメーションも生成する。
「乗り越え」時の足場の検出〜環境の認識
さて,上では「障害物の検出」という簡単な表現で片付けてしまったが,この部分こそがAI的な,環境認識の部分になる。
川地氏は,「乗り越え」時の足場となる場所の条件として,
(1)キャラクターからの距離がほどよい距離と高さ
(2)壁の上の面がある程度平ら
(3)壁の進行方向の奥行きがある程度薄い
(4)壁の前の面が傾いていない
(5)足場の周辺の空間に余裕があって,乗り越え動作の障害にならない
といったものを挙げていた。
(1)にはまらない条件は,たとえば「背丈を大きく超える高さ」などだ。(2)は足場に突起がある場合などが排除される。(3)は,あまりにも足場に厚みがあったとしたら着地ができなくなってしまうことを排除するための条件だ。(4)は足場となる箇所が斜めすぎないかの条件。(5)は,良好な足場が見つかったとしても,そもそもその周辺が障害物だらけの場合は排除するということだ。
実装上,問題となるのは,ゲーム世界に登場するオブジェクトに対して,足場となる情報をどのように設定しておくかという「データの持たせ方」の部分だ。
シンプルなのは,あらかじめ,ゲーム世界に足場情報を設定しておく方法だ。この手法の場合,各キャラクターからの環境認識(足場認識)の計算コストは安くて済むが,同じオブジェクトでも,置かれ方によっては足場情報が変わってくるので,オブジェクトの配置情報とは別に,足場情報を別途待たせる必要がある。
もう一つの方法は,オブジェクト単位に「乗り越え」が可能かどうかの可否情報だけを設定しておき,実際の「乗り越え」行動時には,そのオブジェクトの足場を動的に見つけ出す手法だ。足場認識時の計算コストは高くなるが,足場情報を別途持つ必要がない利点がある。足場の検出先となる形状データは,通常の物理シミュレーション用の衝突形状データ(コリジョンデータ)をそのまま流用することができる。
結局,FFXVでは,後者の方法を採択することとなったという。
この方法では,ゲーム実行時(ランタイム時)に,リアルタイムに足場となる障害物の判定検出をする必要があるが,これには,進行方向に対してのレイキャストを行っているという。
ここでいうレイキャストとは,概念的にいえばゲーム世界における各キャラクターが,進行方向の障害物を検出するために直進するレーダー波を放っているようなものだ。
この「目には見えない直進レーダー波」になんらかのゲーム内オブジェクトが衝突した場合,今度は実際の足場の検出フェーズへと移る。
この「足場の検出」には独特な「シェイプキャスト」と呼ばれるテクニックが用いられる。
前出の障害物検出は「目には見えない直進レーダー波」……すなわち直進するビームのような「レイ」を放って衝突を検出させたが,シェイプキャストとは,3Dの立体物を射出して,対象のオブジェクトとの衝突箇所を取得するものになる。
「シェイプ」とは形状という意味だが,FFXVの足場検出で用いられるシェイプキャスト用の立体物は三角柱である。
実際のシェイプキャストは,レイキャストを行った結果として発見された障害物オブジェクトの直上付近から,その障害物オブジェクトに対して下に向かって三角柱を押し込むような感じでキャストする。
この三角柱シェイプキャストの結果,この三角柱に何らかの交点ができたとときに,その交点のでき方で,「乗り越え」動作の足場に使えるかどうかを判定していく。
まず,理想形の結果として,この三角柱の底辺に交点ができれば,足場となる場所があると判断する。
しかし,三角柱の底辺の中央付近からかなりずれた奥側や手前側に,第三者オブジェクトとの交点ができた場合は,「乗り越え」動作軌道上に障害物があることが判別できるため,「乗り越え」不可の判断が下る。
三角柱の側面側に交点ができれば,障害物オブジェクトの上部に凹凸があると判定できるため,足場にはできないと判断する。
ここからは基本的な幾何学の問題だ。
下図を見ると理解が早い。
レイキャストの結果,障害物との交点がA点として,三角柱シェイプキャストの結果としてB点が求まると,足場の広さ(奥行き長)のBCを算出できる。
この足場の奥行き長が長すぎる場合は,足を引っ掛けて飛び越えたときに,飛び越えた足を振り下ろせず,その足が足場に当たってしまって「乗り越え」られない。
こうした奥行き長が長い足場では,足場と見なされた領域に手をついて,そのまま滑走するアクションへと移行させている。
「乗り越え」から「着地」へ
ここまでは「乗り越え」のアクションを一塊に扱っていたが,川地氏によれば,FFXVでは,「乗り越え」アクションは実は,「登り」と「着地」に分けて制御しているとのこと。
「登り」も実際の実装では足場までの高さが「高い」「低い」でアクションを場合分けしており,また,足場の奥行き長の「長い」「短い」でもアクションを場合分けしている。
「乗り越え」において,足場がキャラクターの身長に対して一定割合以下の高さであれば足を引っ掛けて飛び越えるが,ある程度の高さ以上だと,手をついて飛び越える動作となる。
そして,上でも出てきたが,足場の高さが一定以上高くて,足場の奥行き長が長い場合は,手をつきながら滑走する動作へと移行する。
以上の動作の場合分けを状態遷移図で表すと下図のようになる。
そして,ここまでしてきた説明でスルーしてきた「着地」関連の動作にもいろいろとバリエーションがある。
というのもFFXVのゲーム世界では,高いところからそのまま落下という状況があるだけでなく,落下直前にさまざまな高さの足場に遭遇する場合もあるからだ。
こうした状態にも配慮すると状態遷移図は下図のようになる。
ここから,川地氏はこの複雑な状態遷移を整理していく最適化の話題を展開したが,ゲームエンジンの仕様によって,方針は異なってくるうえ,実装の仕方で最適化の手法も異なってくると思うので,本稿ではその概念だけを簡単に解説する。
「ダッシュ動作を再生させることを指示する」機能と「足場の環境認識(検知)」機能を組み合わせた状態ノードと,「アニメーションの再生」機能と「環境認識(検知)」機能を組み合わせた状態ノードとを結ぶことで,これだけで,「ダッシュ」「乗り越え(登り)」「乗り越え(着地)」の状態遷移を記述してしまう。これに「落下」の状態ノードを加えたのが下図になる。
だいぶ状態遷移図がシンプルになったのが分かる。
ここまでシンプルにすることで「手をついて滑走する」状態をキャンセルする動作や,「手をついて滑走している」状態から障害物に衝突して待機状態に戻るようなシチュエーションにも容易に記述できることを川地氏は解説していた。
まぁ,このあたりは実装形態によっていろいろな最適化手法があるし,最終的な仕様が固まるまで最適化に手を出すのは難しいのではないかとは思う。ただ,アニメーションの状態遷移はシンプルに記述できた方がメンテナンス性は高いことは間違いない。
「乗り越え」動作以外への応用
最適化された状態遷移では,「乗り越え」の際には「障害物を検知」し,検知した足場にちょうど噛み合うように,あらかじめデータとして持っているアニメーションを調整/変調して再生する……という構造になっている。
この動的に環境を検知する仕組みと,検知した環境に対応する動作のバリエーションを増強していくことで,より複雑な環境に対するリアクションをとることができるようになると川地氏は説明する。
川地氏は,FFXVに実際に実装されている,その拡張例をいくつか示した。
まず示されたのは「急制動」のアクションだ。これは進行方向に乗り越えられない障害物があって,登れもしない場合に発動する。
速度が乗ったダッシュ状態で障害物に衝突すると,障害物をキックして急制動するし,速度がそうでもないときは手をついて止まったり,あるいは普通に歩みをやめて待機状態に移ることも。
川地氏によると,戦闘中にこの「壁止まり」リアクションが発動すると,ゲームプレイ時の爽快感を損なうので,そうした状況下では意図的に「壁止まり」リアクションは発生しない制御にしているとのことである。
二つめの拡張例としては,動く壁に押されたときのリアクションが示された。
第三者からの衝突などで,本来居た場所からズレを生じさせられた場合に発動する。
具体的には,壁が押し寄せてきた場合はその壁に手をつく動作をしたり,背後から壁が押し寄せて来た場合はもたれかかる動作をしたりする。逆に,接触していた壁が離れていった場合は,息をつくようなリアクションが再生される。
最後に紹介されたのは,断崖絶壁から下を覗き込むリアクションだ。
FFXVのゲーム世界には落下防止目的で衝突判定のある透明壁(グラフィックスとしては描画されない壁)が断崖絶壁に設定されており,ここに走り込んだときには,キャラクターは立ち止まることになる。
この透明壁には「覗き込み」ができる属性が設定されていて,走り込んできた際に,この透明壁を検知すると,初回は「下を覗き込む」リアクションが発動するのだ。
その場所にいる限り,永遠に「覗き込み」動作をしてしまってもおかしなことになるので,そうならない制御は盛り込まれているとのこと。ちなみに「覗き込み」動作のあと少し下がって再び走り込めば,そこから落下したりジャンプしたりすることはできるようになっている。
経路探索システムと乗り越え
FFXVでは,こうした「乗り越え」アクションは,AIシステムではなく,アニメーションシステム側での実装になっていると川地氏は説明する。
どういうことか筆者から補足説明をすると,FFXVでは「キャラクターがどこを通るか」というAIによる経路探索システムにおいて,そのキャラクターが「乗り越え」アクションを持っている場合は,岩や柵などをAI側で認識することはなく,いわば岩や柵がないものとして経路を選択するということだ。
つまり,AIシステム自体は,大局的な(マクロな)経路を算出するが,その経路を進んでいく過程における「乗り越え」動作は,アニメーションシステム側で自律的に実行されるということである。
言い換えると「乗り越え」動作時のレイキャストやらシェイプキャストなどを組み合わせた環境認識はアニメーションシステム側の局所的な(ミクロな)AIが実行されるというイメージだ。これはFFXVにおいて「岩に手をつく」「藪を掻き分ける」といったアクションも同様である。
ゲーム世界の「どこが歩けてどこが歩けないか」を表すデータ構造として「ナビメッシュ」と呼ばれる,ポリゴンからなる歩行可能領域データを,地形のグラフィックスデータとは別に持つことが多い。
FFXVでもこのデータ構造を持つが,川地氏によるとFFXVではこのナビメッシュデータ構造において,柵などは「乗り越え可能」属性が設定してあるという。
なので,「乗り越え」アクションを持つキャラクターは柵を越える経路が算出可能だが,そうでないキャラクターは,この柵によってナビメッシュデータが分断されているように見えるため回り道の経路を算出するのだ。
今後の展望
川地氏は,今回のFFXVにおけるこのテーマの実装に対して一定の評価をしてはいたが,同時に課題も感じていたようで,セッションの締め括りにはそのあたりに言及していた。
川地氏は,今後実装していきたいいくつかの事例について言及していたが,一言でまとめるならば「適応型動作の拡充」だ。
具体的には,今以上に環境をより正確に認識して,その環境に適合したアクションをとれるようにする……ということだ。例えば,壁が横にあれば三角飛びをしたり,水面に不連続かつランダムに顔を出している足畳に対して足を着いて渡っていくような動作などだ。
また,動いている物体を正確に乗り越えたり,「空いている窓の窓枠」のように,対象オブジェクトに特定の機能がある場合には,そこを必ず踏むというような行動も実装したいと述べていた。
それと,実際のゲームプレイで気が付いた人もいるかもしれないが,本作のこうした一連の,環境に対する自発的なリアクションは,アニメーションのつながりが不連続になったり,足や手の位置が本来来るべきと想定される場所からずれているような印象を受けるときがある。こうした「不連続感」や「非接地感」についても改善していきたいと述べていた。
これまでのゲーム体験で「壁に衝突しながら,そのまま走り続ける」という間抜けなキャラクターの行動に笑ってしまったことがある人は少なくないはずだ。もしかすると,今でも,そうしたゲームは少なからずあるかもしれない。
しかし,近代ゲームの表現では,そうした「無知能な行動」から脱却しようとする動きは活発化しており,FFXVなどは,まさにこのテーマに対し,合理的かつシステマティックに取り組んだタイトルだと言える。
今回のこうした取り組みは「ゲームの面白さには直接関係ないでしょ」という人もいるかもしれないが,そんなことはない。
こうした「ミクロな知性」が駆動する「局所的なリアクションれの数々は,地味ではあるが,登場するキャラクター達から知性を少なからず感じることができるため,プレイ体験を「積極的に盛り立てる」ことはなくとも「しらけさせない効果」は確かにあるのだ。
- 関連タイトル:
FINAL FANTASY XV
- 関連タイトル:
FINAL FANTASY XV
- 関連タイトル:
FINAL FANTASY XV WINDOWS EDITION
- この記事のURL:
キーワード
(C)2016 SQUARE ENIX CO., LTD. All Rights Reserved. MAIN CHARACTER DESIGN:TETSUYA NOMURA
(C)2016 SQUARE ENIX CO., LTD. All Rights Reserved. MAIN CHARACTER DESIGN:TETSUYA NOMURA
©SQUARE ENIX CO., LTD. All Rights Reserved.
MAIN CHARACTER DESIGN:TETSUYA NOMURA
- ファイナルファンタジー XV 初回生産特典 武器「正宗/FINAL FANTASY XVオリジナルモデル」アイテムコード同梱 - PS4
- ビデオゲーム
- 発売日:2016/11/29
- 価格:¥999円(Amazon) / 1180円(Yahoo)