※ 本文轉寄自 ptt.cc 更新時間: 2021-07-31 11:48:11
看板 C_Chat
作者 標題 [閒聊] 《原神》AI 設計師線上演講 開放世界(ry
時間 Sat Jul 31 10:41:14 2021
標題太長
圖片內的投影片內的投影片內容請自己點進去看
【GDC 21】《原神》AI 設計師線上演講 開放世界的地圖下如何管理 NPC 的 AI 技術
https://gnn.gamer.com.tw/detail.php?sn=218855
【GDC 21】《原神》AI 設計師線上演講 開放世界的地圖下如何管理 NPC 的 AI 技術《Genshin Impact》 - 巴哈姆特
2021 年 7 月 22 日,以線上形式舉辦的世界最大級遊戲開發者會議 Game Developers Conference 2021 當中,由 miHoYo 的 Lead AI Programmer Shuo Xu 發表了以「’Genshin Impact’: Building Scalable ...
2021 年 7 月 22 日,以線上形式舉辦的世界最大級遊戲開發者會議 Game Developers Conference 2021 當中,由 miHoYo 的 Lead AI Programmer Shuo Xu 發表了以「’Genshin Impact’: Building Scalable ...
---------------------------------------------------------------------------
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 建構而成。
,在手機與 PC 等平台博得世界級的人氣。據說 Xu 先生是以負責人的身分參與設計該作
的 AI 系統(在 3 年的製作下完成……)。本次演講,為各位介紹一款在廣大地圖展開
的開放世界型線上遊戲,是透過什麼樣的 AI 建構而成。
最初為各位解說的是 AI 系統結構(AI architecture),《原神》採用了多種類型
的 AI。
人類、野生動物、戰鬥中的 NPC 都分別採用個別的 AI,據說在推出的初期階段有
200 種以上的數量。因此孕育出遊戲設計師對於更有效率地製作出 AI 的工作流(
Workflow)的需求。作為一款會持續改版更新的線上遊戲,管理這些相關事務的工作便是
AI 框架(AI framework)的職責所在。
最初是以較為陽春的方法透過 AI 框架來組織出行為樹(Behavior Tree),但是樹
狀結構逐漸膨大,並且還有副行為樹與大量節點的連結,在追加新的邏輯(Logic)時變
更樹狀結構已經是很複雜的工程,同時判斷難以持續維持這樣的體系。
狀結構逐漸膨大,並且還有副行為樹與大量節點的連結,在追加新的邏輯(Logic)時變
更樹狀結構已經是很複雜的工程,同時判斷難以持續維持這樣的體系。
從此開始建構出獨立的 AI 管道(AI Pipeline),能夠根據每個功能的推論模組(
Inference Module)打散成不同的團體(Group),針對有需求的地方進行更新。接下來
進入決策樹(Decision Tree)的部分。這是一項近似於行為樹的功能,但是僅只會做出
各項決定與判斷的輕量化功能。以這些決策為基礎,決定發動技能或是進行移動等行為。
具體的表現形態將以動畫呈現,而這部分則是透過傳輸適當的參數給動畫系統執行。這一
連串的工作處理將在每一個框架的管理下進行運作。
Inference Module)打散成不同的團體(Group),針對有需求的地方進行更新。接下來
進入決策樹(Decision Tree)的部分。這是一項近似於行為樹的功能,但是僅只會做出
各項決定與判斷的輕量化功能。以這些決策為基礎,決定發動技能或是進行移動等行為。
具體的表現形態將以動畫呈現,而這部分則是透過傳輸適當的參數給動畫系統執行。這一
連串的工作處理將在每一個框架的管理下進行運作。
講者表示,採用這項系統結構,能夠以模組分類的方式開發各項功能,並且在製作新
種類 AI 的時候還可以組合原本既有的模組來進行使用。功能上來說都各自獨立,因此在
開發新的 AI 功能模組的時候,也不會有對其他功能產生影響的疑慮。
種類 AI 的時候還可以組合原本既有的模組來進行使用。功能上來說都各自獨立,因此在
開發新的 AI 功能模組的時候,也不會有對其他功能產生影響的疑慮。
也因此能夠賦予每個 NPC 個體不同的個性以及特殊能力。不只如此,就連 BOSS 級
角色也能夠輕易實現出獨具特色的行動方式。
為了綜合滿足以上需求所開發的工具就是 Key State Manager。這是一項有限性的狀
態機(State Machine),在戰鬥等時刻會啟動,根據 BUFF 的狀況或其他數值情況驅動
。以此舉例的是 Fire Slime 的例子,遊戲設計師能夠編輯好適當的狀態轉移(State
態機(State Machine),在戰鬥等時刻會啟動,根據 BUFF 的狀況或其他數值情況驅動
。以此舉例的是 Fire Slime 的例子,遊戲設計師能夠編輯好適當的狀態轉移(State
Transition),並組織進入 AI 的系統之中。
透過上述的 AI 管道與 Key State Manager 的運用,構築出新的 AI 框架。
《原神》有一些開放世界性質上的制約存在。在移動時所使用的導航網格(
《原神》有一些開放世界性質上的制約存在。在移動時所使用的導航網格(
Navigation Mesh),在剛推出時超過 70 平方 km 的地圖上,必須採用到高達 6GB 大小
的導航網格。話雖如此,這個容量本身並不是什麼太大的問題。現在已經是連手機都能運
行 10GB 左右的時代,並且《原神》的導航是由伺服器端進行處理,6GB 程度的話似乎完
全不算什麼問題。
行 10GB 左右的時代,並且《原神》的導航是由伺服器端進行處理,6GB 程度的話似乎完
全不算什麼問題。
投影片中顯示的導航網格的例子,是橫跨多層的 3 次元結構的地圖,構造上來說相
當複雑。據說這是 1 平方 km 左右的範圍。
再加上城鎮中到處放有 2m 左右的狹窄道路,相當考驗導航網格的精密度。對此曾反
覆進行過多次實驗,最終決定 Tile Size 為 128,Pozel Size 為 0.125m 是理想的配置
。
覆進行過多次實驗,最終決定 Tile Size 為 128,Pozel Size 為 0.125m 是理想的配置
。
如上所述,導航的部分由伺服器端進行處理,發送出現在位置與目的地以後,就會自
動回應出可行的路徑(或者是沒有路徑)。
話雖如此,地圖内存在著許多移動性的障礙物。為了對應這些狀況,會根據連接的玩
家個別留有一定的記憶體,並且能夠應對各種可能發生的情況。在玩家識別出會阻礙道路
的岩石的時候,伺服器會確保更新後的導航網格用擁有追加的記憶體,並用來對應此玩家
的狀況。
家個別留有一定的記憶體,並且能夠應對各種可能發生的情況。在玩家識別出會阻礙道路
的岩石的時候,伺服器會確保更新後的導航網格用擁有追加的記憶體,並用來對應此玩家
的狀況。
這個系統是以有 30 人以上 NPC 移動的狀態,在 60fps 下運作的前提下設計而成,
在最優化以前的階段據說需用到 2~3ms 程度的 AI 處理。在當時似乎也遇到過熱方面的
問題,在本次演講裡面並沒有多提。但畢竟是需要處理過熱問題的情況,單純以多執行緒
(multithreading)來進行處理似乎是不可行的(處理效率的確會提升但熱能也會升高)
。
在最優化以前的階段據說需用到 2~3ms 程度的 AI 處理。在當時似乎也遇到過熱方面的
問題,在本次演講裡面並沒有多提。但畢竟是需要處理過熱問題的情況,單純以多執行緒
(multithreading)來進行處理似乎是不可行的(處理效率的確會提升但熱能也會升高)
。
因此導入 AI 團隊的就是這項 LoD(Level of Deteil)的概念。在過去介紹過「
Death Stranding」的 AI 相關報導中也有採用 LoD,看來在必須處理多名 NPC 的開放世
界算是一項必須的技術也說不定。
言歸正傳,《原神》之中使用了 3 個階段的 LoD AI。根據距離切換的 2 個階段以
及戰鬥中的 1 個階段。在戰鬥中雖然會全面運作,非戰鬥的情況下在玩家周圍的 AI 處
理也會以 30fps 的情況進行。較遠的情況下則會以 5fps 的方式省略動畫的處理。
及戰鬥中的 1 個階段。在戰鬥中雖然會全面運作,非戰鬥的情況下在玩家周圍的 AI 處
理也會以 30fps 的情況進行。較遠的情況下則會以 5fps 的方式省略動畫的處理。
方才雖提到不太可行,但是為了提升 CPU 的計算能力仍然會採用多執行緒的作法。
這部分的使用時機是在每個 AI 模組從主執行緒呼叫出來的時候,建立出工作執行緒(
Worker thread)。然而,直接運作仍會對 AI 處理上造成較重的負擔,對此需要進行優
化的作業,讓每個框架中 2~3ms 減少至 0.5ms 的目標。演講中並沒有提及具體作法如
何,但能夠看出整體上投入相當的工程。
這部分的使用時機是在每個 AI 模組從主執行緒呼叫出來的時候,建立出工作執行緒(
Worker thread)。然而,直接運作仍會對 AI 處理上造成較重的負擔,對此需要進行優
化的作業,讓每個框架中 2~3ms 減少至 0.5ms 的目標。演講中並沒有提及具體作法如
何,但能夠看出整體上投入相當的工程。
作為統整,為了管理廣大開放世界的 AI,需要建構出新型態的 AI 框架,龐大的道
路探索資訊交由伺服器端來綜合處理,透過 LoD 減輕負荷等多元手段進行處理上的優化
作業,才能實現出這等規模下的 AI 處理。能夠認識到支持當紅遊戲的諸項技術,著實是
令人深感興趣的一堂課。
路探索資訊交由伺服器端來綜合處理,透過 LoD 減輕負荷等多元手段進行處理上的優化
作業,才能實現出這等規模下的 AI 處理。能夠認識到支持當紅遊戲的諸項技術,著實是
令人深感興趣的一堂課。
--
Deserves death! I daresay he does. Many that live deserve death. And some die
that deserve life. Can you give that to them? Then be not too eager to deal out
death in the name of justice, fearing for your own safty. Even the wise cannot
see all ends.
Gandalf to Frodo
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.169.165.217 (臺灣)
※ 文章代碼(AID): #1X1BXDay (C_Chat)
※ 文章網址: https://www.ptt.cc/bbs/C_Chat/M.1627699277.A.93C.html
→ : 這次稻妻的地圖探索是真的有樂趣在...不過可以不要1F 07/31 10:44
→ : 那麼紫嗎?
→ : 那麼紫嗎?
→ : 蒙德綠綠的,璃月不也黃黃的嗎,OK的3F 07/31 10:46
推 : 太鮮豔玩得有點頭暈==4F 07/31 10:47
→ : 紫色是哀戚的顏色5F 07/31 10:49
推 : 鳴神島很漂亮啊..不過另外兩個太殘破不勘了 沒好景qq6F 07/31 10:50
推 : 等七國出完再來當完整單機玩好了7F 07/31 10:51
推 : 神作 台灣人最愛的手遊8F 07/31 10:53
→ : 那就等海祇島吧,設定說這是珊瑚升上海面形成的島9F 07/31 10:54
推 : 放晴的八醞也不錯,如果能無視那些很陰森的神竈,蛇10F 07/31 10:55
→ : 骨有種歷史滄桑感
→ : 骨有種歷史滄桑感
推 : 應該再一禮拜玩家又要喊沒事做了12F 07/31 10:55
→ : 另外兩個島做完任務就變正常了不過確實沒鳴神島漂亮13F 07/31 10:55
→ : 一座島是發電廠,一座島是戰區,原本就不是給人觀光吧14F 07/31 10:56
推 : 解完任務放晴就沒特色了15F 07/31 10:56
→ : 剩下電河可以開船遊覽
→ : 剩下電河可以開船遊覽
推 : 璃月好景很多,絕雲 輕莊 璃月港 各古蹟也都不錯看17F 07/31 10:57
→ : 稻妻也有反抗軍的士兵說.要來海祇島看看,這邊太戰亂殘破
→ : 稻妻也有反抗軍的士兵說.要來海祇島看看,這邊太戰亂殘破
推 : 其實現在已經沒事做了19F 07/31 10:58
推 : 我神櫻只解完第一個根 主線只破完第一段 哭啊 想長草20F 07/31 11:00
→ : 還沒機會 還會一直被劇情暴雷
→ : 還沒機會 還會一直被劇情暴雷
推 : 免疫暴雷成為你解主線的動力,很棒ㄅ22F 07/31 11:06
推 : 其實這遊戲一直都很單機 連線要素大概跟FGO差不多少23F 07/31 11:09
推 : 好潮 果然是神game==24F 07/31 11:10
→ : 我找不到蘋果 隔壁是蘋果樹27F 07/31 11:23
→ : 我找不到甜甜花 剛好旁邊有一朵
→ : 我找不到甜甜花 剛好旁邊有一朵
推 : 最好都來這種每日任務29F 07/31 11:27
推 : 真的公主病欸 腰很痠?30F 07/31 11:33
推 : 不想被雷,劇情破完前都不要上論壇才是正解31F 07/31 11:39
推 : 這個不是每日 是蒙德地圖隨機觸發的好感度人物32F 07/31 11:41
→ : *任務
→ : *任務
--
※ 看板: ACG 文章推薦值: 0 目前人氣: 0 累積人氣: 239
回列表(←)
分享