前言

正在学习Doctor 张.鑫大佬的移动游戏加载性能和内存管理,内容非常非常的干,所以我烧了很多开水,边喝边看,一边拿小本几做好笔记

本文只是关于前2章的内容笔记,关于各种资源的加载耗时

纹理资源加载耗时


重复加载十次,取平均值

纹理尺寸测试结论

1、纹理资源的分辨率对加载性能影响较大,分辨率越高,其加载越为耗时。设备性能越差,其耗时差别越为明显;

2、设备越好,加载效率确实越高。但是,对于硬件支持纹理(ETC1/PVRTC)来说,中高端设备的加载效率差别已经很小,比如图中的红米Note2和三星S6设备,差别已经很不明显。


纹理格式测试结论

1、纹理资源的格式对加载性能影响同样较大,Android平台上,ETC1和ETC2的加载效率最高。同样,iOS平台上,PVRTC 4BPP的加载效率最高。

2、RGBA16格式纹理的加载效率同样很高,与RGBA32格式相比,其加载效率与ETC1/PVRTC非常接近,并且设备越好,加载开销差别越不明显;

3、RGBA32格式纹理的加载效率受硬件设备的性能影响较大,ETC/PVRTC/RGBA16受硬件设备的影响较低。

网格资源加载耗时

网格面数加载耗时结论

1、资源的数据量对加载性能影响较大,面片数越多,其加载越为耗时。设备性能越差,其耗时差别越为明显;

2、随着硬件设备性能的提升,其加载效率差异越来越不明显。

相同面片数、不同顶点属性的加载效率测试

网格顶点属性测试结论

1、顶点属性的增加对内存和AssetBundle包体大小影响较大。与测试1中未引入Tangent顶点属性的网格数据相比,测试2中的网格数据在内存上均大幅度增加(增加量与网格顶点数有关),且AssetBundle大小同样有成倍(1~2)的增加。

2、顶点属性增加对于加载效率影响较大,且顶点数越多,影响越大。

网格加载结论

1、在保证视觉效果的前提下,尽可能采用“够用就好”的原则,即降低网格资源的顶点数量和面片数量;

2、研发团队对于顶点属性的使用需谨慎处理。通过以上分析可以看出,顶点属性越多,则内存占用越高,加载时间越长;

3、如果在项目运行过程中对网格资源数据不进行读写操作(比如Morphing动画等),那么建议将Read/Write功能关闭,既可以提升加载效率,又可以大幅度降低内存占用。

AnimationClip资源加载耗时

防范大于救灾!

资源加载耗时测试结论

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

这里是说的一个动画精度的问题,unity的动画文件是一个txt,打开后可以把浮点数的精度,从小数点8位,压缩到3位。 在内存跟体积上都有很大提升

动画类型,Humanoid会比Generic类型小很多,其原理是因为Humanoid把动画数据转到了肌肉空间,从原来的xyzw四个值,变成了一个value值,所以体积小很多

Shader加载耗时

Shader解析耗时结论

1、Shader资源的物理体积与内存占用虽然很小,但其加载耗时开销的CPU占用很高,这主要是因为Shader的解析CPU开销很高,成为了Shader资源加载的性能瓶颈;

2、Mobile/Particles Additive在解析方面的耗时远小于Mobile/Diffuse、Mobile/Bumped Diffsue甚至Mobile/VertexLit;

3、除Mobile/Particles Additive外,其他三个主流Shader在加载时均会造成明显的降帧,甚至卡顿。因此,研发团队应尽可能避免在非切换场景时刻进行Shader的加载操作;

4、随着硬件设备性能的提升,其解析效率差异越来越不明显。

Shader解析耗时如何优化?

1、通过依赖关系打包,将项目中的所有Shader抽离并打成一个独立的AssetBundle文件,其他AssetBundle与其建立依赖;

2、Shader的AssetBundle文件在游戏启动后即进行加载并常驻内存,因为一款项目的Shader种类数量一般在50~100不等,且每个均很小,即便全部常驻内存,其内存总占用量也不会超过2MB;

3、后续Prefab加载和实例化后,Unity引擎会通过AssetBundle之间的依赖关系直接找到对应的Shader资源进行使用,而不会再进行加载和解析操作。

音频资源

结论

从包体大小来说,使用mp3包的体积会下来,如果对音质要求不大的,建议用mp3格式

背景音乐建议用Streaming + 开启Load in Background模式在子线程加载

技能音效可以使用Decompressed On Load,降低cpu开销,内存会大一些,不过技能音频都比较短

粒子系统加载耗时

建议材质剥离,不然每个粒子系统都要加载材质耗时变高
建议多个常用粒子系统,捆绑在一起加载

总结

本篇从以下几大块,列举了unity游戏加载的各类耗时

  1. 纹理资源加载
  2. 网格加载
  3. Animation加载
  4. Shader解析
  5. 音频资源

资源加载的优化是游戏性能优化非常重要的部分!

各种类型的资源,都可以通过合理的设置跟取舍,极大的影响到我们的加载耗时跟内存开销。

比如shader,去掉FallBack,就可使MobileDiffuse之解析耗时从59.9降低到27.6ms,降低了64%

视频里有一句话说的很好:

防范大于救火

这章就结束啦,后面还有加载卸载的管理,以及实例化、内存优化。

好了我要睡觉了 —— 02:43

参考:

https://edu.uwa4d.com/course-intro/1/112

https://blog.uwa4d.com/archives/Loading_AnimationClip.html

最新文章

  1. NPOI操作EXCEL(三)——反射机制进行excel表格数据的解析
  2. 【Win10开发】响应式布局——AdaptiveTrigger
  3. Linux提权(1)-基础版~
  4. FIJ Jobs – 2013/8/12
  5. rac安装oem
  6. Keil µVision4 中出现中文乱码的解决办法
  7. HDOJ-ACM1011(JAVA)
  8. 九度OJ 1468 Sharing -- 哈希
  9. 走过而立之年的Coder
  10. ueditor编辑文章时候,复制粘贴内容,原来的图片不能显示
  11. 【剑指offer】打印单列表从尾部到头部
  12. 使用ServletContextListener和HttpSessionListener两种监听器实现记录当前网站在线人数
  13. Unity3D中切换场景可能导致材质变暗的问题
  14. 产品经理教你如何构建电商电销 CRM 系统
  15. Spring 框架用到的 9 个设计模式汇总!
  16. Hbase学习01
  17. Manual Validation with Data Annotations C#对实体类进行手动验证
  18. rem设置
  19. 【转载】 强化学习(六)时序差分在线控制算法SARSA
  20. XuLA/XuLA2

热门文章

  1. 个人永久性免费-Excel催化剂功能第102波-批量上传本地图片至网络图床(外网可访问)
  2. 个人永久性免费-Excel催化剂功能第77波-专业图表制作辅助之批量维护序列点颜色及数据标签
  3. CentOS 下配置JDK
  4. TP框架基础(一)
  5. layer设置maxWidth及maxHeight解决方案
  6. excel表数据生成定长txt数据
  7. js - 原生ajax访问后台读取数据并显示在页面上
  8. Linux/UNIX编程:使用C语言实现简单的 ls 命令
  9. 自动装配、JavaConfig、XML 三种方案之间,怎么导入和混合配置?
  10. 0 推荐系统——CB和CF