Unity-性能优化

1. 性能分析器
  1. 在窗口->分析->分析器中打开性能分析器
  2. DrawCall:位于渲染模块中,表示图像渲染次数
  3. Vertices:位于渲染模块中,表示三角形顶点数
1. 批处理(Batches)
  1. 解释:GPU用于绘制图形渲染,CPU发送消息队列给GPU,GPU从队列中依次渲染图像。渲染的过程很快但取出解析,以及CPU准备,发送消息的过程较慢,因此合并处理再发送可优化性能,即批处理。
  2. 准备工作:将 项目设置->Player->动态批处理 进行勾选,启用动态批处理,这样采用同样材质,( 小于900顶点的对象 | 静态对象)会被同时绘制。

这里用20个立方体进行测试:
启用时:(Batches)DrawCalls 为 7
在这里插入图片描述
禁用时:(Batches)DrawCalls 为 83
在这里插入图片描述

2. 资源优化标准

在这里插入图片描述
在这里插入图片描述

3. 资源加载类型
  1. Decompress On Load(加载时解压缩)
    在硬盘上压缩这个文件,并在第一次加载到内存的时候解压它,这是加载声音文件的默认选项,大多数情况下我们应该使用这个选择 ,适用于小文件。
  2. Compressed In Memory(压缩内存)
    保持声音在内存中是压缩的并在播放时解压缩。这有更多的CPU开销(尤其是OGG / Vorbis格式的压缩文件),但可以提高加载速度并减少内存消 耗,因此这个选项适用于大文件。
  3. Streaming(流式处理)
    直接从磁盘流音频数据。这只使用了原始声音占内存大小的很小一部分。
    该方法使用最少的内存和最多的CPU,它有个很明显的缺点就是不能被引用超过一次。试着让
    Audio Clip产生多个副本的时候会每个都产生数据缓冲区,如果非要这么做会产生大量的内存和CPU消耗。因此这个选择最好是给单实例的Audio Clip,如背景和环境音效。对于手游而言不要优先考虑使用这种方式。
4. 层级细节LOD技术
  1. 该技术实现了根据对象距离摄像机的距离,使用合适的渲染数据(来对对象进行渲染。当距离摄像机特别近时展现更多的细节,比如布料纹理,花纹。当距离摄像机特别远时,,这些渲染就没有效果了。
  2. 若想使用该功能,为组件添加 LOD Group 组件
  3. 可在LOD选择条,选择LOD Levels,进行编辑(增删改),以及查看效果。
    在这里插入图片描述
  4. 将对应纹理组件拖拽到渲染器中,即可实现该渲染模式。
  5. LOD 偏离 使得不同质量级别下,执行LOD逻辑的距离比不同。该数值越大,执行LOD逻辑(切换到较低分辨率纹理)的距离越大。
    在Editor>ProjectSettings>Quality>Other>LOD Bias(LOD 偏离)进行设置。
5. 质量设置
  1. 通过内置的 Quality 配置画面质量等级,并在游戏内通过程序动态切换画面质量,实现画面质量切换功能。
  2. QualitySettings 类静态函数(level 从上到下 0 - 5)
静态函数描述
DecreaseLevel降低当前的品质级别。
GetQualityLevel返回当前的图形品质级别。
IncreaseLevel提高当前的品质级别。
SetQualityLevel设置新的图形品质级别。
6. 视锥体剔除Frustum Culling 和遮挡剔除 Occlusion Culling
  1. 视椎体剔除
    Unity 在渲染时不会显示完全位于视锥体之外的游戏对象,这就是视椎体剔除。默认情况下,摄像机执行视锥体剔除。
  2. 遮挡剔除
    视锥体剔除不会检查视锥体内被挡住的游戏对象,所以Unity还是会渲染这些不可见的游戏对象。这时就会用到遮挡剔除,让视锥体内不可见的游戏对象不执行渲染。
    遮挡剔除配置方法
    • 打开 window -->Rendering(渲染) -->Occlusion Culling(遮挡剔除)

    • 创建一个Occasion Area,设置Area范围 ,即相机可移动或者可以剔除的范围。 在这里插入图片描述

    • 设置需要剔除的物体的Static,勾选Occluder Static 和 Occludee Static

    • 点击Bake 烘焙。

    • 为对应相机勾选遮挡剔除。
      在这里插入图片描述

    • 在可视化中点击摄像机查看效果。
      采用前:
      在这里插入图片描述
      采用后:
      在这里插入图片描述

7. Mesh合并

合并当前对象及所有子对象的蒙皮网络进行合并

 // 获得所有子对象的蒙皮网格
MeshFilter[] filters = GetComponentsInChildren<MeshFilter>();
// 用于描述要使用Mesh的网格的结构。
CombineInstance[] combines = new CombineInstance[filters.Length];
for (int i = 0; i < filters.Length; i++)
{
    // 新创建一个蒙皮网格
    //combines[i].mesh = filters[i].mesh;
    // 仅仅给予引用
    combines[i].mesh = filters[i].sharedMesh;
    // 位置信息
    combines[i].transform = filters[i].transform.localToWorldMatrix;
}
// 创建新的蒙皮网格
Mesh finalMesh = new Mesh();
// 将多个网格合并到此网格中。
finalMesh.CombineMeshes(combines);
// 赋予给该网格过滤器
GetComponent<MeshFilter>().sharedMesh = finalMesh;

保存到本地

string path = "Assets/Resources/data.mesh";

Mesh meshToSave = finalMesh;
// 优化网格数据以提高性能
MeshUtility.Optimize(meshToSave);

AssetDatabase.CreateAsset(meshToSave, path);
AssetDatabase.SaveAssets();
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

莉萝爱萝莉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值