Unity Shader笔记 -----认识Draw Call和固定函数的流水线

《Unity Shader入门精要》随笔

Draw Call就是CPU调用图像的编程的接口,如OpenGL中的glDrawElements命令或者DirectX中的DrwaIndexedPrimitive命令,以命令GPU进行渲染操作。

CPU向命令缓冲区里添加命令,而GPU从中读取命令,添加和读取相互独立,当CPU需要渲染时就会向命令缓冲区添加命令,而GPU完成上一次的渲染任务后就会从命令缓冲区里面的命令队列读取下一个命令。命令缓冲区的命令有很多种类。而Draw Call是其中一种,而他命令还有改变渲染状态等(比如说改变使用的着色器,使用不同的纹理)每次调用Draw Call之前CPU要向GPU发送很多内容,包括数据,状态和命令等。在这一阶段,CPU需要完成成很多工作,比如检查渲染状态鞥,而一旦CPU完成这些准备工作GPU就开始本次的渲染,GPU渲染能力很强的,因此是CPU处理不过来太多Draw Call而造成CPU过载,所以我们可以减少Draw Call,比如说我门常用的方法就是批处理,就是把很多小的Draw Call合并成大的Draw Call,需要注意的是由于我们需要字CPU的内存中合并网格,而合并的过程是需要消耗很多时间的,因此批处理技术更适合哪些静态的物体,例如不会移动的大地,石头。对于静态物体我们只需要合并一次就可以了,当然我们也可以对动态物体进行批处理。但是这些物体是不断运动的,因此每一帧都需要重新进行合并再发送给GPU,这对空间和时间都会造成一定的影响。

固定函数流水线简称固定管线,通常是指在旧的GPU上实现的渲染流水线。这种流水线只给开发者提供一些配置操作,但开发者没有对流水线阶段的完全控制权,就是说我们只能进行相关设置但不能更大程度的编程控制了。随着时代的发展GPU流水线越来越多朝着更高的灵活性和可控制性方向发展,可编程渲染管线应运而生。可编程流水阶段,如顶点着色器,片元着色器,这些可编程着色器是GPU是进化最重要的贡献。随着GPU发展固定管线推出历史舞台。



你可能感兴趣的:(Unity Shader笔记 -----认识Draw Call和固定函数的流水线)