您在這裡

遊戲 AI 視覺化:五個實用的範例

1 篇文章 / 0 新
遊戲 AI 視覺化:五個實用的範例

=============================================
原文來自: Visualization of AI and Gameplay: 5 Useful Examples in Practice
作者: Alex J. Champandard
難度: 進階
=============================================

遊戲 AI 視覺化:五個實用的範例

在遊戲內把程式運行狀態資料視覺化是一件很酷的事!而身為遊戲開發者也因此因此很有成就感!但在熱血之餘,我們常忘了提醒自己其實並不需要重新造一遍視覺化的輪子。

文末有一份出自 AiGameDev 的秘密研究室,關於遊戲 AI 視覺化的教學影片。本文搭配一些高畫質的截圖,更深入中當的細節,希望能帶給大家一些啟發、或著使你相信研發 AI 視覺化是很實在的投資!

好的視覺化案例

務實上,有三個主要理由說明為何你在專案裡開發視覺化工具會值回票價:
1. 代碼正確性 - 當你實作新的功能時,即使有了單元測試,用眼睛確認各種檢驗皆為正確仍然是一件很舒服的事。此外複雜的遊戲世界可能出現單元測試沒寫到的特殊案例,有些問題只在後續的關卡設計才被暴露出來。

2. 鑒別臭蟲 - 比起只檢查代碼能否順利運作,視覺化能幫忙排除很多狀況來隔離出問題所在,如果我們有一籃子視覺化工具,就能很輕易的察覺各種問題,或找出可能的方向。

3. 微調參數 - 到了專案後期,視覺化方法在改變關卡設計、遊戲行為時特別有用。

後續的文章包含五種常用來建立遊戲雛形的視覺化方法,姑且稱之為 RUSHING BASES。請注意這些工具是如何地在專案初期幫助我們建立基礎架構,爾後也幫助我們調整遊戲平衡。

範例 1:網格圖 (Grid Map)


* 傳達什麼資訊?
這個特別的 2D 網格地圖展示了遊戲世界中,可否使用的區域在哪。基本上封閉不可行走的區域以紅色標示。

* 如何運作?
網格圖只是一張貼圖,服貼在覆蓋全地圖的除錯專用多邊形之上!網格圖用 Z-offset 與遊戲地圖的繪製區隔開來,不會交錯。當然也可以運用深度測試 (depth test) 來隱藏下層的遊戲地圖,以確保網格圖都能被看見。

* 為何需要它?

  • 了解地圖格子精細度對 AI 決策的影響
  • 得知封閉或狹小區域所在,來改善關卡設計

範例 2:區域網 (Area Network)


* 傳達什麼資訊?
遊戲地圖由一群一群的格子組成,我們將格子群稱為區域 (Area),區域和區域之間的關連性則成了勢力圖與路徑搜索算法的基礎。區域網直接將區域和區域之間的連接方式展現出來。

* 如何運作?
程式有一份圓圈物的實體被重複繪製在不同區域的中心點,圓圈縮放大小取決於該區域的大小,圓圈的顏色則由區域編號決定,至於區域間的連線則用 Spline 畫出。雖然以前作者使用箭頭來指向連接的對象,這樣繪製效率較高但會稍微難以閱讀。區域的編號則是用數字文貼圖塞給現成的繪圖引擎畫,然後確保 Z-offset 避免重疊。

* 為何需要它?

  • 了解區域精細化或簡化後的效應
  • 看出路徑搜索換法與勢力圖運作時的資料依據
  • 這圖就是那麼酷,可以秀給來辦公室玩的人看

範例 3:階層圖 (Hierarchical Graph)


* 傳達什麼資訊?
這是一個抽象的搜索用圖,用在階層式的路徑搜尋(類似某種空間切割來加快搜尋)。階層圖是在區域 (Area) 上產生的,它的結構特別因此顯示出來較為不同,畫面只顯示了階層圖的邊 (Edge),並沒有畫出節點 (Node)。

* 如何運作?
這種圖是由一堆邊組成,邊的繪製用狹長形的多邊形模擬之,因為不是每個系統在 3D 繪圖模式都支援線條繪製。圖的節點上面有標籤,標籤則用常見的廣告板 (Billboard) 技巧顯示。

* 為何需要它?

  • 用以隔離出路徑搜尋算法出包的地方
  • 顯示 AI 找路時,所有可能被考慮的方案
  • 顯露出被遺忘的路徑,以及潛在關卡設計問題

範例 4:勢力圖 (Influence Map)


* 傳達什麼資訊?
勢力圖的視覺化很好地傳達了遊戲運行中,地圖每個角落的動態計算數值。用紅、黃色代表高風險區域,可能是敵對物體在附近造成的。而其他顏色則代表安全區域,也許是因為己方物體剛剛才安全通過該處。上述這些意義可以單獨或合併同時顯示在畫面上。

* 如何運作?
勢力圖產生方法和網格圖雷同,用一張大貼圖覆蓋全世界,不過在遊戲數值改變後得動態更新貼圖的內容。

* 為何需要它?

  • 幫助了解 AI 運行戰術決策時的依據
  • 當做設計者調整 AI 決策行為的參考資料
  • 顯示關卡的長期統計數值,用來調整遊戲平衡性

範例 5:導引路徑 (Navigation Paths)


* 傳達什麼資訊?
這個檢視畫面表達了程式對遊戲世界內所有角色進行路徑搜索、路徑平整化後的最終結果。每條路徑由一群箭頭首尾銜接而成,每個單獨箭頭各自代表路徑的片段。程式可以同時顯示現在與每個時間點的歷史路徑。

* 如何運作?
箭頭一樣用狹長的多邊形模擬之,相異之處在於箭頭必須依照當時的路徑搜索狀態改變。另外這裡有不同的運行條件和程式最佳化空間,可以減少路徑動態改變時的計算成本,

* 為何需要它?

  • 秀出原始的路徑資料,幫忙 debug
  • 顯示敵我雙方路徑選擇或決策的狀況
  • 揭露出 AI 高階行為,用來改善設計或做性能最佳化
  • 同時顯示不同時間點的歷史戰術路徑

結論
在作者的遊戲當中,路徑搜索圖是最實用的,因為該遊戲與從障礙物之間尋找戰術路徑有關。視覺化可以協助遊戲作者從低階代碼觀察設計內涵,也對最佳化議題與行為修正方面有助益。

總的來說,多種視覺化工具在不同種情境下都有其用處。這裡有個經驗談:我們花越多工作時間在系統代碼上,就該投資更多時間製作系統的視覺表現。以後你將會感謝自己當時明智的決定!

註. 教學錄影請參考 原文末段