分屏游戏最近在游戏界有些复兴的趋势,再加上UE4支持多种分屏模式,这意味着很多的开发者开始启用分屏。但在启用分屏时,对音频大小是很难把控的。所以下面来给大家了解处理分屏音频的简单方法。
分屏音频的坏处
启用分屏毕竟没有那么简单,不是切换一个游戏项目选项就能期待最好结果的。在场景中添加更多视角会导致有更多对象需要渲染,还会减少剔除的机会。这也意味着有更多东西会被占用和加载,从而被垃圾回收器引用。所有这些附加工作几乎会给游戏引擎中的每个子系统都带来巨大压力。
大多数人似乎都有这样的直觉:每个分屏视角应该对每个玩家(也就是“听者”)渲染出所有可以听到的音频。这种想法确实很有道理:如果在1号玩家附近有一支枪开火,那么1号玩家就应该听到从附近传来的枪声。但是对远处2号玩家的视角而言,枪声应该像是从远方传来的!毕竟听觉是无法拆分的。我们应该听到两个视角下的所有音频,对吗?这就错了。
且不说增加一倍的音频渲染CPU开销(对两路分屏而言),这种处理方式会引发无穷无尽的听觉灾难。想想看吧:屏幕上发生在所有玩家听觉范围内的每一个事件都要因为两路分屏而翻倍。如果是三路或四路分屏,可能要增加到四倍!当一个脚步声响起……那听起来就像有一队人在踏步。如果对每个听者来说,脚步声是同时响起的(确实会这样),而且它们播放的脚步声变化也相同,那么你就会因为这些相同声音的叠加而突然听到非常响的音频。你甚至有可能被震得耳朵疼。想想战场会有多混乱吧。每一声枪响都是同时从所有视角渲染和发出的。
那么,正确的做法是什么?很简单:只对距离最近的听者渲染一次声音。
UE4如何处理分屏音频
UE4的解决方法很巧妙。基本上就是把每个声音发射器位置变换到离它最近的听者的本地空间变换中。这不仅简化了大量较低级别的细节,还意味着较低级别的音频渲染器只需要关心一个听者变换。
事实上,因为这种简化,混音器(这是我们新的多平台音频渲染器)不需要任何听者几何体表示。因为所有的声音发射器都会在发射到音频渲染器前变换到本地空间变换中,所以所有的声音都是相对于一个单位矩阵空间化渲染的。这种简化降低了我们的空间化代码的复杂度,而且大大有利于简化我们更激动人心的次世代空间化功能的开发工作。
缺点
仅对距离最近的听者渲染声音的做法虽然反直觉,却很有道理,不过它也有一些缺点,比如:
1、对视角帮助不是很大
很显然,在一个分屏玩家附近打出的一枪可能根本不是冲着离得最近的听者来的,而是瞄准离得最远的分屏玩家。所以,你可能会觉得应该优先针对离得比较远的玩家播放声音。但问题是,这样的音频提示可能令遭到枪击的玩家感到困惑!
2、传播中声音会转换视角
持续时间很长或者循环播放的声音可能会长到从一个听者视角转换到另一个。这种转换可能听起来很刺耳。最糟糕的情况就是两个玩家/听者面朝同一方向,但是互相隔开合理的距离,然后有声音从一个玩家那里传到另一个玩家。在半路上,原本听起来是在一个玩家身前的声音会变得像是在另一个玩家的身后。它“唰”一下就从前面转到后面,这可不好。
3、渲染较多声音可能会改变混音和优先级均衡
任何声音设计师都能证明,获得均衡的游戏混音绝非易事。为游戏提供同时适用于单屏和分屏模式的均衡混音更是难上加难。
4、附加的声音和CPU开销
虽然只渲染一次音频(相对于最近的听者)的开销要比分别为每个听者渲染音频低得多,但还是会增加CPU成本。这是因为我们有更多音频在“范围内”,毕竟渲染范围内的声音时要考虑两个位置。对于大型对战游戏,这可不是小问题。
所以,我们可以为每个分屏视角渲染音频,并路由到不同的硬件输出,有可能让玩家通过耳机听到。
尽管如此,到4.24版为止,UE音频引擎都不支持这种功能。而且它也不会同等支持所有平台。因此,如果我们想要减少各种附加音频渲染的CPU开销,在没有渲染到多个硬件端点的功能的情况下,还是需要替代解决方案。
所以说,处理音频分屏确实可以很复杂,是个包含大量技术细节的棘手话题。但是,有一个反直觉的思路是,如果我们只对离得最近的听者(也就是分屏的近视图)渲染音频,那么就能合理地解决一切问题。
,Unreal Engine技巧,Unreal Engine教程