明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

游戲引擎剖析(10)

[摘要]原文作者:Jake Simpson譯者: 向海Email:GameWorldChina@myway.com 第10部分: 人工智能和導(dǎo)航(路徑發(fā)現(xiàn))人工智能(AI)  我們上面已經(jīng)用了其他九個(gè)章節(jié)介紹了游戲引擎,現(xiàn)在讓我們深入到非常有趣和重要的人工智能主題。人工智能如今正在變成被談?wù)摰米疃嗟膬H次于...
原文作者:Jake Simpson
譯者: 向海
Email:GameWorldChina@myway.com


第10部分: 人工智能和導(dǎo)航(路徑發(fā)現(xiàn))


人工智能(AI)
  我們上面已經(jīng)用了其他九個(gè)章節(jié)介紹了游戲引擎,現(xiàn)在讓我們深入到非常有趣和重要的人工智能主題。人工智能如今正在變成被談?wù)摰米疃嗟膬H次于游戲引擎渲染能力的游戲開發(fā)領(lǐng)域之一,確實(shí)如此。直到大約兩年半以前,游戲似乎主要是在考慮你能夠渲染多少個(gè)多邊形,眼睛是多么的漂亮,和… 好…勞拉的胸部是多么的有彈性...既然我們現(xiàn)在已經(jīng)能夠渲染出非常真實(shí)的乳房,中心就開始轉(zhuǎn)移到我們實(shí)際上用那些多邊形做什么了(即玩游戲)。因?yàn)樗o你提供實(shí)際玩游戲的刺激作用和參與游戲世界中正在進(jìn)行的事情,所以人工智能在這個(gè)領(lǐng)域非常關(guān)鍵。

  人工智能包括了全部的東西,從在Tetris中決定哪一塊新磚頭掉落(這很大程度上知識(shí)一個(gè)隨即數(shù)產(chǎn)生器), 一直到創(chuàng)造基于小組的策略游戲,這些游戲和你交互,并且實(shí)際上在你玩的時(shí)候向你學(xué)習(xí)。人工智能包含了許多規(guī)則,如果你(作為一個(gè)游戲開發(fā)者)沒有花費(fèi)足夠多的時(shí)間讓它正確地工作,它會(huì)反過來在你屁股上咬一口。所以讓我們談?wù)撘恍┠男┮?guī)則?這樣你能更好地理解人工智能系統(tǒng)會(huì)確實(shí)是多么的復(fù)雜。為了避免法律上的糾紛,我們將使用一個(gè)假設(shè)的游戲而不是一個(gè)真實(shí)的游戲作為例子。

  假設(shè)我們的游戲中有壞份子生活在3D世界中,干著他們的事情,而且如果你打攪了他們的正常次序他們就會(huì)反抗你(玩家)。你必須決定的第一件事情就是他們正在從事的到底是什么事情呢?他們正在守衛(wèi)什么東西嗎?在巡查?在計(jì)劃一個(gè)聚會(huì)?在購買食品雜貨?在整理床鋪?建立行為的基線是游戲開發(fā)者的工作之一。一旦有了這個(gè),你就總有NPC(非玩家角色)或計(jì)算機(jī)控制的‘人’能夠恢復(fù)去做的事情,玩家與他們的交互就應(yīng)當(dāng)能被完成。

  一旦我們知道一個(gè)NPC角色需要做什么 — 比如它在守衛(wèi)一扇門,并且在這個(gè)區(qū)域小巡邏,NPC也必須有‘世界意識(shí)’。游戲設(shè)計(jì)者需要決定NPC的人工智能將如何看見世界,和它的知識(shí)范圍。你將會(huì)僅僅說“計(jì)算機(jī)知道正在進(jìn)行的每件事情” 嗎?這通常被認(rèn)為是一件糟糕的事情,因?yàn)榉浅C黠@計(jì)算機(jī)能夠看見和聽見你不能看見和聽見的事情,這被當(dāng)成是在作弊。不是一種有趣的經(jīng)歷;蛘吣銓⒛M他的視野,這樣他只能夠?qū)λ芸匆姷氖挛镒鞒龇磻?yīng)嗎?當(dāng)有墻壁出現(xiàn)時(shí)這里就有問題了,因?yàn)槟汩_始進(jìn)入那些我在第九部分提到的‘追蹤’例程,看看NPC是否試圖對被墻壁擋住的人作出反應(yīng)。這是一個(gè)很明顯的人工智能問題,但是當(dāng)涉及到門和窗戶時(shí),這個(gè)甚至變得更加復(fù)雜了。

  當(dāng)你開始為AI刺激例程增加聽覺意識(shí)時(shí),這依然變得更加復(fù)雜了。但是,這個(gè)意識(shí)是那些關(guān)鍵的“小事情”之一,這些使得假想的游戲世界似乎更加真實(shí),或者能夠去除懷疑的懸念。如果你碰到過這樣的事情,請舉手:你在槍戰(zhàn)中跟一個(gè)NPC交戰(zhàn),免除了一個(gè)NPC,你繞著角落行走并遇到了另外一個(gè)NPC依然保持他的缺省行為模式,沒有意識(shí)到剛剛發(fā)生的事情,F(xiàn)在,槍是嘈雜的事物,槍戰(zhàn)可能已經(jīng)明顯地提醒了一個(gè)“傾聽”的NPC有些事情正在進(jìn)行。避免這種事情的技巧在于找到一個(gè)有效的方式來決定聲源(即你武器的發(fā)射)的距離是否足夠接近到NPC能夠聽見。

  接下來就是決策例程。當(dāng)我們的巡邏NPC角色能夠聽到但不能看見某物時(shí),你試圖實(shí)現(xiàn)什么樣的行為呢?他去尋找它嗎?不理睬它?你如何決定什么是重要的聲音他應(yīng)該去或者不去調(diào)查?如同你看見的一樣,這會(huì)很快變得非常的復(fù)雜。有很多方法來建造處理這些事情的代碼,但通常這樣是一個(gè)好主意,建立一個(gè)不是對特定的NPC而是對所有的NPC都起作用的系統(tǒng),該系統(tǒng)基于你能夠在游戲引擎以外的文本文件中建立的屬性。這樣就不需要程序員為一個(gè)給定的角色而改變AI,并且如果你對游戲代碼做了改動(dòng),它將立即自動(dòng)地應(yīng)用到所有的角色,這在大多數(shù)情況下是一件好事情。

  其他的世界意識(shí)問題會(huì)冒出來,比如這樣的情形,兩個(gè)守衛(wèi)彼此緊挨著站立,你用狙擊武器干掉了一個(gè),而另外一個(gè)站在哪兒完全不知已經(jīng)發(fā)生的事情。再者,遵守真實(shí)世界行為的細(xì)節(jié)是一款好游戲和一款偉大游戲的之間的區(qū)別。

  讓我們說你已經(jīng)把所有的刺激-響應(yīng)部分準(zhǔn)備好了—你已經(jīng)掃描了世界,決定NPC應(yīng)當(dāng)對正在進(jìn)行的一些事情作出反應(yīng)—他聽到了玩家角色發(fā)出了聲響—并且你(游戲開發(fā)者)決定了他應(yīng)當(dāng)對這個(gè)做些什么—他將去調(diào)查。現(xiàn)在更加復(fù)雜的事情來了。他如何離開現(xiàn)在的位置,到達(dá)他認(rèn)為發(fā)出聲音的地方,而不會(huì)想通常的數(shù)字傻瓜一樣跑到墻壁里面,碰到家具呢?繼續(xù)往下看…


有關(guān)正確的路徑 --- 世界導(dǎo)航
  快速,準(zhǔn)確的世界導(dǎo)航( 也叫做路徑-發(fā)現(xiàn)) 近來已經(jīng)成為游戲開發(fā)者的圣杯。 讓它看起來非常信服是一件非常困難的事情。你需要有局部世界的地理知識(shí)—墻壁的位置,臺(tái)階,懸崖和建筑物等的邊緣。你也需要世界中的對象的知識(shí)—比如家具,汽車,尤其是其他人的位置。真正最后的因素是問題所在,一會(huì)兒我們將回到這一點(diǎn)上。

  世界導(dǎo)航通常被分為兩個(gè)領(lǐng)域,世界導(dǎo)航和局部導(dǎo)航。二者實(shí)際上只是范圍上的區(qū)別,但大多數(shù)的程序員分別對待它們,因?yàn)檫@樣處理起來容易一些。世界導(dǎo)航例程處理理解房間,門和一般的地理學(xué),并計(jì)算出讓玩家或者角色從世界中的A點(diǎn)到達(dá)B點(diǎn)的一條路徑!八鼘⒆屇銖腁點(diǎn)到達(dá)B點(diǎn)”,這是一句很容易說的話,不是嗎?說起來容易,但做起來很困難。理解世界是一個(gè)非常復(fù)雜問題,我已經(jīng)看到過許多嘗試過的解決辦法。QuakeIII的機(jī)器人遵照建造的預(yù)先處理過的地圖,一般的說法,使用原來地圖的地面。預(yù)處理器檢測地面元素,由地圖建造者作上標(biāo)記,并自己建造一個(gè)只使用地面的世界簡化地圖。機(jī)器人并不關(guān)心墻壁,因?yàn)樗麄儚牟唤咏鼈,就像他們遵照地面的地圖一樣,設(shè)計(jì)上已經(jīng)把避免墻壁構(gòu)造在里面了。

  其他方法在地圖本身里面建造一些小的結(jié)點(diǎn),AI可以追隨它們。這些結(jié)點(diǎn)通常被建造在彼此的視線里面,有從一個(gè)結(jié)點(diǎn)到其他所有結(jié)點(diǎn)的連接,角色AI能夠直接‘看見’,所以你就確保了從一個(gè)結(jié)點(diǎn)移動(dòng)到另外一個(gè)結(jié)點(diǎn)時(shí)AI不會(huì)試圖穿越墻壁。如果有門或者降落物,你能夠事先用這些結(jié)點(diǎn)對路徑的信息編碼,于是NPC能夠采用適當(dāng)?shù)男袨椤群螂娞荩蜷_一扇門,或者從一點(diǎn)跳到另外一點(diǎn)。這實(shí)際上是HereticII使用的系統(tǒng),也是Raven在他們其他的大多數(shù)游戲中使用的系統(tǒng)。

  關(guān)于這個(gè)主題,3D Realms的Jess Crable,現(xiàn)在為Duke Nukem Forever工作,如是說:

  "導(dǎo)航在許多方面是個(gè)巨大的挑戰(zhàn),主要是當(dāng)游戲中有大量正在發(fā)生的事情和一些非計(jì)劃性的東西,比如障礙。為了避免和(或)真實(shí)地對非計(jì)劃性的障礙物導(dǎo)航(例如像另外的AI),AI需要很好地知道正在它周圍發(fā)生的事情。比較而言另外一個(gè)巨大的挑戰(zhàn)就是真實(shí)感。如果AI正在表現(xiàn)玩家在實(shí)際生活中看到的一些東西,比如說一個(gè)人,或者一條狗, 那么讓它看上去真實(shí)可信就更加困難。"

  然后就是局部導(dǎo)航。我們可能有一條路徑讓我們的 NPC 從他在世界中的位置,移動(dòng)到他認(rèn)為聽到聲音的地方,但你不能盲目地按照這個(gè)執(zhí)行并期望得到看起來不錯(cuò)的結(jié)果。這種性質(zhì)的路徑傾向于非常特定于一個(gè)給定的目的。當(dāng)你沿著走廊從一個(gè)房間跑到另外一個(gè)房間時(shí),它很好,但如果你試圖指導(dǎo)他穿越一個(gè)巨大的房間時(shí),路徑結(jié)點(diǎn)方法容易最終得到一些看起來很奇怪的發(fā)現(xiàn)路徑。這些路徑也不是動(dòng)態(tài)的。因?yàn)樗麄儽活A(yù)先建造,他們不容易考慮到世界的任何動(dòng)態(tài)變化。桌子可能有被移動(dòng)過了,椅子被破壞了,墻壁被摧殘,當(dāng)然,人們會(huì)移動(dòng)。這就是局部導(dǎo)航不同于世界導(dǎo)航的地方。它必須考慮局部世界并導(dǎo)航NPC在里面穿越。它必須知道周圍的環(huán)境,存在哪些可以選擇的路徑,并決定選擇哪一條。

  在局部導(dǎo)航中最大的問題是其他的NPC。給定一個(gè)發(fā)現(xiàn)路徑的具體例程,如果你在相同的一般區(qū)域中有不止一個(gè)NPC,他們都試圖到達(dá)世界的同一地點(diǎn),結(jié)果是他們都非常容易有相同的路徑。然后他們試圖沿著這個(gè)路徑行進(jìn),結(jié)果彼此遇到一起,然后花費(fèi)他們所有的時(shí)間試圖將彼此分開,并且一旦成功地分開了,他們再次試圖到達(dá)目標(biāo),然后我們又再次看到同樣的事情發(fā)生。這一切看起來都是非常的愚蠢,這不是大多數(shù)人想要的效果。所以需要一些路徑發(fā)現(xiàn)中的變化來避免這種情形,需要一些妥善處理避免的代碼。有大量能夠幫助解決這種情形的算法。


人工智能和角色動(dòng)畫問題
  當(dāng)然,當(dāng)角色自己在世界中行走時(shí)你必須完全地決定你想要角色播放什么動(dòng)畫。聽起來無足輕重?不是的。關(guān)于這個(gè)主題,Raven的 Chris Reed—Soldier of FortuneII使用名為LICH的AI系統(tǒng)的現(xiàn)在的負(fù)責(zé)人—如是說:

  "此刻我能告訴你,我們在平滑移動(dòng)上正有著最大的困難。在一個(gè)多丘陵的長滿草的叢林中試圖讓五個(gè)角色在彼此附近行走是一個(gè)非常困難的問題。讓底層系統(tǒng)完美是重要的,因?yàn)槌墙巧谳^低層次上(避免墻壁,適當(dāng)?shù)膭?dòng)畫)看起來真實(shí),他們不能夠有效地表達(dá)任何較高層次決定的智能。由于這個(gè)單獨(dú)的原因,動(dòng)畫和底層的移動(dòng)是最重要的和最難實(shí)現(xiàn)的。它確實(shí)需要完美。"

  因此我們已經(jīng)讓我們的角色從A點(diǎn)到達(dá)了B點(diǎn),他自己穿越世界,在途中避免障礙物,正確播放動(dòng)畫,現(xiàn)在到達(dá)了這里。他看見了你。接下來做什么呢?很明顯更多的是作出決策。他將向你射擊。太棒了。你回應(yīng)射擊,F(xiàn)在干什么?當(dāng)他試著逃走的時(shí)候,現(xiàn)在你再次經(jīng)歷全部同樣的事情。

  為了讓這些情形看起來令人信服,你看見了這里必須要處理的大量問題。如果你建立你的AI使用沒有動(dòng)畫的行為讓NPC執(zhí)行,這能被混合。一些Soldier of Fortune中的AI就是這樣的例子。他們受到了指責(zé),因?yàn)閴募一餂]有以適當(dāng)?shù)姆绞綄Υ碳ぷ鞒龇磻?yīng)。當(dāng)他們明顯應(yīng)該這樣做的時(shí)候,敵方NPC不掃射,或者不逃跑。部分問題是他們沒有掃射敵人NPC的動(dòng)畫,或者讓他們往回跑,因?yàn)榭臻g的問題。因此世界上所有最偉大的AI代碼都不能夠解決這個(gè)問題。這是所有要考慮的重要事情。

  想知道隱藏的難點(diǎn)嗎?看看我前面所有的描述,然后試著將它應(yīng)用到一組NPC上,這些NPC彼此必須說話,設(shè)定目標(biāo),彼此溝通,但不妨礙彼此的方式。一旦你這么做了,試試那些代碼,作為玩家的隊(duì)友做上面所描述的這些,然而不要在槍戰(zhàn)中妨礙他。現(xiàn)在這是復(fù)雜的。然后這成為樂趣。這是最困難的部分。Raven的 Chris Reed關(guān)于AI‘感覺’的一些評(píng)論:

  "我認(rèn)為反饋是AI的一個(gè)極大的問題。如果角色對于他周圍環(huán)境的變化不產(chǎn)生反應(yīng),游戲的真實(shí)感就被完全打破了。這有許多明顯的例子(聽見槍炮聲,看見同伴被擊中...),以及一些更加微妙的事情(當(dāng)兩個(gè)人通過門廳時(shí)看著彼此并點(diǎn)頭致意)。玩家是樂意接受一些生硬和可預(yù)測性的,但是這些事物容易把游戲帶到現(xiàn)實(shí)生活。"

  并且Jess Crable 贊同:

  "平衡是非常重要的… 對玩家將會(huì)有多大的樂趣至關(guān)重要,但還有其他的問題要平衡。游戲玩家時(shí)常說他們想在游戲中看見更加真實(shí)的人工智能。然而,太多的真實(shí)感開始把樂趣帶走。在這兩者之間必須要有一個(gè)好的平衡。變化和隨機(jī)同樣也很重要—行為的變化,和保持在可信范圍內(nèi)的一定程度的不可預(yù)測性。"


游戲規(guī)則與自然發(fā)生的游戲
  在我們關(guān)于AI的所有描述中,我們采用的是FPS的方式。有不止一種的AI。我們已經(jīng)描述的是處理3D世界一組規(guī)則。AI遠(yuǎn)遠(yuǎn)不止這些。時(shí)常最好的AI實(shí)際上非常的簡單。它就是一組規(guī)則,玩家必須響應(yīng)和處理的響應(yīng)(或開始)動(dòng)作的規(guī)則。

  這里應(yīng)當(dāng)處理一個(gè)被稱為“自然發(fā)生的游戲”的專業(yè)術(shù)語。 自然發(fā)生的游戲本質(zhì)上創(chuàng)造游戲?qū)⒆袷氐囊?guī)則,那將會(huì)造成游戲程序員不能預(yù)見的情形。

  舉例來說,象棋能被認(rèn)為是自然發(fā)生的游戲。有一組規(guī)則,但游戲能夠陷入各種程序員不能夠以個(gè)別方式處理的情形。你不能為每一種可能的棋局情形編碼規(guī)則。很清楚,游戲玩家每次不會(huì)總是面臨相同的游戲情景。一定程度上,進(jìn)行中的游戲情形會(huì)根據(jù)他的行動(dòng)而發(fā)生變化。Black and White是這種情形的一個(gè)完美的例子,和The Sims一樣—游戲有它自己的規(guī)則,但你如何運(yùn)用和調(diào)和他們是你自己的事情。實(shí)際上,你在玩游戲的過程中創(chuàng)造著游戲,而不是照著游戲設(shè)計(jì)者/程序員已經(jīng)為你定義的路線進(jìn)行。

  有可能把基于規(guī)則的,自然發(fā)生的游戲方式和FPS環(huán)境混合在一起。Half Life中的一些海軍陸戰(zhàn)隊(duì)士兵的行為就是這樣做的—壓制火力和側(cè)翼攻擊從設(shè)定的規(guī)則中動(dòng)態(tài)完成。它看起來是動(dòng)態(tài)的,而且一定程度上它是這樣。然而,在FPS世界中僅僅有一組規(guī)則時(shí)常是不夠的。幾何和其他AI時(shí)常能夠打敗簡單的規(guī)則,這讓保持正確并依然有趣變得更加困難。所以對那些可憐的AI程序員有一些同情心吧。他們的工作不容易。


  好吧,下面還有一個(gè)章節(jié),僅僅還剩下一個(gè)章節(jié)了。在最后的章節(jié)里,我們將討論頭頂顯示,菜單系統(tǒng),游戲定制和配置,游戲引擎版權(quán)與建造,最后是游戲“mods”。


標(biāo)簽:游戲引擎剖析(10)