賽車遊戲如何做到對真實聲音的模擬?

作者 | 發布日期 2015 年 11 月 07 日 12:00 | 分類 電子娛樂 line share follow us in feedly line share
賽車遊戲如何做到對真實聲音的模擬?


曾經引擎類音效實現的原理是「轉速分段+音高調製」,鋪開來說大致是這樣的:

  1. 在規劃階段我們會把遊戲中引擎的轉速分成多個區間。例如所需引擎的轉速會覆蓋 1,000-7,000 rpm,以劃分成 3 段為例,我們將 1,000-3,000 定義為低轉速、3,000-5,000 定義為中轉速、5,000-7,000 定義為高轉速。
  2. 分別製作 3 段轉速中,三個中間速度的音頻循環樣本,即 2,000rpm、4,000rpm 和 6,000rpm(取值出於簡化說明目的,實際操作中不一定使用中間速度)。
  3. 在遊戲中實時傳送控制參數,首先判斷車輛引擎在哪個轉速區間運行,以循環播放對應區間的樣本,同時參數也決定了該樣本的音高調製比率。比如 1,000rpm 時實際上播放的是 2,000rpm 樣本音高降低 100% 的結果(還是出於簡化說明目的,所謂「音高」的說法不是很科學,不過我們感受到最明顯的變化確實是音高的升高或降低)。

上面的例子在如今兩大主流音頻中間件 Wwise 和 Fmod 當中呈現的形式:

Wwise 裡對應的功能模塊是 Blend Container 與 RTPC(Real-Time Parameter Controls)。由遊戲中實時發出的轉速資訊決定播放的樣本與其對應的音高變化。

遊戲葡萄配圖

Fmod 中大同小異,參數控制播放內容。

遊戲葡萄配圖

4. 在現有的基礎上,會透過均衡器、失真等音頻效果器來處理當前的結果,從而表現不同的負載狀況(比如空載高轉速時失真會明顯變大),原理同樣是實時發送控制參數。有些引擎在不同負載情況下音色改變巨大,如果有表現需求的話,就需要分別錄製不同負載的引擎在不同轉速區間的樣本。這是個多軌多參數音頻事件問題,具體製作流程就不展開了。

這種方案最大的問題就在於,它並沒有線性地表現出引擎從 1,000 到 7,000 轉速聲音的變化,或者說它是僞線性的。因此為了儘量還原真實的引擎聲音,在實踐中根據不同情況把轉速 / 負載拆分為 2、30 個樣本也是有可能的,從而音頻設計師往往需要耗費大量的精力,來處理不同轉速之間的銜接、調整音高升降比率、樣本之間的響度關係、負載之間的切換等問題。更大的問題在於,根據算法的不同,音高升降過程中的效果並不完全一樣,因此這個環節很容易穿幫。比如我小時候特別喜歡玩《極速快感:飆風再起 2》,現在再聽起來,最假的就是引擎加速過程中的聲音,原因如上所述。

我相信很多大廠早已使用過更先進的技術手段,但真正在音頻領域中普及新技術的是一家 2009 年成立的法國音頻技術公司——AudioGaming。在 2011 到 2012 年間,AudioGaming 連續發表了包括 AudioWind、AudioSteps 等多款基於物理建模或採樣合成的 Procedural Audio 程式(尚無統一的翻譯,暫譯成「演算音頻」可能比較好理解,即由程式根據即時條件所生成的音頻內容,而非實際錄製的音頻)。其中使得引擎類音效製程實現全行業更新換代的程式是 AudioMotors。

說到 AudioMotors 就需要提到一個聲音合成手段:粒子合成(Granular Synthesis)。簡單的說,粒子合成就是把時域的音頻,分割成以毫秒爲單位的極短片段(windows),再將某一個或某幾個片段循環播放,以獲得與原內容完全不同的結果的音頻合成手段。這個技術早在模擬時代就有過實踐(window 這個稱呼就源自於模擬合成),但因受限於處理器能力,其被運用在數位音頻領域是近十年才逐漸被普及的。

AudioMotors 本質上就是粒子合成原理的運用,製作流程大致是:

  1. 製作一段涵蓋所需轉速範圍的、加速度的引擎音頻。
  2. 導入 AudioMotors 進行基頻與粒子合成分析。
  3. 完成了。

接下來粒子合成器接管了工作,當遊戲中定義的引擎轉速數據發送到 AudioMotors 時,程式只需透過粒子合成器,循環播放某一特定時間點中符合轉速數據的音頻片段(windows)就可以了。同時引擎本身的音色可以透過音頻片段之間的間隔、長度、音量等屬性進行很大程度的調整。光說可能不是很直觀,還是看圖:

AudioGaming 從 2012 年開始與 Fmod 合作,目前 Fmod 獨佔 AudioWeather 與 AudioMotors 兩款程式的音頻中間件版本,下圖是 AudioMotors 的製作介面:

遊戲葡萄配圖

Wwise 於 2013 年提供了另一家音頻技術公司 Crankcase Audio,所開發的類似產品 Rev 的整合支持:

遊戲葡萄配圖

圖中介面內縱座標是頻率、橫座標是時間,能看出兩圖中載入的音頻樣本都是引擎的加速度。粒子合成器所做的工作,可以理解為循環播放圖中遊標直線所處位置的某一小段。(有點像 CD 播放錯誤時卡帶的效果,只不過片段更短、更加連貫,且精度更高)。關於粒子合成與引擎音效關係的技術細節見報告

粒子合成的好處顯而易見。首先它實現了線性的表現效果,即無論引擎什麼轉速、多快的變速、跨度多大、音色如何變換,透過粒子合成都能獲得相對更加擬真的結果。其次在多數情況下,粒子合成音頻樣本的數據量,要小於之前多段音頻的數據量,在這個行動遊戲的時代這無疑是個好消息。最後,音頻設計師也省下不少的勞動。

說到底粒子合成也並非完全的「演算音頻」,它仍然是基於音頻樣本的,且面對較為複雜的情況(比如透過降檔實現減速),仍然需要依賴分別錄製的不同的負載情況來實現。如今業內普遍的看法是,雖然基於音頻樣本的遊戲音頻技術,仍然會在未來多年內佔領主流地位,但演算音頻將會是未來的趨勢。近幾年有越來越多的純演算音頻技術,已經逐步開始運用在遊戲音頻與電影聲音製作當中。除此之外,隨着虛擬實境技術的逐漸成熟,對於互動音頻內容的要求也會越來越細化,演算音頻技術也無疑將會越來越受到重視,從而得到更大的發展。

 

關於粒子合成的延伸補充

粒子合成器確實不是簡單的片段循環,它還涉及片段的音量包絡、片段長度調製以及片段之間的時域疊搭等其他問題。但我在非專業場合回答專業領域問題一向秉承的精神是「ELI5 (Explain Like I’m Five)」,在不破壞原則的情況下能簡則簡。所以我還是覺得直接上圖更直觀一些(對,其實是我比較懶):

遊戲葡萄配圖

ICEM-Folkwang University-Institute for Computer Music and Electronic Media

如果各位對粒子合成器本身感興趣,我仍然建議閱讀前文鏈接中提供的,Sound On Sound 2005 年的文章:Granular Synthesis-How It Works & Ways To Use It,裡面通俗地講解了粒子合成器的工作原理,同時介紹了多個有關粒子合成實際應用的範例。

本文轉載自知乎用戶夏東平在《賽車遊戲怎麼做到對真實聲音的模擬?主要是引擎那部份》問題中的回答。

(本文由 遊戲葡萄 授權轉載)