版本

menu_open
Wwise SDK 2024.1.0
Room 和 Portal API 配置

创建 Room 和 Portal

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

警告: 注意,请谨慎设置 Room ID(房间 ID)。它们的取值范围与游戏对象相同。因此,假如某个 ID 已经用于游戏对象,切勿将其重复用作 Room ID。
警告: 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 几何构造

Associating a Geometry Instance with a Room serves the following purposes:

  • It enables calculation of the Room's bounding box, which in turn is used to calculate the position and spread of the Room's transmission path.
  • It allows Spatial Audio to determine which Game Objects are in which Room. Alternatively, clients can use AK::SpatialAudio::SetGameObjectInRoom for this purpose, if desired.
  • It enables accurate specification of transmission loss values, according to the transmission loss coefficient of each individual surface.
  • It enables the display of the room inside the Game Object 3D Viewer.
  • Optionally, it enables reflection and diffraction simulation using the walls of a room, if AkGeometryInstanceParams::UseForReflectionAndDiffraction is set to true.

Setting up Room geometry is optional but recommended. Without Room geometry, the Room will not be visible in the Game Object 3D viewer, and Spatial Audio will estimate the extent of the Room (for Room transmission) by calculating a bounding box that encompasses all attached portals. For more information about Room transmission refer to Transmission of Room Tones and a Room's Diffuse Field.

Spatial Audio performs containment tests using Room geometry to determine which Room each Game Object is in. If a specific type of containment test is desired, this task can instead by performed by the client, using AK::SpatialAudio::SetGameObjectInRoom. However, geometry is mandatory for Rooms that are designated as Reverb Zones, so that Spatial Audio can determine whether a Game Object is inside the transition region of a the Reverb Zone. Refer to spatial_audio_roomsportals_reverbzones_transition_regions.

若要将几何构造与 Room 关联,请先使用 AK::SpatialAudio::SetGeometry 将几何构造传给 Wwise。在此之后,需要创建 Geometry Instance 来指派位置并对几何构造进行缩放和旋转。参见 AK::SpatialAudio::SetGeometryInstance 章节。最后,使用代表 Room 的 Geometry Instance 的 ID 调用 AK::SpatialAudio::SetRoom ,来填写 AkRoomParams::GeometryInstanceID 字段。Spatial Audio 假定之前或之后有对 AK::SpatialAudio::SetGeometryInstance 的对应调用。不过,AK::SpatialAudio::SetRoomAK::SpatialAudio::SetGeometryInstance 的调用顺序无关紧要。

备注: If a geometry instance is to be used only by a Room, for purposes listed above, and not for reflection and diffraction calculation, then set AkGeometryInstanceParams::UseForReflectionAndDiffraction to false.

For information about how to define geometry in Spatial Audio, refer to Geometry.

备注: 若仅使用 Geometry Set 描述 Room,而不利用其计算反射和衍射,请务必将 AkGeometryParams::EnableTriangles 设为 false。

具有多个位置的发声体

在使用 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 之旅