【遊戲AI】2 - 遊戲AI模型

在這本書中有大量的算法和技術。讀者很容易迷失其中,所以從全局着眼去了解各個部分是如何組合在一起的十分重要。

爲了有所幫助,我使用了一個統一的結構來討論遊戲中使用的AI。這不是唯一可選的模型,也不是唯一貼合本書中技術的模型。但是爲了使討論更清楚,我將展示每種技術如何適用於製作遊戲 AI 角色的通用結構。

下圖描述了這個通用模型。它將人工智能任務分成三個部分:運動、決策和策略。前兩個部分包含基於字符的算法,最後一個部分針對某一團隊或某一方進行操作。圍繞着這三個AI元素的是一套完整的附加基礎設施。

在這裏插入圖片描述

並不是所有的遊戲應用程序都需要全部三個組件的AI

一方面,棋盤遊戲,如象棋或冒險只需要戰略層面,遊戲中的 AI 玩家不需要自己做決定,也不需要擔心如何移動棋子或角色。

另一方面,在許多遊戲中根本沒有策略。平臺遊戲中的 NPC 角色,比如《超級馬里奧兄弟》(Super Mario Bros),是純粹的反應型遊戲,他們自己做出簡單的決定並根據這些決定行事。AI邏輯並沒有協同這些敵人角色來讓他們將阻撓玩家的任務做到最好。

一、運動

移動是指將決策轉化爲某種運動的算法。在《超級馬里奧·陽光》遊戲中,當一個沒有投射攻擊的敵人角色需要攻擊玩家時,它首先會直接面向玩家。當它足夠近的時候,它就能發動攻擊。攻擊決定是由一組追蹤玩家位置的移動算法來執行的。只有這樣,攻擊動畫才能播放,玩家的生命值被消耗。

移動算法可能比簡單的直接去某個點更復雜。一個角色可能需要避開路上的障礙,或者甚至通過一系列的房間。《分裂細胞》(Splinter Cell)遊戲中某些級別的守衛會對玩家的出現發出警報。這可能需要導航到最近的壁掛式警報點,但可能很遠,可能涉及複雜的繞過障礙物或穿過走廊的導航。

許多動作都是通過動畫直接執行的。如果《模擬人生》中的一個模擬人物坐在桌子旁邊,面前放着食物,想要進行一個吃的動作,那麼就簡單地播放吃的動畫。一旦人工智能決定了角色應該吃東西,就不需要人工智能了(使用的動畫技術不在這本書中)。然而,如果同樣的角色在想吃東西的時候在後門,移動AI需要引導她到椅子(或附近的其他食物來源)。

二、決策

決策包括一個角色制定下一步該做什麼。通常,每個角色都有一系列他們可以選擇的不同行爲:攻擊、站立、隱藏、探索、巡邏等等。決策系統需要找出在遊戲的每一個時刻,哪種行爲是最合適的,然後被選擇的行爲就可以使用移動AI和動畫技術來執行。

最簡單地說,角色可能有非常簡單的選擇行爲的規則。例如,在《塞爾達》遊戲的各個級別中,農場裏的動物會站着不動,除非是玩家靠得太近的,靠得太近它們會離開一段距離。
另一個極端的例子是,《半條命2》中的敵人會做出複雜的決策,他們會嘗試多種不同的策略來接觸玩家:組合一些過渡動作,如投擲手榴彈和鎮壓火力,以實現他們的目標。

有些決策可能需要移動人工智能來執行。近戰(近身)攻擊需要玩家靠近目標。在諸如《黑暗之魂》這樣的重型戰鬥遊戲中,決策會讓角色向他們的目標移動,也會決定執行哪種攻擊和動畫。在其他遊戲中,一旦作出決定,預定的動畫是沒有任何的移動(例如模擬人生中的任務吃東西)或直接修改遊戲的狀態沒有任何形式的視覺反饋(比如《文明VI》中當一個國家AI選擇研究一項新技術,它只是發生在玩家沒有視覺反饋)。

三、策略

你可以通過移動AI和決策AI走得很遠,而大多數基於動作的三維(3D)遊戲只使用這兩個元素。但是爲了協調整個團隊,需要一些戰略性的人工智能。

在這本書的上下文中,策略是指一組角色使用的整體方法。這一類的人工智能算法不只是控制一個角色,而是影響整個角色集合的行爲。羣體中的每個角色通常會有自己的決策和運動算法,但總體而言,他們的決策將受到羣體策略的影響。

在最初的《半條命》中,敵人以團隊的形式包圍並消滅玩家。一個人通常會衝過玩家,佔據側翼位置。這在最近的遊戲中也得到了遵循,比如《榮譽勳章》系列中不斷髮展的AI引擎。隨着時間的推移,我們已經看到一個敵人團隊所能執行的各種戰略行動越來越複雜。

四、基礎設施

然而,人工智能算法本身只是故事的一半。爲了真正爲遊戲構建 AI,我們需要一整套額外的基礎設施,移動指令需要在遊戲中通過動畫或物理模擬等基礎設施轉化爲動作。

同樣的,人工智能需要從遊戲中獲得信息來做出明智的決定。這有時被稱爲「感知」:計算出角色知道什麼信息。實際上,它的範圍遠不止模擬每個角色的所見所聞,它還包括了連接遊戲世界和 AI 之間的所有 API,這些 API 通常是 AI 程序員工作的一個重要部分,而且根據我的經驗,它是 AI 調試工作的很大一部分。

最後,需要對整個 AI 系統進行管理,使其使用正確的處理器時間和內存。類似於遊戲不同模塊通常存在某種類型的執行管理(比如渲染分層級),管理AI也需要一整套自己的技術和算法。
這些組件中的每一個都可能被認爲超出了 AI 開發人員的職責範圍,有時候確實是這樣,特別是,動畫系統通常是圖形引擎的一部分,或者越來越多地有自己的專門程序員。但是大多數基礎設施對於 AI 的正常運作是必不可少的。在這本書中,我在一定程度上介紹了除動畫之外的每個基礎設施組件。

五、基於代理的AI

在這本書中,我並不經常使用術語「代理」,儘管我所描述的模型是基於代理的模型。
在這種情況下,基於代理的 AI 是關於從遊戲數據中獲取信息,決定根據這些信息採取什麼行動,並執行這些行動的自主角色。

它可以被看作是自底向上的設計:你首先計算出每個角色的行爲,然後實現支持它的人工智能;而遊戲的整體行爲是由個體角色行爲的協同工作體現出來的。我們將使用的 AI 模型的前兩個元素,移動和決策,來構成了遊戲中一個代理的 AI。

相比之下,非基於代理的 AI 則試圖從上到下計算出所有事物的運行方式,並構建一個單一系統來模擬所有事物。例如《俠盜獵車手3》中城市的交通和行人模擬。總體交通流量和行人流量是根據時間和城市區域來計算的,只有當玩家能夠看到它們時,纔會變成單獨的汽車和人。

然而,這種區分是模糊的。我們將看到非常自上而下的細節技術,而大多數角色 AI 是自下而上的。**一個好的 AI 開發人員會混合和匹配任何可靠的技術來完成工作,而不考慮方法。**這種務實的方法是我一直遵循的。所以在這本書中,我避免使用基於代理的術語,而是更喜歡籠統地討論遊戲角色,無論他們是如何構造的。

六、關於本書

在這本書的正文中,每一章都將回顧這個 AI 模型,指出每章主題與該 AI 模型的聯繫。這個模型對於理解「事物是如何連接的」、以及「哪些技術是其他技術的替代品」非常有用。

但分界線並不總是涇渭分明;這是一個通用的模型,而不是一個緊箍咒。在最後的遊戲代碼中,每個類別的全部人工智能技術,以及大量的基礎設施,都將無縫地運行在一起。

許多技術也可能在多個類別中扮演着角色:例如,尋路既可以是一種移動,也可以是一種決策技術;類似地,一些分析遊戲環境中的威脅和機會的戰術算法可以同時作爲單個角色的決策者或決定整個團隊的策略。