ニュース

「アサシン クリード ユニティ」の大群集はマイクロ秒単位の積み重ね!!

新AIシステムのテクニックを解説

3月2日~6日開催



会場:San Francisco Moscone Convention Center

 Ubisoftは「Massive Crowd on Assassin's Creed Unity: AI Recycle」(「アサシン クリード ユニティ」における大群集-AIの再利用)と題して「アサシン クリード ユニティ」(以下「AC:Unity」)において、圧倒的多数の群衆を表現するべく施された「AnvilNext」エンジンに対する拡張のポイントを解説した。

 「AC:Unity」は、昨年11月に発売された3Dスニークアクションアドベンチャー「アサシン クリード」シリース最新作。登壇したのはUbisoftのモントリオールスタジオでAIプログラムを担当するFrancois Cournoyer氏で、最新作にもかかわらず、群集を表現するために導入した工夫の数々を惜しげもなく公開した。本稿では、その中でもメインである「バルクシステム」にフォーカスしてお伝えする。

 「AC:Unity」は、次の3点をゴールに置いて開発を進められた。1つ目は、第1作以来の最終到達点となることだ。2点目は、ゲーム世界の人々の生活感の中に溶け込む要素を取り入れること、最後の1点は街が生命で満ち溢れた世界を創り出すことだ。ところが、従来の「AnvilNext」エンジンには大きな制約があった。CPU処理の関係で各種NPCが最大100体までに制限されており、セリフを喋る市民レベルのものを取り扱えるのも20体までだ。プレイヤーの周囲には、そうした市民レベルのNPCを約4体までしか存在させることができず、群集を扱うシステムも存在しない。これでは本作のゴールに到達することはできない。そこでCournoyer氏は大胆な拡張、つまり「バルクシステム」の導入を進めることにした。

従来エンジンの制限事項がそのままだと本作を形にすることはできないため大幅な改良を断行

 バルクシステムの特徴は、群集を「bulk」単位で管理し、1体あたりはローポリにして数を稼ぐ新たな群衆システム。ひとまとまりで管理されたNPCは、プレーヤーからの距離によって、どの程度のディティールを持たせるか切り分けられ、3つの段階で構成されている。

 3つの段階のうち、もっとも荒い粒度を持つ「Low res bulk」は40M以上の距離で利用され、自律して行動するNPCではない。約2,000ポリゴンと少ないポリゴン数でモーションアニメーションのためのボーンも11しかなく、ごく基礎的な反応をするAIシステムが付随する。

 中間の「Puppet bulk」は12~40Mの距離で利用され、リアルに見えるだけの十分なポリゴン数を持つ。その振る舞いは簡素ではあるが、自律するNPCとして取り扱われる。ただし、NPCが提供する機能は非常に少ない。最上位の「Autonomous bulk」のレベルは、12M以内の距離で利用され、もちろんNPCとして自律行動する。すべての機能が有効だが非常に計算コストがかかる。

 そのため、最大数は40に制限されている。各「bulk」のCPU計算コストは順に、25マイクロ秒未満、150マイクロ秒未満、500マイクロ秒~5ミリ秒で、平均すると従来比で100分の1に削減されている。「Low res bulk」と「Autonomous bulk」の対比でいうと、29の差し替えパターンに対し無限の組み合わせ、最大ポリゴン数1,700に対して2万、アニメーションボーン11に対して300、トータルのポリゴン数30万に対して無制限と、極端に差を設けている。

バルクNPCの粒度は3段階。画面の奥にいくほど劣化する代わりに大量に出せる

パフォーマンスのまとめと、「Low res bulk」と「Autonomous bulk」との両極端な対比

 「Low res bulk」のモーションアニメーションシステムは、高速なカスタムのものが採用され、アニメーションブレンドも同様にカスタムのものが用意された。通常のアニメーションをスケーリングして簡素化する機能を持ち、手は動かない。物理演算にHavokは利用されず、動作要求には2Dの空間分割マップが活用されている。衝突が生じたときは、位置がずれるだけで、衝突に対する反応は示さない。移動はナビゲーションメッシュの上を沿うだけで、あらかじめ決められたものから逸脱することはない。これらはすべて大群衆を表示表現するために、計算パワーの選択と集中を行っていることを端的に示しているといえるだろう。

 前作までのAIは非常に複雑で、あらゆるNPCを単一のシステムでまかなっていた。NPCの反応動作はイベントベースで、非常に遅かった。それを本作のバルクAIでは、コンパクトなモジュールAIを採用しており、複雑な反応は示さないシンプルなものとしながらも、努めて従来通りの振る舞いにならう形にしている。AIにはまた、「Shepherds」と呼ばれる概念を設けている。シェパード、つまり羊飼いという言葉から連想されるように、バルクNPCでありながらあらゆるAIデータを持ち、バルクの群集を率いるように振る舞う。これらの要素をレベルデザインツールで、バルク群集の数や密度、自動的に発生するポイントの設置、特定の場所への配置、シェパードの行動を司るスクリプトの設定ができるようにしている。

アニメーションシステムの改良点。ちなみにこのローレゾな娘さんNPCの手は椅子に添えたまま動かない
コリジョン(衝突判定)の改良点。静止画ではわかりにくいのだが、接触するローレゾNPCはおしのけるだけで反応を示さない
AIシステムの新旧対比。ローレゾNPCに特化したAIによって振る舞う
赤丸の位置がレベルデザインツールで設定された群集の発生地点

 「AC:Unity」ではこの「バルクシステム」で、このようにAIを距離ベースで切り替えることにより大群集を実現している。距離ベースでの表現密度の切り替え、つまりLODというと描画に関するLODを連想しがちだ。たしかにグラフィックス描画処理はいつの時代になってもGPUの計算コストが高く、描画関係はどのゲームでも1番に最適化を行なうポイントだ。また、モーションアニメーションについても、こちらはCPU側の計算コストが高く、パフォーマンス向上のためにアニメーションLODを行うのも価値がある。

 ただ「AC:Unity」の場合は、これらの負荷軽減のみにとどまらない。むしろ描画を引き起こすトリガーになっているNPCの自律行動やプレーヤーキャラクターに対する反応、すなわちAIを場合分けし、AIに対してLODを行ない最適化することで、AIロジックそのものの処理負荷を軽減するのみならず、NPCの動作を簡潔にしアニメーションを行なわなければならない事態を減らし、ひいては描画負荷を軽減しているのだ。ひとつひとつは、それほど技術的に難しくないテクニックのように思えるが、それらをきっちり積み重ね、高い完成度のゲームを裏側で支えている。

 一見、何から何まで高密度に描ききられたように見える、あの表現力豊かで圧倒的な物量の群集の中を、時にはダイナミック駆け抜け、時にはひっそりと息をひそめるといったプレーヤーアクションは、こうした工夫の積み重ねの上に成立しているのだ。今後もさらなるAIの改良に取り組むCournoyer氏。改良により、いったいどんな体験が加わるのだろうか。今後もさらなるAIの改良に取り組むCournoyer氏。改良により、いったいどんな体験が加わるのだろうか。次作以降のリアルなプレイ体験は彼の努力にかかっている。

切り替えポイントを通過するNPC。ちょっとわかりにくいかもしれないが、たしかにディティールが変化している

完成したゲーム画面を見ると、どれがローレゾなのかわからないほど

(谷川ハジメ)