Unity Shader 学习笔记(1) DrawCall
参考书籍:《Unity Shader 入门精要》
图形管道: 3D数学 学习笔记(6) 图形管道(渲染流水线)
DrawCall
**DrawCall就是一个命令,从CPU发起,GPU接收。这个命令指向一个需要被渲染的图元(primitives)列表,告诉GPU开始进行一个渲染过程。**相当与OpenGL中的glDrawElements命令,DirectX中的DrawIndexedPrimitive命令。
CPU和GPU并行工作
使用一个命令缓冲区(Command Buffer),CPU添加命令,GPU读命令。命令有多种,DrawCall是其中一种,其他命令还有改变渲染状态等。
渲染模型ABC就是DrawCall。改变渲染状态往往更耗时。
DrawCall数量影响帧率
因为每次调用DrawCall前,CPU都需要给GPU发送很多内容:数据、状态、命令等,需要做很多工作:检查渲染状态等。而GPU的渲染速度往往快于CPU提交命令的速度。如果DrawCall太多,CPU就会把大量时间花在提交DrawCall上,造成CPU过载,而GPU空闲。
减少DrawCall
批处理(Batching)
**即把很多小的DrawCall合并成一个大的DrawCall。**因为合并也是需要时间的,所以更适合静态的物体。对于动态物体进行批处理,则会每一帧都要重新合并再发送,对空间时间都会有影响。
批处理合并的网格需要使用同一种渲染状态。
开发中注意避免
- 避免使用大量很小的网格。如果有,考虑合并。
- 避免使用过多材质。