【Unity性能优化(一)】合批的四种实现方式

一、离线合批(Offline Batch) 

离线合批就是在游戏运行前,先用工具把相关资源做合批处理,以减轻引擎实时合批的负担。

适合离线合批的是静态模型和场景物件。如场景地表装饰面:石头/砖块等等。

离线合批方式有:

1. 美术利用专业建模工具合批。如3D Max/Maya等。

2. 利用引擎插件或工具。如Unity的插件MeshBakerDrawCallMinimizer,可以将静态物体进行合批。

3. 自制离线合批工具。如果第三方插件无法满足项目需求,就要程序专门实现离线合批工具。

二、实时合批(Runtime Batch)

Unity引擎内建了两种合批渲染技术:Static batching(静态合批)和Dynamic batching(动态合批)。

原文链接:Unity 性能优化之合批_unity 合批_一零壹0的博客-CSDN博客

一.静态合批 Static Batching

原理利用合并出来的大网格直接提交数据,这样的话只提交一次数据,也没有引起切换渲染状态,所有只产生一次DrawCall。

静态合批,静态合批的原理即化整为零,将多个场景物体预先合成一个大的物体进行绘制,unity5的实现就是整合成一个大的vbo,而不整合IBO,一次性提交vbo给gpu,然后并不是把整个vbo都绘制,而是每次需要绘制其中某个某些物体时改变IBO,选择大vbo上的某一段进行绘制。静态合批可以将多个小物体的绘制合并成一个大物体的绘制,减少对渲染状态的改变,它一次并行绘制多个物体,理论上是最快的绘制方法,不过最大的缺点是因为合成新的大vbo需要耗费额外的大量内存,同时不能宣染动态物体,因为合并vbo的时候已经确定顶点数据了,顶点数据不能更改(例如unity5对LOD合批的实现也是将所有层次的lod都预先合并进去),另外一个vbo的大小是有限制的,如果物体数量过多,也会被拆成多个绘制。

PlayerSettings中开启static batching,对需要静态合批物体的Static打钩即可

猜你喜欢

转载自blog.csdn.net/m0_74022070/article/details/131858871