關(guān)于對(duì) Wwise Unreal Integration 的改進(jìn)

作為在 Unreal 中管理 Wwise 素材的便捷解決方案,Wwise 2019.2.1 中引入的 Event-Based Packaging (EBP) 素材管理工作流程受到了 Wwise Unreal 開(kāi)發(fā)者社區(qū)的廣泛歡迎。不過(guò),有些團(tuán)隊(duì)在從傳統(tǒng) SoundBank 工作流程做出轉(zhuǎn)變時(shí)遇到了一些制作上的阻礙。為此,我們一直在設(shè)法解決開(kāi)發(fā)人員轉(zhuǎn)到 EBP 工作流程時(shí)報(bào)告的錯(cuò)誤。同時(shí),也在規(guī)劃和實(shí)施相應(yīng)改進(jìn)以確保 SoundBank 操作的穩(wěn)定性。?
對(duì)于發(fā)布時(shí)功能不一致造成的延誤和不便,我們要向受影響的團(tuán)隊(duì)真誠(chéng)地說(shuō)一聲抱歉。在此,我們想跟各位聊聊 Game Engine Integration 團(tuán)隊(duì)目前的計(jì)劃,同時(shí)也讓大家大概了解一下對(duì)未來(lái)有何期待。我們會(huì)通過(guò)所述功能增強(qiáng)素材管理工作流程,還請(qǐng)諸位耐心等待。
為何對(duì) Unreal Integration 實(shí)施改進(jìn)?
對(duì)于 Unreal Integration,用戶(hù)最想實(shí)現(xiàn)的一項(xiàng)功能是在 Unreal 工程層級(jí)結(jié)構(gòu)中自動(dòng)創(chuàng)建 Wwise 相關(guān)素材。因?yàn)?,必須?Unreal 中手動(dòng)復(fù)制 Event 和 SoundBank 素材實(shí)在是很麻煩。要讓 Wwise 中的 Event 名稱(chēng)與關(guān)聯(lián) Unreal 素材的名稱(chēng)保持同步,只能在 Unreal 中手動(dòng)進(jìn)行重命名。另外,對(duì) Wwise SoundBank 總要特別小心,因?yàn)樗鼈儾⒉皇窃?Unreal 素材。
對(duì) Unreal Integration 做了哪些改進(jìn)?
為了解決上述問(wèn)題,我們引入了基于 Wwise 工程中的 Event 自動(dòng)創(chuàng)建 Unreal 素材這一功能。正如范潤(rùn)鵬在其《EBP 管線概述》博文中所說(shuō)的那樣,這樣 Wwise 工程中的每個(gè) Event 都會(huì)自動(dòng)打包到 Unreal 素材中。Unreal 中的現(xiàn)有 Audiokinetic Bank 素材仍可用于分組存放 Event,不過(guò)默認(rèn)會(huì)在 Unreal 素材中為每個(gè) SoundBank 存儲(chǔ)一個(gè) Event。因?yàn)?Event 的媒體是單獨(dú)處理的,所以只有 Event 及其 Structure 會(huì)存儲(chǔ)在 SoundBank 中。通過(guò)在 Unreal 素材中存儲(chǔ) SoundBank,我們可以在 Wwise 和 Unreal 之間自動(dòng)更新 Event 名稱(chēng)。?
到底哪里出了差錯(cuò)?
Event-Based Packaging 素材管理工作流程可分為三個(gè)主要部分:
自動(dòng)創(chuàng)建包含單個(gè) Event 的 SoundBank
在 Unreal 和 Wwise 工程之間同步素材
在素材生命周期內(nèi)自動(dòng)加以處理(在運(yùn)行時(shí)加載、卸載、準(zhǔn)備素材)
它們每一項(xiàng)都很重要,都可被視為重大功能。考慮到相關(guān)改動(dòng)會(huì)影響 Unreal 工程中的素材制作管線,這些功能實(shí)現(xiàn)起來(lái)還是有一定風(fēng)險(xiǎn)的。
雖然自動(dòng)創(chuàng)建包含單個(gè) Event 的 SoundBank 并沒(méi)有造成問(wèn)題,但存儲(chǔ)在 Unreal 素材中會(huì)增加將其保存到磁盤(pán)中所需的時(shí)間。在最初的測(cè)試中,我們并未發(fā)現(xiàn)這一點(diǎn)。發(fā)布不久后聽(tīng)處理大型工程的團(tuán)隊(duì)說(shuō)了,我們才意識(shí)到這會(huì)拖慢他們的制作管線。這種情況并不理想,我們準(zhǔn)備加以改進(jìn)。不過(guò),與其說(shuō)它是個(gè)問(wèn)題,不如說(shuō)是一種不便。
受影響團(tuán)隊(duì)報(bào)告的大多數(shù)問(wèn)題出在工作流程的 Asset Synchronization 部分。同時(shí),Asset Synchronization 代碼中的錯(cuò)誤也導(dǎo)致了我們沒(méi)有察覺(jué)的構(gòu)建中斷和版本控制問(wèn)題。而且,將 SoundBank 和媒體存儲(chǔ)在 Unreal 素材中也使得對(duì) Wwise SoundBank 的性能分析變得形同虛設(shè)(因?yàn)?SoundBank 是在引擎的內(nèi)存中加載的,所以在 Wwise 性能分析器中是看不到的)。另外,在 EBP 的核心使用高效但不安全的 SetMedia/UnsetMedia 函數(shù)時(shí)常會(huì)導(dǎo)致運(yùn)行時(shí)崩潰。
Unreal Editor 使用 Wwise Console 工具從命令行執(zhí)行 SoundBank 生成操作。讓 Wwise 將這些文件生成到磁盤(pán),然后在 Unreal 素材中讀取和存儲(chǔ),會(huì)使用比以前更多的磁盤(pán) I/O。要提高此操作的性能,可在連接 Wwise 設(shè)計(jì)工具時(shí)通過(guò) WAAPI 生成 Sound Data。不過(guò),這也意味著現(xiàn)在有了兩種 Sound Data 生成方式要維護(hù)。雖然這樣并非不可能,但是系統(tǒng)會(huì)比較復(fù)雜,難以管理并提供支持。
準(zhǔn)備如何解決問(wèn)題?
自引入 EBP 工作流程以來(lái),我們一直在對(duì)錯(cuò)誤和問(wèn)題進(jìn)行修復(fù)。其中最關(guān)鍵的修復(fù)涉及到增強(qiáng) SetMedia/UnsetMedia SDK 函數(shù)以在釋放內(nèi)存會(huì)造成風(fēng)險(xiǎn)的情況下發(fā)出警告。為了使集成更加穩(wěn)定可靠,我們還把對(duì) Wwise Event 打包的 .uassets 中的媒體的軟引用改為了硬引用。不過(guò),當(dāng)前架構(gòu)中仍然存在我們無(wú)法找到解決方案的問(wèn)題使用場(chǎng)景。為此,我們已經(jīng)著手對(duì) Wwise 2022.1 的功能進(jìn)行重構(gòu)。?
對(duì) Wwise 實(shí)施改進(jìn)
為了避免使用兩種方式生成 Sound Data,我們將在 Wwise 的 SoundBank Manager 中添加用于“創(chuàng)建包含單個(gè) Event 的 SoundBank”的選項(xiàng),來(lái)專(zhuān)門(mén)讓 Wwise 設(shè)計(jì)工具生成 Sound Data。名為 Auto SoundBank Generation 的新增選項(xiàng)設(shè)在 Project Settings 的 SoundBanks 選項(xiàng)卡下。在默認(rèn)情況下,它會(huì)被禁用,并會(huì)為當(dāng)前不在 SoundBank 中的 Event 自動(dòng)生成 SoundBank。
為了包含運(yùn)行時(shí)引擎所需的各種信息以便設(shè)計(jì)師根據(jù)需要播放聲音,我們還對(duì) SoundBank 元數(shù)據(jù)文件的內(nèi)容實(shí)施了改進(jìn)。這樣便可拋開(kāi) Unreal Integration 中的所有素材同步代碼,轉(zhuǎn)而依靠元數(shù)據(jù)作為 Single Source Of Truth(我們稱(chēng)之為 SSOT)。?
簡(jiǎn)化 Unreal Integration
現(xiàn)在不必每次都將 Wwise 工程中的所有條目自動(dòng)添加到 Unreal Content 文件夾,只需在必要時(shí)創(chuàng)建 Unreal 素材即可。除非選擇使用 Unreal 工程中的特定 Event,否則不會(huì)在磁盤(pán)上創(chuàng)建素材。在對(duì)工程進(jìn)行打包之前,這些素材只包含對(duì)其所用資源的引用。只有到打包工程的時(shí)候才會(huì)將 SoundBank 復(fù)制到 Unreal 暫存文件夾層級(jí)結(jié)構(gòu)。藉此,還可解決音頻以外的項(xiàng)目成員遇到的問(wèn)題。之前,他們有時(shí)必須安裝 Wwise 才能將音頻整合到工程中。新的集成包只需要有 GeneratedSoundbanks 文件夾便可在工程中獲得全方位的 Wwise 音頻支持。
從 EBP 遷移到 SSOT
將 EBP 工程遷移到新的 AutoBank/SSOT 工作流程會(huì)花一些時(shí)間,遷移的時(shí)長(zhǎng)與 Unreal 工程中 Sound Data 文件夾下的 Unreal 素材數(shù)量直接相關(guān)。所述遷移必須在裝有 Wwise 的系統(tǒng)上執(zhí)行,并且在遷移過(guò)程中要打開(kāi) Wwise 工程。對(duì)于大型工程來(lái)說(shuō),這估計(jì)會(huì)是一項(xiàng)耗時(shí)的任務(wù),好在只需要做一次就可以了。
工作流程會(huì)有何改變?
我們給自己設(shè)定的主要目標(biāo)是提升 Wwise Unreal Integration 的使用體驗(yàn)。適應(yīng)新的工作流程可能需要一個(gè)過(guò)渡期,但我們認(rèn)為做出這些改變是值得的。最終,Wwise Unreal Integration 會(huì)更加可靠,更能滿(mǎn)足使用版本控制工具進(jìn)行協(xié)作的團(tuán)隊(duì)。
靈活設(shè)定 GeneratedSoundBanks 位置
在生成 SoundBank 時(shí),Wwise 會(huì)創(chuàng)建新的元數(shù)據(jù)文件 (ProjectInfo.json)。此文件將包含針對(duì)各個(gè)平臺(tái)生成的 SoundBank 所在的路徑。這樣,團(tuán)隊(duì)便可更加靈活地選擇對(duì)于各個(gè)平臺(tái)要將 SoundBank 生成到哪個(gè)位置,以此來(lái)滿(mǎn)足自身工作流程的需要。而且,應(yīng)該還可解決對(duì)很多采用 EBP 工作流程的團(tuán)隊(duì)造成影響的版本控制問(wèn)題。
修改 Wwise 素材名稱(chēng)
新的工作流程不需要 Wwise 中的 Event 名稱(chēng)與相應(yīng) Unreal 素材一一對(duì)應(yīng)。那么,這是否意味著將無(wú)法在 Unreal 中編輯 Wwise Event 名稱(chēng)呢?當(dāng)然不是。將來(lái)可以在 WAAPI Picker 中編輯媒體項(xiàng)的名稱(chēng),以便在聚焦于 Unreal 時(shí)對(duì) Wwise 工程的元素進(jìn)行重命名。
Unreal 素材就像是 SoundBank 內(nèi)容的快捷方式而非序列化數(shù)據(jù)。它們只包含 ID。這些 ID 允許集成代碼查明要在內(nèi)存中加載什么以便 Wwise 播放聲音。
對(duì) External Source 的最低支持
在引入 EBP 工作流程之前,Unreal Integration 沒(méi)有妥善處理的另一 Wwise 功能是?External Source。由于很多開(kāi)發(fā)商已經(jīng)在 Unreal 中構(gòu)建了自己對(duì)此 Wwise 功能的集成,所以他們并沒(méi)有由自己的解決方案改為使用集成代碼提供的解決方案。有些甚至不得不從集成代碼中移除對(duì) External Source 的支持,因?yàn)樗鼤?huì)對(duì)其自身的解決方案產(chǎn)生干擾。
對(duì)此,我們會(huì)將 Unreal Integration 的 External Source 功能設(shè)為完全可選的功能。
以此為基礎(chǔ)持續(xù)改進(jìn)
對(duì)采用 EBP 工作流程的 Wwise Unreal 開(kāi)發(fā)者來(lái)說(shuō),過(guò)去兩年可以說(shuō)相當(dāng)精彩,也很有挑戰(zhàn)性。很多團(tuán)隊(duì)跟我們說(shuō)自己非常喜歡這一工作流程,再也不想回到手動(dòng)管理 SoundBank 的工作流程。也有團(tuán)隊(duì)表示想采用該工作流程,但其局限性對(duì)自身工作流程影響太大了。在過(guò)去一年里,我們考慮了所有的反饋,無(wú)論好的還是壞的,為的就是重構(gòu)集成代碼。
在我們看來(lái),將 EBP 功能引入到 Wwise 設(shè)計(jì)工具中并在集成代碼中采用 SSOT 策略在方向上是正確的。在 Unreal 素材的使用上做出轉(zhuǎn)變之后,音頻團(tuán)隊(duì)的制作管線變得更加清晰了。其他使用自研引擎的團(tuán)隊(duì)將能夠運(yùn)用 AutoBank 和 SSOT 工作流程。另外,這也為在未來(lái)版本中改進(jìn) Unity Integration 開(kāi)辟了一條嶄新的道路。
如有興趣嘗試新的 Wwise Unreal Integration 工作流程,歡迎使用?Wwise 2022.1 Beta 版本。

紀(jì)堯姆·雷諾 (GUILLAUME RENAUD)
客戶(hù)技術(shù)支持主管
Audiokinetic
紀(jì)堯姆自 2014 年初便加入 Audiokinetic 客戶(hù)技術(shù)支持團(tuán)隊(duì)。他精通 Wwise 相關(guān)知識(shí)并熱衷與社區(qū)分享,深信技術(shù)只有被用戶(hù)理解才能盡其所用。在探索游戲和小說(shuō)構(gòu)筑的虛擬世界之余,他喜歡穿上跑鞋抑或踏上滑雪板投身現(xiàn)實(shí)天地。