资源加载性能测试代码
与之前几篇所提出的测试代码一样,我们对于AnimationClip资源的加载性能分析同样使用该测试代码。同时,我们将AnimationClip文件制作成一定大小的AssetBundle文件,并逐一通过以下代码在不同设备上进行加载,以期得到相应的资源加载性能比较。
测试环境
引擎版本:Unity 5.4版本
测试设备:三台不同档次的移动设备(Android:红米2、红米Note2和三星S6)
AnimationClip资源
AnimationClip资源是项目运行时最常加载的资源之一,且其加载效率主要由其自身加载量决定,而决定AnimationClip资源加载量的主要因素则是它的压缩格式。目前,Unity引擎对导入的AnimationClip提供三种压缩格式,Off、Keyframe Reduction和Optimal。其中,Off表示不采用压缩处理;Keyframe Reduction表示使用关键帧进行处理,Optimal则表示Unity引擎会根据动画曲线的特点来自动选择一个最优的压缩方式,可能是关键帧压缩,也可能是Dense压缩。
注:关于AnimaitonClip曲线中具体压缩方法解释,请查看Unity官方Manual文档:
https://docs.unity3d.com/Manual/class-Animator.html
测试:不同压缩格式的AnimationClip资源加载效率测试
我们制作了三组测试用例,AnimationClip资源数量分别为10个、30个和50个。同时,每组AnimationClip又根据其压缩格式的不同分为三小组:None Compression、Keyframe Reduction和Optimal。
我们在三种不同档次的机型上加载这些AnimationClip资源,为降低偶然性,每台设备上重复进行十次加载操作并将取其平均值作为最终性能开销。具体测试结果如下表所示。
第1组测试
10个“None Compression”资源、10个“Keyframe Reduction”资源和10个“Optimal”资源,打包成AssetBundle文件后,其文件大小分别为:409KB、172KB和92KB。
第2组测试
30个“None Compression”资源、30个“Keyframe Reduction”资源和30个“Optimal”资源,打包成AssetBundle文件后,其文件大小分别为:1.42MB、514KB和312KB。
第3组测试
50个“None Compression”资源、50个“Keyframe Reduction”资源和50个“Optimal”资源,打包成AssetBundle文件后,其文件大小分别为:2.46MB、858KB和525KB。
通过上述测试,我们可以得到以下结论:
- Optimal压缩方式确实可以提升资源的加载效率,无论是在高端机、中端机还是低端机上;
- 硬件设备性能越好,其加载效率越高。但随着设备的提升,Keyframe Reduction和Optimal的加载效率提升已不十分明显;
- Optimal压缩方式可能会降低动画的视觉质量,因此,是否最终选择Optimal压缩模式,还需根据最终视觉效果的接受程度来决定。
优化建议
对于资源的优化,我们的建议是防范大于救灾!具体可行的方法如下:
- 自己项目组内部写一个资源检测工具(或者在Unity Asset Store中查找相关资源检测工具)来检查AnimationClip资源的数据信息,检测其压缩格式、文件大小是否合理;
- 如果你的项目正在使用UWA性能测评服务,那么可在“具体资源使用界面”查看AnimationClip资源的内存占用和动画时长等参数,从而来定位是否有不合规的AnimationClip资源;
- 如果你的项目正在使用UWA资源检测服务,那么可在“资源使用”界面查看AnimationClip资源,重点查看其“Dense曲线数”和“Stream曲线数”。一般来说,只有开启Optimal压缩模式的AnimationClip资源才会有“Dense曲线数”。
以上为AnimationClip资源在加载时的性能测试。关于加载模块的性能问题,我们会不断推出音频资源的加载性能分析、资源卸载性能分析、资源实例化性能分析、不同加载方式的性能分析等一系列技术文章,并对目前UWA所检测过项目的共性问题进行总结,以期让大家对项目的加载效率有更加深入的认知,并提升对加载模块的掌控能力。
原文出处:侑虎科技
本文作者:admin
转载请与作者联系,同时请务必标明文章原始出处和原文链接及本声明。