Unity 之 UPR优化建议汇总

Posted 陈言必行

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity 之 UPR优化建议汇总相关的知识,希望对你有一定的参考价值。

Unity UPR优化建议汇总

打开UPR的测试报告,左侧菜单栏选择测试概况,可以看到报告解读

平均帧率。

推荐值 > 25 帧
UPR优化建议

  1. 查看CPU占用Top函数,从高到低开始依次分析和优化。
  2. 查看GC占用Top函数,GC是大部分卡顿的主要原因。
  3. 查看脚本所造成的性能损耗。
  4. 降低游戏的渲染分辨率,手机帧率低的时候,减少每一帧要处理的像素数量。

ReservedMono峰值(MB)

项目运行时Mono管理和分配的托管堆内存。

推荐值 < 80 MB

UPR优化建议
Unity项目中的内存占用主要由静态资源、AssetBundle 和Mono堆内存组成。

  1. 使用UPR资源检测工具检测项目资源。查看资源的内存占用是否合理,并且是否存在资源冗余的问题。
  2. 查看Mono堆内存使用的合理性:ReservedMono峰值是否超过了UPR推荐值,ReservedMono是否存在持续上升的趋势。
  3. Mono堆内存占用量的主要来自于配置文件的读取和解析操作,查看配置文件读取操作的堆内存使用的合理性。
  4. 查看AssetBundle在内存中的驻留情况。

纹理资源的峰值。

推荐值 < 50 MB
UPR优化建议
决定纹理资源大小的因素主要有三种:分辨率、格式和Mipmap是否开启。

  1. 降低分辨率,根据Game摄像机距离物体最近时,物体所占的像素大小来确定最大分辨率。
  2. 拆分透明通道(Alpha), 因为带Alpha通道的贴图 Unity会默认选择RGBA格式。
  3. 调整压缩格式,尽量选用当前平台支持的最高压缩格式。
  4. 禁用Mipmap。
  5. 启用Use Crunch Compression,Crunch是Unity支持的最新压缩格式,压缩比非常高。

推荐使用UPR资源检测工具检测项目资源。

网格资源的峰值。

推荐值 < 20 MB
UPR优化建议

  1. 减少顶点,在可以实现美术效果的前提下,顶点越少越好。
  2. 开启Optimize Mesh选项。
    推荐使用UPR资源检测工具检测项目资源。

动画资源的峰值。

推荐值 < 15 MB
UPR优化建议

  1. 减小动画长度。
  2. 减少骨骼数量,删除无效的骨骼点。
  3. 减少关键帧密度,并减少导入的冗余关键帧。
  4. 减少动画精度,降低动画大小。
    推荐使用UPR资源检测工具检测项目资源。

Draw Call峰值。

Windows端的Draw Call值可能会偏高,请以手机端的值为准。

推荐值 < 250(次)
UPR优化建议

使用WinUpr进行测试,并记录RenderDoc,配合RenderDoc图形调试器,进行图形性能调优。

  1. UI DrawCall数量建议控制在15-40之间,UI DrawCall过多或过少,都会增大性能的消耗。
  2. 查看渲染对象的DrawCall合批是否正确。

Tris峰值(面)

推荐值 < 200000(面)

UPR优化建议

  1. 查看其渲染网格数量的合理性。
  2. 加大对Game Object的裁剪力度。
  3. 简化场景网格。

区间详情 – 性能概况 – CPU细节:

Camera Render平均耗时

推荐值 不超过15ms的帧占比 > 95%

UPR优化建议

在"CPU > 函数性能"页面中,查看Camera.Render的性能详情,有助于快速定位渲染模块的性能瓶颈。

Shader CreateGPUProgram 平均耗时

推荐值 < 20(ms)

UPR优化建议

推荐使用UPR资源检测工具检测项目资源。
查看Shader是否存在资源冗余的问题,应避免重复解析的问题出现。


区间详情 – 性能概况 – 内存细节:

ReservedUnity峰值

为Unity引擎自身逻辑所需要使用的内存分配,包括各模块管理类的内存占用,序列化信息、WebStream、资源的内存占用等等。

推荐值 < 150(MB)

UPR优化建议

  1. 排查是否存在AssetBundle没有被清理干净的情况。
  2. Assetbundle打包的时候,如果只有一个引用的就不设置AssetbundleName。减少Assetbundle文件数量。
  3. 使用SerializedFile加载Assetbundle完之后,即时Unload。
  4. 对于占用WebStream较大的AssetBundle文件,使用LoadFromCacheOrDownLoad或CreateFromFile来进行替换,即将解压后的AssetBundle数据存储于本地Cache中进行使用。
  5. 分析纹理、网络、动画、音频和材质等资源的内存占用性能瓶颈,针对性地进行优化。

ReservedMono峰值

项目运行时Mono管理和分配的托管堆内存。 对于绝大多数基于Unity引擎开发的项目而言,除ios平台外,其托管堆内存是由Mono分配和管理的。

推荐值 < 80(MB)

UPR优化建议

  1. 排查是否存在AssetBundle没有被清理干净的情况。
  2. Assetbundle打包的时候,如果只有一个引用的就不设置AssetbundleName。减少Assetbundle文件数量。
  3. 使用SerializedFile加载Assetbundle完之后,即时Unload。
  4. 对于占用WebStream较大的AssetBundle文件,使用LoadFromCacheOrDownLoad或CreateFromFile来进行替换,即将解压后的AssetBundle数据存储于本地Cache中进行使用。
  5. 分析纹理、网络、动画、音频和材质等资源的内存占用性能瓶颈,针对性地进行优化。

TexturesSize峰值

项目中纹理资源的峰值。

推荐值 < 50(MB)

UPR优化建议

推荐使用UPR资源检测工具检测项目资源。

决定纹理资源大小的因素主要有三种:分辨率、格式和Mipmap是否开启。

  1. 降低分辨率,根据Game摄像机距离物体最近时,物体所占的像素大小来确定最大分辨率。
  2. 拆分透明通道(Alpha), 因为带Alpha通道的贴图 Unity会默认选择RGBA格式。
  3. 调整压缩格式,尽量选用当前平台支持的最高压缩格式。
  4. 禁用Mipmap。
  5. 启用Use Crunch Compression,Crunch是Unity支持的最新压缩格式,压缩比非常高。

AnimationClipsSize峰值

项目运行中AnimationClipsSize的峰值。

推荐值 < 20(MB)

UPR优化建议

推荐使用UPR资源检测工具检测项目资源。

  1. 减小动画长度。
  2. 减少骨骼数量,删除无效的骨骼点。
  3. 减少关键帧密度,并减少导入的冗余关键帧。
  4. 减少动画精度,降低动画大小。

MaterialCount峰值

项目运行中Material数量峰值。

推荐值 < 300(个)

UPR优化建议

推荐使用UPR资源检测工具检测项目资源。
1.Material数量过多会导致渲染开销的增加。
2.对于Instance类型的冗余Material资源,使用MaterialPropertyBlock来替换Material属性操作,可以省去实体对象本身的开销。
3.对于非Instance类型的冗余Material,查看AssetBundle中是否存在冗余的资源。

SkinnedMesh均值

推荐值 < 50(个)

UPR优化建议

推荐使用UPR资源检测工具检测项目资源。

  1. 减少SkinnedMeshRenderer组件的数量。如果游戏中该模型并不会使用骨骼动画,可以将SkinnedMeshRenderer组件替换为MeshRenderer。
  2. 在导入模型时,可以选择不导入动画。
  3. 减少使用SkinnedMeshRenderer的对象的Mesh顶点数。
  4. 使用GPU Skinning。在硬件平台支持并且GPU资源足够的条件下,可以在Player Setting中启用GPU Skinning,将蒙皮任务从CPU转移到GPU。

以上是关于Unity 之 UPR优化建议汇总的主要内容,如果未能解决你的问题,请参考以下文章

Unity游戏开发性能优化之在真机上开启DeepProfile与踩坑

Unity UPR使用详解(未完待续.....)

天天直播 | 中国增强版功能介绍之性能测试工具UPR

Unity开发之UI与Lua知识汇总!

Node.js 实战之—优化汇总

Unity 面试经验汇总