Unity加载模块深度解析之动画资源

Unity加载模块深度解析之动画资源

在之前的技术推送中,我们曾为大家深入分析了加载模块中的纹理、网格、Shader等资源。今天我们继续该系列,和大家分享在加载动画片段时需要注意的事项。
请大家持续关注本系列,集齐所有资源类型的深度分析后可以召唤大神哦!

这是侑虎科技第143篇原创文章,欢迎转发分享,未经作者授权请勿转载。同时如果您有任何独到的见解或者发现也欢迎联系我们,一起探讨。(QQ群:793972859)


资源加载性能测试代码

与之前几篇所提出的测试代码一样,我们对于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。
请输入图片描述

通过上述测试,我们可以得到以下结论:

  1. Optimal压缩方式确实可以提升资源的加载效率,无论是在高端机、中端机还是低端机上;
  2. 硬件设备性能越好,其加载效率越高。但随着设备的提升,Keyframe Reduction和Optimal的加载效率提升已不十分明显;
  3. Optimal压缩方式可能会降低动画的视觉质量,因此,是否最终选择Optimal压缩模式,还需根据最终视觉效果的接受程度来决定。

优化建议

对于资源的优化,我们的建议是防范大于救灾!具体可行的方法如下:

  1. 自己项目组内部写一个资源检测工具(或者在Unity Asset Store中查找相关资源检测工具)来检查AnimationClip资源的数据信息,检测其压缩格式、文件大小是否合理;
  2. 如果你的项目正在使用UWA性能测评服务,那么可在“具体资源使用界面”查看AnimationClip资源的内存占用和动画时长等参数,从而来定位是否有不合规的AnimationClip资源;
    请输入图片描述
  3. 如果你的项目正在使用UWA资源检测服务,那么可在“资源使用”界面查看AnimationClip资源,重点查看其“Dense曲线数”和“Stream曲线数”。一般来说,只有开启Optimal压缩模式的AnimationClip资源才会有“Dense曲线数”。
    请输入图片描述

以上为AnimationClip资源在加载时的性能测试。关于加载模块的性能问题,我们会不断推出音频资源的加载性能分析、资源卸载性能分析、资源实例化性能分析、不同加载方式的性能分析等一系列技术文章,并对目前UWA所检测过项目的共性问题进行总结,以期让大家对项目的加载效率有更加深入的认知,并提升对加载模块的掌控能力。

延伸阅读
加载模块之深度解析之纹理篇
加载模块之深度解析之网格篇
加载模块之深度解析之Shader篇

  • Unity性能优化 R11; 设置篇 | Tim's Blog 发表在 5月30日 回复

    [...]Unity加载模块深度解析之动画资源[...]