ゲーム開発者向けカンファレンス
「CEDEC 2023」では
「『タクティクスオウガ リボーン』のAI実装事例」と題した講演が行われ,シミュレーションRPGにおけるAIがどのように状況を判断しているのかが明かされた。同作では地形に高低差があったり,様々な能力を持つユニットたちが他のユニットを守るべき状況が発生したりと,判断すべき項目が多岐にわたる。
企画者が望む振る舞いをAIにさせる手法について,スクウェア・エニックス 第一開発事業本部 ディビジョン5 プログラマーの
長谷川 誠氏が語った。
スクウェア・エニックス 第一開発事業本部 ディビジョン5 プログラマーの長谷川 誠氏
|
ユニットが個性を発揮し,柔軟に動くためのAIとはどのようなものなのか
講演のテーマとなる
「タクティクスオウガ リボーン」(
PC /
PS5 /
PS4 /
Nintendo Switch 以下,リボーン)は2022年に発売されたシミュレーションRPG。1995年の
「タクティクスオウガ」を原作に,同作を2010年に再構築した
「タクティクスオウガ 運命の輪」(以下,運命の輪)を経て,AIの一新やフルボイス化など様々な新要素を取り入れた作品だ。
本講演で語られたのは,本作のAIがどのようにして状況を判断しているか。リボーンのAIは「距離マップ」や「評価値」などのシステムを使い,
盤面の状況を数値として判断することにより,合理的な行動を取る(メタAIは使われておらず,1ターンの行動を決める)。
“盤面の状況”と一口にいっても,その内容は複雑である。
ボードゲームのような盤面は1つ1つのマスが
「パネル」として表現されており,地形の高低差がある上,そこには多彩な能力を持つ敵味方が入り乱れ,中には護衛の必要がある者も登場する。人間が見ても頭を抱えそうな状況ではあるが,AIが判断できるようにするには,数値の動きとして落とし込まなければならない。これをどのように実現したか,その工夫が解説された。
リボーンのAIは
「ガンビット(ルールベースAI)」「シミュレーションベースAI」「アクションスキル決定(ルールベースAI)」「評価パラメータ」から構成されている。いずれのAIについても,望ましい(ゲーム的に有利になる)行動には高い点数,そうでない行動には低い点数が付くようになっている。最終的には高い点数の行動が採択されるので,リボーンにおいて有利な行動に高い点数が付くように工夫されているわけだ。言い換えれば,移動できるパネル全てと,そこで取りうる行動の全てについて総当たり作戦を行い,AIはもっとも有利な行動を取るのである。
●ガンビット(ルールベースAI)
ルールベースAIをかいつまんでいえば,人間が登録した「もし〜なら」という条件に応じて定められた動作を行うというもの。本作における名前の元ネタになったと思われる「FF12」の「ガンビット」を思い浮かべれば分かりやすいだろう。本作のガンビットは「特定のネームドユニットたちがマップに存在したら,お互いしか狙わない」「捕まっていたユニットは,逃げること以外考えない」という特徴的な振る舞いをさせる。
●シミュレーションベースAI
シミュレーションベースAIは,そのユニットが使えるコマンドの候補を持っている。移動可能なパネル全ての「評価値」を計算。また,そこで取りうる行動全てについての評価値も算出する。つまり,全てのパネルで全ての行動を行った際のシミュレーションを行うのだ。
●アクションスキル決定(ルールベースAI)
ユニットが「アクションスキル」を使うかどうかを,ルールベースAIで判定する。
●評価パラメータ
「そのユニットにどんな行動を重視させたいか」を企画者が決めたもので,それぞれの行動が「評価係数」の違いとして表現される。
本講演では,おもにシミュレーションベースAIの実装とその働きについて解説が行われた。シミュレーションベースAIは,移動の評価値と,行動の評価値を算出する。
まずは移動の評価の解説だ。これは,ユニットが移動できる範囲について,
「距離の評価」と
「位置の評価」を行うというもの。距離の評価は,敵や味方,ドロップアイテムや前線といった目標に対して適切な距離に近づければ高くなる。位置の評価は,護衛すべきユニットや瀕死のリーダーなど特定位置に意味がある場合,自分が移動する場所が
「どのくらい良いか」を評価する。
距離の評価をするためには,
「距離マップ」が作られる。自分のユニットが,目標に対してどう移動すれば効率がいいかを求めるためのものだ。まずは目標の位置を起点とし,それぞれのパネルへ移動するのに必要な歩数を幅優先探索アルゴリズムで求めていく。この時,移動できない地形は迂回しての歩数をカウントする。
こうすると,それぞれのパネルに対し,目標位置は0,遠いほど高い評価値が与えられることになる。次に,自分のユニットが移動できる範囲のパネル全てについて評価を行う。自分のユニットがいるパネルに与えられた評価値から,移動先のパネルそれぞれに与えられた評価値を引くと
「目標に対してどれだけ近づけたか」の評価値が,移動範囲内のパネル全てに算出される。これは目標に近いほど大きな数値となる。
この辺りは文章を読むより図を見る方が分かりやすいだろう。自分のユニットが動く先を評価するのに,なぜ目標の位置を基準にしているのか。わざわざ2回の計算を行っていることについては理由がある。マップには敵味方やアイテムが点在しており,そこに向けてユニットを移動させたいが,自分のユニットを始点にすると,どの方向へ移動しても同じ評価値が出てしまうからだという(厳密には移動範囲が無限であれば差は出てくるが,本作のユニットはそうではない)。
ここで,シリーズを知っている人なら「地形の高低差はどうなっているのか」と疑問に思うだろう。高低差についてはチェック方向を逆にした幅優先探索が行われ,それぞれのパネルに評価が与えられる。
チェック方向を逆にするのは,ユニットが登れる高さと降りられる高さ(STEP)が異なっているため。チェック方向を逆にしないと,本来なら登れない高さのルートでも「到達できる」と判断した評価値が出てしまうのだ。
また,
近接武器と遠距離武器及び魔法では算出方法が一部異なっている。近接武器の場合,相手にピッタリ隣接するのが最も望ましいため,敵ユニットの位置を始点(評価値0)として計算が行われる。
一方,遠距離武器や魔法だと,相手に隣接する必要はない。相手との間に移動不可能な地形があったとしても,射程内にさえ収まっていればいい。
しかし,ここで近接武器と同じように算出すると,敵がいる位置に近づくのが最も高い評価点が出るため,射程内のギリギリに捉えるのではなく,わざわざ地形に沿って移動してしまう。例えば,自分と敵を通行不可能な崖が隔てていると,距離的には崖の向こうから狙い撃てるにも関わらず,AIはこれを無視して敵の位置へ通じるルートへ移動してしまうというわけだ。
これを防ぐため,敵ユニットの位置から射程距離分だけ外側に行った位置を0として,距離マップが作成されている。結果として,遠距離武器や魔法は移動不可能な地形を上手く利用して相手を狙い撃つような挙動を見せる。長谷川氏いわく,「距離マップは,これをやりたいがために用意したようなもの」だそうで,AI制作についてのこだわりが見えてくる。
そして,敵や味方の位置など,特定位置がどれだけ重要であるかを示す
「位置評価マップ」も作成される。例えば,誰かを守らなければならない場合は,対象の周囲のパネルに高い評価点を与える
「保護度マップ」や
「瀕死リーダー度マップ」,そして防御力の低いユニットが単独でいる際に周囲を高評価することで,仲間を庇うような振る舞いを実現する
「護衛度マップ」が作られる。
また,そのパネルに入るとどれ位のダメージを食らうかを示す
「近接物理被ダメージ危険度マップ」「遠距離被ダメージ危険度マップ」も作られ,敵が移動できる範囲や近接攻撃できる場所には低い評価値を与えることにより,ユニットは危険な場所を避けるようになる。
ここまでの手順を経て,マップ上に存在するパネルについて,
「敵に近づけた歩数」「前線へ近づけた歩数」「保護度」など,様々な視点に基づいた移動評価値が算出された。最後にそれぞれの数値に対し,評価パラメータで定められた係数を掛けていき,これを合計すると
「そのパネルへ移動した際の総合的な評価値」が出てくる。
評価パラメータは,その
ユニットが何を重視しているかを表現するもの。例えば仲間を守らせたいユニットには
「護衛評価係数」が高く設定されている。先の保護度マップにおける評価値に護衛評価係数を掛けると仲間を守ることが高評価となり,AIは企画者が意図した通りの振る舞いをするのだ。
同様の考え方で,ユニットが取りうる行動のそれぞれについても評価値が算出される。こちらは位置が絡まないため,考え方としてはシンプルで,
「アクション評価」と
「コスト評価」が行われる。
アクション評価は,攻撃や魔法といった行動を数値で評価するもの。例えば,あるパネルから敵を攻撃する際に「17ダメージを与え,混乱のデバフを付与するが,敵からのカウンターで75ダメージを食らう」という結果が出るとする。それぞれの結果に対し
「HPへダメージを与えた際の評価係数」「デバフを与えた際の評価係数」「カウンターを受けた際の評価係数」が掛けられ,アクション評価値が算出される。
評価係数はあくまで人間が決めるものなので,数値を変えることで特徴的な振る舞いをさせられる。カウンターの評価係数をゼロにすれば,カウンターでどれだけダメージを食らおうが遮二無二攻め続けるユニットになるのだ。
そしてコスト評価では,その行動を行った後に次の行動までにかかる時間(WT)に係数を掛け,MPやアイテム消費を考え合わせ,コスト評価値を算出する。
先に算出しておいたそれぞれのパネルにおける評価値とアクション評価値を足し,コスト評価値を引く。すると,そのパネルにおいて,ある行動を取った場合の評価値が求められる。こうして,全てのパネルと全ての行動について評価値を算出し,最適なものが選択されるわけだ。
今回の講演は,リボーンのAIの実装について具体的なところを説明するという内容だった。専門的な知識がなくても,シミュレーションRPGという頭を使うゲームの思考について,人間がフィーリングや好みでやってしまうところを数式として実装していく工夫の面白さは味わえたはずだ。リボーンを遊ぶ際,本講演の内容を踏まえつつAIの挙動を見るのも楽しいだろう。