这篇开发博客适合所有对虚幻引擎中的音频设计或实现感兴趣的读者。我受Epic Games聘请,为他们的“射击游戏”项目执行全面的音频改进,这个项目可以通过Epic Games启动程序安装。它也是Epic被下载次数最多的初学者模板,所以如果你还没有安装它,赶快下载看一下吧。
我不仅重新设计了该项目中所有的音频资源,还加入了可伸缩的蓝图逻辑,并尽我所能以浅显易懂的方式对其进行了说明,不过我也整合了一些有用的参数、系统、变量和组件,相信大多数音频设计师都乐于研究它们。我完成的设置仅仅是一种设计建议,是在虚幻引擎中进行音频实现的众多方法之一。我觉得在游戏音频界流行着一种迷思,认为要制作“次世代音频”(无论它的实际含义是什么),就必须在UE项目中整合中间件,其实并非如此。
令我对未来充满希望的是,现在有越来越多的游戏音频工作者认识到了内容创作者也应该精通技术。虚幻引擎的原生工具和功能无疑已经有了重大改进,这是因为过去几年来Epic的编程和QA团队一直在实现、测试和修改它们,而且他们还有着雄心勃勃、激动人心的发展路线图。我认为自己作为专业的音频设计师,有责任发挥这些工具和技术的优势,并成为更优秀的游戏设计师,而不是依靠程序员来为自己完成往往很简单的实现任务,考虑到蓝图时代已现出曙光,我就更应该承担起这样的责任。
我从2012年起就是虚幻引擎的积极拥趸,又对音频设计的艺术和实现的技术充满热情,因此受雇参加这一项目令我有受宠若惊之感。在考虑了各种因素(音频设计、实现、发现、Bug修订、试玩、开会、同步,等等)之后,我估计这份工作需要做15到20天。在加入项目之后,我不能不说,当初选中音频子关卡中的所有Actor并将它们删除是很值得的。下面就简要概述我的工作过程和一些必须时刻牢记的要点。
项目目标
该项目的主要目的是更新音景,使它听起来更现代和动感。以前的资源是被过度压缩的,对混音的处理不够好,而且资源的声音也颇为陈旧。还有一条给人印象深刻的音轨,它在频率和音量方面对耳朵的要求很是苛刻。这实际上使玩家少了许多体验游戏中各个事件的机会,最终减少了游戏的乐趣。比较大的问题有:武器声音缺乏冲击力,环境音提供的空间感和质感不足,脚步声过于沉重和响亮,而拾取物品的声音几乎像爆炸,等等。我可以逐个处理这些资源,但考虑到时间因素,而且我觉得所有资源都需要更新。所以我几乎清除了游戏中的所有声音,然后从头开始。
这是我清除音频子关卡中所有内容的视频,这个操作让我很满足
音频(再)设计
射击游戏中的音频有一种过时的审美,而且混音不均衡。因为它至今仍是虚幻引擎的新被许可方和新用户下载最多的示例项目之一,所以它可能让这些人对使用原生音频引擎所能达到的效果产生错误印象。不仅如此,过时的声音加上不一致的实现策略,还使这个示例游戏的游戏乐趣大打折扣。各主要声音类别(例如武器、脚步、拾取)的音频资源和实现不够均衡。.wav资源的动态范围有限,在同一个频段中相互竞争。它们也缺乏个性和清晰度。音景给人感觉很苍白,因而削弱了游戏体验中的情感联系,而这正是音频在任何媒体中所扮演的主要角色。音频设计师要确保电子游戏中的任何因果都具备目的驱动的、有意义的音频设计,能够支持游戏的整体设计和剧情。由于以上问题,我认为全面改造势在必行。一连几天,我带着话筒和便携式录音机走遍了圣迭戈的不同区域,录下大量原始的音源素材。我获得的素材多种多样,包括了环境音和不同表面上的脚步声。我也在自己的工作室里录制了自定义音效,包括金属撞击和其他质感的声音。我还用不同的合成器获得了一些优质的源素材,并通过特效流程制作了各种奇特的素材,以营造充满神秘和未来气息的科幻世界氛围。

实现
这个项目中的一些玩法系统是在项目层面上用C++代码硬编码的。在其他情况下,我只需要让现有实现保持原状,仅用较新的声音内容更换SoundCue和源文件即可。例如,武器射击系统使用一个硬编码的循环声音系统。该系统引用一个仅存在于射击游戏项目中的自定义SoundCue节点;它叫Sound Node Local Player,会根据第一人称和第三人称实例化切换资源。Aaron和Dan告诉我,这通常是在较高级别的玩法代码系统中实现的,而不是在Sound Cue中实现。但是就射击游戏而言,出于工程优先事项的考虑,改变射击游戏实现本地和非本地玩家声音的方式是不可能的。我必须在没有任何程序员执行新的功能或代码工作的前提下完成重新设计。因此,我不得不继续使用这个实现方法。在其他实现情况下,比如冲击模板、毒刺和拾取,我通常单独保留它们的声音钩,仅更换声音本身及其关联Cue。对于剩下的实现工作,我觉得可以重点讲三个主要方面,它们可能会对大多数人都很有启发。这些方面包括:
- 重叠事件:根据重叠事件改变环境音和一次性音频。
- Actor蓝图:创建自定义工具,用于修改和定制。
- 基于材质的脚步声:根据表面类型命中结果更改脚步(或其他)声音。
重叠事件:我认为,重叠事件代表了虚幻引擎实现的基础框架。它们允许你根据可以放在关卡中的某些东西创建一个蓝图事件。一旦我们进入蓝图,音频控制设计师就可以通过许多功能来控制他们设计的任何音频系统。

图1.在关卡中我希望有自定义音频行为的区域放置一个笔刷Actor来触发重叠事件。
参见上面的图1,我放置了一个自定义体积(用于混响)和一个触发器(用于环境音)来匹配房间的布局。每当玩家与关卡中这些隐形的笔刷体积重叠,我们就可以做下列部分或所有操作:
- 改变该空间中播放的房间音调或环境音床。
- 当玩家处于该空间时,切换为在玩家的场景位置周围随机触发的、更独特的一次性声音。
- 改变此空间内部的任何声音的混响。
- 在该体积内部或外部开启和关闭声音。
- 对在此体积内部或外部播放的声音使用HPF和LPF。
图2.重叠事件执行控制环境声音的逻辑。
在图2中,我演示了一个简单的蓝图脚本,它在发生重叠事件时执行。我首先执行一个检查,确保引发重叠事件的Actor和受控制的Pawn是相同/相等的。然后我通过引用检索场景中的一个音频组件,使它淡入。很简单。请注意,我之所以要检查触发体积的Actor是否正确,是因为NPC(或其他玩家通过网络连接控制的角色)可能会根据其行动改变我们本地客户端上的环境声音。不检查的话,它很快就会让人摸不着头脑。
图3.这里是一个音频逻辑,它在玩家的场景位置周围按随机矢量坐标生成一次性声音。
在图3中,我创建了一些逻辑,使用重叠事件和一个定期在玩家位置周围生成随机一次性声音的Timer By函数。生成这些声音的距离和频率完全由用户通过公用浮点变量定义,我在PIE中尝试不同的声音时,可以轻松对这些变量进行调整和迭代。当然,除此之外我在Cue中还用了标准的音高和音量变化。
图4.“BP_Audio_Spline”蓝图的音频逻辑。
Actor蓝图
如果你还没有发现它们的强大,就听我一句吧:蓝图的功效极其强大,而且开启了无数音频功能和定制机会。例如在图4中,我展示了我的工具脚本,它处理在样条离听者最近时播放声音的逻辑。下面的图5展示了一个样条声音的传播路径示例。图5.我绘制了一个样条,它沿高层的阳台边缘分布。我的循环风声将从样条上距离玩家位置最近的点发出。
这种东西的典型使用案例可能是管道中的流水,曲折的河流的循环水声,等等。你之所以需要那么做,是因为这能营造更大的分布式音源的感觉,而不是让人感到只有单点音源或一系列点音源。

图6.音频跟随玩家在样条的最近位置发出的可视演示。
在这个项目中,我把它用在了几个区域。图6显示了我在阳台边缘使用它的案例。我简单创建了一个让音频遍历的样条路径,在该路径上播放一个刮风/室外循环声音。因此,你会感觉离边缘越近,听到的风声越多。但是它的音量不会升降(也就是说,是一系列一次性声音)。
基于材质的脚步声
图7.根据线条追踪的命中结果改变脚步声的蓝图脚本。
通常,如果要根据玩家踩踏或与之交互的物理材料来改变播放的脚步声或其他音效,并不需要虚幻引擎中的代码支持。图7显示了我用于脚步声和落地声(也就是在角色跳跃后落地时播放的声音)的逻辑。只要你想使用线条追踪,获取关于命中物体的信息,然后根据该结果改变声音,就可以使用类似这样的脚本。
图8.Playsound通知在动画通知触发Anim BP图事件时触发声音。
图8显示了你在此动画蓝图中看到的事件被我在各种跑步和冲刺动画中设置并命名为“Footstep”的各个动画通知事件触发。
在利用这种方法之前,你首先需要确保项目确实已经设置了不同表面上的物理材质。存在的物理材质类型是在项目设置中定义的。在这个范例项目中,我只使用瓷砖、青草和金属材质。但是,如果你的项目有独特的材质,比如电影《终结者》中的“液体金属”,那么你就要在项目的设置中定义它。设置完它们之后,你就能将那些表面类型分配到已经放置在关卡中的物理材质和网格体。通常环境美术为了作画已经设置好了这些材质,所以音频设计师往往只需要去看看存在哪些材质,然后使用它们。

图9.使用一个“map”变量将物理材质类型与Sound Cue关联
在图9中,我设置了一个变量类型图,在其中我关联了线条追踪的命中结果,从而根据命中的表面播放不同的声音。该蓝图脚本执行下列逻辑序列:
- 动画通知触发一个事件
- 它将Pawn Owner和Cast获取到Player Pawn BP
- 然后它获取场景位置(作为我的起始矢量位置)
- 然后它减去100单位(用作我的结束矢量位置)
- 它使用这些坐标执行一个线条追踪
- 如果它的线条追踪命中一个表面,那么它就告诉我那是什么表面
- 它返回命中的物理材质,并查找我使用map变量设置的声音引用
- 然后它使用我的map变量中的查找结果设置一个名为“Sound To Play”的声音变量
- 最后,它引用玩家Pawn上的网格体,并生成与该网格体关联的脚步声
结语
在虚幻引擎中实现一种创意或系统往往有好几种方法。虽然通常方法本身无所谓对错,但总会有比较高效的方法。如果你是在一个团队里工作,那我建议你请程序员或设计师定期审查和批评你的蓝图逻辑,这是一般的最佳实践。你对音频以外的系统钻研得越多,在设计过程中的参与就越深入,这能让你成为与其他使用虚幻引擎的游戏设计师和开发者平起平坐的开发者。那是很酷的事。任何人如果想进一步了解虚幻引擎音频,我建议加入我的Facebook“虚幻引擎音频技巧与诀窍”版,看一些Udemy上的UE课程,加入虚幻引擎论坛,并研究Mathew Wadstein’s WTF Is系列之类的YouTube频道。Epic最近还发布了在线学习课程,非常值得一看。另外你也可以通过我的Linkedin联系我,或访问我的网站Craftmediagroup.com。
感谢阅读本文!