Elden Ring 的低技術 AI 架構
Elden Ring 的低技術 AI 架構
Elden Ring 實現其嚴厲且多樣化的 NPC 交戰,並非透過複雜的規劃演算法,而是透過一個相對簡單的「低技術」AI 架構。該系統主要是在 Havok Script(一種面向遊戲的 Lua 實作)中實作,並依賴於下推自動機(Pushdown Automaton, PDA)而非傳統的有限狀態機(Finite State Machine, FSM)或複雜的行為樹(Behavior Tree)。
以目標為核心的下推自動機
Elden Ring 的 AI 核心圍繞著「目標」(Goal)的概念,這是一個 AI 可以佔據的獨特狀態。與標準的有限狀態機(從一個狀態轉換到另一個狀態)不同,FromSoftware 使用的是「目標堆疊」(stack of goals),將系統轉變為一個下推自動機。
目標堆疊如何運作
在每一幀中,Actor 會更新堆疊頂端的 Goal。執行流程遵循以下規則:
- 子目標 (Sub-Goals): 一個 Goal 可以將新的「子目標」推入堆疊中。最頂端的 Sub-Goal 會在下一幀執行。
- 回傳值: 一個 Goal 的更新函數會回傳三種值之一:
Continue、Success或Failure。 - 彈出堆疊:
Success或Failure會導致當前的 Goal 從堆疊中被彈出。 - 展開 (Unwinding):
Failure的結果會導致堆疊展開,彈出所有未執行的 Sub-Goal,直到到達父級 Goal。
這種結構允許 AI 嘗試一系列的動作(例如連擊攻擊),並且如果該序列中的任何部分失敗,就能優雅地返回到較高層級的決策狀態。
透過 Activate Callback 進行決策
核心 AI 邏輯存在於 activate callback 中,當一個 Goal 首次被更新或當它耗盡其 Sub-Goals 並恢復執行時,就會觸發該 callback。
加權隨機選擇
為了決定下一個動作,AI 通常使用加權隨機選擇過程。activate 函數會評估當前的上下文(例如與玩家的距離以及 Actor 的當前生命值),並為一系列可能的動作分配權重。
例如,如果目標很遠,則「接近目標」目標的權重會增加;如果目標很近,則「重攻擊」的權重會增加。這些權重可以透過冷卻時間(cooldowns)進一步修改,以防止 AI 瘋狂重複使用同一個動作。
透過 Interrupts 進行反應式行為
為了確保 NPC 能立即對玩家的動作做出反應,系統採用了「中斷」(Interrupt)機制。中斷會從當前執行的 Goal 遞迴地向上傳遞至其父級,直到中斷被「消耗」(callback 回傳 true)。
這使得特定的「邪惡」行為成為可能,例如 Bell Bearing Hunter 會偵測到施法或使用道具,並立即中止當前動作以發動攻擊。中斷也可以由動態空間觀察區域觸發,允許 Boss 在玩家移動到其後方或下方時立即做出反應。
技術實作與數據存取
動畫驅動執行
AI 的大部分實際輸出都是由動畫驅動的。Goal 系統會告訴引擎播放特定的動畫,而動畫事件本身則處理碰撞判定(hitbox timings)、彈射物創建以及特殊效果觸發。
Actor 數據與記憶
與現代 AI 中常見的複雜「黑板」(blackboard)系統不同,Elden Ring 使用的是在每個 Actor 上的一組簡單的 float 陣列。Goals 會隨意地讀寫這些索引來存儲和檢索狀態數據。
Middleware 整合
FromSoftware heavily relies on Havok middleware:
- Havok Script: 用於 AI 邏輯。
- Havok Animation Studio: 用於製作動畫。
- Havok Physics: 處理碰撞與物理。
- Havok Navigation: 處理路徑尋找。
與其他 AI 架構的比較
FromSoftware 的方法與行為樹(BTs)或目標導向行動規劃(Goal-Oriented Action Planning, GOAP)等更「高技術」的替代方案相比,提供了幾項優限點:
性能: PDA 通常比行為樹更快,因為它從堆疊頂端執行單個 Goal,而不是每一幀都從根節點重新評估一個複雜的節點樹。
ulleted_list_item: 簡單性:透過在狀態內使用指令式代碼來處理控制流,FromSoftware 避免了大型 BTs 或 FSMs 常見的「節點爆炸」現象。
設計師控制力: 這種系統將動作序列牢牢掌握在戰鬥設計師與動畫師手中,而非將序列委託給搜尋演算法(如 GOAP 或 STRIPS)。
"A 'weekend' long implementation of the structure used here (on top of a generic scripting language) 是基本上足以實作一個像 Elden Ring 這樣的遊戲。"
社群洞察
雖然作者描述該系統為「低技術」,但社群中的一些開發者認為,複雜性在於個別目標的的實作(例如,成功執行「攻擊」目標所需的物理與 3D 空間檢查)以及關卡設計。一位評論者指出,敵人的「智能」感往往是巧妙的關卡設計與仇恨管理(aggro management)的結果,而非 AI 邏輯本身。