目录

Wwise Unreal Integration Documentation
在 Unreal 中使用 Wwise Spatial Audio

本教程将展示 Unreal Wwise Integration 中加入的各种 Spatial Audio 功能。此处阐明了有关如何将 Spatial Audio 集成到游戏中的工作流程,并提供了关于如何在 Wwise 设计工具中初始化各项 Spatial Audio 功能(如 3D 总线、3D 空间化 Sound SFX 和 Reflect 效果器插件)的技术信息。

本教程分成了多个章节。A 章节主要是为了帮助您准备工程,而接下来的每个章节都将探讨一种不同的 Spatial Audio 功能。这些章节之间并不相干,您可以根据需要自由查阅。

注記: Generating soundbanks in sections using the Reflect plug-in require the appropriate license.

A – Spatial Audio 教程准备工作

注記: 作为 Unreal Demo Game 的一部分,Wwise Launcher 中专门提供了一个包含各项教程所需参数的地图。若要使用该地图,则可跳过本章节。该地图名为 SpatialAudioTutorialMap。

A.1. 创建新的工程

Follow the steps below (based on the use of Wwise 2019.2 and Unreal 4.24), in order to build your working environment.

  1. 通过 Epic Launcher 启动 Unreal。
  2. Create a new Unreal Project C++ Blank project (without starter content).
  3. 关闭 Unreal。
  4. 启动 Wwise Launcher。
  5. 安装 Wwise。
  6. 选中 Unreal Engine 选项卡。
  7. 点击 Integrate Wwise into Project... 按钮。
  8. 点击 Open in Wwise 按钮来启动 Wwise。
  9. 点击 Open in Unreal 按钮来启动 Unreal。

A.2. Wwise 工程准备工作

对于本教程,您需要创建 Sound SFX 和用于播放声音的 Event。

  1. 在 Wwise 工程中,在 Actor-Mixer Hierarchy 的 Default Work Unit 下创建新的 Sound SFX,然后导入声音。
    1. 确保在 General Settings 选项卡中启用 Use game-defined auxiliary sends
      SATutorialSoundPropertyEditorGeneralSettings.png
      创建 Sound SFX
    2. 在 Positioning 选项卡中,启用 Listener Relative Routing 并将 3D Spatialization 设为 Position + Orientation,然后添加 Attenuation 并将 Max distance 设为 5000。
      SATutorialSoundPropertyEditorPosition.png
      Set 3D Spatialization to Position + Orientation
  2. 右键单击 Actor-Mixer Hierarchy 中的 Sound SFX,然后依次选择 New Event > Play
    SATutorialEventEditor.png
    创建声音 Event
  3. 保存工程。

A.3. Unreal 工程准备工作

  1. 根据需要灵活地创建地面、由两个房间组成的建筑以及外部障碍物。在 SpatialAudioTutorialMap 中,我们为建筑使用了自定义 Mesh,并为外部障碍物使用了 Basic Cube Static Mesh 组件。
  2. 在场景中放置发声体:
    1. 将前面章节中创建的 Event 从 WAAPI Picker 拖到 Content Browser 中。
      SATutorialWwiseWaapiPicker.png
      从 WAAPI Picker 拖到 Content Browser 中
      1. 双击 Content Browser 中的 Event,然后直接从 SoundBank 列表创建新的 SoundBank。
        SATutorialContentBrowser.png
        创建 SoundBank
        SATutorialSpatialAudioBankAsset.png
        选择 SoundBank
    2. 将 Event 拖到场景中来创建新的 AkAmbientSound Actor。
      1. 将其中一个放在外部,然后在每个 Room 中各放一个。
        SATutorialSpatialAudioTutorialMap.png
        SpatialAudioTutorialMap
  3. 从 Blueprints 菜单打开 Level Blueprint,然后移除 Event BeginPlay 和 Event Tick。
    1. 通过用户输入来触发 Event。
      1. 将新建的 AkAmbientSound 从 World Outliner 拖到 Blueprint 中。
      2. 从 AkAmbientSound 节点查找 Post Associated Ak Event 函数。
      3. 右键单击 Blueprint 背景,然后搜索 Left Mouse Button。
      4. 将 Pressed 输出引脚连接到 "Post Associated Ak Event" Exec。
    2. 针对所有 AkAmbientSound 条目重复同样的步骤。
      SATutorialLevelBlueprint.png
      添加用户输入来触发环境声
    3. 保存并关闭 Level Blueprint。

A.4. 验证所作设置

  1. 在上部菜单中,依次选择 Build > Generate SoundBanks....,来针对 Windows 生成 SoundBank。
    1. 查看 Output Log 并确保已成功生成 Bank。
      SATutorialGenerateSoundBanks.png
      从 Build 菜单生成 SoundBank
  2. 启动场景。现在按下相应的 Button,应会听到 3D 空间化声音。
  3. 连接 Wwise 设计工具,然后打开 Profiler 布局(快捷键 F6)。
    1. 在场景中播放声音时,应会看到与以下相似的 Voices Graph。
      SATutorialAdvancedProfilerVoicesGraph.png
      Outside Button 的 Voices Graph

B – Reflect

在本节中,我们将使用 Spatial Audio Geometry 来将反射表面发送到 Reflect 插件。该插件可模拟声学环境中声音传播产生的早期反射。

B.1. Wwise 工程

  1. 为了访问出厂 Acoustic Texture 以及早期反射 Auxiliary Bus 预设,您需要导入 Reflect Factory Asset。
    1. 依次转到 Project > Import Factory Assets...。
    2. 选中 Reflect 并按下 OK。
  2. 使用出厂预设创建早期反射 Auxiliary Bus:
    1. 在 Master-Mixer Hierarchy 中,右键单击 Master Audio Bus
    2. 依次转到 New Child > Presets,然后选择 Early Reflection Auxiliary Bus
      1. In the Effects tab, double-click on the effect and
        1. set the Max Distance to at least 5,000, which is the maximum distance attenuation of the sound we set in A.2. Wwise 工程准备工作
        2. set the Speed of Sound to 34,500
          SATutorialEffectEditorReflect.png
          Set Reflect Speed of Sound and Max Distance
  3. 选中 A.2. Wwise 工程准备工作 中创建的声音,并转到 Sound SFX Sound Property Editor。
    1. In the General Settings tab, add the new Auxiliary Bus with the Reflect Effect under Early Reflections
      SATutorialSoundPropertyEditorGeneralSettingsEarlyReflections.png
      Enable Reflect on a Sound in Wwise
  4. 保存工程。

B.2. Unreal 工程

在工程中,我们想让建筑物、地面和障碍物反射声音。实现方式有两种:AkSpatialAudioVolume 和 AkGeometryComponent。

AkGeometryComponent 可添加到 Static Mesh Actor。它会将 Static Mesh Geometry 自动发送到 Spatial Audio。另外,还可配置为发送 Simple Collision Mesh。最好将此组件用于简单形状。否则可能会向 Spatial Audio 发送太多三角形,从而导致计算负荷急剧加重。

AkSpatialAudioVolume 是一个 Brush Volume。它必须手动进行添加并围绕对象实施变换。若所需 Static Mesh 较为复杂,则可使用此 Volume 来围绕其创建简单形状。

  1. 在 SpatialAudioTutorialMap 中,障碍物是一个 Basic Static Mesh。我们可以轻松向其添加 AkGeometryComponent
    1. 单击 Actor,然后单击 Add Component。选择 Ak Geometry。
      1. In the Geometry section, choose Simple Collision
        SATutorialAkGeometryBarrier.png
        AkGeometryComponent
  2. 针对地面重复同样的步骤。
  3. 在 SpatialAudioTutorialMap 中,建筑物由自定义 Mesh 构成。虽然形状比较简单可以使用 AkGeometryComponent,不过在本教程中我们还是选择使用 AkSpatialAudioVolume 。AkSpatialAudioVolume 的唯一缺点是不太好在建筑物的房门位置创建开口。
    1. 将三个 AkSpatialAudioVolume 拖放到场景中。
      1. 在建筑物附近设置其中一个来用于外墙。
      2. 在每个 Room 附近各设一个来用于内墙。
      3. 确保三个 AkSpatialAudioVolume 全部启用 Enable Surface Reflectors。
        1. 将 Enable Room 和 Enable Late Reverb 保留为未选中状态(C – Room 和 Portal 中会讲到这两项设置)。
          SATutorialAkSpatialAudioVolumeExterior.png
          针对 Spatial Audio Volume 启用 Enable Surface Reflectors

B.3. 验证所作设置

  1. 生成 SoundBank。
  2. 启动场景并连接到 Wwise 设计工具。
    1. 在 Advanced Profiler 的 Voices Graph 视图中,应会看到应用了 Reflect 效果器的新辅助发送。
      1. 在玩家的初始位置,播放置于外部的声音。
        SATutorialAdvancedProfilerVoicesGraphReflect.png
        Outside Button 的 Voices Graph 以及 Reflect
        注記: 若在播放 Room 内的声音时玩家处在房外,则既不会听到声音也不会看到任何 Reflect 发送。这是因为我们在建筑物和每个 Room 附近创建的 AkSpatialAudioVolume 是封闭的。您可以通过修改 Brush 对象或使用 Spatial Audio Portal(参见 C – Room 和 Portal 部分)来为其创建开口。
      2. 在继续执行下一步之前,打开 Profiler Settings 视图并确保启用 Spatial Audio。
    2. 转到 Game Object Profiler 布局(快捷键 F12)。
      1. 确保可以看到玩家镜头和三个发声体。
      2. 在 Game Object 3D Viewer 中,应会看到不同的反射表面。
      3. 在播放声音时,将绘制早期反射射线以显示声音的传入路径。
        SATutorialGameObject3DViewerReflect.png
        Game Object 3D Viewer 及早期反射
      4. 若无法看到射线,请确保在 Game Object 3D Viewer Settings 中启用 Reflection Paths。
        SATutorialGameObject3DViewerSettings.png
        Game Object 3D Viewer 及早期反射
        注記: 若无法在 Game Object 3D Viewer 中看到任何几何构造,则可能需要调大 Monitor Queue Pool Size。该设置位于 初始化设置 中。

C – Room 和 Portal

在现实声学环境中,封闭空间内的声音会通过房门和窗户等开口传到外面。Spatial Audio Room 和 Portal 可模拟此效果,方法是仅通过 Portal 传播 Room 内播放的声音。

C.1. Wwise 工程

  1. 在 Wwise 工程中,为每个 Room 创建新的 Auxiliary Bus。
    1. 右键单击相应对象来添加子 Auxiliary Bus
    2. 依次转到 New Child > Presets,然后选择 Room Auxiliary Bus
      1. 在 Effects 选项卡中,可调节 RoomVerb 效果器。
        SATutorialAuxiliaryBusPropertyEditorEffectsSmallRoom.png
        Add a reverb effect to the Auxiliary Bus
  2. 转到 A.2. Wwise 工程准备工作 中创建的 Sound SFX。
    1. 在 Positioning 选项卡中,确保勾选 Enable Diffraction 复选框。
      SATutorialSoundPropertyEditorPositioningDiffraction.png
      在 Wwise 中针对声音启用衍射
  3. 保存工程。

C.2. Unreal 工程

  1. 在 Unreal 中,将新建的 Auxiliary Bus 从 Wwise Picker 拖放到 Content Browser 中。
    1. 双击这些 Auxiliary Bus,并将其指派给 SoundBank。
  2. 选中 B.2. Unreal 工程 中针对每个 Room 创建和放置的 AkSpatialAudioVolume。
    1. 确保启用 Enable Late Reverb 和 Enable Room。
    2. In the Late Reverb Section, drag and drop the new imported Auxiliary Bus from the Content Browser to the Aux Bus parameters.
  3. 添加两个 AkAcousticPortal
    1. 将其放在建筑物的开口附近。
    2. 选中 Portal,然后在 Ak Acoustic Portal 分区中将 Initial State 设为 Open
      SATutorialAkAcousticPortal.png
      将声学 Portal 拖到场景中
      注記: 在设置 AkAcousticPortal 的朝向时,必须确保其所连通的两个 Room 位于 Portal 的局部 Y 轴上。为了便于识别,在选中 Portal 时其周围会显示黄色条带。黄线用来分隔前后区域。在 Room 之间存在重叠时,会选用优先级最高的 Room。

C.3. 验证所作设置

  1. 针对 Windows 生成 SoundBank。
  2. 启动场景并待在起点位置。现在触发声音时应会听到两个 Room 内播放的声音。
  3. 连接 Wwise 设计工具并转到 Game Object Profiler 布局(快捷键 F12)。在 Game Object 3D Viewer 中:
    1. 应会看到新建的 Portal。
    2. 在每个发声体下方,应会看到其所在的 Room。
    3. 在 Room 之间移动听者时,其对应的 Room 也会变化。
      SATutorialGameObject3DViewerRoomsAndPortal.png
      Game Object 3D Viewer 及所用 Room 和 Portal
    4. 在播放的声音与听者不在同一 Room 时(没有直接视线):

      1. 因为 Portal 穿透了反射表面,所以仍会听到声音。

        会看到穿过 Portal 的早期反射路径。

      1. 会看到在 Portal 边缘发生衍射的声音传播路径。
        SATutorialGameObject3DViewerRoomsAndPortalAndReflect.png
        在 Game Object 3D Viewer 中查看 Spatial Audio 路径
        注記: 若 World 中包含若干 Spatial Audio Room,则将改变声笼/声障算法的行为,并使用 Spatial Audio Room 提供的附加信息。若发声体和听者之间的视线测试失败,则会发生以下某种情况。
  • 在听者和发声体处在同一 Room 时,仅针对干声路径设置 Wwise 声障滤波器。
  1. 在发声体和听者处在不同 Room 时,针对湿声和干声路径设置 Wwise 声障滤波器。
  • 在没有 Spatial Audio Room 的情况下,算法会假定所有处在听者视线之外的声音都会被遮蔽,同时针对湿声和干声路径设置 Wwise 声笼滤波器。

在 Wwise 中,您可以在 Project Settings 的 Obstruction/Occlusion 选项卡下微调 Portal 阴影区的滤波响应。

SATutorialProjectSettingsObstructionVolume.png
Obstruction Volume 曲线
SATutorialProjectSettingsObstructionLPF.png
Obstruction LPF 曲线

C.4. Portal 和 Reverb

通过 Portal 传播的声音可进行混响处理并输出到听者当前所在 Room。以下步骤阐述了如何在 Spatial Audio Tutorial Map 中予以配置。

  1. 在 Wwise 工程中:
    1. 找到 Room Reverb 所用 Auxiliary Bus。我们希望将发出声音的 Room 的混响效果馈送到其他 Room 的混响效果中。
      1. 在 Auxiliary Bus Property Editor 的 General Settings 选项卡中,确保启用 Use game-defined auxiliary sends。
        SATutorialAuxiliaryBusPropertyEditorGeneralSettingsRoom.png
        Enable 'Use game-defined auxiliary sends' of a room Auxiliary Bus.
  2. 生成 SoundBank,然后启动场景并连接到 Wwise 设计工具。
  3. 在启用了辅助发送的 Room 中播放声音,然后转到相连的 Room。
    1. 您应会看到声音信号的湿声部分还会馈送听者所在 Room 的混响效果。
      SATutorialAdvancedProfilerVoicesGraphPortalReverb.png
      SmallRoom 的混响效果被馈送到了 LargeRoom 的混响效果中

C.5. Room Tone

有时,Room 内会有像空调嗡嗡声这样的特定环境声。为了重现这种效果,您可以针对 Spatial Audio Room 游戏对象发送 Event。在听者和发声体处在同一 Room 时,声音会被定位在听者所在位置。在听者和发声体处在不同 Room 时,听者会通过连通两个 Room 的 Portal 听到房间底噪 (Room Tone)。

  1. 在 Wwise 工程中:
    1. 创建新的 Sound SFX 并用于房间底噪。
      1. Enable 'Use game-defined aux sends' if you want the sound to send to reverb
      2. Add an attenuation, if desired, for distance attenuation curves.
    2. 右键单击 Sound SFX,然后依次选择 New Event > Play,来创建带有房间底噪的 Play Event。
  2. 在 Unreal 中:
    1. 将前面章节中创建的 Event 从 WAAPI Picker 拖到 Content Browser 中。
    2. 在其中一个 Room 对应的 Ak Event 分区下,将此 Event 添加到 Ak Audio Event 参数。
      1. 调节 Aux Send Level 来将部分声音馈送到该 Room 的混响效果中。
      2. 您可以通过选中 Auto Post 方框来在 BeginPlay 时发送房间底噪 Event,也可调用常用的 Blueprint 函数来针对游戏对象发送 Event。
        SATutorialLargeRoomAkAudioEvent.png
        在 Spatial Audio Volume 的 AkEvent 分区中启用 Room
    3. 在 Spatial Audio Tutorial Map 中,我们在 Level Blueprint 中使用了 Blueprint 函数来激活和停用房间底噪。
      1. 在 World Outliner 中选中带有房间底噪的 AkSpatialAudioVolume 时,右键单击 Level Blueprint 来创建引用对象。
      2. 从引用对象拖动连线,并搜索 Post Associated Ak Event。
      3. 按照相同方式搜索 Stop 函数。
      4. 添加按键作为输入节点。
        SATutorialLevelBlueprintRoomTone.png
        通过 Level Blueprint 播放和停止房间底噪
  3. 生成 SoundBank。
  4. 启动场景并连接到 Wwise 设计工具。
  5. 转到带有房间底噪的 Room,并按下按键来触发房间底噪。确认可以听到声音。
    1. 在 Advanced Profiler 视图中,应会看到当前触发的 Event。
      SATutorialRoomToneAdvancedProfiler.png
      在播放房间底噪时查看 Advanced Profiler 视图
    2. 在 3D Game Object Viewer 中,可一边来回移动听者,一边察看 Room 游戏对象。
      1. 若听者和发声体处在同一 Room,则 Room 会在听者所在位置播放声音。您会看到 Room 游戏对象跟随“听者”游戏对象。
      2. 若听者和发声体处在不同 Room,则会将 Room 游戏对象定位在 Portal 位置,并在其与“听者”游戏对象之间绘制路径。
        SATutorialRoomToneGameObject3DViewer.png
        在 Game Object 3D Viewer 中察看 Room 游戏对象

D – Diffraction

在发声体和听者之间的视线被障碍物阻挡时,Spatial Audio 会围绕该物体创建衍射路径并对行为进行逼真的模拟。根据声音绕过障碍物边缘时的路径角度,声音会被衰减,以此模拟声障效果。

注記: 在使用 Spatial Audio Diffraction 时,请在 Unreal Engine 端禁用声障/声笼。同时将发声体 (AkComponent) 的 Occlusion Refresh Interval 设为 0。

在 SpatialAudioTutorialMap 中,我们可以在障碍物外围和建筑物外墙附近添加 Spatial Audio Diffraction。

  1. 在 Wwise 工程中,确保针对相应的 Sound SFX 启用衍射以便为发声体应用衍射效果。
    1. 在 Sound Property Editor 的 Positioning 选项卡中启用 Diffraction。
  2. 在 Unreal 中:
    1. 单击每个相应的 AkAmbientSound Actor 以便播放启用了衍射的声音。
      1. Occlusion Refresh Interval 设为 0。
    2. 单击用于建筑物外墙的 AkSpatialAudioVolume。
      1. 在 Acoustic Surface Properties 分区中,通过选中相应的复选框来启用 Diffraction。
    3. 单击障碍物 Static Mesh 外围。
      1. 在 Geometry 分区中,通过在 Diffraction 下选中相应的复选框来启用 Diffraction。
  3. 生成 SoundBank。
  4. 播放声音并连接到 Wwise。
    1. 您应当能够在启用了衍射的几何构造上看到衍射边缘,并在播放启用了衍射的声音且发声体和听者之间有障碍物阻挡时看到衍射路径。
      SATutorialGameObject3DViewerDiffraction.png
      在 Game Object 3D Viewer 中查看衍射路径

E - Transmission

When an object appears between the emitter and the listener, the sound can also pass through the object. Spatial Audio models this phenomena by applying occlusion filtering on the direct path of the sound. Occlusion values ranging from 0 to 1 can be applied on an AkSpatialAudioVolume or AkGeometry components. The occlusion value is then sent to Wwise where the associated filter is applied according to the occlusion curves of the project. Typically, a value of 1.0 represents full occlusion, and a value of 0.0 indicates that sound can be transmitted through the geometry.

  1. Enable transmission in the spatial audio init settings
    SATutorialInitializationSpatialAudioSettings.png
    Spatial Audio Init Settings
  2. The transmission value of a sound is the maximum occlusion value of spatial audio geometries or rooms that the sound encounters in a direct path from the emitter to the listener.
    1. On AkSpatialAudioVolume components,
      1. an occlusion value can be associated with each acoustic surface, if the component enables surface reflectors
        SATutorialAkSpatialAudioVolumeAcousticSurfaceOcclusion.png
        Occlusion Values for each acoustic surface
      2. an occlusion value can be associated to the walls of the room in Wall Occlusion, if the component enables room.
        SATutorialAkSpatialAudioVolumeWallOcclusion.png
        Wall Occlusion of the Room
    2. On AkGeometry components,
      1. the occlusion value can be overriden in the Acoustic Properties Override parameter
        1. for the collision mesh
          SATutorialAkGeometryAcousticPropertiesOverrideCollision.png
          Override the occlusion value of the simple collision mesh in the AkGeometry component
        2. or for each material of the static mesh
          SATutorialAkGeometryAcousticPropertiesOverrideStatic.png
          Override the occlusion value of the static mesh in the AkGeometry component
      2. the occlusion value can also be set per Physical Materials in the AkGeometry Surface Properties Map of the Integration Settings
        SATutorialAkGeometrySurfacePropertiesMap.png
        Associate occlusion values to Physical Materials
  3. Adjust the occlusion curves in Wwise Authoring in the Obstruction/Occlusion tab of the Project Settings.
    SATutorialProjectSettingsOcclusionVolume.png
    Occlusion volume curve
    SATutorialProjectSettingsOcclusionLPF.png
    Occlusion LPF curve