Home 渲染优化 动态批处理
Post
Cancel

渲染优化 动态批处理

Dynamic Batch的尴尬之处: 减少DrawCall是为了减少CPU消耗,而合批计算又需要消耗CPU,关键这玩意还要每帧都重新计算,不如手动合批!

动态合批

  1. 在CPU中把小网格合并成一个大网格,打组一起送到GPU,并在一个draw Call中渲染它们。
  2. 开启动态合批时,Unity每帧通过遍历所有的渲染模型,检测视锥体内的非动画模型,筛选符合条件的模型进行合批操作,将他们的网格合并后与材质球一起传给GPU绘制。
  3. 更适合同一个材质球并且模型面数较少的情况。

合并需要满足的条件

  1. 材质球实例相同才会被合并。
  2. 不能用于超过900个顶点属性的网格。即如果只有顶点坐标,则支持900个顶点;如果有顶点坐标,法线和UV,则支持300个顶点;如果使用顶点坐标、法线、UV0、UV1和切线,则支持180个顶点。
  3. 被合并的网格缩放比例要相同;例如物体A的缩放比例是(1:1:1),物体B的缩放比例是(1:1:2),它们的缩放比例不同,则不会被合并处理。
  4. 如果使用光照贴图的数据,必须是相同的才有机会合批。
  5. 具有多个Pass的着色器增加了渲染管道,绝对不会被动态批处理。
  6. 延迟渲染无法被合批。

缺点

  1. 条件苛刻,很难有模型符合动态批处理的要求。
  2. 需要消耗 CPU 把所有的顶点转换到世界空间,合并网格也会带来开销。如果降低DrawCall带来的好处被合并网格消耗的大量CPU运算抵消掉了,就很得不偿失。
This post is licensed under CC BY 4.0 by the author.
Contents