34.动态批处理的限制条件
34.1 题目
Unity 动态批处理有哪些限制条件?请至少说出三点。
34.2 深入解析
动态批处理在做什么:在 CPU 上把多个同材质、同 Pass 的小网格顶点拼成一批再画,从而减少 DrawCall。代价是 CPU 要先合顶点,所以限制多;顶点数等阈值随 Unity 版本会变,以当前文档为准。
常见限制条件(面试至少答三条)
顶点数与顶点属性总量
单 Mesh 顶点数有上限(常见讨论:Unity 2021 前后有 300 / 225 等说法,以文档为准)。此外,顶点属性(位置、法线、切线、UV、顶点色等)折算后的通道总和也有上限(教材里常出现 900 这一量级作为讨论参考),超过则不参与动态批处理。材质必须一致
通常要求同一材质实例或引擎认定为可批的相同配置;材质或关键字一变,批次就拆开。变换不能带「镜像」式负缩放
例如缩放(-1, 1, 1)会破坏动态批处理条件(法线、绕序等与批处理假设冲突)。SkinnedMeshRenderer(蒙皮网格)
传统动态批处理不参与蒙皮网格这类对象(有独立渲染路径)。多 Pass、光照贴图索引不一致、每顶点动画等
多 Pass Shader、顶点位置偏移、不同 Lightmap 索引等,都会导致批次打断或无法合并。
面试收尾可补一句
动态批在 CPU 上合顶点,本身也有成本;很多项目更依赖 SRP Batcher、GPU Instancing、静态批处理 等路径,动态批只是手段之一。
34.3 答题示例
动态批限制多,面试至少答三条就行,常考的有这些:
一,顶点数和顶点属性总量要在引擎允许范围内——版本不同数字会变,常见会提到 225、300、属性 900 这类量级,以当前文档为准,超了就不批。
二,一般要同一材质实例,材质或 Shader 关键字不一致就拆开画。
三,变换别带负轴镜像,比如 (-1,1,1),会破坏条件。
四可补充:SkinnedMesh 通常不参与;多 Pass、光照贴图索引不一致也会打断。
收尾可补一句:动态批是 CPU 上合顶点,本身有成本,项目里常还要配 SRP Batcher、GPU Instancing。
34.4 关键词联想
- 顶点数与属性上限
- 同材质 / 镜像缩放
- SkinnedMesh / 多 Pass
- SRP Batcher 与 Instancing
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com