menu
 
版本
2021.1.14.8108

2024.1.6.8842

2023.1.14.8770

2022.1.19.8584

2021.1.14.8108

2019.2.15.7667

2019.1.11.7296

2018.1.11.6987

2017.2.10.6745

2017.1.9.6501

2016.2.6.6153

2015.1.9.5624

menu

Wwise SDK 2021.1.14
Room 和 Portal API 配置

创建 Room 和 Portal

您需要根据地图或关卡的几何构造使用 AK::SpatialAudio::SetRoomAK::SpatialAudio::SetPortal 创建 Room 和 Portal。在运行时,可使用相同 ID 再次调用这些函数,从而更改 Room 和 Portal 相关设置。然后,游戏会针对每个发声体和听者调用 AK::SpatialAudio::SetGameObjectInRoom ,进而将两者所在房间告知 Spatial Audio。从 Spatial Audio 的角度来说,Room 并没有固定的位置、形状或尺寸。因此,它们可以是任何形状。不过,为了确定对象所在 Room,游戏引擎需要执行几何包含关系检测。

dangerous 警告: 注意,请谨慎设置 Room ID(房间 ID)。它们的取值范围与游戏对象相同。因此,假如某个 ID 已经用于游戏对象,切勿将其重复用作 Room ID。
dangerous 警告: Spatial Audio 会在后台针对每个 Room 将游戏对象注册到 Wwise。用户可以针对此游戏对象发送 Event 来触发环境声/房间底噪,但不要尝试在调用 AK::SoundEngine 时修改该对象的位置或 Game-defined 发送。

AkRoomParams::ReverbAuxBus 是最重要的 Room 设置,可在发声体位于该 Room 内时告知 Spatial Audio 应发送至哪条辅助总线。其他设置将在下文部分探讨(参见“ 在 Wwise 中设置 Room Auxiliary Bus ”和“ 透射 ”部分)。

Portal 代表两个 Room 之间的开口。与 Room 相反,Portal 对应有位置和尺寸。因此,Spatial Audio 可自行执行几何包含关系检测。Portal 尺寸由 Portal 设置 AkPortalParams::Extent 给定。Spatial Audio 会使用宽度和高度(X 和 Y)计算衍射和散布,同时使用深度 (Z) 定义 Spatial Audio 在哪个区域内精确操控辅助发送电平、Room 对象方位及 Spread(用于 3D Spatialization),进而在两个相连 Room 之间应用平滑过渡。有关更多详细信息,请参见“ 在 Wwise 中设置 Room Auxiliary Bus ”和“ 声音传播特性概要 ”部分。另外,还可使用 AkPortalParams::bEnabled 设置将 Portal 设为启用(打开)或禁用(关闭)状态。

针对 Room 游戏对象发送 Event

您可以针对 Room 游戏对象发送 Event 来充分利用其空间化行为。为此,可直接调用 AK::SoundEngine::PostEvent ,来将 Room ID 作为 AkGameObjectID 加以传递。通过调用 AkRoomID::AsGameObjectID ,可将 Room ID 安全地转换为 AkGameObjectID。若要将 Room 用于发送 Event,则须告知 Spatial Audio 不要在没有使用 Room 游戏对象时将其注销。为此,请确保将 AkRoomParams::RoomGameObj_KeepRegistered 设为 true。

另外,在使用房间底噪时,最好将该游戏对象发送到其自己的 Room Auxiliary Bus。为此,可将大于零的值传给 AkRoomParams::RoomGameObj_AuxSendLevelToSelf

设置 Room 几何构造

通过将 Geometry Set 与 Room 关联可达到以下两个目的:

  • 计算 Room 的边界框,进而据此计算 Room 的透射路径的位置和散布。
  • 在 Game Object 3D Viewer 中显示 Room。

您可以根据需要选择是否设置 Room 几何构造。在没有 Room 几何构造的情况下,Game Object 3D Viewer 中不会显示 Room。此时,Spatial Audio 通过计算将所有关联 Portal 囊括在内的边界框,来估算 Room 的边界以应用 Room 透射。有关 Room 透射的详细信息,请参阅 Room 透射 章节。

若要将 Geometry Set 与 Room 关联,可使用代表 Room 的几何构造的 ID 调用 AK::SpatialAudio::SetRoom ,来直接填写 AkRoomParams::GeometryID 字段。Spatial Audio 假定已经或将要通过对应调用 AK::SpatialAudio::SetGeometry 来定义几何构造本身。AK::SpatialAudio::SetRoomAK::SpatialAudio::SetGeometry 的调用顺序无关紧要。

有关如何在 Spatial Audio 中定义几何构造的信息,请参阅 Geometry 章节。

info 备注: Spatial Audio 不会使用 Geometry Set 执行几何包含关系检测。游戏将负责执行此操作,并依据几何包含关系检测结果来调用 AK::SpatialAudio::SetGameObjectInRoom ,以针对每个游戏对象定义当前 Room。
info 备注: 若仅使用 Geometry Set 描述 Room,而不利用其计算反射和衍射,请务必将 AkGeometryParams::EnableTriangles 设为 false。
dangerous 警告: 不要将 AkRoomParams::GeometryIDAkGeometryParams::RoomID 混淆。AkRoomParams::GeometryID 用于按照上述方式定义 Room 边界框,以便计算透射散布并在 Game Object 3D Viewer 中予以显示。AkGeometryParams::RoomID 只是为了在 Spatial Audio 中实施射线追踪时更好地限制几何构造的可见/可达范围。

具有多个位置的发声体

在使用 AK::SoundEngine::SetMultiplePositions 时,Spatial Audio 会针对传给 API 的各个声音位置执行包括反射、衍射和透射在内的各种计算。

在针对采用 Room 发送的游戏对象使用 AK::SoundEngine::SetMultiplePositions 时要注意,在某一特定时刻只能将给定的游戏对象指派给一个 Room(使用 AK::SpatialAudio::SetGameObjectInRoom )。之所以存在该限制,是因为声音引擎内的所有声音位置必须使用相同的辅助发送配置。

所有从发声体位置开始计算的声音路径都是相对于某个特定 Room 而言的。如果声音位置位于游戏定义的 Room 边界之外(由 AK::SpatialAudio::SetGameObjectInRoom 决定),那么生成的声音路径就很可能是错误的。

在游戏对象穿过 Portal 的情况下,Spatial Audio 会对传给 AK::SoundEngine::SetMultiplePositions 的所有声音位置取平均数,并据此来计算两个 Room 之间的交叉淡变。

为此,建议游戏也使用声音位置的平均数来对 Room 实施几何包含关系检测,并将生成的 Room ID 传给 AK::SpatialAudio::SetGameObjectInRoom

Room 和 Portal Integration 示例

Integration Demo 示例(SDK/samples/IntegrationDemo 中)设有演示页面,并包含有关如何使用 API 的说明。请转至 Demo Positioning > Spatial Audio: Portals(演示定位 > Spatial Audio: 门户)。


此页面对您是否有帮助?

需要技术支持?

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

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

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

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

开始 Wwise 之旅