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