Back
Featured image of post Shader入门精要-渲染流水线

Shader入门精要-渲染流水线

Unity 的渲染流水线

技术美术——渲染流水线

应用阶段(CPU)

  1. 将场景数据加载到显存

  2. 设置渲染状态

    这一步可配置的有 渲染状态,类似如下设置

    Tags { "RenderType"="Transparent" "Queue"="Transparent" "IngoreProjector"="True" 
    
        Cull Front   // 剔除正面
        ZWrite off   // 关闭深度写入
        Blend SrcAlpha OneMinusSrcAlpha // 混合方式
    
  3. 调用 DrawCall

输出: 几何体数据(顶点坐标、法向量、 纹理坐标、纹理等)通过数据总线传送到图形硬件(时间瓶颈)。

几何阶段(GPU)

输入: 上个阶段的输出。

  1. 顶点着色器

    根据应用阶段传进来的顶点位置做坐标变换(MVP变换矩阵)和逐顶点光照。

  2. 曲面细分着色器、几何着色器

  3. 裁剪、屏幕映射

    用透视变换矩阵把顶点从视锥体变换到裁剪空间的 CVV 中,这一步叫 投影CVV 中进行图元裁剪,这一步叫 裁剪;将前述过程得到的坐标映射到 屏幕空间坐标系 上,这一步叫屏幕映射。

顶点着色器

在顶点着色器中,我们经常要进行的操作是坐标空间的转换,根据光照计算的需要,我们可能会将顶点位置、法线、切线转到切线空间或者世界空间。

结果: 得到经过变换与投影之后的顶点坐标、颜色、以及纹理坐标。

顶点着色器中计算光照叫逐顶点光照,还有一种实在片元着色器中计算光照叫逐像素光照。

光栅化阶段(GPU)

输入: 上个阶段的输出

  1. 三角形设置、遍历

    根据上一步输出的三角形顶点位置,计算三角形网格表示数据的过程叫做三角形设置;检查每个像素是否被一个三角网格覆盖,若被覆盖,则生成一个片元,且根据三个顶点的顶点信息对整个覆盖区域的像素进行插值,这个过程叫做三角形遍历。

  2. 片元着色器

    在这里最重要的技术之一就是纹理采样,通常会在顶点着色阶段输出每个顶点对应的纹理坐标,然后经过光栅化阶段对三角网格的三个顶点对应的纹理坐标进行插值后,就可以得到覆盖的片元的纹理坐标了。

  3. 逐片元操作

    决定每个片元的可见性,例如深度测试、模板测试等;

    混合操作,通过测试的片元需要把这个片元的颜色值和已经存储在颜色缓冲区中的颜色进行混合。

结果: 为像素(Pixel)正确配色,以便绘制 完整图像,该阶段进行的都是单个像素的操作,每个像素的信息存储在颜色缓冲 器(color buffer 或者 frame buffer)中。