エルデンリングのロー・テック AI アーキテクチャ
エルデンリングのロー・テック AI アーキテクチャ
エルデンリングは、複雑な計画アルゴリズムによってではなく、比較的シンプルな「ロー・テック」AI アーキテクチャによって、過酷で多様な NPC エンカウンターを実現しています。このシステムは主に Havok Script(ゲーム向け Lua 実装)で実装されており、従来の有限状態機械(FSM)や複雑なビヘイビアツリー(BT)ではなく、プッシュダウンオートマトン(PDA)に依存しています。
目標ベースのプッシュダウンオートマトン
エルデンリングの AI は Goal(目標) という概念を中心に構成されています。Goal は AI が占有できるユニークな状態です。標準的な有限状態機械がある状態から別の状態へ遷移するのに対し、FromSoftware は 目標のスタック を使用し、システムをプッシュダウンオートマトンに変換しています。
目標スタックの動作
各フレームで、Actor はスタックの最上位にある Goal を更新します。実行フローは以下の規則に従います。
- サブゴール: Goal は新しい「サブゴール」をスタックにプッシュできます。最上位のサブゴールが次のフレームで実行されます。
- 戻り値: Goal の update 関数は
Continue、Success、Failureのいずれかを返します。 - スタックのポップ:
SuccessまたはFailureが返された場合、現在の Goal がスタックからポップされます。 - アンワインド:
Failureの結果はスタックを巻き戻し、実行されていないすべてのサブゴールをポップして親 Goal に到達するまで続きます。
この構造により、AI は一連のアクション(コンボ攻撃など)を試み、途中で失敗した場合は上位の意思決定状態に優雅に戻ることができます。
Activate コールバックによる意思決定
コアとなる AI ロジックは activate コールバックに収められており、Goal が初めて更新されたとき、またはサブゴールを使い切って実行を再開するときにトリガーされます。
重み付きランダム選択
次のアクションを決定する際、AI は通常、重み付きランダム選択プロセスを使用します。activate 関数は現在のコンテキスト(プレイヤーまでの距離や Actor の現在の体力など)を評価し、可能なアクションのリストに重みを割り当てます。
たとえば、ターゲットが遠くにいる場合は「Approach Target」Goal の重みが上がり、近くにいる場合は「Heavy Attack」の重みが上がります。これらの重みはクールダウンによってさらに調整され、同じ動作の連続使用を防ぎます。
割り込みによるリアクティブな振る舞い
NPC がプレイヤーの行動に即座に反応できるよう、システムは Interrupt(割り込み) メカニズムを採用しています。割り込みは現在実行中の Goal から親へと再帰的に伝搬し、割り込みが「消費」される(コールバックが true を返す)まで続きます。
これにより、ベルベアリングハンターが呪文やアイテム使用を検知して即座に現在の行動を中止し、攻撃に転じるといった「邪悪」な振る舞いが可能になります。割り込みは動的な空間監視領域によってもトリガーされ、ボスがプレイヤーが背後や下に回った瞬間に即座に反応できるようになります。
技術的実装とデータアクセス
アニメーション駆動の実行
AI の実際の出力の大半はアニメーション駆動です。Goal システムはエンジンに特定のアニメーションを再生させ、アニメーションイベント自体がヒットボックスのタイミング、弾丸生成、特殊効果のトリガーを処理します。
Actor データとメモリ
近代的な AI で一般的な複雑な「ブラックボード」システムを使用する代わりに、エルデンリングは各 Actor に対してシンプルな float 配列を使用します。Goal は任意のインデックスに読み書きして状態データを保存・取得します。
ミドルウェア統合
FromSoftware は Havok ミドルウェアに大きく依存しています:
- Havok Script: AI ロジックに使用。
- Havok Animation Studio: アニメーション作成に使用。
- Havok Physics: 衝突と物理演算を処理。
- Havok Navigation: パスファインディングを処理。
他の AI アーキテクチャとの比較
FromSoftware のアプローチは、ビヘイビアツリー(BT)や Goal‑Oriented Action Planning(GOAP)といった「ハイテク」代替手段に比べていくつかの利点があります:
- パフォーマンス: PDA はスタックの最上位の単一 Goal を実行するだけなので、毎フレームルートから複雑なノードツリーを再評価するビヘイビアツリーよりも高速です。
- シンプルさ: 状態内で命令的コードを使用して制御フローを処理することで、FromSoftware は大規模な BT や FSM でよく見られる「ノード爆発」を回避しています。
- デザイナーのコントロール: このシステムはアクションのシーケンスを戦闘デザイナーやアニメーターの手にしっかりと委ね、GOAP や STRIPS のような探索アルゴリズムにシーケンスを委任しません。
"ここで使用されている構造(汎用スクリプト言語上に構築)を週末だけで実装すれば、エルデンリングのようなゲームを実装するのに十分基本的に足りるだろう。"
コミュニティの洞察
作者はシステムを「ロー・テック」と表現していますが、コミュニティの一部開発者は、個々の Goal の実装(たとえば成功する「攻撃」Goal に必要な物理演算や 3D 空間チェック)やレベルデザインに複雑さがあると主張しています。あるコメント者は、敵の知性が高く見えるのは AI ロジック自体よりも巧妙なレベルデザインとアグロ管理の結果であると指摘しています。