GME 語音聊天系統(tǒng)在《Suspects: Mystery Mansion》中的應(yīng)用

簡(jiǎn)介
這篇博文將介紹 GME 語音聊天系統(tǒng)在 Wildlife Studios 開發(fā)的《Suspects: Mystery Mansion》游戲中的應(yīng)用。文章由里奧?佩蘭托尼(技術(shù)音頻設(shè)計(jì)師)和菲利佩?洛佩斯(音頻程序員)攜手撰寫。
我們負(fù)責(zé)使用 GME 來替代現(xiàn)有的語音系統(tǒng) API。之所以如此,主要是為了提升音頻品質(zhì)并利用 Wwise 內(nèi)部信號(hào)流和空間化結(jié)構(gòu)及效果器鏈來提升對(duì)語音通道所發(fā)送內(nèi)容的更多控制可能性。
《Suspects》是一款社交推理游戲,以原生語音聊天、大量獨(dú)特游戲模式和定期內(nèi)容更新為主要特色。
要想正確設(shè)置游戲中的語音聊天并不容易,因?yàn)檫@當(dāng)中有很多影響其功能的情境規(guī)則。比如交叉實(shí)現(xiàn) 2D 和 3D 語音聊天,根據(jù)玩家狀態(tài)收聽不同的語音通道:死去的玩家在 3D 空間中聽活著的玩家說話(帶衰減),死去的玩家還會(huì)在 2D 空間中聽彼此說話(不帶衰減),與此同時(shí)確?;钪耐婕抑荒苈牭奖舜酥g的談話等等。若處理不好的話,會(huì)變得非常混亂!
下面我們將詳細(xì)介紹如何借助適用于 Wwise 的 Tencent GME 插件來整合語音聊天系統(tǒng)。
GME 的多種使用方式
《Suspects》中有很多系統(tǒng)控制語音聊天的狀態(tài):
玩家操作(比如將自己和其他人靜音和取消靜音)
玩法操作(比如發(fā)起和結(jié)束緊急會(huì)議)
系統(tǒng)操作(比如信任與安全)
所有這些系統(tǒng)有可能會(huì)同時(shí)嘗試改變語音聊天的狀態(tài)。比方說,玩家想把自己的話筒調(diào)成靜音,禁聲系統(tǒng)要求其不能聽到其他玩家說話,信任與安全系統(tǒng)限定所有人都不能說話。
為了實(shí)現(xiàn)這種分層系統(tǒng),我們采用了意圖設(shè)計(jì)。每個(gè)系統(tǒng)都要聲明其語音聊天預(yù)期狀態(tài)的意圖。這些預(yù)期狀態(tài)隨后會(huì)被融合并應(yīng)用于語音聊天控制(使用單個(gè)通道/房間)。
表決發(fā)言/緊急會(huì)議
在表決發(fā)言或緊急會(huì)議環(huán)節(jié),玩家可以在 2D 空間中相互交談。為此,我們會(huì)調(diào)用普通的接收和發(fā)送事件。在這種游戲狀態(tài)下,玩家可將其他特定玩家(利用狀態(tài)系統(tǒng))或自己靜音和取消靜音。
我們使用了?AddAudioBlockList?和?RemoveAudioBlockList?GME 事件來處理這些玩家操作,并在本地存儲(chǔ)了被靜音玩家列表以便在所有其他類型的語音聊天中應(yīng)用相同的操作。
Ghost Chat 游戲模式
當(dāng)某個(gè)玩家被假冒者放逐出局或殺死時(shí),該玩家會(huì)被迫轉(zhuǎn)入 Ghost Chat 游戲模式。這時(shí)其可以跟其他所有死去的玩家聊天。幽靈可以聽到彼此以及其他活著的玩家(取決于游戲模式)說話,但若召開緊急會(huì)議,他們就只能聽到活著的玩家在會(huì)議上的談話。
對(duì)此,只在對(duì)局中將死去的玩家取消靜音,他們就可以在 2D 空間中相互交談。倘若發(fā)起緊急會(huì)議,將其再次靜音即可。
Chit Chat 游戲模式
在 Chit Chat 游戲模式下,玩家要能跟附近的其他玩家交談。為了實(shí)現(xiàn)這一功能,我們做了以下處理:
1.?使用距離半徑值調(diào)用?SetRangeAudioRecvRange?GME 事件方法。
2. 在 Wwise 中創(chuàng)建帶有衰減的 3D 接收事件。
3. 針對(duì)表決發(fā)言環(huán)節(jié)的其他所有活著的玩家調(diào)用該事件。
4. 使用?SetUserID?方法中所用的同一 userID 調(diào)用?SetReceiveOpenIDWithGameObjectID?GME 事件。
在執(zhí)行所有這些處理后,便可開啟 Chit Chat 對(duì)局。每次玩家移動(dòng),我們都會(huì)使用?SetSelfPosition?方法在 GME 中更新本地位置。
Chit Chat 模式下的緊急會(huì)議
Chit Chat 游戲模式下的緊急會(huì)議跟標(biāo)準(zhǔn)游戲模式的區(qū)別在于,我們必須在將玩家取消靜音前在 3D 接收事件(Chit Chat 模式)和 2D 接收事件(標(biāo)準(zhǔn)模式)之間進(jìn)行切換。在會(huì)議結(jié)束時(shí)會(huì)發(fā)生同樣的情況,這時(shí)要使用空值調(diào)用?SetReceiveOpenIDWithGameObjectID?GME 事件。
Chit Chat 模式下的幽靈聊天
這種情況是最不好處理的。幽靈可以在 2D 空間中聽到彼此說話并相互交談,并同時(shí)在 3D 空間中聽到活著的玩家說話(帶有衰減)。
為了實(shí)現(xiàn)這一功能,我們做了以下處理:
1.?調(diào)用 2D 接收事件。
2. 僅針對(duì)死去的玩家停止 3D 接收事件。
3. 僅針對(duì)死去的玩家使用空值調(diào)用?SetReceiveOpenIDWithGameObjectID?GME 事件。
因?yàn)楸混o音玩家列表都是在本地進(jìn)行處理的,所以活著的玩家永遠(yuǎn)不會(huì)聽到幽靈聊天內(nèi)容。
下圖舉例展示了《Suspects》中的語音聊天情形。其中,所有交互都在單個(gè)通道中執(zhí)行并在客戶端予以控制。

玩家 A 和 B 處于活著狀態(tài),其只能與彼此進(jìn)行交談。
玩家 C 和 D 處于死去狀態(tài),其可以與彼此進(jìn)行交談。同時(shí),只能聽玩家 A 和 B 說話,但是不能與之交談。
玩家 E 和 F 處于活著狀態(tài),其在玩家 A 和 B 的衰減范圍之外,只能與彼此進(jìn)行交談。
Wwise 整合
GME 實(shí)時(shí)語音插件在 Wwise中的 設(shè)置非常簡(jiǎn)單。在將該插件導(dǎo)入到 Wwise 會(huì)話中后,幾乎馬上就可使用創(chuàng)建的 Work Unit??紤]到情境語音聊天的不同需求,只需要稍微進(jìn)行自定義設(shè)置即可。
自上而下的基本結(jié)構(gòu)如下:
帶有 Tencent GME Send 效果器(在效果器鏈末端實(shí)例化)的音頻對(duì)象
帶有 Tencent GME Receive 效果器的音頻對(duì)象(此為從 Send 效果器接收信號(hào)的聽者)
帶有 Tencent GME Session 效果器的 Main System 音頻設(shè)備(據(jù)此創(chuàng)建房間和用戶 ID)

其實(shí)出廠設(shè)置的語音品質(zhì)已經(jīng)很好了,但是我們要處理有 10 個(gè)玩家的房間,而他們可能會(huì)同時(shí)在聽對(duì)方說話,所以我們必須設(shè)法控制這些動(dòng)態(tài)行為。在處理語音聊天時(shí)有個(gè)主要問題,就是其無法預(yù)測(cè)的行為。玩家可能會(huì)很安靜,也可能會(huì)非常吵鬧。不管是在安靜的房間,還是在嘈雜的環(huán)境中。最終,我們決定使用一些 Wwise 插件來幫助管理這些無法預(yù)測(cè)的情形。
基于實(shí)際測(cè)試和相應(yīng)方針,我們決定使用 Wwise Parametric EQ 處理某些不斷冒出的刺耳頻率,同時(shí)增強(qiáng)較高的頻率來提升有些麥克風(fēng)聲音的清晰度。另外,為了處理多個(gè)玩家相互大聲說話的情形,我們還在這個(gè)系統(tǒng)的信號(hào)路徑的多個(gè)階段使用了 Wwise Peak Limiter。最后,就在 GME Send 之前,我們使用了 Wwise Meter 來基于語音的音量控制角色形象周圍的發(fā)光視效,以便玩家輕松辨別他們?cè)诼犝l講話。
在 Unity 中,我們會(huì)通過?GetRTPCValue?方法讀取 Wwise Meter 值并發(fā)給服務(wù)器,以便將其復(fù)制到其他玩家的客戶端來實(shí)現(xiàn)發(fā)光視效。

在 GME Send 之后,有兩個(gè)帶有 GME Receive 效果器的音頻對(duì)象:一個(gè)用于不帶衰減或揚(yáng)聲器聲像擺位的 2D 聊天,一個(gè)用于帶有衰減和定位的 3D 聊天(像普通發(fā)聲體一樣處理)。在最后,還會(huì)為 Main System 輸出對(duì)象應(yīng)用 GME Session 效果器。
現(xiàn)在有了 GME 系統(tǒng),我們準(zhǔn)備將來在語音聊天信號(hào)路徑中實(shí)施更加靈活有創(chuàng)意的音頻處理。比如,在 Ghost Chat 當(dāng)中向 GME Send 添加一些延遲和混響(與死去的玩家對(duì)應(yīng)的通道)。借助 GME,很多類似的功能都可輕松實(shí)現(xiàn)。
再來舉個(gè)巧妙運(yùn)用語音聊天的例子:基于與隊(duì)友的距離將清晰的語音和無線電語音混合在一起。借助 GME,只需通過距離 RTPC 來控制效果器的干聲/濕聲參數(shù)便可輕松實(shí)現(xiàn)這一點(diǎn)。當(dāng)達(dá)到 RTPC 閾值要在清晰的語音和無線電語音之間變換時(shí),我們可以觸發(fā)無線電噪音聲來讓音頻效果更加富有沉浸感。

這當(dāng)中會(huì)涉及到 Wwise 端的實(shí)現(xiàn)(參見上圖)。
結(jié)語
GME 對(duì)語音聊天的快速迭代非常有用。只需在 Wwise 內(nèi)添加各種必要的工具,便可輕松實(shí)現(xiàn)對(duì)語音品質(zhì)的實(shí)時(shí)控制。
在此,我們要感謝 Wildlife 音頻團(tuán)隊(duì)的鼎力相助(包括對(duì)語音聊天的測(cè)試和研討)、《Suspects》工程和 QA 團(tuán)隊(duì)的支持以及《Suspects》社區(qū)的熱心幫助。最后,希望大家能喜歡游戲的全新語音聊天功能。

LEO PERANTONI
里奧?佩蘭托尼 (Leo Perantoni) 目前在 Wildlife Studios(巴西里約熱內(nèi)盧)擔(dān)任技術(shù)音頻設(shè)計(jì)師。在過去 13 年里,他一直從事游戲音頻方面的工作,協(xié)助當(dāng)?shù)赜螒蜷_發(fā)商為移動(dòng)、VR 等各種平臺(tái)開發(fā)過很多游戲。

菲利佩?洛佩斯 (FELIPPE LOPES)
菲利佩?洛佩斯 (Felippe Lopes) 目前在 Wildlife Studios(巴西圣保羅)擔(dān)任音頻程序員。自 2017 年以來,他一直在為移動(dòng)和主機(jī)平臺(tái)開發(fā)游戲。
