对于音频团队而言,这个关卡不仅仅是视觉上的奇观,更是一次将叙事融入机制的空间化互动音乐实验。我们试图打破 3D Diegetic Music(作为实体的木偶歌声)与 2D Non-diegetic Music(作为意象的剧院伴奏)之间的传统边界,让战斗与演出在听觉维度上浑然一体,我们与关卡策划团队紧密协作,像安排演员站位一样将承载不同声部的木偶乐手错落布置于剧院的四周与高台。
在这里,敌人不再仅仅是阻挡玩家的障碍,更是这场怪诞音乐剧中不可或缺的乐手。战斗的本质,被异化为一场对乐曲的实体解构与重组:
当人偶处于远方,玩家只能听到剧院自带的空洞的 2D 伴奏;而随着它们悄然逼近,承载于其躯体之上的 3D 声部会逐渐浮现,将乐曲的织体填补完整。
这种动态机制,让我们把音乐剧的指挥棒交给了玩家——每一次攻击造成的眩晕,都是对木偶演奏的物理打断,是一个强制的休止符;而当敌人从眩晕中恢复,那缺失的声部又会执着地重新汇入主旋律。这种从中断到恢复的拉锯,既是激烈的战斗博弈,也是对老团长那场无尽轮回执念最深刻的听觉隐喻。
这首名为《他日再相见》的曲目,原是剧团最欢乐的曲子,但在剧情中却承载着剧团的悲伤往事。我们希望通过技术手段,将这种欢快曲风与悲伤内核的撕裂感,通过空间化的形式传递给玩家。本文将分享我们如何利用 Wwise 的原生功能,实现 NPC 与背景音乐的完美共生,以及这项技术如何重塑了玩家的情感体验。
实现步骤
多点同步方案
在箱中剧院的设计初衷里,我们希望达成一种听觉上的恐怖谷效应:那些木偶演员,它们既是疯狂追逐暖暖的敌人,也是这场怪诞音乐剧的演奏者。
为了实现这一愿景,我们需要解决一个核心矛盾:如何让多个高速移动的 3D 声源,与 2D 的全局背景音乐保持采样级的完美同步?
幸运的是,Wwise 提供了原生的解决方案,只需简单的 Wwise Authoring 中的配置和Runtime 调用即可实现这个功能。
核心的API是 AK::SoundEngine::SetMultiplePositions 。值得一提的是,AK::SoundEngine::SetMultiplePositions 存在两个不同的重载。
它们主要的区别是前者可以在 AkChannelEmitter 结构体中额外传入 AkChannelMask,可以指派每个位置只包含该声源的某几个声道的信息,换言之我们可以借此灵活指派每个位置的发声内容。而后者默认每个位置都包含了声源的所有声道信息。
文档中举了非常直观的一个汽车扬声器的例子来阐述这种用法。
而又由于这种方案中,我们使用一个 PlayingID 去播放了所有的声音内容,从根本上就不用额外处理同步问题。因为本质上只有一个声源在播放,只是它的发声器官被我们拆分到了空间的各个角落。
Wwise Authoring 配置
在 Wwise Authoring 阶段,我们首先将每位演员的 3D 音轨分别导出为了只有某个单独通道的音频文件,并分别作为单独的Music Track导入,调节每个 Music Track 的 Attenuation ,包含了:
|
音乐内容
|
音频文件
|
|
芮妮塔(Renita)
|
只有 BL 通道的7.1文件
|
|
梅莉莎(Melissa)
|
只有 SR 通道的4.0文件
|
|
吉娜(Gina)
|
只有 C 通道的Mono文件
|
|
雅各布(Jacob)
|
只有 SL 通道的4.0文件
|

最后,我们导入了 2D 伴奏音轨和特殊芮妮塔(Renita)的音轨作为基底,这是对“舞台正面”的预留。
特殊芮妮塔(Renita)在游戏中被固定于墙上。我们希望她的音轨的 3D Spatialization 为 None ,但是启用Attenuation,以作为 2D 伴奏音轨的补充。所以 2D 伴奏音轨和特殊芮妮塔(Renita)的音轨共同占用了 FL 和 FR 通道,这也是上述其他角色被分别分配到了 C , SL , SR , BL 通道的原因。
(值得一提的是,我们其实也可以只使用一个 7.1 的 Music Track 去组织所有音频内容。但是由于我们需要在 Runtime 针对每个 Music Track 进行别的控制,所以分多个 Music Track 对于我们而言会更方便一些。)
Runtime 功能
-
我们在演员的基类上新增了MusicChannelMask 这一 VARIABLE。
将上述的通道配置填入了每个演员的子类中,例如芮妮塔(Renita)的配置就是 Ak Speaker Back Left。
-
我们新建了一个箱中剧院的音乐管理器,在其中处理所有音乐逻辑,并将其放置于 Level 中。
- 我们监听了每个演员的初始化和销毁,在其初始化和销毁的时候将其游戏实例传入和拿出管理器。
- 我们创建了一个定时器,每隔一段时间会获取管理器缓存的演员的所有位置和其
MusicChannelMask,调用 AK::SoundEngine::SetMultiplePositions。
- 而在演员被攻击静止和恢复时,我们会重新调用
AK::SoundEngine::SetMultiplePositions,以实现动态地拿掉和加回其 3D 音轨。
结语
传统的互动音乐更多是基于状态的反馈,通过音乐材料的横向纵向切换和 DSP 变化来服务于游戏叙事。而通过箱中剧院的实践,我们深刻体会到了空间化互动音乐可以在此基础上有更多的表达维度。我们在后续版本中也大量使用了这种设计,诸如 2.0 上线的蜗牛城,我们借空间化互动音乐,描绘出了一个热闹而富有层次变化的蜗牛城音乐文化。
而 Wwise 有着 SetMultiplePositions 对多点声源的优雅处理,将复杂的同步问题,化解为了 Wwise Authoring 中的简单配置和一行简单的 API Call,对于空间化互动音乐的设计来说是颇有裨益的。
评论