您当前的位置: 首页 >  unity

莉萝爱萝莉

暂无认证

  • 9浏览

    0关注

    58博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Unity-性能优化

莉萝爱萝莉 发布时间:2022-09-27 10:56:11 ,浏览量:9

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();
// 用于描述要使用Mesh的网格的结构。
CombineInstance[] combines = new CombineInstance[filters.Length];
for (int i = 0; i             
关注
打赏
1663903574
查看更多评论
0.0923s