本教程将展示 Unreal Wwise Integration 中加入的各种 Spatial Audio 功能。此处阐明了有关如何将 Spatial Audio 集成到游戏中的工作流程,并提供了关于如何在 Wwise 设计工具中初始化各项 Spatial Audio 功能(如 3D 总线、3D 空间化 Sound SFX 和 Reflect 效果器插件)的技术信息。
本教程分成了多个章节。A 章节主要是为了帮助您准备工程,而接下来的每个章节都将探讨一种不同的 Spatial Audio 功能。这些章节之间并不相干,您可以根据需要自由查阅。
 |
注記: 在章节中使用 Reflect 插件生成 SoundBank 时,必须获取相应的授权。 |
A – Spatial Audio 教程准备工作
 |
注記: 作为 Unreal Demo Game 的一部分,Wwise Launcher 中专门提供了一个包含各项教程所需参数的地图。若要使用该地图,则可跳过本章节。该地图名为 SpatialAudioTutorialMap。 |
A.1. 创建新的工程
按照以下步骤(基于 Wwise 2019.2 和 Unreal 4.24)来构建相应的工作环境。
- 通过 Epic Launcher 启动 Unreal。
- 新建一个空白的 C++ Unreal 工程(没有初学者内容)。
- 关闭 Unreal。
- 启动 Wwise Launcher。
- 安装 Wwise。
- 选中 Unreal Engine 选项卡。
- 点击 Integrate Wwise into Project... 按钮。
- 点击 Open in Wwise 按钮来启动 Wwise。
- 点击 Open in Unreal 按钮来启动 Unreal。
A.2. Wwise 工程准备工作
对于本教程,您需要创建 Sound SFX 和用于播放声音的 Event。
- 在 Wwise 工程中,在 Actor-Mixer Hierarchy 的 Default Work Unit 下创建新的 Sound SFX,然后导入声音。
- 确保在 General Settings 选项卡中启用 Use game-defined auxiliary sends。

创建 Sound SFX
- 在 Positioning 选项卡中,启用 Listener Relative Routing 并将 3D Spatialization 设为 Position + Orientation,然后添加 Attenuation 并将 Max distance 设为 5000。

将 3D Spatialization 设为 Position + Orientation
- 右键单击 Actor-Mixer Hierarchy 中的 Sound SFX,然后依次选择 New Event > Play。

创建声音 Event
- 保存工程。
A.3. Unreal 工程准备工作
- 根据需要灵活地创建地面、由两个房间组成的建筑以及外部障碍物。在 SpatialAudioTutorialMap 中,我们为建筑使用了自定义 Mesh,并为外部障碍物使用了 Basic Cube Static Mesh 组件。
- 在场景中放置发声体:
- 将前面章节中创建的 Event 从 WAAPI Picker 拖到 Content Browser 中。

从 WAAPI Picker 拖到 Content Browser 中
- 双击 Content Browser 中的 Event,然后直接从 SoundBank 列表创建新的 SoundBank。

创建 SoundBank

选择 SoundBank
- 将 Event 拖到场景中来创建新的
AkAmbientSound
Actor。
- 将其中一个放在外部,然后在每个 Room 中各放一个。

SpatialAudioTutorialMap
- 从 Blueprints 菜单打开 Level Blueprint,然后移除 Event BeginPlay 和 Event Tick。
- 通过用户输入来触发 Event。
- 将新建的 AkAmbientSound 从 World Outliner 拖到 Blueprint 中。
- 从 AkAmbientSound 节点查找 Post Associated Ak Event 函数。
- 右键单击 Blueprint 背景,然后搜索 Left Mouse Button。
- 将 Pressed 输出引脚连接到 "Post Associated Ak Event" Exec。
- 针对所有 AkAmbientSound 条目重复同样的步骤。

添加用户输入来触发环境声
- 保存并关闭 Level Blueprint。
A.4. 验证所作设置
- 在上部菜单中,依次选择 Build > Generate SoundBanks....,来针对 Windows 生成 SoundBank。
- 查看 Output Log 并确保已成功生成 Bank。

从 Build 菜单生成 SoundBank
- 启动场景。现在按下相应的 Button,应会听到 3D 空间化声音。
- 连接 Wwise 设计工具,然后打开 Profiler 布局(快捷键 F6)。
- 在场景中播放声音时,应会看到与以下相似的 Voices Graph。

Outside Button 的 Voices Graph
B – Reflect
在本节中,我们将使用 Spatial Audio Geometry 来将反射表面发送到 Reflect 插件。该插件可模拟声学环境中声音传播产生的早期反射。
B.1. Wwise 工程
- 为了访问出厂 Acoustic Texture 以及早期反射 Auxiliary Bus 预设,您需要导入 Reflect Factory Asset。
- 依次转到 Project > Import Factory Assets...。
- 选中 Reflect 并按下 OK。
- 使用出厂预设创建早期反射 Auxiliary Bus:
- 在 Master-Mixer Hierarchy 中,右键单击 Master Audio Bus
- 依次转到 New Child > Presets,然后选择 Early Reflection Auxiliary Bus
- 在 Effects 选项卡中双击效果器,然后执行以下操作:
- 将 Max Distance 至少设为 5,000(也就是我们在 A.2. Wwise 工程准备工作 章节中为声音设置的最大衰减距离)。
- 将 Speed of Sound 设为 34,500。

针对 Reflect 设置 Speed of Sound 和 Max Distance
- 选中 A.2. Wwise 工程准备工作 中创建的声音,并转到 Sound SFX Sound Property Editor。
- 在 General Settings 选项卡中,在 Early Reflections 下添加刚才创建并应用了 Reflect 效果器的 Auxiliary Bus。

在 Wwise 中针对声音启用 Reflect
- 保存工程。
B.2. Unreal 工程
在工程中,我们想让建筑物、地面和障碍物反射声音。实现方式有两种:AkSpatialAudioVolume 和 AkGeometryComponent。
AkGeometryComponent 可添加到 Static Mesh Actor。它会将 Static Mesh Geometry 自动发送到 Spatial Audio。另外,还可配置为发送 Simple Collision Mesh。最好将此组件用于简单形状。否则可能会向 Spatial Audio 发送太多三角形,从而导致计算负荷急剧加重。
AkSpatialAudioVolume 是一个 Brush Volume。它必须手动进行添加并围绕对象实施变换。若所需 Static Mesh 较为复杂,则可使用此 Volume 来围绕其创建简单形状。
- 在 SpatialAudioTutorialMap 中,障碍物是一个 Basic Static Mesh。我们可以轻松向其添加 AkGeometryComponent 。
- 单击 Actor,然后单击 Add Component。选择 Ak Geometry。
- 在 Geometry 分区中,选择 Simple Collision。

AkGeometryComponent
- 针对地面重复同样的步骤。
- 在 SpatialAudioTutorialMap 中,建筑物由自定义 Mesh 构成。虽然形状比较简单可以使用 AkGeometryComponent,不过在本教程中我们还是选择使用 AkSpatialAudioVolume 。AkSpatialAudioVolume 的唯一缺点是不太好在建筑物的房门位置创建开口。
- 将三个
AkSpatialAudioVolume
拖放到场景中。
- 在建筑物附近设置其中一个来用于外墙。
- 在每个 Room 附近各设一个来用于内墙。
- 确保三个
AkSpatialAudioVolume
全部启用 Enable Surface Reflectors。
- 将 Enable Room 和 Enable Late Reverb 保留为未选中状态(C – Room 和 Portal 中会讲到这两项设置)。

针对 Spatial Audio Volume 启用 Enable Surface Reflectors
B.3. 验证所作设置
- 生成 SoundBank。
- 启动场景并连接到 Wwise 设计工具。
- 在 Advanced Profiler 的 Voices Graph 视图中,应会看到应用了 Reflect 效果器的新辅助发送。
- 在玩家的初始位置,播放置于外部的声音。

Outside Button 的 Voices Graph 以及 Reflect
 |
注記: 若在播放 Room 内的声音时玩家处在房外,则既不会听到声音也不会看到任何 Reflect 发送。这是因为我们在建筑物和每个 Room 附近创建的 AkSpatialAudioVolume 是封闭的。您可以通过修改 Brush 对象或使用 Spatial Audio Portal(参见 C – Room 和 Portal 部分)来为其创建开口。 |
- 在继续执行下一步之前,打开 Profiler Settings 视图并确保启用 Spatial Audio。
- 转到 Game Object Profiler 布局(快捷键 F12)。
- 确保可以看到玩家镜头和三个发声体。
- 在 Game Object 3D Viewer 中,应会看到不同的反射表面。
- 在播放声音时,将绘制早期反射射线以显示声音的传入路径。

Game Object 3D Viewer 及早期反射
- 若无法看到射线,请确保在 Game Object 3D Viewer Settings 中启用 Reflection Paths。

Game Object 3D Viewer 及早期反射
 |
注記: 若无法在 Game Object 3D Viewer 中看到任何几何构造,则可能需要调大 Monitor Queue Pool Size。该设置位于 初始化设置 中。 |
C – Room 和 Portal
在现实声学环境中,封闭空间内的声音会通过房门和窗户等开口传到外面。Spatial Audio Room 和 Portal 可模拟此效果,方法是仅通过 Portal 传播 Room 内播放的声音。
C.1. Wwise 工程
- 在 Wwise 工程中,为每个 Room 创建新的 Auxiliary Bus。
- 右键单击相应对象来添加子 Auxiliary Bus
- 依次转到 New Child > Presets,然后选择 Room Auxiliary Bus
- 在 Effects 选项卡中,可调节 RoomVerb 效果器。

将混响效果器添加到 Auxiliary Bus
- 转到 A.2. Wwise 工程准备工作 中创建的 Sound SFX。
- 在 Positioning 选项卡中,确保勾选 Enable Diffraction 复选框。

在 Wwise 中针对声音启用衍射
- 保存工程。
C.2. Unreal 工程
- 在 Unreal 中,将新建的 Auxiliary Bus 从 Wwise Picker 拖放到 Content Browser 中。
- 双击这些 Auxiliary Bus,并将其指派给 SoundBank。
- 选中 B.2. Unreal 工程 中针对每个 Room 创建和放置的 AkSpatialAudioVolume。
- 确保启用 Enable Late Reverb 和 Enable Room。
- 在 Late Reverb 分区中,将新导入的 Auxiliary Bus 从 Content Browser 拖放到 Aux Bus 参数。
- 添加两个
AkAcousticPortal
。
- 将其放在建筑物的开口附近。
- 选中 Portal,然后在 Ak Acoustic Portal 分区中将 Initial State 设为 Open 。

将声学 Portal 拖到场景中
 |
注記: 在设置 AkAcousticPortal 的朝向时,必须确保其所连通的两个 Room 位于 Portal 的局部 Y 轴上。为了便于识别,在选中 Portal 时其周围会显示黄色条带。黄线用来分隔前后区域。在 Room 之间存在重叠时,会选用优先级最高的 Room。 |
C.3. 验证所作设置
- 针对 Windows 生成 SoundBank。
- 启动场景并待在起点位置。现在触发声音时应会听到两个 Room 内播放的声音。
- 连接 Wwise 设计工具并转到 Game Object Profiler 布局(快捷键 F12)。在 Game Object 3D Viewer 中:
- 应会看到新建的 Portal。
- 在每个发声体下方,应会看到其所在的 Room。
- 在 Room 之间移动听者时,其对应的 Room 也会变化。

Game Object 3D Viewer 及所用 Room 和 Portal
- 在播放的声音与听者不在同一 Room 时(没有直接视线):
- 因为 Portal 穿透了反射表面,所以仍会听到声音。
- 会看到穿过 Portal 的早期反射路径。
- 会看到在 Portal 边缘发生衍射的声音传播路径。

在 Game Object 3D Viewer 中查看 Spatial Audio 路径
 |
注記: 若 World 中包含若干 Spatial Audio Room,则将改变声笼/声障算法的行为,并使用 Spatial Audio Room 提供的附加信息。若发声体和听者之间的视线测试失败,则会发生以下某种情况。
- 在听者和发声体处在同一 Room 时,仅针对干声路径设置 Wwise 声障滤波器。
- 在发声体和听者处在不同 Room 时,针对湿声和干声路径设置 Wwise 声障滤波器。
- 在没有 Spatial Audio Room 的情况下,算法会假定所有处在听者视线之外的声音都会被遮蔽,同时针对湿声和干声路径设置 Wwise 声笼滤波器。
|
在 Wwise 中,您可以在 Project Settings 的 Obstruction/Occlusion 选项卡下微调 Portal 阴影区的滤波响应。

Obstruction Volume 曲线

Obstruction LPF 曲线
C.4. Portal 和 Reverb
通过 Portal 传播的声音可进行混响处理并输出到听者当前所在 Room。以下步骤阐述了如何在 Spatial Audio Tutorial Map 中予以配置。
- 在 Wwise 工程中:
- 找到 Room Reverb 所用 Auxiliary Bus。我们希望将发出声音的 Room 的混响效果馈送到其他 Room 的混响效果中。
- 在 Auxiliary Bus Property Editor 的 General Settings 选项卡中,确保启用 Use game-defined auxiliary sends。

针对 Room Auxiliary Bus 启用 Use game-defined auxiliary sends
- 生成 SoundBank,然后启动场景并连接到 Wwise 设计工具。
- 在启用了辅助发送的 Room 中播放声音,然后转到相连的 Room。
- 您应会看到声音信号的湿声部分还会馈送听者所在 Room 的混响效果。

SmallRoom 的混响效果被馈送到了 LargeRoom 的混响效果中
C.5. Room Tone
有时,Room 内会有像空调嗡嗡声这样的特定环境声。为了重现这种效果,您可以针对 Spatial Audio Room 游戏对象发送 Event。在听者和发声体处在同一 Room 时,声音会被定位在听者所在位置。在听者和发声体处在不同 Room 时,听者会通过连通两个 Room 的 Portal 听到房间底噪 (Room Tone)。
- 在 Wwise 工程中:
- 创建新的 Sound SFX 并用于房间底噪。
- 若要将声音发送到混响效果器,则启用 Use game-defined aux sends。
- 在必要时,为距离衰减曲线添加衰减。
- 右键单击 Sound SFX,然后依次选择 New Event > Play,来创建带有房间底噪的 Play Event。
- 在 Unreal 中:
- 将前面章节中创建的 Event 从 WAAPI Picker 拖到 Content Browser 中。
- 在其中一个 Room 对应的 Ak Event 分区下,将此 Event 添加到 Ak Audio Event 参数。
- 调节 Aux Send Level 来将部分声音馈送到该 Room 的混响效果中。
- 您可以通过选中 Auto Post 方框来在 BeginPlay 时发送房间底噪 Event,也可调用常用的 Blueprint 函数来针对游戏对象发送 Event。

在 Spatial Audio Volume 的 AkEvent 分区中启用 Room
- 在 Spatial Audio Tutorial Map 中,我们在 Level Blueprint 中使用了 Blueprint 函数来激活和停用房间底噪。
- 在 World Outliner 中选中带有房间底噪的 AkSpatialAudioVolume 时,右键单击 Level Blueprint 来创建引用对象。
- 从引用对象拖动连线,并搜索 Post Associated Ak Event。
- 按照相同方式搜索 Stop 函数。
- 添加按键作为输入节点。

通过 Level Blueprint 播放和停止房间底噪
- 生成 SoundBank。
- 启动场景并连接到 Wwise 设计工具。
- 转到带有房间底噪的 Room,并按下按键来触发房间底噪。确认可以听到声音。
- 在 Advanced Profiler 视图中,应会看到当前触发的 Event。

在播放房间底噪时查看 Advanced Profiler 视图
- 在 3D Game Object Viewer 中,可一边来回移动听者,一边察看 Room 游戏对象。
- 若听者和发声体处在同一 Room,则 Room 会在听者所在位置播放声音。您会看到 Room 游戏对象跟随“听者”游戏对象。
- 若听者和发声体处在不同 Room,则会将 Room 游戏对象定位在 Portal 位置,并在其与“听者”游戏对象之间绘制路径。

在 Game Object 3D Viewer 中察看 Room 游戏对象
D – Diffraction
在发声体和听者之间的视线被障碍物阻挡时,Spatial Audio 会围绕该物体创建衍射路径并对行为进行逼真的模拟。根据声音绕过障碍物边缘时的路径角度,声音会被衰减,以此模拟声障效果。
 |
注記: 在使用 Spatial Audio Diffraction 时,请在 Unreal Engine 端禁用声障/声笼。同时将发声体 (AkComponent) 的 Occlusion Refresh Interval 设为 0。 |
在 SpatialAudioTutorialMap 中,我们可以在障碍物外围和建筑物外墙附近添加 Spatial Audio Diffraction。
- 在 Wwise 工程中,确保针对相应的 Sound SFX 启用衍射以便为发声体应用衍射效果。
- 在 Sound Property Editor 的 Positioning 选项卡中启用 Diffraction。
- 在 Unreal 中:
- 单击每个相应的 AkAmbientSound Actor 以便播放启用了衍射的声音。
- 将 Occlusion Refresh Interval 设为 0。
- 单击用于建筑物外墙的 AkSpatialAudioVolume。
- 在 Acoustic Surface Properties 分区中,通过选中相应的复选框来启用 Diffraction。
- 单击障碍物 Static Mesh 外围。
- 在 Geometry 分区中,通过在 Diffraction 下选中相应的复选框来启用 Diffraction。
- 生成 SoundBank。
- 播放声音并连接到 Wwise。
- 您应当能够在启用了衍射的几何构造上看到衍射边缘,并在播放启用了衍射的声音且发声体和听者之间有障碍物阻挡时看到衍射路径。

在 Game Object 3D Viewer 中查看衍射路径
E – 透射
在发声体和听者之间存在障碍物时,可能会有部分声音透射到障碍物的另一侧。Spatial Audio 可通过在声音的直达路径上应用声笼滤波来模拟这一现象。声笼值 (0 ~ 1) 可作用于 AkSpatialAudioVolume 或 AkGeometry 组件。该值稍后会被发送到 Wwise,进而根据工程的声笼曲线应用关联的滤波器。一般来说,值为 1.0 时表示完全遮蔽,值为 0.0 时表示声音可穿透几何构造。
- 在 Spatial Audio Init Settings 中选中 Enable Transmission。

Spatial Audio Init Settings
- 当声音在从发声体到听者的直达路径中遇到 Spatial Audio Geometry 或 Spatial Audio Room 时,其透射值等于相应组件的最大声笼值。
- 在 AkSpatialAudioVolume 组件上:
- 若组件启用 Surface Reflector,则可将声笼值关联到每个 Acoustic Surface。

将声笼值关联到每个 Acoustic Surface
- 若组件启用 Room,则可在 Wall Occlusion 中将声笼值关联到 Room 的墙壁。

在 Wall Occlusion 中将声笼值关联到 Room 的墙壁
- 在 AkGeometry 组件上:
- 可在 Acoustic Properties Override 参数中覆盖声笼值。
- 对于 Collision Mesh

在 AkGeometry 组件中覆盖 Simple Collision Mesh 的声笼值
- 对于 Static Mesh 的每种 Material

在 AkGeometry 组件中覆盖 Static Mesh 的声笼值
- 还可在 Integration Settings 的 AkGeometry Surface Properties Map 中按照 Physical Material 设置声笼值。

将声笼值关联到 Physical Material
- 在 Wwise 设计工具内,在 Project Settings 的 Obstruction/Occlusion 选项卡中调节声笼曲线。

Occlusion Volume 曲线

Occlusion LPF 曲线