本教程将展示 Wwise 2017.1 提供的最新功能以及 Unreal 插件中新增的 Spatial Audio 功能。在此,我们会介绍在游戏中集成 Spatial Audio 组件的工作流程及相关技术信息,来了解如何在 Wwise 设计工具中初始化 Spatial Audio 元素(如 3D 总线、3D 空间化 Sound SFX 和 Reflect Effect 插件),并使用 Unreal Engine 在游戏中导入 Spatial Audio 组件。
我们假定读者具备基本的 Wwise 和 Unreal Engine 使用知识。不过请放心,本文档中会提供详尽的说明。无论用户处于怎样的专业水平,都可顺利完成本教程。如需了解更多信息,请参阅 Unreal 文档。
在学习本教程的过程中,我们会创建四个不同的虚拟声学区域来分别展示新增 Spatial Audio 插件的对应功能。每个区域的中央都设有作为发声体的环境声。在本例中,听者按照默认设置绑定至镜头。您可以通过来回移动来体验不同的声学环境。
为了构建相应的工作环境,您必须按照顺序完成 A 、B 和 C 章节中所述的步骤。在完成这三个章节之后,您可以根据自身需要单独完成后续的 D 、E 、F 和 G 章节。
info |
注記: 对于需要使用 Reflect 插件的章节,必须获取相应的授权。 |
A – 设置工程
为了构建相应的工作环境,请使用最新版本的 Wwise 和 Unreal 完成以下步骤。
- 通过 Epic Launcher 启动 Unreal。
- 新建一个空白的 C++ Unreal 工程(没有初学者内容),并将其命名为 TestSpatialAudio。
- 关闭 Unreal。
- 启动 Wwise Launcher。
- 安装 Wwise。
- 选中 Unreal Engine 选项卡。
- 点击 Integrate Wwise into Project... 按钮。
- 点击 Open in Wwise 按钮来启动 Wwise。
- 点击 Open in Unreal 按钮来启动 Unreal。
B – 准备工作
在本节中,我们将调整地板大小并设置墙壁和 Portal,以此划定四个不同的区域来代表前述声学环境,并在其中放置 Spatial Audio 组件。
- 选中地板并设置新的 Transform。
- 将 Location 设为 (x=0.0, y=0.0, z=0.0)。
- 将 Scale 设为 (x=2.0, y=2.0, z=1.0)。
- 按照以下 Location 和 Scale 使用 8 个 Cube 创建墙壁:
- Location (x=775.0, y=0.0, z=100.0) Scale (x=4.5, y=0.25, z=2.0)。
- Location (x=225.0, y=0.0, z=100.0) Scale (x=4.5, y=0.25, z=2.0)。
- Location (x=-225.0, y=0.0, z=100.0) Scale (x=4.5, y=0.25, z=2.0)。
- Location (x=-775.0, y=0.0, z=100.0) Scale (x=4.5, y=0.25, z=2.0)。
- Location (x=0.0, y=-775.0, z=100.0) Scale (x=4.5, y=0.25, z=2.0) Rotation (x=0.0, y=0.0, z=90.0)。
- Location (x=0.0, y=-225.0, z=100.0) Scale (x=4.5, y=0.25, z=2.0) Rotation (x=0.0, y=0.0, z=90.0)。
- Location (x=0.0, y=225.0, z=100.0) Scale (x=4.5, y=0.25, z=2.0) Rotation (x=0.0, y=0.0, z=90.0)。
- Location (x=0.0, y=775.0, z=100.0) Scale (x=4.5, y=0.25, z=2.0) Rotation (x=0.0, y=0.0, z=90.0)。
- 将 Player 起点移到:
- Location (x=-500.0, y=-500.0, z=100.0)。
- 为了便于区分各个 Room,请在指定的位置添加以下 PointLight,并将 Intensity 设为 50,000:
- Red:Location (x=-500.0, y=-500.0, z=500.0)。
- Blue:Location (x=500.0, y=-500.0, z=500.0)。
- Green:Location (x=500.0, y=500.0, z=500.0)。
- Yellow:Location (x=-500.0, y=500.0, z=500.0)。
- 另存为 NewMap。
构建工作环境
C – 在 Unreal 中添加 Reference Sound
第一个区域添加了一个 3D 定位声音。随着听者围绕声源来回移动,声音需要正确的声像摆位和遮蔽/阻挡处理。在听者(即主镜头)移到区域之外或位于障碍物组件(如墙壁、地板或天花板)后方时,会出现遮蔽/阻挡情况。
- 在 Wwise 工程中,在 Actor-Mixer Hierarchy 的 Default Work Unit 下创建新的 Sound SFX,并将其命名为 ReferenceSound,然后导入冲激声音。
创建 Sound SFX
- 确保启用 Use game-defined auxiliary sends 和 Listener Relative Routing,并将 3D Spatialization 设为 Position。
将 3D Spatialization 设为 Position
- 创建关联的 Event 并将其命名为 PlayReferenceSoundTest,然后将 ReferenceSound 拖到上面。
创建声音 Event
- 保存工程。
- 在 Unreal 中,依次打开 Window > Wwise Picker,然后将 "PlayReferenceSoundTest" Event 拖到 Content Browser 中。
从 Wwise Picker 拖到 Content Browser 中
- 双击 "PlayReferenceSoundTest" Event,然后直接在 SoundBank 列表中创建新的 SoundBank,并将其命名为 TestSpatialAudioBank。
创建 SoundBank
选择 SoundBank
- 将 "PlayReferenceSoundTest" Event 拖到场景中,来创建新的
AkAmbientSound
。
- 将 Location 设为 (x=-500.0, y=-500.0, z=100.0)。
创建 AkAmbientSound
- 从 Blueprints 菜单打开 Level Blueprint,然后移除 Event BeginPlay 和 Event Tick。
- 将新建的 PlayReferenceSoundTest 条目从 World Outliner 拖到 Blueprint 中。
- 右键单击 Blueprint 背景,然后搜索 Left Mouse Button。
-
再次右键单击 Blueprint 背景,然后搜索 Post Event。
- 将 Pressed 输出引脚连接到 Post Event Exec,并将 PlayReferenceSoundTest 组件连接到 Actor 输入引脚。
-
在 Post Event 中选择 "PlayReferenceSoundTest" AkEvent。
添加用户输入来触发环境声
- 在上部菜单中,依次选择 Build > Generate SoundBanks....,来针对 Windows 生成 SoundBank。
从 Build 菜单生成 SoundBank
-
查看 Output Log 并确保已成功生成 Bank。
查看 Output Log 并确保已成功生成 SoundBank
- 启动场景。现在按下 Left Mouse Button,应会听到 3D 空间化声音。
D – 添加 Late Reverb
第二个区域用于演示如何使用 AkSpatialAudioVolume
添加 Late Reverb,并将其应用于该区域内包含的 AkAmbientSound
。
- 在 Wwise 工程中,在 Master Audio Bus 下创建 Auxiliary Bus,并将其命名为 TestReverbAuxBus。
为混响创建 Auxiliary Bus
- 添加 Wwise RoomVerb Effect 并使用 Cathedrals > Holy 预定义 ShareSet。
- 创建第二个 Event 并将其命名为 PlayLateReverbTest,然后将 "ReferenceSound" Sound SFX 拖到上面。
创建 Play Event
- 保存工程。
- 在 Unreal 中,将
"AkSpatialAudioVolume"
Volume 从 Volumes 选择项拖到场景中。
- 将 Location 设为 (x=500.0, y=-500.0, z=100.0)。
- 将 Scale 设为 (x=5.0, y=5.0, z=1.0)。
创建新的 Spatial Audio Volume
- 确保此
AkSpatialAudioVolume
只启用了 Enable Late Reverb,而禁用了 Enable Surface Reflectors 和 Enable Room。
选中 Enable Late Reverb
- 将新建的 TestReverbAuxBus 和 PlayLateReverbTest 从 Wwise Picker 拖到 Content Browser 中。
从 Wwise Picker 拖动 Auxiliary Bus 和 Event
- 双击 PlayLateReverbTest,然后将其指派给 TestSpatialAudioBank。
将 Bus 和 Event 添加到 Bank
- 选中新建的 AkSpatialAudioVolume,然后在 Late Reverb 分区中将 Aux Bus 设为 TestReverbAuxBus。
在 Late Reverb 分区中选择 Aux Bus
- 将 "PlayLateReverbTest" Event 拖到场景中,来创建
AkAmbientSound
。
- 将 Location 设为 (x=500.0, y=-500.0, z=100.0)。
将 Event 拖到场景中
- 针对 PlayLateReverbTest 重复步骤 C-11 ~ C-13 来触发声音(您可以映射键盘按键而非鼠标按钮)。
- 重新生成 SoundBank。
- 启动场景并进入 Volume。在触发 PlayReferenceSoundTest 时,应会听到应用了混响效果器的声音。
info |
注記: 若针对 AkSpatialAudioVolume 选中 Enable Room,则带有混响效果器的 Auxiliary Bus 也须启用 3D 定位。 |
E – 添加 Surface Reflector
第三个区域用于演示如何使用 Surface Reflector 模拟声学环境中声音传播产生的早期反射。在为声波传播建模时我们采用了镜像声源法,基于游戏几何构造以及相应的时间延迟(距离)、振幅、滤波参数来进行模拟,以此逼真地重现声学环境。同时,通过实时计算来评估声波从发声体到听者所在位置的不同路径。最终,生成具有强烈空间感的声学环境。您可以通过 Wwise Reflect Effect Editor 清楚地看到每个反射声的距离/振幅。
- 在 Wwise 中,创建第三个 Event 并将其命名为 PlayReflectTest,然后将 "ReferenceSound" Sound SFX 拖到上面。
在 Wwise 中创建新的 Event
- 在 Master Audio Bus 下创建 Aux Bus 并将其命名为 TestReflectAuxBus,然后为其应用 Reflect 插件。
在 Wwise 中创建新的 Aux Bus
- 确保选中 Use game-defined auxiliary sends,并启用 Listener Relative Routing,同时将 3D Spatialization 设为 None。
针对 Auxiliary Bus 将 3D Spatialization 设为 None
- 将 Reflect 的 Max Distance 设为 10,000,并将 Speed of Sound 设为 34,500。
针对 Reflect 设置 Speed of Sound 和 Max Distance
- 保存工程。
- 在 Unreal 中,将 PlayReflectTest 和 TestReflectAuxBus 从 Wwise Picker 拖到 Content Browser 中。
- 双击 "PlayReflectTest" Event,然后将其指派给 TestSpatialAudioBank。
- 将 PlayReflectTest 拖到场景中,来创建
AkAmbientSound
:
- 将 Location 设为 (x=500.0, y=500.0, z=100.0)。
- 将 AkSpatialAudioVolume 拖到场景中。
- 将 Location 设为 (x=500.0, y=500.0, z=100.0)。
- 将 Relative Scale 设为 (x=5.0, y=5.0, z=1.0)。
- 确保此
AkSpatialAudioVolume
启用了 Enable Surface Reflectors,而禁用了 Enable Late Reverb 和 Enable Room。
将 Spatial Audio Volume 添加到场景中
- PlayReflectTest
AkAmbientSound
应当在 AkSpatialAudioVolume
之内。
- 选中 PlayReflectTest
AkAmbientSound
,然后转到 Spatial Audio 选项,并将 Early Reflection Aux bus 设为 TestReflectAuxBus。
- 另外还可针对此
AkAmbientSound
启用 Debug Draw 并显示一阶反射 (Ak Component > Spatial Audio > Debug Draw)。
启用 Debug Draw 选项并显示一阶反射
- 针对 PlayReflectTest 重复步骤 C-11 ~ C-15 来触发声音(您可以映射键盘按键而非鼠标按钮)。
添加用户输入来触发声音
- 重新生成 SoundBank。
- 启动场景并进入 Volume。在触发
PlayReflectTest
时,应会看到绘制的反射路径以及输出到带有 Reflect 插件的 Aux Bus 的声音。
F – 添加 Room 和 Portal
在逼真的声学环境中,可将 Portal(如窗户或其他开口)用作新的声源,以此模拟听者位于声源所在 Volume 之外的情形。您可以使用 AkAcousticPortal
为这种情况建模。为此,可使用 Auxiliary Bus 输出 Volume 内的声音内容,并将其作为新的 3D 声源暴露在临近声学空间中。
-
在 Wwise 中,创建新的 Auxiliary Bus 并将其命名为 TestPortalAuxBus。
- 确保选中 Use game-defined auxiliary sends 来启用 3D 定位。
创建新的 Auxiliary Bus 并启用 3D Spatialization
- 添加 Wwise RoomVerb Effect 并将参数设为 Room_Medium。
将混响效果器添加到 Auxiliary Bus
- 创建第四个 Event 并将其命名为 PlayPortalTest,然后将 "ReferenceSound" Sound SFX 拖到上面。
添加新的 Play Event
- 保存工程。
- 在 Unreal 中,将 PlayPortalTest 从 Wwise Picker 拖到 Content Browser 中。
-
将 TestPortalAuxBus 拖到 Content Browser 中。
将 Event 和 Auxiliary Bus 添加到 Content Browser 中
- 双击 "PlayPortalTest" Event,然后将其指派给 TestSpatialAudioBank。
针对 Event 选择 SoundBank
- 添加新的
AkSpatialAudioVolume
。
- 将 Location 设为 (x=-500.0, y=500.0, z=100.0)。
- 将 Absolute Scale 设为 (x=5.0, y=5.0, z=1.0)。
- 在 Late Reverb 分区中选择 TestPortalAuxBus 作为 Aux Bus。
将 Spatial Audio Volume 添加到场景中并在 Late Reverb 分区中选择 Auxiliary Bus
- 确保针对此
AkSpatialAudioVolume
启用 Enable Late Reverb 和 Enable Room,而禁用 Enable Surface Reflectors。
确保启用 Enable Room
- 重复步骤 F-1 ~ F-7 来在 Late Reverb 分区中添加另一 Aux Bus(带有 RoomVerb 预设),并将其命名为 TestReferenceAuxBus。
创建新的 Auxiliary Bus 并启用 3D Spatialization
将混响效果器添加到 Auxiliary Bus
- 添加另一
AkSpatialAudioVolume
。
- 将 Location 设为 (x=-500.0, y=-500.0, z=100.0)。
- 将 Absolute Scale 设为 (x=5.0, y=5.0, z=1.0)。
- 确保针对此
AkSpatialAudioVolume
启用 Enable Late Reverb 和 Enable Room,而禁用 Enable Surface Reflectors。
添加第二个 Audio Volume 并启用 Enable Room
- 在 Late Reverb 分区中选择 TestReferenceAuxBus 作为 Aux Bus。
在 Late Reverb 分区中选择 Auxiliary Bus
- 添加三个
AkAcousticPortal
。
- Location (x=-500.0, y=0.0, z=100.0) Scale (x=0.5, y=0.5, z=1.0)。
- Location (x=0.0, y=-500.0, z=100.0) Scale (x=0.5, y=0.5, z=1.0) Rotation (x=0.0, y=0.0, z=90.0)。
- Location (x=-500.0, y=0.0, z=100.0) Scale (x=0.5, y=0.5, z=1.0) Rotation (x=0.0, y=0.0, z=90.0)。
将新建的声学 Portal 拖到场景中
- 选中新建的 Portal,然后在 Ak Acoustic Portal 分区中将 Initial State 设为 Open。
确保 Portal 处于 Open 状态
- 将 PlayPortalTest 拖到场景中。
- 将 Location 设为 (x=-500.0, y=500.0, z=100.0)。
将新建的 Event 拖到场景中
- 针对 PlayPortalTest 重复步骤 C-11 ~ C-13 来触发声音(您可以映射键盘按键而非鼠标按钮)。
- 针对 Windows 重新生成 SoundBank。
- 启动场景并待在起点位置。在触发 PlayPortalTest 时,应会听到从 Portal 传来的声音。
info |
注記: 在设置 AkAcousticPortal 的朝向时,必须确保其所连通的两个 Room 位于 Portal 的局部 Y 轴上。为了便于识别,在选中 Portal 时其周围会显示黄色条带。黄线用来分隔前后区域。在 Room 之间存在重叠时,会选用优先级最高的 Room。 |
info |
注記: 若空间中包含若干 Spatial Audio Room,则将改变声笼/声障算法的行为,并使用 Spatial Audio Room 提供的附加信息。若发声体和听者之间的视线测试失败,则:
- 在听者和发声体处在同一 Room 时,设置 Wwise 声障滤波器(仅针对干声路径)。
- 在发声体和听者处在不同 Room 时,设置 Wwise 声障滤波器(针对湿声和干声路径)。
- 在没有 Spatial Audio Room 的情况下,算法会假定所有处在听者视线之外的声音都会被遮蔽,同时设置 Wwise 声笼滤波器(针对湿声和干声路径)。
|
info |
注記: 在 F 章节添加了 Room 之后,您会发现在听者处在 Room 内而之前章节中创建的声音处在 Room 外时声音会被遮蔽。同样地,在声音处在 Room 内而听者处在 Room 外时声音也会被遮蔽。 |
在 Wwise 中,您可以在 Project Settings 的 Obstruction/Occlusion 选项卡下微调 Portal 阴影区的滤波响应。
Obstruction Volume 曲线
Obstruction LPF 曲线
Occlusion Volume 曲线
Occlusion LPF 曲线
G – 添加 Spot Reflector
Spot Reflector 是本教程最后要介绍的一项功能,主要用于为特殊的声学反射建模。我们可以使用 Spot Reflector 为远距离的虚拟地理元素(人造\天然)建模,以此生成奇特的声学回声效果。比如,大山或高墙。Spot Reflector 在发声体即为听者的情况下应用效果最佳。我们可以直接将 Spot Reflector 拖到声学环境中,并让引擎根据发声体和听者的各自位置以及反射点之间的实际距离,准确计算声学延迟。
- 在 Wwise 工程中,创建新的 Auxiliary Bus 并将其命名为 TestSpotReflectorAuxBus,然后为其应用 Reflect 插件。
添加新的 Auxiliary Bus 并应用 Reflect
- 确保启用 Use game-defined auxiliary sends 和 Listener Relative Routing,并将 3D Spatialization 设为 None。
确保将 3D Spatialization 设为 None
- 将 Reflect 的 Max Distance 设为 10,000,并将 Speed of Sound 设为 34,500。
确保设置 Reflect 的 Speed of Sound 和 Max Distance
- 保存工程。
- 在 Unreal 中,将 TestSpotReflectorAuxBus 从 Wwise Picker 拖到 Content Browser 中。
- 打开 Level Blueprint 并执行以下操作:
- 在 Player 发声体上启用 Spot Reflector。
- 通过 Player 发声体发送 "PlayReferenceSoundTest" Event(您可以映射键盘按键而非鼠标按钮)。
在 Player 组件上启用 Spot Reflector 并通过其发送 PlayReferenceSoundTest
- 将新建的
AkSpotReflector
对象拖到场景中。
- 将 Location 设为 (x=-150.0, y=-150.0, z=100.0)。
- 在
AkSpotReflector
对象上,将 Aux Bus 设为 TestSpotReflectorAuxBus。
将新建的 Spot Reflector 拖到场景中
- 重新生成 SoundBank。
- 启动场景。在通过 Player 发声体触发新建的 Event 时,若发声体和 Spot Reflector 处在同一 Room,应会听到来自 Spot Reflector 的反射声。在 Effect Editor 中打开 "TestSpotReflectorAuxBus" Auxiliary Bus 上应用的 Reflect 插件时,列表和坐标图中应会显示反射路径。