本教程以下步骤将展示如何结合 Spatial Audio 使用新的 Reflect 插件。为了确保正常使用工程,您需要获取 Reflect 插件授权。
注意:本教程假定您已完成 Spatial Audio 教程准备工作 。不过,并不要求完成 Room 和 Portal 教程 ;两个教程并不相干。
A. Wwise Project(工程)
我们需要在 Wwise 工程中添加 Auxiliary Bus 并为其应用 Reflect 插件,另外还要导入 Acoustic Texture。
- 在 Master Audio Bus 下添加 Auxiliary Bus。
- 在 Auxiliary Bus Property Editor 中:
- 在 Effects 选项卡中,添加 Wwise Reflect Effect。
Auxiliary Bus Property Editor Effects tab for Reflect
- 在 Positioning 选项卡中,选中 Listener Relative Routing,并将 3D Spatialization 设为 None。
Auxiliary Bus Property Editor Positioning tab for Reflect
- 从 Project > Import Factory Assets... 菜单导入 Reflect Acoustic Textures。
- 它们将被添加到 Project Explorer 视图的 ShareSets 选项卡中的 Virtual Acoustics 文件夹。
Factory Reflect Acoustic Textures in the Project Explorer ShareSets tab
- (可选) 在 Default Work Unit 下的 Virtual Acoustics 文件夹中,可添加自定义 Acoustic Texture。
- 保存工程。
B. Spatial Audio Emitter
为了使用新创建的 Reflect 辅助总线,我们需要修改 Spatial Audio Emitter。
- 在 Wwise Picker 中刷新 Wwise 工程:Windows > Wwise Picker
- 生成 SoundBank。
Wwise Picker
- 修改每个按钮的 Ak Spatial Audio Emitter 组件。
- 为 Reflect Aux Bus 选取 Reflect Auxiliary Bus。
- 将 Reflections Order 设为 2。
-
Reflections Aux Bus Gain 设为 1。 将 Reflection Max Path Length 设为 100000。
- 在 Debug Draw 下选中 Draw First Order Reflections 和 Draw Second Order Reflections。
Ak Spatial Audio Emitter for Surface Reflector
C. Surface Reflector 组件
您可以使用 Ak Surface Reflector 组件来模拟早期反射。为此,可利用游戏的现有网格(mesh)来添加表面反射器。假如形状太过复杂,可能就要添加新的对象来作表面反射器。
C.1. 使用现有网格
通过直接使用现有网格,无需创建新的对象,便可为各个网格设置不同的声学材质。不过,假如形状十分复杂,可能会将太多三角形发送到 Spatial Audio API,进而导致游戏的运行速度变慢。另外还有一个限制,就是每个网格只能指派一种材质。对于在本教程来说,这样会无法为房间内部和外部分别设置不同的声学材质。 在 Unity Integration 提供的场景中,表面反射器采用的恰恰是这种方法。
- 选择 3.A. 环境 中创建的所有墙壁、天花板和地板,并添加 Ak Surface Reflector 组件。
- 在 Acoustic Texture 参数中,选择声学材质,或保留设为 None 以便获得未经滤波的反射声。
Ak Surface Reflector component
- 启动游戏。
- 在 \sub_surface_reflector_emitter 章节,我们已在 Debug Draw 下启用反射路径绘制功能,所以应该可在 Scene 窗口中看到射线从发声体到听者的投射路径(为了便于查看射线,我们在下图中移除了天花板)。蓝色射线代表一阶反射声,它们在抵达听者前曾被一个表面反射。黄色射线代表二阶反射声。反射点处显示有三角形的名称。该名称由游戏对象的名称和三角形的编号组成。一个 Cube 包含 12 个三角形,每个侧面各两个。
Top view of early reflection drawings for existing mesh surface reflectors
- 通过启用 Gizmos,可在 Game 窗口中查看射线(如下图所示)。在这种视角下,还可看到 Debug Draw 选项绘制有当前反射表面所包含的三角形。除了此视图中的天花板,声音还会在天花板的三角形 7 和 6 上反射。
First person view of early reflection drawings for existing mesh surface reflectors
- 在 Wwise 中连接游戏,并转到 Profiler 布局。在 Voices Graph 中,应会看到与 Button Small Room 发声时相似的情形。
Button Small Room Voice Graph with Reflect Effect
- 在 Voices Graph 中,双击应用有 Reflect Effect 的 Auxiliary Bus。转到 Effects 选项卡,并双击 Reflect Effect。在播放声音时,坐标图中会显示当前反射声,左侧会显示 Reflect Effect Editor 列表。在下图中,所有墙壁和天花板都应用了 Drywall 声学材质,只有地板应用了 Tile 声学材质。在列表中显示有两种材质时,表示声音为二阶反射声。
Reflect Effect Editor View
C.2. 备选方案:创建新的音量
通过新建未应用网格渲染器的游戏对象,可以简化复杂的形状。在此选读章节中,我们将展示如何为小房间内部设置表面反射器音量。 另外,您也可以将部分网格设为表面反射器,同时创建一个未应用网格渲染器的对象。示例通过将各个网格设为表面反射器,来单独为房间内的墙壁设置不同的材质;通过添加外部音量,来为房间外的墙壁设置截然不同的材质。 除了 Cube,还可根据需要使用 Quads 来设置不同的材质。在使用 Quads 时要注意避免交叉,以防声音渗透到形状之外。 使用 Cube 创建简单的未经渲染的网格:GameObject > 3D Object > Cube
对象名称 |
位置 |
旋转 |
比例 |
Small Room Interior |
(-2, 2.875, -6) |
(0, 0, 0) |
(11, 5.25, 7.5) |
-# 移除 <b>Mesh Renderer</b> 组件。
-# 在 <b>Box Collider</b> 组件中选中 <b>Is Trigger</b>。
-# 添加 Ak <b>Surface Reflector</b>。
- 启动游戏。
- 因为我们简化了房间的形状,所以房门现在成了反射表面的一部分。在站在房间外部时,不会听到任何来自 Button Small Room 的反射声。不过,在房门打开时,会听到来自 Button Outside 的反射声。您可能也注意到了,反射点的名称现在与 Small Room Interior 对应。
Top view of early reflection drawings for a new surface reflector volume when the emitter is outside
- 在进入小房间时,会显示 Button Small Room 的调试绘图,并隐藏 Button Outside 的调试绘图。
Top view of early reflection drawings for a new surface reflector volume when the emitter is inside