《硬核機甲》(Hardcore Mecha)的音訊設計 - Part2
《硬核機甲》(Hardcore Mecha)的音訊設計 - Part1
整合
整合上,為了能快速嘗試音訊設計的效果,我們大量運用了Wwise Type進行配置,所有的聲音配置和絕大部分的Game Syncs內容都是將Wwise Type寫在Unity的各式各樣元件中完成的。下面簡要展示部分編輯器的內容。
角色動畫編輯器與音效
我們專案的動畫系統使用了Spine進行製作,並在Unity中寫了單獨的編輯器用來為spine動畫配置響應的動畫特效、程式事件、螢幕/手柄震動等等。音效的配置也和Spine在Unity內的動畫事件管理進行了整合,在這種編輯器中,可以實現對音畫同步的精細時間調整,進而最大可能地快速優化打擊手感。
跟隨動畫進行配置時,因為並非所有動畫都是預先調配製作產生的,而是由多個狀態動畫直接相互混合產生的,因此音效也需要根據實際聲音的需求調整發生時機和權重。當兩個動畫混合播放時,按權重配置較大的聲音進行播放。相對應的,需要在混合中播放的音效,也會通過它參與混合的引數比例狀況做出一些引數上的調整。
Node Canvas與音效
我們專案中使用了NodeCanvas元件作為可視指令碼編輯器來實現遊戲中的各式各樣的邏輯管理、角色行為樹、角色動畫狀態機的視覺化編輯,藉此策劃可以製作出相對複雜的邏輯、流程或動畫效果。
為了讓聲音的播放和控制能在各式各樣複雜的條件/時機生效,我們為狀態機當中新增了wwise的通訊以讓他實時地控制wwise的事件播放、RTPC/Game sync呼叫的功能,藉此我們得以實現一些條件相對刁鑽的聲音設計、條件判斷,以及複雜的動態音樂軌道段落變化在玩家實時遊玩當中做出相應的變化。而這種視覺化編輯元件互相之間的通訊更是頻繁使用,讓我們音訊設計師能直接進行一些連續的或者是巢狀式的音訊呼叫、控制設計。
過場編輯器與音效
硬核機甲中有大量的2d過場動畫,這些動畫都是通過spine進行散片素材製作,然後整合進入遊戲播放,為了實現過場動畫所需運鏡、震動、震屏等效果的精細調整,我們使用了Slate這個時間軸編輯器框架,然後將spine以及其他我們所需要的功能對其進行了整合,同時為了實現聲音、音樂配置的細緻調整,我們也為slate製作了呼叫wwise事件的模組。
以此為基礎,我們對大部分的過場音效都在樣本階段進行了拆分層,然後使用類似DAW的方式配置進遊戲過場中,同時過場音樂和一些各式各樣的實時音訊系統處理也是用該方法進行配置。
但在實現過程中我們也遇到了很多各式各樣的問題,作為以高精度過場動畫為招牌的專案,保持音畫同步是第一要務,然而因為多執行緒非同步載入、後臺效能的壓力、編輯器與build版本中的效能不同、主機的效能不同等等因素都會導致過場中產生各種不同的卡頓/時間偏差所導致的音畫不同步,這種問題會經常出現在只有過場或開頭是個過場的場景中,音效可以依靠拆分大大緩解音畫不同步帶來的不適,但音樂是不能的,一旦問題出現,精心設計的踩準動畫動作的過場音樂和畫面錯開還是會讓玩家的體驗還是會大打折扣。
大多數時候這類問題的正確解決方法是研究分析並正確處理並解決造成卡頓的根源。但我們還是為了保證音畫同步做出了一些保險處理:我們在後臺記錄了過場中每一個拆分的Wwise Event在過過場中發生的相對時機,並利用Wwise SoundbankInfo當中記錄的Duration資訊在Slate中繪製了等時長的Action Clip,這些Clip在實際播放的時候每個單位時間都會檢查自己播放的相對時間和slate的整體時機是否統一,統一則繼續順序播放,如果不統一則呼叫Seek On Event命令對自己進行校準。
除此之外,在長期打磨的過程中我們還為過場的聲音新增了一些周邊的功能:比如我們遊戲允許玩家暫停遊戲跳過過場,然而跳過時,聲音的當前在播放的內容是否需要終止並不是固定的,這一點在音樂的處理上更為明顯:有時可能已經進入了一條音樂後面的戰鬥中會迴圈的音樂,有時跳過快了又不會,為此我們也為每段cutscene新增了獨立的skip事件表,依照表中的配置,一段過場中不同的鏡頭在發生跳過時,可以觸發不同的skip event。過場中這些event或skip event是否需要在過場結束、過場中的元件銷燬時播放,我們又設計了單獨的介面部分進行管理。
發聲物件的整合與Persistent Object的管理
Wwise的Event Post行為是基於物件的,一個聲音的正確播放的生命週期總是需要一個GameObject來判斷它的引數功能的作用範圍。這裡如何定義我們遊戲的“物件”就成為了一個音訊系統正確工作的關鍵,我們不能簡單地將其任由程式post到發生程式碼的物件上。
首先我們在音訊設計中規定了基本發生物件為“角色物件”:
- 玩家身上的各種發聲體本身有很多是獨立的(如開火、動畫系統、特定的運動狀態音效等),現在則將其全部統一在角色身上,以便讓影響它聲音播放的各種game sync正確工作。泛化運用動畫系統跟wwise gameObejct的關係管理即可處理大部分音效畫面內物體的音效。
- 我們將子彈和子彈的集中音效分離出來作為“OneShot物件”這類音效的特徵是它們往往由角色spawn出來,並且生命週期有很大概率短於它聲音的長度。此時我們會為其單獨建立一個Object跟隨他的位置,直到音效播完時銷燬
- 其他順應各種應用場合,往往不直接影響角色的聲音事件的發聲物件處理到“Controller Object”上,這些物件往往直接在場景中建立,和各種Node canvas的flow script通過Send Event或者指定發生物件進行協作,管理各種Game Sync或者音訊控制。
另外,應對聲音的長度長於物件的生命週期導致聲音的不正確播放的情況。我們還2在大多數用到配置的地方都加入了Persistent Sound的選項,不同於上文的one shot處理方法當勾選時,這些音效統一在一個後臺物件播放,該物件則會在遊戲執行時不受場景、內部命令的影響一直存在。以便讓它們接受各種全域性處理的管理。
多人音效與網路同步
對於多人遊戲專案,網路同步總是一個令人頭痛的話題,物理距離和運營商/下級路由等等因素總是會給玩家之間的同步造成許多困難,不同型別的網路遊戲為了應對不同的遊戲規則和遊戲細節,往往會採用不同的同步策略。類似格鬥遊戲和一些複雜遊戲的設計,硬核機甲專案則使用了一套點對點回滾同步的系統策略,這也對音訊系統的應對處理產生了影響。
首先簡述一下這套Deterministic系統的基本處理方法:每個玩家會把自己的輸入傳送給其他的玩家,在這期間的延遲當中,遊戲會根據這些輸入對下數幀進行遊戲運動模擬,遊戲會在本地按預測的狀況進行,並等數幀後其他玩家的輸入到位進行校對,如果全部正確則往下進行,錯誤則回滾回出錯的幀並重新根據其他多數玩家的真實輸入計算出當前幀該有的狀態。這樣幾名玩家在互相之間有延遲的情況下可以保證呈現給各個玩家的內容是正確的。同時由於模擬預測的存在讓玩家能在感官上感受到幾乎零延遲的體驗。同時伺服器也不需要實時執行遊戲的全部細節,大幅減小同步的資料量開銷。
關於同步的具體處理細節不做過多的敘述,在該系統下,Wwise在本地進行還放音效也會和其他畫面和邏輯表現一起按預測模擬的內容實時播放,但此時當輸入發生偏差進行回滾時就需要進行判斷了。我們權衡各種情況的不同,把多人模式播放的聲音分成了三類處理方法:
- 音樂和環境按起始邏輯播放不受回滾管理
- 通常的短音效播放時記錄自己是否播放過,在發生輸入不同步回滾時立即播放正確的音效,但如果重複則不播放。
- 迴圈音效播放時保持記錄它自身的播放狀態,並在發生輸入不同步回滾時播放播放之前音效的stop,再判斷是否播放新的音效。
依照這些邏輯執行遊戲就可以讓玩家即便自身網路環境惡劣,也能擁有儘可能流暢的聲音體驗。
音樂設計
工作量上講硬核機甲的音樂是我整個專案音訊工作的重頭戲,整個專案音樂由我和高天祥、Eddy.Liu一起一共創作了60餘首,近3個小時的原創音樂,其中挑選了39首相對完整的樂段進行混音編輯成原聲集,現在已經在Steam發售,歡迎大家前去支援^_^
硬核機甲的音樂風格上來說,整體屬於糅合日式遊戲旋律風格的電子管絃樂,我們希望他同時擁有歐美科幻遊戲中管絃音色和電子音色的協調,並且和戰鬥過程的調和,又能具備日式尤其是機戰音樂朗朗上口令人熱血沸騰的旋律。但其實創作過程中,二者時常會有些矛盾,現代遊戲追求音樂的多樣性,反覆重複的音樂會讓人聽起來乏味,但對於日式遊戲,重複強化日式的旋律主題來刻畫角色、劇情又是必不可少的一部分,因此我們的日常工作很大程度上就是在權衡這兩者,配合遊戲劇情創作出符合劇情發展的音樂。
該專案的音樂創作理念上首先保證曲目的每首編配相對豐滿,風格厚實的同時,在故事前半段我會多運用一些較散較短小的動機、不同花樣的鼓音色以及相對旋律性較弱的音色和聲音元素,強調氛圍感和該曲目對場景的刻畫,削弱曲目的旋律性和敘事感,後半段則逐漸反過來,大規模運用直接的二聲部旋律來讓戰鬥音樂的旋律主題感逐漸增強,並且通過在各種細節上對主動機的複用發展來營造敘事性。另一方面,作為同時負責音樂音效創作的優勢,我還在鼓點、墊底音色中埋入了不少遊戲內的音效,雖然玩家一般不會發現這些,但這種設計方法使得音效跟音樂的調和度不知不覺地大幅上升了。
從遊戲的邏輯需求上來講,隨著遊戲內容的開發陸續產生了背景戰鬥音樂,劇情戰鬥音樂,部分關鍵角色的角色音樂,過場音樂,配圖對話音樂,介面音樂,還有多人模式的戰鬥音樂等需求。下面講講我們怎麼應對這些音樂的邏輯應用配置和處理。
動態音樂矩陣的創作設計與關卡中的應用
我們遊戲的戰鬥會隨著劇情敘事的發展一直變化,在同一個場景中,故事會不斷髮展,戰鬥時而激烈時而平緩。我們同時需要強化這個場景的音樂主要動機,也需要順應遊戲音樂的需求同時具備激烈和平緩的部分,一條迴圈的音樂顯然寫得再好也難以應對這種需求,寫太多的不同的曲子來回變也會淡化交代場景的功能。為此我為每個關卡創作其相應的動態音樂來應用在關卡的各個部分。
以第三章為例,首先從創作開始,我就將音樂結構化拆解為String(Woodwinds)、Brass、Key(Piano)、Guitar、Percussion/Drum、SynthARP/Ambience等幾個部分,將曲子分成數個phase進行創作。
如圖,首先按表我把不同Phase的音樂按圖示拆解成了分層匯出後,曲子變成一系列分軌,然後按照圖中框架所示的搭建了Wwise內的音樂結構,P1對應的是一上來潛水中的部分,隨後將其中一些可能會在同一個Phase內進行切換的分層按圖中的顏色框選進行了複製組合。例如本例中phase3中的鼓是可以上下和phase2/4交換組合,絃樂可以和phase4的α主旋律相互切換。
另一方面,我為各個Phase之間寫了一些Bridge Track來讓他們切換時有過渡段落,比如第三章的Phase1階段都用在玩家一上來落水的探索部分關卡,從水下關到陸地關卡切換時,經過一個短暫的Stinger後進入主旋律。
做好了框架後,下一步會針對關卡的流程組裝框架中的曲目,我通常會先把關卡縮略到一塊進行一個統一的流程規劃,再在關卡中利用上文提到的各種編輯器等工具進行具體的配置。例如該圖描繪了遊戲第三章的26個區,這些區域中既有通過切區來切換音樂段落,也有在每個trigger觸發劇情或鎖區戰鬥時切換音樂段落的設計。
過場音樂的銜接處理
硬核機甲的精緻的2d過場動畫是遊戲的一大亮點,他們分散在遊戲中各式各樣的地方,每個過場都有不同的觸發時機和豐富的上下文,和遊戲過程無縫銜接,這也為音樂的處理帶來了一些挑戰。由於過場和戰鬥之間沒有切鏡頭無縫銜接,所以沒有機會把過場音樂先停下來再播戰鬥音樂,用整條做好的音樂套過場又往往咬不住劇情鏡頭,我們只能一方面和動畫組協調調整鏡頭長度,另一方面為這些曲子設計單獨的intro段落,配合過場。
音樂很多時候直接停下來再另起並不是很舒服,而將音樂的切換卡死在過場結束的一瞬間顯然不是個好主意,這會讓曲子顯得很跳。為了讓音樂舒適地銜接起來,我們經常需要讓音樂在小節正拍上進入下一段的功能,Wwise的Interactive Music中Music Switch Container很好地幫我們實現了該功能。
例如:第五章的boss戰裡,先會進入一個引入的過場,沃菲斯把主角塔雷瑟踢入世界樹核心,一段嘴炮後進入第一段戰鬥,此時音樂進入段落A,敵人血量降低到一定程度後進入第二段過場,沃菲斯講述自己故事後情緒激化進入第二段戰鬥,音樂從過場引入第二段的激化的戰鬥音樂,然後隨著玩家擊敗boss再進入第三段過場。
如圖,製作過程中出現的一個麻煩的點在於:玩家是可以手動跳過過場的,因此出現了圖中的紅色箭頭-每個過場都需要設計一個單獨的stop事件用於管理音樂各個分層播放的切換過渡、過場音效的停止,而玩家正常播放過場時,則按小節正拍節奏過渡到遊戲當中。
通過音樂的設計,我們希望玩家能清晰地感受到情節的演進變化,又能把每一個章節的音樂和關卡中呈現出來。
以上是我對整個硬核機甲專案的一個總結,希望各位老師多多指點。
原文:https://blog.audiokinetic.com/zh/sound-design-of-hardcore-mecha-part2/
相關文章
- 《硬核機甲》(Hardcore Mecha)的音訊設計音訊
- 《硬核機甲》製作人自述獨立遊戲開發者之路遊戲開發
- 光明網:《硬核機甲》打破國際主機遊戲行業偏見遊戲行業
- iOS音訊程式設計之實時語音通訊(對講機功能)iOS音訊程式設計
- 高效的音訊製作與槍和車的音訊設計方案音訊
- 音訊設計經驗分享:聲音功能的設計與創意表現音訊
- LinuxCOSS音訊程式設計Linux音訊程式設計
- 展望遊戲音訊設計的發展方向遊戲音訊
- linux音訊程式設計指南Linux音訊程式設計
- 計算機硬核知識大全計算機
- Linux 音訊ALSA技術說明--part2[轉&學習]Linux音訊
- 國產遊戲《硬核機甲》開發者訪談:熱愛與堅持澆灌出的夢想之花遊戲
- 基於《十三機兵防衛圈》的音訊整合設計理念及工程分享音訊
- Linux下的OSS音訊介面程式設計(轉)Linux音訊程式設計
- 【秒懂音視訊開發】09_音訊錄製02_程式設計音訊程式設計
- 硬核!程式設計師延壽指南程式設計師
- 面向前端的設計規範-文字初探-Part2前端
- 【梟·音訊】聲隨意動——淺談《暗影火炬城》聲音設計音訊
- 《JavaScript設計模式》閱讀筆記_part2JavaScript設計模式筆記
- 05:音樂響起來!遊戲主角穿上馬甲啦#python遊戲程式設計#紅傘傘遊戲Python程式設計
- 乾貨丨遊戲音訊與聲音設計相關書籍推薦遊戲音訊
- 如何利用 AVFoundation 設計一個通用穩定的音視訊框架?框架
- 雷亞新作《Binary Gods》概念視訊公開 機甲動作遊戲Go遊戲
- 榮獲“休閒/社交遊戲類最佳聲音設計獎” 《使命召喚手遊》是如何做空間音訊設計的?遊戲音訊
- 程式設計師需要了解的硬核知識之磁碟程式設計師
- 程式設計師需要了解的硬核知識之CPU程式設計師
- 音視訊--音訊入門音訊
- 音視訊–音訊入門音訊
- CRI新音訊工作室設立、強化音訊(音樂、聲優等)製作業務音訊
- MT6739+MT6357音訊設計資料參考音訊
- Ganker機器人:手機遙控的機甲機器人機器人
- 音訊_錄音音訊
- 全網最硬核解讀計算機啟動原理計算機
- 全網最硬核講解計算機啟動流程計算機
- 如何為實時音視訊設計小且優的深度學習模型?深度學習模型
- win10 主機後置音訊沒聲音怎麼辦_win10主機背部音訊輸出無聲音解決方法Win10音訊
- Kotlin的魔能機甲——KtArmor(三)Kotlin
- Kotlin的魔能機甲——KtArmor(一)Kotlin