イベント
[GDC 2021]「原神」は広大なマップでどのようにNPCのAIを管理しているのか
「原神」(PC/PS5/PS4/iOS/Android)は2020年にリリースされたオープンワールドRPGで,モバイルやPCなどで世界的に人気を博している。Xu氏は,同作のAIシステムに,責任者として3年間関わったという(3年でできたんだ……)。今回の講演では,広大なマップ上で展開するオープンワールド型オンラインゲームで,どのようにAIを構築してきたかが語られた。
最初にAIアーキテクチャの解説が行われた。原神では多くのタイプのAIが使われている。人間,野生動物,戦闘中のNPCなどには別々のAIが使用され,リリースの初期段階で200以上があったという。そのため,ゲームデザイナーが効率的にAIを作ることのできるワークフローが求められた。オンラインゲームであるためアップデートも続くことになるので,それらの管理はAIフレームワークの仕事となる。
最初に,一般的な方法としてビヘイビアツリーをAIフレームワークに組み込んだのだが,ツリーは膨大なものとなり,さらにサブツリーやたくさんのノードが連なるため,新しいロジックを追加する際にツリーを変更するのは大変で,維持するのは困難だと判断された。
そこで独自のAIパイプラインが構築された。機能ごとの推論モジュールをまばらにグループ化し,それぞれで更新を行う。次に意思決定ツリーに移行する。これはビヘイビアツリーに似ているが,意思決定だけを行う軽量なものとのことである。それをもとに,スキルを発動したり,移動したりといった行動を行う。その表現形態としてアニメーションを行うわけだが,これはアニメーションシステムに適切なパラメータを渡すことで実行される。これら一連の処理がフレームごとに実行されていく。
このアーキテクチャを採用することで,機能をモジュールとして開発し,新しいタイプのAIを作る際にそれらのモジュールを組み合わせて使うことができるようになったという。機能的に独立しているので,新しいAI機能モジュールを開発する際にも,ほかの機能に影響を与えることはない。
これにより個々のNPCに個性と特殊な能力を与えることもできるようになった。ボスキャラなどのユニークな動きも簡単に実現できる。
これらをまとめて扱うために開発されたのがKey State Managerだ。これは限定的なステートマシンで,戦闘時などに使われ,バフの状況やそのほかのステータスパラメータの状況で駆動される。例として挙げられたのは,Fire Slimeのものだったが,ゲームデザイナーが状態遷移をエディットしてAIシステムに組み込むことができるという。
この新しいパイプラインとKey State Managerによって,新たなAIフレームワークが構成されている。
原神にはオープンワールドであるがゆえの制約がある。移動にはナビゲーションメッシュが使われているが,リリース時点で70平方kmを超えるマップは,6GBものナビゲーションメッシュが必要になったという。とはいえ,このサイズ自体はとくに問題とはされていかった。モバイル端末でもいまや10GBくらいは扱える時代であり,さらに原神では経路探索をサーバー側で行うので,6GB程度ではまったく問題にならないようだ。
スライドで示されたナビゲーションメッシュの例では,多層にわたって3次元構造となったものが示されていたが,構造はかなり複雑だ。これで1平方kmくらいの範囲だという。
加えて,街の中には2m幅くらいの狭い通路があちこちにあり,ナビゲーションメッシュの精度も問われる。何度か実験を繰り返し,タイルサイズを128,ボクセルサイズを0.125mにするところに落ち着いたとのことだ。
上記のとおり,経路探索はサーバー側で行われ,現在位置と目的地を送れば,経路(もしくは経路がないこと)を返してくれるようになっている。
とはいえ,マップ内には動的な障害物も存在する。これに対応するために,接続されたプレイヤーごとに一定のメモリを確保して,それぞれの状況に対応できるようにしているとのことだった。プレイヤーが道をふさぐような岩を取り出した場合,サーバーは更新されたナビゲーションメッシュ用に追加のメモリを確保して,このプレイヤーに対応する。
このシステムは30人以上のNPCが移動する状態で60fpsで運用されるように設計されていたが,最適化前の段階ではAI処理に2〜3msを要していたという。同時に熱問題にも直面したということだったが,今回の講演ではとくに語られることはなかった。しかし熱が問題になる状況なので,単純にマルチスレッド化で解決するわけにもいかない(処理効率は上がるが熱は増える)。
そこでAIチームが導入したのがLoD(Level of Deteil)の概念だ。すでに紹介している「Death Stranding」のAI(関連記事)でもLoDが使われていたので,オープンワールドで多くのNPCを扱う場合には必須の技術なのかもしれない。
さて,原神では3段階のLoD AIが使われている。距離による2段階と戦闘中の1段階だ。さすがに戦闘中はフルで動くようだが,そうでない場合はプレイヤーの周囲でもAI処理は30fpsで行われる。遠い場合は5fpsでアニメーション処理が省略されるようになっている。
先ほど単純にはいかないと書いたが,それでもCPUの計算力を引き出すためにマルチスレッド化も行われている。ここではAIモジュールごとにメインスレッドから呼び出される際,ワーカースレッドを立ち上げていく方式が採用された。これでもAI処理はまだ重かったため,なんとか最適化して,フレームごとに2〜3msだったものを0.5msというところまで詰められたという。具体的にどこという話はなかったので,全体的にがんばったようだ。
まとめると,広大なオープンワールドでのAIを管理するために,新しいAIフレームワークを作り上げ,膨大な経路探索情報はサーバーでまとめて処理を行い,LoDでの負荷軽減と並行して処理の最適化を進めた結果,あのような規模でのAI処理が実現されているわけだ。人気ゲームを支える技術が紹介された興味深いセッションだった。
「原神」公式サイト
キーワード
Copyright(C)COGNOSPHERE. All Rights Reserved.
Copyright(C)COGNOSPHERE. All Rights Reserved.
Copyright(C)COGNOSPHERE. All Rights Reserved.
Copyright(C)COGNOSPHERE. All Rights Reserved.
Copyright(C)COGNOSPHERE. All Rights Reserved.