绘制调用批处理是一种绘制调用优化方法,它使用了网格,因此 Unity 可以通过更少的绘制调用进行渲染。Unity 提供了两种内置的绘制调用批处理方法:
与手动合并网格相比,Unity 的内置绘制调用批处理具有几项优势;最值得注意的是,Unity 仍然可以单独剔除网格。但是,也有一些缺点;静态批处理会导致内存和存储开销,动态批处理会产生一些 CPU 开销。
| 功能 | 通用渲染管线 (URP) | 高清渲染管线 (HDRP) | 自定义可编程渲染管线 (SRP) | 内置渲染管线 |
|---|---|---|---|---|
| 静态批处理 | 是 | 是 | 是 | 是 |
| 动态批处理 | 是 | 否 | 是 | 是 |
透明着色器通常需要 Unity 以从后到前的顺序渲染网格。要批量处理透明网格,Unity 首先要将其以从后到前的顺序进行排序,然后再尝试进行批处理。由于 Unity 必须以从后到前的顺序渲染网格,因此通常无法批量处理与不透明网格数量相同的透明网格。
Unity 无法将动态批处理应用于变换组件中包含镜像的游戏对象。例如,如果一个游戏对象的缩放比例为 1,另一个游戏对象的缩放比例为 –1,则 Unity 无法将它们一起进行批处理。
如果您无法使用绘制调用批处理,可通过手动方式将彼此接近的网格进行组合。有关组合网格的更多信息,请参阅组合网格。
警告:从 C# 脚本访问共享材质属性时,请确保使用 Renderer.sharedMaterial,不要使用 Renderer.material。Renderer.material 会创建材质副本,并将副本分配回渲染器。此操作会阻止 Unity 对该渲染器的绘制调用进行批处理。