張 凱
摘要:游戲軟件開(kāi)發(fā)工作量的增大和數(shù)據(jù)整合的困難孕育了游戲引擎的產(chǎn)生,游戲引擎應(yīng)采用分層次的體系結(jié)構(gòu),以抽象和封裝接口。而這又給游戲人工智能的設(shè)計(jì)提供了基礎(chǔ)和問(wèn)題的定義。
關(guān)鍵詞:游戲軟件開(kāi)發(fā);游戲引擎;人工智能
1引言
由于計(jì)算機(jī)軟硬件的發(fā)展,計(jì)算機(jī)游戲的畫(huà)面表現(xiàn)力達(dá)到了與電影相媲美的高度,隨之帶來(lái)了對(duì)游戲軟件的可玩性相應(yīng)提高的要求。由于 3D 圖形技術(shù)、虛擬現(xiàn)實(shí)技術(shù)及相關(guān)軟件和硬件的發(fā)展,使得計(jì)算機(jī)游戲開(kāi)發(fā)者們能夠創(chuàng)造更加吸引玩家,更有視覺(jué)投入感的游戲世界。游戲軟件的下一個(gè)進(jìn)步應(yīng)該是提供更加真實(shí)可信的人工智能。硬件的圖形和聲音處理系統(tǒng)的發(fā)展,解放了更多的系統(tǒng)資源,這使得在游戲中實(shí)現(xiàn)更加精細(xì)的人工智能成為可能和必然的方向。越來(lái)越多的游戲品牌將其賣(mài)點(diǎn)放在了實(shí)現(xiàn)更加可信和真實(shí)的人工智能上來(lái)。
2 游戲引擎及其對(duì)人工智能設(shè)計(jì)的影響
隨著軟硬件的發(fā)展,現(xiàn)今的計(jì)算機(jī)游戲的復(fù)雜度已經(jīng)達(dá)到了一個(gè)難以想象的高度。這不僅表現(xiàn)在游戲程序設(shè)計(jì)上,更表現(xiàn)在夠整合大量的不同的人力資源和數(shù)據(jù)資源的一套完整的系統(tǒng)上。例如,先進(jìn)的 3D 圖形技術(shù)提高了游戲世界的細(xì)節(jié)的表現(xiàn)力,導(dǎo)致游戲項(xiàng)目中美術(shù)工作者所占全部開(kāi)發(fā)者的比重和游戲中在程序邏輯之外的數(shù)據(jù)部分的顯著增加。這就造成了數(shù)據(jù)整合工作的困難和游戲復(fù)雜度的相應(yīng)提升。于是游戲引擎的概念應(yīng)運(yùn)而生:為了減少重復(fù)開(kāi)發(fā)工作以降低開(kāi)發(fā)成本,不同的游戲可以共用相同的游戲引擎。游戲引擎不但提供數(shù)據(jù)整合、關(guān)卡設(shè)計(jì)的工具,更為編程人員提供了統(tǒng)一的接口,使底層的實(shí)現(xiàn)得到封裝和重用。這為游戲 AI 的設(shè)計(jì)提供了基礎(chǔ),提供了游戲中的角色所能進(jìn)行的行為的一個(gè)層次描述。這里分層次的的系統(tǒng)設(shè)計(jì)起著重要的作用。例如,一個(gè)只支持游戲中角色的位置變動(dòng)層次的游戲引擎,顯然不需要為其角色的肢體行為設(shè)計(jì)人工智能。而即使是提供了低層細(xì)節(jié)(例如程序中對(duì)角色肢體的控制)的游戲引擎,也應(yīng)該可以限定人工智能模塊工作在較高的層次之上(例如僅僅用 AI 程序處理角色的位置移動(dòng)),這降低了問(wèn)題的復(fù)雜度。所以在設(shè)計(jì)與實(shí)現(xiàn)游戲中的人工智能之前,首先應(yīng)該完成基本的游戲引擎系統(tǒng)的設(shè)計(jì),明確游戲引擎提供的接口的層次結(jié)構(gòu)和人工智能設(shè)計(jì)的最小粒度。這相當(dāng)于明確人工智能所要處理的問(wèn)題的定義。
3游戲引擎層次體系結(jié)構(gòu)
3.1 機(jī)器人的三層軟件體系結(jié)構(gòu)
由于具有相似的應(yīng)用環(huán)境,游戲程序可以采用與機(jī)器人的三層軟件體系結(jié)構(gòu)相似的體系結(jié)構(gòu)。在機(jī)器人學(xué)中,機(jī)器人的軟件體系結(jié)構(gòu)必須決定如何將反映式控制和基于模型的思考模式相結(jié)合。反應(yīng)式控制是傳感器驅(qū)動(dòng)的,適合于實(shí)時(shí)地制定低層次決策,而思考式控制適用于依賴(lài)于在進(jìn)行決策的時(shí)候不能感受到的信息的全局控制決策。混合體系結(jié)構(gòu)將反應(yīng)與事先思考相結(jié)合。而最為流行的混合體系結(jié)構(gòu)是三層體系結(jié)構(gòu),它由一個(gè)反應(yīng)層、一個(gè)執(zhí)行層和一個(gè)思考層組成。反應(yīng)層為機(jī)器人提供低層次的控制,具有緊密的傳感器-行動(dòng)循環(huán)。執(zhí)行層接受思考層發(fā)出的指令,序列化以后傳送給反應(yīng)層,起著反應(yīng)層和思考層之間的粘合劑的作用。思考層利用規(guī)劃生成復(fù)雜問(wèn)題的全局解。
相應(yīng)于機(jī)器人的三層體系結(jié)構(gòu),整個(gè)游戲引擎中實(shí)現(xiàn)的接口可以劃分為低層接口、中層接口和高層接口三層。除了像在機(jī)器人軟件體系中,區(qū)分不同控制和決策層次的作用外,三層接口的引擎結(jié)構(gòu)可以帶來(lái)如下好處:
首先,起到了抽象和封裝程序接口的所用。上層接口對(duì)下層接口的調(diào)用是透明的。其次,促進(jìn)項(xiàng)目組內(nèi)承擔(dān)不同開(kāi)發(fā)任務(wù)的開(kāi)發(fā)者明確分工和協(xié)同工作。圖像和音效等的底層實(shí)現(xiàn)、人工智能算法的實(shí)現(xiàn)、動(dòng)畫(huà)數(shù)據(jù)的整合、高層游戲邏輯的編寫(xiě)等等,每一項(xiàng)工作都明確的位于一個(gè)唯一的層次中。這在常常包含上百人的大型項(xiàng)目中,對(duì)于開(kāi)發(fā)工作的組織和管理是非常必要的,因?yàn)椴粌H設(shè)計(jì)者、美術(shù)工作者、程序員等需要明確分工,程序員內(nèi)部更是如此。
3.2低層接口
低層接口主要提供基本的 3D 渲染、物理計(jì)算、角色的運(yùn)動(dòng)控制和角色動(dòng)畫(huà)系統(tǒng),這其中與人工智能密切相關(guān)的是角色的運(yùn)動(dòng)控制和角色動(dòng)畫(huà)系統(tǒng)。低層接口的運(yùn)動(dòng)控制,是最基本的操作,它僅是對(duì)角色的位置和朝向的控制,與角色的屬性沒(méi)有關(guān)系。而與角色的屬性相關(guān)的運(yùn)動(dòng),如速度、加速度的實(shí)現(xiàn),甚至是一些高層的運(yùn)動(dòng)行為(例如,一輛汽車(chē),它的速度的方向必須與其朝向一致,而速度方向的改變,只能依靠側(cè)向的轉(zhuǎn)向力)的實(shí)現(xiàn),是中層接口實(shí)現(xiàn)的任務(wù)。而這個(gè)實(shí)現(xiàn)正是通過(guò)對(duì)低層接口的調(diào)用來(lái)實(shí)現(xiàn)的。角色動(dòng)畫(huà)控制提供對(duì)動(dòng)畫(huà)序列的調(diào)用與混合,完成逼真可信的角色動(dòng)畫(huà)。同樣底層接口的動(dòng)畫(huà)控制是對(duì)單個(gè)動(dòng)畫(huà)序列的操縱,不應(yīng)包含任何邏輯上的動(dòng)畫(huà)序列的組織,那是中層接口的任務(wù)。
3.3中層接口
中層接口通過(guò)利用低層接口提供的運(yùn)動(dòng)和動(dòng)畫(huà)控制功能,實(shí)現(xiàn)角色更高層次行為的接口功能。例如用戶(hù)可以通過(guò)中層接口的調(diào)用來(lái)控制角色從一個(gè)地點(diǎn)行走到另一個(gè)地點(diǎn),而行走過(guò)程中的角色動(dòng)畫(huà),正是調(diào)用低層接口實(shí)現(xiàn)的,而其實(shí)現(xiàn)對(duì)于低層接口的用戶(hù)(即中層接口的實(shí)現(xiàn)代碼),是透明的。
3.4高層接口
可以規(guī)定只有高層接口包含人工智能算法的實(shí)現(xiàn),即 AI 程序員只能調(diào)用中層以上的接口。例如一個(gè)高層接口的調(diào)用,可以控制角色向敵人攻擊,而攻擊過(guò)程中的行動(dòng)、戰(zhàn)術(shù)(是從正面進(jìn)攻,還是從側(cè)面包抄?使用步槍,還是使用手雷?)等,正是通過(guò)具體的人工智能算法,調(diào)用中層接口提供的功能來(lái)實(shí)現(xiàn)的。
高層接口可以提供給關(guān)卡設(shè)計(jì)師,來(lái)完成游戲?qū)嶋H內(nèi)容的創(chuàng)建。這些接口往往包含較少的程序邏輯控制,可以供非程序員的設(shè)計(jì)人員使用,這通常需要實(shí)現(xiàn)某種簡(jiǎn)單的,或接近自然語(yǔ)言的腳本語(yǔ)言。有些游戲引擎甚至提供圖形化的工具來(lái)方便這一工作,這樣,項(xiàng)目中的非編程人員(如游戲設(shè)計(jì)者),也可以參與游戲的具體開(kāi)發(fā),以減少工作流程。
4 人工智能引擎的優(yōu)化
雖然 AI 計(jì)算在整個(gè)游戲中的比重不斷提高,但圖形渲染模塊仍需要占用絕大多數(shù)系統(tǒng)資源,分配給 AI使用資源是相當(dāng)有限的。除了對(duì) AI算法本身進(jìn)行優(yōu)化外,從 AI 引擎層次上的優(yōu)化更為有效。通常有如下幾個(gè)優(yōu)化的方面:
4.1 載荷平衡(LoadBalancing)
載荷平衡主要有兩種實(shí)現(xiàn)方法:
將 AI 計(jì)算按照一個(gè)預(yù)定的進(jìn)度運(yùn)行(如每 2 秒鐘計(jì)算一次),而不同的個(gè)體之間的計(jì)算請(qǐng)求錯(cuò)開(kāi)。
增量計(jì)算,現(xiàn)得到一個(gè)大致的結(jié)果,之后逐漸計(jì)算改善。許多尋路算法用這種方法,現(xiàn)計(jì)算一個(gè)大致的運(yùn)動(dòng)方向,再逐漸精化。
4.2 LevelofDedail 人工智能
受到三維圖形領(lǐng)域的細(xì)節(jié)級(jí)別(LOD,LevelOfDetail)的啟發(fā),許多游戲?qū)崿F(xiàn)了一定的 AI 細(xì)節(jié)級(jí)別控制。這種優(yōu)化是有必要的。例如,玩家完全看不到,或在離視點(diǎn)很遠(yuǎn)的地方,角色被表現(xiàn)為幾個(gè)像素。而這時(shí),若角色仍在進(jìn)行復(fù)雜的 AI 算法計(jì)算,是沒(méi)有必要的。
然而,目前還沒(méi)有統(tǒng)一的細(xì)節(jié)級(jí)別方法。這是因?yàn)?每個(gè)元素并沒(méi)有統(tǒng)一的表現(xiàn)形式(不同于三維圖形,場(chǎng)景中的所有物體的模型都有多邊形表示,模型的細(xì)節(jié)可以表現(xiàn)為多邊形的增減),所以還沒(méi)有形式化研究的可能性。首先需要定義若干細(xì)節(jié)級(jí)別,如離屏、很遠(yuǎn)、較遠(yuǎn)、中等、較近、直接交互,并且建立一個(gè)細(xì)節(jié)級(jí)別系統(tǒng),游戲中的每個(gè)對(duì)象可以請(qǐng)求這個(gè)系統(tǒng)以得到自己當(dāng)前的細(xì)節(jié)級(jí)別。然后是定義在每個(gè)細(xì)節(jié)級(jí)別下角色的表現(xiàn)行為。一種實(shí)現(xiàn)方法是對(duì)每一個(gè)行為,為不同的細(xì)節(jié)級(jí)別使用不同的解決方法,這種方法是一種可靠的解決方案,但會(huì)給 AI 開(kāi)發(fā)人員增加成倍的工作量。另一種方法是,不同的細(xì)節(jié)級(jí)別,計(jì)算更新的頻率不同。這似乎是一種較可行的方法。
參考文獻(xiàn)
[1]MatBuckland.ProgrammingGameAIbyExample.WordwarePublishing,2005
[2]任巍. 實(shí)時(shí) 3D 角色骨架動(dòng)畫(huà)系統(tǒng). 西安電子科技大學(xué)計(jì)算機(jī)學(xué)院2004年度研究生學(xué)術(shù)年會(huì)論文集.October,2005.