Unity3D客户端项目优化总结之静态批处理Static Batching

在之前的文章中,我们谈到了Stats面板中的BatchingRendering分析器中的Batching,这个Batching可以理解为Draw Call的值。

1 什么是Draw Call

这个值越小越好。但是为什么越小越好?
我们先要理解什么是Draw Call。比如我们屏幕上要展示出一个模型,简单的一个过程就是CPU先准备好模型的数据(包括模型各个顶点的坐标、法线方向、纹理等),然后CPU告诉GPU,“嘿,兄弟,原料已经准备好,你开始渲染吧”,然后GPU就把这个模型层现到屏幕上。CPU告诉GPU的这个过程就是Draw Call(详细的解释可见冯乐乐的《Unity Shader入门精要》第二章渲染流水线,这本书真的写得特别好,推荐给大家)。
我们知道,移动一个包含1024个1kb小文件的文件夹比移动一个1Mb的文件慢很多。因为计算机在移动文件的时候会有很多额外的操作,所以移动多个小文件比移动一个大文件更耗时。那么渲染也是,两个选项:①CPU叫GPU渲染1000个小三角形,②CPU先把这1000个小三角形合并为一个大的网格,然后再叫GPU渲染这个大的网格,哪个更快?当然是②。因为①CPU要通知GPU1000次,而②CPU只需要通知GPU一次。
即①的Draw Call是1000,②的Draw Call是1。
也即①的Batchs是1000,②的Batchs是1,同时②的Saved by batching为999。(Batches几乎等价于Draw Call)

2 批处理

上面讲了Draw Call是什么,那么什么是批处理呢?我的理解就是把多个小网格合并成一个大网格,这些小网格同一批进行处理,只调用一次Draw Call。所以批处理能节省大量的Draw Call,从而提高程序效率。
Unity3D中批处理分为动态批处理和静态批处理。
动态批处理,我们什么都不用做,Unity3D已经在背后帮我们处理好啦(嗯,没错,Unity就是这么省心,而且不会告诉我们),但是动态批处理的限制很多,比如说只能处理顶点数小于300个的模型、用到的Shader只能包含一个Pass、Shader中用到的顶点数据不能超过3种(如顶点坐标、顶点法线、顶点切线)等。
而静态批处理就需要我们做一点其他操作啦。

3 静态批处理的使用

Unity中使用静态批处理很简单,将物体勾选为静态或者Batching Static即可。如下图。
静态批处理
静态批处理到底节省了多少Draw Call可以从Stats统计面板或者Profiler下的Rendering中看到。(当然Stats面板只能看个大概,而Rendering分析器可以看得更细,具体这两个面板怎么看,可以参考这里:Stats统计面板Rendering分析器
静态批处理数据统计

4 静态批处理的优缺点

优点就是减少Draw Call。
缺点有以下几点:
①静态批处理只对运行前场景中的静态物体有效,什么意思?就是你必须先把静态物体放置到场景里面,这些物体才能被进行静态批处理。用代码动态创建的物体,即便这个物体是勾上了静态,也是不能被静态批处理的,仍然会增加一次Draw Call。(当然如果这个物体能被动态批处理除外哈)
②静态批处理的物体不能够移动,即Transform组件无效,刚体组件Rigidbody也无效。
③有动画的模型,就不要设置静态批处理属性了,因为不会降低 Batches 的数值,而且有动画的模型, 即使设置了静态批处理, 也跟没有设置是一样的。
④静态批处理会占用更多内存,因为静态批处理会额外拷贝一份网格到内存。具体可以参考这篇文章末尾部分
所以需要选择性的使用静态批处理。那如何有选择性呢?

5 何时使用静态批处理

①游戏场景内的“背景元素” , 比如说: 不需要改变位置, 也不需要进行刚体交互的建筑物, 路边的石头, 树木等, 这些“死” 的游戏场景元素。
②这些场景元素是在做搭建游戏场景的时候, 就需要事先摆放好它们的位置, 然后设置成静态批处理。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值