GDC2018分享:遊戲AI中的知識表示概述

遊資網發表於2020-11-20
在2018年GDC演講中,Daniel Brewer和Rez Graham兩位大佬分享了幫助視訊遊戲AI做出對玩家有影響力的決策的最佳實踐。我進行了中文的翻譯並總結寫成了下面這篇文章,翻譯能力有限,請大家見諒。原視訊油管上,如果大家感興趣可通過以下連結前往。

原視訊連結

下面是所有內容!

多年來,在峰會上我們花了很多時間討論客戶程式會制定所有性感的不同演算法的決策,但我們沒有花費足夠時間討論的一件事是這些演算法如何用資料來做出這些決策的,而且這些決定的質量很大程度上取決於啟動器(starter),而不是取決於所使用的演算法。所以,今天我們將討論知識表示,我們將提供一個概述展示用於向AI提供資料的一些常用技術,並展示如何通過關注這些資料來設計更豐富的行為。

當玩家在玩遊戲時,這就是他們所看到的東西,而人類的大腦則非常驚奇地接受此輸入,確定出重要的部分,然後決定要做什麼。

GDC2018分享:遊戲AI中的知識表示概述

但這就是我們的AI在玩您的遊戲時所看到的。

GDC2018分享:遊戲AI中的知識表示概述

或者也許有點像這樣……我們的遊戲世界由結構,指標,多邊形和紋理組成,我們需要我們的AI來解釋所有這些,以識別重要的bits以檢視矩陣中的模式。

GDC2018分享:遊戲AI中的知識表示概述

因此,我們需要向AI提供他們所需的資訊,以使他們做出更好的決策並展示設計師想要的行為。根據它的行為可以分為三類:

  • 靜態環境資料(Static Environment Data)
  • 動態空間資料(Dynamic Spatial Data)
  • 實體資訊(Entity Information)



1. 靜態環境資料(Static Environment Data)

因此,顧名思義,Static Environment Data可以代表您的AI瞭解物理世界,這個資料通常在執行時不會改變很多,您的AI會使用這些資料來尋找他們的路徑或搜尋位置。

1.1 導航尋路

導航和尋路是AI永恆的問題,因為環境變得越來越複雜,移動需求變得越來越瘋狂,可導航空間的表示也變得越來越複雜。這有點像是圖形程式設計師和AI程式設計師之間的一場軍備競賽。因此,不再是僅僅需要客戶程式在關卡開放空間中徘徊。

GDC2018分享:遊戲AI中的知識表示概述

如果我們採用這種簡單的環境,這是一個開放廣場,問題就很簡單,但我們的設計師通常會向我們提出挑戰。

GDC2018分享:遊戲AI中的知識表示概述

所以我們需要有一種方式讓我們的AI知道他們可以留在通路上,但是他們不應該走在草地上。但是,如果一個學生上課遲到並且周圍沒有教授,或者學校正受到外星人的攻擊,那麼他們無論如何都會越過草坪。

GDC2018分享:遊戲AI中的知識表示概述

因此,如果將網格用於導航表示則相對簡單,你可以在地形型別上標記網格中的每個單元,然後可以構建函式,以指導AI沿著路徑前進。

GDC2018分享:遊戲AI中的知識表示概述

當您使用導航網格物體時,事情卻稍微有些不同,典型的導航網格物體可能看起來像這樣,但這還不夠好,因為我們不知道這裡有什麼。

GDC2018分享:遊戲AI中的知識表示概述

因此,我們需要為設計師提供一些工具,以允許他們標記這種環境,以便他們可以告訴AI草在哪裡,人行道在哪裡,然後我們可以從那裡出發。這給我們的導航圖增加了更多的複雜性,但是事實證明新增額外的權重和標記確實非常有幫助。

GDC2018分享:遊戲AI中的知識表示概述

我們在黑暗環境中使用了這項技術-我們實際上是根據光線來建立切割體積的,並在這些體積上切割,然後我們測量了消除量並對其進行了模擬,這使我們的黑暗角色得以保留在陰影中並避開燈光。

GDC2018分享:遊戲AI中的知識表示概述

GDC2018分享:遊戲AI中的知識表示概述

然後可以相對容易地構造一個不同的函式,根據您要執行的繁重任務選擇不同的成本函式。如果您只使用一個ID來代表您的地形,那麼您就只能一次只使用一種型別的考慮因素,而如果使用位掩碼錶示您的地形型別,則可以開始將這些位使用不同的加權係陣列合在一起。

GDC2018分享:遊戲AI中的知識表示概述

1.2 智慧物件(Smart Object)

現在,沿著智慧物件或稱為遊戲AI知識表示中的無名英雄之一繼續前進,模擬人生遊戲是一個典型的例子,說明如何使用智慧物件擴充套件代理的功能並使他們似乎更加了解自己的環境。

GDC2018分享:遊戲AI中的知識表示概述

但是我們可以在其他遊戲中的各處使用它們,從而使它們在本質上可以發揮很大的作用。智慧物件是一種抽象,它在一個簡單的介面後面封裝了一些複雜的邏輯,並將其與特定的位置或實體相關聯。在世界範圍內,現在您的AI無需知道任何複雜的資訊,他們只需要選擇要使用的智慧物件,就可以避免所有邏輯被嵌入到該智慧物件中。

GDC2018分享:遊戲AI中的知識表示概述

GDC2018分享:遊戲AI中的知識表示概述

1.3 戰術地圖(Tactical Map)

現在,行動和策略遊戲中的許多決策都圍繞著代理商應該向何處移動以及我們應該如何到達那裡展開。因此瞭解地圖的整體流程和結構是有好處的。地圖的主要區域是什麼?這些區域如何連線?您的導航表示形式當然可以為您提供幫助,但是它過於詳細,就像試圖在所有森林中尋找一棵樹一樣,因此具有較高階別的表示形式很有用。

GDC2018分享:遊戲AI中的知識表示概述

在星際戰甲(Warframe)中,我們使用粗糙的走廊地圖作為結構來表示此資訊,我們稱之為戰術地圖,它表示執行時的關卡流程,我們在此圖中新增了很多額外的構成,我們知道我們所有的門裡面是什麼狀態的。大量不同的系統都使用它,AI直接使用它,NPC使用它來尋找掩護和巡邏。設計人員可以編寫指令碼來搜尋該圖以查詢定位的位置。它是關卡非常有用的抽象表示。

GDC2018分享:遊戲AI中的知識表示概述

2.動態空間資料(Dynamic Spatial Data)

現在,動態空間資料用於表示受環境影響並隨時間變化的空間關係,因此,即使關卡的物理結構可能是靜態的,單元的位置也可能在執行時發生變化,這會產生很多動態變化。能夠預測和應對這些情況非常有用,因此在此處將一些值對映關係繫結到表示特定位置的特定區域,並允許其在整個環境中流經地圖並做出響應是很有用的。

2.1 影響力圖(Influence Maps)

影響力圖(Influence Maps)實際上是這裡的首選演算法,這是一個非常複雜的話題。我不會詳細介紹它們,但是我將介紹一些我們在Warframe中有用的用法。

GDC2018分享:遊戲AI中的知識表示概述

首先,您不僅可以從角色中散佈影響力,還可以在角色受到傷害或死亡的地方插入影響力,現在您已經有了一個危險力圖,可以使用它來將敵人吸引到衝突區域作為增援,或者您可以推動敵人角色遠離衝突區域。

GDC2018分享:遊戲AI中的知識表示概述

您還可以模擬環境危害,例如炸燬窗戶時撞破船體和宇宙飛船,您可以從該窗戶中獲取一些影響,並通過您的影響圖將其傳播出去,我們在戰術圖上使用影響圖,因此我們知道門所處的狀態,然後我們可以更改這種影響的分佈,以便門在這些區域中包含真空環境,您可以將其用於著火或洪水或任何其他可能擴散到整個環境中的環境特徵。

GDC2018分享:遊戲AI中的知識表示概述

2.2 客觀距離圖(Distance to Objective)

客觀距離圖對於瞭解目標位置很有用,您可以將所有目標以零距離播種到關卡中,然後使用Dijkstra填充地圖中任何點到該目標的距離,現在我得到了一個查尋表,您可以通過它知道您離最接近的目標有多遠,您知道可以朝哪個方向前進,您可以讓巡邏NPC掩蓋玩家與目標之間的距離,我們用大量不同的方式來使用它。

GDC2018分享:遊戲AI中的知識表示概述

2.3 預測角色移動

現在您也可以關注影響力的變化並開始做出預測,因此,如果隨著角色移動,角色中的影響力正在從角色中擴散開來,那麼影響力將在他們移動的前方地區上升,在他們身後下降,因此,通過尋找影響力有積極變化的領域,您可以預測玩家的前進方向,這也非常有用。

GDC2018分享:遊戲AI中的知識表示概述

3.實體資訊(Entity Information)


實體資料是用來決定遊戲中其他活躍實體的資料,這是您必須處理的最廣泛,最多樣化的知識型別,並且還高度依賴於所玩遊戲的型別。在動作遊戲中,這通常是有關可能目標的資訊。在賽車遊戲中,它將是有關其他賽車的資訊。在策略遊戲中,這可能是關於其他文明的資訊,他們已經開發了什麼技術,他們必須交易什麼資源等。

3.1 目標列表(Target Lists)

從我的背景出發,我一直專注於動作遊戲,所以這就是我在這裡要談論的話題。在這裡,您將希望傳達有關可能目標的資訊,通常,您將擁有一些感知系統來提供有關您的AI知道的目標以及他對這些目標的瞭解等這些資訊,您可以在目標列表中維護此資訊,而這基本上只是結構陣列,其中包含您對這些目標的瞭解。

現在有兩個重要原因,為什麼您要像這樣系統分離出來,首先將這些資訊從世界中快取,這使您可以將AI系統與您的世界分離開來,並且可以更輕鬆地非同步執行事物,因為這樣您便知道了您無需依賴AI系統就可以直接從世界範圍內獲取東西;其次,如果您的AI僅能訪問他認為的資訊,這將使您的玩家可以在您的AI上耍花招,可以操縱它們,並且開始在遊戲設計中找到樂趣。

GDC2018分享:遊戲AI中的知識表示概述

3.1.1 最後已知位置

因此,您至少應該妥善儲存一些資訊,您至少需要知道目標是否可見,以及它的最後一個已知位置,這非常有用,因為 可以讓您的玩家有一點額外的煩惱。

GDC2018分享:遊戲AI中的知識表示概述

GDC2018分享:遊戲AI中的知識表示概述

GDC2018分享:遊戲AI中的知識表示概述

3.1.2 感知型別

此外,如果您想讓AI聽到您發出的聲音後不直接進入戰鬥,或者想讓它們去觸發警報,則保持一定的感知資訊範圍非常有用。

GDC2018分享:遊戲AI中的知識表示概述

GDC2018分享:遊戲AI中的知識表示概述

GDC2018分享:遊戲AI中的知識表示概述

GDC2018分享:遊戲AI中的知識表示概述

3.1.3 二手資訊

如果您在AI之間共享資訊,則知道您所擁有的資訊是第一手還是第二手是很有用的,因為隱藏的AI根據二手資訊跑向警報處去觸發警報,玩家是無法知道的,所以對於玩家來說,所以如果玩家不知道其他AI在場,那將是不公平的。

GDC2018分享:遊戲AI中的知識表示概述

GDC2018分享:遊戲AI中的知識表示概述

GDC2018分享:遊戲AI中的知識表示概述

GDC2018分享:遊戲AI中的知識表示概述

GDC2018分享:遊戲AI中的知識表示概述

因此,確實看到玩家第一手資訊的第一個AI跑向警報處的話,這會更好,這對於玩家來說更加可信,它還使您有機會阻止AI觸發警報,這可以說是一個更好的遊戲玩法。

GDC2018分享:遊戲AI中的知識表示概述

GDC2018分享:遊戲AI中的知識表示概述

GDC2018分享:遊戲AI中的知識表示概述

GDC2018分享:遊戲AI中的知識表示概述

3.1.4 可以到達

還有一個可到達的標記也是很有用的,這樣您就可以知道要嘗試到達的目標是否真的可以到達他。如果找到的部分失敗,您可以將他標記為無法到達的位置,然後 在情況發生重大變化之前,無需再次尋找他。

GDC2018分享:遊戲AI中的知識表示概述

一旦情況發生變化,您就可以清除標誌並嘗試重新開始。

GDC2018分享:遊戲AI中的知識表示概述

您還可以建立後備行為,近戰的敵人可能會選擇其他目標,或者他可能會切換長距離武器。

GDC2018分享:遊戲AI中的知識表示概述

3.1.5 目標的武器和目的

其他用到的有用資訊是,目標的目的(Alim)以及他使用的武器,您不需要躲避以你為目標但佩戴劍的敵人,但如果是遠端武器則正好相反。

GDC2018分享:遊戲AI中的知識表示概述

如果我們製作奔放的遊戲,並且玩家有一顆子彈的單發手槍,我們可以更進一步,目一個被玩家作為目標的AI可能想要退後一點並保持謹慎,而他的隊友可能會側翼移動,一旦玩家開了槍並換上了劍,所有AI都會一擁而上。

GDC2018分享:遊戲AI中的知識表示概述

3.2  遊戲的步調(Pacing)和強度測量(Intensity Measurement)

最後,我想在這裡談一談與遊戲的步調(Pacing)和強度測量(Intensity Measurement)有關的主題。因此,多年來,我們一直在關注遊戲的強度測量,因為我們想在執行時動態管理步調,而且我已經越來越多地意識到強度測量的意圖,並提出了不同的指標。

GDC2018分享:遊戲AI中的知識表示概述

3.2.1 威脅

首先,隨著玩家逐步進入關卡,會有不同程度的威脅,這是對玩家造成傷害的潛在可能。所以更多的敵人意味著更多的威脅,敵人越強壯,威脅就越大,而敵人越接近,威脅也就越大

GDC2018分享:遊戲AI中的知識表示概述

GDC2018分享:遊戲AI中的知識表示概述

GDC2018分享:遊戲AI中的知識表示概述

GDC2018分享:遊戲AI中的知識表示概述

3.2.2 資源

現在玩家擁有一定數量的資源來應對威脅,而您擁有防禦性資源,包括防禦力和生命值,還有進攻性資源,有彈藥或魔法等等。

GDC2018分享:遊戲AI中的知識表示概述

因此可以花費資源來克服威脅,因此當玩家被擊中時失去健康就有效地花費了防禦性資源,花費了彈藥進行回擊又有效地花費了進攻性資源,

GDC2018分享:遊戲AI中的知識表示概述

GDC2018分享:遊戲AI中的知識表示概述

3.2.3 強度

現在我們有了一個衡量強度的方法,如果玩家僅通過少量資源損失來減少威脅,那麼遊戲就太容易了,這還不足以構成挑戰。但是,如果花費大量資源來克服該威脅,那麼這意味著遊戲非常艱鉅,挑戰重重。

GDC2018分享:遊戲AI中的知識表示概述

3.2.4 緊張局勢

現在,如果玩家偷偷溜走或躲藏起來,就會出現一個有趣的情況,那就是您的威脅等級很高,但是沒有資源在消耗,但是隨著時間的流逝,這種威脅的強度在不斷增加,那裡存在衝突的可能性,這是緊張局勢加劇的情況。

GDC2018分享:遊戲AI中的知識表示概述

3.2.5 步調

因此,強度與花費資源去克服威脅直接相關,但是,在威脅很高的情況下,它表示存在潛在的衝突。因此,緊張局勢加劇。

GDC2018分享:遊戲AI中的知識表示概述

3.3 AI 長期的知識表示

接下來,我們將談論長期知識表示,所以我們剛才聽到的一切都是關於一些較短期的戰鬥經驗以及類似的東西,所以我將更多地關注長期的東西,如果這可能更適合於模擬RPG策略遊戲,那麼這種東西可以用於長期的關係和事物。我將要談論的兩件事主要是我們的統計資料和標籤,所以我認為我們從這兩件事中獲得了很多收益,而且上文說的一切也適用於這些型別的遊戲,所以您一定會發瘋。

GDC2018分享:遊戲AI中的知識表示概述

3.3.1 統計資料(Stats)

統計資訊實際上只是模糊值,它們的值表示某種模糊狀態,例如我有多餓,我有多少樂趣,有多少社交能力,我喜歡什麼東西,或者我的技能,我的外交關係,或我的人民有哪些需求等等。

GDC2018分享:遊戲AI中的知識表示概述

因此統計資料幾乎總是以某種方式進行歸一化或固定化,因此存在一些歸一化的值,並且可以從字面上歸一化為 0 到 1 。

在模擬人生中,他們通常是負100到正100,這給了您一系列的比較範圍,因此您可以輕鬆地進行比較和對比,讓它們表示可以打勾的各種不同事物。當然,這也意味著它們可以像字面上的float一樣簡單,然後是某個值或某些識別符號,或者對於大型物件(例如它們在模擬人生以及許多其他型別的遊戲中所使用的物件)而言,它們可以有更大的複雜度。

它們也可以是計算值,而我的意思是真正地從其他各種事物中衍生而來,當我談論諸如標籤之類的東西以及如何獲得此類事物時,我會做更多的介紹。這是我們使用決策制定的主要內容之一,如果您使用的是實用工具或必須使用的任何方法,我們將花費大量時間將其整合到我們的決策制定系統中。

它們有助於提供非常細微的行為,我喜歡微觀變化,我會給您舉個例子,如果您玩過類似模擬人生或其他類似的遊戲,您會發現模擬人生中的許多核心互動都是這些小型的微觀社互動動。我要向這個特定的市民打個招呼,我要給這張圖片等這些類似的東西,因此,這非常非常像那些內部迴圈。您正在做這些小的互動操作,隨著時間的推移,這個值會逐漸遞增,並且隨著許多值一起進入較大的計算,因此會得到更多緊急型別的行為。

GDC2018分享:遊戲AI中的知識表示概述

我會給你一個遊戲中的直接例子,不知道有多少人聽說過——芭比奇幻日記-神祕的高校(Barbie Diaries:The-High School Mystery)。早在2005年,我就曾從事過這款遊戲,無論您是否相信,已經有了一些發生在幕後的模擬,有些像是基於實用程式的AI發生了,我之所以建立它,是因為它實際上是一個高中模擬遊戲或一個高中冒險遊戲,所以我們形成了一些小集團,而這樣做的方式基本上就是基於實體ID的雜湊表,兩個浮點數決定了“我”想和特定型別的特定人交談的程度,所以就有了各種有趣的人,受歡迎的女孩和很少與異性互動的書呆子。

這是一件微不足道的事情,我的意思是我在兩個小時左右的時間內完成了此操作,但它創造了足夠有趣的行為,玩家會覺得“嘿,AI發生了什麼事情,發生了一些微妙的事情,使它變得更好”。因此,通過類似這樣的小事情,您可以獲得明顯的效果。

GDC2018分享:遊戲AI中的知識表示概述

在模擬人生這樣的遊戲中,這是一個很好的例子,它更進一步,因此我們的關係得分設定為從負100到正100。但是實際上我們有好幾個類似的關係,所以如果您看下圖Courtnery 處,我們有兩種不同的關係值,一個用綠色表示,一個用粉紅色表示,分別代表友情和浪漫。這是兩個完全不同的軸,這些軸的混合和融合非常容易和有趣。因為通常的道路是友誼和浪漫一般是一起上漲,但是當您進行一些低階的互動,然後進行正常的互動時,您會得到一些非常有趣的行為。

GDC2018分享:遊戲AI中的知識表示概述

因此,當您遇到諸如高友情低戀情或低友情高戀情之類的事物時,您會得到不同的感覺,比如說高友情低戀情的人也許是您的朋友們真正的好朋友,您嘗試了一些東西,但效果卻不盡如人意。而低友情高戀情則可能有類似的依賴性發生,你和真正的令你痛苦的敵人睡在了一起。因此您可以獲得一些非常有趣的微妙行為,並且可以新增一些行為,使這種行為大量增加,並獲得各種瘋狂的東西。

3.3.2 標籤(Tags)

我想談論的另一件事是標籤。標籤是您懸掛在實體上的大量資訊,就像聖誕樹上的裝飾品一樣。標籤真的很酷,而且非常具體。標籤是識別我們要跟蹤的資訊和事物的方式。類似於統計資料,他們可能只是某個地方的列舉,也可能是成熟全面的類,就像在模擬人生遊戲中的一樣。

GDC2018分享:遊戲AI中的知識表示概述

所以我想用一個名為Crusader Kings 2的遊戲來講一講,從標籤中衍生而出的統計資料。我用這個遊戲舉例的原因,是因為我認為他們非常精通這項工作,我認為因為他們還解決了另一個有趣的AI問題。

所以首先這是Earl Lawrence,這是我在這場特別的遊戲中的臣僕之一,他的值是負18 代表他是一個蠢貨,所以為什麼他是個蠢貨呢,他們非常簡單地解決了AI的第一條規則。AI的第一條規則就是向玩家展示您正在做的事情。這裡有很多內容,例如,其中一條,我擁有很多公爵夫人,而他超級想要其中一個,所以你知道我可以通過這樣做來操縱他,但是那會推動他的很多互動以及他的很多欲望。我可以在這裡看到它,並歸結為一個數字,我可以檢視這些數字,這些數字是由這些起作用的不同標籤衍生而來的。

GDC2018分享:遊戲AI中的知識表示概述

所以他們確實做得很好,我認為我們在模擬人生上也做了類似的事情,左下角的東西叫做情感,我們可以看到這個市民很悲傷,而且下面還有兩個小東西告訴你為什麼他會悲傷。

GDC2018分享:遊戲AI中的知識表示概述

我將展示另一個不同的示例,這個市民情緒是愛玩,為什麼這個市民愛玩?我可以將滑鼠懸停在這些小東西上,他們會告訴我因為這件事加了 3 點愛玩值,因為那裡有俏皮的裝飾,所以因為市民恰好在一個擁有俏皮裝飾的房間裡。我們可以檢測到有有趣的裝飾,我們會給市民新增這個buff或我們稱之為buff的標籤。

而我們要做的是,我們總結它們在每個不同標籤上的所有不同情感權重,而值最高的獲勝者就代表了該市民目前的情緒。如果市民離開這個房間,那麼該市民的情緒就有可能被其他情緒的所取代。然後這解鎖了您可以進行的其他互動,甚至可以進一步產生更多愛玩的buff,標籤和類似的東西。所以你可以沿著這個兔子洞走,我們都經歷過多少次悲傷或沮喪,就像進入這個狀態時我們是自己最大的敵人。或者是快樂,然後和其他快樂的人在一起,現在變得更加快樂,然後你喝酒,就又變得更加快樂,呃,有時可能就不是這樣。

GDC2018分享:遊戲AI中的知識表示概述

您也可以選擇相反的方式,或者像是將它們以更多方式真正地結合起來。這兩個傢伙是我們的愛人,他們是最好的朋友,並且所有這些都來自統計資料,因此他們之間進行了很多互動,等到到達某一點後,他們從熟人變成了朋友,然後變成了最好的朋友,等等。但在最底端,您會看到有一項叫做 Promised,這基本上就像我們正在穩定或訂婚的狀態,而婚姻與您的浪漫值的高低無關。雖然我們把兩者都稱為關係,但它們只是標籤。

GDC2018分享:遊戲AI中的知識表示概述

3.3.3 結論

統計資訊實際上只是模糊值,它們提供微妙的緊急的行為,它們有助於提供非常細微的行為。標籤是懸掛在實體上的大量資訊,擅長基於事件的行為。

GDC2018分享:遊戲AI中的知識表示概述

譯者:Oliver
來源:我的遊戲程式設計師之路
地址:https://mp.weixin.qq.com/s/0oPiu8Og9pNXIgxMnCyWNA

相關文章