[Unity]关于树和阴影的DynamicBatch

关于大规模的可batch的billboard的树的实现,《UnityShader入门精要》11.3.3中提到过“利用顶点颜色来存储每个顶点到锚点的距离值”,具体的操作方法可以参见根据这篇文章: https://blog.csdn.net/u011047171/article/details/47255233 .而树的阴影在实际项目中一般会直接烘在一个平放的Quad上,然后跟树的模型一起导出,方便同时调整他们的scale.这样阴影一般跟树不是同一种材质,而这两者的RenderQueue一般都是Transparent.这时我们会发现:添加了阴影之后原本能被batch的树却不能被batch了!

这是为什么呢?首先插一句前几天在Unite2018的《UnityShader优化》讲座中听讲师提到的优化点:假如有两种不同材质的物体A和B,尽量让他们的渲染顺序是AAABBB而不是ABABAB.当时不太理解这句话,心想Unity不是可以自动dynamic batch吗.事实证明Unity并没有这么智能,拿我们的树和阴影为例,因为树和阴影都是默认的RenderQueue : Transparent ,也就是3000. 此时打开FrameDebugger会发现实际的drawcall情况是先画了一颗树,然后画了它的影子,然后又去画另一颗树,并没有自动batch.也就是上面提到的ABABAB的情况.解决方法也很简单,只要把阴影的RenderQueue减1,变成2999,也就是让阴影统一先画,这样就可以batch了,也就是变成了AAABBB的情况.


P.S. Unity中新建一个UnlitShader的时候默认的不会给你写Queue,要自己加上,否则可能会出现一些奇怪的显示问题.注意Transparent-1中间不能有空格.


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值