大話AI技術輔助遊戲NPC設計

遊資網發表於2019-11-18
作者:Jingwen 騰訊互動娛樂 研究員

在電子遊戲開始之初,遊戲的樂趣很大程度上依賴於遊戲開發者設計的世界,在世界裡有各種NPC(Non-Player Character),我們通過與之互動推動遊戲的進行。遊戲NPC作為遊戲中的一個重要組成部分。一直伴隨著遊戲玩家以及遊戲開發者。於是NPC的設計就成為了玩家和開發者都高度關注的一個焦點。廣大玩家總覺得NPC太傻,行為太單一,沒有真正的代入感。而受限於技術工具,編寫NPC往往需要設計開發複雜的行為樹或者狀態機,對於遊戲開發者而言是巨大的負擔。儘管電子遊戲已經誕生了這麼多年,遊戲NPC的設計技術並沒有什麼太本質的變化,基本上還是依靠規則和數值體系。如果有新的技術能夠優化NPC的設計流程也許會給遊戲研發注入新的血液。

電子遊戲需要NPC嗎?

隨著網路遊戲的高速發展,世界各地的遊戲玩家可以非常方便的同時在一個遊戲中進行互動,現在的遊戲都在網遊化,似乎對於NPC的需求並不那麼強烈了。但是實際上真的是這樣嘛?

仔細觀察一下,發現好像並不盡然。

首先,故事驅動型的3A遊戲大作在遊戲市場中依然佔據著舉足輕重的位置,而這類遊戲中對於NPC設計的需求強烈而複雜。雖然這類遊戲目前還主要存在於主機平臺上,覆蓋的群體遠不如手遊玩家龐大,但是隨著5G網路的普及,我們有理由相信,手游上(或者不限於手機平臺的其他形式)的遊戲內容會越來越豐富,也許形式上也會朝著向主機遊戲靠攏。那麼在未來的遊戲中對於NPC設計的需求會只增不減。

其次,即使對於目前大型多人線上的網路遊戲而言。NPC也並沒有我們想象中那麼可有可無的。以諸如《王者榮耀》這樣競技性的遊戲而言,有競技就會有贏有輸。對於一個從來無法在比賽中獲得勝利的玩家而言,遊戲的樂趣是飛速下降的。很多玩家玩遊戲其實只是為了放鬆,平時並不會使用太多的時間來磨鍊自己的遊戲技能,好不容易抽點時間放鬆一下,結果還因為被虐給心裡添堵,從而從遊戲中流失。這樣的玩家流失其實是非常可惜的,因為可能並不是我們設計的遊戲不夠精彩,而是沒辦法照顧到各個水平層次的玩家體驗而導致的。另外一方面,硬核玩家總歸是少數,要想遊戲被更多的玩家玩,那麼照顧這些中輕度玩家就是很有必要的事情。如果我們有能力水平合適的NPC陪各個水平段的玩家玩,那會是一種非常好的輔助遊戲運營的工具。

這裡還可以再引申一下,NPC作為遊戲的一個重要組成部分,並且會與玩家頻繁互動,它們的優劣實際上會嚴重影響遊戲的體驗。我相信能夠精確控制玩家在遊戲中的體驗會是遊戲策劃心中一種很理想的遊戲形式,他們就像一個導演,通過NPC引導玩家進入他們設計的世界,牽動玩家情緒的改變,一步一步的去體會自己精心設計的故事,而玩家也忘我般地沉浸其中。如果能夠有效地控制NPC,那麼這樣的遊戲形態也就成為可能,它也許會是西部世界那樣的樣子,也會是其他更豐富的形態。PVE的內容可能會重新成為遊戲的亮點。

大話AI技術輔助遊戲NPC設計
西部世界中的NPC

但是怎麼樣才能設計出各種我們想要的NPC呢?對於目前的遊戲而言(即便是手遊),設計一個遊戲中的NPC已經變得非常棘手了。摩爾定律誠不欺我,機器效能在一直變強。大家都知道現在即使一部千元手機的計算效能也遠遠超過了若干年前的臺式計算機了。這也使得遊戲開發者能夠在此基礎上實現更多酷炫的效果,更復雜的遊戲場景,隨之帶來的也有更多新奇多樣的遊戲玩法。

因此在這樣的遊戲中,我們往往難明確定義(數值上或者規則上)一個NPC到底應該是什麼樣子的,而不同水平的NPC的行為模式也可能是非常不一樣的。這些對於遊戲開發者而言,無疑是繁重而又缺乏清晰頭緒的工作。在計算機技術飛速發展的今天,人們自然會想到能不能借助計算機幫助我們自動生成這些NPC呢?能不能用上好像很神奇的人工智慧技術呢?

計算機能幫我們自動生成嗎?

我們先來看看應用AI技術讓機器生成遊戲NPC可以達到什麼程度呢?

這個問題的答案很大程度上取決於遊戲本身的複雜度,如果遊戲很複雜,想要自動生成能夠高水平完成該遊戲的AI的難度就會非常大。那麼遊戲的複雜度又怎麼去界定呢?關於這個問題,我們應該首先樹立一個觀點,那就是玩起來簡單的遊戲並不代表這個遊戲的複雜度就低,反之亦然。

這裡我嘗試按照兩個維度去刻畫遊戲的複雜度,以期望給大家展示一個全面的景象。我們暫時認為遊戲的複雜度可以由遊戲環境表徵的複雜度和遊戲玩法的豐富程度來共同刻畫。圖中的位置表述並不非常準確,僅僅為了展示一種相對關係。

大話AI技術輔助遊戲NPC設計
遊戲NPC設計難度天梯圖

要設計一個遊戲AI,我們首先要考慮如何表達一款遊戲,比如棋牌類遊戲,我們很容易的就能夠通過一些符號和規則定義這款遊戲,甚至不需要做一個真正的遊戲出來。如果一款遊戲越容易表達,那麼我們可以認為這款遊戲的環境複雜度是比較低的,反之則越高,我們可能需要花費很多人力物力去開發一個遊戲實體出來,比如我們喜聞樂見的吃雞這樣大場景的開放世界遊戲,花花草草,一房一隅跟真實世界一樣一樣的,非常難通過一些簡單的符號規則表示了。

在另外一方面,遊戲玩法的多樣性也對遊戲的複雜度有很大的影響,玩法多樣性是什麼意思呢?我們可以簡單理解為遊戲取勝的方式的種類數。比如像賽車類遊戲,當我們熟知賽道之後,如何能夠在這個賽道上跑出最佳成績的跑法其實基本上也確定了,考驗的主要是玩家能否把自己的最佳狀態表現出來。而之前被津津樂道的圍棋,號稱包容了人類最高深的智慧,它的取勝方式相比賽車這類遊戲就要豐富得多。這裡其實有兩個原因,一個是因為本身棋盤上可以做的選擇就比較多,另外一個是因為由於對手的不同,取勝的策略也會因此不同。這個第二點其實可以作為遊戲複雜度一個重要分水嶺,對戰類的遊戲由於存在對手策略未知的問題,往往都會比非對戰的遊戲要複雜得多。而在對戰類的遊戲中,對方的資訊是否可見又成為對戰類遊戲裡一個重要的分水嶺,對方資訊不可見的我們一般成為非完美資訊,這類遊戲又比對方資訊可見的遊戲要難得多。

從這兩個維度去考慮我們目前常接觸到的遊戲的話,我們會發現圍棋確實算是很難的遊戲了,對戰類,並且策略選擇非常豐富。但是它又遠遠不是最難的,因為圍棋上雙方的資訊都是公開可見的,因此相比起一些我們玩得比較多,似乎不太拿的上臺面的遊戲比如麻將、德州撲克,其實就比圍棋還要複雜。而這些僅僅是棋牌類遊戲,他們的表達都是比較簡單的,同樣具有對戰屬性,並且對手資訊不可見的電子遊戲諸如王者榮耀、吃雞其實難度還要再更上一層樓。

瞭解了目前遊戲的難度分佈概況之後,以我們目前的人工智慧技術而言,是否能夠自動生成這些遊戲的AI呢?很遺憾的是,其實真正能完美做出來的並不是特別多。

大話AI技術輔助遊戲NPC設計
人工智慧自動生成技術能力覆蓋圖

在上圖的用綠色框出來的範圍內的遊戲種類已經在學術上有很好的解決方案了,他們通常是非對戰類的遊戲,有著比較明確的遊戲目的,比如獲得高分之類的,而一些策略相對比較小的對戰棋牌類遊戲也有相應的解決方案了,比如五子棋、象棋等。由於商業的需求,這類遊戲可能會有著相對複雜的3D場景,這對於表達遊戲會有一定的困難,但是並不會給這類遊戲造成真正的困擾。比如在QQ飛車中,我們也可以通過一些特徵表示將場景進行簡化,同樣能夠生成水平比較高的AI。

圍棋作為一種玩法策略比較豐富的競技對戰遊戲,是很難解決的,曾經一度作為人類頂尖智慧的代表。不過近幾年由於阿爾法狗的誕生,終於使得人工智慧技術已經能夠克服圍棋這樣複雜度的遊戲了。但是阿爾法狗的技術本質上並沒有突破性的創新,它成功的關鍵在於將各種已有技術的有機結合和非常頂尖的工程實現能力。這裡這麼說主要是想要強調兩點:1.阿爾法狗在人工智慧演算法上其實並沒有基本原理上的突破,並不代表人工智慧能夠下圍棋了,人工智慧就能顛覆世界了。2.解決的問題雖然很難,但還遠遠不是最難的。因為圍棋是完美資訊的(即雙方的資訊都可見),是回合制的(雙方不需要同時做決策),並且圍棋的表達不困難(一個三值的二維矩陣即可),很容易進行推演和覆盤。

而對於像王者、星際這樣的遊戲,遊戲邏輯非常複雜,不僅對手的資訊不可見,還需要與對手同時進行決策,一個對對手錯誤的預判,可能就導致整個局勢的扭轉。另外我們也很難像表示圍棋那樣用一個簡單的矩陣就完美的刻畫整個盤面,也沒有辦法很快的在一個盤面上進行推演,這就為遊戲的AI設計大大增加了難度。換句話說阿爾法狗上的經驗幾乎很難應用到這類遊戲上來,必須有更先進的技術才能取得突破,目前這兩類遊戲的AI在學術界上依然處於研究探索階段,目前已經有了一定的成果,可以參考DeepMind、OpenAI,還有騰訊在王者上做的絕悟。雖然這些工作都有了一些實際展示,但是它們在該類遊戲上達到的程度還遠沒有達到阿爾法狗在圍棋中那樣至強的水平。

而像吃雞這樣真實世界場景,大規模多人線上,並且敵人資訊不可知,而玩法又極其豐富的遊戲無疑是目前遊戲AI設計的至難題材了,學術研究甚至還沒有涉足到這樣複雜的載體上。

所以從上面的分析來看,對於目前的遊戲市場上的遊戲,我們能夠用人工智慧技術自動化的解決NPC的品類並不是特別多,而且很多能夠解決的品類中,耗費的代價還異常巨大,比如在OpenAI的DO他的設計中,並不是任何一個遊戲都能接受這樣的代價去製作NPC的。

AI技術能幫上什麼忙?

如果我們從產品上去考慮,重新審視一下我們的問題,我們真正需要完全自動的生成一個完整的頂級NPC嘛?有固然好,沒有的話,我們能做什麼呢?

除了運營階段為不同水平的玩家提供陪玩服務,在我們遊戲研發階段其實也有很多場景需要設計NPC,比如為關卡設計BOSS,或者為遊戲設計教學NPC等等。應用在這些場景的NPC不一定要覆蓋到整個遊戲場景,並且可能也不需要特別強的能力。

懶惰雖然是人類發展的第一動力,但是羅馬不是一日建成的,我們不能完全自動生成遊戲中所有的NPC,但是部分生成也許是可行的。因此我想需求可能會有這麼幾點:

減少繁瑣的人工規則:編寫規則類的NPC是費時費力的,不僅要對遊戲邏輯有非常清晰的梳理,還需要不斷地除錯其中的引數,以提高NPC的水平。在這一步,如果能夠儘量利用機器自動生成,能生成多少是多少。生成越多就越能減少遊戲開發技術人員的工作量。

拉近非技術人員與NPC設計的距離:非技術人員(比如策劃等)最好能夠真正參與到NPC的建立中去,而不僅僅是通過向開發提需求。如果能夠創造全新的NPC設計介面,讓非技術人員也能非常容易的自己動手設計NPC,不需要寫程式碼,不需要太多繁瑣的數值調整那就是最好的。當策劃能夠通過較為自然的方式提出所需要的NPC,而這些需求又能夠通過精確的轉換,變成機器可理解的目標,那隻要不是特別複雜的任務,讓非技術人員自動生成NPC也就易如反掌。

複雜的AI設計能夠有套路可尋:對於那些沒有辦法完全自動生成的複雜NPC怎麼辦呢?除了等待技術的進一步革命,一種簡單的想法就是採取分治法。複雜的NPC應該是可以由一些簡單的部件構建起來的。當我們可以很容易生成簡單部件的時候,設計複雜的NPC也就有跡可循了。

基於上面分析的這些需求點,我們可以看到關鍵問題可以歸結為兩點:

1. 如何定義和解決機器能夠自動生成的模組?

2. 非技術人員如何定義這樣的模組?

針對這兩點我們再來看看,使用機器學習技術大概能做到什麼程度。

定義可自動生成的NPC

一種方式是利用領域知識來拆解問題,定義一些目標明確的任務目標。例如:賽車比賽中儘量快,籃球中晃動之後投籃儘量準,格鬥遊戲中能快速使用某技能擊中對手等等。一旦我們能夠清晰的描述我們的問題,我們就可以給強化學習設計獎賞函式,讓強化學習為我們自動完成NPC的生產。所謂強化學習就是針對我們的目標為NPC設計一些激勵機制,讓NPC在自己的探索中不斷摸索出能夠完成我們目標的行為模式的方法。。

既然有這等神器,為什麼不能所有任務都完全交給強化學習呢?因為強化學習中涉及到大量的試錯過程,需要比較高昂的時間代價,另外對於複雜的任務,依然還沒有特別高效的演算法可以保證收斂到最優情況。因此我們只能將一些不那麼複雜的任務交給強化學習解決。

有時候我們雖然有明確的目標,但是卻比較難進行形式化的定義。不過如果我們很容易對這個任務進行示範,那也能通過機器學習技術得到解決。

UC Berkeley的人工智慧實驗室就做了這樣的一項研究。首先讓使用者提供一些完成任務的樣例,然後基於這些資料訓練一個任務成功與否的判斷分類器,用分類器的結果作為獎賞,用以進行強化學習的訓練,並在這個過程中搜集分類器的負樣本。最終依據學習的結果,選擇一些樣本向使用者進行查詢。不斷迭代這個過程就能夠得到一個不錯的AI。

這個過程實際上利用了兩種技術,一種是逆強化學習。因為在訓練獎賞分類器的時候,不僅人類提供的正樣本很重要,負樣本同樣也很重要。如果負樣本覆蓋不全就會導致模型學習到很偏的行為,但是讓人類提供各種各樣的負樣本代價太高了。因此這裡的逆強化學習中實際上是在用一種對抗的方式生成負樣本。具體一點而言:

1. 隨機初始化獎賞分類器和強化學習策略

2. 更新策略最大化獎賞

3. 訓練分類器以區分使用者提供的樣本和策略採集到的樣本

4. 用新的分類器作為獎賞分類器再更新強化學習策略

5. 不斷迭代這個過程,直到模型不再能區分策略的樣本和使用者的樣本。

但是上面這個過程雖然不需要使用者提供負樣本,但是卻需要在建立分類器的時候提供大量的正樣本,對使用者的使用而言依然還是有很大的使用負擔。這裡就採取了主動學習的技術,選擇一定的樣本向使用者進行查詢,從而避免了讓使用者提供大量正樣本的問題。

在實際試驗中,這個方法顯示只需要向使用者進行比較少次數的詢問就可以成功的訓練機械臂完成指定的任務,並且都是直接從影象中學習得到的。

大話AI技術輔助遊戲NPC設計
機械臂實驗

這裡簡單展示一下他們的實驗成果。主要考察瞭如圖所示的三個機械臂任務:

pushing,這個任務需要機械臂將一個杯子推到杯墊上

draping,這個任務需要機械臂將一塊布蓋在盒子上

book placing,這個任務需要機械臂將書插入到書架的空處

每個任務初始都提供了80個成功的樣例,通過上面的演算法都訓練到了能夠百分之百準確率的完成任務,下面是每個任務需要主動向人詢問的次數:


從這個結果中我們可以看到,在對於我們人類而言比較能接受的詢問次數裡,我們就可以利用機器學習技術,讓機械臂完成相對不是特別複雜的實際操縱任務。

但是我們可能並不想去做這個問題的拆解,有時候是因為懶惰,有時候是因為有些問題確實很難去清楚的去劃分子模組。這種時候,其實機器學習也能夠幫上忙,OpenAI就提出來一種不用領域知識就能生成若干行為模式的方法,認為不同的行為模式會訪問到不同的狀態,用訪問到的這些狀態即可以作為不同行為模式的區分。只要儘量鼓勵行為模式之間的差異性,就可以得到足夠豐富行為。

具體一點而言,這個演算法的優化目標可以形式化為如下這樣:

F = I(S;Z) + H[A|S] - I(A;Z|S)

三項中,第一項是最大化子策略和狀態之間的互資訊,為的是控制自測路訪問哪些狀態。

第二項是最大化混合策略的熵,將所有子策略放在一起視為一個混合策略,最大化熵即是鼓勵子策略的多樣性。

第三項是最小化策略和給定狀態下的動作之間的互資訊,這是用以確保策略是由狀態來被區分的。

演算法流程大概是這樣:

大話AI技術輔助遊戲NPC設計
OpenAI提出的生成演算法

一開始從行為(skill)的分佈中取樣出一種,然後在本輪探索中按照該行為給出的動作概率去採取動作。如果智慧體探索到容易被分類器區分的狀態裡去,就會被獎勵。與此同時,分類器也會進一步為了更好的從狀態區分出行為進行更新。

在文章中的模擬環境實驗中,在沒有任何獎賞設計的情況下,AI自己就學會了諸如跑、走、翻滾等行為模式。

大話AI技術輔助遊戲NPC設計
演算法生成的行為

如何使用

從上面提到的這些技術,我們可以看到我們是有可能為非技術人員提供更為直接的設計NPC的途徑的。

對於能夠明確定義出目標的任務,只需要設定目標即可。如果不能準確描述出來,可以使用示範的形式。如果示範也不想做,也可以讓計算機自己去探索一些行為模式之後再做挑選。這裡的大部分工作可以交由計算機去完成了。

除此之外,當我們有了這些由機器生成的簡單模組之後,對於這些模組還不能完成的複雜任務,他們依然可以利用起來作為零部件去拼湊一個複雜的AI。拼湊的方法可以是用傳統的行為樹,將這些模組作為節點進行呼叫。也可以用機器學習的方法進行組合,比如分層強化學習。

在OpenAI的文章中也提到了,利用這些基礎模組,能夠加速強化學習的對於複雜問題的學習過程。

實驗進行在如圖所示的兩個任務中,Cheetah Hurdle希望智慧體能夠順利快速的跨過障礙物,Ant Navigation則要求智慧體必須按照指定的順序到達每個點,最終獲得一個獎賞。這兩個任務中的障礙物和稀疏的獎賞使得對於非分層的強化學習方案非常難以學習。

大話AI技術輔助遊戲NPC設計
模擬環境中的複雜問題

但是在利用上面的自動生成行為的方法之後,在這些方法之上加上強化學習則能取得非常好的結果。之前傳統方法甚至不能完成的任務,在這裡能夠被完成了。

大話AI技術輔助遊戲NPC設計
利用生成的行為進行進一步學習的效果


展望

上面提到的這些方法其實只是這類技術裡的冰山一角,還有更多的工作值得去研究。而對於我們遊戲開發者而言,遊戲方法雖然本身並不為遊戲開發而生,但卻實實在在能夠在遊戲開發的某些環節中體現出重大作用。比如上面提到的這些工作,他們都在幫助非技術人員理解和使用人工智慧技術設計遊戲NPC的道路上,或多或少地提供了一些技術思路。

當然目前來看缺點也是很多的。為什麼叫大話AI輔助NPC設計,就是因為它還僅僅停留在學術文章上,到實際生產環境中還有很長的路要走。即使能夠很好的實現出來,它依然不能完全免除人工參與。比如:對於使用者自定義的模組,需要使用者自己對問題進行拆解劃分;對於定義模糊的模組時,需要使用者進行示範;對於完全自動生成的行為,可能在表現上都完全不是我們想要的型別。

還有一點值得一提的是這類方法並不能保證生產智慧體的強度。對於智慧體的強度提升,還有很多廣闊的課題需要做,不同的遊戲品類要實現頂級強度AI的難度是完全不一樣的,哪怕只是玩法上的一點點改變,問題可能就會變得很難很難。這方面依然需要長期探索。

這裡討論的技術,更多的是考慮非技術人員可以怎麼去使用人工智慧技術。並且這些技術發明之初,也並不是為了遊戲研發的場景。因此這裡其實希望有更多的遊戲開發者(策劃、遊戲開發等等)以及人工智慧技術的研究人員共同參與進來,一起開啟腦洞,一起去設想怎樣的工具才是遊戲開發者期望的效率提升神器。這樣我們才真正有可能去革新遊戲研發中的這一環。

我們希望遊戲中的人工智慧技術今後不僅僅只停留在Nature、Science這樣離我們比較遙遠的學術期刊上,也不是停留在一些宣傳的視訊文章上,而是能更接地氣的實實在在地在我們的生產環境中應用起來,成為廣大遊戲開發者的福音。當然這是一場漫長的遠征。下一世代的遊戲NPC設計工具究竟是怎樣的,由我們這一代遊戲人來共同定義。

來源:騰訊遊戲學院
原地址:https://mp.weixin.qq.com/s/bDVw3ImXKPReIJ0a6G-n4w

相關文章