渲染管线流程

一、应用阶段:起点是CPU,把场景数据、摄像机位置、视椎体、模型、光源,设置材质(漫反射、高光反射颜色)、纹理、shader输出成渲染所需几何信息——渲染图元(点、线、三角面等)

1.把数据加载到显存中;硬盘->内存->显存

2.设置渲染状态;定义场景中的网格将被怎么渲染,使用了哪些顶点着色、片元着色、光源属性、材质等。

3.调用Draw Call;由CPU发起命令,通知GPU根据渲染状态在屏幕上绘制出图像的过程就叫一次Draw Call;



二、几何阶段:在GPU上进行,负责和每个渲染图元打交道,进行逐顶点、逐多边形的操作,决定需要绘制的图元是什么,怎么绘制它们,在哪绘制它们。

1.顶点着色器(Vertex Shader):完全可编程的,用于实现顶点的空间变换,逐顶点光照,计算顶点颜色等功能;

2.曲面细分着色器(Tessellation Shader):是一个可选的着色器,用于细分图元;

3.几何着色器(Geometry Shader):可选着色器,用于执行逐图元的着色操作或用于产生更多的图元;

4.裁剪(Clipping):不可编程,将不在摄像机视野内的顶点裁剪掉,并剔除某些三角图元的面片,这个阶段可配置;

5.屏幕映射(Screen Mapping):可配置可编程,此过程负责把每个图元的x,y坐标转换到屏幕坐标系(二维坐标系)下。


三、光栅化阶段:在GPU上执行,使用几何阶段传递来的数据产生屏幕上的像素,并渲染出最终的图像。主要决定每个渲染图元中的哪些像素应该被绘制在屏幕上,然后进行逐像素处理。两个目标,计算每个图元覆盖了哪些像素,计算这些像素的颜色。

1.三角形设置(Triangle Setup):计算光栅化一个三角网格所需的信息

2.三角形遍历(Triangle Traversal):检查每个像素是否被一个三角网格所覆盖,如果被覆盖就会产生一个片元(Fragment)

3.片元着色器(Fragment Shader):可编程,用于实现逐片元的着色操作,也叫像素着色器

4.逐片元操作(Per-Fragment Operations):可配置但不可编程,负责执行如修改颜色、深度缓存、进行混合等操作。对每一个片元进行一些操作,如:

(1)决定每个片元的可见性,这涉及了很多测试工作,如模板测试(Stencil Test)、深度测试(Depth Test)等;

(2)如果一个片元通过了所有测试,就需要把这个片元的颜色值和已经存储在颜色缓冲区的颜色进行混合(Blend);



猜你喜欢

转载自blog.csdn.net/cxihu/article/details/78244352