初级版本:
渲染管线一般有以下阶段:顶点着色器->光栅化->片元着色器
其中顶点着色器主要工作是进行顶点坐标变换,常见的变换为:局部坐标系->世界坐标系->相机坐标系->裁剪坐标系->屏幕坐标系。一般来说,顶点着色器将输入顶点变换到NDC坐标系下。
因此在顶点着色器中常见的操作为(以OpenGL下为例): glPosition = ProjectionMatrix * ViewMatrix * ModelMatrix * Vertex
光栅化的主要工作是执行透视除法,剔除视锥体外的多余图元信息,决定最后屏幕像素栅格是否被占用。
片元着色器主要工作是为像素栅格中所有的片元进行颜色采样(着色)。
进阶版本:
顶点着色器->细分着色器->几何着色器->光栅化->片元着色器->深度测试、模板测试、Alpha测试、Blending等
顶点着色器的工作同上,着重理解projection矩阵的形式及推导的详细过程。
细分着色器的作用是将输入的三角面片进行细分成为多个三角面片,从而可以使得图形的表达更加细腻。
几何着色器可以将所输入的顶点进行多次处理从而向后传递不同的顶点变换结果,即可以由一个输入产生多个输出。
光栅化阶段现阶段仍属于不可编程的部分,由硬件驱动自动执行。
片元着色器除上述作用之外,应该注意单采样与多重采样对最终着色的影响;当然,片元着色器可以output to texture。
深度测试作用是通过比较片元深度从而选择离屏幕最近的片元作为最终显示颜色。
模板测试可以让一张纹理的数据由多个Pass进行写入(一般由两个)而不会出现数据冲突。
Alpha测试及Blending可以改变最终颜色的呈现方式,最终屏幕像素呈现的颜色可由两个及以上的片元颜色混合而成。