Home 渲染优化 静态合批
Post
Cancel

渲染优化 静态合批

静态合批

  1. 静态合批在离线状态下生成合并的网格,并以文件的形式存储合并之后的数据。当场景被加载时,这些合并的网格数据一并被加载到内存中,渲染时提交给GPU。静态合批会在项目中生成一个较大的VBO(Vertex Buffer Object)和IBO(Index Buffer Object),Runtime时会通过该VBO进行渲染。
  2. 本质上是用内存+带宽换取CPU和GPU的效率提升。
  3. 更适合我们能容忍内存扩大的情况。

合并需要满足的条件

  1. 需要静态合批的模型要做好 static 标记,且运行时不能移动,旋转或缩放,不能有动画。
  2. 无论模型多大,只要模型的材质球相同,就会被静态批处理优化。
  3. 静态合批的模型需要打开 [[read/write]] 选项。
  4. 被合批的模型要有相同的顶点属性。
  5. 每次静态自动合批最多包含64000个顶点和64000个索引。

优点

  1. 离线合批,不会在运行时增加CPU的消耗。
  2. 减少了DrawCall。

缺点

  1. 即使一些物体之前共用同一个模型,Unity也会复制出每一份模型实例用以合并。所以需要更多的内存存储合并之后的模型。有时我们需要减少对物体的静态处理以减少内存的使用量。
  2. 离线生成的网格会被整体提交,当网格过大时,会导致CPU和GPU的带宽消耗过大。
  3. 只有完全不动的静态物体才能使用静态批处理。
  4. 增大了发布游戏包的体积。

Unity代码静态合批

  1. StaticBatchingUtility.Combine(); - StaticBatchingUtility
This post is licensed under CC BY 4.0 by the author.
Contents