Wwise SDK 2024.1.6
|
Reverb Zone 可对具有不同混响效果器的 Room 内的区域进行建模,但不需要将 Portal 连到相邻 Room。在没有明显的墙壁或区域交界处的负空间大于正空间时,一般就要使用 Reverb Zone 而非标准 Room。下面是一些可以使用 Reverb Zone 的示例场景:
Reverb Zone 是 Wwise Spatial Audio 内的一种 Room,其具有与标准 Room 相同的各种属性。除此之外,Reverb Zone 还有:
您可以通过不同的方式来管理声音的传播:既可通过 AK::SoundEngine::SetGameObjectAuxSendValues 添加 Auxiliary Send,也可选择使用 Reverb Zone。不过,Reverb Zone 有个优点:其可紧密结合并充分利用 Wwise Spatial Audio 中的 Room 和 Portal API 所提供的声音传播框架。
以下示例展示了 Reverb Zone 的用法。该示例包含在 Integration Demo 工程中,并作为 Wwise SDK 的一部分一并分发。
![]() | 发声体在 "Room Object" Room 内播放声音。 |
![]() | 声音通过与 "Patio Object" Reverb Zone 连通的 Portal 传出。 |
![]() | 声音继续向外传播到 Reverb Zone 的父级 Room。在传到外部时,声音还会绕过几何构造所定义的障碍物进行衍射。 |
在 Advanced Profiler 或 Voice Inspector 的 Voice Graph 中,可以看到五个 Game Object 被连在了一起。
![]() | Emitter E 发声体将信号发送到其当前所在 Room 及相邻 Room。在本例中,发声体处于 Room Object 内,并与 Patio Object 相邻。 |
![]() | 各个 Room 沿着通往听者的最短路径将信号发送到下一 Room。Room Object 将信号发到 Patio Object,Patio Object 再将信号发到 Outside Object。Patio Object 和 Outside Object 之间的通路是基于两个 Room 之间的父子关系建立的。 |
您可以使用 AK::SpatialAudio::SetReverbZone
API 指定 Reverb Zone 和父级 Room 之间的过渡区。此过渡区的功能跟 Portal 差不多。过渡区之间可以重叠,跟 Portal 也可以重叠,只要 Room 的几何构造不重叠就行。您可以通过这种重叠在 Reverb Zone 之间实现平滑的交叉淡变。若要为 Reverb Zone 定义过渡区,Reverb Zone Room 须有包含 1 个或更多透明表面的几何构造。透明表面是指 AkAcousticSurface::transmissionLoss
设为 0 的表面。Reverb Zone 过渡区的边界由 Room 的透明三角形的位置和传给 AK::SpatialAudio::SetReverbZone
的 in_transitionRegionWidth
参数定义。过渡区以所述各个三角形为中心。比如,在 Room 包含一个由透明表面构成的墙壁时,可通过调用 AK::SpatialAudio::SetReverbZone
并将 in_transitionRegionWidth
设为 5 来将其定义为 Reverb Zone。过渡区从 Game Object 距离 Reverb Zone 外侧透明墙壁 5 个单位开始,到 Game Object 距离 Reverb Zone 内侧墙壁 5 个单位结束。因为过渡区仅由透明三角形定义,所以可为过渡区设定自定义形状。有关如何定义 Room 几何构造的详细信息,请参阅 设置 Room 几何构造 章节。
本节将介绍常规 Reverb Zone 的创建流程。以下示例展示了如何创建被户外环境包围的森林区域。森林区域和户外环境都有独特的混响效果。
就衰减而言,Reverb Zone 会沿用 Room 的行为和属性,同时加入以下诸多考量因素:
通常,衍射路径并不会考虑透射损失,因为只有透射路径能穿透表面。对于 Reverb Zone,若衍射路径穿过 Reverb Zone 过渡区且 AkRoomParams::TransmissionLoss
大于 0,则湿声路径和房间底噪会有例外。在这种情况下,源自同一 Room 的各条路径可能会有不同程度的透射损失。对此,可在 Voice Inspector 中查看:
在这个房间底噪示例中,有一条从 Room 到听者的直接透射路径。除此之外,还有一条通过 Portal 衍射的路径。每条路径都有不同程度的透射损失。
直接透射路径上的透射按照 Emitter-Listener (Direct) Connection 中所述计算(取听者 Room 和发声体 Room 透射损失当中的最大值)。在这些 Room 分属不同的 Reverb Zone 层级结构时,透射损失为 Room 和其父对象透射损失当中的最大值。
在衍射路径上,每次路径穿过过渡区,都会应用子级 Room 的透射损失(由 AkRoomParams::TransmissionLoss
指定)。最终透射损失为路径上各透射损失当中的最大值。
在选择将 Reverb Zone 的哪些表面设为透明表面(透射损失为 0)时要特别小心,因为其会影响 Reverb Zone 中对象与父级 Room 之间距离的计算。所有从 Reverb Zone 或到 Reverb Zone 的距离计算都基于最近的不透明三角形。
比如,对大型 Reverb Zone 的地面来说就是如此。如果 Reverb Zone 的地面是透明的(表面透射损失为 0),而且听者所在位置远离任何墙壁,那么在计算与父级 Room 的最近距离时路径将会穿过地面。这种情况通常是不可取的。
比如,在 Reverb Zone 中的表面带有连通另一 Room 的 Portal 时就是如此。一般来说,与 Portal 相连的表面应当是不透明的。
在本例中,我们将三个高亮显示的 Reverb Zone 表面设为了不透明表面。其中,底部表面与地面共用。左侧表面与另一 Room 共用并与 Portal 相连。顶部表面可根据需要进行设计。比如,用来表示有遮盖的阳台。其余表面都是透明的。
AK::SpatialAudio::SetReverbZone
API 创建 Room 层级结构。直接通过 AK::SpatialAudio::SetReverbZone
创建父子关系;通过为多个 Reverb Zone 指定同一父级 Room 创建同级关系。AK::SpatialAudio::SetReverbZone
或 AK::SpatialAudio::SetPortal
时,若所用参数会导致 Portal 与同一层级结构中的 Room 连通,调用操作会失败。AkAcousticSurface::transmissionLoss
要大于 0。某一 Reverb Zone 不可直接过渡到另一 Reverb Zone,所以 Reverb Zone 和其过渡区不可以重叠。