节前,我们已经将【性能黑榜】上的 Top10 规则均做了详细的解读(可戳文末相关链接回顾)。无论是大家在开发时的疏忽,还是相关知识点的缺失,这些问题的积累最终都会反映到项目的性能表现上。为此,我们将这些规则曝光出来,并且以一个个知识点的形式逐一解读。

今天,我们来继续剖析【UWA 本地资源检测】中和音频视频相关的规则。我们将力图以浅显易懂的表达,让职场萌新或优化萌新深入理解。


1、未使用 Streaming 加载的长音频

这里我们先了解一下 Unity 里音频加载的三种方式:

Decompress On Load
音频文件以压缩形式存储在磁盘上,加载时直接解压放到内存中。这种方式在内存占用上没有优势,但在后续播放时对 CPU 的计算需求是最小的。一般来讲这种方式更适用于短小的音频。

Compressed In Memory
音频文件以压缩形式存放在内存里,使用时再解压。这意味着会有更多的 CPU 开销,但是在加载速度和内存占用上具有优势。这种情况适用于大型音频文件。

Streaming
音频文件存放在磁盘中,加载时循环以下操作:“从磁盘读取一部分,解压到内存中,播放,卸载”。这种方式在内存占用上相较而言是最小的,但在 CPU 的消耗上是最不具优势的。

而在音频的实际运用中,背景音乐的使用是普遍存在的。几乎所有游戏都会使用 BGM 以增强对游戏氛围和环境的渲染。结合以上关于音频加载方式的描述可以看出,采用 Streaming 方式去加载背景音乐,可以有效减少内存占用和加载时间,从而降低 Audio 资源对项目总体内存和加载时间的影响。

因此,UWA 使用这条规则,找出非 Streaming 加载的音频,再由开发团队依据这些音频的具体使用场合,去决定最适合的加载方式。


2、未使用 PCM 格式的音频

这条规则面向的是音频压缩时的编码方式。Unity 支持的音频压缩方式有如下三种:

PCM
全称是 Pulse-Code Modulation。属于脉冲调制编码,它将模拟信号转换为数字信号,实质上没有经过编码,没有进行压缩,所以在音质上是属于完全无损的原始音频。而且相较于原生的模拟信号,它的抗干扰能力更强,保真效果更好。

Vorbis
应该叫做 OGG Vorbis。类似 mp3 格式,但这是一种免费开发的非商业压缩格式。属于有损压缩。

ADPCM
Adaptive Differential Pulse Code Modulation,自适应差分脉冲编码调制。是一种基于 PCM 的优化压缩方式,但也属于有损压缩。

未使用 PCM 格式的音频可能存在音质问题,所以我们将这些音频筛选出来,以供开发团队进行进一步的检查,去考虑音频格式和原音频的质量是否符合预期的使用需求。


3、双声道的音频

在导入音频文件时,我们可以发现,有些音频文件是多声道的(我们常见的是左右双声道),如下图:

在 Android 设备上,双声道音频对声音的效果提升不大,但是会占用双倍内存。所以建议使用单声道的音频。

而对于这些原本就是双声道的音频,可以考虑开启 Force To Mono:

勾选 Force To Mono 的情况下,Unity 会将音频合并成单声道,从而节约内存。

所以在本条规则筛选出这些双声道音频后,开发团队可以结合音频的实际表现效果去决定是否要对音频进行设置上的修改。


4、尺寸过大的视频资源

大尺寸的视频资源在表现效果上会更好,但是如果超过了目标设备群体的性能范围,那不仅提升效果有限,而且还会导致内存上的额外占用。

根据 UWA 对大数据的分析,在当前设备的性能范围内,512 的视频尺寸能够保证在大部分的设备上达到所需的表现效果,同时不会对设备性能造成额外的压力。

需要说明的是,每一项检测规则的阈值都可以由开发团队依据自身项目的实际需求去设置合适的阈值范围,这也是本地资源检测的一大特点。同时,也欢迎大家来使用 UWA 推出的本地资源检测服务,可帮助大家尽早对项目建立科学的美术规范。

万行代码屹立不倒,全靠基础掌握得好!

性能黑榜相关阅读

《那些年给性能埋过的坑,你跳了吗?》
《那些年给性能埋过的坑,你跳了吗?(第二弹)》
《掌握了这些规则,你已经战胜了 80% 的对手!》


↙↙↙阅读原文可查看相关链接,并与作者交流