最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

使用Wwise制作擬真且泛用的多普勒效應(yīng)

2021-08-12 11:11 作者:Wwise官方  | 我要投稿

前言

多普勒效應(yīng)是一種物理現(xiàn)象,主要內(nèi)容為物體輻射的波長(zhǎng)因?yàn)椴ㄔ春陀^測(cè)者的相對(duì)運(yùn)動(dòng)而產(chǎn)生變化,這種現(xiàn)象會(huì)出現(xiàn)在所有波的傳播過程中,聲波也不例外。隨著游戲音頻行業(yè)的發(fā)展,許多游戲引擎也都提供了自己的多普勒效應(yīng)解決方案,比如Unity和虛幻系列引擎都加入了使音頻產(chǎn)生多普勒效果的功能。但是這些功能都只適用于游戲引擎內(nèi)部,無(wú)法和Wwise聯(lián)動(dòng)。如果我們的游戲音頻部分使用Wwise進(jìn)行開發(fā),將無(wú)法享受這些效果。而Wwise內(nèi)部目前還沒有一套比較完善的多普勒效應(yīng)解決方案,官方教程中也只寫了可以使用相對(duì)速度值發(fā)送rtpc來(lái)解決,比較籠統(tǒng)。

筆者最近就使用Wwise制作多普勒效應(yīng)的方法進(jìn)行了一些研究,并使用虛幻4和Wwise相結(jié)合制作了demo工程來(lái)驗(yàn)證效果,將Wwise和虛幻引擎制作多普勒效應(yīng)的效果進(jìn)行了對(duì)比,現(xiàn)在將研究結(jié)果和大家分享。

一、Wwise實(shí)現(xiàn)多普勒效應(yīng)效果展示及實(shí)現(xiàn)方案簡(jiǎn)述

首先我們來(lái)簡(jiǎn)單看一下有無(wú)多普勒效應(yīng)、虛幻引擎制作多普勒效應(yīng)和Wwise引擎制作多普勒效應(yīng)的效果對(duì)比:

可以看到,有無(wú)多普勒效應(yīng)對(duì)于聲音的表現(xiàn)力影響非常大,無(wú)多普勒的情況下基本就完全感覺不到車輛的速度感。而通過Wwise引擎調(diào)制聲音和虛幻引擎自帶的多普勒節(jié)點(diǎn)所產(chǎn)生的多普勒效應(yīng)的效果,在音色上幾乎沒有任何差距。唯一的差距是因?yàn)槲倚薷牧颂摶靡姘l(fā)聲時(shí)聆聽者的位置,將位置從攝像機(jī)切換到了玩家角色身上,導(dǎo)致虛幻發(fā)聲時(shí)的聲像變的很窄。這樣做是為了保持兩個(gè)引擎在計(jì)算玩家位置的時(shí)候是統(tǒng)一的,且不會(huì)因?yàn)殓R頭的轉(zhuǎn)動(dòng)影響多普勒效應(yīng)的產(chǎn)生。

那么這種效果是如何做到的呢?我們來(lái)分別看一下兩個(gè)引擎對(duì)于車聲的設(shè)置:

(圖1.1?虛幻引擎內(nèi)汽車聲soundcue設(shè)置截圖)

虛幻引擎內(nèi)部很簡(jiǎn)單,只需要給聲音加上多普勒節(jié)點(diǎn),該聲音就會(huì)產(chǎn)生多普勒效應(yīng)。

(圖1.2 Wwise引擎內(nèi)多普勒效應(yīng)設(shè)置)

Wwise引擎內(nèi)的設(shè)置也并不復(fù)雜,只需要設(shè)置一個(gè)這樣的RTPC,受該RTPC影響的所有聲音也可以獲得和虛幻引擎節(jié)點(diǎn)一模一樣的多普勒效應(yīng)效果。但是,這個(gè)曲線看起來(lái)略顯神奇,接下來(lái)我們將詳細(xì)說一下這條曲線是如何得到的,以及它的工作原理。

二、以RTPC驅(qū)動(dòng)多普勒效應(yīng)的工作原理

想要了解多普勒曲線的設(shè)置方法,我們就需要先理解多普勒效應(yīng)的物理原理。此處為了避免產(chǎn)生歧義,和減少變量,我們先對(duì)相關(guān)情景進(jìn)行限定,限定我們所研究的波為聲波,其速度為340m/s,其傳播介質(zhì)為空氣,且空氣為絕對(duì)靜止。所有發(fā)聲體和聆聽者相對(duì)于空氣的移動(dòng)速度均不超過音速(光波和洛倫茲變換對(duì)多普勒效應(yīng)的影響不在本文討論之列)。在這樣的條件下,發(fā)聲體和聆聽者的運(yùn)動(dòng)所產(chǎn)生的多普勒效應(yīng)的公式如下:

其中f’為聆聽者所聽到的聲音的頻率,f為發(fā)聲源所發(fā)出的聲音的頻率,v為聲速,v0為聆聽者相對(duì)于空氣的移動(dòng)速度,v8為發(fā)聲體相對(duì)于空氣的移動(dòng)速度。

通過觀察該公式我們可以發(fā)現(xiàn),發(fā)聲體靜止聆聽者移動(dòng),和發(fā)聲體移動(dòng)聆聽者靜止。這兩種情況產(chǎn)生多普勒效應(yīng)的幅度是不一樣的,而且區(qū)別很大。我們分別假設(shè)發(fā)聲體靜止和聆聽者靜止兩種情況,分別將v0=0和v8=0兩種情況帶入多普勒的運(yùn)算公式得到兩個(gè)函數(shù),然后畫出這兩個(gè)函數(shù)的曲線:

(圖2.1?當(dāng)v8=0時(shí)v0和f’函數(shù)關(guān)系的大致圖像)

(圖2.2?當(dāng)v0=0時(shí)v8和f’函數(shù)關(guān)系的大致圖像)

同時(shí)我們也可以實(shí)際聽一下兩種情況的多普勒效果:

可見這兩種情況差別非常之大。忽略其中一個(gè)或者尋找兩者之間的中間取值都不太行得通。我們必須同時(shí)計(jì)算這兩個(gè)變量才可以獲得擬真的多普勒效應(yīng),不過同時(shí)使用兩個(gè)RTPC不太方便日后的工程維護(hù),所以我們這里可以取個(gè)巧,不使用單個(gè)速度值作為變量,而是將f’/f的值作為RTPC變量,這樣我們就只需要Wwise里設(shè)置一條曲線就可以了,維護(hù)和修改起來(lái)也更加方便。f’/f的值是產(chǎn)生多普勒效應(yīng)后的聲波頻率和發(fā)聲體發(fā)出的聲波的基礎(chǔ)頻率的比值。我們知道音高和頻率的關(guān)系是:頻率每升高一倍,音高升高一個(gè)八度。用一個(gè)最簡(jiǎn)化的函數(shù)曲線來(lái)表示,就是y=2x。但是這個(gè)曲線我們沒有辦法直接使用在Wwise里,因?yàn)閃wise里面只有音高可以作為y軸。所以我們需要交換一下y和x的位置,得到一個(gè)新的函數(shù)曲線x=log2y。在已知音速是340m/s和Wwise中一個(gè)八度等于等于1200 Pitch值的情況下,我們就可以得到之前用來(lái)控制音高變化的曲線了,就是之前這個(gè)以2為底的對(duì)數(shù)函數(shù)曲線。

(圖2.3 f’/f和音高變化之間的對(duì)數(shù)函數(shù)曲線)

所有的音頻設(shè)計(jì)師小伙伴們,看到這里就基本掌握了使用Wwise制作多普勒效應(yīng)的方法,接下來(lái)只需要給程序哥哥們提一下需求:“我需要計(jì)算玩家和發(fā)聲體之間實(shí)時(shí)的相對(duì)速度,并將這兩個(gè)相對(duì)速度值帶入多普勒效應(yīng)的計(jì)算公式計(jì)算出聲音的頻率變化倍率,然后將這個(gè)倍率值作為一個(gè)RTPC發(fā)送給Wwise?!?/p>

然后我們就得到了可以隨意互動(dòng)的多普勒效應(yīng)效果。

當(dāng)然,這是在我們有一位專業(yè)程序小哥哥幫忙的情況下。。。

如果我們暫時(shí)得不到程序小哥哥的幫忙,或者跟筆者一樣想要自己搭建一個(gè)demo場(chǎng)景隨意折騰驗(yàn)證功能,那該怎么辦呢?

接下來(lái)我們來(lái)討論下如何設(shè)置RTPC吧。

三、如何從游戲引擎獲取我們需要的RTPC變量

先來(lái)梳理一下取值運(yùn)算的邏輯和流程,大概是這樣的:

(圖3.1 RTPC獲取流程圖示)

由于筆者自己并沒有多少C++基礎(chǔ),這里就無(wú)法展示代碼了,只能使用虛幻引擎的藍(lán)圖功能來(lái)簡(jiǎn)單展示數(shù)據(jù)的獲取流程和原理。另外,筆者制作的藍(lán)圖只為實(shí)現(xiàn)基礎(chǔ)效果,且展示得到所需參數(shù)的運(yùn)算過程,其程序邏輯并不一定嚴(yán)謹(jǐn),請(qǐng)大家酌情參考。根據(jù)我們之前梳理的運(yùn)算流程,我們大概可以得到這樣的藍(lán)圖:

(圖3.2?獲取RTPC的藍(lán)圖架構(gòu)圖示)

不過這么做會(huì)遇到一個(gè)小問題。虛幻中獲得組件速度的節(jié)點(diǎn)只能讀取有速度值設(shè)定的組件的速度。比如我們虛幻4第三人稱游戲demo自帶的小白人組件。

(圖3.3?虛幻4第三人稱游戲demo玩家角色的速度設(shè)置界面截圖)

如果不是這種擁有速度值設(shè)定的組件發(fā)生了移動(dòng),或者組件沒有通過自身產(chǎn)生速度進(jìn)行移動(dòng),比如我們使用場(chǎng)景變換等方式使一個(gè)場(chǎng)景物體發(fā)聲了強(qiáng)制位移,這種強(qiáng)制移動(dòng)所產(chǎn)生的速度,“獲得組件速度”節(jié)點(diǎn)是無(wú)法讀取的。遇到這種情況就需要我們自己計(jì)算物體的移動(dòng)速度??梢圆捎萌缦滤{(lán)圖:

(圖3.4?通過場(chǎng)景坐標(biāo)計(jì)算移動(dòng)速度獲取RTPC的藍(lán)圖架構(gòu))

也可以這樣:

(圖3.5?另一種通過場(chǎng)景坐標(biāo)計(jì)算移動(dòng)速度獲取RTPC的藍(lán)圖架構(gòu))

這兩種藍(lán)圖的原理差不多,都是通過每幀讀取玩家和發(fā)聲體所在位置,得出前一幀的速度向量,然后將向量投影到玩家和發(fā)聲體之間連線上,得出相對(duì)速度,再帶入公式計(jì)算獲取RTPC值,區(qū)別是前一種藍(lán)圖通過計(jì)算每一幀發(fā)聲體或聆聽者自身位置坐標(biāo)的變化得到相對(duì)速度,后一種藍(lán)圖是通過計(jì)算每一幀發(fā)聲體或聆聽者相對(duì)于對(duì)方的距離變化得到相對(duì)速度。通過這兩種方式計(jì)算獲得的值的差異幾乎可以忽略不計(jì)。

四、調(diào)整系統(tǒng)負(fù)載和多普勒強(qiáng)度的方法

我們之前提到的所有的rtpc計(jì)算方式,對(duì)于系統(tǒng)平臺(tái)的負(fù)載其實(shí)都非常的小,這個(gè)浮點(diǎn)運(yùn)算的量級(jí)相比于圖像領(lǐng)域來(lái)講,真的是非常的小。但是也許會(huì)出現(xiàn)我們不需要這么高精度的多普勒效應(yīng)的情況。這種情況下我們可以通過直接減小取值和運(yùn)算頻率減小系統(tǒng)負(fù)載。在我提供的藍(lán)圖中是使用事件tick驅(qū)動(dòng)rtpc取值運(yùn)算的,事件tick的取值頻率為幀,如果我們不需要如此高的精度,那么只需要另外設(shè)定一個(gè)循環(huán)事件來(lái)驅(qū)動(dòng)rtpc的取值即可,事件循環(huán)間隔可以隨意制定,然后后續(xù)運(yùn)算rtpc數(shù)值時(shí)不要再帶入事件tick提供的Delta second,而是帶入自己設(shè)定的循環(huán)間隔就可以。不過該取值范圍不宜設(shè)置的太大,否則移動(dòng)物體速度變化幅度較大時(shí),會(huì)聽出來(lái)聲音的跳變。

關(guān)于調(diào)整多普勒強(qiáng)度的方法,我也已經(jīng)在我個(gè)人的demo工程中制作了出來(lái),但是沒有展示在藍(lán)圖截圖中,因?yàn)椴幌胱尰A(chǔ)功能的藍(lán)圖因?yàn)楦鞣N擴(kuò)展功能而變得更加復(fù)雜。為了方便大家判斷聲音頻率變化的幅度,我把UFO的引擎改成了螺旋槳。。。。

可以修改多普勒強(qiáng)度的方法有兩個(gè),一個(gè)是調(diào)整Wwise里邊函數(shù)曲線的曲率,另外一個(gè)是調(diào)整rtpc的取值,讓運(yùn)算所得的速度值乘上一個(gè)你希望的系數(shù)即可隨意控制多普勒效應(yīng)的強(qiáng)度,但是請(qǐng)注意這個(gè)系數(shù)并不能直接代表多普勒效應(yīng)的倍率,因?yàn)槎嗥绽招?yīng)和速度之間的強(qiáng)度關(guān)系是不遵循正比例函數(shù)關(guān)系的,它遵循的是反比例函數(shù)關(guān)系。所以,這種設(shè)置方法和虛幻引擎設(shè)置多普勒效應(yīng)強(qiáng)度的方法略有不同,至少他們的取值不是相同的。

這一節(jié)的最后,我們說一下聲音可以個(gè)別修改多普勒強(qiáng)度的意義。雖然理論上現(xiàn)實(shí)生活中的多普勒效應(yīng)的強(qiáng)度是固定的,游戲里也應(yīng)該是固定的,除非有人可以改變聲音傳播介質(zhì)的種類或者密度。我們無(wú)法排除未來(lái)可能會(huì)出現(xiàn)需要有類似表現(xiàn)的游戲。而且另外一個(gè)最大的好處是在相同的關(guān)卡內(nèi)可以使用不同的距離單位值。假如我們有一款主角可以自由變大和變小的游戲,那么當(dāng)主角變小后,其移動(dòng)速度和他可以交互的道具的移動(dòng)速度都非常的慢,那么游戲的互動(dòng)過程中聲音就會(huì)喪失一定的表現(xiàn)力,比起給變小后的玩家角色啟用一套新的距離值,還是直接調(diào)整多普勒的強(qiáng)度更加容易一些。

五、可互動(dòng)多普勒效應(yīng)效果的適用范圍

游戲引擎提供的可以產(chǎn)生互動(dòng)效果的多普勒效應(yīng)效果雖然很好,但是并不能適用于所有的場(chǎng)景,需要視游戲開發(fā)的需要和其他制作方法相結(jié)合。

可互動(dòng)的多普勒效應(yīng)通常使用在長(zhǎng)時(shí)間存在且連續(xù)發(fā)聲的亞音速發(fā)聲體上,如汽車、直升機(jī)等各種載具;過山車之類的連續(xù)移動(dòng)且發(fā)聲的機(jī)械;玩家發(fā)射的rpg等會(huì)連續(xù)發(fā)聲的亞音速拋射物等。

如果出現(xiàn)了接近音速,或者超音速移動(dòng)的物體則不能簡(jiǎn)單的通過該方式解決。因?yàn)榘l(fā)聲體達(dá)到音速以后,其發(fā)聲規(guī)律會(huì)發(fā)聲改變,且其發(fā)出的聲音大部分將不再來(lái)自于自身的聲音,而是來(lái)自于強(qiáng)烈的空氣摩擦和聲波疊加后產(chǎn)生的激波,這部分將涉及更加復(fù)雜的聲學(xué)原理,已經(jīng)超出多普勒效應(yīng)的范疇。而聆聽者超出聲速以后,將無(wú)法再聽到后方發(fā)出的聲音,此時(shí)聆聽者自身也成為了新的發(fā)聲體。所以,只靠模擬多普勒效應(yīng)是無(wú)法滿足對(duì)于超音速物體發(fā)聲的表現(xiàn)的。

對(duì)于游戲中遇到的超音速物體通常則會(huì)采用傳統(tǒng)的素材制作模式,即聲音素材本身就帶有多普勒效應(yīng)的效果,通過調(diào)節(jié)聲音的觸發(fā)時(shí)機(jī)來(lái)模仿真實(shí)的超音速物體發(fā)聲。這種情況在游戲中最常見的就是子彈,只要判定子彈有從玩家身邊經(jīng)過,就會(huì)播放子彈呼嘯的聲音,因?yàn)樽訌椀乃俣群芸?,觸發(fā)時(shí)機(jī)以及強(qiáng)度出現(xiàn)輕微的偏差,玩家一般也無(wú)法察覺。

還有固定時(shí)常和固定觸發(fā)時(shí)機(jī)的聲音,為了保證效果,此時(shí)也可以觸發(fā)固定的素材來(lái)對(duì)應(yīng)場(chǎng)景表現(xiàn),而無(wú)需實(shí)機(jī)運(yùn)算聲音的特殊效果,比如1p玩家使用弓箭射出箭矢,通常會(huì)將箭矢呼嘯飛出的效果直接做在弓箭發(fā)射的樣本里,而不會(huì)單獨(dú)計(jì)算箭矢的多普勒。根據(jù)具體問題具體分析,真假結(jié)合,方能獲得更好的效果。

六、關(guān)于Wwise集成多普勒功能的建議

通過前文的論述我們可以知道,在游戲中實(shí)現(xiàn)多普勒效應(yīng)只需要獲得發(fā)聲體和聆聽者的相對(duì)速度換算成的rtpc值,然后利用該值控制音高變化就可以了。而換算rtpc值需要的數(shù)據(jù)只有兩個(gè),那就是可連續(xù)獲取的發(fā)聲體和聆聽者的坐標(biāo)信息。在游戲的運(yùn)行過程中Wwise本體無(wú)時(shí)無(wú)刻不在監(jiān)視和獲取這些數(shù)據(jù),因?yàn)閃wise本身就需要連續(xù)獲取玩家和所有發(fā)聲體的坐標(biāo)信息來(lái)運(yùn)算attenuation、spatial audio等信息。那么其實(shí)Wwise本身已經(jīng)具備了直接進(jìn)行多普勒運(yùn)算的條件,就像運(yùn)算每個(gè)發(fā)聲體的distance參數(shù)一樣,多普勒只是進(jìn)行了一個(gè)比distance略微復(fù)雜一點(diǎn)點(diǎn)的浮點(diǎn)運(yùn)算,也依然沒有超出簡(jiǎn)單四則運(yùn)算的范圍。而對(duì)于不同工程的適配問題,完全可以靠調(diào)節(jié)多普勒強(qiáng)度的參數(shù)來(lái)解決。比如虛幻的基礎(chǔ)單位是厘米,而其他游戲開發(fā)引擎可能會(huì)以米為單位,那么我們只需要把計(jì)算rtpc時(shí)帶入的34000的音速取值換成340即可?;蛘哂腥耸褂锰摶瞄_發(fā)游戲,但是他游戲內(nèi)的距離單位和現(xiàn)實(shí)世界的并不是1;1的比例,那么它是多大比例,我們讓換算時(shí)的速度值乘以多大比例就可以了。這基本上和上文調(diào)節(jié)多普勒強(qiáng)度的原理是差不多的。

所以,我個(gè)人一直比較疑惑Wwise引擎為何在完全具備前提條件的情況下,沒有集成自己的多普勒運(yùn)算功能,也許可能是有什么以我個(gè)人的水準(zhǔn)還無(wú)法明白的技術(shù)原因,但是個(gè)人還是希望未來(lái)可以使用到直接集成在Wwise引擎內(nèi)的多普勒效應(yīng)工具。

徐巍

資深音效設(shè)計(jì)師

網(wǎng)易互娛

立志成為全品類音頻制作人,曾參與制作過電影、電視、動(dòng)畫、球幕影院、沉浸式互動(dòng)場(chǎng)館等音頻設(shè)計(jì)與制作,現(xiàn)在開始搞游戲了。


使用Wwise制作擬真且泛用的多普勒效應(yīng)的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
甘洛县| 定远县| 临颍县| 孟连| 河北省| 德兴市| 海丰县| 拜城县| 会泽县| 定边县| 阿合奇县| 岑巩县| 教育| 肃宁县| 海城市| 扶余县| 库尔勒市| 德清县| 射洪县| 渝北区| 贵港市| 宜昌市| 佛学| 临颍县| 丰顺县| 三亚市| 张家口市| 年辖:市辖区| 枞阳县| 若尔盖县| 铜山县| 龙川县| 武穴市| 叶城县| 清水河县| 耒阳市| 独山县| 嘉义市| 潞西市| 宁安市| 泗洪县|