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

游戏音频 / 声音设计

在本系列博文中,我们将介绍如何利用 Wwise 设计基于循环的汽车发动机声音(文中配有相关音频示例,及有关汽车的基础知识)。 

对汽车不熟悉没关系,其中的原理是相通的。虽是围绕内燃机 (I.C.E.) 展开探讨,但工作流程适用于所有同类设计。具体来说,就是要统一追踪采样素材的音高,并利用游戏参数对音高加以控制。说白了,其实就是个复杂的大型管乐器,背后原理无非空气的进出而已。

如果是刚开始接触汽车声音设计,或者想了解如何在 Wwise 设计工具中采用这种传统方式构建游戏内的汽车发动机声音,那么我接下来要分享的内容绝对值得一看!

在本系列博文的第 1 部分,我们将着重阐释有关发动机模拟的重要概念、声音设计所需的参数及其作用机制,最后深入了解在为此创建循环素材时都有哪些特别的注意事项。

本文中的截图基于《Wreckfest》中所用的原始录音或游戏素材。这是一款由 Bugbear Entertainment 开发、由 THQ Nordic 发行的极限赛车游戏。 

为何选择循环?

只要对游戏中的汽车音频设计有那么一点了解,估计都会想到粒子合成及其在品质上的优越性。那么,既然有更好的方案,干嘛要选择循环呢?

虽然粒子合成通常设置起来比较轻松且效果比循环更好,但其并不适合作为独立解决方案来实现精妙的声音细节。

在处理成本优先于保真度或声音再现品质的情况下,有时要对复杂的粒子合成设计进行简化以优化性能。比如,在由主机向移动设备做跨平台设计的时候。另外,在没必要运行粒子合成插件实例时,可能想在特定参数值域内增添一些变化。或者可能预算有限、不能每款第三方工具都授权,抑或没有现成的编程人员为项目开发自定义工具。

不管是基于循环、粒子合成还是其他什么,都有用到这些工具的地方。作为声音设计师,我们的任务就是确定哪些工具最为实用。

当然,只有手法相得益彰才有可能成就绝佳的设计方案。

主要发动机参数

在配置发动机设计之前,我们需要对 I.C.E. 如何借助动力传动系统驱动汽车前进有一个总体的了解,并明确发动机模拟所需的关键参数及其作用机制。

在 Wwise 中,这些参数被设为了与游戏端相应物理模拟数据关联的 RTPC。其中包括:

1. RPM(转速):表示发动机运转速度;

2. Load(负荷):表示发动机做功状态和工作负荷;

3. Throttle(油门):表示用于调节发动机工作负荷的用户输入。

油门主要控制进入发动机的油气混合物的比例和数量。对于复杂的发动机模拟,可能需要更多参数。不过,以上三个参数足以模拟基本的发动机声音行为。

接下来,我们说下 RPM 和 Load 的作用机制。如果对这些已经很熟悉,不妨跳到素材创建部分。

RPM 设置

RPM 是 Revolutions Per Minute(每分钟转数)的缩写,表示发动机曲轴在一分钟内转动多少个整圈(前提是 RPM 保持稳定)。对于配备四冲程发动机的普通家用汽车,其实际 RPM 范围可能在 900 ~ 6000 之间。

该范围的上限(通常称为全速)定义特定型号的发动机在保证部件不受损坏情况下的最高转速。大多 I.C.E. 都配有某种转速限制器,它可以将 RPM 控制在全速值以下,而不管 Load 和 Throttle 配置如何。

注意,如果游戏引擎馈送给 Wwise 的 RTPC 值超出 Authoring 对象的最小-最大限值,有可能会导致发动机声音停止播放。不过,Wwise 对象并不会对数值做限制。对此,需在游戏引擎端加以实现。

下图以《Wreckfest》中的某个发动机为例展示了如何利用 RPM 自动调节 Blend Track 的 Voice Volume。在此,暂且粗略看下其近乎流畅的循环效果。稍后,我们会在实践中详细阐释自动化机制。

此动图展示了如何在 Wwise 中自动调节 Blend Track 的 Voice Volume。

对于 Wwise 中的 RTPC 对象,RPM 范围通常会被配置为实际值、归一化值或由实际值转换的 Hz 值。这三者之间的选择完全取决于具体的用例。

归一化 RPM 是缩放到百分比尺度的实际 RPM(如 0 ~ 1 或 0 ~ 100)。这些最小-最大值分别代表发动机的怠速 RPM 和全速 RPM。

借助这种范围设定,我们可以将自动化行为和实际 RPM 分开处理。如此一来,就算游戏引擎端的实际 RPM 范围发生变化,之前配置的 Wwise 自动化行为在最小-最大值域内照样可行。同时,这也让我们的设计更具适用性。对于其他车辆,可能只需简单地复制粘贴一下就能使用。

至于由实际 RPM 转换的 Hz 值,我们知道音频工具一般都是基于频率构建的。比方说,其会将 RPM 设为每秒转数而非每分钟转数。通过由游戏引擎直接提供转换为 Hz 值的参数,有时可大大减少在 Wwise 中配置所花的时间。对编程人员来说,设置起来也会轻松很多。

不过,在设计车辆声音时经常会遇到要在两种单位之间转换的情况。要由 RPM 转换为 Hz,可除以 60;反过来的话,乘以 60 即可。

Load 参数值域

想弄清发动机负荷的作用机制,还需了解汽车的动力传动系统。该系统由一系列部件组成,其通过离合与发动机相连,用于将发动机输出动力(扭矩)一直传递到路面。除此之外,其还可借助物理效应(如轮胎抓力)影响发动机负荷。

跟归一化 RPM 类似,在音频设计中一般也会将 Load 参数缩放为百分比值。该参数的值域通常为 0 ~ 1 或 -1 ~ 1。它可以用来指示发动机的作用状态:

1. 额外施加扭矩;

2. 抵消既有扭矩;

3. 自行惯性转动。

在游戏音频设计中,这些情形分别称为有载 (On-Load)、无载 (Off-Load) 和空载 (Neutral-Load)。发动机加速或减速力度越大,负荷值越高。三种负荷状态下的作用机制如下:

1. 在踩下油门时,会转为有载状态。这时,燃烧的油气混合物会流经发动机。倘若离合接合,发动机便会施加扭矩来克服传动轴的阻力。比方说,将车体加速到或维持在设定速度。

2. 在不踩油门但 RPM 高于怠速值时,会转为无载状态。这时,油气流动会被切断,发动机被动地逆向转动,以此克服自身阻力(离合分离)或动力传动系统的阻力(离合接合)。

3. 在离合分离、发动机 RPM 降到怠速值时,无论汽车是静止还是运动,都会转为空载状态。

空载也叫怠速 (Idle)。注意,“空载”并不是说完全不运转,而是指发动机为了维持运转(怠速 RPM)仅提供最少的动力输出。

在音频设计中,通常会使用不同的素材来呈现有载和无载的独特音调。这些音调取决于为发动机、动力传动系统和排气管配置的物理参数。

在录音的基础上制作循环

要构建一套可马上投入设计的循环,可能需要熟练使用各种各样的工具。比如,录音设备、音频编辑器(配有插件效果器和合成器的 DAW 环境)等等。

以录制汽车声音为例:只要做过录音棚设备调试,就不难想到给架子鼓录音。这里并不是说架子鼓是高速运动的,而是说需要多话筒装置来捕获细节,并可在较宽的动态范围输出声压级…而且,在这个过程中声音会变得非常响亮!甚至,连选用哪种话筒以及如何设定其位置和角度都大有讲究。

对于上述种种情况,在此无法逐项做剖析。不过,我总结了一些通用准则供各位参考。如需深入了解相关话题,请参阅文末链接。

假设我们有一些车辆录音。为了将这些录音转变为堪用的素材,并据此设计基于循环的发动机声音,必须确保制作的素材满足以下条件:

1. 在循环时长内让音高尽量保持不变(即 RPM 保持稳定);

2. 设定一个已知的空载 RPM 值(比如录制素材时的 RPM);

3. 无缝循环。

另外,在编辑素材时要设法让其各自的起始相位尽可能协调一致。在录音的波形中,很容易辨别气缸点火时的实际发动机运转周期。在各素材之间,我们要确保此运转周期的起始相位尽量保持不变。为此,需在开始剪切前仔细查看整段录音波形,以大致了解特定发动机的运转周期形状,以及其随着 RPM 都发生了怎样的变化。在此基础之上,看看能否在任意 RPM 下区分单个运转周期。

在为有载和无载分层创建设置时,两者之间的重叠素材的空载 RPM 无需匹配。对于这种 RPM/Pitch 匹配,我们会在 Wwise 设计工具中进行处理。

拆分素材

说到有载和无载设置,有时可能需要对发动机和排气管录音做单独的处理。在这种情况下,我们可以为两者分别创建不同的 Load 设置(比如四组),来让设计方案与游戏世界模拟结合得更加紧密,以此来增强玩家的沉浸感。

在按照这种方式拆分素材之后,可依据摄像机位置、角度和距离甚至障碍物来单独控制每个分组的音色和混音平衡。或者,添加 Wwise 插件来分别处理录音。

好比在现实世界中,我们绕着一辆停着但在运转的汽车走动。当处于不同位置和距离时,汽车发出的声音会有很大的不同。这主要由排气管相对位置的变化造成的。倘若我们站在车头方位,排气管就成了具有一定声锥衰减的发声体。这时,从排气管到人耳的直接视线是受阻的。

通过将这种行为融入到设计当中,可使游戏里的汽车显得更加逼真。

音高优化

在将行驶车辆的录音制作成素材时,经常需要对音高做一些扁平化处理,确保整个循环当中的音高相对稳定。

通过在 DAW 中运行频谱可视化器(比如 Cockos 开发的 Reaper 配套提供的 "Spectrograph Spectrogram Meter" JS 插件和 Voxengo 开发的 Span VST),我们可以非常方便地追踪音高变化。借助像 Sonic Visualizer 这样的工具,甚至还可追踪突出的频率及确切的音调!

类似的工具还有很多,都能用来直观地查看声音的频谱。藉此,可确定空载 RPM 并设定一个相对稳定的音高。

我们先来看个例子。以下是《Wreckfest》中某个车辆所用的单个循环素材,我用 Span 对其输出进行了可视化处理。该素材对排气管和发动机录音做了静态混音,其时长约为 3.5 秒,空载 RPM 为 2910:

此动图直观地展示了录音的谐波峰值。

注意,大致在 195 Hz、380 Hz 和 790 Hz 位置,我们可以看到三个比较明显的峰值。可能各位也发现了,这些数值看起来很像一组与谐波相关的音色!

诚然,导致谐波峰值电平波动的因素有很多(包括做功类状态和工作负荷)。但是,只要谐波相关峰值有大的横向变动,都需要对素材的音高变化加以限制。所以一定要留意这种变动,以便借助匹配自动化来对音高进行扁平化处理。

对于需要进行音高扁平化处理的素材,建议将总体波动控制在 3 个半音以下。否则,音高修正算法本身很可能会导致产生清晰可辨的杂音。总之,波动幅度越小越好。

在上面 Hz 值的基础上,可在空载 RPM 和 Hz 之间进行转换。这跟发动机录音尤其相关。如用值 2910 做 RPM-Hz 转换,会得到 2910 / 60 = 48.5 Hz。将之乘以 4 可以得到 194 Hz,相当于前文指出的最低峰值。先将 48.5 Hz 乘以 8,会得到 388 Hz;再乘以 16,会得到 776 Hz。这些值跟 Span 可视化处理之后粗略估算的频率基本吻合。

但是,为什么要乘以 4 呢?这是因为用于计算四冲程发动机基准频率 (Hz) 的公式为:

(RPM / 60) × (气缸数 / 2)

对于四冲程发动机,曲轴旋转 2 个整圈才算完成一个发动机运转周期,所以在此要将气缸数除以 2。以上示例中所用的录音源自配有八个气缸的 5 升 V8 发动机。所以,我在截图中指出的其实是原始、二次和四次谐波。三次谐波 (582 Hz) 也显示了,只不过其电平相对较低。

循环的设定

除了录音属性,还要考虑各个循环的数量和时长。若为有载和无载使用很多长的循环,设计方案的内存用量将会大幅增加。在这种情况下,需要反复地逐一进行评估。有时,可能还要在音频编辑器和 Wwise 设计工具之间来回切换,以在数量和时长之间取得很好的平衡。

对于数量,不妨先将空载 RPM 的间隔设为 1000-1500 左右。为了捕获特定 RPM 范围内的细微差别,以便把车辆录音打造得更加精妙逼真,有时候可能需要把间隔设得更小一些。间隔越小,运行时需要调节音高的地方越少。

起码,要尽力避免在整个 RPM 范围内只有两三个循环。否则,播放的循环会远远超出空载音高,这样声音会出现非常明显的瑕疵。

有一点要特别注意,就是包含大量进气或水箱噪声的录音。进气噪声的音量通常会随着 RPM 增大,水箱噪声有时并不受 RPM 等因素影响。在调节音高时,采样噪声很容易变得非常刺耳。在将音高扁平化处理效果与游戏中的 RPM-Pitch 变换结合时,这种情况会更加明显。简直就是雪上加霜!

如果选择包含大量这样的嘈杂元素,更要仔细斟酌如何设定循环的间隔。最好,将噪声作为单独的分层来逐步加以实现。在现实场景中,进气噪声的音调变化更多地表现为相对静态频率范围内的钟型 EQ 跃升,有时甚至会出现轻微的共振。

至于循环的时长,依据经验最好让每个循环至少运行四秒。否则,循环很容易出现重复问题,尤其是在空载 RPM 之上时。在较高档位行驶更容易出现该问题,因为发动机的加速会比空档时还慢。若不超出空载 RPM 很多,即便短于四秒也没关系。

完美地无缝循环

唯有采用下面的传统音频编辑技巧,才能确保让嗡嗡声完美地无缝循环:

(国内观赏视频通道

就是在已知的适宜过零点拆分录音,将两边录音的位置对调一下,然后目视检查并对齐波形,来实现相位匹配的交叉淡变。

在以上视频中,我专门用 Reaper 构建了 RPM 近乎恒定的发动机录音。不过,各位也可选用其他现代音频编辑器实现此效果…所示循环并不完美,各位懂我意思就好。

注意,有些编辑手法(比如重复和反转片段)会导致录音中的陡峭瞬态被反向播放。而且,还可能会造成各个循环的相位失调。所以,一定要设法避免出现这种问题。如果存在音高扁平化处理瑕疵,或循环中有其他织体淡入淡出,不妨试着增大交叉淡变的时长。

还有一点很重要,就是务必在素材文件名中加入空载 RPM 和 Load 状态以便日后快速查找。在 Wwise 中设置对象时,会用到这些信息。尤其是在几个月或几年之后查看素材的时候,你会发现这样给素材命名可以节省很多时间。

在第 2 部分中,我们会实际考察如何在 Wwise 中配置循环素材。如果各位有什么意见,请在评论区给我留言。

未完待续,敬请期待!

更多资源

车辆声音录制(规划、准备工作等):《Vehicle Audio of Mafia 3》– Matt Bauer
车辆录音技巧(话筒放置等):《Capturing car audio for DiRT4》– Chris Jojo
发动机录音编辑技巧(Izotope RX 可视化):《Adaptive Engines in FMOD Demo》– Rory Walker
赛车游戏声音设计技巧:《The interesting world of racing game sound design》– Nick Wiswell
专业车辆录音免费资源:《Archive: GameAudioGDC》– Sonniss.com

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

音频设计师、作曲家

Bugbear Entertainment Oy

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

音频设计师、作曲家

Bugbear Entertainment Oy

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

http://elbowski.com

http://bit.ly/FU4-Elbowski

评论

留下回复

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

更多文章

常用智能手机的声音响度和频响

29.7.2019 - 作者:杨杰 (Digimonk)

运用语音聊天增筑游戏的社交属性:Wwise GME 现已上线!

高度互动且易于辨识的游戏声音不仅可以让制作精良的游戏更具自身特色,而且还能为玩家提供更好的游戏体验并大幅提升游戏系统的运行效率。...

13.1.2020 - 作者:西蒙.阿什比(Simon Ashby)

FPS游戏中枪械模块的音频设计思路

大家好,我是JYUN,近期作为音频设计师参与开发了一款FPS端游,梳理了一些开发过程中碰到的设计点,希望和同行老师朋友分享交流。文本内容基于个人经验和理解,仅供参考。...

22.6.2021 - 作者:谢玮

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

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

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

“不”字诀

由于社区中已经有很多更好的人在写声音设计和技术实现相关的内容,我借此机会写一篇与我2018年的博客《我理想中的工作环境:以游戏音频行业为例浅谈雇佣关系的人性化》关联的姐妹文章。...

22.6.2022 - 作者:戈登·麦格拉德里 (Gordon McGladdery)

结合使用 Strata、Wwise 和 Unreal 构建沉浸游戏体验

在这篇博文中,我们将深入探讨如何使用 Strata 进行互动设计。为此,我们要在 Unreal Engine 5 工程中结合 Wwise...

31.5.2023 - 作者:蔡斯•斯蒂尔 (Chase Steele)

更多文章

常用智能手机的声音响度和频响

运用语音聊天增筑游戏的社交属性:Wwise GME 现已上线!

高度互动且易于辨识的游戏声音不仅可以让制作精良的游戏更具自身特色,而且还能为玩家提供更好的游戏体验并大幅提升游戏系统的运行效率。...

FPS游戏中枪械模块的音频设计思路

大家好,我是JYUN,近期作为音频设计师参与开发了一款FPS端游,梳理了一些开发过程中碰到的设计点,希望和同行老师朋友分享交流。文本内容基于个人经验和理解,仅供参考。...