您在這裡

[GDC 2013] AI 議程心得

2 篇文章 / 0 新
最新文章
[GDC 2013] AI 議程心得

三月在舊金山舉辦的 Game Developer Conference,吸引了全球遊戲業者、遊戲開發者、媒體、以及每年必定出現在路口的 N 牌飲料業者共襄盛舉。不論與會者為何種身分,帶著各種目的來參加活動,GDC 議程的多樣性與深度,幾乎保證大家滿載而歸,這也是門票昂貴的 GDC 仍能吸引超過兩萬人參與的主要原因之一。

當中 GDC 的 AI 人工智慧係指遊戲 AI,而非專指電腦科學領域的 AI,兩邊於存在目的上有很大的區別。對普通玩家來說,遊戲 AI 往往暗指更難打的壞人,而這又分成 更難打更壞 兩個成分,電腦單位逃跑不僅要跑得快,還要懂得在逃跑之前,費心到玩家面前搖個屁股。

會場內的相關講題也不免俗地強調了遊戲與學術領域的界定問題,簡單地說,遊戲 AI 是為了娛樂性而存在的,AI 研發被娛樂性指引,也被娛樂性限制,這點還算多數講者的共識。除了老生常談的內容之外,今年主要有兩個主題與往年不同:AI 協助設計遊戲 (AI-assisted design) 與 單位自主行動 (Steering behaviors)。

  • AI-assisted design

AI 協助設計遊戲是指給設計者用的自動或半自動遊戲設計工具。

「電腦! 給我一張容納 20 個 NPC、5 個陷阱、適合兩個玩家用 15 分鐘通關的地圖!」

筆者平日偶爾有關注遊戲自動設計的研究,這類成果過去一直停留在大學實驗室和論文堆裡,尚未聽說務實應用的案例,往年在 GDC 也少有聽聞,畢竟 GDC 是很務實的產業活動,而今年有部分 Studio 拿自家產品分享研發階段的使用經驗,從個人觀點這有指標性意義。

《戰甲神兵(Warframe)》的動態關卡 (Procedural Level)

跟 Diablo 隨機地圖的不同之處在於,特別強調 procedural level 而非 procedural map 因為它包含動態調整難度、自動平衡關卡的環境 AI。為了達成自動平衡,AI 必須幫隨機地圖進一步估測很多要素,例如玩家和敵人遭遇的地點或可能發生熱戰的區域。
 

圖為 Distance Map,從起點到終點的路途,以白色透明度估計可能發生的戰鬥熱度。

除此之外,遊戲也必須在玩家附近合理的位置動態配置一些敵人,因為總不能把敵人都放在地圖小角落吧!於是有了根據玩家行徑產生的熱度圖,估計玩家未來位置的機率,來當成 NPC 生成地點的依據。
 

圖為 Influence Map,玩家預測位置熱度圖。

除了客觀的遊戲世界機制,玩家若能在其中得到好的遊玩體驗 (gameplay),那可能會是一個 Flow 過程。手工製作的靜態地圖或關卡可以事先慢慢調整,但動態環境具體而言要怎麼達成 flow 過程,或著設計者心中的 gameplay 呢?

我們需要工具,根據預測的玩家行徑以及 NPC 遭遇量,其實能在雇用許多測試者和調整工人之前,程式就進一步闡述玩家在通關過程將會體驗到的激烈起伏,給設計者參考及調整。

以前設計師親手製作關卡,完成後衷心期待能給玩家好的感覺。現在藉由輔助 AI 工具的研發,我們將能更直接地、更精準地觸及遊戲體驗,不像傳統設計過程一般,設計有如隔靴搔癢,只能用膽識跟經驗彌補。

《城市征伐 City Conquest》調整平衡性的經驗

這款結合塔攻與塔防的 iOS 策略遊戲,建物與兵種搭配的平衡性自然是其調整重點,畢竟我們都不希望此類遊戲跟世紀帝國一樣,到後來大家都在 "封快" 對吧?

紅藍兩方城市對戰

可是一堆單位和建築調整起來很辛苦的!於是 City Conquest 藉由實作基因演算法,隨機產生兩套城市,讓他們對戰,勝者的配置 (基因) 留下來繼續雜交突變。開發者會從優化過程中萃取出各種平衡又強大的蓋法,也能從優化後的結果群,理解到某些物件可能太過強勢或弱勢。

上述過程聽起來非常帥氣,但我們也必須理解到優化算法的能力有限,演算法只能保證雙方數值較勁的平衡,比較難關注到「種田美學」,或著更廣義的「布局樂趣」,所以還是需要設計師手動檢視結果,修改物件的配置或評分後,重新投到基因池進行優化循環。由於基因演算法學 CS 的人大致都清楚,就不再此進行詳述。

 

自動優化和手動優化的循環

就個人所知的範圍,種田美學其實也能某種程度納入優化過程中,類似學術領域的各種 Layout 問題,端看技術實踐到什麼程度。不過 City Conquest 的經驗已經很好地展示出他們如何將參數調整的勞務,從設計過程當中分離,讓人更專注在樂趣元素。他們用兩週的程式開發,取代數個人月的調參數,非常明智。

如果更進一步對自動設計遊戲的研究趨勢有興趣,也許能參考這些論文。自動設計遊戲的領域還很新,有更多尚未務實化的有趣成果給大家發掘,說不定讀了會啟發某些新的遊戲機制呢!

2008 Evolutionary Game Design

2008 An Interactive Game-Design Assistant

2011 Tanagra: Reactive Planning and Constraint Solving for Mixed-Initiative Level Design

2012 Evaluating Competitive Game Balance with Restricted Play

總的來說,Game AI 的服務對象不僅限玩家,連設計者也是它的用戶。GDC 有實例出來意味著遊戲製作的法則起了變動,業者很懂得互相學習的,如果老闆發現能減少人月、提早上市,他一定會這麼做。也許明年我們會看到更多 3A 大作出來炫耀他們如何運用 AI 支援的遊戲設計工具來開發產品。
 

  • Steering behaviors

就務實 Game AI 技巧方面,今年主要強調 NPC 個體行為的經驗分享,也可以說那算反對路徑搜索的經驗分享。

因為遊戲程式往往有很多費時的工作要算,通常只能留一點點 CPU 時間給 Game AI,哪能容許讓每個單位都頻繁做全地圖路徑搜索,才懂得自己行動?此時簡單易懂的 Steering behaviors 方法就值得分享了。

以射擊遊戲為例,子彈來了怎閃?我們可以用 A* search 搜尋整個逃命空間,也可以很單純的讓 NPC 朝來犯子彈的垂直方向移動,如下圖所示。如果同樣都達成了智慧閃避的目的,那後者的把戲儼然又快又省,適合遊戲 AI 的需求阿。
 

可是 Steering 導航有兩類大問題,一是逃跑路線多怎麼辦?另一則是群體行動怎麼做?

同時得到多個逃亡方向

若想閃避多個對象,便會得到多個逃避向量,如何調權重、篩選來達到生還且有智慧的行動,便成了主要難點。

Spry Fox 的程式設計師 Andrew Fray 分享了一套簡易框架。我們可以設定八種移動方向,並列出想前進的方向 (追東西) 以及想遠離的方向 (危險地),稱為 Interest Map 與 Danger Map。

建立 Interest Map

等 Interest Map 建好我們就能挑選最有興趣的方向前進。若應用在射擊遊戲,可以把和彈道垂直的方向視為 Interest,子彈越靠近權重越大。筆者日前正好用類似方法做實驗,有段錄影可秀出 Steering 的行為效果。

不做路徑搜尋,NPC 能閃多久?

好像不錯用了,不過等講者的 Danger Map 也建好之後,適用範圍更廣,例如賽車遊戲!

賽車道的每一圈跑道都能視為一條向量,這樣 Interest Map 就變適合超車的路線,而 Danger Map 成了會撞車的路線,然後讓程式盡量避開所有 Danger Map 的向量,即使那條路可以超車!

我們甚至做更多判斷,如果最內側車道非常有利,但切過去之前,得先跨越兩條 Danger 向量,那就直接放棄。因為...
 

「目標的果實雖然甜美,但過程異常凶險,雖然不一定會出事,還是不要好了!」
 

這種充滿人生哲理的懦夫行為,實作上卻簡單得很:踩過 Danger 向量才能到的 Interest 向量都別碰。
 

賽車手複雜的內心戲,可藉由資料結構成功簡化,你怎能不愛 Game AI?

不過接下來,按 Steering 行為方針,每個單位都只考慮自己的行為,該如何打造出集體行動?又或著 NPC 在地圖上有遠距離目標的時候,怎麼一邊轉舵一邊前往目標呢?此時 Flow field 向量場能幫上忙。
 

典型2D地圖的向量場

如果是靜態地圖,設計者可以提供事前畫好的向量場,讓 NPC 在一般狀況下照指標前進,做到類似巡邏路線的效果。即時性較高或著動態地圖的遊戲,也能隔一段時間產生新的向量場,供 NPC 在 Steering 之餘參考。這樣即便每個 NPC 都走自己的,也能有群體行動的假象!

如果還要做得更擬真,可以讓 NPC 之間有地心引力,彼此相吸、互斥,產生集體行動應有的聚集或發散現象。而 Flow-field 的向量群正好拿來讓所有 NPC 的頭,不約而同地朝向相似方向,好像軍隊一起向前看、向前進似的,非常好用。

以 Steering behavior 搭配 Flow-field 的作法,簡單實作,計算快速,很容易擴充一些個人巧思來添增行為豐富性,算講破不值錢,但卻是遊戲程式不得不用的好招啊。

整串方法組合下來,大家對於一群 NPC 懂得翻山越嶺跑到玩家面前,搖個屁股才快閃的 AI 有想法了嗎? : )

結論

GDC 的 AI 議程內容其實多且雜,個人在此彙整覺得比較有體系、有新意的內容,如果在 GDC 看膩了一堆 AAA 遊戲大作的引擎炫耀文,想尋求思考突破點,不妨關注明年的 AI track,這裡不是賣弄技術的講堂,而是一群樂於分享、擁有 higher mind 的人們嘗試從每個角度切入遊戲。

花幾天參與完精采的議程,收穫滿滿不在話下,但回台之後,筆者不得不反問自己一個問題:

「除了花花綠綠的編輯器之外,我們願意投多少技術能量,去介入遊戲設計的核心?探索遊戲的可能性?」

以 AI 之名,和大家分享一些見聞。
END

引用一下 G+ 上的回應:
https://plus.google.com/116097220092307308308/posts/MWBKx6S3vW2

Gino Kuo 提到 OpenSteer (http://opensteer.sourceforge.net/) 這個 library 可以用來實作 steering 相關的應用,雖然應該是一個很舊的 project 了,沒有後續維護的樣子,但是至少有現成的 source code 可以看。