版本
menu

Wwise SDK 2021.1.14
Room 和 Portal 概述

以下是此页面的概要:

声音传播特性概要

下表简要列出了 Spatial Audio Room 和 Portal 的特性,并根据声学现象进行了分组,同时说明了与之对应的 Spatial Audio 属性以及声音设计师如何将其用于工程。

声学现象 Spatial Audio Wwise 中的声音设计
直达路径的衍射
  • 计算驱动衍射值的非直达声音路径
  • 修改游戏对象位置来模拟感知的衍射声音的入射角度
  • 通过工程 Obstruction 曲线或内置 RTPC 向音量和滤波器指派衍射值
漫反射场(混响)
  • 发送到 Room 的辅助总线
  • 恒定功率过渡
  • Actor-Mixer 的混响、总线音量和游戏定义的发送偏置
房间耦合: 相邻 Room 的漫反射场的混响空间化和衍射
  • 计算漫反射场穿过 Portal 的传播
  • Room 对象的定位和散布
  • 发送到听者所在 Room 的辅助总线
  • 通过工程 Obstruction 曲线或内置 RTPC 向音量和滤波器指派衍射值
  • 总线的音量、滤波或其他属性
  • 针对其他总线对应的 Auxiliary Bus 偏置总线的 3D 声像摆位、混响、总线音量及游戏定义的辅助发送
透射
  • 根据声音路径穿过的 Room 和表面驱动透射损失值
  • 通过工程 Occlusion 曲线或内置 RTPC 向音量和滤波器指派透射损失值

为其他房间的声音传播建模

在 Spatial Audio Room 和 Portal 环境下,将利用抽象概念 Room 和 Portal 来管理听者之外其他房间的声音传播。另一 Room 内的发声体会通过多个 Portal 及与这些 Portal 关联的衍射将声音传播到听者;若无衍射路径,则通过声音对房间墙壁的透射来传播。对于需要传播的所有声音,确保在 Positioning 选项卡中选中 Enable Diffraction and Transmission 复选框。

衍射

对于相邻 Room 内的每个发声体,Spatial Audio 都会计算相连 Portal 最近边缘与 Shadow Boundary(阴影边界)的衍射角。有关详细信息,请参阅 衍射 章节。然后,将此衍射角(最大 180 度)映射为衍射系数 (0 ~ 100%),并提供给 Wwise 用户,以便从两种方式中选一种来设置对应音频变换。用户可为“发声体”游戏对象设置 Obstruction 值(如启用 AkSpatialAudioInitSettings::bUseObstruction),也可设置内置游戏参数 Diffraction 值。

若要使用 Diffraction 内建参数,则需创建游戏参数,并在对应 Bind to Built-in Parameter(绑定至内建参数)下拉菜单中选择 Diffraction(衍射)。推送至该游戏参数的值的作用域由游戏对象界定,确保与发声体一一对应。然后,可结合使用 RTPC 来控制 Actor-Mixer 的属性。最好选用 Output Bus Volume(输出总线音量)和 Output Bus LPF(输出总线 LPF),来模拟衍射的频率相关行为。Output Bus Volume 和 Output Bus LPF 要优于基准 Volume 和 LPF,因为它们只会应用于直达信号路径,而不会应用于 Room 混响对应的辅助发送。

另外,Spatial Audio 的声音传播模型还包括了 Room 的漫反射能量(作为 Room 对应 Auxiliary Bus 的输出)。Spatial Audio 会同时计算这部分的衍射(湿声衍射)。Spatial Audio 假定漫反射能量沿 Portal 垂直方向从 Room 向外渗透。因此,它会计算相对于 Portal 法向矢量的衍射角。此衍射值可以用在 Wwise 中,方式与发声体的干声路径相同。在使用内置游戏参数时,应结合使用 RTPC 来控制房间对应的辅助总线(通常用于总线的 Output Bus Volume 和 Output Bus LPF)。为了避免影响此混响与听者所在房间混响耦合的辅助发送路径,最好选用总线的 Output Bus Volume 属性,而不要选用 Bus Volume 属性(情形与 Actor-Mixer 相同)。

另外,用户还可使用内置工程全局声障来修改 Spatial Audio 衍射生成的音频。此时,Spatial Audio 会使用计算得出的 Diffraction 值来控制声障。与 Diffraction 内置游戏参数不同,工程全局声障会映射至 Wwise 工程全局曲线。它们可以在 Project Settings(工程设置)中设置。Obstruction Volume、Obstruction LPF 和 Obstruction HPF 可有效作用于 Output Bus Volume、Output Bus LPF 和 Output Bus HPF(如上文所述)。由于声障曲线为全局设置,所以工程全局声障不像 Diffraction 内置游戏参数那样灵活。而另一方面,它们也不需要过多的操控和编辑(使用 RTPC)。另外,不同的 Obstruction 值可应用于游戏对象的各个位置,而内置游戏参数仅可将一个值统一应用于游戏对象的所有位置(在设有多个值时,取最小值)。如上文所述,在 Room 包含不止一个 Portal 时,会使用多个游戏对象位置。

通过 Portal 模拟虚拟定位和衍射

在完成 Spatial Audio 的初始化设置 AkSpatialAudioInitSettings::bCalcEmitterVirtualPosition 后,将修改听者相邻 Room 内发声体的位置,使其与听者之间呈衍射角(如适用)。在以下 3D Game Object Profiler(3D 游戏对象性能分析器)截图中,听者 (Listener L) 位于 Portal 右侧,实际发声体 (Emitter E) 位于左下方且无朝向矢量。因此,Spatial Audio 将发声体重新定位到了左上方,使视位置看上去就像从该角落切入一样,并始终符合传播距离的衰减规律。听者与 Portal 边缘的阴影区约呈 45 度,所以衍射系数为 27(如两条线段的交点处所标)。

在有多个 Portal 连通两个 Room 时,Spatial Audio 会将多个位置指派给发声体(每个 Portal 指派一个)。这时将使用 MultiPosition_MultiDirection 模式,以免在启用或禁用 Portal 时影响与此同时感知到的其他 Portal 的音量。

透射

Room 之间的声音透射分湿声路径和干声路径两部分单独进行建模。在此,干声路径称为 声源透射 ,湿声路径称为 Room 透射

声源透射

在听者和发声体不在同一 Room 且两者无法直接通过 Portal 看到彼此时,Spatial Audio 会向游戏对象应用透射损失系数,并据此对声音穿透墙壁的情形进行建模。类似于衍射,您可以根据需要选用以下两种途径对透射损失进行听觉化处理:Wwise Project Settings 中的 Occlusion 曲线或 Transmission Loss 内置参数。

备注: 在将声笼曲线作为全局设置统一应用于所有声音时,最好使用声笼曲线而非 RTPC 来模拟透射损失,因为这样在一并对透射和衍射进行建模时具有更高的精确度。由于 RTPC 无法单独应用于某条特定声音路径,所有映射至透射损失 RTPC 的参数会同时影响源自发声体的潜在衍射路径。

Room 之间的透射损失依据 Room 设置的 AkRoomParams::TransmissionLoss 参数进行计算,并取听者所在 Room 和发声体所在 Room 当中的最大值。

若发声体被一个或多个几何表面阻挡,则应用几何构造的透射损失系数(由 AkAcousticSurface::transmissionLoss 定义)。若发声体和听者之间存在不止一个表面,则采用最大透射损失系数。

同样地,若声音既被几何构造阻挡又跟听者不在同一 Room,则应用所有透射损失当中的最大值。

最终的透射损失将直接应用于 Wwise Project Settings 中的 Occlusion 曲线和 Transmission Loss 内置参数。Occlusion 曲线会通过 Project Settings 的 Obstruction/Occlusion 选项卡中定义的工程全局曲线映射至 Volume、LPF 和 HPF。

Room 透射

除了 Room 内各个发声体的声音透射,Spatial Audio 还会对 Room 本身的声音透射进行建模。这当中涉及到漫反射场(混响)以及在 Room 内播放并穿透墙壁的房间底噪(如有)。

跟声源透射一样,在计算 Room 的透射损失时会对声源所在 Room 和听者所在 Room 进行比较,并取两者中的较大值作为透射损失系数。同样地,Room 透射损失也可根据需要来选用以下两种途径进行听觉化处理:Wwise Project Settings 中的 Occlusion 曲线或 Transmission Loss 内置参数。

备注: 要想启用 Room 透射,必须定义 Room 形状,并为其设定声源和边界。Room 形状依据 Room 所关联几何构造周围的边界框进行计算。若要通过 API 设置 Room 透射,请参阅 设置 Room 几何构造 章节。

房间耦合

相邻房间内通过 Portal 渗透到听者所在房间的衍射能量可被视为 Portal 位置的声源,因此也应对听者所在房间产生激励作用。也就是说,应将其发送至听者所在房间对应的 Auxiliary Bus。为此,可针对相邻房间对应的辅助总线勾选 Enable Game-Defined Sends 复选框(如上文所述)。您可以使用 Game-Defined Send Offset(游戏定义的发送偏置)来调节发送到其他 Room 混响器的散布量。

多房间穿透

多个房间之间也会发生声音传播。在搜索传播路径时,会在 SpatialAudio 内部搜索 Room 树。为了避免循环连接,在遇到已经到过的 Room 时,将停止搜索。搜索深度可通过 Spatial Audio 的初始化设置 AkSpatialAudioInitSettings::uMaxSoundPropagationDepth(默认值为 8)来加以限制。

Room 游戏对象行为

Spatial Audio 会在内部按 Room 将游戏对象逐个注册到 Wwise。

警告: 此游戏对象的位置和辅助发送值不可直接调节。

在听者位于 Room 内时,Room 内的游戏对象将随听者移动。因此,Room 和 Listener 对象之间的距离近似为 0。不过,其朝向与 Room 设置 (AkRoomParams) 中指定的朝向保持一致。有关 3D 总线朝向的论述,请参见“ 在 Wwise 中设置 Room Auxiliary Bus ”部分。

在听者位于 Room 外时,Room 内的游戏对象将沿用对应 Portal 的位置。确切地说,是设在 Portal 后方与 Portal 正切的听者投影位置,并固定于 Portal 界限之内。您可以通过查看 Room 内的游戏对象来验证这一点(参见上文“ 通过 Portal 模拟虚拟定位和衍射 ”部分的 3D Game Object Profiler 截图)。

对于多个 Portal,在 MultiPosition_MultiDirection 模式下,将为 Room 内的游戏对象指派多个位置(情形与发声体相同)。

在 Portal 内部过渡时,会对 Room 内部和 Portal 行为做平滑插值。

房间底噪

Room 游戏对象的主要作用在于对混响(发声体的湿声路径)实施空间化处理。不过,我们可以有效运用 Room 和 Portal 的空间化行为(参见 Room 游戏对象行为 章节),来直接针对 Room 游戏对象发送 Event 以实现房间底噪。有关如何在 Wwise 中设置房间底噪的信息,请参阅 在 Wwise 中设置房间底噪 章节。有关如何发送 Event 的信息,请参阅 针对 Room 游戏对象发送 Event 章节。

Portal 的 Spread 和 Aperture 值

Wwise 中声音的散布决定在将 3D 声音摆位到 Audio Bus 时要构建多宽的声场。对于大部分声音,Wwise 中会依据声音衰减设置中的曲线来定义散布。不过,对于 Room 游戏对象上播放的声音(即房间底噪)和发送到 Room Auxiliary Bus 的混响,并不需要定义所述曲线,因为 Spatial Audio 会自动计算散布。

若针对声音在 Wwise 的衰减设置中定义了散布曲线,且该声音穿过了一个或多个 Portal,则最终的散布曲线将由这些 Portal 的 Aperture 决定。您可以将 Aperture 值视为声音散布的上限,并利用其模拟声音穿过 Portal 时声场的收缩。

通过以下设置,可在 Wwise 的 Game Object 3D Viewer 中直观地显示发声体的散布:

  • 在捕获数据前,确保在 Profiler Settings 中选中 Obstruction/Occlusion Data
  • 在 Game Object 3D Viewer Settings 对话框中,确保选中 Show Spread Cones

除此之外,也可在 Advanced Profiler 的 Obs/Occ 选项卡中查看游戏对象的 Spread 值和 Portal 的 Aperture 值。

游戏对象的 Spread 值

Spatial Audio 可依据声音的确切几何边界来计算游戏对象的 Spread 值。对于“发声体”游戏对象,该几何边界由 AK::SpatialAudio::SetGameObjectRadius API 定义。若未调用该函数,则将其视为点声源。

对于 Room 游戏对象,Spread 值与 Aperture 值相同。在计算时,基于各个 Portal 相对于听者的立体角取近似值。注意,对于 Room 游戏对象,每个 Portal 只有一个 Spread 值(每个 Portal 都会作为一个单独的声音位置进行渲染)。

备注: 若在 Attenuation ShareSet 中为游戏对象定义了散布曲线,则散布曲线在优先级上高于传给 AK::SpatialAudio::SetGameObjectRadius 的游戏对象径向边界。

Portal 的 Aperture 值

游戏对象的 Aperture 值是按照路径计算的,其大小为特定声音路径中穿过的所有 Portal 的最小 Spread 值。对于 Room 游戏对象,Spread 和 Aperture 采用相同的值。

Spread 计算概要

对于给定的声音位置和听者对,按照以下方式计算最终的 Spread 值:

  • 依据声音位置和听者之间的距离对声音的散布曲线取值。
  • 若没有散布曲线,则由游戏对象的半径决定 Spread 值(参见 AK::SpatialAudio::SetGameObjectRadius 章节)。若未给出半径,则不定义散布曲线,并将 Spread 值设为 0。
  • 基于声音位置的路径中的所有 Portal 计算声音的 Aperture 值。最后通过取最小值将多个 Portal 的 Aperture 值合而为一。
  • 通过取较小值将声音的 Spread(源自散布曲线或游戏对象的 Spread 值)和 Aperture 合而为一。最后将该 Spread 值传给声音引擎中的声像摆位器。

此页面对您是否有帮助?

需要技术支持?

仍有疑问?或者问题?需要更多信息?欢迎联系我们,我们可以提供帮助!

查看我们的“技术支持”页面

介绍一下自己的项目。我们会竭力为您提供帮助。

来注册自己的项目,我们帮您快速入门,不带任何附加条件!

开始 Wwise 之旅