什么是动态合批?
动态合批是Unity引擎的一项核心优化技术,用于减少绘制调用(Draw Calls)数量,提高游戏性能。它通过将多个使用相同材质的小型可移动物体的渲染操作合并为单个绘制调用,减轻CPU向GPU发送命令的负担。
动态合批的工作原理
基本流程
动态合批的处理过程如下:
- Unity识别场景中使用相同材质的动态物体
- 对每个符合条件的物体,Unity在CPU上执行顶点变换计算
- 将这些已变换的顶点合并到一个大的顶点缓冲区
- 通过单个Draw Call将合并后的几何体发送给GPU
这一过程在每帧都会执行,因此即使物体在运动,合批依然有效。
技术实现
在底层,动态合批通过以下步骤实现:
对于每个可合批的物体:
1. 读取原始顶点数据
2. 应用模型到世界空间的变换矩阵
3. 变换所有顶点(位置、法线、切线)
4. 将变换后的顶点添加到合批缓冲区
最后,用单个Draw Call渲染整个缓冲区
这种方法允许具有不同位置、旋转和缩放的物体合并渲染,前提是它们共享相同的材质。
动态合批的严格限制
基本限制条件
动态合批要想生效,物体必须满足一系列非常严格的条件,任何一条不满足都会导致合批失败:
- 渲染管线: 主要用于 Unity 的内置渲染管线 (Built-in Render Pipeline)。在 URP (Universal Render Pipeline) 或 HDRP (High Definition Render Pipeline) 中,它通常被禁用或效果被 SRP Batcher 取代。
- 材质 (Material): 物体必须共享完全相同 (identical) 的
Material实例。这意味着如果你通过脚本修改了某个物体的renderer.material(这会创建一个材质实例),那么这个物体就无法与其他使用原始共享材质的物体进行动态合批了。 - 着色器 (Shader): 使用的 Shader 必须支持动态合批。大部分 Unity 内置的非 URP/HDRP 的 Shader 都支持。自定义 Shader 如果结构简单通常也能支持,但复杂的、多 Pass 的 Shader 可能会有问题(通常只有第一个 Pass 能

最低0.47元/天 解锁文章
2299

被折叠的 条评论
为什么被折叠?



