一些吃雞遊戲會具備讓玩家能通過聲音辨析隊友位置與距離的功能。具體效果是這樣:
-
在地圖中的兩個玩家,走近至一定距離內,說話就自動能被對方聽到。走遠了,就無法聽到。
-
兩個在可聽範圍內的玩家,隨著相對距離遠近的變化,說話音量也會變化
-
玩家的語音具有方位感,能夠像遊戲內建音效一樣,判斷出對方與自己的相對方位。
本文將解讀,如何實現上述功能。共分為三個部分:
- 可聽範圍的設定
- 通過聲音體現玩家之間的相對距離
- 通過聲音反映玩家間的相對方位
其中,第2點和第3點其實都是聲音的空間感,也就是“聽聲辯位”,下文會合並在一起講。
一.可聽範圍的設定
一場吃雞遊戲初始共100個玩家,那麼遊戲開始時,這100個玩家加入一個語音大頻道,預設每個玩家的語音是靜音狀態。設定可聽範圍是以玩家為圓心,半徑為R的圓形範圍。有其它玩家走入這個圓形範圍內,兩者的語音自動解除靜音,此時說話就能互相聽到了。
二. 聲音的空間感
如果想實現聲音的空間感,帶來3D音效體驗,普遍會利用頭部關聯傳輸演算法(head-related transfer functions, HRTF)。如果要理解它,我們需要先了解三個聲學概念,大腦就是通過他們來判斷聲音在空間中的位置的。
首先是雙耳時差(Interaural time differences, ITD),人耳通過聲音到達左右耳的時間差來判斷低頻聲源與人的相對水平距離。聲源與雙耳的角度,決定了雙耳時差大小。
由於通過ITD無法判斷高頻聲源的位置,這時我們可以利用雙耳水平差(Interaural level differences, ILD)來進行判斷。由於頭部帶來的聲學屏障(acoustic shadow),會讓左右耳聽到的聲音大小與頻率產生差別,由此大腦會判斷出聲源方位。
另外,還有頻譜效應(Spectral effects)。聲音在到達後會因外耳結構而形成反射,從不同方向來的聲音,反射效果也不同,大腦可以根據它來判斷聲源在垂直方向上的相對方位。
我們可以通過SpaceX獵鷹號發射現場視訊,更直觀地體會一下聲音的空間感。在這個視訊裡,你能僅通過聲音感受到不同方位的人、火箭的距離,甚至由室內到室外的空間變化。一起戴上耳機來感受一下吧。(請點選這裡觀看視訊)
HRTF演算法基於以上三種效應對聲源進行了處理,通過耳機收聽時會有一種錯覺,好像聲音來自虛擬空間中特定的位置。很多遊戲都通過HRTF來為玩家提供3D音效。那麼放到吃雞的虛擬環境中,應該怎樣實現呢?
在吃雞的百人地圖中,每個玩家要有自己的ID,每個ID的實時座標需要被記錄。
見上圖,通過兩個玩家在遊戲地圖中的座標,可以建立座標系,來計算兩個玩家之間的距離。為了敘述便利,我們以綠色玩家為原點,建立直角座標系,可以得到紅色玩家的座標是(-1,1)。
-
根據座標,判斷音效方位。如圖紅色玩家的座標是(-1, 1),在第二象限,可以據此設定音效。
-
根據座標,計算兩個玩家的相對距離。假設聽力範圍的半徑為2,而現在兩者距離約1.4,那麼音量可設定為最大音量的30%左右。
-
通過判斷隊友之間所在的座標來控制左右聲道的音量和聲音延時,就可以令玩家產生方位感了。
“小米槍戰”的新版本通過Agora AMG SDK實現了上述功能。Agora AMG 遊戲實時語音SDK,提供了SetRemoteVoicePosition
介面(設定遠端使用者的語音位置 ),開發者只需要指定想要的聲像位置和增益大小,就能利用SDK的HRTF演算法,輕鬆實現聽聲辨位的功能。瞭解SDK及介面詳情請戳這裡。