按照距离对音频播放处理进行Culling

以减轻宽阔场地上的音频处理负荷为目的

在开发使用宽阔场地的游戏时,很重要的一点是如何降低场地上的角色和对象的处理负荷。
在音频的播放处理方面,也同样需要减轻处理负荷。
很多情况下,处理宽阔场地上的音频时,会通过衰减效果,按照距离缓缓降低音频的音量。该处理在衰减区域外的音频为静音状态,即使进行播放,也需要考虑到Player(倾听者)进入区域内的情况,时常对音频播放进行控制。
然而,在同时播放成百上千个声音的环境中,如对所有音频播放进行处理,会产生无法忽略的巨大处理负荷。
criware_ue4_038_explanation_attenutaion_distance_j.png
因此,作为减轻处理负荷的一种方法,如已事先决定了Player的行动范围和移动速度等,则可设置为在距离衰减区域的外侧不进行音频播放控制,这样一来可避免不必要的音频播放,就能减轻处理负荷。
criware_ue4_038_sound_process_culling_j.png

发声距离Culling功能

CRIWARE虚幻引擎4插件在播放音频时,通过创建Component,或关联UE4上的Actor等位置信息等来进行播放。
该处理在成百上千的音频同时在场地各处被触发时,也会产生不可忽略的巨大处理负荷。
在CRIWARE UE4插件的发声距离Culling功能是指当3D音效与倾听者之间的距离较远时,可以忽略发声触发器来减少处理负荷的功能。

规格

满足以下条件将取消音频播放。
  • 3D音效(不是2D音效)。
  • 为一次性的音频(不是循环音频)。
  • 声源与倾听者之间的距离>(声源距离衰减的最大值 + 任意的Margin)。
判断是否为3D音效
  • 以下音頻被视为是3D音效
    • 在SpawnSoundAtLocation中播放
    • 在SpawnSoundAttached中播放
    • 在PlaySoundForAnimNotify中播放
    • 从"Only 2D Sound"属性为false的AtomComponent中播放
  • 以下音頻被视为是2D音效
    • 在SpawnSound2D中播放
    • 从"Only 2D Sound"属性为true的AtomComponent中播放

有效化距离Culling功能的步骤

(1) 打开项目设置画面

打开项目设置窗口,显示CriWare页面。
criware_ue4_optimization_culling_project_settings.jpg

(2) 更改CriWare插件设置

设置Culling Margin Distance (Unreal Unit)。
“声源与倾听者之间的距离>(声源距离衰减的最大值 + "Culling Margin Distance")”时,將执行触发Culling。

(3) 打开Atom Cue Asset设置画面

用Asset浏览器打开AtomCue。
criware_ue4_optimization_culling_cue_asset.jpg

(4) 更改Atom Cue Asset设置

勾选“Enable Distance Culling”。

为每个Cue进行不同设置时

Distance Culling功能设置是在项目设置窗口执行;而要为每个Cue进行不同设置时,请添加以下设置。
  1. 勾选"Override Cull Settings"
  2. 设置"Cull Distance Margin"

确认声源距离衰减的最大值

需要确认声源距离衰减的最大值时,请参照下图数值。
criware_ue4_optimization_culling_cue_asset_max_distance.jpg

获取信息

  • UAtomComponent::GetCullDistance()
    • 返回当前应用于此AtomComponent的Culling边界距离。
    • 也就是说,将返回最后一次播放的Cue(最大衰减距离 + Culling的Margin距离)。
可以同时获得蓝图和C++的信息。
criware_ue4_optimization_bp_economic_tick_n_culling.jpg

批量设置多个Cue的触发Culling

要批量对多个Cue执行触发Culling设置时,使用Asset Action的属性Matrix的批量编辑较为有效。
关于如何使用属性Matrix作批量编辑,请参照 批量编辑多个Asset