譯文:Thief: The Dark Project (神偷:暗黑計劃)AI系統(tǒng)如何設計

http://www.gamasutra.com/view/feature/2888/building_an_ai_sensory_system_.php (英文原文)

By Tom Leonard

對于理解,設計和討論在仿真環(huán)境中AI如何收集對象信息,游戲開發(fā)中用“senses”這個詞恰到好處。在實際的三維空間中,用作模擬人類,動物以及任何有眼和耳朵物種的NPC是很好的舉證。

盡管游戲中的AI物理特性看起來像是在sense,但從engineering角度來講,AI的sense不是一種生理上的或神經上的感知。游戲中,sense和knowledge之間的區(qū)別比較模糊。Sense的意義包括可以意識到游戲中其它實體的存在以及元素的價值和常識,可以根據(jù)游戲內容做出直接的反應。

游戲感知系統(tǒng)需要以一種遵從于游戲設計且能高效實現(xiàn)的方式設計。sense需要兼顧趣味性和健壯性。所做的事情是能讓玩家感知并理解的。很少有游戲,在設計時需要AI做到嘗,觸摸以及聞;因此sense只關乎看和聽。用得好的話,senses可以成為非常有價值的工具,通過向狀態(tài)機提供更廣泛的環(huán)境輸入更使其更富趣味性。

本文講述的是一種隱蔽類第一人稱AI系統(tǒng)設計并實現(xiàn)高保真感知系統(tǒng)的方法。該技術來自為Thief: The Dark Project構建AI的經驗,也通曉CS的做法。最初,AI senses的概念是以CS為參考設計出來的。本文檢測到一個更為嚴格的隱蔽類游戲設計的需求。最后,設計出了Thief的感知系統(tǒng)。

實例:半條命

半條命并不是以隱蔽和感知為核心的游戲。因為對戰(zhàn)中有戰(zhàn)術需求,游戲要有一個合理的感知系統(tǒng)。所以這個游戲是研究AI感知系統(tǒng)的好案例。半條中的AI有視力和聽力,能對感知到的實體的信息進行處理,然后產生各種行為。

在一個普通的感知系統(tǒng)中,AI按時去看和聽。真實的視覺和聽覺系統(tǒng)中,當senses受到刺激時,都會主動或者被動的做出相應反應,AI則不同。它們根據(jù)自己的興趣去檢測環(huán)境,然后根據(jù)預先設定的規(guī)則做出決定,他是看到了還是聽到了別的東西。這些probes設計用來仿真senses,但也限制了可完成的事情數(shù)量。這些資源對于游戲體系來說是很重要的。

舉例來說,半條命的核心感知邏輯是,定期跑:

If I am close to player then… 當我靠近一個玩家時

Begin look 開始看

--Gather a list of entities within a specified distance 在一個規(guī)定范圍內,生成一個所有實體的名錄

--For each entity found... 每一個發(fā)現(xiàn)的實體

----If I want to look for them and 如果我想找他們

----If they are in my view-cone and 如果他在我的view-cone之內

----If I can raycast from my eyes to their eyes then... 從我的眼睛到他們的眼睛之間,我能ray cast到他

------If they are the player and 如果他們是玩家

------If I have been told to not see the player until they see me and 如果我在他們發(fā)現(xiàn)我之前不能看他們

------If they do not see me 如果他們沒看到我

--------End look 結束看

------Else

--------Set various signals depending on my relationship with the seen

————entity 根據(jù)我和看到的事物時間的關系,設定若干信號

End lookBegin listen --For each sound being played… 每一個發(fā)出的聲音

----If the sound is carrying to my ears... 如果傳到了我的耳朵里

------Add the sound to a list of heard sounds 添加到聽見的聲音列表中

------If the sound is a real sound... 如果是一個真實聲音

--------Set a signal indicating heard something 設一個信號表示聽到聲音

------If the sound is a "smell" pseudo-sound 如果聲音是“聞“ 到的假聲音

--------Set a signal indicating smelled something 設一個信號表示聞到東西

End listen

這段偽代碼要表達的第一個概念是,senses與AI特性密切相關,它與主題的關系,以及AI與玩家體驗的關聯(lián)。也是從游戲優(yōu)化的角度考慮,而且游戲機制是可以實現(xiàn)的。在半條的游戲設計中,一個不靠近玩家的AI沒有實質作用,也不需要感知周圍環(huán)境。即便靠近玩家時,該AI只需要去看那些即將產生恐懼或者仇恨的人物。

這個邏輯也說明了view distance, view cone, line-of-sight以及eye position之間的結構關系(見圖1)。每個AI有一個受長度限制的二維視覺范圍,并在這里cast ray感興趣的目標。無阻礙的ray casts代表能見度。


圖1

有兩點要注意。第一,sensing的操作從最便宜到最貴。第二,玩家喜歡這種躲貓貓的感覺。在第一人稱游戲中,玩家肢體感知不強,被對手看到的玩家,不會覺得自己被對手行為誘導了。

最有意思的是其中一段代碼是約束AI,只有在被玩家看到時才能看到玩家,這完全是為了配合玩家玩耍。這就是一款高水準游戲在并不復雜的系統(tǒng)中,利用簡單技術就完美實現(xiàn)了想要達到的標準。

聽覺的邏輯要比視覺簡單。聽覺的基本組成元素是什么樣的聲音以及音調,需要讓AI聽到。在半條里,聽力是一個直觀的探索音量,在AI能聽到聲音的區(qū)域范圍內,“聽力敏感度”逐漸擴大。更有趣的是,聽力只是用來收集一些沒什么價值的信息。比如,AI“聽到”假聲,周圍尸體發(fā)出的味道。

核心玩法依賴senses的Thief

Thief: The Dark Project和它的繼承者們所描述了一種輕量級腳本化游戲世界,它的核心是潛入,挑戰(zhàn)了傳統(tǒng)的第一人稱3D游戲。在盜賊中,玩家小心翼翼地移動,避免沖突,殺人會受到懲罰,而且是一招斃命的那種。玩家通過強大的AI感知系統(tǒng),根據(jù)從周圍中獲悉各種信息來進行游戲。玩家要穿越重兵把守地帶,并且不被巡邏中的AI發(fā)現(xiàn),在黑影中穿行,不發(fā)出任何響動。盡管盜賊的AI感知能力與半條的核心理念相似,不過這種以躲藏,隱蔽為主的游戲機制需要更復雜的感知系統(tǒng)。

首先,需要創(chuàng)建一個高度可調的感知系統(tǒng),有一個很大狀態(tài)范圍可去操控。表面看來,潛入游戲玩法是關于躲藏,背后突襲,保持安靜,環(huán)境的亮與黑。讓這種體驗變得更有趣的是,將安全與危險之間的灰色地帶變得更大,而在大多數(shù)第一人稱游戲中,這個地帶猶如一線之隔。當玩家進入灰色地帶,猶如在刀尖上行走,心跳加速,直到走出后才能松一口氣。這要求”broad-spectrum” senses不能急速偏振,只有“玩家感知到”和“玩家沒感知到”兩個極端。

第二點需求,比起其它第一人稱游戲,在盜賊中,sense系統(tǒng)被觸動的頻率更高,能作用于物體也更多。在游戲過程中,玩家的行為能左右整個虛擬世界的狀態(tài),AI能夠感知到,即便當時玩家沒有在AI的周圍。這些行為,例如玩家藏了起來,需要可靠的感知能力。對于游戲開發(fā)者來說,與萬年不變的performance需求相比,這兩點需求結合在一起是一個更有趣的挑戰(zhàn)。

結論是,感知系統(tǒng)的輸入輸出,有必要讓玩家和游戲設計者都能解讀,系統(tǒng)輸出的結果應該是輸入信息的合理反饋。 做法是,有限地向系統(tǒng)輸入玩家留下的線索,然后獨立的處理每一個輸入結果。

擴大Senses

這里闡述的感知系統(tǒng)真的和半條命的很像。這是一個以viewcone和raycast為基礎的vision system,以及帶有hooks的簡單聽覺系統(tǒng)作為支持優(yōu)化,游戲機制以及pseudo-sensory data偽感知數(shù)據(jù)。(It is a viewcone and raycast based vision system and simple hearing system with hooks to support optimization, game mechanics, and pseudo-sensory data.) 以半條為例,大部分sense是從就該輸入信息要做出什么反應的決策過程中剝離出來的。盜賊的系統(tǒng)以這些核心思路為基礎進行擴展,從而生成了一些新的思路。

圖2,系統(tǒng)基礎組成部分及關系

數(shù)據(jù)系統(tǒng)的設計和數(shù)據(jù)都取自于一個,被定義為信息收集系統(tǒng),并且可根據(jù)需求對該系統(tǒng)進行個性化調整,輸出結果穩(wěn)定且易懂。

在該系統(tǒng)中,AI senses以“awareness”的形式構架而成。Awareness用來表達一系列的離散狀態(tài),這些狀態(tài)代表了AI感知存在,位置,以及識別某物體的偏好。這些離散狀態(tài)不僅應用于系統(tǒng)內部和設計者之間,并且關聯(lián)于高級AI與alertness(警戒)狀態(tài)。在盜賊的AI中,alertness狀態(tài)的范圍與awareness狀態(tài)的范圍一樣。AI的alertness狀態(tài)通過各種方式被返回到感知系統(tǒng),然后改變系統(tǒng)的行為。

awareness被存在sense links中,這些links不僅與要通知的AI與另一個游戲中實體之間相關聯(lián),也與一個位置相關聯(lián)。這些關系存儲的是游戲相關感知信息(例如時間,位置,視線等),以及緩存的數(shù)值,用來減少think cycle之間的運算。Sense links,事實上,是AI的內存。雖然verbalization(表達)和observation(觀察) 的sense links被廣泛作用于peer AI中,在一個區(qū)域內阻止他們之間的信息串聯(lián)。庫處理之后,AI也同時被游戲邏輯操控著。

圖3,Sense links

在游戲中,每個被追蹤者(盜賊)都有一個visibility value,能被每個AI單獨觀察到。根據(jù)數(shù)值游戲中的狀態(tài),性質等級(重要程度)與更新頻率,來分配處理需要花費的時間。

visibility包括物體的亮度,移動和暴露出來的部分(尺寸,與其它物體的間距)。這么做完全是為了滿足盡可能游戲要求。比如,玩家本身的亮度取決于他周圍地面反射上來的亮度,這可以給玩家提供一個行之有效的蔽護。他們的數(shù)值和他們的visibility總和,以二進制模擬數(shù)值的形式存儲。

Viewcones

盜賊senses實現(xiàn)了一組有序的三維viewcone, viewcone由xy angle、Z angle、長度來表示,實現(xiàn)了一組參數(shù)來表示各種刺激的敏感度,以及實現(xiàn)了收到有AI警示后的相關舉動。viewcone根據(jù)AI臉朝向的方向定位。

任何時候,感知到物體時,只有物體所在第一個view cone在sense計算范圍內。為了簡便,gameplay的可調性,每一個viewcone應該生成一個常量輸出,無論這個物體時放在viewcone的什么位置。

比如,圖4中描述的AI有5個viewcone。A點的物體會在3號viewcone的估算范圍內。1號viewcone包含了B和C點的vision sense awareness的計算,在這里,一個物體相同的visibility values生成同樣的結果。

圖4,Viewcones, Top-view

當AI感知到符合自己需求的物體時,senses首先要決定是在哪個viewcone,假如有重疊現(xiàn)象,就根據(jù)剛剛說的方法來決定。接下來,在viewcone中,通過啟發(fā)式查詢,找到內在visibility,然后輸出一個離散aswareness值。

做成多viewcone是為了表達更多的情況,比如直接vision,外圍vision,以及,在與AI同一平面上直接走來的物體和不在同一平面只是在上下移動的物體,這兩種情況之間的區(qū)別。上圖中cone 5描繪的是在低處看高處?!眆alse vision”會判定這是向后看,讓AI覺得自己被跟得很近,而實際上沒有。

Information Pipeline 信息通道

sense處理系統(tǒng)由很多部分組成。每個部分都是一組有限的并且定義好的數(shù)據(jù),輸出也是有限的數(shù)值。每個stage都獨立存在,以配合根據(jù)game play決定的處理需求。多層次的結構,讓處理性能非常有效。

圖5,Information Pipeline

sensory系統(tǒng)核心功能支持,啟發(fā)查詢visibility,聲音時間,當前awareness links,設計和程序員配置的數(shù)據(jù),當前AI狀態(tài),并為每一個AI有興趣的物體輸出一個簡單的awareness數(shù)值。這些啟發(fā)出的結果被形容為黑盒子,AI程序員用它來不斷開發(fā)游戲。

通過恰當?shù)膙iewcone過濾物體的visibility數(shù)值,然后基于AI的性質修改結果,來實現(xiàn)vision功能。在多數(shù)情況下,使用單一的直視的raycast。復雜一些的情況中,比如AI與玩家之間,多層次的raycasts可以囊括AI和玩家在空間中的關系,以權衡玩家暴露的程度。

盜賊游戲有一個復雜的聲音處理系統(tǒng)。渲染過或沒渲染過的聲響都被標注為語義數(shù)據(jù),并在3D幾何世界中傳播。AI接收到的聲響,應該是來自現(xiàn)實世界的方向,標注為衰減的awareness數(shù)值,如果是談話內容,那有可能是來自其它AI的信息。這些聲響連同其它信息,用來作為判定位置的awareness。

Awareness Pulses

當look和listen的操作完成后,他們的awareness結果會被傳遞給一個用于接收來自原始senses周期脈沖的方法,該方法將周期脈沖處理為簡單的awareness關系,并把所有細節(jié)存儲在對應的sense link中。與應用于管道中的模擬數(shù)據(jù)不同,這個處理過程中的數(shù)據(jù)都是離散的。處理的結果可以創(chuàng)造,更新以及將sense links用正確的awareness數(shù)值替代。

這是一個三步走的過程。第一步,sound和vision的輸入數(shù)值會比較,哪一個更重要,可以成為awareness的數(shù)值。提煉出來的數(shù)值匯總在一個sense事件摘要中。

第二步,如果awareness脈沖比先前readings有所增長,它會被傳遞給一個以時間為基準的過濾器。過濾器控制實際awareness是否增長。延遲只是當前狀態(tài)的性質,不是目標狀態(tài)的性質。這是響應延遲和玩家forgiveness條件如何構成的。一旦超過時間界限,awareness將跳過中間狀態(tài)直接到達目標狀態(tài)。

最后一步,如果新的脈沖數(shù)值低于當前readings,電容器將允許awareness逐漸地降低。awareness降低的過程中,要經過一些中間狀態(tài)。當AI想要追逐的物體不那么活躍時,AI的行動也會慢慢放松下來。不過,這個機制不是AI alterness的核心功能所控制的那部分。

當獵物(玩家控制的人物)不在發(fā)出脈沖,senses會根據(jù)AI的狀態(tài),合并出一些信息給AI。這個機制能幫助AI進行位置推斷,當獵物離開AI視線范圍后再度被發(fā)現(xiàn)時,不會讓玩家覺得剛才AI在作弊。

Conclusion ?總結

這個系統(tǒng)是針對單人游戲,用軟件就能渲染的游戲設計的。文中的方法具有權威性,可以借鑒。遺憾地是,在客戶端/服務器結構,僅支持硬件渲染的游戲引擎中,就不能實現(xiàn)了。決定獵物visibility的有效區(qū)域不會這么簡單。因此,如果要使用本文講述的系統(tǒng),要謹慎,它需要其它系統(tǒng)的配合。

此外,盡管這個系統(tǒng)行之有效,該系統(tǒng)是為基于系統(tǒng)輸出結果進行的游戲而設計的。在盜賊游戲中AI消耗了大量CPU資源。這種情況下,設計路徑,戰(zhàn)術分析和其它需要做決定的行為效果就差了。

不管怎么說,好處還是有的,所以游戲愿意在處理sensing上進行投入。通過手機和過濾更多的環(huán)境信息并將其好好處理,senses能夠讓AI的行為更好的融入游戲。不需要把AI做成一個需要自己處理各種信息并做出判斷的復雜機器。一個好的sense系統(tǒng),通過操控核心輸出信息,能夠為表達“pre-conscious”行為提供清晰的引導。最終,一個多狀態(tài)sense系統(tǒng)讓AI擁有了各種微妙的反應和行為,而不是通過增加AI做決定的復雜程度。這些AI即可能是玩家的對手,也可能是盟友。

更多關于文中提到的技術和所使用的工具請見:http://www.thief-thecircle.com.

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容