在Wwise 2017.1中使用 全新3D总线构架:模拟一个音频监控系统

声音设计 / 空间音频

想象一下你正在开发一款具有音频监控系统的“秘密间谍”游戏:这个玩法系统能让你在世界中安插一个隐藏的麦克风。声音在窃听器或者虚拟麦克风的位置捕获并被无线传送到一辆监视车上。车里的玩家会实时听到被窃听房间内的动向。被麦克风捕获的声音会通过车内的“虚拟扬声器”播放。这个扬声器本身是一个虚拟世界中的空间化发声体—该音频的声音恰巧是关卡另一处发声音的混音。我们甚至futz效果应用于这个混音,以便通过扬声器来模仿信号的低保真传输和失真。

Wwise 2017.1引入这样的能力音频信号对任意数目3D声源输入进行混音,然后3D空间化。我们把这种“空间化子混音”叫做3D-Bus。本文将展示如何利用Wwise 2017.1中的3D总线来模拟游戏中的特定音频行为。我们选择了这个场景,因为它凸显了Wwise 2017.1设计工具和声音引擎中的几个新的特性和变更。在阅读后,您就能将这些概念应用于其他音频通路的场景,包括在文提到的那些。

1-UseCase_3dBus_v2.png

游戏对象

在示例中我们至少会注册4个游戏对象,在Wwise 2017.1中,听者也是游戏对象,而游戏对象可以既是听者也是发声体

  • 玩家听者(player listener):这一游戏对象代表角色耳朵角色聆听游戏中的音频。在示例中,这就是在车里听着实时监控的角色。
  • 环境声发声体(environmental sound emitter):在游戏中发出声音的对象。也许是一个敌人角色,或者其它对于我们秘密监小队有用的发声对象。实际上,您的游戏中会有很多这样的对象一起组成一个丰富的环境,但在我们的示例中,简便起见只有一个对象
  • 麦克风(microphone)这一对象代表放置的隐藏麦克风也就是那个“窃听器”。这一对象的放置很重要,因为只有在听觉范围内(由它们在Actor-Mixer Hierarchy中的衰减曲线决定)的发对象才能被“收录”,并对麦克风来说是有声音的。
  • 扬声器(loudspeaker)发出音频(由麦克风捕获)的空间化混音的发声游戏对象。扬声器的位置代表着声音被转接传输的点。在我们的示例中,扬声器是在一个离原始声源很远的监视车里。但是,如果它离原始声源足够近,则玩家听者能同时听到扬声器和原始声源混音

听者-发声体关联

听者发声体关联是通过使用SetListenerSetGameObjectAuxSendValues API 在代码中定义的。它们定义了游戏对象间的关系;也就是,哪个游戏对象会监听其它哪个游戏对象。在Wwise 中,区分发声体和听者游戏对象的唯一方法就是用听者-发声体关联,这个关联是用API在它们之间定义的。

在我们的示例中我们定义以下的关联

  • 环境声发声体扬声器的听者是玩家听者
  • 麦克风的听者是扬声器
  • 环境声发声体 的听者是麦克风, 这个指派是使用SetGameObjectAuxSendValues API进行的。我们把它设置为一个“辅助发送”听者,这样我们就能Wwise 工程中专门指定一条总线来在Wwise Authoring工具中为麦克风的行为建模

您可以通过检查Advanced Profiler中的Emitter-Listener 选项卡来确认您的发声体听者关联设置正确 请注意Environmetal_Sound_Emitter 条目听者为麦克风)表明了它是向麦克风总线发送的并且通路类型为“游戏定义”。“游戏定义”的通路类型是指发声体-听者关联和输出总线是使用游戏定义发送API来确定的。而另一方面,“用户定义”的通路类型指的是输出总线是由Wwise工程(在Master-Mixer Hierarchy中,输出总线是父级总线,而在Actor Mixer Hierarchy中,输出总线在General Setting选项卡里) 定义的。如果通路类型是“用户定义”,则Bus栏将会是空的,因为一个已知名称的对象有可能有任意数量的声部或总线,其中每一个都有工程(换句话说,就是用户)定义的独特输出总线。与“用户定义”通路类型相关联的听者游戏对象是由SetListeners API建立的——Wwise工程中无法建立发声体-听者关联。

2-image2017-5-19_9-44-45.png

 

设置Wwise 工程

Wwise工程中的Actor-Mixer HierarchyMaster-Mixer Hierarchy作为运行时创建的声部管线的模板Wwise 2017.1, 声音引擎中的总线实例始终关联游戏对象但是工程中定义的通路也依然遵守我们会特别注意Enable Positioning复选框——这决定了父级或者输出总线是在同一游戏对象还是在不同的游戏对象上生成由被指派的听者确定

  • 首先我们为扬声器创建一条总线并将其设置为Enable Positioning。这会让Loudspeaker总线的实例在3D空间中拥有独特的位置,该位置由扬声器游戏对象定义。此外,勾选Enable Positioning会让声音引擎将总线连接到每个关联听者的父级总线一个独特实例上在我们的示例中,扬声器游戏对象有一个听者也就是玩家听者 Loudspeaker总线的父级总线就是Master Audio Bus在运行时Loudspeaker总线的一个实例扬声器游戏对象上生成时会连接到玩家听者游戏对象上Master Audio Bus的一个实例上去
  • Loudspeaker总线上我们要将定位类型设为3D这会让Wwise相对于下游游戏对象玩家听者 Loudspeaker总线的输出进行空间化我们要创建并指派一个“扬声器”衰减来定义扬声器传播声音能传多远 Loudspeaker总线上的定位选项卡应该最终看起来是这样
3-image2017-5-19_9-37-19.png
  • 为了让街道效果更逼真我们可以在Loudspeaker总线上添加一个Wwise Guitar Distortion Effect来模拟由麦克风和扬声器引起的信号丢失和失真。该Effect的具体设置就作为练习留给读者,或者是读者的天才声音设计师朋友吧。

4-image2017-5-19_9-37-46.png

  • 为了模拟麦克风我们创建了一 Auxiliary Bus它是Loudspeaker总线的子级总线我们使用辅助总线这样我们就能将其指派为一个游戏定义发送的目标这个发送是在所有麦克风能接收到的游戏对象上的包括之前提到过的环境声发声体总线的层级应该看起来是这样

5-image2017-5-19_9-37-57.png

    • Microphone辅助总线我们也必须勾选Enable Positioning复选框但是我们会把定位设为2D我们勾选Enable Positioning是因为我们想让Microphone总线实例在一个特定游戏对象(也叫麦克风上生成这个游戏对象在3D空间中的位置和下游游戏对象扬声器是不一样的Enable Positioning这个小小的复选框非常重要!它会告诉Wwise下游总线Loudspeaker应该生成在另一个游戏对象(也叫扬声器

    • 我们把定位类型设为2D是因为我们不想让Microphone 总线相对于扬声器进行空间化。在示例中,我们在模拟麦克风和扬声器之间的电信号而不是物理振动——我们不希望麦克风和扬声器间的距离和相对位置影响到声音的声像摆位和衰减。该总线不使用衰减

6-image2017-5-19_9-38-12.png

  • Actor-Mixer Hierarchy我们需要至少一个能被麦克风收录并被扬声器重新发出的声音我们创建了一个Actor-Mixer对象这样它所有的子对象都能共享一样的属性

7-image2017-5-19_9-38-35.png

  • 这里唯一要注意的事就是我们必须勾选Use game-defined auxiliary sends使用游戏定义的辅助发送)复选框这让我们能使用辅助发送API在游戏代码中定义对麦克风游戏对象的通路和辅助总线

  • 环境声对象的 Positioning 选项卡我们要确保Enable Positioning勾选并且定位类型设置为3D  这样声音放置在世界中就会使用游戏对象的位置并且能确保输出相对于听者的位置进行了空间化在我们的示例中 Event环境声发声体游戏对象上发送,该对象的听者通过辅助发送的麦克风,以及通过输出总线的玩家听

8-image2017-5-19_9-38-53.png

A设置Events建立SoundBanks并在游戏中发布Event之后我们可以通过检查Voice Graph(声部图)来确认我们的通路是正确的:

9-image2017-5-19_9-41-0-1.png

Wwise 2017.1Voice Graph排除通路故障的强大工具为了强调关联,游戏对象现在由包含声音和总线对象的大方框表示。可以看到在示例中我们有一个 Environmental_Sound’在“Environmental_Sound_Emitter”游戏对象上进行播放。我们有一条辅助总线“Microphone”正在一个同名对象上播放,还有一个 Loudspeaker”总线也正在同名游戏对象上播放。在链图末尾,有一个“Player_Listener”游戏对象,它有一Master Audio Bus的实例

最终在游戏中的音频效果取决于4个游戏对象的位置以及在这些游戏对象上播放声音或混音时,为这些声音所定义的衰减。而且结果的确是契合我们对于这个场景的直觉期望的——如果玩家听扬声器很近,它们就会听到被混音进麦克风的声音如果玩家听者环境声发声体很近它们会直接听到这个声音最后麦克风 必须足够接近境声发声体才能将发声体的声音收录进来

总的来说我在结尾会再留给大家Wwise 2017.1中新3D总线的几个可能的用法。我也想挑战一下大家,让大家应用在这篇文章中学到的知识来在自己的游戏中创建这些场景。

 

声学门户

您正在制作虚拟现实游戏这种游戏非常强调空间化音频其中非常重要的一点就是真实可信地模拟声学现象以便维持住玩家的幻想您可能希望听者能听见相邻房间传来的带有混响的声音所有房间内的声音需要被混音在一起,进入一个混响单元,然后该特效的输出将进行空间化,并且它的位置就像是从门廊中传出一样。Wwise中新的3D Bus架构让这成为了可能。

 

早期反射和其他特效

有时候,为每个声部分别应用一个Effect工作量太大,但是将其作为共享总线上的一个发送Effect却又过于宽泛,没有什么用。您真正想要做的其实是为每个发声体游戏对象创建一个总线的实例,然后在实例上应用Effect空间化可以在子混音的下游做,但如果您有意用插件来做空间化的话,也可以不这样进行。Wwise Reflect就是采用一策略,利用Wwise中的3D总线架构来为每个发声体生成一组独特的早期反射。这些早期反射是在Reflect插件内相对于听者的位置进行空间化的。

 

聚集声音以减少开销

有这么一个车辆 它是由很多种零部件的声音构成由一个复杂的RTPC系统驱动这些部件位于车辆的不同位置所以您就为每个发声体使用独立的游戏对象。但是,为每个发声体应用Effects并进行空间化的性能开销太大,所以最好是在听者足够接近的时候才这么做。如果听者足够远,以至于分辨不出微妙的角度差别,您就最好先将所有声音混音,然后再对整个声音组进行处理和空间化。Wwise中的3D总线架构让这种灵活处理成为了可能。

 

Subscribe

内森 哈里斯(NATHAN HARRIS)

软件工程师,R&D

Audiokinetic

内森 哈里斯(NATHAN HARRIS)

软件工程师,R&D

Audiokinetic

内森.哈里斯在2012年搬家到蒙特利尔追寻自己的梦想:为Audiokinetic开发可以被部署到全球数百个游戏中的尖端技术。作为之前的Wwise 高级用户和爱好者,内森现在在研究与技术团队工作,是一位空间音频和软件架构专家。内森拥有巴西柔术黑带段位,而当他没有在练习柔术或者为未来的沉浸式游戏解决难题时,也很享受使用DIY的小工具来酿造啤酒、烘焙咖啡。

 @spcmn_spiff

评论

留下回复

您的电子邮件地址将不会被公布。

更多文章

游戏和影视行业在音频制作上的一些区别 – 第 1 部分

如果你是一名影视行业的音频工作者,那你有没有想过换作游戏行业会是什么样?当然,这个问题也可以反过来问。在过去 10...

21.7.2020 - 作者:杰斯帕.安卡菲尔德(JESPER ANKARFELDT)

游戏和影视行业在音频制作上的一些区别 – 第 2 部分

在本文第 1...

10.8.2020 - 作者:杰斯帕.安卡菲尔德(JESPER ANKARFELDT)

Wwise 中针对 Spatial Audio 所作的改进 – 第 2 部分:衍射

Wwise 中针对 Spatial Audio 所作的改进 – 第 1 部分:距离建模和早期反射...

10.6.2021 - 作者:路易斯-扎维尔·布法尼 (Louis-Xavier Buffoni)

以REV2为基础制作赛车引擎声

前言 汽车引擎声一直是游戏声音设计工作中难度比较大的部分,难度主要来自以下几个方面:...

13.10.2021 - 作者:徐巍

利用Wwise的基础功能构建空间音频效果

各位同行老师朋友大家好,我是JYUN,给大家拜个晚年。

2.3.2022 - 作者:谢玮

Wwise Tour 2022 中国 - 视频回放

《哈利波特: 魔法觉醒-魔法世界的风格化音频设计》 《哈利波特:...

9.12.2022 - 作者:Audiokinetic (音频动能)

更多文章

游戏和影视行业在音频制作上的一些区别 – 第 1 部分

如果你是一名影视行业的音频工作者,那你有没有想过换作游戏行业会是什么样?当然,这个问题也可以反过来问。在过去 10...

游戏和影视行业在音频制作上的一些区别 – 第 2 部分

在本文第 1...

Wwise 中针对 Spatial Audio 所作的改进 – 第 2 部分:衍射

Wwise 中针对 Spatial Audio 所作的改进 – 第 1 部分:距离建模和早期反射...