在我们的博客《在Unreal 中使用 Wwise Reflect模拟基于几何信息的动态早期反射》中,大家了解了如何用Unreal Integration和Wwise Audio Lab示例游戏,通过全新的Wwise Reflect插件进行混音。这篇博客中,我们将进一步探寻这个插件的实现方式,学习如何将它和空间化音频封装一起使用,并了解它如何与3D总线架构进行互动。
Wwise Reflect的实现
Wwise Reflect插件使用声源成像法[1]对反射声进行建模。声源成像就是发声体在反射面背后等距离位置呈现的虚像,就好像反射面是镜子一样。如果我们在声源虚像和听者之间连线,它与反射面的交汇点即为声音的反射点,就如同光线在镜面的反射点。下图是一个鸟瞰图,显示了房间中的发声体(E)和听者(L)。蓝点代表一阶声源虚像,而深蓝色线代表从发声体到听者的声音路径。浅蓝色线显示了直接从声源虚像到达听者的路径。
Wwise Reflect插件是应用于发声体游戏对象的。该效果器需要知道发声体、声源虚像和听者的位置。这样插件就能计算出声源虚像到听者的距离,也就知道声音总共传播了多长距离。为了模拟反射,会将干声发送给一条延迟线,其延迟时长会根据声音的传播距离和速度设定,具体的距离和速度可以在Wwise Reflect插件界面中调整。声源虚像较远时,会比近处声源的声音晚一些到达反射点。之后, Wwise Reflect插件会计算声源虚像位置和听者朝向,并将所有声音按照原本的声道设置进行混音。因为只有 Wwise Reflect知道声源虚像的位置,所以声音定位需要在这个阶段进行。
用户有很多种方法可以更改反射声。正如我们在前一篇博客中所讲, Wwise Reflect 插件编辑器中可以根据距离设置衰减和滤波器曲线。在游戏端, Acoustic Textures(声学材质)提供了额外的滤波,来区别目前发声体所处的房间材质。声学材质会模拟反射面材料所吸收的频率。如下图所示,Acoustic Textures位于Project Explorer 视图里ShareSet 标签页的Virtual Acoustics层级下,可以模拟四个吸收频带和全局偏置。默认情况下, Wwise Reflect的频带映射方式是,低频的上限位于250Hz,每个频带宽2个八度,这样临界频率就是250、1000、和4000Hz。Frequency Absorption (频带吸收值)数字代表反射面吸收特定频带声音的量。比如, Carpet(地毯)声学材质完全吸收高频并且只会反射~50%的低频和中频能量。可以使用Offset滑块同时改变所有频带的吸收值,但Reflect会在内部将有效数值限制在0到100 间,因为反射表面不会在反射时将声音放大。
声源成像的计算
我们现在知道Wwise Reflect插件会模拟带有延迟、滤波和声像摆位的声源虚像。这些虚像位置的计算必须在调用Wwise Reflect插件之前完成。你可以自行计算然后直接调用Wwise Reflect插件API,或者使用Spatial Audio API。Spatial Audio API是一种封装,供你使用Wwise Reflect插件和其它空间化音频组件,比如Room(房间)和Portal(门户)。它能根据听者位置和几何空间形状,随时计算发声体的各个虚像位置,只需知道几何空间内形成的各个三角顶点就可以。这就意味着它适用于任何形状。每个三角形都可以有自己的声学材质。
声源虚像数量的多少取决于发声体的反射阶数。在2017.1中最多支持4阶反射,前面的部分讲到声源虚像时,我们只说到一阶反射:也就是声音在一个反射面上反弹一次到达听者的状态。你可以把二阶声源虚像表示为一阶声源虚像经过表面再次反射得到的新声源虚像;如下图所示。经过二阶反射的声音在到达听者时被反弹了两次,也会被其触到的两个表面的声学材质进行滤波。你可能已经意识到了,每增加一阶反射,反射声的数量都会呈指数增加。
Wwise工程
当声音发出时,它会被周围的反射面反弹,创造大量的反射声,这个过程一直会持续到声音被反射面和空气吸收,如下图所示。最早的几阶反射叫做早期反射,它是由Wwise Reflect插件模拟的。剩余的反射叫做后期混响,可以由Wwise中的其它插件模拟。Wwise Reflect插件会应用到每个发声体,Wwise中的后期混响插件则不同,一般应用到游戏内的房间或一片区域。它们也可以根据房间大小和总体声学属性来创建一些预先计算好的早期反射效果,但不像Wwise Reflect那样完全基于几何空间。
如前所述, Wwise Reflect插件是针对每个发声体的。将它应用到每个声部开销太大,我们并没有这样做,而是将其放置在Auxiliary Bus(辅助总线)上,再应用到每个发声体。在WAL中,当玩家开枪时,武器声音将直接发送到听者,同时也发送到Wwise Reflect插件所在的送辅助总线。我们在辅助总线上用了一个Reflect 效果插件的ShareSet。在之前的Wwise Reflect博客中,我们展示了如何设置Wwise Reflect效果插件的编辑器参数。
3D总线的魔力就是会为每个发声体创建一条Auxiliary Bus实例。当两个声部在Wwise Reflect中使用同一条辅助总线时就可以证实这一点。比如,在 WAL中除了武器,玩家还有一个脚步发声体用于脚步声。两个发声体共用同一条名为FirstPerson的辅助总线,从而都使用了Wwise Reflect。当玩家一边走一边开枪时,你能看到以下的图像。两个发声体 WeaponAkComponent和FootAkComponent都会将声部发送到FirstPerson辅助总线,但图像显示了两条独立的辅助总线。这样,每个发声体都带有一个FirstPerson的实例,而且会有不同的空间表现。
因为武器和脚步发声体共用同一条辅助总线,所以它们的Wwise Reflect 插件也使用同一个Wwise Reflect ShareSet。一边开枪一边走动时,打开Wwise Reflect效果插件编辑器,就能在清单和图像上看到两个发声体的Image Source Name(声源虚像名称),如以下屏幕截图所示。
对于玩家以外的发声体,如果想让其声音也根据几何空间反射,那最好另建一个ShareSet。在WAL中,我们 有一条ThirdPerson 辅助总线,附带另一个Wwise Reflect ShareSet,供一个收音机使用。这样一来,设置Wwise Reflect 效果参数时,我们就可以让第三人称发声体和第一人称不同。这么做的原因之一就是针对收音机设置了Distance Attenuation (Emitter vs. Listener)距离衰减曲线,可以在听者接近它时降低反射的音量。即使在物理上不是很精确,它还是能帮助用户专注于发声体,避免被早期反射声分神。你可以在下图中看到ThirdPerson Reflect 效果插件的编辑器设置。
这就是WAL工程的Master-Mixer Hierarchy。共有三条带有Wwise Reflect Effect 的辅助总线:FirstPerson、ThirdPerson和Mountains_SpotReflectors。最后那条辅助总线作为独立的反射点使用,我们将它置于山顶的不同位置来模拟回声。
后期混响和Wwise Reflect
在上一部分的开头,我们讲到了一点后期混响的话题;它们应用到每个房间,而且并非基于几何空间。使用Wwise Reflect插件,你也可以提升后期混响插件的真实度。通过将Wwise Reflect基于几何空间的早期反射发送给后期混响,可以在其中添加房间声学材质的色彩,并增加回声密度。在带有Wwise Reflect 效果的辅助总线上启用Game-defined Auxiliary Send (游戏定义的辅助发送)即可。在下图中,FirstPerson 辅助总线启用了游戏定义的辅助发送。每当玩家进入WAL中有混响的区域时,玩家的武器和脚步声的早期反射也会发送到混响中。
比如,如果我们在Mezzanine 2(夹层房2)中开枪,就可以看到下图,其中虚线代表辅助发送。武器声部发送给了Wwise Reflect和RoomVerb 效果所在的两条辅助总线,而该声部同时也直接向听者输出。FirstPerson 辅助总线会将早期反射输出到听者,同时也会发送到Mezzanine2 辅助总线。
结论
读了这篇博客和另一篇关于Wwise Reflect的《在Unreal 中使用 Wwise Reflect模拟基于几何信息的动态早期反射》,我们希望这个话题你已经熟悉,并且能够最大程度利用所述效果插件,在游戏中创建基于几何空间的早期反射。请注意不是所有发声体都需要Wwise Reflect,你应该选择能真正让游戏声音变得丰满却又不会太过的那些。
参考文献
[1] Savioja, Lauri. "Image-source Method in a Rectangular Room." Room Acoustics Modeling with Interactive Visualizations. (accessed September 11, 2017)
评论