Unity DrawCall优化

在进行unity的drawcall优化时, 一个非常核心的原则就是尽量在同屏绘制的对象中,合并贴图。如果两个对象的贴图合并到一张图片中,就可以减少一个drawcall

但是不简单的合并贴图就可以减少drawcall。

  • 动态合并只能处理定点不超过900的目标,如果食用了uv, 法线等,则只能处理300以下顶点的。但是如果勾选了static, 静态批次可以合并更多顶点的模型绘制
  • 不要使用缩放尺度(scale)。分别拥有缩放尺度(1,1,1)和(2,2,2)的两个物体将不会进行批处理。
  • 统一缩放尺度的物体不会与非统一缩放尺度的物体进行批处理。 使用缩放尺度(1,1,1)和 (1,2,1)的两个物体将不会进行批处理,但是使用缩放尺度(1,2,1)和(1,3,1)的两个物体将可以进行批处理。

  • 在ngui中,每个Panel的drawcall是独立计算的. 
  • 同一个panel中,不同widget按照depth而不是z坐标的顺序进行绘制。绘制完一个panel才绘制第二个panel的widget(不完全是, depth是panel 和widget的值加权算出来的,推荐不同的panel使用不同的depth, 否则容易引起widget绘制顺序混乱). 如果公用贴图的widget被使用其他贴图的widget绘制隔开,那么引擎将无法合并drawcall.
  • 动态字体的使用也会导致同一图集的dc无法合并
  • UIDrawCall.cs中有一个宏,打开后可以把NGUI使用的drawcall详细信息打印在层级面板。#define SHOW_HIDDEN_OBJECTS
  • Profiler的GPU Usage > Caera.Render里面会打印出和上面基本等价的信息.

借用别人的经验,举个例子,把使用同一图集的widget放到一个深度范围内.

在同一个Panel之下,假设 

深度值区间 (-200, -100),图集1元素使用; 

深度值区间(-100, 0),图集2元素使用; 

深度值区间(0, 100),图集3元素使用; 

深度值区间(100, 200),图集4元素使用;

这样同一个panel最多有4个drawcall


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值