Unity渲染流程
一次渲染批次Batch: 设置渲染状态 (材质, 顶点信息等),调用DrawCall
场景中有不同的Mesh对象 使用不同的材质 它们分别进行渲染设置并调用DrawCall
- 正常状态下 用最基础的光照或者无光照的Shader 渲染一个Mesh 一次DrawCall
- 如果多了实时光源 那就是两个DrawCall
- 实时阴影的开启 会影响DrawCall(阴影投射 接受阴影)增加2-4个DrawCall
- 如果场景中增加相机 增加了渲染次数 DrawCall也会提升
合并批处理
合批的优化在于 在多个不同的Mesh使用相当材质时 引擎将模型顶点合并 形成一个大的新网格 一次传递给GPU
之后在对每个子模型分别调用DrawCall进行绘制
因此合批将多个相同材质的Mesh 作为一个Batch进行渲染 不会降低DrawCall 而是减少渲染批次
多Pass的Mesh会被渲染多次 每一个Pass进行一次批次的渲染(多Pass渲染的Mesh不会参与到合批)
在相机的照射范围内有m个Mesh 每个Mesh执行n个Pass 那么产生的batches时m*n
正常情况下GPU运行一个Pass之前回产生一个SetPassCall
注意事项
只有场景中不存在相机 DrawCall才能真正将为0