利用 Wwise 设计基于循环的汽车发动机声音 | 第 2 部分

游戏音频 / 声音设计

欢迎继续阅读本系列博文,了解如何在 Wwise 中配置和设计基于循环的汽车发动机声音。在第 1 部分中,我们介绍了声音设计所需的参数以及有关素材编辑的通用准则。如尚未阅读前文,请点击此处查看。

本文主要基于《Wreckfest》的官方发动机音频 Mod 包。这是一款由 Bugbear Entertainment 开发、由 THQ Nordic 发行的极限赛车游戏。 此 Mod 包中包含教程文档和 Wwise 示例工程。Bugbear Community 论坛的这篇帖子中附有下载链接。

如果是刚开始使用 Wwise,建议先查看所述 Mod 教程文档,学习 Wwise GUI 相关基础知识。藉此,各位至少可对 Wwise 设计工具有一些简单的了解。下面我们就来切入正题吧!

关于示例工程

在 Wwise 2019.2 中打开示例工程之后,不妨快速浏览一下其中都有哪些 Actor-Mixer 对象和 RTPC Game Sync。可以看到几乎每个对象都设有备注,里面描述了与其相关的功能及用法。

在工程中,可看到第 1 部分所述的关键发动机参数:

1. RTPC_Player_Example:此 RTPC 用于控制玩家车辆的转速(范围为实际 RPM 值域)。

2. RTPC_Player_Load:此 RTPC 用于控制发动机的工作负荷(范围为 0 ~ 1)。

3. RTPC_Player_Throttle:此 RTPC 用于控制玩家设定的油门大小(范围为 0 ~ 1)。

尤其对于 "Load" RTPC,按照《Wreckfest》中所用的参数范围,空载/怠速 Load 对应范围的中间值(即 0.5)。NPC 车辆也有与以上类似的 RTPC,只不过是将 AI_ 替换为了 Player_。

除此之外,该工程还配套提供有示例素材。这些素材由 Pole Position Production 录制和剪辑,专门用于阐释如何设计车辆音频并为《Wreckfest》构建音频 Mod。

工程中包含的所有内容均由 Creative Commons 授权个人使用,受 Attribution-NonCommercial-ShareAlike (By-NC-SA) 条款约束。

注意,需在 Steam 上抓取《Wreckfest》副本,才能在该游戏中试验自己的设计方案。

Screengrab in Wwise of the example project

对象设置概述

在 Wwise 中,要使用 Blend Container 构建基于循环的发动机声音。为此,需将声音对象添加到该 Container 内的 Blend Track 上藉此,基于 RPM 数据来定义各个子声音对象的播放顺序和时长。

总的来说,要完成发动机设计,还需执行以下操作:

1. 创建素材并将其导入来创建声音对象。

2. 配置要循环并追踪音高的声音对象。

3. 设置容纳 Blend Track 和声音对象的 Blend Container。

4. 配置相邻声音的播放范围和交叉淡变。

5. 定义 Blend Track 的 RTPC 自动化。

6. 检查整个 RPM 范围内各 Blend Track 之间音高调节的一致性(必要时实施调整)。

接下来,我们详细介绍一下如何完成以上各项操作。注意,以下所有截图均基于 Example Project 中 "Tutorial Engine" Work Unit 下的对象。在教程的实践部分,会用到此 Work Unit。

声音对象配置

先从 Imported Assets 文件夹说起。在此,我们已经创建有载和无载循环素材并将其导入到了 Wwise 设计工具中。后续只需选择文件夹中所要循环的对象即可。对此,可通过 Multi Editor 视图快速进行设置。

要想让这些声音对象的音高对游戏 RPM 模拟作出反应,我们需要在这两者之间建立自动化行为。为了方便自动配置一组声音对象(如发动机循环)的音高追踪,Wwise 配套提供了相应的工具来基于声音对象的给定 RTPC 参数范围和音高(空载 RPM)自动加以实现。

选中 Demo_Idle_1170 Sound SFX 对象,然后转到 Property Editor 的 RTPC 选项卡,先在 Y Axis 上添加 Voice Pitch,再在 X Axis 上添加 RTPC_Player_Example。接着在自动化曲线上任意位置右键单击,然后从上下文菜单中选择 Build Smart Pitch Curve。随后在此工具的设置方框中输入声音对象的数值 (1170),然后单击 OK。最终设置应如下图所示:

Screengrab in Wwise of the pitch curve

为了验证曲线的设置是否正确无误,可将 RTPC_Player_Example 标记移到 Y Axis 上的过零点。这时,其应当与声音对象的数值一致。倘若不一致,可再次运行 Build Smart Pitch Curve 工具并检查有无拼写错误。

在此之后,需针对所有声音重复执行相同的操作。不过,可采用稍微便捷一点的方式来做:首先复制粘贴刚才设置的 X-Y 映射,接着再次运行 Build Smart Pitch Curve 工具,然后将正确的值用于各个声音对象。

Blend Container 配置

为便捷起见,"Tutorial" Blend Container 对象预先配置了两条 Blend Track:分别用于有载和无载,均带有 RTPC 自动化映射。若要创建全新的 Container,需先添加设计所需数量的 Blend Track,然后指派并校准相关 RTPC 映射。

首先,需要在 Container 中添加子对象。为此,可通过按住 Shift + 单击来选中 Imported Assets 下的所有声音对象,然后通过按住 Ctrl + 单击拖动来将其拖到 Container 上。这样可以创建声音对象的副本。下图展示了与 Container 对应的 Contents Editor。在此,可指派刚才添加到相应 Blend Track 上的对象。

Gif of Wwise, assigning the objects into appropriate Blend Tracks

将文件拖到相应的 Blend Track(对象名称中带有 On 和 Off 字样)播放列表,并根据空载 RPM(怠速到全速)按升序顺序进行排序。列表顺序对应 Blend Track Editor 中对象的顺序(可通过拖放来调整顺序)。

注意,在创建新的 Blend Container 时,须考虑是将 Play Mode 设为 Step 还是 Continuous。鉴于我们的声音被设为了无限循环,在 Step 模式下运行发动机 Container 可能会导致工程的虚声部数量急剧增加,尤其是在包含大量子对象和多个 Container 副本在运行时实例化的情况下。

Blend Track 配置

接下来,我们转到 Blend Track Editor 视图。在此,可以看到无载和有载 Blend Track,其带有预定义自动化设置。视图中的方框代表放在各个 Blend Track 播放列表中的对象。注意,需专门为此启用 Crossfade 选项,并将其指派给 RTPC_Player_Example 音轨。

如果将 Blend Container 的 Play Mode 设为 Continuous,在模拟参数超出给定值域时,这些方框的边界会告知 Wwise 在哪里开始和停止播放各个声音对象。

如果对象方框之间有间隙,在 RTPC 值处于间隙之内时,将不会播放任何声音。这对某些应用情形来说非常有用。比如,只想在 RPM 范围中间而不想在顶端或底端播放某个声音对象。

先从 RPM 范围顶端的对象说起。首先移动并调节两条 Blend Track 上各个方框的大小,使其跟空载 RPM 范围大致对齐、跟相邻对象略有重叠。然后右键单击各个方框的左右边缘,并分别从上下文菜单选择 Sine (Constant Power Fade In)Sine (Constant Power Fade Out)

Gif in Wwise, crossfading in the Blend Track Editor

这种边缘交叉淡变用在这里可以说恰到好处。藉此,可让交叉淡变中点附近的音量电平保持恒定。除此之外,也可选用 Base 3S-Curve,其效果跟上述两条 Sine 曲线类似。在有些情况下,听起来甚至比 Sine 还要流畅。

在基于空载 RPM 调节对象并配置边缘淡变之后,我们需要对每一交叉淡变的宽度进行微调。为此,可设置所要播放的 Blend Container,然后将 RTPC_Player_Load 移到值 1 位置,并根据需要调节有载 Blend Track 由全速 RPM 到怠速 RPM 的宽度。

最终的交叉淡变越窄越好,但过渡和音高调节要流畅。避免声音对象超出空载 RPM 太多,确保相邻对象之间的音调平滑变化。

在此之后,将 RTPC_Player_Load 设为 0,然后再调节无载 Blend Track 由全速 RPM 到怠速 RPM 的宽度。最后,将刚才设置的 Blend Container 与 Engine Example Plr 进行对比。该 Blend Container 使用同样的循环,方便设计师参考在哪里放置子对象。

建议最好查看一下原始录音是否容许设计循环素材,确保有载和无载 Blend Track 的交叉淡变不会同时发生。这样可减少运行时的活跃声部数量,尤其是在生成很多对象实例的时候。

只要有多条 Blend Track 在同一 RPM 范围出现交叉淡变,就表示每个实例、每条 Blend Track 会运行两个活跃声部。对 "Tutorial" Container 来说,会运行四个活跃声部。同样的情况适用于可能添加到 Blend Container 的所有插件;它们在运行时也会针对每个子对象进行实例化。

Blend Track 的 RTPC 自动化

这部分的发动机设置最终取决于想要的发动机声音效果。对于刚构建的发动机设计,为了确保符合模拟行为,还需配置 Load 自动化,来控制有载和无载分层之间的过渡。

在 Mod 包内的教程文档中,查找“How Engine Load Works”章节,跟其中描述的行为进行对比,看看如何在三种 Load 状态之间配置 "Tutorial" Blend Container 的预定义 RTPC 自动化。我们没法直接将 Wwise 设计工具与《Wreckfest》的 Steam 构建版本关联,对此不妨参考所述章节来确定预先配置的自动化。

Voice Volume 自动化(基于 Load)的整体形状取决于当前的模拟设置,但总的来说要确保在空载 Load 值域附近对无载和有载 Blend Track 实施交叉淡变。

即便针对有载和无载行为基本设置好了整体形状,照样可微调音量电平和滤波的特定自动化关键点。下面我们就来针对示例发动机来对自动化设计进行简单的微调。

在将 RTPC 模拟值配置为空载 Load 和怠速 RPM 后,查看在 1000 ~ 2500 RPM 之间为有载 Blend Track 额外设置的 Voice Volume 自动化(如上图所示)。下面来听听效果如何:

首先基于 RPM 自动调节 Blend Track 的 High-Pass Filter,继而在无载处于怠速 RPM 的情况下,稍微融入一点有载循环中那种类似阀门咔嗒声的质感,同时确保低音频率部分不会拖泥带水。然后,试着在 1000 RPM(怠速)关键点位置增大有载自动化的音量,来使混音当中的咔嗒声质感更加明显,让汽车在怠速时听起来好像很破旧,甚至有点柴油发动机的味道。听起来就像下面这样:

再来试试将有载 High-Pass Filter 自动化复制到无载 Blend Track,继而从有载移除该自动化行为或将其改为控制 Low-Pass Filter。然后,试着在 1000 RPM 和空载 Load (0.5) 位置调节有载和无载音量之间的平衡。以下是包含有载低音频率的怠速音效(总体音量增大,顶端融合高通无载):

现在的怠速声音显得更加沉闷,甚至跟平常听到的都不太一样。有载循环成了混音中的主要元素,所以里面有种浓厚的排气管音色。因为要播放降调版本的循环,这种音色得到了进一步强化;怠速 RPM 模拟值处在 1000,而循环的空载 RPM 为 1670。

这种类似排气管的音色大概源自录音时采用近场话筒录制的排气管声音。大量的这种话筒分层随后被混音到了最终素材中。由此,我们得到了与游戏中跟随摄像机的视角相符的混音。因为现在将有载分层配置为了混音中的主要元素,所以在加入近场话筒排气管音色并实施降调之后,才生成了听起来有些不同寻常的发动机怠速音效。

这些都是只用简单的循环就能做出的设计选择。关键点调节可赋予汽车以与其外观匹配的特色。若幅度过大,可予以撤消。不过,调节自动化不必只是让汽车的声音听起来与众不同:就咔嗒声而言,也可依据汽车可能受到的损坏程度来增大其音量。然后,通过音调的变化来向玩家传达一些有意义的暗示(或增强玩家的沉浸感)。

值得一提的是,只需要进行一些简单的调节,汽车怠速声音就会大不一样,而无需进一步添加任何素材。

注意,若想让 RTPC 自动化只影响 Blend Track 上的某个子对象而非所有对象,则需直接针对特定的对象来配置此自动化行为。具体来说,就像之前添加基于空载 RPM 的音高追踪那样。

优化音高调节

在察看和配置导入的素材时,有时可能会发现 Blend Track 中的相邻对象之间出现轻微的失调,而只简单配置了原始音高追踪。

音高问题通常源自音高扁平化处理和 Hz-RPM 转换(第 1 部分中均有介绍)。如果在播放 Blend Track 时长时间停留在存在问题的交叉淡变上,可能会听到迥然不同的音调变化或者梳状滤波导致的低沉扫频音色。对此,可通过在与 Blend Container 对应的 Contents Editor 中调节 Voice Pitch 来加以解决。

音高的微调类似于之前对交叉淡变宽度的调节:逐个试听并拖动播放有载和无载分层,调节由全速 RPM 到怠速 RPM 的宽度。建议由全速 RPM 开始调节,因为范围顶端的发动机声音音调最易修正。

A screengrab in Wwise's Contents Editor

在整个微调过程中,最好时不时地在零载和满载之间反转 RTPC 模拟值,以此检查两条 Blend Track 之间的音高追踪是否保持一致。谐波频率之间的响度平衡会随着具体 RPM 范围变化(因录音而异),这种变化有时可能会导致不小心微调到错误的频率。

如需直观地了解这种平衡变化,不妨由全速 RPM 调到 3600 左右,来播放示例发动机声音,同时在零载和满载之间进行反转。在由全速 RPM 往下调到 3600 左右时,无载端与有载端的音调会大不相同,但在顶端两个无载素材之间交叉淡变的过程中仍能正确地追踪音高;在处于全速 RPM 时,两个分层之间的音调平衡非常接近。

结语

在完成以上所有操作后,就算大功告成了!无论对于宇宙飞船、汽车还是基于采样的乐器,我都希望此教程能激励各位尝试在 Wwise 中设计得当的音高追踪 Blend Container。

如果想亲自动手设计发动机声音,不妨前往官方 Wreckfest Discord 服务器的 Modding 频道。在此,可主动提议为汽车 Mod 开发者构建发动机声音来帮助其完善自身的设计。或者,也可在 Steam Community Workshop 提供的众多 Wreckfest 汽车 Mod 中选取一个来进行定制(在笔者撰文时已有 256 个)。

倘若对教程有任何疑问或意见,不妨在下面的评论区给我留言。或者,在 Wwise_Discord 服务器上呼我。如有谬误,欢迎赐教!

阿托•科伊维斯托 (Arto Koivisto)

音频设计师、作曲家

Bugbear Entertainment Oy

阿托•科伊维斯托 (Arto Koivisto)

音频设计师、作曲家

Bugbear Entertainment Oy

阿托•科伊维斯托 (Arto Koivisto) 是一名跨专业音频人才,对音效、音乐及相关原理有着浓厚的兴趣。阿托从 90 年代末开始创作音乐,并积累了丰富的声音设计经验。多年来,他参与制作过各种各样的项目;从为舞台表演、音像作品和电子游戏(如《AG Drive》)设计声音、创作音乐,到为录音棚调试设备、为现场演出实时混音,再到为音乐制作母带(作为小型独立唱片公司合伙人兼负责人),最后于 2013 年转向游戏音频设计。

http://elbowski.com

http://bit.ly/FU4-Elbowski

评论

留下回复

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

更多文章

在《NO MAN'S SKY(无人深空)》声音的背后:与Paul Weir关于程序性音频的问答

到底是什么创造了《No Man’s Sky》这样一个庞大游戏的声音?请在Anne-Sophie Mongeau与游戏音频主管Paul...

18.7.2017 - 作者:安-索菲.蒙古(ANNE-SOPHIE MONGEAU)

《Clocker》的声音设计 - Part 1

大家好,我是谭宇,来自一罐盐声音工作室(Salt Sound Studio)。下面将通过这篇博客跟大家分享一下我们的项目...

23.9.2019 - 作者:谭宇

《Clocker》的声音设计 - Part 2

请阅读第一部分。

7.10.2019 - 作者:谭宇

利用 Wwise 将两个 Audio Device 整合到 UE 游戏中

大家好,我叫埃德·卡辛斯基,是一名来自俄罗斯圣彼得堡的声音设计师和音乐家,目前在做一个非常有趣且重视声音表现的项目:这是一个名为《牧师与鬼驱人(Priest vs....

26.8.2020 - 作者:埃德·卡辛斯基 (Ed Kashinsky)

游戏音频存档 | 第 1 部分:基本情况

在电子游戏行业,音频的档案保存是件需要审慎处理的事情。无论是钟情于Demo...

9.11.2021 - 作者:范妮•雷比拉德 (Fanny Rebillard)

互动音乐:根据玩家在游戏中所做的选择播放不同的乐段

在 2018 年众筹成功之后,inXile Entertainment 开始全力制作《Wasteland 3》。尽管上一款游戏《Bard's Tale IV》的配乐赢得了一致好评,布莱恩•法戈...

1.12.2021 - 作者:亚历山大•布兰登 (Alexander Brandon)

更多文章

在《NO MAN'S SKY(无人深空)》声音的背后:与Paul Weir关于程序性音频的问答

到底是什么创造了《No Man’s Sky》这样一个庞大游戏的声音?请在Anne-Sophie Mongeau与游戏音频主管Paul...

《Clocker》的声音设计 - Part 1

大家好,我是谭宇,来自一罐盐声音工作室(Salt Sound Studio)。下面将通过这篇博客跟大家分享一下我们的项目...

《Clocker》的声音设计 - Part 2

请阅读第一部分。