利用 Wwise 設(shè)計(jì)基于循環(huán)的汽車發(fā)動(dòng)機(jī)聲音 | 第 2 部分

歡迎繼續(xù)閱讀本系列博文,了解如何在 Wwise 中配置和設(shè)計(jì)基于循環(huán)的汽車發(fā)動(dòng)機(jī)聲音。在第 1 部分中,我們介紹了聲音設(shè)計(jì)所需的參數(shù)以及有關(guān)素材編輯的通用準(zhǔn)則。如尚未閱讀前文,請(qǐng)點(diǎn)擊此處查看。
本文主要基于《Wreckfest》的官方發(fā)動(dòng)機(jī)音頻 Mod 包。這是一款由?Bugbear Entertainment?開發(fā)、由?THQ Nordic?發(fā)行的極限賽車游戲。 此 Mod 包中包含教程文檔和 Wwise 示例工程。Bugbear Community 論壇的這篇帖子中附有下載鏈接。
如果是剛開始使用 Wwise,建議先查看所述 Mod 教程文檔,學(xué)習(xí) Wwise GUI 相關(guān)基礎(chǔ)知識(shí)。藉此,各位至少可對(duì) Wwise 設(shè)計(jì)工具有一些簡(jiǎn)單的了解。下面我們就來(lái)切入正題吧!
關(guān)于示例工程
在 Wwise 2019.2 中打開示例工程之后,不妨快速瀏覽一下其中都有哪些 Actor-Mixer 對(duì)象和 RTPC Game Sync??梢钥吹綆缀趺總€(gè)對(duì)象都設(shè)有備注,里面描述了與其相關(guān)的功能及用法。
在工程中,可看到第 1 部分所述的關(guān)鍵發(fā)動(dòng)機(jī)參數(shù):
1. RTPC_Player_Example:此 RTPC 用于控制玩家車輛的轉(zhuǎn)速(范圍為實(shí)際 RPM 值域)。
2. RTPC_Player_Load:此 RTPC 用于控制發(fā)動(dòng)機(jī)的工作負(fù)荷(范圍為 0 ~ 1)。
3. RTPC_Player_Throttle:此 RTPC 用于控制玩家設(shè)定的油門大?。ǚ秶鸀?0 ~ 1)。
尤其對(duì)于 "Load" RTPC,按照《Wreckfest》中所用的參數(shù)范圍,空載/怠速 Load 對(duì)應(yīng)范圍的中間值(即 0.5)。NPC 車輛也有與以上類似的 RTPC,只不過(guò)是將 AI_ 替換為了 Player_。
除此之外,該工程還配套提供有示例素材。這些素材由?Pole Position Production?錄制和剪輯,專門用于闡釋如何設(shè)計(jì)車輛音頻并為《Wreckfest》構(gòu)建音頻 Mod。
工程中包含的所有內(nèi)容均由 Creative Commons 授權(quán)個(gè)人使用,受?Attribution-NonCommercial-ShareAlike?(By-NC-SA)?條款約束。
注意,需在 Steam 上抓取《Wreckfest》副本,才能在該游戲中試驗(yàn)自己的設(shè)計(jì)方案。

對(duì)象設(shè)置概述
在 Wwise 中,要使用 Blend Container 構(gòu)建基于循環(huán)的發(fā)動(dòng)機(jī)聲音。為此,需將聲音對(duì)象添加到該 Container 內(nèi)的 Blend Track 上。藉此,基于 RPM 數(shù)據(jù)來(lái)定義各個(gè)子聲音對(duì)象的播放順序和時(shí)長(zhǎng)。
總的來(lái)說(shuō),要完成發(fā)動(dòng)機(jī)設(shè)計(jì),還需執(zhí)行以下操作:
1. 創(chuàng)建素材并將其導(dǎo)入來(lái)創(chuàng)建聲音對(duì)象。
2. 配置要循環(huán)并追蹤音高的聲音對(duì)象。
3. 設(shè)置容納 Blend Track 和聲音對(duì)象的 Blend Container。
4. 配置相鄰聲音的播放范圍和交叉淡變。
5. 定義 Blend Track 的 RTPC 自動(dòng)化。
6. 檢查整個(gè) RPM 范圍內(nèi)各 Blend Track 之間音高調(diào)節(jié)的一致性(必要時(shí)實(shí)施調(diào)整)。
接下來(lái),我們?cè)敿?xì)介紹一下如何完成以上各項(xiàng)操作。注意,以下所有截圖均基于 Example Project 中 "Tutorial Engine" Work Unit 下的對(duì)象。在教程的實(shí)踐部分,會(huì)用到此 Work Unit。
聲音對(duì)象配置
先從 Imported Assets 文件夾說(shuō)起。在此,我們已經(jīng)創(chuàng)建有載和無(wú)載循環(huán)素材并將其導(dǎo)入到了 Wwise 設(shè)計(jì)工具中。后續(xù)只需選擇文件夾中所要循環(huán)的對(duì)象即可。對(duì)此,可通過(guò) Multi Editor 視圖快速進(jìn)行設(shè)置。
要想讓這些聲音對(duì)象的音高對(duì)游戲 RPM 模擬作出反應(yīng),我們需要在這兩者之間建立自動(dòng)化行為。為了方便自動(dòng)配置一組聲音對(duì)象(如發(fā)動(dòng)機(jī)循環(huán))的音高追蹤,Wwise 配套提供了相應(yīng)的工具來(lái)基于聲音對(duì)象的給定 RTPC 參數(shù)范圍和音高(空載 RPM)自動(dòng)加以實(shí)現(xiàn)。
選中?Demo_Idle_1170?Sound SFX 對(duì)象,然后轉(zhuǎn)到 Property Editor 的 RTPC 選項(xiàng)卡,先在 Y Axis 上添加 Voice Pitch,再在 X Axis 上添加 RTPC_Player_Example。接著在自動(dòng)化曲線上任意位置右鍵單擊,然后從上下文菜單中選擇?Build Smart Pitch Curve。隨后在此工具的設(shè)置方框中輸入聲音對(duì)象的數(shù)值 (1170),然后單擊?OK。最終設(shè)置應(yīng)如下圖所示:

為了驗(yàn)證曲線的設(shè)置是否正確無(wú)誤,可將 RTPC_Player_Example 標(biāo)記移到 Y Axis 上的過(guò)零點(diǎn)。這時(shí),其應(yīng)當(dāng)與聲音對(duì)象的數(shù)值一致。倘若不一致,可再次運(yùn)行?Build Smart Pitch Curve?工具并檢查有無(wú)拼寫錯(cuò)誤。
在此之后,需針對(duì)所有聲音重復(fù)執(zhí)行相同的操作。不過(guò),可采用稍微便捷一點(diǎn)的方式來(lái)做:首先復(fù)制粘貼剛才設(shè)置的 X-Y 映射,接著再次運(yùn)行?Build Smart Pitch Curve?工具,然后將正確的值用于各個(gè)聲音對(duì)象。
Blend Container 配置
為便捷起見,"Tutorial" Blend Container 對(duì)象預(yù)先配置了兩條 Blend Track:分別用于有載和無(wú)載,均帶有 RTPC 自動(dòng)化映射。若要?jiǎng)?chuàng)建全新的 Container,需先添加設(shè)計(jì)所需數(shù)量的 Blend Track,然后指派并校準(zhǔn)相關(guān) RTPC 映射。
首先,需要在 Container 中添加子對(duì)象。為此,可通過(guò)按住 Shift + 單擊來(lái)選中 Imported Assets 下的所有聲音對(duì)象,然后通過(guò)按住 Ctrl + 單擊拖動(dòng)來(lái)將其拖到 Container 上。這樣可以創(chuàng)建聲音對(duì)象的副本。下圖展示了與 Container 對(duì)應(yīng)的 Contents Editor。在此,可指派剛才添加到相應(yīng) Blend Track 上的對(duì)象。

將文件拖到相應(yīng)的 Blend Track(對(duì)象名稱中帶有 On 和 Off 字樣)播放列表,并根據(jù)空載 RPM(怠速到全速)按升序順序進(jìn)行排序。列表順序?qū)?yīng) Blend Track Editor 中對(duì)象的順序(可通過(guò)拖放來(lái)調(diào)整順序)。
注意,在創(chuàng)建新的 Blend Container 時(shí),須考慮是將 Play Mode 設(shè)為 Step 還是 Continuous。鑒于我們的聲音被設(shè)為了無(wú)限循環(huán),在 Step 模式下運(yùn)行發(fā)動(dòng)機(jī) Container 可能會(huì)導(dǎo)致工程的虛聲部數(shù)量急劇增加,尤其是在包含大量子對(duì)象和多個(gè) Container 副本在運(yùn)行時(shí)實(shí)例化的情況下。
Blend Track 配置
接下來(lái),我們轉(zhuǎn)到 Blend Track Editor 視圖。在此,可以看到無(wú)載和有載 Blend Track,其帶有預(yù)定義自動(dòng)化設(shè)置。視圖中的方框代表放在各個(gè) Blend Track 播放列表中的對(duì)象。注意,需專門為此啟用 Crossfade 選項(xiàng),并將其指派給 RTPC_Player_Example 音軌。
如果將 Blend Container 的 Play Mode 設(shè)為 Continuous,在模擬參數(shù)超出給定值域時(shí),這些方框的邊界會(huì)告知 Wwise 在哪里開始和停止播放各個(gè)聲音對(duì)象。
如果對(duì)象方框之間有間隙,在 RTPC 值處于間隙之內(nèi)時(shí),將不會(huì)播放任何聲音。這對(duì)某些應(yīng)用情形來(lái)說(shuō)非常有用。比如,只想在 RPM 范圍中間而不想在頂端或底端播放某個(gè)聲音對(duì)象。
先從 RPM 范圍頂端的對(duì)象說(shuō)起。首先移動(dòng)并調(diào)節(jié)兩條 Blend Track 上各個(gè)方框的大小,使其跟空載 RPM 范圍大致對(duì)齊、跟相鄰對(duì)象略有重疊。然后右鍵單擊各個(gè)方框的左右邊緣,并分別從上下文菜單選擇?Sine?(Constant Power Fade In)?和?Sine (Constant Power Fade Out)。

這種邊緣交叉淡變用在這里可以說(shuō)恰到好處。藉此,可讓交叉淡變中點(diǎn)附近的音量電平保持恒定。除此之外,也可選用?Base 3?和?S-Curve,其效果跟上述兩條 Sine 曲線類似。在有些情況下,聽起來(lái)甚至比 Sine 還要流暢。
在基于空載 RPM 調(diào)節(jié)對(duì)象并配置邊緣淡變之后,我們需要對(duì)每一交叉淡變的寬度進(jìn)行微調(diào)。為此,可設(shè)置所要播放的 Blend Container,然后將 RTPC_Player_Load 移到值 1 位置,并根據(jù)需要調(diào)節(jié)有載 Blend Track 由全速 RPM 到怠速 RPM 的寬度。
最終的交叉淡變?cè)秸胶?,但過(guò)渡和音高調(diào)節(jié)要流暢。避免聲音對(duì)象超出空載 RPM 太多,確保相鄰對(duì)象之間的音調(diào)平滑變化。
在此之后,將 RTPC_Player_Load 設(shè)為 0,然后再調(diào)節(jié)無(wú)載 Blend Track 由全速 RPM 到怠速 RPM 的寬度。最后,將剛才設(shè)置的 Blend Container 與 Engine Example Plr 進(jìn)行對(duì)比。該 Blend Container 使用同樣的循環(huán),方便設(shè)計(jì)師參考在哪里放置子對(duì)象。
建議最好查看一下原始錄音是否容許設(shè)計(jì)循環(huán)素材,確保有載和無(wú)載 Blend Track 的交叉淡變不會(huì)同時(shí)發(fā)生。這樣可減少運(yùn)行時(shí)的活躍聲部數(shù)量,尤其是在生成很多對(duì)象實(shí)例的時(shí)候。
只要有多條 Blend Track 在同一 RPM 范圍出現(xiàn)交叉淡變,就表示每個(gè)實(shí)例、每條 Blend Track 會(huì)運(yùn)行兩個(gè)活躍聲部。對(duì) "Tutorial" Container 來(lái)說(shuō),會(huì)運(yùn)行四個(gè)活躍聲部。同樣的情況適用于可能添加到 Blend Container 的所有插件;它們?cè)谶\(yùn)行時(shí)也會(huì)針對(duì)每個(gè)子對(duì)象進(jìn)行實(shí)例化。
Blend Track 的 RTPC 自動(dòng)化
這部分的發(fā)動(dòng)機(jī)設(shè)置最終取決于想要的發(fā)動(dòng)機(jī)聲音效果。對(duì)于剛構(gòu)建的發(fā)動(dòng)機(jī)設(shè)計(jì),為了確保符合模擬行為,還需配置 Load 自動(dòng)化,來(lái)控制有載和無(wú)載分層之間的過(guò)渡。
在 Mod 包內(nèi)的教程文檔中,查找“How Engine Load Works”章節(jié),跟其中描述的行為進(jìn)行對(duì)比,看看如何在三種 Load 狀態(tài)之間配置 "Tutorial" Blend Container 的預(yù)定義 RTPC 自動(dòng)化。我們沒法直接將 Wwise 設(shè)計(jì)工具與《Wreckfest》的 Steam 構(gòu)建版本關(guān)聯(lián),對(duì)此不妨參考所述章節(jié)來(lái)確定預(yù)先配置的自動(dòng)化。
Voice Volume 自動(dòng)化(基于 Load)的整體形狀取決于當(dāng)前的模擬設(shè)置,但總的來(lái)說(shuō)要確保在空載 Load 值域附近對(duì)無(wú)載和有載 Blend Track 實(shí)施交叉淡變。
即便針對(duì)有載和無(wú)載行為基本設(shè)置好了整體形狀,照樣可微調(diào)音量電平和濾波的特定自動(dòng)化關(guān)鍵點(diǎn)。下面我們就來(lái)針對(duì)示例發(fā)動(dòng)機(jī)來(lái)對(duì)自動(dòng)化設(shè)計(jì)進(jìn)行簡(jiǎn)單的微調(diào)。

在將 RTPC 模擬值配置為空載 Load 和怠速 RPM 后,查看在 1000 ~ 2500 RPM 之間為有載 Blend Track 額外設(shè)置的 Voice Volume 自動(dòng)化(如上圖所示)。下面來(lái)聽聽效果如何:
https://audiokinetic.com/media/blog/CarEngineDesignPart2/ak_idle_default.mp3
首先基于 RPM 自動(dòng)調(diào)節(jié) Blend Track 的 High-Pass Filter,繼而在無(wú)載處于怠速 RPM 的情況下,稍微融入一點(diǎn)有載循環(huán)中那種類似閥門咔嗒聲的質(zhì)感,同時(shí)確保低音頻率部分不會(huì)拖泥帶水。然后,試著在 1000 RPM(怠速)關(guān)鍵點(diǎn)位置增大有載自動(dòng)化的音量,來(lái)使混音當(dāng)中的咔嗒聲質(zhì)感更加明顯,讓汽車在怠速時(shí)聽起來(lái)好像很破舊,甚至有點(diǎn)柴油發(fā)動(dòng)機(jī)的味道。聽起來(lái)就像下面這樣:
https://audiokinetic.com/media/blog/CarEngineDesignPart2/ak_idle_onload_treble.mp3
再來(lái)試試將有載 High-Pass Filter 自動(dòng)化復(fù)制到無(wú)載 Blend Track,繼而從有載移除該自動(dòng)化行為或?qū)⑵涓臑榭刂?Low-Pass Filter。然后,試著在 1000 RPM 和空載 Load (0.5) 位置調(diào)節(jié)有載和無(wú)載音量之間的平衡。以下是包含有載低音頻率的怠速音效(總體音量增大,頂端融合高通無(wú)載):
https://audiokinetic.com/media/blog/CarEngineDesignPart2/ak_idle_onload_bass.mp3
現(xiàn)在的怠速聲音顯得更加沉悶,甚至跟平常聽到的都不太一樣。有載循環(huán)成了混音中的主要元素,所以里面有種濃厚的排氣管音色。因?yàn)橐シ沤嫡{(diào)版本的循環(huán),這種音色得到了進(jìn)一步強(qiáng)化;怠速 RPM 模擬值處在 1000,而循環(huán)的空載 RPM 為 1670。
這種類似排氣管的音色大概源自錄音時(shí)采用近場(chǎng)話筒錄制的排氣管聲音。大量的這種話筒分層隨后被混音到了最終素材中。由此,我們得到了與游戲中跟隨攝像機(jī)的視角相符的混音。因?yàn)楝F(xiàn)在將有載分層配置為了混音中的主要元素,所以在加入近場(chǎng)話筒排氣管音色并實(shí)施降調(diào)之后,才生成了聽起來(lái)有些不同尋常的發(fā)動(dòng)機(jī)怠速音效。
這些都是只用簡(jiǎn)單的循環(huán)就能做出的設(shè)計(jì)選擇。關(guān)鍵點(diǎn)調(diào)節(jié)可賦予汽車以與其外觀匹配的特色。若幅度過(guò)大,可予以撤消。不過(guò),調(diào)節(jié)自動(dòng)化不必只是讓汽車的聲音聽起來(lái)與眾不同:就咔嗒聲而言,也可依據(jù)汽車可能受到的損壞程度來(lái)增大其音量。然后,通過(guò)音調(diào)的變化來(lái)向玩家傳達(dá)一些有意義的暗示(或增強(qiáng)玩家的沉浸感)。
值得一提的是,只需要進(jìn)行一些簡(jiǎn)單的調(diào)節(jié),汽車怠速聲音就會(huì)大不一樣,而無(wú)需進(jìn)一步添加任何素材。
注意,若想讓 RTPC 自動(dòng)化只影響 Blend Track 上的某個(gè)子對(duì)象而非所有對(duì)象,則需直接針對(duì)特定的對(duì)象來(lái)配置此自動(dòng)化行為。具體來(lái)說(shuō),就像之前添加基于空載 RPM 的音高追蹤那樣。
優(yōu)化音高調(diào)節(jié)
在察看和配置導(dǎo)入的素材時(shí),有時(shí)可能會(huì)發(fā)現(xiàn) Blend Track 中的相鄰對(duì)象之間出現(xiàn)輕微的失調(diào),而只簡(jiǎn)單配置了原始音高追蹤。
音高問(wèn)題通常源自音高扁平化處理和 Hz-RPM 轉(zhuǎn)換(第 1 部分中均有介紹)。如果在播放 Blend Track 時(shí)長(zhǎng)時(shí)間停留在存在問(wèn)題的交叉淡變上,可能會(huì)聽到迥然不同的音調(diào)變化或者梳狀濾波導(dǎo)致的低沉掃頻音色。對(duì)此,可通過(guò)在與 Blend Container 對(duì)應(yīng)的 Contents Editor 中調(diào)節(jié) Voice Pitch 來(lái)加以解決。
音高的微調(diào)類似于之前對(duì)交叉淡變寬度的調(diào)節(jié):逐個(gè)試聽并拖動(dòng)播放有載和無(wú)載分層,調(diào)節(jié)由全速 RPM 到怠速 RPM 的寬度。建議由全速 RPM 開始調(diào)節(jié),因?yàn)榉秶敹说陌l(fā)動(dòng)機(jī)聲音音調(diào)最易修正。

在整個(gè)微調(diào)過(guò)程中,最好時(shí)不時(shí)地在零載和滿載之間反轉(zhuǎn) RTPC 模擬值,以此檢查兩條 Blend Track 之間的音高追蹤是否保持一致。諧波頻率之間的響度平衡會(huì)隨著具體 RPM 范圍變化(因錄音而異),這種變化有時(shí)可能會(huì)導(dǎo)致不小心微調(diào)到錯(cuò)誤的頻率。
如需直觀地了解這種平衡變化,不妨由全速 RPM 調(diào)到 3600 左右,來(lái)播放示例發(fā)動(dòng)機(jī)聲音,同時(shí)在零載和滿載之間進(jìn)行反轉(zhuǎn)。在由全速 RPM 往下調(diào)到 3600 左右時(shí),無(wú)載端與有載端的音調(diào)會(huì)大不相同,但在頂端兩個(gè)無(wú)載素材之間交叉淡變的過(guò)程中仍能正確地追蹤音高;在處于全速 RPM 時(shí),兩個(gè)分層之間的音調(diào)平衡非常接近。
結(jié)語(yǔ)
在完成以上所有操作后,就算大功告成了!無(wú)論對(duì)于宇宙飛船、汽車還是基于采樣的樂(lè)器,我都希望此教程能激勵(lì)各位嘗試在 Wwise 中設(shè)計(jì)得當(dāng)?shù)囊舾咦粉?Blend Container。
如果想親自動(dòng)手設(shè)計(jì)發(fā)動(dòng)機(jī)聲音,不妨前往官方 Wreckfest Discord 服務(wù)器的 Modding 頻道。在此,可主動(dòng)提議為汽車 Mod 開發(fā)者構(gòu)建發(fā)動(dòng)機(jī)聲音來(lái)幫助其完善自身的設(shè)計(jì)?;蛘?,也可在?Steam Community Workshop?提供的眾多 Wreckfest 汽車 Mod 中選取一個(gè)來(lái)進(jìn)行定制(在筆者撰文時(shí)已有 256 個(gè))。
倘若對(duì)教程有任何疑問(wèn)或意見,不妨在下面的評(píng)論區(qū)給我留言?;蛘?,在?Wwise_Discord 服務(wù)器上呼我。如有謬誤,歡迎賜教!

阿托?科伊維斯托 (ARTO KOIVISTO)
音頻設(shè)計(jì)師、作曲家
Bugbear Entertainment Oy
阿托?科伊維斯托 (Arto Koivisto) 是一名跨專業(yè)音頻人才,對(duì)音效、音樂(lè)及相關(guān)原理有著濃厚的興趣。阿托從 90 年代末開始創(chuàng)作音樂(lè),并積累了豐富的聲音設(shè)計(jì)經(jīng)驗(yàn)。多年來(lái),他參與制作過(guò)各種各樣的項(xiàng)目;從為舞臺(tái)表演、音像作品和電子游戲(如《AG Drive》)設(shè)計(jì)聲音、創(chuàng)作音樂(lè),到為錄音棚調(diào)試設(shè)備、為現(xiàn)場(chǎng)演出實(shí)時(shí)混音,再到為音樂(lè)制作母帶(作為小型獨(dú)立唱片公司合伙人兼負(fù)責(zé)人),最后于 2013 年轉(zhuǎn)向游戲音頻設(shè)計(jì)。
