『LEFT ALIVE』で採用されたHTNを用いたゲームAIとは?DeNA主催のGame Developers Meetingレポ | GameBusiness.jp

『LEFT ALIVE』で採用されたHTNを用いたゲームAIとは?DeNA主催のGame Developers Meetingレポ

『LEFT ALIVE』で敵の制御に使用されているAIはいかにして作られ、どのように同作を支えているのでしょうか?スクウェア・エニックスのプログラマー・長谷川誠氏が登壇した「Game Developers Meeting Vol.37」のレポートをお届けします。

ゲーム開発 人工知能(AI)
『LEFT ALIVE』で採用されたHTNを用いたゲームAIとは?DeNA主催のGame Developers Meetingレポ
  • 『LEFT ALIVE』で採用されたHTNを用いたゲームAIとは?DeNA主催のGame Developers Meetingレポ
  • 『LEFT ALIVE』で採用されたHTNを用いたゲームAIとは?DeNA主催のGame Developers Meetingレポ
  • 『LEFT ALIVE』で採用されたHTNを用いたゲームAIとは?DeNA主催のGame Developers Meetingレポ
  • 『LEFT ALIVE』で採用されたHTNを用いたゲームAIとは?DeNA主催のGame Developers Meetingレポ
  • 『LEFT ALIVE』で採用されたHTNを用いたゲームAIとは?DeNA主催のGame Developers Meetingレポ
  • 『LEFT ALIVE』で採用されたHTNを用いたゲームAIとは?DeNA主催のGame Developers Meetingレポ
  • 『LEFT ALIVE』で採用されたHTNを用いたゲームAIとは?DeNA主催のGame Developers Meetingレポ
  • 『LEFT ALIVE』で採用されたHTNを用いたゲームAIとは?DeNA主催のGame Developers Meetingレポ

2019年10月25日、東京・渋谷ヒカリエのDeNA Seminar Roomで「Game Developers Meeting Vol.37 ゲームAIにおける意思決定と地形表現 ~『LEFT ALIVE』を事例に紹介~」が行われました。「Game Developers Meeting」は、ディー・エヌ・エーが主催するゲームクリエイター向け勉強会です。毎回様々なテーマを掲げ、ゲストを招いて最新の技術や情報をシェアし、参加者同士の交流もできる場として、毎月開催されています。

HTNを最上位に据えたゲームAIのメリットとデメリット


今回の登壇者は、スクウェア・エニックス第一開発事業本部 ディビジョン5 プログラマーの長谷川誠氏。同社では、毎週社内でAIに関するセミナーを行っており、長谷川氏がCEDEC 2019で行ったセッションや本講演は、そうしたセミナーを元に外部で発表しても問題のない内容にしたものとのことです。

まずは「HTN(Hierarchical Task Network、階層型タスクネットワーク)」を採用した理由に関して紹介されました。『LEFT ALIVE』はシリコンスタジオによるOROCHIエンジンで制作されていますが、同エンジンのAI機能では、本作が求める企画内容の複雑さに耐えられそうになく、AIアーキテクチャを自作する必要があると判断したのがスタート地点であったとのことです。


長谷川氏が考えた候補は「Behavior Tree」、「階層型ゴール指向」、「HTN」、「GOAP」の4つ。それぞれを比較検討したうえで、Behavior Treeは手堅い選択肢でしたが、ノード数が爆発的に増えてしまう恐れがあること、GOAPは反対にノード数を抑えられそうなものの、細かい対応がしづらそうとの理由から、両者の中庸にある階層型ゴール指向とHTNを採用。敵を攻撃する、罠を解除するというような大まかなタスクをHTNで処理し、指定された位置へ移動する、N秒間トリガーを引くなどの細かい行動を階層型ゴール指向で処理するという棲み分けが行われました。

続いて、HTNについての解説が行われました。長谷川氏はHTNを「大まかに言うと、ネットワーク上にあるタスクを、目的に沿ったリストにできる」とし、構成要素をワールドステート、各種タスクで構成されるドメイン、プラナーに大別。それぞれの要素についての解説を行いました。

LEFT ALIVE』へは、「Game AI Pro」の12章に書かれている「Exploring HTN Planners through Example」を参考に、半順序タスク(同時進行できるタスク)は扱わないなどのシンプルな実装をしたとのこと。そして、それを元に、『LEFT ALIVE』用にさまざまな拡張を施しました。具体例としては、プリミティブタスクに複数のオペレータを登録し、同時に実行させることで半順序タスクの代わりとしたこと、プリミティブタスクに成功条件を設定することで、細部が異なるのみのオペレータを共通の実装にできたことなどが挙げられました。




本セミナーではそうした数々の実装成功例に加え、共有するべき教訓として失敗例、うまくいかなかった事例も紹介されました。一つ目として挙げられたのは、強力なサポートツールの不在です。AIの挙動を確認する際に、AIがどういう理由でそのプランを採用したか(どういう理由で他のメソッドが採用されなかったか)を追いづらいため、その分ブラッシュアップやデバッグの精度に影響を及ぼします。長谷川氏は「Behavior Tree(用のツール)以上のサポートができないと、現状では厳しい」と語りました。


第2に、Unreal Engineのおかげで広く普及しているBehavior Treeと比べると、ドメインを書ける人材が現状ではまだ少ないことが挙げられました。『LEFT ALIVE』の開発現場では結局プログラマーしか書くことができず、人を追加しようにもHTNならではのハードルの高さからそれもうまくいかなかったとのことです。

そして、HTNの実装をシンプルにしすぎたことも反省点として挙げられました。意思決定の最上位に置いたHTNをシンプルにしすぎてしまったがゆえに、本作の企画意図を実現するための複雑さはすべてドメインで吸収せねばならず、その結果プリミティブタスクの数が急増。結果として、ノード数が増えるのを恐れてBehavior Treeの使用を避けたはずが、逆に処理負荷を高めてしまいました。


長谷川氏は最後に「HTNはサポートツールなどの環境面の整備、ドメインを書ける人材を確保するための教育コストなど、実装するにあたってはまだ課題があると考えています。しかし、一貫性のあるプランを組めるため、要求されるゲームデザインと噛み合えば力強いツールでもあります。個人的には『Overcooked』のようなタイトルはHTNに向いているのではないかと思います」とまとめました。


地形表現と絡めたナビゲーションAIの活用事例


ここからは話題が変わり、長谷川氏がCEDEC 2019で行ったセッション「『LEFT ALIVE』における地形表現とナビゲーションAI」の補足となる講義が行われました。

テーマ1:AIに、複数階からなる建造物の「階」をいかに認識させるか

制作時に「プレイヤーが建造物の3階にいるとAIが認識したら、その階までは警戒させるより走って移動させてスピーディーな展開にしたい」という要望を受けた長谷川氏。それに対し「「階」とは「はしご」「低カバー乗り越え」「階段(斜面)」「窓」で閉じられた領域である」と定義することで解決しました。AIに具体的な階数を認識・把握させるのではなく、「敵(プレイヤーキャラ)が自分と同じ領域にいるかいないか」で判断させたとのことです。

プレイヤーの居場所を認識後、同じ領域(≒階数)に着くまではスピーディーに移動します

テーマ2:プレイヤーとの戦闘が始まったときに敵をバラけさせるには

多くのAI(敵)がプレイヤーを認識し、戦闘になると攻撃できる位置にポジショニングできない敵が手持ち無沙汰になってしまう問題が発生。これには、「ある地点に向けて攻撃できる地点」を全地形に設定し、近くの攻撃地点が埋まっている場合は空いている他の地点に移動するよう設定することで解決しました。

ウェイポイントではなく、上位層によるグラフに4つの上位層を設定することで負荷を軽減。
プレイヤーに射撃が当たらない箇所も含まれますが「高い精度が必要ないときならこれもアリ」と長谷川氏

テーマ3:敵の捜索範囲をプレイヤーの位置へ徐々に近づけさせたい

プレイヤーに少しずつプレッシャーを与えつつ、どう対処するか思考する時間も与えたいとの要望もありました。これに対しては、「プレイヤーに攻撃できる射撃領域の中で、一番遠い箇所から順番に捜索する」という設定で解決を図りました。

テーマ4:プレイヤーを待ち伏せさせたい

「包囲されているとプレイヤーに感じさせたい」、「手薄な箇所を作って、プレイヤーを特定の場所に誘導させたい」という企画意図からの要望。屋内から屋外へと通じる場所の屋外側にあるウェイポイントを参照させ、AIを屋外へ面する場所へ向かわせる実装がなされました。

なお、長谷川氏によれば、上記のテーマ2、3、4に対する解決策はソフトに実装されているもののさまざまな事情から未使用に終わっており、ゲーム中では確認できないということです。

ゲームにおけるAI開発の今後を見据えたパネルディスカッション


その後は、ディー・エヌ・エーの佐藤勝彦氏がパネラーを務め「ゲームAIアーキテクチャの過去から未来へ」というテーマのディスカッションが行われました。

最初の議題は「フロム・ソフトウェア在籍時代から振り返ってのアーキテクチャの変化や変遷」。『アーマード・コア ラストレイヴン』から『ダークソウルIII』までフロム・ソフトウェアに在籍していた長谷川氏は「『アーマード・コア ヴァーディクトデイ』では、UNAC(ユーナック。Unmanned Armored Coreの略。プレイヤーがAC(機体)のAIを設定し、無人ACを作って戦わせることができる)実装に際しては、その時の開発が使っていたツールや仕組みをほぼそのまま使っています。」と当時を振り返り、同社にかぎらない今後の傾向として「まだ先の話になるかもしれませんが、これからは部分的に機械学習が取り入れられることもあるだろうと思っています」と予測しました。

かつて長谷川氏と共にフロム・ソフトウェアに在籍していた経歴を持つディー・エヌ・エーの佐藤氏(写真左)

次の議題は「AIを開発するにあたって、企画にうまく使ってもらうためのコツ」。長谷川氏は「こちらからきちんと企画側に寄っていくこと」と回答しました。「プログラマーの中には「仕様書に書かれていないことはやりません」というタイプの人もいますが、そういうスタンスでは(うまく使ってもらうことは)難しいというのは前々から認識しています。むしろ、自分もゲームデザインに関わりたいくらいの勢いで変化に向き合える人であることが望ましいのではと思います。企画には優しくしましょう(笑)」とのアドバイスも。

続けて「ゲーム制作時は、企画も状況も変化しうるもの。そんな中で、企画の意図を表現するAIはどういうものになるか」と水を向ける佐藤氏。長谷川氏は「要求される意図を、いかに少ない工数で実現させられるかが大切です。100の状態を要求されても、10のノードで実現できるというように、小さく柔軟に作れる仕組みを整えておかないと、オープンワールドのような規模の大きいゲームを作りたくなったときに肥大化しすぎてしまいます。ですが、これにも問題があるにはあって、100の状態を10のノードで実現できる状態は、はたして適正にデバッグできるのかという課題は残ります。1人よがりにならず、QAを巻き込んで連携するのが大切です」と語りました。

長谷川氏は最後に「Unreal Engineをダウンロードすれば、専門学校の学生さんでもすぐにBehavior Treeを使えます。多くの人が手軽にゲームAIアーキテクチャを使えるようになるのはとてもいいことで、(技術の底上げがされることで)よりいい作品が提供されるようになっていけばいいなと思います」と語り、「これからのエンジニアは、作ろうとしているゲームに数々のアーキテクチャをどう組み込むかという「設計力」が問われるのようになるのではないかと思います」と、今後のエンジニアに必要とされる資質について語り、ディスカッションをまとめました。
《蚩尤》

関連ニュース

特集

人気ニュースランキングや特集をお届け…メルマガ会員はこちら