GPU渲染管线
整体流程
几何阶段
顶点着色器
类型:可编程
模型变换:每个模型都有自己的建模坐标系,世界空间有自己的坐标系,模型变换就是表示从模型坐标系转换为世界坐标系
视图变化:我们在不同的地方观察世界空间,呈现的效果是不同的,世界空间的内容需要转换到相机空间,这个过程称为视图变化
顶点着色:确定顶点上材质上的光照效果
- 可在每个顶点处存储各种材料数据;(点的位置、法线、颜色)
- 结果形式多样:颜色、向量、纹理坐标等着色数据。这些结果会被光栅化阶段做插值操作。
几何、曲面细分着色器
类型:可编程,几何着色器是可选的着色器。 输入/输出:顶点数据。
功能:
- 可以对图元的顶点进行操作。可高效删除顶点。
- 也可增加顶点让图元更接近曲面。这里的曲面细分可以分离出来称为曲面细分着色器,在没有这个着色器时,由CPU进行计算,但是应该避免CPU运算,尽可能利用GPU运算效率,
裁剪
类型:可配置 输入/输出:顶点数据。
投影变换:我们经过视图变化可以得到一个观察空间,由于观察方式的不同,我们空间的形状、大小就各有不同。这样一来后期裁剪和屏幕映射就变得很麻烦,所以我们要规范化观察空间,规范化投影变换。
裁剪:即在规范化投影变换后判断可见性,在openGL中,x、y、z轴的可见范围为-1,1
,裁剪工作是由GPU自动完成。
裁剪后,我们需要把观察坐标系中的,内容转换到屏幕坐标系。由3D转为2D,这时z值并不会丢失。纹理坐标、法线坐标等等信息都会输送给光栅化阶段。
几何总结
光栅化阶段
三角形设置
输入:顶点 输出:三角形网格 类型:管线固定部分,由管线自动完成
三角形设置 :我们从几何阶段得到了顶点,现在需要得到三角形对像素的覆盖情况,就是三角形的边界的表示形式,即把顶点连接成三角形网格,这个过程计算过程就是三角形设置。
三角形遍历
输入:三角形网格 输出:覆盖三角形网格的像素位置 类型:管线固定部分,由管线自动完成
根据输入的单个三角形网格的三个顶点,进行插值计算得到覆盖三角形网格的像素位置,对应的像素就生成一个片元。
片元着色器
输入:片元(像素)信息、顶点数据、法线等 输出:经过修改的片元(像素)信息
根据输入计算片元颜色信息,可实现纹理贴图、法线贴图等等;当前没有影响像素颜色值,仅仅只是计算。
片元操作
经过计算的片元并未直接显示,因为可能存在下列情况
被物体遮挡
被半透明的物体遮挡
所以我们需要进行模版缓冲、深度缓冲、颜色混合之后才能得到最终结果,显示在帧缓存中。
光栅化总结
GPU管线渲染流程总结