榮獲“休閒/社交遊戲類最佳聲音設計獎” 《使命召喚手遊》是如何做空間音訊設計的?

遊資網發表於2020-05-20
文丨陳小榮、徐凱
遊戲音訊策劃、音訊程式設計師

在剛剛結束的第18屆G.A.N.G(Game Audio Network Guild,遊戲音訊網路協會,全球最大的遊戲音訊行業組織)年度遊戲音訊頒獎大會上,天美工作室群研發的使命召喚手遊榮獲休閒/社交遊戲類最佳聲音設計獎,這也是中國研發的遊戲首次在這個獎項上獲獎。同時,使命召喚手遊還榮獲了2019年第十一屆中國優秀遊戲製作人大賽的最佳遊戲音訊設計獎,可謂包攬了年度國內和國外的重磅遊戲音訊獎項。下面,專案的主音訊設計師陳小榮以及音訊程式設計師徐凱,將向業內分享使命召喚手遊關於空間音訊方面的聲音設計和思考。

榮獲“休閒/社交遊戲類最佳聲音設計獎” 《使命召喚手遊》是如何做空間音訊設計的?

當我們提起“空間音訊”的時候,我們在聊什麼?

在真實世界中,聲音除了在傳播過程中因能量損耗而產生的衰減外,遇到阻礙時,會產生反射、阻擋、衍射、透射等一系列客觀物理現象,經過人的雙耳聽覺主觀感知,在複雜空間中進一步延伸出:回聲、混響等效果,通過這些,我們就能判斷出與音源的發聲和聽者的聽音相關的位置、環境和空間等資訊。在遊戲中,模擬這樣需要判斷空間資訊的聽音體驗,這個課題通常稱為:空間音訊。

在目前遊戲音訊行業中,空間音訊包含有3個方向的內容:

1. 聲音的傳播模擬

榮獲“休閒/社交遊戲類最佳聲音設計獎” 《使命召喚手遊》是如何做空間音訊設計的?

2. 聲學空間中的聲音效果模擬(本文主要探討這部分內容)

榮獲“休閒/社交遊戲類最佳聲音設計獎” 《使命召喚手遊》是如何做空間音訊設計的?

3. VR應用中,模擬3D空間的聲音效果

做好空間音訊,對於遊戲體驗的增益在於:

1. 對於音源更準確的定位。
2. 更好的身臨其境感(沉浸感)。
3. 更豐富的變化,降低聽覺疲勞。

換句話說,就是:

我在哪裡?同伴在哪裡?敵人在哪裡?

哇,聽起來跟真的一樣。

回到本文的主角:使命召喚手遊(以下簡稱CODM)

CODM是天美研發的世界頂級FPS遊戲IP使命召喚的手遊版。對於天美音訊團隊來說,頂著常年橫掃各大遊戲音訊獎項的原作IP的光環,又是我們研發的首款真正意義上3A級別品質要求的FPS手遊,壓力非常之大。體驗過原作的同學們應該能感受到遊戲聲音的空間反饋是非常細膩的,在房子、教堂、街巷等各種區域,根據遊戲角色即時在這些地方的任意位置、朝向方向,都能非常逼真地還原。在過往的射擊品類手遊中,基本都會因為硬體平臺的限制或者產品的定位而選擇降低這個模組的設計標準。所以拿到CODM後,我們下定決心有所突破,讓空間音訊效果更加精細化。

問題來了:都說空間音訊難,難度在哪裡?

我們先來分析下一個聲音傳播到人耳的不同階段:

直達聲:

發聲後,球面推進出去的聲波,直接傳到我們耳朵裡的,我們稱之為直達聲,在野外開闊的情況下,如沙漠草原等等,若忽略從地面的反射聲之後,我們聽到的聲音基本都是直達聲。

早期反射聲

經過障礙物反射後回到我們耳朵裡的,我們稱之為反射聲。聲波的速度是恆定的,根據發聲位置,障礙物離聲源的距離,反射面角度,決定反射聲到達人耳速度的快慢有別。發聲後,聲波會在密閉空間中的來回四處彈射,總會有反射波較早到達人耳(通常在5-100毫秒之內)。這類反射聲主要以初次或者二次反射聲為主,我們稱之為:早期反射聲。

混響聲:

之後的反射聲依然不會消停,繼續再次碰到障礙物,再一次次地被反射,一直到能量逐漸消失。因為無數聲波四面八方的彈來彈去,這些經過多次反射的聲音會密集纏在一起進入人耳,隨時間能量越來越弱逐步消停。這種亂棍一樣的多次反射聲我們稱之為:混響聲。

就像蝙蝠回聲定位一樣,通過解析早期反射聲和混響聲,人就能自然地分辨出房間有多大,牆面地面大概材質,房間裡大致有什麼東西,在房間什麼位置發聲,發聲的朝向等資訊。其中早期反射聲的作用會更大些。

榮獲“休閒/社交遊戲類最佳聲音設計獎” 《使命召喚手遊》是如何做空間音訊設計的?

回到遊戲中,我們需要模擬空間聽音效果,最真實,也是最直接的辦法當然是完全還原聲波傳播的物理軌跡,這類似於光線追蹤,對聲音的傳播路徑進行物理建模。但是顯而易見,模擬四面八方幾乎無窮多的聲波,這海量的計算非常耗費運算資源,在很多情況下不太具備實用性。所以,在演算法或者算力沒有突破前,基本都是通過簡化後抽象出的少量關鍵要素,通過數學建模,開放出相關引數來模擬的。

關於如何模擬,舉個簡單情況下的例子。

比如說當人在房間裡,聽房間內一個發音體的聲音。發聲體離他的耳朵絕大部分情況下都是最近的,所以他首先聽到的是發聲體直接傳到耳朵的直達聲。然後聽到的,是離他最近的,與他耳朵連線呈直角的牆壁或者地面反射回來的反射聲。正常的四方形房間,他會聽到前後左右上下,一共6次這樣的一次反射聲,以及同樣的2……n次反射聲,請注意:某些方向的一次反射聲未必比其他二次或者n次反射聲先聽到。

榮獲“休閒/社交遊戲類最佳聲音設計獎” 《使命召喚手遊》是如何做空間音訊設計的?

下面我們來詳細盤點一下影響因素:

  • 發聲音源在空間中的不同位置、發聲特性、朝向特性。


位置、發聲特性顯而易見,這裡簡單說一下朝向特性,如果我們簡單的按照6個朝向的一次反射聲來說。理想化的音源,是一個朝四面八方散播出同等聲波能量的球形音源,但是這種音源在現實中幾乎不存在。比如我們以人發音的簡化的例子,肯定是嘴朝向的那個方向,聲波最沒有受到影響,能量最大。方向偏離一些的聲音,會受到嘴或者身體的影響,損失部分能量,跟嘴朝向相反的聲音,因為聲音要穿過頭,顯然能量損失最大。所以說,音源都是有朝向的,不同方向聲波能量、頻譜都是有差異的。但是,聲波的傳播速度是一樣的,這就會導致,因為朝向不同,反射回來的6個1次反射波形,不僅先後速度(也就是反射回來到達耳朵的時間)有差異,能量特徵也有差異,換成專業術語就是音量和頻率均衡方面有差異。所以,如果我們發聲的方向按朝這6個方向各轉6次,得到的1次反射聲波的特性都是有區別的。同理,如果挪動發音位置,顯然也一定會影響這樣6個1次反射聲波的組合特徵。這種區別,就是最簡化版的人耳用來判斷在房間的大小、位置、朝向以及房間聲學特性的依據。這樣最簡模型下的,6個方向的1次反射聲比較容易模擬(這句劃重點,就是因為容易模擬才實用,也是遊戲空間音訊實際運用的基礎),每一個方向的聲音波形,計算經過反射後頻率衰減和音量衰減(振幅衰減),再按照到達人耳的時間,跟直達聲混合起來就行了。但真實世界的情況一旦複雜化,n(n接近無窮)個方向,n次、n階反射聲,對於算力的影響就很大了。

  • 不同材質的牆地表面,對於聲音的吸收或者反射的特性是不一樣的,反射回來的聲音,可能頻譜中的某些頻率的能量損失更大。所以我們可以通過調整EQ(頻率均衡)來模擬,比如衰減某些頻段的EQ。但是真實情況確實是非常複雜的,比如,房間裡有一面牆,牆上掛了鏡子和毯子,那這面牆上就有3種不同反射效果的表面,各表面的大小形狀,顯然就會影響到早期反射和混響,精確計算會非常的困難。同理,房間裡擺放的各種物品,也是會極大影響房間的空間音訊效果的。我們都有生活經驗,當搬家時把房間搬空,聽起來就會跟有傢俱時差異很大。


  • 不同的房間,有不同房間的“音色”,也就是混響。這句怎麼理解呢?我們上文提到過,混響聲相當於是聲波在房間裡經過多次反射後密集的纏繞能量逐步消逝,這一系列反射聲在聽音位置進過人耳識別後產生的感覺。雖然早期反射聲會因為聲源在房間中位置朝向有區別,但是經過更長時間,更多次的反射之後,剛開始的反射路徑差異就會被越來越多密集的來自四面八方的n次反射所抹平。反映到最終效果上,基本上只要是同一個房間,產生的混響聲特性都是相似的。所以,通常我們都可以用一個簡單的聲源,比如敲一下鼓棒,錄下房間裡這個聲源發聲產生的混響效果,把錄下的波形經過數學建模(或者不通過錄下波形,直接根據混響原理數學建模),基本就能反映出這種型別房間的混響特性。這樣我們需要把新的聲音模擬房間的效果是,只需調出房間的混響模型,把新的聲音套上去進行效果處理(這種抽象出的模型應用後,計算量就很低了),基本就能達到類似的聽覺效果了。因為我們不可能所有房間都去錄一遍,所以一般這類混響效果會開放些引數,讓效果有些差別,這樣模擬效果會有更多變化。這些引數通常有:混響型別(教堂、大廳、房間、板式、彈簧等等),混響時間(聲能密度衰減到原來百萬分之一所需時間),高頻衰減率、混響擴散(房間是鏡面反射還是漫反射)等等。


榮獲“休閒/社交遊戲類最佳聲音設計獎” 《使命召喚手遊》是如何做空間音訊設計的?
常見的混響數字模擬效果器和引數

上文一通操作猛如虎,其實就是為了得出一個結論:對於遊戲中模擬空間音訊效果應用,我們需要能夠掌握房間的大小、材質、物件資訊,以此調出相應的混響型別,並微調諸如混響時間、高頻衰減率、混響擴散等引數,大致就能得到類似空間音色效果。其中,早期反射聲會複雜很多,需要隨時掌握遊戲角色在空間中的位置資訊以及對應的牆壁、物件等聲音障礙物的情況進行計算模擬,如果是粗略的情況可以使用類似混響聲的處理辦法,通過幾個引數來調整模擬。精細的話,因為早期反射聲的計算量相對不算大,可以如上文類似物理建模的方法進行精確的人工計算生成模擬。

聊完了理論,得出了結論,步入正題。如果我們想在遊戲裡做空間音訊,就要解決兩端的問題:

1. 問題一:如何實時判定遊戲角色是否身處空間中,該空間的大小、形狀、材質引數,以及為了模擬早期反射聲所需的位置、朝向、聲音障礙物等資訊?

2. 問題二:得到了一系列遊戲資訊,轉化為聲音專業引數後,怎麼實現空間音訊相關的早期反射和混響效果?

對於問題一,簡化的做法是隻在遊戲場景中劃出空間區域,比如:山洞、房間等等,只需判斷遊戲角色是否在這個區域中,或是進入這個區域的入口邊緣地帶即可,這樣的方式只能大致反映出發聲點所處的空間環境資訊,但基本上進入了這個空間後所有聲音都是一樣的,沒有辦法判斷角色在這個空間中的具體位置,通常對於空間定位要求不高的遊戲會採用這種方式。對於空間定位要求高的,基本主流都會使用射線+空間資訊編輯的方式,即在地圖編輯中,詳細指定出空間的大小形狀、表面材質、障礙物件等等資訊。然後通過從角色位置不停發出大量的射線,來標記空間資訊,並返回某一時刻角色在空間中模擬空間音訊效果所需的關鍵資料。這裡我們可以看出,當然是射線越多效果越好,可是射線判定的系統消耗較大,硬體有限制的情況下就必須優化演算法,有選擇地發射線。比如,音源點到牆面的最短距離路徑是最重要的,一定要有射線,音源後方的射線必要性較小,可以簡化,等等。這個話題我們之後再進一步討論,總的來說,就是主機遊戲效能限制小,射線可以多,但手遊效能限制就很大了,通常只能給出幾條射線,是遠遠不夠精確反饋空間資訊的。

榮獲“休閒/社交遊戲類最佳聲音設計獎” 《使命召喚手遊》是如何做空間音訊設計的?
圖:Remedy Entertainment-《Quantum Break》的射線投射系統,來源:Wwise Tour 2018

問題二,通常混響可以通過使用混響類效果外掛來模擬,不過有些有特殊需求,或是希望更精細的情況下,也有團隊自己做效果演算法。還有一種針對槍聲的混響模擬的方式,是通過預錄製室內、室外的槍聲,只取用tail即尾音部分,這樣的話效果會更自然,但是針對不同空間的變化響應靈活度較低,需要根據適合的遊戲型別來運用。對於早期反射,需要精確計算的情況下,當射線返回反射點資訊時,可以通過虛擬聲源的方式模擬,相當於在反射點建一個聲源,把源聲音進行了模擬反射效果處理(如:音量衰減、頻率均衡處理等等)後,在反射點作為新的音源發聲,帶上反射點相對聽音點的音源朝向、傳播衰減等引數,按照反射聲的整個路徑距離算出返回聽音點的延遲時間,多個反射聲跟直達聲按時間順序疊加起來,這樣基本能很好的模擬。可以看到反射點越多,模擬效果越真實,當然系統消耗就越大。

榮獲“休閒/社交遊戲類最佳聲音設計獎” 《使命召喚手遊》是如何做空間音訊設計的?
《NieR:Automata》K-verb DSP效果器原理圖,資料來源:Audiokinetic部落格

以上提到的,只是一種近乎於科學模擬的大致的思路,實際上游戲更多的是藝術、是感受,重要的並不是是否完全精準,完全科學,而是符合遊戲體驗的需要。所以,不同的遊戲在空間音訊方面是會根據情況採用靈活的方法處理的。比如,在守望先鋒中,就採用了一種叫:Quad Delay(四向延遲)的方式,簡單來說,就是按照主角的朝向,固定的以一個十字型的方位發出四條射線,返回四個射線碰撞點的資訊,角色的到碰撞點間的距離,對應delay時間引數,碰撞點材質以及角度等,通過EQ模擬,碰撞點的相位通過Delay 聲音的Panner來處理,這樣就能以不大的系統消耗,滿足遊戲需求地模擬出早期反射聲空間效果。


榮獲“休閒/社交遊戲類最佳聲音設計獎” 《使命召喚手遊》是如何做空間音訊設計的?

榮獲“休閒/社交遊戲類最佳聲音設計獎” 《使命召喚手遊》是如何做空間音訊設計的?
《守望先鋒》Quad Delay說明,資料來源:《守望先鋒》2016 GDC演講

CODM中我們的做法

通過上文描述,我們對於空間音訊在遊戲中的實現方式已經有所瞭解,主流3A遊戲通過大量射線判斷的方法,非常精細。但是對CODM這樣一個手游來說,效能上是一個巨大的問題。通常對於手遊,音訊模組能有2-3條射線進行計算已經是比較奢侈了,射線不夠的情況下,要做好精細的判斷是非常困難的。而且,即便射線夠,要想從零開始實現空間音訊的整套演算法並優化效能達到可用性,也是一件非常不容易的事,技術籌備那段時間可真是愁白了少年頭。

正在發愁的時候,一番勾搭,我們瞭解到遊戲音訊中介軟體Wwise準備推出新的Spatial Audio功能,這與我們的需求無縫銜接。經過來回半年的磨合洽淡,在Wwise還沒有正式對外發布這個功能元件的時候,我們已經把它加入到了CODM的研發中,成為了首個使用Wwise Spatial Audio功能的手遊。當然,光是使用Wwise的外掛還是不夠的,我們也針對CODM的產品特性做了很多優化,最終打磨出瞭如下這套CODM的空間音訊方案:

一、空間的區分與判定

區域劃分

想要在遊戲中實現聲音的反射效果,首先要在引擎中把這些要反射聲音的區域圈出來,並且告訴伺服器這些區域分別是什麼,例如房子,隧道,山谷等,CODM裡面這些區域主要都是不同的房子。所以,第一步需要解決的是如何判斷是在室內還是室外?

在其他專案中,我們為了更方便和更低消耗地判斷玩家是否在房子裡,會使用在角色的頭頂打射線的方式,射線被阻擋則判斷角色在室內。這樣的設計物美價廉,絲毫不費工作量,確實能夠覆蓋大多數的室內場景,但是這樣一刀切的功能沒法根據房子的不同去區分不同的混響,同時也會把一些頭頂有遮擋的室外地方判斷成室內。例如當玩家蹲在室外屋簷下的時候,他不僅帶了室內的混響,而且這個混響和蹲在廁所裡的混響如出一轍。而且,如前文所描述,如果沒有更多射線和空間定位、反射等演算法支援,我們是沒有辦法實現早期反射效果來進行空間中更精準的定位的。

在專案進行早期進行到這個節點時,在研究了Wwise Spatial Audio套件後,我們決定手動把場景中所有的室內空間用Unity的Cube圈出來,通過判定是否在Cube裡,除了能更好地區分室內外,還是合入Wwise Reflect外掛的必要步驟。設定了Unity中的Cube資訊後,通過Wwise跟Unity的整合,可以用AK(Wwise的開發公司)提供的現成演算法(射線+空間與朝向資訊+映象虛擬反射聲模擬)判定角色在室內空間的實時位置與空間反射情況,非常方便地實現早期反射效果。但是這樣確實帶來了很大的工作量,幾百個房屋,嚴絲合縫地畫出Cube,真可以說能耗死十個聲音設計師。當然也可以選擇和專案組美術溝通,讓負責場景的美術同學在製作場景的時候就幫你把這些Cube做好,如果能做到了這一步,恭喜你,你省去了大部分的工作量,但是以下內容依然對你有用。

  • Cube組合


由於遊戲為了極致的優化,會對3P角色進行裁剪,當3P不在視野內時,甚至不會更新其物理資訊,甚至根本不會存在(只有位置資訊),所以我們只能通過各種簡單的幾何形狀來組合,所以對於不規則形狀的房間,如何畫Cube來標出室內區域,這是我們首先需要解決的問題。

室內空間不規則,就需要利用多個Cube疊加來覆蓋到所有室內的區域,如果不疊加就會留有一些縫隙區域,玩家在這些區域還是會被認為在室外,而室內外的槍聲差異是巨大的,所以這些縫隙必須得幹掉,蒼蠅都不能飛進來。

榮獲“休閒/社交遊戲類最佳聲音設計獎” 《使命召喚手遊》是如何做空間音訊設計的?

我們設定了一個優先順序系統,把這些會重疊的Cub都設定為相同的優先順序,程式把重疊區域設定為無響應區域,玩家經過這些重疊區域時不會判斷任何的進出Cube行為,這樣就保持了整個不規則的區域為一個室內。但是需要注意的一點是這兩個Cube的重疊區域,他們的進出行為不需要被切換,但是混響配置依然需要能夠被切換,畢竟上完廁所回到房間,我們的混響總得換一換吧。

  • 碰撞體優化


Unity預設角色碰撞體為整個人,當它在判斷進出行為的時候機制有所不同,判斷人物進的時候是隻要接觸Cube就算進入,但是出Cube需要整個人全部出去才算。

例如奧尼爾和庫裡在室內同一個地方以相同的速度走到室外,那麼奧尼爾想要聽到室外混響的時間比庫裡來的久,因為Unity判斷奧尼爾經過門口的時間更長(如果不知道原因請檢視這兩個人的體型)。如果這還不夠過分就想想姚明站在閣樓裡,身子從屋頂的窗子探出去開槍,槍聲依然是室內的,因為下半身還在室內呢,此時要麼讓他趕緊滾出去,要麼把他下半身切掉才能讓槍聲變成室外的,這樣就不太好了。

榮獲“休閒/社交遊戲類最佳聲音設計獎” 《使命召喚手遊》是如何做空間音訊設計的?
玩家從室內探出身子在室外開槍

所以程式大佬程式碼一撒,今後不管是奧尼爾,庫裡,還是姚明,通通把他們的靈魂濃縮成一個點,然後把這個點安放在肉體的胸部或者頭部位置,Unity只根據這個點來判斷進出Cube的行為,這樣他們下次從屋頂探出身子朝外開槍的時候,再也不用擔心下半身被切掉了。


  • 射線檢測


遊戲中有很多房子有破爛的不規則屋頂,對於這種房子的室內外我們想要用Cube組合的方式區分開,非常的費力耗時。此時我們頭頂的射線可以排上用場了,我們在Cube上增加了一個設定,針對這種房子上的Cube可以勾選射線啟動,如果在Cube內,但是射線沒被阻擋,依然判斷是在室外。

榮獲“休閒/社交遊戲類最佳聲音設計獎” 《使命召喚手遊》是如何做空間音訊設計的?

例如上圖的房子,它可以分成3個混響區域,四面有牆的全封閉室內,被炸掉部分牆面的半開放的室內,和一部分純室外,我們需要用Cube把他們區分出來,此時聲音設計師的手已經開始瑟瑟發抖了:程式大佬要是不給我頭頂射線的話,我寧可去死。所以得到了來自程式大佬的強力支援之後,我們只需要先把裡面四面都有牆體的區域畫上Cube1,配置上混響,然後再在破爛的區域畫上Cube2,配置上混響,記得要把這個Cube2的混響傳送量減半,然後在這個Cube2上勾上頭頂射線。這樣從被炸燬的牆角,到半開放的室內,再到四面都有牆體的室內,我們的混響都能體現出不同了。

自動化管線

到這裡,我們本以為前期的準備工作已經就緒了,我們可以開始快樂地為藝術獻身,設計各種反射效果了,可是策劃同學把表格開啟,遊戲中的的房子多達400-500個。而要把這些房子一個個畫上區域正確的Cube,掛上各種需要設定的元件,對於整合配置的工作量實在是太大了。所以我們需要充分利用程式自動化來解決一些初步的重複性配置工作,在這個基礎上再去消耗聲音設計師,儘可能地讓設計師更多精力花在效果除錯、設計,而不是生產線上。

1. 批量生成

在CODM中,我們拿到一個房子的prefab之後,程式會根據房子的造型為我們一鍵生成一個能夠覆蓋所有區域的立方體Cube,同時在這個Cube上自動掛上所有我們需要的混響、早反射、進出房間觸發聲音事件的元件,並設定相關的引數。

2. 微調

對於一些生成了但是不符合預期的房子,我們再通過複製,調整大小來讓這些Cube與整個房子嚴絲合縫。需要注意的是,調整Cube的大小,我們一定要藉助Cube上Colider元件的Edit Colider功能。利用它,我們可以分別移動Cube的每一個面的位置,然後在遊戲Cook的時候,將這些編輯好的資訊寫入對應的房間資料中。。

3. 快速驗證

在程式的幫助下,我們三個聲音設計師用了三天的時間就完成了為所有的房子配置Cube和聲音元件的工作。但是完成這一步的工作之後我們在想,這麼多房子會不會在配置過程中有遺漏,或者專案組的同學做了新的房子沒有告訴我們,又或者他們修改一些老房子的時候刪掉了我們的聲音配置,這些我們又不知道。

這樣的未知資訊會帶來非常多的隱患,所以我們製作了一個匯出表格的工具,這個表格包括了所有房子的名稱,和Cube、Cube上的元件資訊。這樣我們通過檢視錶格可以初步檢測到所有房子是否有配置Cube、混響、早反射等元件,很好地解決了如何找到漏網之魚的問題。

防坑寶典

旋轉巢狀問題

我們最初在做的時候,一切都執行的非常好,直到有一天,我們發現一個人站在一個房子的邊緣,依然帶著房子的混響和反射聲。當時我們就驚了,反覆測試,發現這個問題是必現的。後來通過和聲音引擎的底層資料對比,發現傳給聲音引擎的資料在有巢狀的旋轉的時候,是有一定誤差的。後來我們統一了旋轉,在資料的序列化時候,對父物件的旋轉做了消除。

效能控制

這回應該可以在場景中批量生產Cube了,但是依然受到專案主程式的挑戰:由於我們不依賴於Unity的物理引擎,那麼場景中有這麼多的Cube同時在工作,每一個Cube都會對進出的角色進行混響計算和進出行為的統計,消耗了大量的CPU。

於是我們決定採用以1P為中心點畫半徑,半徑內的Cube才會工作,這樣場景裡面同時生效的Cube就少了很多,然後根據畫質的高低配選項,這個半徑的配置不同,高配的半徑距離自然可以放大一些,低配的半徑就小一些。所以,當你選擇越低配的時候,同時工作的Cube就越少,再加上分幀計算以及基於距離的更新策略,終於使專案主程式得以點頭通過。

剪裁Bug

過了兩天我們又發現,怎麼還有角色帶著室內混響在室外撒歡?不是改掉了嗎?原來,正是裁剪的功能給我們帶來的問題,當3P一直在室內,1P逐漸走遠,到達一定距離後Cube被裁剪,對於伺服器上帝來說,這個3P已經沒有了當前Cube的束縛,在他進入其他Cube重置狀態之前,他被永遠的判定在室內了,所以此時他在室外撒歡的時候,依然帶有純正的室內混響。

程式大佬手臂一揮,立馬再增加一個判斷,所有內部有角色的Cube,一一刀下留情,不做裁剪,這樣終於完美了。

二、空間聲音效果的實現

做好了空間區分與判定工作,接下來就是接入Wwise,實現具體效果。

如上文闡述,對於混響聲,只要知道進入了什麼混響空間,通過指定空間的混響型別和相關引數,使用輔助匯流排傳送,調節乾溼比,就能很方便的實現。

對於早期反射聲,我們將需要參與反射計算的多邊形,以及其對應的聲學材質資訊,傳遞給聲音引擎,聲音引擎拿到當前的多邊形資訊,以及發音體、聽者的朝向,位置之後,便會像計算光線傳播一樣,計算聲音的傳播路徑,聲音經過反射一次傳遞到聽者的,我們稱之為一階反射聲,聲音引擎中可以配置聲音傳播所計算的階數。我們有了這些資訊之後,在聲音引擎中,會被對映到引擎內建的引數,我們再通過使用多拍帶濾波器等效果器,對延遲,頻響等進行模擬。。

榮獲“休閒/社交遊戲類最佳聲音設計獎” 《使命召喚手遊》是如何做空間音訊設計的?
[ 圖片來源:Wwise Help ]

榮獲“休閒/社交遊戲類最佳聲音設計獎” 《使命召喚手遊》是如何做空間音訊設計的?
[ 圖片來源:遊戲內截圖 ]

如圖,E表示發聲體,L表示聽音者,通過兩者與空間表面形成的等角度反射射線,再讓反射點與發聲點間連線形成等邊三角形,三角形終點與聽音者之間的距離和方位就能決定延遲引數以及相位資訊等等,配合空間反射面的材質引數進行濾波處理,就能模擬出反射聲的效果。

在CODM中,我們重點針對以下兩種情況做了反射處理。

1. 室內反射:

通過設定早期反射+混響實現,具體的操作比較繁雜,可以參考Wwise公開的說明文件,有詳細指導。我們的策略是,不同的Cube,我們配置了不同的混響bus和傳送量,以及不同的早反射材質三個引數。所以每一個房子我們都要去針對這三個引數進行除錯。在遊戲中,聲音會通過Wwise的混響bus上的效果器而產生混響。早反射則是在遊戲過程中實時計算生成,然後和混響組合在一起,便形成了在房間內的整個反射效果。在CODM中,我們區分了大小房間,隧道,大廳,走廊,山洞等不同的混響效果,如圖所示:

榮獲“休閒/社交遊戲類最佳聲音設計獎” 《使命召喚手遊》是如何做空間音訊設計的?

2. 室外反射:

利用Cube內外面都可以響應早反射效果的設計,我們在一些帶有懸崖、山谷的場景中設計了帶方向的迴音,如果玩家在懸崖邊上開槍或者觸發語音,能聽到聲音是從懸崖方向反射回來的回聲。


如圖:我們想讓玩家在鐵質走廊區域的時候,開槍或者喊話會有懸崖的反射效果

榮獲“休閒/社交遊戲類最佳聲音設計獎” 《使命召喚手遊》是如何做空間音訊設計的?
如上圖所示,我們在懸崖邊上的金屬走廊處畫了一個Cube:A,然後在旁邊的懸崖裡面也畫了一個Cube:B,這兩個Cube的功能完全不同。

榮獲“休閒/社交遊戲類最佳聲音設計獎” 《使命召喚手遊》是如何做空間音訊設計的?

當玩家走進A時會觸發一個RTPC,這個RTPC會開啟早反射Aux Bus上的Delay和EQ效果器,所以在這個地方,玩家的早反射聲音就帶上了延遲和低通效果。懸崖裡的B是為了讓A裡的玩家觸發的聲音傳達到之後再反射回來,這樣便形成了從懸崖處傳來的回聲。

實際遊戲效果演示

總結

我們可以看到,Wwise雖然已經為我們提供了一套相對成熟的Spatial Audio配置方式,但是如果真正要在遊戲中批量的實現,我們還需要大量的準備和測試工作。在CODM的這部分模組的工作中,我們還有很多可以進行探索和優化的地方,比如自動化工具的是否還能更多的提升生產力,效果除錯和測試的流程能否更簡潔方便。

另,總的來說,空間音訊這塊我們的出發點是立足科學,但會結合我們的產品定位、硬體環境、使用者需求,基於對於聲學理論的理解,採用適合我們遊戲的方式來呈現。

隨著手機硬體日新月異,空間音訊模組肯定會更多的在手遊中具備更多實用性,逐漸向3A端遊接近,為玩家提供好的沉浸感和更精準的定位判定。此文目的在於拋磚引玉,呈現CODM實際專案中此模組的實現方式,也希望能幫助想要在手遊中使用Spatial Audio的同學,除了技術方案的參考外,提前避開一些坑,如果還能在最終的效果設計上激發大家一些靈感那就更好不過了。

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

相關文章