賽車遊戲怎麼做到對真實聲音的模擬?主要是引擎那部分

發出的聲音與汽車的工況相關,這是怎麼做到的?


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

1,在規劃階段我們會把遊戲中引擎的轉速分成多個區間。例如所需引擎的轉速會覆蓋1000-7000 rpm,以劃分成三段為例,我們將1000-3000定義為低轉速,3000-5000定義為中轉速,5000-7000定義為高轉速。

2,分別製作三段轉速中,三個中間速度的音頻循環樣本,即2000rpm、4000rpm和6000rpm(取值出於簡化說明目的,實際操作中不一定使用中間速度)。

3,在遊戲中實時傳送控制參數,首先判斷車輛引擎在哪個轉速區間運行,以循環播放對應區間的樣本,同時參數也決定了該樣本的音高調製比例。比如1000rpm時實際上播放的是2000rpm樣本音高降低100%的結果(還是出於簡化說明目的,所謂「音高」的說法不是很科學,不過我們感受到最明顯的變化確實是音高的升高或降低)。

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

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

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

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

這種方案最大的問題就在於它並沒有線性地表現出引擎從1000到7000轉速聲音的變化,或者說它是偽線性的。因此為了盡量還原真實的引擎聲音,在實踐中根據不同情況把轉速/負載拆分為二三十個樣本也是有可能的,從而音頻設計師往往需要耗費大量的精力來處理不同轉速之間的銜接、調整音高升降比例、樣本之間的響度關係、負載之間的切換等等問題。更大的問題在於,根據演算法的不同,音高升降過程中的效果並不完全一樣,因此這個環節很容易穿幫。比如我小時候特別喜歡玩兒極品飛車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播放錯誤時卡帶的效果,只不過片段更短,更加連貫,且精度更高)。關於粒子合成與引擎音效關係的技術細節見paper Sample-based engine noise synthesis using an enhanced pitch-synchronous overlap-And-Add method

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

================未來的分割線=================

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

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

ICEM-Folkwang University-Institute for Computer Music and Electronic Media如果各位對粒子合成器本身感興趣,我仍然建議閱讀前文鏈接中提供的,Sound On Sound 05年的文章:Granular Synthesis-How It Works Ways To Use It
http://www.soundonsound.com/sos/dec05/articles/granularworkshop.htm
裡面通俗地講解了粒子合成器的工作原理,同時介紹了多個有關粒子合成實際應用的範例。
===補充結束===


補充一個音頻之外的細節。

引擎的聲響一般遊戲都是拆分成轉速,節氣門開度以及扭矩負載的函數。

轉速上高票回答的多好,不多言

節氣門開度就是一般我們說的油門兒。它和音量不是線性相關的。一般遊戲大家都全油門兒,所以也就不介意了

最後這個引擎負載,是比較關鍵的參數。是由引擎此刻的負載扭矩影響的,簡單也可以用引擎轉速的變化率來湊合下

提出這些的意思是,想要讓合成出來的引擎聲真的有擬真度,除了好的音頻工程,同時還需要一個比較好的引擎模擬來產生驅動音頻的數據。引擎幾乎沒有一刻轉速是固定的,靜態參數下的調音和最終整合起來還是有些不同的。

根據變速箱和引擎匹配不同,同一個引擎聽起來不一樣也是很正常的。

===================================================

我也配合的更新一點東西,關於為什麼做為賽車遊戲開發者,並不那麼喜歡合成的引擎聲

引擎聲說到底,其實是氣缸里爆燃的聲音,通過進排氣系統的共鳴產生的音色

但是,其實我們聽到的引擎聲並不只是這些,譬如說齒輪在高速旋轉齒合的時候會發出高頻的尖銳摩擦聲,轉自引擎因為中心是個直齒的三角偏心輪,所謂轉子引擎特有的聲音這就是原因之一 …… 這個和轉速相關

有的車輛排氣系統因為排氣激波的不穩定會產生咕嚕嚕地聲音。美系大排量常見,也和機械增壓結構由一定關係 …… 這個和轉速和負載相關

有的車輛氣路因為油門和轉速而變化,譬如各種可變氣門系統,可變進氣歧管,可變幾何渦輪 …… 這個和轉速以及油門相關

有時候未燃燒完全的燃氣進入了排氣管,音源的位置相當於就變了,會有砰砰的悶響 …… 這個和負載相關,極品飛車特別喜歡在蘭博基尼上強化這個,配合排氣管焰特效,玩家都喜歡 ~

甚至會有燃燒不完全的氣體直接跑到了排氣管出口發出 啪啪 的聲響 …… 這個和負載相關,拉力賽車對付渦輪遲滯幾乎必備,前兩年為了空力F1也這麼搞得

所以其實做個賽車遊戲製作者,會覺得合成的聲音,玩玩就可以了,變數實在是不太夠

前兩天同事剛給自己車排氣管上裝了個哨子,高頻會有吹氣聲,賊開心了


假裝懂隨便答
個人覺得分為事件響應和分段處理。
從事件上分為油門事件和換擋事件。油門事件主要用於當前擋位通過轉速提高引擎動力輸出。而換擋事件的流程為踩離合松油門後換擋加油門。
以前看過一些賽車音頻文件,對這塊不專業,拋磚。
一些比較真實向的,分別有各個擋位升檔的音頻文件和該檔踩死循環的聲音文件。以鍵盤操作的自動擋為例最簡單,即沒有線性輸入換擋也是設定好的自動換擋,假設每次換擋轉速回2000,6500時換下一檔,玩家按下鍵盤首先是點火音頻播放-1檔-加油門提轉速-2檔-加油門提轉速-3檔------6檔急速全油門。
簡單理解一下,把上訴音頻排成播放列表,油門是播放鍵,按住即播放,鬆開即回退,最後一檔的急速穩定狀態無限循環。


我們公司現在在做跑車音效模擬器,也就是在低端車型上面實現跑車的聲浪。這個過程比較複雜,首先A。聲音的對應,油門深淺,發動機進氣量,發動機轉速,發動機時速,發動機加速度,扭矩等等 B。對應發動機聲音,鏈條,排氣,A和B的對應首先是相應速度的對應,如果響應速度慢了體驗就差很多。另外發動機的聲音出來本來及時混合的聲音,汽車的時速和發動機的轉速,進氣量等等絕對不是一一對應,所以要有複雜的演算法,A1,A2,A3---佔比多少,對應B1比對少,對應B2,B3又佔比多少?關於B的部分可以多了解下極品飛車的聲音採樣,他們也是在汽車不同部分分別錄製,然後合成的,否則不真實。聲音樣品可以現場採樣,也可以後期製作,也可以綜合來,在車的不同位置,角度不同甚至出來的效果都千差萬別。原來想簡單了,做一款音效的真的很複雜。有感興趣的可以扣扣:別餓餓別七零零。交流


歪個樓...
只有我一個人想吐槽極品飛車18油門稍微松一點不踩到底的時候安靜的像熄火了一樣.........


話說這個聲音我無意中做出來過,當我開大音量聽得正過癮的時候,把鄰居吸引過來了,問了句:"你在玩賽車嗎?"

使用audition 3 ,用 生成 / 生成音調 工具
參數大概如圖

這個聲音有點像摩托車或者拖拉機,可以調整,
上一次調出來賽車聲音了,參數記不住了,試了幾下,沒弄出來,我保存了,用好點的低音炮可以聽出類似效果。
http://pan.baidu.com/s/1mg6I6V2
遊戲裡面可能也是用演算法做的,原理可能差不多吧,下面看看高手直接裝上了電動車,聲音隨油門變化,不是從電機上取的頻率,是合成的。
視頻封面仿摩托車聲音 喇叭在座桶中安裝演示效果—在線播放—優酷網,視頻高清在線觀看視頻


這個估計去sector3的論壇問問他們的音頻工程師比較好
之前在他們前身simbin的insider裡面有介紹
可惜現在simbin重組之後網站也荒廢了

Game 2013-06-15 00-53-24-12-muxed_土豆


我記得我們的做法就是現場錄的...


我記得極品飛車是找各款豪車現場錄的吧


目前沒做過實時演算的引擎聲音。
但我有印象上學時老師講過,是在不同轉速下實錄,然後放到遊戲的聲音引擎(類似物理引擎,在遊戲中負責觸發,實時演算聲音的東西)中,在不同階段中處理並調用。必如我錄了2000轉和3000轉,在遊戲中2000加速到3000的過程,就是靠聲音引擎計算出該把2000轉的聲音以多快的速度升高多少音分來表現。至於怎麼算,那就是做引擎那幫人的事了我不知道…


這東西與20年前電腦聲卡波表合成技術相同。


如果有授權直接錄最好吧……。

非專業,但是有這麼個印象。


推薦閱讀:

如何看待「癮君子為攢錢買遊戲裝備成功戒毒」這條微博?
想起命令與征服系列遊戲,你最美好的回憶是什麼?
歷史上哪一款電子遊戲最難玩到?
英雄聯盟有哪些有趣的笑話(段子)?
遊戲倒玩會怎樣?

TAG:遊戲 | 遊戲設計 | 音效 | 競速類遊戲RCG | 遊戲音頻 |