Unity一些性能优化

1,批处理:
目的:减少Draw Call,CPU向GPU发送的绘制命令
要求:需要进行批处理的物体具有相同的材质,
因为相同材质的模型的顶点合并在一起,发送给GPU。
静态批处理:将物体勾选static
动态批处理:相同

DrawCall优化方案:
(1)使用Draw Call Batching,也就是描绘调用批处理。Unity3D再多次运行时可以将一些物体进行合并,从而用一个描绘来渲染他们。
(2)通过把纹理打包成图集尽量减少材质的使用。
(3)尽量少的使用反光、阴影之类的效果,因为那会使物体多次渲染。
批处理分为静态批处理和动态批处理。

动态批处理相对静态批处理有许多约束条件:
(1)批处理动态物体需要在每个顶点进行一定的开销,所以动态批处理仅支持小于900顶点的网格物体。
(2)如果着色器使用顶点位置、法线和UV值三种属性,那么只能批处理300顶点以下的物体;如果着色器需要使用顶点位置、法线、UV0、UV1和切向量,那只能批处理180顶点以下的物体。
(3)不要使用缩放。分别拥有缩放大小(1,1,1)和(2,2,2)的两个物体将不会进行批处理。
(4)统一缩放的物体不会与非统一缩放的进行批处理。
(5)使用缩放尺度(1,1,1)和(1,2,1)的两个物体将不会进行批处理,但是使用缩放尺度(1,2,1)和(1,3,1)的两个物体将可以进行批处理。
(6)使用不同材质的实例化物体(instance)将会导致批处理失败。
(7)拥有lightmap的物体含有额外(隐藏)得材质属性,例如lightmap的偏移和缩放系数等,所以,拥有lightmap的物体将不会进行批处理(除非他们指向lightmap的同一部分)。
(8)多通道的shader会妨碍批处理操作。比如几乎Unity3D中所有的着色器在前向渲染中都支持多个光源,并为他们有效的开辟多个通道。
(9)预设体的实例会自动地使用相同的网格模型和材质。
对于静态批处理,物体不可移动,但是限制条件很少。
Static Batching,顾名思义,静态的,就是在游戏中不会动的物体,只要这些物体不动,并且拥有相同材质,那么会进行批处理,降低调用次数。使用Static Batching的方法是:在Inspector面板将Static选项勾上就可以了
Dynamic Batching,动态批处理,这个机制在Unity中是自动调用的,只要材质相同,并且满足下面代码的逻辑,就会进行动态批处理:
尽量少用粒子系统, 或者使用粒子系统的粒子数量尽可能少, 或者用帧序列动画代替. 因为粒子系统中粒子运动的计算对CPU会造成很大的负担

模型

(1)只用一个mesh renderer, 少用多materials, 最多3个

每个角色尽量使用一个 Skinned Mesh Renderer

这是因为当角色仅有一个 Skinned Mesh Renderer 时, Unity 会 使用可见性裁剪和包围体更新的方法来优化角色的运动,而这种优化只有在角色仅含有一个 Skinned Mesh Renderer 时才会启动。

(2)模型骨骼不超过30个.

(3)尽量减少面 300-1500

(4)模型尽量不要分开, 如果多个模块, 会多次调用drawcall

(5)一般角色应该没有 IK 结点

这是因为角色的动作大多数都是事先设定好的,并不需要经过 IK 操作来进行实时计算( Rogdoll 除外),所以在模型导入时,不要将 IK 结点一起导入。
(6) 不要附加 Animation Component 在静态实体上附加 Animation 部件虽然对结果没有影响,但却会增加一定的 CPU 开销来调用这一组件,所以尽量去掉该组件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值