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

游戏音频 / 空间音频

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

对于部分3D游戏类型(如射击、赛车和开放世界等),空间音频属于较为刚需的内容。但由于不同项目的开发环境、开发周期和游戏引擎等有所不同,这些变量造就了不同的空间音频解决方案。即使空间音频遵循的原理是一样的,但实现方式却有不同。

最近梳理了一些关于空间音频的有趣内容,是我在开发一款PCFPS游戏的过程中,利用Wwise基础功能构建的一套简易空间音频系统。这套解决方案可以给予玩家一定的空间反馈,且这款游戏也在Steam取得了一定成绩,其可行性是可验证的。利用这套系统,可以在不购买第三方插件的情况下,在Wwise中实现部分空间音频效果。

这套系统中包含空间音频的3个基本组成部分,分别是3D定位、早期反射和混响。这3个部分是互相解耦的,所以具备一定的可复用性。下面将这3个部分分模块进行整理,在总结部分也会讨论这套方案的缺陷和拓展性。

(文本内容基于个人经验和理解,仅供参考)

本文共分为3个模块:

  • 基于RTPC3D定位效果(RTPC-Based 3D Positioning
  • 低消耗的早期反射效果(Low-Cost Early Reflection
  • 自适应混响(Adaptive Reverb

模块1:基于RTPC3D定位效果(RTPC-Based 3D Positioning

【需求】

首先解决疑问:为什么不直接用Wwise中间件的Positioning功能?为什么要用RTPC来营造3D定位效果?

在我参与这个游戏项目的音频开发时,确定了使用Wwise 2017作为音频引擎版本。这个项目的音效在制作时是以立体声素材为基础的。立体声素材经过Wwise的Positioning渲染之后,听感会发生微妙的变化,这导致某些“大体积”音效(如BOSS的攻击等)的宽度和临场感会与我们设计师的意图出现细微出入。

其次,Wwise自带的Positioning功能,在总线为stereo总线的情况下,位于Listener前后方、上下方的声音不会有差异性。想要获得binaural-like3D定位效果,需要结合Wwise自带的Positioning功能和多声道总线(如7.1等),再通过Auro-Headphone之类的双耳效应插件,将多声道的声音渲染成立体声。但就必须要购买三方插件(Auro-Headphone或同类插件)了。

基于以上条件,我们希望“释放stereo素材本身的魅力”以及“还原人耳对于声音定位的听觉习惯”,所以当时的决策是通过RTPC构建一个基本的3D定位效果,再验证其可行性。

【原理】

经过一定调研发现,随着音源和人头的夹角发生变化,声音的音色也会有所变化。比如当音源处于人头的后方时,由于耳廓阻挡了部分频段,声音会变得更“闷”。

其次,音源和人头的夹角变化,也会使声音到达2只耳朵的时间有所不同。比如当音源处于人头的正前/正后方,理论上声音可以同时到达双耳;但如果音源偏离,声音到达两只耳朵时就具有了时间差(相位差)。

并且,音源和人头的夹角变化之后,音源离两只耳朵的距离不一样,也会导致双耳接收到的声音有一定的音量差。

以上是属于HRTF和双耳效应(Binaural Effect)相关的讯息,可以在下列链接中查看详情:

Head-related transfer function - Wikipedia

双耳效应_百度百科

在实践中发现,当音源的空间信息变化时,引入少量的音高(Pitch)变化,所带来的空间感知会更明显更有效。

结合以上信息,当使用RTPC构建3D定位时,需要注意实现以下功能:

  • 发声体与监听者的距离产生变化时,会带来音量、频响和音高的变化;
  • 发声体与监听者的水平夹角产生变化时,会带来左右声道的音量、频响、音高和时间差的变化;
  • 发声体与监听者的垂直夹角产生变化时,会带来频响的变化(本文未展示)

基于以上要求,可以推导出所需的调制源为:DistanceAzimuthElevation结合Aux Bus2D pannerWwise DelayWwise EQ等,以及容器上的FilterMakeup Gain等参数,便可以粗略地还原出双耳效应。

【操作篇】

1. 总线设置

image001

如上图,首先建立13D音效总线(此处命名为9_sfx_3dframe),并将Channel Configuration设定为2.0

image002

在该音效总线下建立12D总线和13D总线(这2条总线的Channel Configuration跟随父级即可)。

3D总线下方建立4Aux Bus,分别用于表现左直达声、右直达声、左延迟声、右延迟声(此处的直达和延迟不是指混响或延迟效果器中的参数,而是双耳效应中直达耳朵和延迟到达耳朵的声音)。这4条总线的Channel Configuration跟随父级即可,并用Speaker Panning,将这4Aux Bus分别pan到极左、极右、极左、极右(下图以左延迟声为例):

image003

在左右延迟声通道中,插入Wwise DelayEQ,参数如下图所示:

image004

image006

这里值得一提的是Delay Time的设置:根据双耳效应,两只耳朵间的距离所能造成的声音的时间差应该是1ms之内;根据哈斯效应,50ms以上的时间差又会被感知成2个声音。最终根据实测,Delay Time设置为20ms时,双耳时间差的感知效果较为显著。这是根据在实际体验而非物理学所设定的非严谨参数。

此外,在EQ中用高频搁架削减了2khz以上的声音,因为同一个声音中的各个频段绕过头部的能力各不相同,频率越高的能量,被人头衰减就越大。所以高频声音被削掉,中低频保留。

最后在需要应用3D定位的容器上,按下图发送Output BusAux Sends。如果是同一个游戏单位的音效,也可以在Actor-Mixer上做这一步:

image008

至此,总线设置完毕。

2. 容器及RTPC设置

由于这个Demo已经在Actor-Mixer上设置好路由了,所以无需再设置路由。Positioning页面也无需特殊设置,注意不要打开额外的Positioning功能即可:

image010

RTPC界面,需要设置11RTPC来还原水平面上的3D定位效果:

image011

接下来将单独分析每一条RTPC的作用,首先是距离相关的参数:

1. 距离控制音量(Object越远,音量越低),这里选择控制Make Up Gain。这个选择和Wwise的容器通路相关,如果Make Up Gain降低了,Output BusAux Send的发送电平也会相应降低

image013
2. 距离控制低切(Object越远,低频保留越少)

image015
3. 距离控制高切(Object越远,高频保留越少)

image017
4. 距离控制音高(Object越远,音高逐渐下降,最多下降50音分)

image019

以上是距离控制的参数。由于不同游戏的视角、视野大小、模型大小、场景大小都不同,所以距离变化所带来的音画感知也不同。举个例子,下图两张灭霸,同样的方向和模型大小,离美队的距离也是一样,但由于镜头大小不同,很可能会造成不一样的声音期待:

image021

image023

所以需要根据游戏表现来调整上述参数,直到找到最合适的参数。

接下来分析角度相关的参数。这是一个由立体声总线和3D单声道总线组成的系统,先默认:

1. 当发声体处于监听者的正前/正后方时,应该听到仅立体声总线的信号;

2. 当发声体处于监听者的正左/正右方时,立体声总线的信号消失,仅听到由一边直达声和另一边延迟声所组成的立体声信号,从而增强极左极右的听觉效果;

3. 当发声体处于监听者的其他方向时,应该听到由立体声总线、一边直达声和另一边延迟声所组成的立体声信号。并且通过这3种信号的配比和调制,达成3D效果。为了达成这个目标,需要以下RTPC

  • 角度控制2D Bus发送量

image025

  • 角度控制直达声的发送量

image027

image029

  • 角度控制延迟声的发送量

image031

image033

  • 角度控制高切

image035

  • 角度控制音高(正前方-100音分,正后方-150音分)

image037

【效果展示】:

(国内观赏视频通道

模块2:早期反射(Early Reflection

【需求篇】

在空间音频系统中,早反射不仅反馈定位信息,也反馈空间材质信息。在2017年之前,Wwise Reflect还没有推出。实际上Overwatch于16年的Wwise Tour就提到,使用RTPC控制Quadra-Delay效果器,可以塑造精确的早反射效果。

分析Overwatch的实现方式,可以发现早反射的基本要求为:

  • 应该给予玩家周围反射体的距离信息,即早反射应随玩家与反射体间的距离变化而变化;
  • 应该给予玩家周围反射体的材质信息,即早反射应随反射体的材质变化而变化。

Wwise DelayWwise Guitar Distortion这两款插件提供了巨大潜力,尽管Wwise DelayDelay Time是无法通过RTPC来控制,但靠这两款插件配合,能达到一定的早反射效果。

基于立体声开发的前提,在游戏引擎端需要以监听者为中心收集两侧反射面的距离和材质信息。可以以监听者为中心,向两侧发射射线,这样做可达到上述要求,尽管结果并不是最精确的。为了结果精度更高,可以多加一条向上的射线,来判断上方反射面的距离和材质。将射线的判断结果发送给Wwise即可。

【原理及操作篇】

Wwise端,先建立以下6条参数,分别是:左侧反射面距离、右侧反射面距离、上方反射面距离、左侧反射面材质、右侧反射面材质和上方反射面材质。

image039

在定义材质参数之前,需要先了解吸音系数的概念(Noise reduction coefficient - Wikipedia)。吸音系数是一个0.0~1.0之间的数值,来概括某种材质对于某个频段声音的吸收效果,数值为0时表示完全不吸收该频段,数值为1时表示完全吸收该频段声音。以下是常见材质的吸音系数(数据来源:An introduction to reverberation and absorption | Troldtekt):

00

从上表可看出:硬质材料吸音系数都偏低,所以早反射的音染较少;而软质材料则普遍具有更高的吸音系数(尤其是中频和高频),所以早反射的声音会包含更少的中频和高频。这个结论符合日常生活中的空间感知,可以以此为出发点,设置反射面材质的参数。

此处选择将材质参数范围设置到0~10,其中0为无材质(反射最模糊的声音),10为最硬材质(反射最保真的声音),即数值越高,吸音系数越低。但由于这个游戏项目中并没有太多不同类型的材质,所以最终定义如下(0=默认材质(无材质或肉体),1=水面,沙面=2,树木=3,木块=4,石块=5,金属=6):

image040

设置好参数后,按如下方式设置效果轨道:

image042

其中SASpatial Audio(空间音频)的效果母线,SA_receive用于接收需要空间音频渲染的声音讯号,但该Bus本身不发声(Output Bus Volume拉到最低,并且在Aux Sends中发送到SA_reflection):

image043

SA_reflection本身也不发声,但通过Aux Sends发送到SA_reflection_LSA_reflection_R,并通过反射面距离RTPC控制发送量:

image045

image047

(上图展示左反射面距离RTPC,右反射面的曲线一样,只是Y轴换成Aux Send Volume 1,如图)

至此,总线设置完毕。

接着在SA_reflection_LSA_reflection_R上依次插入Wwise DelayWwise Guitar Distortion

image049

Wwise Delay参数如下,由于Delay Time不可控制,所以选择了60ms

image050

对于早反射的音色控制,主要来自于Wwise Guitar Distortion。通过对增益度(Drive)、音色(Tone)和干湿比(Wet/Dry Mix)的控制达到音色塑形的效果:

image051

3RTPC控制Wwise Guitar Distortion的音色,从而控制早反射的音色。其中用反射面距离控制干湿比,达到“距离越远,早反射声越模糊”的效果:

image052

反射面材质控制增益度和音色,达到“反射面越硬,早反射声越还原;反射面越远,早反射声更失真“的效果:

image054

image056

最后,在SA_reflection_LSA_reflection_R上将Speaker Panning设置成Balance-Fade,并且配置RTPC,用两侧反射面和上方反射面的距离控制Speaker Paning(下图以SA_reflection_L为例。左侧反射面距离越远,声音越偏左,反之亦然;上方反射面距离越近,声音越居中,反之亦然):

image058

image060

【效果展示】:

(国内观赏视频通道

模块3:自适应混响(Adaptive Reverb

【需求及原理篇】

Wwise的Unity/Unreal集成中提供了与空间音频实现相关的组件,例如ak room组件可以方便地在引擎中控制发送式混响,使混响和场景空间匹配。但在项目不使用Audiokinetic空间音频相关的集成组件,也不愿购买第三方插件和IR(脉冲响应文件)的情况下,实现良好的户外的混响表现是有一定难度的,尽管利用Wwise Reverb实现户内混响还是完全可行的。设计的难点在于游戏的美术风格、视野大小和视野方向等元素都影响着玩家对于混响声的期待和感知:对于某些美术风格而言,更写实的混响声并不一定适合。所以在混响的塑造上,有时候艺术要求是高于拟真要求的。

James TraerJosh H. McDermott的论文《Statistics of natural reverberation enable perceptual separation of sound and space》中提到,不同的空间由于具有不同的材料和几何形状等,导致混响在各个频段上具有不同的消逝时间,这种特异性构成了空间的Decay Mode。人耳主要通过Decay Mode来分辨各种不同的空间。在这篇论文中,作者还测量了许多日常生活场景的Decay Mode,并提供了部分图示。

所以在塑造游戏混响时,实际上是塑造空间的差异化Decay Mode。如果熟悉FabFilterPro-R这款混响器,会知道这款插件的强大在于各个频段都可以设定混响量和消逝时间:

1-2

Wwise自带的两款混响器都不具备这么细致的参数,所以需要利用Wwise EQ进行分频。Wwise Matrix Reverb则具有可被RTPC控制的Decay Time,所需的工具是充分的。

在游戏引擎中,可以通过配置空间的大小(体积)和材质信息,监听者进入空间时,就将信息传送给Wwise,用于控制混响的效果。

【操作篇】

Wwise端,首先建立5Aux Bus(如下图):

image064

SA_reverb:用于接收和发送需要混响渲染的声音信号,本身是不发声的。在本工程中,SA_reverb的信号来自于SA_receive。通过控制4Aux Sends的发送量,来控制不同频段的混响发送:

image065

至此,总线设置完毕。

SArvb1~4则分别进行4个频段的混响处理,分别是:0-250hz250-2khz2khz-6khz6khz以上。在这4Aux Bus中都插入Wwise Matrix ReverbWwise EQ

image067

Wwise EQ中,对应各个轨道名来设置截频点(下图以0-250hz为例):

image068

Wwise Matrix Reverb中,通过控制Reverb Time来控制各个频段的Decay Time,从而构成差异化的Decay Mode

image070

上文提到的控制方式大部分是选择RTPC,因为RTPC是连续型的控制方式。但混响的控制不需要连续控制,所以可以用State,以步进的方式来控制不同频段的混响发送量。先设置1State(包含3个小房间、大房间、户外):

image072

但由于Wwise Matrix ReverbReverb Time只能通过RTPC控制,所以也需要建立相应的实时参数(但最终依然可以通过Event同时控制StateRTPC,实现步进式的控制)。这里只建立了空间容积参数(room_volume),因为在本项目中复用了上文提到的反射面材质参数(但为了功能间解耦合,最好是建立混响功能专用的参数):

image073

【效果展示】:

(国内观赏视频通道

总结:

以上是这套空间音频系统的全部内容,利用这套系统可以较低成本地实现空间音频的3个基本要素,但使用中也需要注意这套解决方案的缺陷:

  1. 使用RTPC构建3D定位是具有一定消耗的,实测10个同一音效的消耗会比Wwise 3D1%~3%;并且这个方案是为立体声耳机服务的,如果游戏需要输出给环绕声喇叭或立体声喇叭,这套RTPC定位方式就不起作用;

  2. 利用射线实现早反射时,由于单条射线判定的结果存在偏差或模糊的情况,如果需要实现更高精度的反射面判定,需要更好的判定方式,或直接用Wwise Reflect

  3. 同时使用数个Wwise Matrix Reverb会带来较高的性能消耗。

同时,这套解决方案也具备一定扩展性,根据项目可以进行颗粒度的调整。比如在3D定位中,如果对仰角有需求,可以引入Elevation RTPC;如果在早反射模块需要实现更高精度,也可以增加专属于各个不同方向的早反射轨道,只要增加控制的RTPC即可;如果需要在混响上争取更低的性能消耗,可以把数个Wwise Matrix Reverb换成Wwise RoomVerb,或直接减少混响的分频数量,通过减少同时存在的混响器从而争取更好的性能表现。

尽管如此,Wwise官方提供的有关空间音频的组件及插件依然具有强大竞争力,比如在3D定位的实现上,可以兼容立体声喇叭、耳机和环绕声喇叭等设备。

本文基于个人的项目经验及对声音设计的理解,讨论了空间音频的实现思路。一家之言,姑妄论之,不足为训,旨在抛砖引玉,如果对读者有些许帮助,实属我的荣幸。

Wwise的存在使我的很多思路能够落地,未来我也会更深入地学习音频设计的技术和艺术,也希望有更多机会和同行老师朋友多做交流。

谢玮

游戏声音设计

灵犀互娱

谢玮

游戏声音设计

灵犀互娱

热爱游戏、影视、动漫和音乐,Progressive Fusion和Djent爱好者。致力于“恰到好处、不偏不倚”的声音设计。

评论

liyuxinxinba li

February 08, 2023 at 02:41 am

大佬!

JI ZHE LIN

August 25, 2023 at 03:24 am

好细节

熠 克

September 20, 2023 at 03:09 am

太细节了。

留下回复

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

更多文章

《Aporia: Beyond the Valley》——制作幽灵的声音

14.8.2018 - 作者:特罗尔斯.尼加德(TROELS NYGAARD)

《除夕:双鱼玉佩》(Immortal Legacy: The Jade Cipher)音频设计 – 第 1 部分

大家好,我是刘海宜(Eddy...

13.5.2019 - 作者:刘海宜

我如何在 12 天内运用 Wwise 和 Unity 完成互动拟音设计

每次单击鼠标都会生成具有不同外形、姿态和构成的行走角色,这对拟音师来说既是求之不得的机会又是困难重重的挑战。 不管怎么说,接了活总得做。之前,本杰明·维德恩 (Benjamin Vedrenne)...

9.12.2019 - 作者:皮埃尔·玛丽·布莱恩德(Pierre-Marie Blind)

游戏声音工作原理与优化的经验分享

前言 我是一名在心动网络从事音频相关工作的技术人员,有的人称我们为音频程序员,有的人称我们为技术音频,也有的称我们为TA(Tech...

2.12.2020 - 作者:吴明辉

游戏项目方如何与游戏音频外包方合作

8.9.2022 - 作者:胡正伟

Wwise Tour 2022 中国 - 视频回放

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

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

更多文章

《Aporia: Beyond the Valley》——制作幽灵的声音

《除夕:双鱼玉佩》(Immortal Legacy: The Jade Cipher)音频设计 – 第 1 部分

大家好,我是刘海宜(Eddy...

我如何在 12 天内运用 Wwise 和 Unity 完成互动拟音设计

每次单击鼠标都会生成具有不同外形、姿态和构成的行走角色,这对拟音师来说既是求之不得的机会又是困难重重的挑战。 不管怎么说,接了活总得做。之前,本杰明·维德恩 (Benjamin Vedrenne)...