GPU渲染管线流程

1,391 阅读3分钟

GPU渲染管线

整体流程

image.png

几何阶段

image.png

顶点着色器

类型:可编程

模型变换:每个模型都有自己的建模坐标系,世界空间有自己的坐标系,模型变换就是表示从模型坐标系转换为世界坐标系

视图变化:我们在不同的地方观察世界空间,呈现的效果是不同的,世界空间的内容需要转换到相机空间,这个过程称为视图变化

顶点着色:确定顶点上材质上的光照效果

  • 可在每个顶点处存储各种材料数据;(点的位置、法线、颜色)
  • 结果形式多样:颜色、向量、纹理坐标等着色数据。这些结果会被光栅化阶段做插值操作。

几何、曲面细分着色器

image.png

类型:可编程,几何着色器是可选的着色器。 输入/输出:顶点数据。

功能:

  • 可以对图元的顶点进行操作。可高效删除顶点。
  • 也可增加顶点让图元更接近曲面。这里的曲面细分可以分离出来称为曲面细分着色器,在没有这个着色器时,由CPU进行计算,但是应该避免CPU运算,尽可能利用GPU运算效率,

裁剪

image.png

类型:可配置 输入/输出:顶点数据。

投影变换:我们经过视图变化可以得到一个观察空间,由于观察方式的不同,我们空间的形状、大小就各有不同。这样一来后期裁剪和屏幕映射就变得很麻烦,所以我们要规范化观察空间,规范化投影变换。

image.png 裁剪:即在规范化投影变换后判断可见性,在openGL中,x、y、z轴的可见范围为-1,1,裁剪工作是由GPU自动完成。 裁剪后,我们需要把观察坐标系中的,内容转换到屏幕坐标系。由3D转为2D,这时z值并不会丢失。纹理坐标、法线坐标等等信息都会输送给光栅化阶段。

几何总结

image.png

光栅化阶段

三角形设置

image.png

输入:顶点 输出:三角形网格 类型:管线固定部分,由管线自动完成

三角形设置 :我们从几何阶段得到了顶点,现在需要得到三角形对像素的覆盖情况,就是三角形的边界的表示形式,即把顶点连接成三角形网格,这个过程计算过程就是三角形设置。

三角形遍历

image.png 输入:三角形网格 输出:覆盖三角形网格的像素位置 类型:管线固定部分,由管线自动完成

根据输入的单个三角形网格的三个顶点,进行插值计算得到覆盖三角形网格的像素位置,对应的像素就生成一个片元。

片元着色器

image.png

输入:片元(像素)信息、顶点数据、法线等 输出:经过修改的片元(像素)信息

根据输入计算片元颜色信息,可实现纹理贴图、法线贴图等等;当前没有影响像素颜色值,仅仅只是计算。

片元操作

image.png

经过计算的片元并未直接显示,因为可能存在下列情况

image.png

被物体遮挡

image.png

被半透明的物体遮挡

image.png

所以我们需要进行模版缓冲、深度缓冲、颜色混合之后才能得到最终结果,显示在帧缓存中。

光栅化总结

image.png

GPU管线渲染流程总结

image.png image.png