2021 年 7 月 22 日,以線上形式舉辦的世界最大級遊戲開發者會議 Game Developers Conference 2021 當中,由 miHoYo 的 Lead AI Programmer Shuo Xu 發表了以「’Genshin Impact’: Building Scalable AI System」為主題的演講。
 
  《原神》(PC / PS5 / PS4 / iOS / Android)是一款 2020 年推出的開放世界 RPG,在手機與 PC 等平臺博得世界級的人氣。據說 Xu 先生是以負責人的身分參與設計該作的 AI 系統(在 3 年的製作下完成……)。本次演講,為各位介紹一款在廣大地圖展開的開放世界型線上遊戲,是透過什麼樣的 AI 建構而成。
 
  • image
 
  最初為各位解說的是 AI 系統結構(AI architecture),《原神》採用了多種類型的 AI。
 
  人類、野生動物、戰鬥中的 NPC 都分別採用個別的 AI,據說在推出的初期階段有 200 種以上的數量。因此孕育出遊戲設計師對於更有效率地製作出 AI 的工作流(Workflow)的需求。作為一款會持續改版更新的線上遊戲,管理這些相關事務的工作便是 AI 框架(AI framework)的職責所在。
 
  • image
 
  最初是以較為陽春的方法透過 AI 框架來組織出行為樹(Behavior Tree),但是樹狀結構逐漸膨大,並且還有副行為樹與大量節點的連結,在追加新的邏輯(Logic)時變更樹狀結構已經是很複雜的工程,同時判斷難以持續維持這樣的體系。
 
  從此開始建構出獨立的 AI 管道(AI Pipeline),能夠根據每個功能的推論模組(Inference Module)打散成不同的團體(Group),針對有需求的地方進行更新。接下來進入決策樹(Decision Tree)的部分。這是一項近似於行為樹的功能,但是僅只會做出各項決定與判斷的輕量化功能。以這些決策為基礎,決定發動技能或是進行移動等行為。具體的表現形態將以動畫呈現,而這部分則是透過傳輸適當的參數給動畫系統執行。這一連串的工作處理將在每一個框架的管理下進行運作。
 
  講者表示,採用這項系統結構,能夠以模組分類的方式開發各項功能,並且在製作新種類 AI 的時候還可以組合原本既有的模組來進行使用。功能上來說都各自獨立,因此在開發新的 AI 功能模組的時候,也不會有對其他功能產生影響的疑慮。
 
  也因此能夠賦予每個 NPC 個體不同的個性以及特殊能力。不只如此,就連 BOSS 級角色也能夠輕易實現出獨具特色的行動方式。
 
  • image
 
  為了綜合滿足以上需求所開發的工具就是 Key State Manager。這是一項有限性的狀態機(State Machine),在戰鬥等時刻會啟動,根據 BUFF 的狀況或其他數值情況驅動。以此舉例的是 Fire Slime 的例子,遊戲設計師能夠編輯好適當的狀態轉移(State Transition),並組織進入 AI 的系統之中。
 
  透過上述的 AI 管道與 Key State Manager 的運用,構築出新的 AI 框架。
 
  • image
 
  《原神》有一些開放世界性質上的制約存在。在移動時所使用的導航網格(Navigation Mesh),在剛推出時超過 70 平方 km 的地圖上,必須採用到高達 6GB 大小的導航網格。話雖如此,這個容量本身並不是什麼太大的問題。現在已經是連手機都能運行 10GB 左右的時代,並且《原神》的導航是由伺服器端進行處理,6GB 程度的話似乎完全不算什麼問題。
 
  • image
 
  投影片中顯示的導航網格的例子,是橫跨多層的 3 次元結構的地圖,構造上來說相當複雑。據說這是 1 平方 km 左右的範圍。
 
  • image
 
  再加上城鎮中到處放有 2m 左右的狹窄道路,相當考驗導航網格的精密度。對此曾反覆進行過多次實驗,最終決定 Tile Size 為 128,Pozel Size 為 0.125m 是理想的配置。
 
  • image
 
  如上所述,導航的部分由伺服器端進行處理,發送出現在位置與目的地以後,就會自動回應出可行的路徑(或者是沒有路徑)。
 
  • image
 
  話雖如此,地圖內存在著許多移動性的障礙物。為了對應這些狀況,會根據連接的玩家個別留有一定的記憶體,並且能夠應對各種可能發生的情況。在玩家識別出會阻礙道路的岩石的時候,伺服器會確保更新後的導航網格用擁有追加的記憶體,並用來對應此玩家的狀況。
 
  • image
  • image
  • image
  • 放置障礙物以前的路與放置後的路
  這個系統是以有 30 人以上 NPC 移動的狀態,在 60fps 下運作的前提下設計而成,在最優化以前的階段據說需用到 2~3ms 程度的 AI 處理。在當時似乎也遇到過熱方面的問題,在本次演講裡面並沒有多提。但畢竟是需要處理過熱問題的情況,單純以多執行緒(multithreading)來進行處理似乎是不可行的(處理效率的確會提升但熱能也會升高)。
 
  因此導入 AI 團隊的就是這項 LoD(Level of Deteil)的概念。在過去介紹過「Death Stranding」的 AI 相關報導中也有採用 LoD,看來在必須處理多名 NPC 的開放世界算是一項必須的技術也說不定。
 
  言歸正傳,《原神》之中使用了 3 個階段的 LoD AI。根據距離切換的 2 個階段以及戰鬥中的 1 個階段。在戰鬥中雖然會全面運作,非戰鬥的情況下在玩家周圍的 AI 處理也會以 30fps 的情況進行。較遠的情況下則會以 5fps 的方式省略動畫的處理。
 
  • image
  • image
 
  方纔雖提到不太可行,但是為了提升 CPU 的計算能力仍然會採用多執行緒的作法。這部分的使用時機是在每個 AI 模組從主執行緒呼叫出來的時候,建立出工作執行緒(Worker thread)。然而,直接運作仍會對 AI 處理上造成較重的負擔,對此需要進行優化的作業,讓每個框架中 2~3ms 減少至 0.5ms 的目標。演講中並沒有提及具體作法如何,但能夠看出整體上投入相當的工程。
 
  • image
 
  作為統整,為了管理廣大開放世界的 AI,需要建構出新型態的 AI 框架,龐大的道路探索資訊交由伺服器端來綜合處理,透過 LoD 減輕負荷等多元手段進行處理上的優化作業,才能實現出這等規模下的 AI 處理。能夠認識到支持當紅遊戲的諸項技術,著實是令人深感興趣的一堂課。

 

相關文章