unity性能优化大纲

一.内存

内存方面主要是不适当的操作造成内存泄露,使得无法及时释放或不能释放已经不再使用的内存,使得减少可用内存的数量从而降低计算机的性能,比如引发频繁的GC,引发频繁内存申请等

减少资源泄露:1.避免一次性堆内存的过大分配2.及时Dispose非托管堆上不再使用的内存3.注意c#的闭包使用4.静态变量并不会被GC回收5.避免ab包冗余:存在一些没有使用或重复打包的资源6.场景切换时及时卸载旧资源

二.渲染

DrallCall

每次CPU准备渲染数据发送给GPU进行处理和渲染的操作。

  1.批处理

如果多个对象使用了同一个材质,则unity会一次性将使用了同一材质的对象绘制信息传递给GPU进行批处理,这极大减少了CPU和GPU之间的频繁交互,所以在开发过程中尝试要让多对象共用同一材质,批处理分为静态批处理和动态批处理, 静态合批发生在场景编辑界面。动态合批发生在游戏运行的时候。

    1.1动态批处理

 如果动态物体共用着相同的材质,那么Unity会自动对这些物体进行批处理,将物体的顶点信息变换到世界空间,合并这些使用了同一个共享材质的网格顶点数据,形成一个新的大网格,然后传给显存,直接渲染这个大网格就相当于渲染了所有的被合并的小网格,而这只需要一次DrawCall。

对顶点属性个数有限制,顶点数量小于900,相同材质的对象必须使用同一个缩放尺寸多通道(Pass)的shader

打断批处理:

物体中夹杂着不同材质的物体

有lightmap的物体(有灯光渲染和没灯光渲染)

多个pass的shader会破坏批处理

    1.2静态批处理(无法移动,静止,不适合大量重复的物体) 获取顶点和三角形索引数据

勾选static,在开始阶段把需要静态批处理的GameObject进行一次网格合并操作,将顶点数据变换到世界空间下,将顶点数据保存起来,再次渲染时,直接使用保存的数据增加渲染速度,

主要减低渲染状态切换次数,不减低dracall,会占用更多内存

打断批处理:

使用Renderer.material将会造成一份材质的拷贝,应该使用Renderer.sharedMaterial

物体中夹杂着不同材质的物体

有lightmap的物体

其他减少DrallCall的方法

  1. 减少实时光照和实时阴影
  2. 打图集,同一画面的图片放入一个图集中
  3. 调整渲染顺序,使用相同材质的物体渲染顺序相同
  4. 使用TextMeshPro实现图文混排(使用富文本在文本框里实现图片+文字

2.Mipmap

使用Mipmap后,贴图会根据摄像机距离的远近,选择使用不同精度的贴图。

缺点:会占用内存,因为mipmap会根据摄像机远近不同而生成对应的八个贴图,所以必然占内存!

优点:会优化显存带宽,用来减少渲染,因为可以根据实际情况,会选择适合的贴图来渲染,距离摄像机越远,显示的贴图像素越低,反之,像素越高!

3.遮挡剔除

在摄像机内的显示,不在的不显示,勾选ocluder static

4.GPU Instance

生成相同实例,合批Mesh网格

5.Canvas

采用多个Canvas实现静态分离,减少OverDraw

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值