《Dead as Disco》技术访谈:用 BeatWarping 把玩家自选音乐同步到战斗动画
围绕精选原声带来打造一款节奏动作游戏,本身就已经是一项重大的技术挑战。而围绕玩家自有的音乐来打造,则会带来完全不同层级的复杂性。这正是 Dead as Disco 的核心理念——这款近期以抢先体验形式推出的音乐驱动动作游戏,允许玩家在战斗中带入自己的歌曲,同时仍保持高度同步的玩法、动画和敌人行为。
Brain Jar Games 团队并未仅依赖传统的节拍检测,而是开发了一套名为 BeatWarping 的自定义系统,它能动态调整动画播放,以实时将富有冲击力的瞬间与音乐对齐。
为了解更多,我们与开发团队的几位成员进行了交流。

《Dead as Disco》允许玩家使用自己的音乐,同时仍能与游戏玩法保持紧密同步。从高层面上讲,你们的系统是如何实现这一点的?
高级玩法工程师 Milcho Milchev:大部分玩法都是通过将动作(动画、音效、视觉效果、敌人攻击)同步到节拍来运作的。我们要求玩家为他们的歌曲输入 BPM(每分钟节拍数),并提供工具帮助他们确定该 BPM。未来,我们希望加入自动 BPM 检测功能。
首席技术官 Jon McEvoy:一旦有了 BPM,我们就有多种方式同步动作(包括环境和敌人行为),但最有趣的是我们如何让动画与音乐对齐。
我们的动画团队在创建所有动画时都会进行标注,标注信息包括回放可以如何缩放,以及动画中富有冲击力的时刻发生在何时。我们把这项技术称为 BeatWarping,它让动画不仅能随 BPM 缩放,还能匹配歌曲中的特殊时刻。
例如,我们的剧情关卡在音乐轨道中打包了多得多的信息。这让我们能让动画、环境和敌人对音乐作出反应,而不仅仅是对节拍。我们的音频和设计团队会逐条检查每个轨道,并为歌曲中的鼓点滚奏、人声和其他器乐等时刻添加事件。我们打算向玩家发布这些工具,让他们也能用我们的技术构建功能完整的歌曲体验。

在尝试把游戏玩法系统同步到你不掌控的用户自有音轨时,最大的技术挑战是什么?
Milcho:玩家特别喜欢几乎立刻就把系统推到极限。很多玩家会把节奏拉到尽可能高——超过 200,有时甚至一路拉到 666(也就是每秒 10 次基础攻击)。我们设计许多系统时,是让它们在 180 BPM 左右之前都能良好运行,但很快就意识到,为了支持玩家的各种实验,我们需要支持更极端的速率。
你们如何处理节奏不一致、速度变化,或者更偏氛围化、并非总有清晰节拍的音轨?
Destiny Treptau,软件工程师:我们通过所谓的 BPM 区段(BPM sections)来处理。这允许用户把节拍精确放在歌曲中他们想要的位置,并更改 BPM。然后我们会从区段起点开始计算节拍,直到遇到另一个区段或到达歌曲结尾。这让用户可以随心所欲地修改歌曲的节拍。由于区段的起点本身就是一个节拍,用户如果愿意,甚至可以手动编写歌曲的每一个节拍。

从游戏玩法设计的角度来看,你们如何确保即使音乐分析并不完全精准,动作依然能保持响应灵敏、手感令人满意?
Milcho:在我们的 BeatWarping 设置中,我们会为游戏中的每一个动画标注出可以拉伸或缩短的区段。每个区段都有关于它应如何与音乐同步的设置,包括它适用于哪些节拍型。
正是这一点让每一拳都能落在节拍上。我们可以同步到多种同步点,包括两拍之间的中点、每 ¼ 拍,或者歌曲中放置的完全自定义的标记。

Milcho:这段 0.7 秒的动画区域应当向前看,从此刻选出第 1 个节拍,并进行拉伸,使其结尾与该节拍对齐。
动画播放同步后,音效(SFX)和视觉特效(VFX)会自然地在其上对齐。
Jon:BeatWarping 技术的优势之一是,无论动画在运行时何时开始播放,我们都能让动画与大多数音乐对齐。
当我们最初头脑风暴后来成为《Dead as Disco》的创意时,我们对节奏游戏整体上的一个担忧是:如果玩家的输入没有跟上音乐,它们会让人觉得多么严苛。大多数节奏游戏会等到下一个合适的时机才开始播放动画,所以如果你没有踩准节拍按下按钮,就会有一种输入延迟的感觉。借助 BeatWarping,我们可以立即开始动画——Charlie 随时准备投入行动,而且他始终随着音乐而动。
玩家仍然会因为踩准节拍输入而获得奖励:更高的分数、更具冲击力的攻击,以及特殊的动画和效果;但无论你的时机有多差,Charlie Disco 玩起来始终很酷。
你们使用哪些工具、中间件或自定义技术来进行音频处理和同步?
Milcho:我们用 FMOD 播放音乐,但我们并没有对音乐播放做很多花哨的处理。相反,我们让游戏玩法逻辑来完成工作。为此,我们只需要歌曲的 bpm,以及歌曲被剪辑成从节拍开始。

Milcho:动画的播放由虚幻引擎负责,而我们的 BeatWarping 技术则负责设置动画正确的播放速率,并触发战斗事件(例如:此刻出拳命中)。
Jon:我们有一个内部工具,名为 SongCrafter,它让我们能为故事模式的所有音乐添加数据轨道。借助这些数据轨道,我们可以实现更复杂的操作,比如招式同步、灯光变化,以及让敌人生成与音乐节拍对齐。
在这个工具里,我们可以预览动画同步效果,甚至能直接跳转到歌曲中选定的时刻进入游戏。我们希望把这个工具做成对用户友好的版本,推送给我们的玩家。我们打算持续扩展 My Music 功能,直到它具备我们在内部使用的完整功能集。

在开发这个系统的过程中,有没有什么意外的发现或突破?
Milcho:我们有这样一项技术,内部称之为“Moveset syncs”(动作组同步)。我们会把歌曲中那些很酷的瞬间与很酷的动画相匹配。这时你就会看到这个符号出现:

Milcho:基本上就是,敌人正要一拳打向你,而这时正好是歌曲中一个很酷的节点,如果你反击成功,就会触发这套很酷的动画序列。
它们的运作方式是,我们会手动标注歌曲中的一些区域,表示“这里有一个与该音乐时刻相匹配的打击乐节奏”,然后我们有一套稍微复杂一点的系统,试图判断:
- 敌人应该在哪一刻开始攻击你,好让他们的攻击在同步开始的那一刻命中
- 应该由谁来攻击,才能给你最好的反击机会
- 如何把我们制作好的动画塞进歌曲中已标注的标记点里
另外,我们一路下来学到的另一点是,在音乐的正确节点上 KO 敌人感觉最好。最初,你可以根据对手还剩多少 HP 来流畅地进入和退出每一段。结果发现,如果 Charlie 直到同步段快结束时才击中目标,而那通常正好对应音乐中最有冲击力的部分,那么玩家也会感觉自己脱节了。
所以现在我们可以从任何节点进入同步,但始终保证把它播放到底,并以一次 KO 攻击收尾,与最后一个标注标记对齐,以强化效果。

最后,对于试图构建能与动态内容或用户生成内容配合的音乐驱动系统的开发者,你有什么建议?
Milcho: 使用你最终要发布出去的工具来构建你的内容。这是确保你的工具功能正确、经过优化且运行良好的最佳方式。Visual Studio 的崩溃次数比 Photoshop 少得多,这是有原因的
Jon: 找到让你的游戏与音乐相匹配的方法,而不只是与节拍匹配。从你开始开发的那一刻起,任何你希望与音乐匹配的内容,都要让它同步到动态事件,而不是时钟计时器。这样,当你修改音乐时——无论是完全换成另一首歌,还是仅仅因为需要添加一段新的副歌——你都不会最终用新的时间点重建整个关卡。
Destiny: 对于用户生成内容,不要害怕给用户尽可能多的控制权。你应该始终为只想用自己的歌来玩游戏的玩家提供一个简单选项。但对于想要深入探索的玩家,应该给他们工具去创造他们真正想要的东西,即使这打破了我们设计的限制。用户生成内容的核心就是创造力,我们永远不应该限制它。

相关链接
原文链接:https://80.lv/articles/interview-how-dead-as-disco-synchronizes-combat-to-player-uploaded-music
喜欢这篇内容吗?