第 3 课

目录

对压缩数据进行解码

性能优化通常会放在游戏制作后期实施,不过这一流程还是非常重要的。因为,假如游戏由于帧率问题而频繁卡顿,整体体验将会受到很大的影响。无论在任何游戏当中,都会运行大量的处理任务,其中就包括解压 Vorbis 编码媒体。为此,我们可以使用 AkBank 组件中提供的 Decode compressed data 功能,来减轻解压 Vorbis 编码媒体时的处理负荷。

这样的话可以在加载 SoundBank(音频包)时对 Vorbis 编码媒体进行解码,下次游戏发送同样的 Event(事件)时就不会占用额外的处理资源了。与不选中此选项相比,此选项会增大 SoundBank 在内存中的大小,跟原先使用 PCM 编码差不多。那么,为什么不从一开始就对 PCM 进行编码呢?比如,对于可下载游戏,我们一般需要将 SoundBank 压缩得很小以便分发,然后在游戏加载时再对 SoundBank 进行解码。在转码后,可在 SoundBank Manager(音频包管理器)中查看解码后 SoundBank 大小的估值。

从上图可以看到,Dungeon SoundBank 是 Region 中解码前后数据大小变化最明显的。为此,我们来设置此 SoundBank 并进行解压,看看有什么区别。接下来,我们首先在解压前察看内存中的数据大小,然后启用 Decode compressed data 选项,来对比一下数据大小的差异。

  1. 在 Unity 菜单栏中,依次转到 Audiokinetic > Certification > 301 > Lesson 3,然后选择 Decompressing SoundBanks

    在将 SoundBank 设为对压缩数据进行解码之前,我们来分析一下当前的内存用量。

  2. 在 Wwise 中,单击 Remote…(远程...)。

  3. 在 Remote Connections(远程连接)窗口中,选中 Wwise Adventure Game (Editor),然后单击 Connect(连接)。

  4. 在 Unity 中,单击 Play

    在游戏完成初始化后,可再次单击 Play 按钮退出 Play 模式。

  5. 按下 ESC 打开《WAG》游戏菜单,然后再次单击 Play 按钮退出 Play 模式。

  6. 在 Wwise 菜单栏中,转到 Layouts(布局),然后选择 Profiler(性能分析器)。

  7. 在 Advanced Profiler(高级性能分析器)中,选中 Memory(内存)选项卡。

  8. 在 Performance Monitor(性能监控器)中,将时间光标往回拖动几秒。

    我们注意到,Dungeon SoundBank 的 Peak Used(用量峰值)约为 2.4 MB。

    接下来,我们在加载 SoundBank 时对其进行解码。Dungeon SoundBank 可在 L3_2 - Dungeon Audio Environment 场景中的 Wwise 游戏对象上找到。

  9. 在 Unity 的 Hierarchy 中,转到 L3_2 - Dungeon Audio Environment 场景,然后选中 Wwise 游戏对象。

  10. 在 Inspector 的 AkBank 组件中,选中 Decode compressed data

    此时将会显示警告窗口。

  11. 单击 OK 关闭对话框。

    这时将启用 Decode compressed data 选项。在该选项之下,确保禁用 Save decoded bank 参数。

    在对 SoundBank 进行解码时,会将解码数据转存到 Prepare Pool 中。Prepare Pool 大小设置属性可在 AkInitializer 组件 Initialization Settings(也叫 AkWwiseInitalizationSettings)中找到。

    [技巧]

    AkWwiseInitalizationSettings Asset 文件用于分配内存池以便进行游戏初始化管理,比如监控游戏同步器、声音位置、解压等。如需进一步了解如何设置内存池,请参阅“第 9 课”或 Wwise-251 认证课程中的“管理预留内存”章节。

    此内存池定义 Wwise 要为准备好的或解码后的 SoundBank 预留多少内存。接下来,我们将 Prepare Pool 调成解码后的 General SoundBank 大小。

    [备注]

    Decode compressed data 选项只能解码 SoundBank 中设为 Vorbis 格式的 Audio Source。因此,该选项并不会影响不含任何 Vorbis 编码媒体的 SoundBank。

  12. 在 Hierarchy 中,选中 WwiseInitializer 游戏对象。

  13. 在 Inspector 中,双击 AkWwiseInitalizationSettings Asset 文件。

    在对 Dungeon SoundBank 进行解码后,会将其转存到 Prepare Pool 中。因此,我们需要将 Prepare Pool 设为解码后的 Dungeon SoundBank 大小。该信息可在 Wwise 的 SoundBank Manager 视图中找到。

    从上图可以看到,Dungeon SoundBank 的 Decoded Size(解码后大小)为 9,159,252 字节 (9.2 MB)。接下来,我们将 Prepare Pool Size 设为 10 MB (10,000,000 byte)。

  14. Prepare Pool Size 属性设为 10000000

    在设置内存池时,可能需要通过进入和退出 Play 模式来应用更改。

  15. 单击 Play

  16. 按下 ESC 打开《WAG》游戏菜单,然后再次单击 Play 按钮退出 Play 模式。

    现在,我们确保应用了内存池数值。接下来,可以进入 Play 模式,同时连接 Profiler。

  17. 单击 Play

  18. 在 Wwise 中,单击 Reconnect(重新连接)。

    我们注意到,在 Advanced Profiler 的 Memory 选项卡中,Pool Name(内存池名称)列不再显示 Dungeon SoundBank。

    这是因为它转存到了 PreparePool。通过查看 Peak Used 列中的 PreparePool,我们会看到分配的运行时内存只有 8.4 MB。为此,我们来返回 Unity 并根据所需大小重新调节 Prepare Pool Size,然后稍微留出一点余量。

  19. 按下 ESC 打开《WAG》游戏菜单,然后再次单击 Play 按钮退出 Play 模式。

    接下来,我们将 Prepare Pool Size 设为 9 MB,只为 PreparePool 内存池预留必要的内存量。

  20. 在 Unity Inspector 中,转到 AkWwiseInitalizationSettings 并将 Prepare Pool Size 设为 9000000

在使用 Decode compressed data 选项时,内存用量会高一些,但这样可以避免在游戏当中占用 CPU 资源来对 Vorbis 编码媒体进行解码,从而确保为玩家提供更加流畅的游戏体验。