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
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
Wwise SDK 2021.1.14
|
您需要根据地图或关卡的几何构造使用 AK::SpatialAudio::SetRoom
和 AK::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 来充分利用其空间化行为。为此,可直接调用 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 。
通过将 Geometry Set 与 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::SetRoom 和 AK::SpatialAudio::SetGeometry 的调用顺序无关紧要。
有关如何在 Spatial Audio 中定义几何构造的信息,请参阅 Geometry 章节。
info | 备注: Spatial Audio 不会使用 Geometry Set 执行几何包含关系检测。游戏将负责执行此操作,并依据几何包含关系检测结果来调用 AK::SpatialAudio::SetGameObjectInRoom ,以针对每个游戏对象定义当前 Room。 |
info |
备注: 若仅使用 Geometry Set 描述 Room,而不利用其计算反射和衍射,请务必将 AkGeometryParams::EnableTriangles 设为 false。 |
dangerous | 警告: 不要将 AkRoomParams::GeometryID 与 AkGeometryParams::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
。
Integration Demo 示例(SDK/samples/IntegrationDemo 中)设有演示页面,并包含有关如何使用 API 的说明。请转至 Demo Positioning > Spatial Audio: Portals(演示定位 > Spatial Audio: 门户)。