主題 達人專欄

[遊戲閒聊] 戰慄突擊與G.O.A.P. 給遊戲業帶來不少影響的AI架構

靈巧 | 2021-04-19 23:12:17 | 巴幣 3234 | 人氣 1181


在寫這篇的時候,我一直在思考,這到底是要放在開發知識還是遊戲閒聊?因為這篇的的確確就是在介紹一種AI的設計,可是另一方面卻也是在介紹一款遊戲的實際內容,所以最後我還是決定把它放在閒聊內吧,反正AI設計也講得不夠深嘛~

由於上一篇介紹了遊戲的AI設計中最常見的兩個AI架構(沒看過的可以點這裡)。然後我就想,Fuck it. 乾脆把我看過、覺得有趣的AI都介紹一下好了。所以接下來的這兩篇依然還是圍繞著這主題做一些非常淺的閒聊(畢竟在深一點我也看不懂)。

這次要聊的,也是現今很頻繁被使用的一個邏輯,基本上想要聰明一點的AI就會使用這套,而這就是所謂的"目標導向",英文簡稱為G.O.A.P. 而對G.O.A.P.的普及做出巨大貢獻的作品則是2005年上市的恐怖射擊遊戲:戰慄突擊(F.E.A.R)

靠!現在想想都已經是15年前的事了,學生時期玩戰慄突擊被嚇得差點濕褲子,這款遊戲真的是夭、壽、恐、怖。不過在當年,他的AI也是數一數二聰明,我到現在依然還記得被NPC戰術圍毆致死的遊戲體驗,那時真的覺得他的敵人很猛。

雖然要介紹的是恐怖遊戲(還是當年最恐怖那種),但由於這篇著重於它的AI設計,所以內容跟恐怖基本搭不上邊,可以放心閱讀,不用擔心會跟我當年一樣差點嚇尿。










目標導向(Goal Oriented Action Planning)



先來簡單哈拉一下目標導向是啥吧!

目標導向系統,全稱為 Goal Oriented Action Planning,簡稱為G.O.A.P.,是一種可以讓AI自行尋找解決方案的架構。這個AI概念早在1970年代就有了,其中也有幾次運用在遊戲中,但真正發揚光大並完全打入遊戲產業的,則是靠2005年上市的戰慄突擊,以及它的大力推動者:傑夫·奧金。

這世界上總是會有這麼幾個想搞事的,傑夫·奧金就是這麼一個,與其跟其他開發者一樣用狀態機寫個AI,他就是要將目標導向放到遊戲裡面。要知道,自1970年代,目標導向就是AI的一大難題,因為要讓AI思考並執行可沒有這麼容易,它智障起來你真的不知道它在幹嘛。而傑夫·奧金經歷了好幾年的研究,還真的讓它給整活了,並且還給遊戲業帶來了不小的衝擊。

如今這架構也跟行為樹一樣,在遊戲產業異常活躍,只要是想做看起來很聰明的AI,可能就會使用目標導向系統。


▲GOAP的推動者傑夫·奧金,以及它對F.E.A.R. AI 的心得。


目標導向會給AI設定一個目標,例如:移動至指定地點、攻擊特定單位、巡邏等等......然後,AI會自己去尋找達到目標的方式。而這個AI會自行去尋找解決方法並執行的過程,就被稱為AI Planing. 中文也就是"AI自動規劃"

這點跟之前提到的狀態機有些不同,狀態機他不但讓AI知道現在的狀態,同時也直接告訴AI"現在要做什麼",AI並沒有"規劃",它只是照當前狀態辦事而已。但目標導向則是告訴現在的目標後,就讓AI吃自己去了,所以AI就要自行規劃達成目標的方式。

要達成AI自行規劃,那就需要讓它知道環境的狀況,所以AI會不斷讀取環境資料,像是場景上有什麼、自己身上有什麼、他們是什麼狀態等等......然後把這些資料存成紀錄供自己參考用。






一堆文字雲來雲去,難以理解對吧?以下來舉個例子來讓大家看得更透徹一點:


假設世界上有一扇門,我們叫它"門1"(因為命名是很重要的),而且它是關著的,但我想要讓一個NPC去開它,那AI就會需要記錄這個門的狀態,它是開著還是關著?(畢竟去開一扇開著的門很蠢),所以當前世界的狀態就是:有一扇關著的門。

既然AI已經知道了世界有一扇關著的門1,那它就能做規劃,去打開它了。

現在,將門放在房間A與房間B之間,並且把AI放在房間A中。然後確保AI能夠獲得正確的環境資料,門1是關的,房間A與房間B的唯一通路就是門1。那麼,我們只需要給AI一個"去房間B"的目標,AI就會自己規劃路徑 -> 打開門 -> 走到房間B。

▲只要環境條件符合,那只需要給予AI一個目標,AI就會自己思考並執行要做的事。


簡單來說,這就是GOAP到底在幹嘛。讓AI自行思考該怎麼做,並按照順序去完成目標。

當然上面舉例也只是看起來可行而已,跟實際運作起來相比還有許多細節需要考慮。例如:開門時AI該站在哪? 要面對什麼方向? 像上面的舉例只有單純判斷門是關的,並且與AI在同一區,因此就邏輯上來說,AI會隔空開門。所以若要把GOAP用在遊戲中,會比單純規劃還要再複雜一些。

接下來就要來看看,戰慄突擊是怎麼實現目標導向系統的了。




------戰慄突擊

之前我們談過了狀態機為何,它是一個非常緊密的AI架構,藉由環境變化來進入其他狀態,並去執行該狀態下的行為。什麼狀態下要做什麼都訂得死死的,所以當一款遊戲複雜的時候一個AI可能擁有好幾十種狀態供切換。

然而,戰慄突擊中雖然也運用到了狀態機,不過你以為它會很複雜嗎? 但其實它就只有長這樣:

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

這她媽是三小? 就這三個狀態也能叫狀態機? 是在開玩笑逆?

並沒有,它真的就這麼簡單。驚不驚喜? 意不意外? 我第一眼看到也是挺訝異的,不過且聽我娓娓道來

這狀態機之所以這麼簡單,就要談到遊戲AI的核心目的是啥了。

其實不論什麼遊戲的AI,目標都只是在定狀況下播特定的動畫,如:移動時播移動動畫、攻擊時播攻擊動畫等等......而當這些動畫在對的時機、對的地點播出時,你就會覺得這個AI好像有點東西。

▲AI的最終的目的就是讓NPC在對的時機、對的地點播對的動畫(相反的,播錯就很智障)。




而戰慄突擊的這三個狀態,最終的目標就是:播動畫罷了。

移動狀態:是用來播走路、跑步、跳躍等.......的移動型動畫,同時讓AI位移至指定地點。

純動畫狀態:則是很簡單的,就是原地播一個動畫,例如換子彈、驚嚇或是單純的待機。

互動狀態:當然就是跟物件互動,像打開開關、坐椅子、踢桌子,或是先前就提到過的:開門。

這點就跟典型狀態機不同,比起每個行為都要一個狀態的狀態機,戰慄突擊把這些通通都扔給資料庫去處理,處理完後,再把行為和要播的動畫替換到僅有的三個狀態內就好了。而這些動畫只要播對時機點,碰!看起來聰明的AI就誕生了。

那AI要怎麼知道自己要去哪個狀態和要播什麼動畫呢? 這時就要用到之前提到的目標導向系統了。



------戰慄突擊的AI


在戰慄突擊中,任何NPC都是用同一套架構。也就是說,不論哪種型態的敵人、友軍,甚至是路邊的老鼠,也都是用目標導向系統在做事的。甚至裡面常伴主角的紅衣小妹妹也不例外,只是行為經過設計師特別設計罷了。

在這套系統下,若沒有給AI設定目標,那AI就什麼都不會做,我是說,真的,啥事都不幹,廢人一個。所以必須給予AI一個目標,這樣目標導向系統才會發揮作用,讓AI去思考現在該幹什麼,並且如何達成。

設計師設計了約70個目標能去達成,例如:巡邏、攻擊、找掩護、埋伏等等......每個目標可以被啟動、更新、移除,而且更重要的是,讓AI去評估現在要處理哪個目標。

換句話說,AI可以被給予多個目標,讓AI自己去判斷哪個比較可行,並去處理它。例如AI有"巡邏"和"殺死玩家"兩個目標,但目前沒看到玩家阿! 總不能亂槍打鳥吧? 所以既然沒看到玩家,那它就去巡邏。不過一旦看到玩家後,AI評估殺死玩家比較重要,就會以殺死玩家為主要目標。

▲遊戲中全部的AI都是使用目標導向系統,就連紅衣小妹妹都不例外。
▲AI可以一次給予多個目標,然後由AI自行判斷當前要先處理哪個。若沒發現玩家,則會處理"巡邏",一旦發現玩家,則會處理"攻擊玩家"




好啦~ 現在AI有目標了,那AI就會開始想辦法達成它。那為了達成目標,就需要一些行動提供給AI取用。遊戲中大約有120個行動可以給AI使用,讓AI根據當前狀況來安排自己要做什麼。如:換子彈、射擊、奔跑、蹲下、或甚至發呆等等...…

不過當然,並不是全部的AI都可以使用120個行動的,根據種類的不同,可以選擇的行動是不一樣的。像刺客可能會攀牆,但一般的步兵就辦不到。

最後,還要做一項保護措施,概念有點像是行為樹中斷功能,用來確保自己的計劃是否被其他AI打斷或解決,如果有,那它就要重新規劃。例如:我原本想開門的,但另一個混帳傢伙把門開了(那是我要做的欸),那麼我就要中斷開門的想法,並開始重新規劃,甚至,請求新的目標。

再訂好目標、選擇好行動,並且規劃沒有被其他渾蛋中斷的情況下,那AI就可以放心地從資料庫中提取需要的行動資料,然後扔回一開始的狀態機內,接下來,玩家就看到了劃時代的酷炫聰明AI~

▲每個種類的敵人可用的行動不同,所以刺客可以攀牆,但普通的士兵就無法這麼做。
▲AI把選擇好的行動以及對應的動畫扔進狀態機內,讓狀態機去處理接下來的事,看起來炫酷屌爆的聰明AI就完成了。











總結


戰慄突擊的目標導向系統對遊戲產業來說是一個非常巨大的貢獻。尤其是當年才2005年,大家都還在有限狀態機的AI架構下做事,對於讓AI變聰明這一點來說是一個麻煩的領域。因為再怎麼說,有限狀態機的行為都是寫死在狀態裡的,熟悉了就不難預測。

而戰慄突擊透過目標導向系統直接讓AI有了自行思考的方法,這樣子的設計可以讓AI自己透過對於當前當前狀況的感知來決定自己現在幹嘛,並不是死的狀態機架構,而是讓AI自己去尋找"最佳解"。這點就讓AI看起來格外聰明,因為它是真的在尋找對付玩家的最佳處理方式。

另外值得一提的是,戰慄突擊中的AI其實並無法感知其他AI的存在,簡單來說他們並不知道自己有隊友,他們只是在做自己認為最佳的行動而已。但因為給予的目標不同,所以他們不但沒有互扯後腿,反而看起來就像是精彩的互相合作,這點想想其實還蠻猛的。

如今距離戰慄突擊上市已經16個年頭了,這個目標導向的系統依然在遊戲業活躍得不行,很多3A級大作,如:垂死之光、魔多之影、全軍破敵系列等等......依然靠著這個架構來讓自己的AI看起來更加聰明、增加遊戲的挑戰性以及耐玩度。

這次的閒聊其實更像是翻譯,因為這也只是我從網路上找那些外文的GOAP資料,然後把它用淺顯易懂的中文寫出來罷了。畢竟我也不是什麼很厲害的程式大師,只是單純覺得這很值得一提。

若讀者對於恐怖遊戲不排斥的話,個人是非常推薦去玩玩看戰慄突擊的。撇開它對於AI設計的貢獻,它的恐怖氣氛拿捏也是頂尖水準。就算對AI設計不感興趣,但體驗一款優秀的恐怖射擊遊戲不吃虧阿! 對吧?

那這次就先聊到這裡,之後還有一篇跟AI相關的專題,而且還是近代的作品,各位可以猜猜看是個啥XDD(提示:跟外星人有關)。那接下來也請大家多多捧場囉~ 我是靈巧,下次再見。


參考資料:

其他AI相關文章:


送禮物贊助創作者 !
0
留言

創作回應

角落の邊緣卿
我印象中F.E.A.R.一代的AI在當時滿厲害的
常常會出現一人在壓制主角,另一個突然從旁邊冒出來肛你
然後有些不能繞的圖AI又會很龜
而且有時候你在龜的時候,他們會丟巴辣把你逼出來,接著你就被2~3個人輪著射你滿臉
2021-04-19 23:36:08
靈巧
那時F.E.A.R.的AI算是很頂尖的,AI時常可以做出一些意想不到的戰術把玩家打趴。而且危險的時候也不會腦衝,當初玩被射掛超多次
2021-04-19 23:49:11
夫風若雪
所以也可以說CYBERPUNK的AI設計很低能嗎XDD? (低能到好笑...orz)
我原本以為是程式設計的問題?
2021-04-20 09:26:19
靈巧
低不低能我不敢說,但好笑是真的好笑XDD
2021-04-20 14:01:44
希特勒元首
https://truth.bahamut.com.tw/s01/202104/1056cf061df2714357bcc1808f258630.JPG
2021-04-20 22:57:26
希特勒元首
還差一個資料片就收齊整個系列,真難找。。。
2021-04-20 22:58:10
靈巧
我只有1跟3,而且3還沒玩過XDDD,特價時買的
2021-04-21 10:52:04
小鸚
優文 不愧是業界
2021-04-23 06:53:32
靈巧
過獎了,我只是把看到覺得有趣的東西分享一下而已啦
2021-04-23 21:58:37
追蹤 創作集

作者相關創作

更多創作