Wwack-A-Mole | 在 Wwise 中构建游戏

互动音频

简介

学习新工具的一个妙招是尝试打破其既有的使用规则。你永远不知道在打破成规时会得到什么,尤其是对像 Wwise 一样应用广泛的工具。该软件用于将互动音频整合到游戏引擎中。但是,它本身可以用作游戏引擎吗?可以直接在 Wwise 中构建游戏吗?

这就是我为自己设定的任务。我想走得更远一点。在非游戏引擎中构建游戏对我来说并不稀奇,我平时本来就喜欢捣鼓一些异于寻常的项目。比如,为漫画创作音乐或在 Reaper 内制作带随机生成关卡的游戏

Wwise 有各种各样的潜在功用。每次听到它被用于游戏以外的目的(比如现场戏剧表演或艺术装置),我都跟发现了新大陆一样激动。之前,我尝试过在 Wwise 中为序列音乐构建自我驱动机制(就像 Steve Reich 或 Arvo Pärt 一样)。在琢磨如何在 Wwise 内编排 Arvo Pärt 的作品《Spiegel Im Spiegel》时,我还特地构建了主要基于 Event Cue 的自我运行机制。对于该项目,我不会细作探讨,因为它还需要一些改进和优化。但本质上就是几个示例 Switch Playlist,其不播放任何声音,唯一目的就是设置 Switch、触发 Event 来激活其他播放列表或设置 RTPC 值。这些 Switch 可以转换为播放列表的播放顺序,RTPC 则可输出到采样乐器的移调 MIDI(Actor-Mixer Hierarchy 下)。整个工程中只有一个 "Play" Event,其会触发并激活分散在 Actor-Mixer Hierarchy 和 Interactive Music Hierarchy 下的几个别的 Event。

img1

图 01 - Wwise 中的《Spiegel Im Spiegel》

将 Wwise 用作游戏引擎

有了在 Reaper 中构建游戏的切实经验以及之前 Wwise 工程的自我运行机制,我想试试看能不能直接在 Wwise 中构建游戏。在很长一段时间里,我觉得根本不可能。其中有个无法解决的主要问题,那就是到底如何显示游戏信息。为此,我开始琢磨要将哪里作为游戏显示界面。Wwise 没有赏心悦目的色彩和新颖有趣的界面,但是它有大量的编辑器窗口和性能分析器视图。显然,性能分析器最为适合显示游戏信息。但是要显示哪些信息?选择哪个性能分析器?

对此,我的第一个想法其实是构建一个专注于资源管理的游戏:用 SoundCaster 作为控制器,用 Advanced Profiler 中的 Voices Graph 作为主显示窗口。在捣鼓 Voices Graph 的时候,首先让我感到头疼的问题是其一次会显示很多信息。比如,Event、设备、目标、虚声部、音量、LPF、HPF 和 Effect。好像都是杂乱无章的信息,很难搞清楚应该关注什么。不过,我很快便决定利用这一优势。Audio Bus 和 Audio Device 的命名其实可以清楚表明游戏玩法。比如,将一个 Audio Device 命名为 GreatCountryOfDenmark,将另一个命名为 SadCountryOfSweden,以此展示丹麦和瑞士这两个宿敌之间旷日持久的较量。

该游戏的基本目标是将资源管理与《Cookie Clicker》游戏结合来生成比瑞典更多的公民。单击 Event,它就会生成一个存活三到四秒的丹麦人。我给瑞典创建了 AI,其 Music Playlist 基于一个简单的循环运行,每三秒播放一个 Music Segment,每三秒生成一个新的瑞典人。好,现在我们把游戏设计好了。丹麦将最终摆脱作为瑞典小弟的名声。下面,我们来看看在性能分析器中是什么样。

img2

图 02 - Voices Graph 中丹麦与瑞典的较量

嗯…看上去不是很清楚,对吧?Voices Graph 仍然一团糟,很难看清发生了什么。最终我决定放弃这个想法,因为事实证明它太复杂了。如果有人想接着开发,不妨把它做成完整的游戏!

在从这些尝试中吸取经验后,我终于破解了如何使用 Voices Graph 显示比较简单的信息并将 SoundCaster 用作控制器来构建游戏。

明确游戏机制

我想大家应该或多或少都听过名叫《打地鼠》的经典嘉年华游戏。玩家的任务是拿着锤子敲打可能从四到六个洞中随机冒出的地鼠。玩家要迅速出击打中地鼠,否则它会再次消失在洞中。玩家每次打中一只地鼠就会获得一分,出手速度快的话还可以获得高分奖励(具体得分取决于玩家的反应速度)。

在明确游戏机制后,便可使用 Profiler 和 SoundCaster 在 Wwise 中构建游戏了。虽然我们没有实体的锤子或真正的地鼠,但这并不妨碍在 Wwise 中再现游戏玩法。为了让游戏正常运行,必须构建多个系统并将其互连。

我们先来构建 MoleGenerator,并让其以随机间隔弹出地鼠。第一步比较简单,包括创建 Music Playlist Container,并将播放模式设为 Random Continuous。播放列表会播放四个地鼠声音文件之一或 NoMole。后者是空的,所以不会被发送到 Audio Bus。就跟我们在资源管理游戏实验中看到的那样。对此,稍后再细说。

通过限制 NoMole 的长度并在播放列表中复制,可将地鼠再次冒出之前潜藏的时间长短随机化。编号 01-04 的权重特意设在了 50 以下,NoMole 的权重则全部设在了 50 以上,以确保每次弹出地鼠都会有一个停顿。停顿的时长取决于 NoMole 被播放的次数。

img3

图 03 - MoleGenerator

编号 01-04 的长度相同。它们都有一个空的 Music Segment。除了显示在 Audio Bus 中,它没有任何别的用处。在深入探讨这个问题之前,我们先来看下 Event Cue 是怎么用的。对于没有用过 Event Cue 的人,我觉得有必要稍微说明一下。简单来说,它们是可从 Music Segment 中的特定位置触发 Event 的可编程标记点。在典型的游戏项目中,可使用其来触发 Stinger,在恰当的拍子上播放 SFX,甚至在最为关键的战斗音乐中将环境声静音。在本例中,它们的作用是设置 Switch,以此指示地鼠是冒出 (Up) 还是潜藏 (Down),并告知系统正在操控哪只地鼠。在 Music Segment 的开头会触发 "MoleUp" Event,在其结尾会触发 "MoleDown" Event。

img4

图 04 - Event Cue 告知系统地鼠是冒出还是潜藏

现在,我们设置好了地鼠冒出和潜藏机制。接下来,我们看看锤子机制。锤子背后的逻辑其实很容易理解。具体来说,就是通过 Switch 来控制锤子是打偏 (Miss) 还是打中 (Hit)。经过摸索,我发现最不容易出错的方案是为游戏中的每个地洞创建四个 Switch。每个锤子 Switch 都由与之对应的 Event 触发。在玩家按下 "Wack01" Event 时,会触发 "Hammer01" Switch(如下所示)。它只有两种可能的结果:Hit 或 Miss。对其他锤子来说,也是如此。在 Path 分区可以看到,Hit 其实只有一种可能的结果,而 Miss 的情形则多种多样。如果玩家打中地鼠,会播放表示获胜的音效;如果打偏,则会听到简单的嗖嗖声。

后来,我为打中或打偏添加了 Event Cue,目的是建立得分系统和生命机制。这样我们就可以在整个游戏中增添失败和获胜状态。在打中时会触发 "Score_1up" Event,在打偏时会触发 "Life_1down" Event。

img5

图 05 - 利用 Music Switch Container 实现 Hit or Miss 机制

至此,《Wwack-A-Mole》的基本功能就算讲完了。在确保所有这些游戏机制都能正常运行后,我们来看看如何使用 SoundCaster 和 Profiler 来显示游戏。

用 SoundCaster 作为手柄,用 Profiler 作为显示界面

手柄包含四个按钮(Wack01、02、03 和 04),用于激活上节所说的 Music Playlist。Event 根据地鼠做了颜色编码,所以很容易识别。如果在屏幕上看到绿色地鼠,就点击绿色 Wack 按钮。

在手柄旁边,有两个与游戏状态相关的按钮。其中 StartGame 按钮基本上只是播放 Music Segment,其配有大家熟知的马戏团音乐 (Circus Music)。由此开始,触发游戏的其余部分。在音乐的前奏部分,会触发几个空的 Event Cue,并发送到名为 Readme 的 Audio Bus。我发现可以创建文本教程并显示在 SoundCaster 中:直接重命名音频文件并通过 Event Cue 依次播放它们。文本长度都在两秒左右,跟音乐的曲速完全吻合。整个前奏如下:

Welcome // to Wwack a Mole // SMASH those events // and hit the moles // They will pop up randomly // and disappear quickly // So get ready //

截图中的最后一个 Event Cue 为 MoleGenerator,其会在前奏结束、音乐开始时被激活。在 SoundCaster 中,可以看到名为 SkipTutorial 的按钮。它的作用是对音乐的音频文件进行寻址,以便跳过前奏并在触发 "MoleGenerator" Event 之前播放。后来我发现,我花在音乐上的时间绝对是最少的。最终,只得到了非交互式的配乐以及从 A 播放到 B 的简单 WAV 文件。看来关于游戏开发,还有很多东西要学。

img6

图 06 - Event Cue 显示教程文本

为了以最佳方式显示游戏,我的想法是在 Advanced Profiler 选项卡的 Voices Graph (F6) 中滤掉不必要的对象。这样的话,如果在 Object Filter 中选择了 Master-Mixer Hierarchy 下名为 WwackAMole 的 Work Unit,将仅显示名为 Readme(游戏教程)、Enjoy And Listen(音乐)和 Wack it! 的 Audio Bus。最后一条 Audio Bus 包含玩家应当对之做出反应的游戏对象。除此之外,还有一条名为 InvisibleProfiler 的 Audio Bus,用于处理应当对 Profiler 隐藏的未分类声音。它可以是游戏系统,但也可能包括采样器、SFX 或环境声。

SoundCaster 还提供了另一组可以利用的信息。Switches 分区会显示地鼠是冒出还是潜藏以及哪个地鼠处于活跃状态。理论上来说,该系统无需将 Voices Graph 作为显示界面,直接使用 SoundCaster 就可以。在项目后期,我开始添加 Difficulties、Lives 和 Scores 机制。我设法将 State 用于所有与玩家相关的全局游戏系统,然后使用 Switch 来实现玩家不太需要看到的局部游戏机制。关于如何构建 Lives 和 Scores 机制,在此我不做进一步探讨。因为其仍在开发当中,有些地方还需要优化。

要点总结

总而言之,游戏的基本原理是按下 "StartGame" Event 来激活 Music Playlist 及游戏音乐。这些音乐会被发送到名为 Enjoy And Listen 的 Audio Bus。

在音乐文件的前奏部分,会有几个 Event Cue 触发 Actor-Mixer Hierarchy 下的无声音频文件。它们的作用只是在 Voices Graph 中显示与文件名对应的一段文本。这些文本文件会被输出到名为 Readme 的 Audio Bus。文本可为 Welcome to Wwac-A-Mole 或 Get ready。

在屏幕上显示最后一段教程文本后,会从 Music Segment 触发最终的 Event Cue。该 Event Cue 名为 MoleGenerator。它会触发 Music Playlist 并生成 Mole01、Mole02、Mole03、Mole04 或具有随机长度的无声片段。Mole-Events 会告知系统哪只地鼠被激活以及状态是 MoleUp 还是 MoleDown。这样可以为 Hit or Miss 系统奠定基础。Mole-Events 显示在名为 Wack It! 的 Audio Bus 中。

在 SoundCaster 中可以看到四个按钮:Wack01、Wack02、Wack03 和 Wack04。它们会播放名为 Hammer01、Hammer02、Hammer03 或 Hammer04 的对应 Music Switch Container。
各个 "Hammer" Switch 会检查地鼠是冒出还是潜藏,并据此决定是播放 "Hit" Event 还是 "Miss" Event。比如,对于 Mole01,要想激活 Hit,必须在 Voices Graph 中显示 Mole01 的同时按下 Wack01。如果按下 Wack02、Wack03 或 Wack04,就会导致打偏;如果在 Mole01 潜藏时按下 Wack01 太晚或太早,同样可能导致打偏。打中时会听到 Ding 音效,打偏时会听到 Woosh 声。

游戏的玩法是在恰当的时机打中正确的地鼠。如果打偏,就再试一次,直至玩到厌倦为止。实验功能包括 "Game Over" State 和 "Win" State。它们建立在带有 Scores 和 Lives 的 State 之上。每打中一次加一分,连续打偏三次结束。如果音乐播完都没打偏一次,就算通关。

(国内观赏视频通道

下一步?

简单来说,这样便可在 Wwise 中构建游戏。实现起来相当简单,对不对?当然,还有很多有待改进之处。不过,我希望它还是有意义的。至少,可以供大家借鉴。您也可以在 Wwise 中做实验,试着像我一样突破它的界限。最终的意义在于测试自己的技能并设法实现别人做不到的东西。这就是我喜欢在 Wwise 中做游戏项目和《Spiegel Im Spiegel》的原因;它帮助我创造性地思考问题,并实现了之前做不到的事情。

说到跳出 Wwise 的既有使用规则,我想好好夸夸雷莎•施沃德 (Ressa Schwarzwald)。她可是 Audiokinetic 社区的名人。如果没有她最初的想法和对开发古怪项目的热情,我就不会在 Wwise 中构建像游戏这样不实用的东西。作为 Robotic Orchestra 的构建者,她当然想把游戏提升到一个新的高度。她想到了在 iPad 上使用 TouchOSC 玩这个游戏。我试图说服她在 iPad 上拿锤子砸。说来也怪,这个想法并不受欢迎。不管怎么说,她挺厉害的。

(国内观赏视频通道

事实证明,《Wwack-A-Mole》在游戏音频聚会上也很受欢迎。我把它作为娱乐项目带到了在哥本哈根举办的游戏音频圣诞派对上,结果大家玩得不亦乐乎。这可是个测试游戏并从核心用户那里获取反馈的好机会。有人说明白我是怎么想的,但不确定如何玩这个游戏,对背后理念感到有些困惑。派对上有个不愿透露姓名的业内传奇人物,他表示说地鼠的生成速度太快了不好打中。为此,我们添加了高级模式,留了充足的敲打时间。你猜怎么着,他成功通关了!

游戏有很多地方可以扩展。只要想得到,都能加进去。跟所有其他受时间限制和实际应用约束的游戏一样,《Wwack-A-Mole》还没有完成,只是做了个框架。我能想象到有各种各样的功能可以提升这款游戏的体验。我们就先说说配乐吧。遗憾的是,作为一名作曲家和声音设计师,我在保证充实的音乐体验方面投入的精力很少。由于忙于在 Wwise 中进行游戏设计,我将音乐制作推迟到了管线的末端。在截止期限前的最后几小时,我才仓促做了个粗糙的方案。相信很多作曲家和声音设计师都听得出来。我希望完全由 MIDI 生成配乐,其具有节奏变化、采样乐器和互动分层来满足玩法需要。我想不出有什么软件比 Wwise 更适合制作自适应配乐。没能实现这一点,我感觉特别遗憾。对于这个项目,我想尽可能开放给大家协作完成,有兴趣的话可以进一步优化游戏。我把 Wwise 工程整个放在了 Github 上,欢迎各位根据需要对工程修改和改进。想创作配乐或设计音效?好得很,交给你了!想帮忙构建高分系统,或是继续我那才完成四分之一的剧情模式?没问题,可以;如果游戏音频社区能一起完成这款游戏,我会很高兴。

还有一件事…

我在 Wwise 中成功构建了游戏,应该可以告一段落了…对吧?其实,我还在 Wwise 中做了个游戏。它的灵感来自当时流行的 Netflix 节目《Squid Game》。节目中的选手必须在计时结束前跑到终点,但是只能在可怖的机器人没有看着时移动。否则,它就会开枪。听起来挺吓人的。

在此,我不细作探讨。但跟《Wwack-A-Mole》相比,它的游戏机制还要简单一些。游戏的运行机制同样存在于 Interactive Music Hierarchy 下。其中,包括巧妙地使用 Switch 音轨来确定机器人是否看向别处,可以放心奔跑;或者是否在扫描关卡,玩家在 SoundCaster 中按下 Walk 按钮会出现危险。每在 SoundCaster 中按下 Walk 按钮五次,玩家就会移动一段距离,最终要在计时结束之前移动 20 米。以上两种情况分别基于包含 20 和 60 个子对象的 State Group 运行。每次重新开始播放歌曲,都会稍微加快播放速度。这样会变得越来越紧张。

不妨转到 Github 下载游戏亲自试试:https://github.com/Gminorscale/Wwack-A-Mole/wiki

(国内观赏视频通道

我真心希望这些项目能激励各位在 Wwise 中做一些打破常规的实验。而且,我也很想看看大家会想出怎样稀奇古怪的项目。反正它们激发了我在 Wwise 中的创造力,让我得以从不同以往的角度探索它的功能。作为声音设计师和音频技术人员,我们经常受到所用程序功能限制。为了实现目标,常常不得不编写自定义代码或使用额外的附加软件。通过这个项目,我想看看自己能走多远。我想知道,只用 Wwise 而不用任何其他工具到底能做到哪一步。

无论是有其他问题还是单纯想交流想法,都可以在 Twitter 上给我发消息。感谢阅读这篇文章,祝各位心情愉快!

丹尼尔•尼尔森 (Daniel Nielsen)

丹尼尔•尼尔森 (Daniel Nielsen)

丹尼尔•尼尔森 (Daniel Nielsen) 是一名声音艺术家,热衷于尝试和探索各种各样的互动和实验项目。丹尼尔参与开发过《Wolfenstein Youngblood》、《Back4blood》、《Bible X》和《Scarlet Republics》,做过从 VR 歌剧到漫画配乐的各种项目。他目前居住于丹麦哥本哈根。

https://github.com/gminorscale

https://gminorscale.super.site

 @gminorscale

评论

Yuen Charles

August 11, 2023 at 05:45 am

太可笑了~太有爱了!

留下回复

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

更多文章

游戏音乐不应仅仅局限于音乐本身 – 第 1 部分

什么是游戏音乐?什么是互动音乐?这些问题的答案并不像看起来那么简单。对此,奥利维尔·德里维耶 (Olivier Derivière)...

8.4.2021 - 作者:奥利维尔·德里维耶 (OLIVIER DERIVIÈRE)

音频对象如何提高空间精度

这一系列博客文章源自2020年10月在GameSoundCon上发表的演讲。演讲目的是为创作者提供通过使用基于对象的音频渲染技术来完善他们新项目的视角和工具。而该技术能够实现尽可能自然的空间音频体验。...

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

在现实当中运用 Wwise 制作互动音乐

前段时间,我决定对互动音频展开更加深入的研究。为此,我想创建一个跟工作相关的工程。希望既充满乐趣,又具有指导意义。不仅可以避免枯燥,还能提升自身技能。...

19.10.2021 - 作者:雷莎•施沃德 (Ressa Schwarzwald)

zerocrossing 为 Wwise 开发的 SpectralMultiEffect 插件

SpectralMultiEffect 是一款为 Wwise...

6.1.2022 - 作者:哈维尔•阿西尼加斯 (Javier Arciniegas)

作曲家如何使用控制器创作互动音乐

在互动音乐研讨会上,雷莎•施沃德 (Ressa Schwarzwald)...

2.9.2022 - 作者:雷莎•施沃德 (Ressa Schwarzwald)

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

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

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

更多文章

游戏音乐不应仅仅局限于音乐本身 – 第 1 部分

什么是游戏音乐?什么是互动音乐?这些问题的答案并不像看起来那么简单。对此,奥利维尔·德里维耶 (Olivier Derivière)...

音频对象如何提高空间精度

这一系列博客文章源自2020年10月在GameSoundCon上发表的演讲。演讲目的是为创作者提供通过使用基于对象的音频渲染技术来完善他们新项目的视角和工具。而该技术能够实现尽可能自然的空间音频体验。...

在现实当中运用 Wwise 制作互动音乐

前段时间,我决定对互动音频展开更加深入的研究。为此,我想创建一个跟工作相关的工程。希望既充满乐趣,又具有指导意义。不仅可以避免枯燥,还能提升自身技能。...