本教程将展示如何结合 Spatial Audio 使用 Room 和 Portal。以下章节会详细讲解相关步骤:
A. Wwise 工程
For this tutorial, we will need to add Reverb Effects and modify Diffraction curves to hear diffraction through a portal when loosing sight of an emitter.
- 使用 Room 预设添加两条 Auxiliary Bus。
- 右键单击 Master Audio Bus,然后依次转到 New Child > Presets,并选择 Room Auxiliary Bus。
- 在 Effects 选项卡中,为每个 Room 选择不同的效果器。比如,为 SmallRoom 选择 Rooms/Room_Medium,为 LargeRoom 选择 Cathedrals/Medium。
Auxiliary Bus Property Editor Effects tab for rooms
- 修改 Spatial Audio 教程准备工作 中添加的 Sound SFX
- 在 Positioning 选项卡中,确保启用 Diffraction and Transmission。
在 Sound Property Editor 的 Positioning 选项卡中启用 Diffraction and Transmission
- Navigate to Project > Project Settings > Environmental Curves
- Change the Diffraction curves to your liking. For example, this is what is used in the Wwise Unity Demo scene project:
Curve | Point 1 | Point 2 | Curve Type |
X | Y | X | Y |
Diffraction Volume | 0 | 0 | 100 | -3 | Linear |
Diffraction LPF | 0 | 0 | 100 | 60 | Linear |
Transmission Volume | 0 | 0 | 100 | -12 | Sine (Constant Power Fade In) |
Transmission LPF | 0 | 0 | 100 | 75 | Sine (Constant Power Fade Out) |
- Here's how the Diffraction Volume curve looks like:
Environmental Curves in the Project Settings
- 保存工程。
- 在 Unity 工程中,在 Wwise Picker (Windows > Wwise Picker) 内刷新 SoundBank
- 生成 SoundBank
Wwise Picker
B. Room
我们需要指定 Room 在场景中的位置。为此,我们将使用 AkRoom 组件。
- 在 Wwise Unity Demo Scene 的教程场景中,我们添加了 Cube Mesh 来代表建筑中每个 Room 的内侧。假如您刚完成 Surface Reflector 教程 ,可使用带有 AkSurfaceReflector 组件的 GameObject。
- 添加 Cube (GameObject > 3D Object > Cube)
- 移除 Mesh Renderer 组件。
- 在 Box Collider 组件中选中 Is Trigger。
- 添加 AkRoom 组件。
- 为 Reverb Aux Bus 选取相应的 Auxiliary Bus。
- 警告消息会提示将 Rigidbody 组件添加到 Room。注意,执行该操作后将允许在 AkRoom 和 AkRoomAwareObject 组件之间进行交互。我们可以按照下一步所述来添加这些组件。
AkRoom 组件
因为要使用 Room,所以必须通过添加 AkRoomAwareObject 组件来将所有听者和发声体设为 Room Aware。
- 已经有 AkRoomAwareObject 组件自动添加到了 Spatial Audio 听者,请确保该组件处于启用状态。
AkRoomAwareObject 组件
- 您可能会看到两条警告消息(如上图所示)。
- 第一条提示需要将 Rigidbody 组件添加到 Room 或当前对象。若 Room 尚未绑定该组件,请单击 Add Rigidbody。
- 第二条是关于 Collider 的警告消息。每个 AkRoomAwareObject 都要具有 Collider 才能与 AkRoom 组件进行交互。
C. Portal
- 在听者和发声体不在同一 Room 时,声音会被 Room 的墙壁阻挡。您可以为其设置透射损失值(详见 /ref pg_obs_occ 章节)。否则,便需添加 Portal 以便通过所需开口传播直达声音。在 SpatialAudioTutorial 场景中,有两个可以放置 Portal 的开口:一个设在外部区域和 Small Room 之间的开口上,另一个设在两个 Room 之间。
- 创建两个 AkRoomPortal 组件 (GameObject > Wwise > Room Portal),并将其放在开口附近。
- 在 Scene 窗口中,Portal 周围显示有黄色条带(用来指示门户大小)及其所应设置的朝向。红色线条用来划分 Portal 的前后区域。其中,局部 Z 轴所指方向为前部。
在 Scene 窗口中创建 AkRoomPortal 组件
- 在 AkRoomPortal 组件中:
- 将 Open On 设为 Start。
- 将 Close On 设为 Nothing。
- 确保 Back Room 和 Front Room 显示正确的 AkRoom 组件。
- Small Room 和外部区域之间的 Portal 的 AkRoomPortal 组件应如下图所示:
AkRoomPortal 组件
D. 验证设置
- 若要查看场景中绘制的声音传播路径,请将 AkSpatialAudioDebugDraw 组件添加到发声体。
- 勾选 Draw Diffraction Paths 选项。
AkSpatialAudioDebugDraw 组件
- 启动游戏并连接到 Wwise。
- 按下其中一个 Room 中的按钮,来试听混响效果。
- Voices Graph 应如下图所示:
Voice Graph 中显示 Room
- 走到 Room 外面并移动位置,使隔壁 Room 内正在播放的发声体处于视线内和视线外,从而试听声音的衍射效果。在听者相对于 Portal 的角度不同时,您会听到或多或少的衍射声音。
- 在 Unity 的 Scene 窗口中,应可看到代表声音穿过 Portal 的路径。衍射点处会显示应用于声音的衍射百分比。
衍射路径穿过 Portal – 俯视图
- 打开设计工具的 Game Object Profiler 布局(快捷键 F12)。
- 确保在 Game Object 3D Viewer Settings 中启用 Diffraction Paths(如尚未启用)。
在 Game Object 3D Viewer Settings 中为 Portal 启用 Diffraction Paths
- 在 Game Object 3D Viewer 中,应可看到:
- Room 和 Portal 的模型。
- 声音从发声体穿过 Portal 到达听者所在位置的衍射路径。每个边缘都会显示衍射百分比。注意图中以绿色虚像标识的虚声源,其代表声音的实际听感位置。
- 穿过 Room 墙壁的透射路径及透射损失百分比。
- 显示 Room 湿声部分的房屋图标。在图中,一个代表穿过 Portal 的声音,一个代表穿透 Room 墙壁的声音。
- 每个发声体/听者都会在其名称中显示与之对应的 Room。听者不在 Room 内,因此默认放在了 "Outdoors" Room 中。
- 将听者移动到某个 Room,并在 Game Object 3D Viewer 中的“听者”游戏对象下查看 Room 名称变化。
Game Object 3D Viewer 中显示穿过 Portal 的衍射路径
| 备注: | 若要在 Room 外部添加混响效果器,则可围绕整个区域添加一个 Room。确保 Room 的优先级低于场景中的其他 AkRoom 组件。 |
E. Portal 和 Reverb
通过 Portal 传播的声音还可使用来自听者所在 Room 的混响效果器。我们称之为 Room Coupling(房间耦合)。
- 打开 Room 对应的 Auxiliary Bus Property Editor,并确保在 General Settings 选项卡中选中 Use game-defined auxiliary sends。这样可以将 Room 的混响效果发送到场景中的其他混响效果中。
- 假如在播放小房间发声体时走进大房间,将会看到小房间的混响效果被馈送到了大房间的混响效果中来。
Voices Graph 中显示 Room Coupling
F. Room Tone
有时,Room 内会有像空调嗡嗡声这样的特定环境声。为了重现这种效果,您可以针对 Spatial Audio Room 游戏对象发送 Event。在听者和发声体处在同一 Room 时,声音会被定位在听者所在位置。在听者和发声体处在不同 Room 时,听者会通过连通两个 Room 的 Portal 听到房间底噪 (Room Tone)。
- 在 Wwise 工程中:
- 创建新的 Sound SFX 并用于房间底噪。
- 确保启用游戏定义的辅助发送来将房间底噪发送到 Room 混响效果中。
- 右键单击 Sound SFX,然后依次选择 New Event > Play,来创建带有房间底噪的 Play Event。
- 保存工程。
- 在 Unity 中:
- 将此 Event 添加到其中一个 Room 所绑定的 AkRoom 组件的 Room Tone Event 参数。
- 调节 Aux Send Level 来将部分声音馈送到该 Room 的混响效果中。
- 您可以选择如何触发 Event。
在 Spatial Audio Volume 的 AkEvent 分区中启用 Room
- 生成 SoundBank。
- 启动场景并连接到 Wwise 设计工具。
- 确认可以听到房间底噪。
- 在 Advanced Profiler 视图中,应会看到当前触发的 Event。
在听者处在带有房间底噪的 Room 中时查看 Advanced Profiler 视图
- 在 3D Game Object Viewer 中,可一边来回移动听者,一边察看 Room 游戏对象。
- 若听者和发声体处在同一 Room,则 Room 会在听者所在位置播放声音。您会看到 Room 游戏对象跟随“听者”游戏对象。
- 若听者和发声体处在不同 Room,则会将 Room 游戏对象定位在 Portal 位置,并在其与 “听者”游戏对象之间绘制路径。
在 Game Object 3D Viewer 中察看 Room 游戏对象
- 参见
-