静态批处理

这是我在《Unity游戏优化 (第2版)》看的,记录一下~

Unity也提供了第二种批处理机制:静态批处理

其最大的区别就是:
只能处理标记为Static的对象,因此叫静态批处理

静态批处理的要求:
1.网格必须标记为Static(里面的Batching Static)
通过Inspecter面板设置
缺点就是不能修改对象的变换(移动、旋转、缩放)

2.每个被静态批处理的网格都需要额外的内存
取决于批处理网格中复制的次数

静态批处理工作时,会把所有标记为static的可见网格数据复制到一个更大的网格数据缓冲区中,并通过一个DrawCall传到渲染管线中,同时忽略原始网格

如果进行静态批处理的网格各不相同,那么与正常渲染对象相比,不会增加内存的使用量,因为存储网格需要的空间量是相同的

咋用静态批处理会浪费内存呢?
比如有1000个树:
a.如果不用静态批处理,渲染1000个和1个的内存消耗是相同的,因为他们都引用相同的网格数据,在这种情况下去别的就是每个对象的变换,
b.如果启用了批处理,那么就会将1000个树合成一个大的网格,都存到缓冲区中,每个都存了一个世界坐标,这样就会造成1000倍的内存消耗

3.合并到静态处理中的顶点数量是有上限的(和动态的差不多)

4.网格实例可以来自任何网格数据源,但他们必须使用相同的材质饮用
使用不同的材质会被分配到不同的静态批处理组,每个组有单独的材质


注意:
1.DrawCall需要运行才能看到
2.在运行场景后加入的Batching Static对象,不能自动包含到静态批处理处理中
(因为会重新计算网格与渲染管线同步之间造成巨大的运行开销,所以不会被执行。可以使用StaticBatchUtility.Combine()方法)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容