Unity 之 UPR优化建议汇总
Posted 陈言必行
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity 之 UPR优化建议汇总相关的知识,希望对你有一定的参考价值。
Unity UPR优化建议汇总
- 平均帧率。
- ReservedMono峰值(MB)
- 纹理资源的峰值。
- 网格资源的峰值。
- 动画资源的峰值。
- Draw Call峰值。
- Tris峰值(面)
- Camera Render平均耗时
- Shader CreateGPUProgram 平均耗时
- ReservedUnity峰值
- ReservedMono峰值
- TexturesSize峰值
- AnimationClipsSize峰值
- MaterialCount峰值
- SkinnedMesh均值
打开UPR的测试报告,左侧菜单栏选择测试概况,可以看到报告解读
平均帧率。
推荐值 > 25 帧
UPR优化建议
- 查看CPU占用Top函数,从高到低开始依次分析和优化。
- 查看GC占用Top函数,GC是大部分卡顿的主要原因。
- 查看脚本所造成的性能损耗。
- 降低游戏的渲染分辨率,手机帧率低的时候,减少每一帧要处理的像素数量。
ReservedMono峰值(MB)
项目运行时Mono管理和分配的托管堆内存。
推荐值 < 80 MB
UPR优化建议
Unity项目中的内存占用主要由静态资源、AssetBundle 和Mono堆内存组成。
- 使用UPR资源检测工具检测项目资源。查看资源的内存占用是否合理,并且是否存在资源冗余的问题。
- 查看Mono堆内存使用的合理性:ReservedMono峰值是否超过了UPR推荐值,ReservedMono是否存在持续上升的趋势。
- Mono堆内存占用量的主要来自于配置文件的读取和解析操作,查看配置文件读取操作的堆内存使用的合理性。
- 查看AssetBundle在内存中的驻留情况。
纹理资源的峰值。
推荐值 < 50 MB
UPR优化建议
决定纹理资源大小的因素主要有三种:分辨率、格式和Mipmap是否开启。
- 降低分辨率,根据Game摄像机距离物体最近时,物体所占的像素大小来确定最大分辨率。
- 拆分透明通道(Alpha), 因为带Alpha通道的贴图 Unity会默认选择RGBA格式。
- 调整压缩格式,尽量选用当前平台支持的最高压缩格式。
- 禁用Mipmap。
- 启用Use Crunch Compression,Crunch是Unity支持的最新压缩格式,压缩比非常高。
推荐使用UPR资源检测工具检测项目资源。
网格资源的峰值。
推荐值 < 20 MB
UPR优化建议
- 减少顶点,在可以实现美术效果的前提下,顶点越少越好。
- 开启Optimize Mesh选项。
推荐使用UPR资源检测工具检测项目资源。
动画资源的峰值。
推荐值 < 15 MB
UPR优化建议
- 减小动画长度。
- 减少骨骼数量,删除无效的骨骼点。
- 减少关键帧密度,并减少导入的冗余关键帧。
- 减少动画精度,降低动画大小。
推荐使用UPR资源检测工具检测项目资源。
Draw Call峰值。
Windows端的Draw Call值可能会偏高,请以手机端的值为准。
推荐值 < 250(次)
UPR优化建议
使用WinUpr进行测试,并记录RenderDoc,配合RenderDoc图形调试器,进行图形性能调优。
- UI DrawCall数量建议控制在15-40之间,UI DrawCall过多或过少,都会增大性能的消耗。
- 查看渲染对象的DrawCall合批是否正确。
Tris峰值(面)
推荐值 < 200000(面)
UPR优化建议
- 查看其渲染网格数量的合理性。
- 加大对Game Object的裁剪力度。
- 简化场景网格。
区间详情 – 性能概况 – CPU细节:
Camera Render平均耗时
推荐值 不超过15ms的帧占比 > 95%
UPR优化建议
在"CPU > 函数性能"页面中,查看Camera.Render的性能详情,有助于快速定位渲染模块的性能瓶颈。
Shader CreateGPUProgram 平均耗时
推荐值 < 20(ms)
UPR优化建议
推荐使用UPR资源检测工具检测项目资源。
查看Shader是否存在资源冗余的问题,应避免重复解析的问题出现。
区间详情 – 性能概况 – 内存细节:
ReservedUnity峰值
为Unity引擎自身逻辑所需要使用的内存分配,包括各模块管理类的内存占用,序列化信息、WebStream、资源的内存占用等等。
推荐值 < 150(MB)
UPR优化建议
- 排查是否存在AssetBundle没有被清理干净的情况。
- Assetbundle打包的时候,如果只有一个引用的就不设置AssetbundleName。减少Assetbundle文件数量。
- 使用SerializedFile加载Assetbundle完之后,即时Unload。
- 对于占用WebStream较大的AssetBundle文件,使用LoadFromCacheOrDownLoad或CreateFromFile来进行替换,即将解压后的AssetBundle数据存储于本地Cache中进行使用。
- 分析纹理、网络、动画、音频和材质等资源的内存占用性能瓶颈,针对性地进行优化。
ReservedMono峰值
项目运行时Mono管理和分配的托管堆内存。 对于绝大多数基于Unity引擎开发的项目而言,除ios平台外,其托管堆内存是由Mono分配和管理的。
推荐值 < 80(MB)
UPR优化建议
- 排查是否存在AssetBundle没有被清理干净的情况。
- Assetbundle打包的时候,如果只有一个引用的就不设置AssetbundleName。减少Assetbundle文件数量。
- 使用SerializedFile加载Assetbundle完之后,即时Unload。
- 对于占用WebStream较大的AssetBundle文件,使用LoadFromCacheOrDownLoad或CreateFromFile来进行替换,即将解压后的AssetBundle数据存储于本地Cache中进行使用。
- 分析纹理、网络、动画、音频和材质等资源的内存占用性能瓶颈,针对性地进行优化。
TexturesSize峰值
项目中纹理资源的峰值。
推荐值 < 50(MB)
UPR优化建议
推荐使用UPR资源检测工具检测项目资源。
决定纹理资源大小的因素主要有三种:分辨率、格式和Mipmap是否开启。
- 降低分辨率,根据Game摄像机距离物体最近时,物体所占的像素大小来确定最大分辨率。
- 拆分透明通道(Alpha), 因为带Alpha通道的贴图 Unity会默认选择RGBA格式。
- 调整压缩格式,尽量选用当前平台支持的最高压缩格式。
- 禁用Mipmap。
- 启用Use Crunch Compression,Crunch是Unity支持的最新压缩格式,压缩比非常高。
AnimationClipsSize峰值
项目运行中AnimationClipsSize的峰值。
推荐值 < 20(MB)
UPR优化建议
推荐使用UPR资源检测工具检测项目资源。
- 减小动画长度。
- 减少骨骼数量,删除无效的骨骼点。
- 减少关键帧密度,并减少导入的冗余关键帧。
- 减少动画精度,降低动画大小。
MaterialCount峰值
项目运行中Material数量峰值。
推荐值 < 300(个)
UPR优化建议
推荐使用UPR资源检测工具检测项目资源。
1.Material数量过多会导致渲染开销的增加。
2.对于Instance类型的冗余Material资源,使用MaterialPropertyBlock来替换Material属性操作,可以省去实体对象本身的开销。
3.对于非Instance类型的冗余Material,查看AssetBundle中是否存在冗余的资源。
SkinnedMesh均值
推荐值 < 50(个)
UPR优化建议
推荐使用UPR资源检测工具检测项目资源。
- 减少SkinnedMeshRenderer组件的数量。如果游戏中该模型并不会使用骨骼动画,可以将SkinnedMeshRenderer组件替换为MeshRenderer。
- 在导入模型时,可以选择不导入动画。
- 减少使用SkinnedMeshRenderer的对象的Mesh顶点数。
- 使用GPU Skinning。在硬件平台支持并且GPU资源足够的条件下,可以在Player Setting中启用GPU Skinning,将蒙皮任务从CPU转移到GPU。
以上是关于Unity 之 UPR优化建议汇总的主要内容,如果未能解决你的问题,请参考以下文章