unity shader:渲染流程

渲染流水线:是cpu和gpu配合渲染一帧的过程,主要分为应用阶段,几何阶段以及光栅化阶段。

应用阶段流程:由cpu进行控制,主要流程如下
1.准备哪些对象被渲染,哪些被剔除,然后将要渲染的对象从硬盘加载到内存,然后从内存加载到显存,方便gpu高速处理。
2.设置每个对象的渲染状态,也就是设置对象所需的材质,纹理,着色器等。
3.输出渲染图元,然后向gpu发送draw call命令,并将渲染图元传递给gpu。

几何阶段流程:由gpu进行控制,主要流程如下
1.顶点着色器主要对cpu输出的渲染图元进行顶点空间几何变化以及顶点光照着色处理等。
2.曲面细分着色器主要用来细分图元。
3.几何着色器主要用来逐个图元的着色操作,或者产生更多的图元。
4.裁剪主要是对不在摄像机视野内的顶点进行裁剪,并剔除一些三角形图元面片。
5.屏幕映射主要负责将图元立方体坐标映射到屏幕坐标系中。

光栅化阶段流程:由gpu进行控制,主要流程如下
1.三角形设置主要是对几何阶段输出的屏幕坐标系中的顶点数据进行计算,获取光栅化网格所需要的数据信息的过程。
2.三角形遍历主要是对网格覆盖的每一个像素生成一个片元,并且片元的状态主要由像素插值进行计算获取。
3.片元着色器主要是对生成的片元进行处理输出一个或者多个像素。
4.逐个片元操作就是对片元进行可见性测试,如深度测试,模板测试等,测试不通过的片元会被舍弃,测试通过的片元在开启混合时会和像素缓冲区的颜色进行混合,最后将像素缓冲区中的颜色进行替换成该片元最终的颜色。
5.gpu将最终的像素缓冲区的像素颜色放入到后缓冲区中进行绘制,绘制完毕后就和前缓冲区交换并刷新显示到屏幕上。

注意:
1.以上每一个渲染流程中的步骤在不同的图像编程接口(CG/HLSL/GLSL)以及gpu上可能会有所不同。
2.光栅化的逐片元操作中的可见性测试是十分耗时的过程,而且一旦测试不通过,之前做的所有的操作都是白费,这样是十分浪费性能的做法,所以我们可以采用Early-Z技术,也就是将可见性测试提到片元着色器的前面,一旦不通过直接舍弃而不至于浪费片段着色器操作时间,提高渲染速度。
3.cpu和gpu之间通过命令缓冲区来实现并行处理,其中cpu向命令缓冲区中添加一个命令(draw call,setpass call等),而gpu则从命令缓冲区中读取一个任务。

你可能感兴趣的:(Shader)