像《無主之地》、《求生之路》這類遊戲,怪物的 AI 是怎麼做的?

感覺他們的怪物AI非常智能,看上去真的像個有智慧的生物。國產遊戲,甚至包括暗黑這種,怪物都笨笨的,看上去沒有什麼智商的樣子,所以導致代入感不足……


終於有人問除了渲染以外的遊戲技術問題了,那我們就來聊聊ai。
和渲染知識不太一樣,ai往往不被重視,資料也較少。大家普遍不覺得AI是什麼上流的東西,說起ai,往往只知道尋路。話說尋路演算法有4種寫法,親你知道嗎。。。這也造成了ai技術真正能做好的人並不多。
不發牢騷,我們進入正題,聊聊AAA遊戲裡面的ai系統。這裡大量描述都是基於我的開發經驗,不算很學術但是保證一定很實踐。


遊戲中的ai,可以簡單理解成sensor,decision maker,action體系。
- 所謂的sensor,就是感測器,指的是ai agent做決策需要收集的信息。用人類做比喻的話,就是你的眼耳口鼻皮膚,有各種感知世界的能力。
- decision maker,就是做決策的系統。用人類舉例子,就是你的大腦小腦。
- action,就是做出決策後的行動模塊。就是你的手、腳,負責去做事情,把你的決策實現。

有了這個框架,我們就可以做出最簡單的ai。

我們來看一個簡單的例子,fc上的坦克大戰。敵人坦克,也就是所謂的agent,ai還是比較低的。我看應該是隨機移動(也不是完全隨機,有時會往某個方向連續前進一段時間),隨機開火。在這個遊戲裡面,其實sensor是一個非常簡單的模型,就是看看哪個位置可以移動。decision maker就更簡單,隨機一下,過一段時間做個開火決定。action部分,就是控制坦克實際移動或者開火,執行來自上層的決定。

大家會說,這麼簡單的ai,我硬編碼就好了,有必要分這麼多層嗎?原因在於在這個框架里,每一層都可以獨立被擴充,這樣才能構建複雜的ai。

有了這些基礎,我們再來看複雜的fps遊戲。

對於簡單遊戲,我們的sensor可以作弊,可以輕易得到全局信息,玩家在哪裡;我們的decision maker往往不考慮環境context,任性的做出各種決定,不管合理不合理;我們的action也很粗糙,沒有精緻的動畫配合,沒有複雜的聯動。而對於那些一流遊戲,這些環節都要非常考究。

先看sensor,fps裡面的敵人,一般會做這些sensor:
首先是視覺感測器,收集玩家或其他感興趣的目標的信息,提供給decision maker,通常的實現方式是眼睛方向一個視錐體,加上距離,以及各種敵人狀態的修正,比如煙霧程度,比如敵人能力,比如敵人狀態是否在警覺狀態或者休息狀態等等,再適當考慮場景裡面的阻擋信息。splinter cell這樣的遊戲還會考慮目標點位置的光照。
其次是聽覺感測器,當你偷偷摸到敵人後面想陰他,不小心搖桿推用力了,主角小跑起來,說時遲那時快,敵人轉身開火送你一個game over,這個情況往往就是聽覺感測器發揮作用的時候。主角的行動都會產生很多虛擬的音源,行走速度越快聲音越大,戰鬥也會產生聲音,聽覺sensor可以根據綜合情況來判斷一個音源能否被agent聽到。我見過最複雜的遊戲考慮了音源在室內的衰減,還在室內各個房間做尋路來模擬衰減。。。
然後會做一些虛擬感測器,這個和遊戲玩法非常相關。比如有些遊戲強調群體合作,那就會有一些高層邏輯感測器,把隊友狀況傳過來,也可以用類似blackboard的方式來實現。有些遊戲非常script導向,戰鬥什麼預置了大量邏輯,那有很多event的感測器,隨時收集各種自定義事件,供ai參考。對於掩體戰鬥為核心的遊戲,掩體周圍的戰鬥情況,火力情況也會被考慮在內。

當感測器收到這麼多信息後,接下來就該讓decision maker發揮作用了。
決策系統可以是基於狀態機的,根據每個agent在不同的狀態,idle,battle,investigate,partol等等,對不同的事件做出不同的反應。比如一個敵人在battle狀態,這個時候收到了see player的事件,他應該馬上轉向玩家開火。如果敵人在patrol狀態see player,比較合理的方式不是馬上開火,而是播放一個動畫,表示看見玩家,或者轉到investigate狀態,調查後確認看見玩家,然後才開火。狀態機是最古老卻又最可靠的技術,現在依然活躍在遊戲編程的舞台上。
更複雜一點的系統可以是基於層次結構的狀態機,各種goal系統,或者現在流行的行為樹系統,通過各種節點來進行ai狀態管理,有可視化界面的話都可以開放部分ai工作給策劃同學,減少ai程序員的壓力。這裡不展開,網上有大把資料。順便推薦一下騰訊開源的behaviac行為樹組件,大家自己去搜,已經用在多個大型項目里了。

決策系統做完判斷以後,輸出很多可以執行的action,由action系統執行。
大量的ai其實不容易被感知到,需要非常好的動畫系統來配合,所以action系統和動畫關係非常密切。AAA遊戲中的動畫數量是驚人的,主角輕鬆可以有上千的動畫,適應不同的場景。而且在實際播放動畫的時候,往往還不能百分之百匹配場景,需要引入ik系統以及一些簡單的procedure動畫系統來用已有動畫生成一些新的動畫來播放,一個簡單的例子是戰爭機器裡面的衝刺進掩體,你會發現角色可以從任何角度衝刺並且帥氣的靠近掩體,這裡面的動畫製作,應該就是做了幾個大方向的,中間的角度通過幾個相關動畫blending做到的。又比如主角行走滑步,如果動畫做得夠好,是可以沒有滑步的,但是AAA遊戲里往往角色行走速度是可變的,平滑變化,你沒法針對每個速度做一組動畫,即使你做了,動態在運動中切換也是麻煩的事情。解決方法就是做幾個標準速度的動畫,走跑衝刺等等,然後進行中間速度的插值,選擇相鄰兩個動畫來用一定百分比混合播放。
其次行動系統還可以包括一些更高層的決策,比如駕駛車輛,操控炮塔,和場景中特定物體交互等等,單獨看來都不算難做。

綜合這些系統,把每個系統都做到非常複雜,就可以完成基礎的ai系統了。

基礎ai系統並不能完全解決問題,在遊戲開發中,有些場景的敵人ai非常聰明,這往往是應用了scripted ai,也就是預先腳本化的ai。這個腳本可以是程序員寫好的,可以是策劃寫的,也可以是圖形化工具生成的。這些腳本ai完全針對特定遊戲場景,所以可以更有針對性,更好體現遊戲玩法。當然這樣做,工作量是極大的,所以腳本ai往往只處理特定工作,在特殊時間發生的時候控制一下agent,多數時候還是會把操控權留給普通ai。

這基本就是ai系統的全貌,至於為什麼國外AAA遊戲ai這麼真實,國內這麼挫,主要是幾個原因:一是因為技術積累不同,國外的確有經驗,國內甚至就沒法找到幾個像樣的ai程序員,即使有這方面背景也一般都是在外資公司學會的。第二個原因是重視度不夠,網遊玩家不關心這個,自然就沒人用心做了。第三個原因是單機產業不發達,需要有比較好ai的體育遊戲、fps遊戲都很少涉足。


@顧煜 老師講的是個體層面的東西,除了基礎的AI系統,還包括特殊情況下觸發的腳本事件,組合形成了怪物的邏輯。如果把這些稱作演員(怪物)的自我修養的話,《求生之路》的The Director(導演系統)顯然要更勝一籌。

The Director不單單控制了單個怪物的行為方式,還在宏觀上控制著遊戲的步調與難度。熟悉遊戲的玩家肯定知道,求生之路並不像植物大戰殭屍一樣,會在固定的時間告訴你「一大波殭屍正在來襲」。而是會在不經意間用洶湧的屍潮將玩家淹沒,讓每一次遊玩都會有全新的體驗。
The Director會時刻監控玩家的狀態,包括生命、補給、所處位置等等,然後動態確定殭屍的刷新、物品的刷新,甚至能夠改變地圖的表現形式。同時,與The Director配合的還有 The Music Director,能夠根據場上形勢動態切換背景音樂以增強渲染力。

The Director將遊戲進程分為三個階段:
1.Build Up
剛出安全屋時的階段,各類殭屍的刷新較為平穩、
2.Peak
當玩家的緊張值(可量化,下文會交代)達到頂峰時會進入該階段,這通常也是戰鬥最為激烈的時候。
3.Relax
在該階段玩家會得到短暫的休息與補給時間,如果繼續前進,該階段將更快結束,並回歸到Build Up階段。
其中玩家的緊張值(Survivor Intensity)由玩家的狀態決定,被殭屍攻擊、擊殺殭屍均可以使該值上升,當玩家失去行動能力時緊張值會迅速達到頂峰。
即便如此,求生之路中依然有固定的腳本事件,比如發送求救信號並堅持到直升機飛來。這種情況下,The Director會暫時停止。可以說,腳本事件那種特殊情況特殊處理的優點也並沒有拋棄。

必須要指出的是,The Director並不等同於所謂的「動態難度」。動態難度指的是系統根據玩家的表現臨時對遊戲數值進行一些細微的調整,比如《馬克思·佩恩》中根據玩家水平的高低,系統會修改敵人的血量與瞄準的精確度。這樣導致的結果是,遊戲既不會太難也不會太過容易,永遠是與玩家的當前水平掛鉤的。換句話說就是,無論玩多少遍,遊戲體驗都很雷同。而The Director卻能夠提供戲劇化的多樣遊戲體驗,並且始終與求生之路遊戲類型一致:生存、動作、恐怖。
如果你忽略殭屍與末世背景,透過現象看本質的話,The Director其實是在一次又一次地將玩家從舒適區迅速趕出來。這種對期望的挫敗能夠最大限度地調動玩家積極性,並讓玩家對遊戲系統、個人能力與物品資源有更深刻的了解。
Gabe Newell將求生之路的這種設計模式稱為「Procedural Narrative」,原話如下:

"This is what makes procedural narrative more of a story-telling device than, say, a simple difficulty mechanism." -Gabe Newell

The Director不僅僅是一種難度調節工具,更是一種故事敘述的模式。傳統的遊戲多是通過精妙但固化的關卡設計, 以地理位置或者遊戲時間為衡量進度的標尺,來操控玩家的心理狀態。而求生之路則更加精妙,除了位置因素外,還考慮了玩家當前的遊戲狀態,通過階段轉化來調動玩家情緒,有起有落,並且不會重複,可玩性極強。每一次遊戲經歷都是一次獨一無二的故事,是由玩家與AI共同譜寫出來的。沙盒遊戲雖然也是自己創造的故事,但是畢竟沒有真正意義上的主線,玩家即是導演,雖然能夠滿足創造力豐富的部分玩家需要,但對於廣大休閑玩家來說難免會無所適從。而播片式線性遊戲又過於死板,大部分內容都是設計者已經定好的,遊戲體驗比較雷同。The Director所代表的Procedual Narrative可以視作兩者的折中,說不定未來會出現更多蘊含這類設計思想的遊戲。
————————————————————
有點跑題了...從AI設計講到了故事敘述。
部分資料來源:
The Director
Gamasutra: Ben Serviss"s Blog


歸納來說的話,有四個維度
1.行為
2.觸發
3.結果
4.規則

如何觸發,寫個10種八種觸發機制,你就會覺得很豐富
有何結果,這個就是五花八門了
每一種結果都是一種處理機制,然後結果有時能觸發其他結果,然後組合就非常龐大了
行為來說,就是一種固定行為套路,一個npc給寫4個行為腳本其實玩家就會覺得非常豐富了
以無主之地為例
小怪的行為就是巡邏----耍寶 其實也就2種 但怪物繁多,每個怪物都不同寫法,或者和其他怪物共用
然後觸發,小怪觸發方式有幾種:
攻擊方式A,B,C、被小怪目擊,血量低於XX
結果:
給予一個目標進行攻擊
開始放技能等

規則:
設定全局規則,比如這個怪不能跨越地形
比如這個怪遇到海拔高的障礙物會繞路,會火箭跳
怪物技能cd是多少

把這些東西都豐滿了,無主之地的怪物就出來了
不過美術資源和代碼工程量還真不少。。。


主專業AI的來談談AI這個問題吧,上面的顧煜前輩已經談了從遊戲開發角度來看的AI了,那麼咱試著從AI專業本體的角度來談談AI這個問題好了。

我個人認為的第0點條原因:不是AI不夠強大,而是你的電腦不夠強大。

雖然這個說法看起來比較殘酷,但是這是一個很現實的問題。我個人之前曾經做過一個基於Self-Organizing Feature Map的多層神經網路進行即時學習,一個很簡單的小遊戲,玩家操作輸入只有4個上下左右四個方向的,遊戲場景為簡單2D場景情況下,在家用級電腦(Intel i7)的CPU上,每一次學習和決策速度已經接近了百毫秒的級別,這還是在做了最大限度的簡化GUI之後的結果。

複雜一些的AI演算法其速度對於家用級的電腦來說完全無法支持。大型的人工神經網路、帶有約束補償的搜索演算法(常用於棋類遊戲)之類需要有專業計算機才能負擔的。所以對於遊戲來說,如果要保證運算速度,例如滿足60fps的刷新,那麼只能選擇一些簡單而速度更快的演算法比如說預設好的狀態機等等,所帶來的必然是「看起來很傻」。


很久以前知道過一些關於求生之路的AI創新
並不知道太詳細,稍微說一下吧。
求生之路AI有一個「總導演的AI」會負責調動所有怪物的移動方向快慢等,
AI調動取決於玩家行為,玩家消滅怪物的速度,是否負傷等。
你會發現這個遊戲你殺怪越快,當你和電腦組隊時遊戲難度會比和人組隊時低。
因為玩家隊友比電腦隊友更智能水平更高所以難度提升的會更快,每個人也會感到更難。
這個反饋設計是很成功的,玩家永遠不會因為自己太強水平太高而覺得遊戲很無聊。


無主之地的怪哪裡有ai可言。。。


在這就能感覺到無主之地的人氣有多低。。。。


求生之路1、2包,剛好是steam夏日特賣入得,好幾天了都沒玩。

關於求生之路的AI,我昨天剛好玩過,可以回答你。

遊戲裡面有個開發者選項,選中之後有個注釋,然後你可以進去遊戲,當然注釋裡面遊戲是沒有成就的。這個注釋系統,可能我玩的遊戲少,還是第一次見到。

在遊戲裡面有一堆對話氣泡,你上去按E鍵,然後就會出來開發者針對遊戲的說明。在遊戲裡面有個氣泡剛好說到AI的注釋,你可以進遊戲裡面看。

具體的上面的答案都有,我就不班門弄斧了。


真正的老司機們都了解無主之地2里當你跪地時所有小怪都會跑開對你開黑槍導致你的牛油


我認為AI最高的遊戲是單機對戰遊戲

比如街霸類的遊戲

人類的反應速度永遠達不到電腦的計算速度

所以遊戲開發者想虐玩家是很容易的事情

難度在於不能過分的虐玩家


其實說真的,求生ai不見得有多高,小殭屍前仆後繼,特感看起來走位很飄逸智商很高的樣子,其實個人感覺不過是因為其刷新時間和地點都很飄忽,所以在那種緊張環境下讓你覺得他們很牛逼,都特么會用套路了,其實不然吧

無主之地沒玩過不說了

技術活兒我不懂,就以玩家感受來說,ai特別高的還是戰爭題材遊戲,哪怕最爛大街的年貨召喚,老兵難度里的敵軍都能讓你感受到什麼是配合,什麼叫套路,你沒點人生經驗還真不一定打得過去,但是因為任務是線性的,敵人數量等也相對固定,所以在失敗幾次後就會很容易過去了

另外ai比較低的嘛,暗黑確實要算一個,不過這種刷刷刷遊戲,也真的不需要多高的ai,本來傷害已經很高,動不動把玩家打得屍體橫飛,要是再聰明點兒,那就不符合遊戲本意了,這遊戲就是讓你打得爽,並不是黑魂這種以死為主題的遊戲

那麼說到黑魂,它的ai又怎麼樣呢?我個人覺得同樣是不算高的,因為黑魂里你會死更多是因為主角能力弱,而非怪物配合好,作為主角,你血量不多,傷害不高,有硬直設定,特別在前期遇到多個怪是很難的,但是黑魂里的怪物,遠程攻擊時並不會預判玩家的行進路線打出提前量,只會往它發動進攻時玩家所在的方向打,理論上只要你不停移動,遠程攻擊很難打到你的,這一點就說明這裡的怪物戰鬥意識還是naive

說個高的吧,上古捲軸5,可能有人會說算了吧,那呆呆傻傻的npc,誠然,有時候確實npc看起來特別傻,但是打起架來可一點都不傻,尤其是跟法師打架,我是最煩的,走位風騷不說,還嗑藥,還專門兒挑你最怕的打,比如你是戰士,他就用冰系打你,耗你耐力,你是法師他就用電系打你,燒你藍,戰士怪也不差,各種意識格擋,各種抓你空隙重擊,所以很多玩家都會在一開始雄心壯志我要殺遍天下無敵手,後面全都乖乖潛行狙擊了,直待三神練就才敢出山正面肛,不過有一個很有趣的現象,老滾里的龍特別傻,而且傻得出奇,攻擊手段單一,吐息容易打斷,還特別喜歡在天上飛來飛去裝逼被衛兵教做龍,不過這是原版的情況,如果你裝了安魂曲,敵人的復仇,致命龍,巨龍領主,兇猛動物,真正的世界吞噬者等mod,請在玩之前預約心理醫生


無主之地。。。沒覺得小怪的AI有多高。。。這個問題真的不是應該用老滾5來問么hhhhhhhh


說明你玩的時間比較短,玩的時間長了什麼樣子的行動會觸發什麼樣的回應都清楚的。。。
以求生之路舉例,開燈關燈,靜步行為,與喪屍的距離,爆頭斷腿機制,推搡行為,踩頭行為,子彈的不同等(暫時只想起這麼多),都會導致喪屍的反應不一。
為毛我覺得求生的喪屍蠢爆了。。。
前求生之路深度愛好者答。


推薦閱讀:

如何看待商湯科技B輪融資4.1億美元 創AI行業融資紀錄?
小米掃地機器人的實際體驗如何?
怎麼看上海大學王興興同學做的xDog?
《星際穿越》中的機器人違反過機器人定律嗎?

TAG:遊戲 | 人工智慧 | 遊戲開發 | 遊戲策劃 | 求生之路遊戲|Left4Dead |