Batch 与 Draw Call, SetPass Call之间的关系
我们知道一个Batch包括,提交VBO,提交IBO,提交shader,设置好硬件渲染状态,设置好光源属性等(注意提交纹理严格意义上并不包括在一个batch内,纹理可以被缓存并多帧复用)。而SetPass Call代表渲染状态切换,主要出现在材质不一致的时候,进行渲染状态切换,实际上表示的意义大致上相当于 CPU向GPU提交了一次除了顶点数据之外的其他渲染资源(一个Render Pass),该操作一般情况下还是比较耗时的。
如果一个Batch和另一个Batch使用的不是同种材质或者同一个材质的不同Pass,那么就要触发一次SetPass Call来重新设定渲染状态。
例如,Unity要渲染20个物体,这20个物体使用同种材质(但不一定Mesh等价),假设两次Dynamic Batch各自合批了10个物体,则对于这次渲染,SetPass Call为1(只需要渲染一个材质),Batch为2(向GPU提交了两次VBO,IBO等数据)。
Draw call严格意义上,CPU每次调用图形API的渲染函数(使用OpenGL举例,是glDrawElements或者DrawIndexedPrim
订阅专栏 解锁全文
3199

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



