大话AI技术辅助游戏NPC设计
在電子游戲開始之初,游戲的樂趣很大程度上依賴于游戲開發(fā)者設(shè)計的世界,在世界里有各種NPC(Non-Player Character),我們通過與之互動推動游戲的進行。游戲NPC作為游戲中的一個重要組成部分。一直伴隨著游戲玩家以及游戲開發(fā)者。于是NPC的設(shè)計就成為了玩家和開發(fā)者都高度關(guān)注的一個焦點。廣大玩家總覺得NPC太傻,行為太單一,沒有真正的代入感。而受限于技術(shù)工具,編寫NPC往往需要設(shè)計開發(fā)復(fù)雜的行為樹或者狀態(tài)機,對于游戲開發(fā)者而言是巨大的負擔。盡管電子游戲已經(jīng)誕生了這么多年,游戲NPC的設(shè)計技術(shù)并沒有什么太本質(zhì)的變化,基本上還是依靠規(guī)則和數(shù)值體系。如果有新的技術(shù)能夠優(yōu)化NPC的設(shè)計流程也許會給游戲研發(fā)注入新的血液。
電子游戲需要NPC嗎?
隨著網(wǎng)絡(luò)游戲的高速發(fā)展,世界各地的游戲玩家可以非常方便的同時在一個游戲中進行互動,現(xiàn)在的游戲都在網(wǎng)游化,似乎對于NPC的需求并不那么強烈了。但是實際上真的是這樣嘛?
仔細觀察一下,發(fā)現(xiàn)好像并不盡然。
首先,故事驅(qū)動型的3A游戲大作在游戲市場中依然占據(jù)著舉足輕重的位置,而這類游戲中對于NPC設(shè)計的需求強烈而復(fù)雜。雖然這類游戲目前還主要存在于主機平臺上,覆蓋的群體遠不如手游玩家龐大,但是隨著5G網(wǎng)絡(luò)的普及,我們有理由相信,手游上(或者不限于手機平臺的其他形式)的游戲內(nèi)容會越來越豐富,也許形式上也會朝著向主機游戲靠攏。那么在未來的游戲中對于NPC設(shè)計的需求會只增不減。
其次,即使對于目前大型多人在線的網(wǎng)絡(luò)游戲而言。NPC也并沒有我們想象中那么可有可無的。以諸如《王者榮耀》這樣競技性的游戲而言,有競技就會有贏有輸。對于一個從來無法在比賽中獲得勝利的玩家而言,游戲的樂趣是飛速下降的。很多玩家玩游戲其實只是為了放松,平時并不會使用太多的時間來磨煉自己的游戲技能,好不容易抽點時間放松一下,結(jié)果還因為被虐給心里添堵,從而從游戲中流失。這樣的玩家流失其實是非常可惜的,因為可能并不是我們設(shè)計的游戲不夠精彩,而是沒辦法照顧到各個水平層次的玩家體驗而導(dǎo)致的。另外一方面,硬核玩家總歸是少數(shù),要想游戲被更多的玩家玩,那么照顧這些中輕度玩家就是很有必要的事情。如果我們有能力水平合適的NPC陪各個水平段的玩家玩,那會是一種非常好的輔助游戲運營的工具。
這里還可以再引申一下,NPC作為游戲的一個重要組成部分,并且會與玩家頻繁互動,它們的優(yōu)劣實際上會嚴重影響游戲的體驗。我相信能夠精確控制玩家在游戲中的體驗會是游戲策劃心中一種很理想的游戲形式,他們就像一個導(dǎo)演,通過NPC引導(dǎo)玩家進入他們設(shè)計的世界,牽動玩家情緒的改變,一步一步的去體會自己精心設(shè)計的故事,而玩家也忘我般地沉浸其中。如果能夠有效地控制NPC,那么這樣的游戲形態(tài)也就成為可能,它也許會是西部世界那樣的樣子,也會是其他更豐富的形態(tài)。PVE的內(nèi)容可能會重新成為游戲的亮點。
?
但是怎么樣才能設(shè)計出各種我們想要的NPC呢?對于目前的游戲而言(即便是手游),設(shè)計一個游戲中的NPC已經(jīng)變得非常棘手了。摩爾定律誠不欺我,機器性能在一直變強。大家都知道現(xiàn)在即使一部千元手機的計算性能也遠遠超過了若干年前的臺式計算機了。這也使得游戲開發(fā)者能夠在此基礎(chǔ)上實現(xiàn)更多酷炫的效果,更復(fù)雜的游戲場景,隨之帶來的也有更多新奇多樣的游戲玩法。
因此在這樣的游戲中,我們往往難明確定義(數(shù)值上或者規(guī)則上)一個NPC到底應(yīng)該是什么樣子的,而不同水平的NPC的行為模式也可能是非常不一樣的。這些對于游戲開發(fā)者而言,無疑是繁重而又缺乏清晰頭緒的工作。在計算機技術(shù)飛速發(fā)展的今天,人們自然會想到能不能借助計算機幫助我們自動生成這些NPC呢?能不能用上好像很神奇的人工智能技術(shù)呢?
計算機能幫我們自動生成嗎?
我們先來看看應(yīng)用AI技術(shù)讓機器生成游戲NPC可以達到什么程度呢?
這個問題的答案很大程度上取決于游戲本身的復(fù)雜度,如果游戲很復(fù)雜,想要自動生成能夠高水平完成該游戲的AI的難度就會非常大。那么游戲的復(fù)雜度又怎么去界定呢?關(guān)于這個問題,我們應(yīng)該首先樹立一個觀點,那就是玩起來簡單的游戲并不代表這個游戲的復(fù)雜度就低,反之亦然。
這里我嘗試按照兩個維度去刻畫游戲的復(fù)雜度,以期望給大家展示一個全面的景象。我們暫時認為游戲的復(fù)雜度可以由游戲環(huán)境表征的復(fù)雜度和游戲玩法的豐富程度來共同刻畫。圖中的位置表述并不非常準確,僅僅為了展示一種相對關(guān)系。
?
要設(shè)計一個游戲AI,我們首先要考慮如何表達一款游戲,比如棋牌類游戲,我們很容易的就能夠通過一些符號和規(guī)則定義這款游戲,甚至不需要做一個真正的游戲出來。如果一款游戲越容易表達,那么我們可以認為這款游戲的環(huán)境復(fù)雜度是比較低的,反之則越高,我們可能需要花費很多人力物力去開發(fā)一個游戲?qū)嶓w出來,比如我們喜聞樂見的吃雞這樣大場景的開放世界游戲,花花草草,一房一隅跟真實世界一樣一樣的,非常難通過一些簡單的符號規(guī)則表示了。
在另外一方面,游戲玩法的多樣性也對游戲的復(fù)雜度有很大的影響,玩法多樣性是什么意思呢?我們可以簡單理解為游戲取勝的方式的種類數(shù)。比如像賽車類游戲,當我們熟知賽道之后,如何能夠在這個賽道上跑出最佳成績的跑法其實基本上也確定了,考驗的主要是玩家能否把自己的最佳狀態(tài)表現(xiàn)出來。而之前被津津樂道的圍棋,號稱包容了人類最高深的智慧,它的取勝方式相比賽車這類游戲就要豐富得多。這里其實有兩個原因,一個是因為本身棋盤上可以做的選擇就比較多,另外一個是因為由于對手的不同,取勝的策略也會因此不同。這個第二點其實可以作為游戲復(fù)雜度一個重要分水嶺,對戰(zhàn)類的游戲由于存在對手策略未知的問題,往往都會比非對戰(zhàn)的游戲要復(fù)雜得多。而在對戰(zhàn)類的游戲中,對方的信息是否可見又成為對戰(zhàn)類游戲里一個重要的分水嶺,對方信息不可見的我們一般成為非完美信息,這類游戲又比對方信息可見的游戲要難得多。
從這兩個維度去考慮我們目前常接觸到的游戲的話,我們會發(fā)現(xiàn)圍棋確實算是很難的游戲了,對戰(zhàn)類,并且策略選擇非常豐富。但是它又遠遠不是最難的,因為圍棋上雙方的信息都是公開可見的,因此相比起一些我們玩得比較多,似乎不太拿的上臺面的游戲比如麻將、德州撲克,其實就比圍棋還要復(fù)雜。而這些僅僅是棋牌類游戲,他們的表達都是比較簡單的,同樣具有對戰(zhàn)屬性,并且對手信息不可見的電子游戲諸如王者榮耀、吃雞其實難度還要再更上一層樓。
了解了目前游戲的難度分布概況之后,以我們目前的人工智能技術(shù)而言,是否能夠自動生成這些游戲的AI呢?很遺憾的是,其實真正能完美做出來的并不是特別多。
?
在上圖的用綠色框出來的范圍內(nèi)的游戲種類已經(jīng)在學(xué)術(shù)上有很好的解決方案了,他們通常是非對戰(zhàn)類的游戲,有著比較明確的游戲目的,比如獲得高分之類的,而一些策略相對比較小的對戰(zhàn)棋牌類游戲也有相應(yīng)的解決方案了,比如五子棋、象棋等。由于商業(yè)的需求,這類游戲可能會有著相對復(fù)雜的3D場景,這對于表達游戲會有一定的困難,但是并不會給這類游戲造成真正的困擾。比如在QQ飛車中,我們也可以通過一些特征表示將場景進行簡化,同樣能夠生成水平比較高的AI。
圍棋作為一種玩法策略比較豐富的競技對戰(zhàn)游戲,是很難解決的,曾經(jīng)一度作為人類頂尖智慧的代表。不過近幾年由于阿爾法狗的誕生,終于使得人工智能技術(shù)已經(jīng)能夠克服圍棋這樣復(fù)雜度的游戲了。但是阿爾法狗的技術(shù)本質(zhì)上并沒有突破性的創(chuàng)新,它成功的關(guān)鍵在于將各種已有技術(shù)的有機結(jié)合和非常頂尖的工程實現(xiàn)能力。這里這么說主要是想要強調(diào)兩點:1.阿爾法狗在人工智能算法上其實并沒有基本原理上的突破,并不代表人工智能能夠下圍棋了,人工智能就能顛覆世界了。2.解決的問題雖然很難,但還遠遠不是最難的。因為圍棋是完美信息的(即雙方的信息都可見),是回合制的(雙方不需要同時做決策),并且圍棋的表達不困難(一個三值的二維矩陣即可),很容易進行推演和復(fù)盤。
而對于像王者、星際這樣的游戲,游戲邏輯非常復(fù)雜,不僅對手的信息不可見,還需要與對手同時進行決策,一個對對手錯誤的預(yù)判,可能就導(dǎo)致整個局勢的扭轉(zhuǎn)。另外我們也很難像表示圍棋那樣用一個簡單的矩陣就完美的刻畫整個盤面,也沒有辦法很快的在一個盤面上進行推演,這就為游戲的AI設(shè)計大大增加了難度。換句話說阿爾法狗上的經(jīng)驗幾乎很難應(yīng)用到這類游戲上來,必須有更先進的技術(shù)才能取得突破,目前這兩類游戲的AI在學(xué)術(shù)界上依然處于研究探索階段,目前已經(jīng)有了一定的成果,可以參考DeepMind、OpenAI,還有騰訊在王者上做的絕悟。雖然這些工作都有了一些實際展示,但是它們在該類游戲上達到的程度還遠沒有達到阿爾法狗在圍棋中那樣至強的水平。
而像吃雞這樣真實世界場景,大規(guī)模多人在線,并且敵人信息不可知,而玩法又極其豐富的游戲無疑是目前游戲AI設(shè)計的至難題材了,學(xué)術(shù)研究甚至還沒有涉足到這樣復(fù)雜的載體上。
所以從上面的分析來看,對于目前的游戲市場上的游戲,我們能夠用人工智能技術(shù)自動化的解決NPC的品類并不是特別多,而且很多能夠解決的品類中,耗費的代價還異常巨大,比如在OpenAI的DOTA的設(shè)計中,并不是任何一個游戲都能接受這樣的代價去制作NPC的。
AI技術(shù)能幫上什么忙?
如果我們從產(chǎn)品上去考慮,重新審視一下我們的問題,我們真正需要完全自動的生成一個完整的頂級NPC嘛?有固然好,沒有的話,我們能做什么呢?
除了運營階段為不同水平的玩家提供陪玩服務(wù),在我們游戲研發(fā)階段其實也有很多場景需要設(shè)計NPC,比如為關(guān)卡設(shè)計BOSS,或者為游戲設(shè)計教學(xué)NPC等等。應(yīng)用在這些場景的NPC不一定要覆蓋到整個游戲場景,并且可能也不需要特別強的能力。
懶惰雖然是人類發(fā)展的第一動力,但是羅馬不是一日建成的,我們不能完全自動生成游戲中所有的NPC,但是部分生成也許是可行的。因此我想需求可能會有這么幾點:
減少繁瑣的人工規(guī)則:編寫規(guī)則類的NPC是費時費力的,不僅要對游戲邏輯有非常清晰的梳理,還需要不斷地調(diào)試其中的參數(shù),以提高NPC的水平。在這一步,如果能夠盡量利用機器自動生成,能生成多少是多少。生成越多就越能減少游戲開發(fā)技術(shù)人員的工作量。
拉近非技術(shù)人員與NPC設(shè)計的距離:非技術(shù)人員(比如策劃等)最好能夠真正參與到NPC的創(chuàng)建中去,而不僅僅是通過向開發(fā)提需求。如果能夠創(chuàng)造全新的NPC設(shè)計接口,讓非技術(shù)人員也能非常容易的自己動手設(shè)計NPC,不需要寫代碼,不需要太多繁瑣的數(shù)值調(diào)整那就是最好的。當策劃能夠通過較為自然的方式提出所需要的NPC,而這些需求又能夠通過精確的轉(zhuǎn)換,變成機器可理解的目標,那只要不是特別復(fù)雜的任務(wù),讓非技術(shù)人員自動生成NPC也就易如反掌。
復(fù)雜的AI設(shè)計能夠有套路可尋:對于那些沒有辦法完全自動生成的復(fù)雜NPC怎么辦呢?除了等待技術(shù)的進一步革命,一種簡單的想法就是采取分治法。復(fù)雜的NPC應(yīng)該是可以由一些簡單的部件構(gòu)建起來的。當我們可以很容易生成簡單部件的時候,設(shè)計復(fù)雜的NPC也就有跡可循了。
基于上面分析的這些需求點,我們可以看到關(guān)鍵問題可以歸結(jié)為兩點:
1. 如何定義和解決機器能夠自動生成的模塊?
2. 非技術(shù)人員如何定義這樣的模塊?
針對這兩點我們再來看看,使用機器學(xué)習(xí)技術(shù)大概能做到什么程度。
定義可自動生成的NPC
一種方式是利用領(lǐng)域知識來拆解問題,定義一些目標明確的任務(wù)目標。例如:賽車比賽中盡量快,籃球中晃動之后投籃盡量準,格斗游戲中能快速使用某技能擊中對手等等。一旦我們能夠清晰的描述我們的問題,我們就可以給強化學(xué)習(xí)設(shè)計獎賞函數(shù),讓強化學(xué)習(xí)為我們自動完成NPC的生產(chǎn)。所謂強化學(xué)習(xí)就是針對我們的目標為NPC設(shè)計一些激勵機制,讓NPC在自己的探索中不斷摸索出能夠完成我們目標的行為模式的方法。。
既然有這等神器,為什么不能所有任務(wù)都完全交給強化學(xué)習(xí)呢?因為強化學(xué)習(xí)中涉及到大量的試錯過程,需要比較高昂的時間代價,另外對于復(fù)雜的任務(wù),依然還沒有特別高效的算法可以保證收斂到最優(yōu)情況。因此我們只能將一些不那么復(fù)雜的任務(wù)交給強化學(xué)習(xí)解決。
有時候我們雖然有明確的目標,但是卻比較難進行形式化的定義。不過如果我們很容易對這個任務(wù)進行示范,那也能通過機器學(xué)習(xí)技術(shù)得到解決。
UC Berkeley的人工智能實驗室就做了這樣的一項研究。首先讓用戶提供一些完成任務(wù)的樣例,然后基于這些數(shù)據(jù)訓(xùn)練一個任務(wù)成功與否的判斷分類器,用分類器的結(jié)果作為獎賞,用以進行強化學(xué)習(xí)的訓(xùn)練,并在這個過程中搜集分類器的負樣本。最終依據(jù)學(xué)習(xí)的結(jié)果,選擇一些樣本向用戶進行查詢。不斷迭代這個過程就能夠得到一個不錯的AI。
這個過程實際上利用了兩種技術(shù),一種是逆強化學(xué)習(xí)。因為在訓(xùn)練獎賞分類器的時候,不僅人類提供的正樣本很重要,負樣本同樣也很重要。如果負樣本覆蓋不全就會導(dǎo)致模型學(xué)習(xí)到很偏的行為,但是讓人類提供各種各樣的負樣本代價太高了。因此這里的游戲賬號買號平臺逆強化學(xué)習(xí)中實際上是在用一種對抗的方式生成負樣本。具體一點而言:
1. 隨機初始化獎賞分類器和強化學(xué)習(xí)策略
2. 更新策略最大化獎賞
3. 訓(xùn)練分類器以區(qū)分用戶提供的樣本和策略采集到的樣本
4. 用新的分類器作為獎賞分類器再更新強化學(xué)習(xí)策略
5. 不斷迭代這個過程,直到模型不再能區(qū)分策略的樣本和用戶的樣本。
但是上面這個過程雖然不需要用戶提供負樣本,但是卻需要在建立分類器的時候提供大量的正樣本,對用戶的使用而言依然還是有很大的使用負擔。這里就采取了主動學(xué)習(xí)的技術(shù),選擇一定的樣本向用戶進行查詢,從而避免了讓用戶提供大量正樣本的問題。
在實際試驗中,這個方法顯示只需要向用戶進行比較少次數(shù)的詢問就可以成功的訓(xùn)練機械臂完成指定的任務(wù),并且都是直接從圖像中學(xué)習(xí)得到的。
這里簡單展示一下他們的實驗成果。主要考察了如圖所示的三個機械臂任務(wù):
pushing,這個任務(wù)需要機械臂將一個杯子推到杯墊上
draping,這個任務(wù)需要機械臂將一塊布蓋在盒子上
book placing,這個任務(wù)需要機械臂將書插入到書架的空處
每個任務(wù)初始都提供了80個成功的樣例,通過上面的算法都訓(xùn)練到了能夠百分之百準確率的完成任務(wù),下面是每個任務(wù)需要主動向人詢問的次數(shù):
?
從這個結(jié)果中我們可以看到,在對于我們?nèi)祟惗员容^能接受的詢問次數(shù)里,我們就可以利用機器學(xué)習(xí)技術(shù),讓機械臂完成相對不是特別復(fù)雜的實際操縱任務(wù)。
但是我們可能并不想去做這個問題的拆解,有時候是因為懶惰,有時候是因為有些問題確實很難去清楚的去劃分子模塊。這種時候,其實機器學(xué)習(xí)也能夠幫上忙,OpenAI就提出來一種不用領(lǐng)域知識就能生成若干行為模式的方法,認為不同的行為模式會訪問到不同的狀態(tài),用訪問到的這些狀態(tài)即可以作為不同行為模式的區(qū)分。只要盡量鼓勵行為模式之間的差異性,就可以得到足夠豐富行為。
具體一點而言,這個算法的優(yōu)化目標可以形式化為如下這樣:
F = I(S;Z) + H[A|S] - I(A;Z|S)
三項中,第一項是最大化子策略和狀態(tài)之間的互信息,為的是控制自測路訪問哪些狀態(tài)。
第二項是最大化混合策略的熵,將所有子策略放在一起視為一個混合策略,最大化熵即是鼓勵子策略的多樣性。
第三項是最小化策略和給定狀態(tài)下的動作之間的互信息,這是用以確保策略是由狀態(tài)來被區(qū)分的。
算法流程大概是這樣:
?
一開始從行為(skill)的分布中采樣出一種,然后在本輪探索中按照該行為給出的動作概率去采取動作。如果智能體探索到容易被分類器區(qū)分的狀態(tài)里去,就會被獎勵。與此同時,分類器也會進一步為了更好的從狀態(tài)區(qū)分出行為進行更新。
在文章中的模擬環(huán)境實驗中,在沒有任何獎賞設(shè)計的情況下,AI自己就學(xué)會了諸如跑、走、翻滾等行為模式。
?
如何使用
從上面提到的這些技術(shù),我們可以看到我們是有可能為非技術(shù)人員提供更為直接的設(shè)計NPC的途徑的。
對于能夠明確定義出目標的任務(wù),只需要設(shè)定目標即可。如果不能準確描述出來,可以使用示范的形式。如果示范也不想做,也可以讓計算機自己去探索一些行為模式之后再做挑選。這里的大部分工作可以交由計算機去完成了。
除此之外,當我們有了這些由機器生成的簡單模塊之后,對于這些模塊還不能完成的復(fù)雜任務(wù),他們依然可以利用起來作為零部件去拼湊一個復(fù)雜的AI。拼湊的方法可以是用傳統(tǒng)的行為樹,將這些模塊作為節(jié)點進行調(diào)用。也可以用機器學(xué)習(xí)的方法進行組合,比如分層強化學(xué)習(xí)。
在OpenAI的文章中也提到了,利用這些基礎(chǔ)模塊,能夠加速強化學(xué)習(xí)的對于復(fù)雜問題的學(xué)習(xí)過程。
實驗進行在如圖所示的兩個任務(wù)中,Cheetah Hurdle希望智能體能夠順利快速的跨過障礙物,Ant Navigation則要求智能體必須按照指定的順序到達每個點,最終獲得一個獎賞。這兩個任務(wù)中的障礙物和稀疏的獎賞使得對于非分層的強化學(xué)習(xí)方案非常難以學(xué)習(xí)。
?
但是在利用上面的自動生成行為的方法之后,在這些方法之上加上強化學(xué)習(xí)則能取得非常好的結(jié)果。之前傳統(tǒng)方法甚至不能完成的任務(wù),在這里能夠被完成了。
?
展望
上面提到的這些方法其實只是這類技術(shù)里的冰山一角,還有更多的工作值得去研究。而對于我們游戲開發(fā)者而言,游戲方法雖然本身并不為游戲開發(fā)而生,但卻實實在在能夠在游戲開發(fā)的某些環(huán)節(jié)中體現(xiàn)出重大作用。比如上面提到的這些工作,他們都在幫助非技術(shù)人員理解和使用人工智能技術(shù)設(shè)計游戲NPC的道路上,或多或少地提供了一些技術(shù)思路。
當然目前來看缺點也是很多的。為什么叫大話AI輔助NPC設(shè)計,就是因為它還僅僅停留在學(xué)術(shù)文章上,到實際生產(chǎn)環(huán)境中還有很長的路要走。即使能夠很好的實現(xiàn)出來,它依然不能完全免除人工參與。比如:對于用戶自定義的模塊,需要用戶自己對問題進行拆解劃分;對于定義模糊的模塊時,需要用戶進行示范;對于完全自動生成的行為,可能在表現(xiàn)上都完全不是我們想要的類型。
還有一點值得一提的是這類方法并不能保證生產(chǎn)智能體的強度。對于智能體的強度提升,還有很多廣闊的課題需要做,不同的游戲品類要實現(xiàn)頂級強度AI的難度是完全不一樣的,哪怕只是玩法上的一點點改變,問題可能就會變得很難很難。這方面依然需要長期探索。
這里討論的技術(shù),更多的是考慮非技術(shù)人員可以怎么去使用人工智能技術(shù)。并且這些技術(shù)發(fā)明之初,也并不是為了游戲研發(fā)的場景。因此這里其實希望有更多的游戲開發(fā)者(策劃、游戲開發(fā)等等)以及人工智能技術(shù)的研究人員共同參與進來,一起打開腦洞,一起去設(shè)想怎樣的工具才是游戲開發(fā)者期望的效率提升神器。這樣我們才真正有可能去革新游戲研發(fā)中的這一環(huán)。
我們希望游戲中的人工智能技術(shù)今后不僅僅只停留在Nature、Science這樣離我們比較遙遠的學(xué)術(shù)期刊上,也不是停留在一些宣傳的視頻文章上,而是能更接地氣的實實在在地在我們的生產(chǎn)環(huán)境中應(yīng)用起來,成為廣大游戲開發(fā)者的福音。當然這是一場漫長的遠征。下一世代的游戲NPC設(shè)計工具究竟是怎樣的,由我們這一代游戲人來共同定義。
總結(jié)
以上是生活随笔為你收集整理的大话AI技术辅助游戏NPC设计的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 图形软件
- 下一篇: 转贴:读山老农的《白昼岂知黑夜之黑——加