この連載が書籍になりました!『エンジニアのためのAI入門

AI最前線の現場から【スクウェア・エニックス】ゲーム・キャラクターはどのように意志決定するのか

2016年8月3日(水)
三宅 陽一郎白神 陽嗣下川 和也

はじめに

第1回では「キャラクターAI」(キャラクターの頭脳)の全体像を解説し、その中には5つのモジュール(部品)である「認識」「意思決定」「運動生成」「身体」「記憶」があることを見てきました。今回はその続きとして、これらのモジュールを活用して「キャラクターがどのように意思決定しているのか」について見て行きます。

FINAL FANTASY XVの仲間、敵、すべてのキャラクター人工知能で動いています

図1:FINAL FANTASY XVの仲間、敵、すべてのキャラクター人工知能で動いています

「認識」モジュールのつくり方

世界から知能に情報を取り入れる部分である「センサー」(感覚)は、視覚を「レイキャスト」や「視野領域」によって作ります。レイキャストでは、キャラクターから対象に向かってレイ(直線)を引き、対象との間に障害物があってレイと障害物が交差すると「見えない」と判断します。例えば、キャラクターの頭部からモンスターの中心に直線を引いて岩にぶつかるのであれば、キャラクターからモンスターは「見えない」と判断するのです。もしぶつかるものがなければ、キャラクターからモンスターは「見えている」ことになります。

しかし、ゲーム内にたくさんのキャラクターが現れる場合には、すべてのキャラクターからレイキャストを行うことはできません。そこで、キャラクターを中心として前方に扇方に展開する視野領域を設定します。この視野領域に他のキャラクターが入っているか、いないかを判定します。この中に入っていればレイキャストの対象となります。「FINAL FANTASY XV」のモンスターたちも扇方の視野領域を持ち、前方には特に感度の高い視野領域を展開します。

キャラクター(中央)の視覚

図2:キャラクター(中央)の視覚

感覚は客観的な情報を取得します。例えば、前述した視覚はとても客観的な仕組みです。認識は、そこからキャラクター本人にとってその情報が持つ主体的な意味を構成します。例えば、認識モジュールは視覚で把握した周囲のキャラクターに脅威度(敵の危険度)を決定して順序付けます。さらに、そこから「どの敵を一番先に攻撃するべきか」を決定します。このシステムを「ターゲッティング・システム(敵選択システム)」と言います。

「意思決定」モジュールのつくり方

エージェント・アーキテクチャで中心となるのが意思決定モジュールです。これは山の頂のように、環境世界から認識モジュールが形成した情報を自らの行動へ転換するターニング・ポイントとなります。その後、運動生成モジュールが意思決定に従って自分の具体的な運動を形成します。

ゲームAIでは意思決定の作り方に8通りがあります。「ルール・ベース」「ステート・ベース」「ビヘイビア・ベース」「ゴール・ベース」「タスク・ベース」「ユーティリティ・ベース」「シミュレーション・ベース」「ケース・ベース」です。この「~ベース」は「~を基本単位として意思決定の思考を組み立てる」ことを意味します。ルール・ベースであればルールを、ゴール・ベースであればゴールを単位として意思決定を組み上げるのです。

この説明では少し抽象的過ぎるので、具体的な例を用いて説明しましょう。FINAL FANTASY XV ではステート・ベースとビヘイビア・ベースの2つをハイブリッドした形で意思決定システムが構築されています。

ステート・ベースの「ステート・マシン」

ステート・ベースはキャラクターを「状態(ステート)」間の「遷移」によって制御する方法です。ここで言う状態とは、「キャラクターの行動状態」という意味だと考えてください。「歩く」「走る」などです。また遷移は状態を変更することで、それぞれの状態から変更する条件が設定されます。この方法は90年代後半から2010年前後まで、ゲーム産業では最もよく使われて来た技術です。

それぞれの状態には「キャラクターにどのようなアクションをさせるか」が定義されており、状況が変わる(遷移条件が満たされる)と現在の状態から遷移条件を満たす矢印で結ばれた状態に遷移します。例えば、敵を見つけていないうちは「警戒」状態にいますが、敵を発見すると「追跡」状態に移ります。このような状態の構造を「ステート・マシン」と言います。ただし、近年の高度化したゲームでは単純なステート・マシンではなく、ステートがさらにステート・マシンを含む「階層型ステート・マシン」(HFSM, Hierarchical Finite State Machine)を用いるのが標準となっています。

例えば、図3の階層型ステート・マシンでは警戒状態にはさらに2つの状態「巡回」と「出口をかためる」があり、追跡状態には5つの状態からなるステート・マシンが含まれています。

階層型ステート・マシン

図3:階層型ステート・マシン

このようなステート・マシンは、GUIツール上で各状態をカスタマイズしながら作成して行きます(図4)。そして完成したステート・マシンをゲームデータに変換し、ゲーム内で読み込ませることでキャラクターの頭脳として機能します。ところが、このステート・マシンは状態の数が増えると膨大な数の状態遷移を定義しなければならず、蜘蛛の巣のように複雑さを増してしまいます。そこで、「ビヘイビア・ツリー(Behavior Tree)」が登場します。

スクウェア・エニックス のAI グラフエディター内のステート・マシン

図4:スクウェア・エニックス のAI グラフエディター内のステート・マシン

ビヘイビア・ベースの「 ビヘイビア・ツリー」

ビヘイビア・ツリーは「Halo2」(Bungie, 2004)で新しく開発された技術で、現在ではゲーム産業で最も使用されている手法です。現在のゲームのキャラクターの人工知能の約7割程度がビヘイビア・ツリーで作られていると推測されます。ステート・マシンが循環的なグラフを構成するのに対し、ビヘイビア・ツリーは文字通り「非循環のツリー状」のグラフ、つまり一方向のツリーグラフを構成します(図5)。そして、階層的な層を形成しながら末端に向かいます。なお、ここで言う層とは「同じ階層のノードが集まったグループ」です(図6)。

以下はビヘイビア・ツリーのやや詳細な説明となりますので、次の章まで飛ばしてお読みいただいても構いません。

ビヘイビア・ツリー概念図

図5:ビヘイビア・ツリー概念図

スクウェア・エニックスのAIグラフエディター内のビヘイビア・ツリー

図6:スクウェア・エニックスのAIグラフエディター内のビヘイビア・ツリー

各層には「シークエンス」「プライオリティ」「ランダム」などの「選択ルール」を設定し、この選択ルールがその層の中で実行するノードを決定します。ビヘイビア・ツリーはrootから順番に実行されますが、まず実行前に各ノードに設定されている「実行可能条件」をチェックします。条件を満たしていれば「アクティブ・ノード」、満たしていなければ「非アクティブ・ノード」になります。例えば、マジック・ポイントがなければ「魔法」ノードは非アクティブです。

シークエンスはアクティブ・ノードのみを対象にその層のノードを順番に実行し、プライオリティはアクティブ・ノード内で最も優先度の高いノードを実行します。ランダムはその層のうち、アクティブ・ノードのいずれか1つをランダムに実行します。実行がすべて終了するとrootトに戻り、もう一度判定して実行します。

図5のビヘイビア・ツリーを実行した場合の動きを見てみましょう(説明のためにすべてのノードがアクティブ・ノードとします)。roooから始まり第1層に進むと、「バトル」「撤退」「休憩」がプライオリティ(優先度)順に書かれています(ビヘイビア・ツリーでは「優先度順に上からノードを書く」という約束がある)。第1層ではすべてが実行可能なので「バトル」を選択して、バトルに紐付いた第2層に進みます。

第2層はシークエンスが選択ルールなので、「攻撃」して「隠れる」という順番で実行されます。まず攻撃が実行されますが、攻撃はさらに第3層を持っています。第3層もシークエンスが選択ルールなので「弓を放つ」「攻撃魔法」「剣を振る」という順番で実行されます。しかし、攻撃魔法はさらに第4層を持っています。第4層ではランダムが選択ルールなので「氷系」魔法か「風系」魔法がランダムに選ばれます。これが終わると第3層の「剣を振る」に戻り、「攻撃」ノードが終了します。

「攻撃」ノードが終了すると「隠れる」ノードに進み、「森に潜む」か「建物に隠れる」をランダムに選びます。最終的に、動作としては「弓を放つ」「氷系魔法」「剣を振る」「建物に隠れる」という動作を行うことになります。

ステート・マシンとビヘイビア・ツリーを融合する「AI グラフ」

ここまで解説してきたように、ステート・マシンは1つ1つの行動を厳密に実行する堅実なシステムであり、ビヘイビア・ツリーは流れるような一連の動作を指定する流動性があります。FINAL FANTASY XVのキャラクターの人工知能では、この両方をお互いのノードで階層的な入れ子構造として使用できるようになっています。

例えば、図7では第1階層がステート・マシンで、そのノード(ステート)の1つにビヘイビア・ツリーが入っています。さらに、そのビヘイビア・ツリーのノードの1つがステート・マシンという形になっています。実行する時は第1階層のステート・マシンが最も支配的であり、ステート・マシンの原理に従って実行されます。その中でビヘイビア・ツリーを含むノードが実行される時は第2階層のビヘイビア・ツリーが実行され、さらに第2階層でステート・マシンを含むノードが実行される時は第3階層のステート・マシンが実行されます。

図12:AIグラフの階層構造

図7:AIグラフの階層構造

スクウェア・エニックスではこれを「AI グラフ」と呼び、仲間やモンスターから街の住人、その他すべてのキャラクターの知能を作成する基本としています。そして、この「AIグラフ」を作成する社内製ツールを「AIグラフエディター」と呼んでいます(図8)。

AIグラフエディター

図8:AIグラフエディター

キャラクターAIの作成では、AIグラフエディターのGUIツールエディターをでステート・マシンとビヘイビア・ツリーを組み合わせてどんどんと深く作って行きます。ここではあるモンスターのAIグラフを載せておきますが(図9)、かなり複雑な階層グラフになっていることを理解できると思います。それぞれの末端のノードは実際のキャラクターの行動を指示しています。

AIグラフエディター上で作られたあるモンスターのAIグラフ

図9:AIグラフエディター上で作られたあるモンスターのAIグラフ

第2回まとめ

さて、第2回では、以下のようなことを見てきました。

  • 意思決定とは「感覚」から集めた情報をもとに自分の行動を決めること 
  • 行動を決める方法はいくつかの様式があり「~ベース」と呼ばれる
  • その中の「ステート・マシン」「ビヘイビア・ツリー」はノードベースのグラフで表現できる
  • 「FINAL FANTASY XV」は「ステート・マシン」「ビヘイビア・ツリー」を組み合わせた「AIグラフ」という仕組みを開発し、「AIグラフエディター」を用いてグラフを作成している
  • 作成されたグラフデータはゲームのデータとして変化され、ゲーム内でキャラクターの「意思決定」モジュールで使用される

しかし、AI グラフ自体は行動を意思決定するだけで、実際の身体運動の問題を考えているわけではありません。そこで第3回では、決定された行動から実際に身体の運動を生成する「運動生成」モジュールについて解説して行きます。お楽しみに!

【第2回参考文献】
「FFXV-EPISODE DUSCAE-」のAI&アニメはどう作られたか?
目指せ高品質化と効率化! 双方を両立させる制作過程を公開

http://game.watch.impress.co.jp/docs/news/718117.html

株式会社スクウェア・エニックス

テクノロジー推進部 リードAIリサーチャー。京都大学卒。「FINAL FANTASY XV」リードAIアーキテクト。2004年よりデジタルゲームにおける人工知能の開発・研究に従事。国際ゲーム開発者協会日本ゲームAI専門部会チェア、日本デジタルゲーム学会理事、芸術科学会理事、人工知能学会編集委員、CEDEC委員会委員。

株式会社スクウェア・エニックス

第2ビジネス・ディビジョン プログラマー。交通系システムエンジニアを経て、2005年スクウェア・エニックス入社。聖剣伝説 FRIENDS of MANA(Mobile)、キングダムハーツ コーデッド(Mobile)、FINAL FANTASY零式(PSP)の開発に携わる。現在は、FINAL FANTASY XVチームにおいて、「AIGraphEditor」の組み込みやAIで駆動するキャラクターたちの開発に従事している。

第2ビジネス・ディビジョン プログラマー。2013年株式会社スクウェア・エニックス入社。Luminous Studioのツール開発を経て、現在はFINAL FANTASY XVチームにてキャラクターAIの開発に従事。主に仲間キャラクターのバトルや、2015年のCEDEC講演「FINAL FANTASY XV -EPISODE DUSCAE- におけるキャラクターAIの意思決定システム」で紹介された「AIGraphEditor」の開発を担当。

連載バックナンバー

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています