渲染管线

1.结构

Application
Geometry ProcessingVertex ShadingVertex Shader
Tessellation
Geometry Shader
Projection
Clipping
Screen Mapping
RasterizationTriangle Setup
Triangle Traversal
Pixel ProcessingPixel Shading
Merging

2.应用阶段(Application)

向几何阶段提交需要渲染的图元

3.几何阶段(Geometry Processing)

负责执行逐顶点/逐三角形操作

几何阶段可以进一步细分为四个子阶段:

  • 顶点着色
  • 投影
  • 裁剪
  • 屏幕映射

3.1 顶点着色(Vertex Shading)

主要负责顶点数据的预处理,包括顶点和法线的坐标转换

为了方便裁剪,需要在顶点着色器中将顶点从模型空间(Model Space)转换到齐次裁剪空间(Canonical View Volume)

GPU计算能力不足时,也可以直接在顶点着色器执行着色计算
现代游戏一般在片元着色器进行着色计算,顶点着色器只负责数据的预处理。

3.1.1 曲面细分(Tessellation)

动态地向顶点着色器的输出流中插入新顶点,提升模型细节

曲面细分着色器分为三个子阶段

  • Hull Shader
  • Tessellator
  • Domain Shader

3.1.2 几何着色器(Geometry Shader)

获取各种类型的图元输入,并且可以生成新顶点

3.1.3 顶点流输出(Stream Output)

将顶点流输出到显存以供GPU或CPU使用

3.2 投影(Projection)

常见的两种投影方式

  • 正交投影
  • 透视投影

3.3 裁剪(Clipping)

处理位于视锥体边界的图元,在图元与视锥体相交处产生新顶点代替视锥体外的顶点

3.4 屏幕映射(Screen Mapping)

把裁剪空间的三维坐标映射到屏幕空间的二维坐标

4.光栅化阶段(Rasterization)

找到所有位于图元内的像素,从顶点流插值得到每个像素对应的片元信息,再传入片元着色器
这一阶段由三角形设置、三角形遍历两个子阶段共同完成

4.1 三角形设置(Triangle Setup)

计算三角形边界信息

4.2 三角形遍历(Triangle Traversal)

遍历三角形内的所有像素并计算每个像素的片元信息

5.逐像素处理(Pixel Processing)

逐个处理图元内的像素,分为像素着色和混合两个阶段

5.1 像素着色(Pixel Shading)

执行逐像素着色计算,本阶段完全可编程,通过编写像素着色器可以定义具体的着色逻辑
输入:插值得到的片元数据
输出:用于混合的一个或多个颜色

像素着色阶段的主要任务:

  • 纹理采样
  • 光照计算

5.2 混合(Merging)

每个像素的颜色信息储存在颜色缓存(Color Buffer)中,深度信息储存在深度缓存(Z-Buffer/Depth Buffer)

混合阶段的主要任务

  • 混合像素着色器输出的颜色和颜色缓存中的颜色
  • 根据深度判断像素可见性(丢弃较远的像素,只保留最近的像素)

本阶段不可编程,但可以配置颜色的混合逻辑