@参照unity shader书籍

渲染分3步,流水线工作原理。CPU发起GPU渲染,1.应用阶段2.几何阶段3.光栅化阶段

1.

      CPU计算顶点数,线和三角片面(图元)传递给 几何阶段,

2.

       GPU进行,任务:负责和每个渲染图元打交道,进行逐顶点,逐多边形的操作。把顶点坐标变换到屏幕空间,再交给光栅化器         处理。通过对渲染图元的处理 将会输出屏幕坐标的二维顶点坐标,每个顶点对应的深度值等相关信息

3. 

       GPU使用上一阶段的传递数据来产生屏幕上的像素,并渲染出最终的图像 主要任务是决定每个渲染图元的那些像素应该绘制           到 屏幕 上,需要对上一个流程的逐顶点数据(纹理坐标,顶点颜色)进行插值 最后进行逐像素处理

一次渲染过程:

    CPU  1.将数据加载到显存中    2.设置渲染状态    3.调用DrawCall来进行一次绘制

    1网格纹理等数据加载到显存中 显卡访问显存的速度比加快

    2设置渲染状态  定义:定义了场景中的网格是怎么被渲染的 (使用哪个shader ,材质,光源属性等)

    3调用DrawCall    DrawCall 是一个命令 是由CPU发起的,接收方GPU GPU会根据渲染状态和所有输入的顶点数据进行计算最       终生成

详细:

  几何阶段

    顶点着色器:完全可以编程的,通常实现顶点的空间变换,顶点着色等功能

    曲面细分着色器:可选的着色器 用于细分图元

    几何着色器:可选的着色器 用于执行逐图元的着色,或者产生更多的图元

    裁剪:可配置的 将那些不在摄像机视野的顶点裁剪掉,并删除某些三角图元的面片

    屏幕映射:可配置和编程 负责将每个图元的坐标转换到屏幕坐标系

光栅化阶段

    三角形设置

    三角形遍历

    片元着色器: 完全可编程的 实现逐像素的着色操作

    逐片元操作:高度可配置的 执行许多重要功能 修改颜色 深度缓冲 混合操作

顶点着色器:

    输入来源CPU 处理单位是顶点,每个顶点会调用一次着色器,本身不能创建或者销毁顶点,无法得到顶点与顶点之间的关系

    工作:坐标变换和逐顶点光照 当然还会输出后续阶段的数据 坐标变换就是对顶点的坐标进行变换。可以改变顶点的位置 顶点着色器必须完成的工作,把顶点从模型坐标变换到齐次裁剪空间 接着通常有硬件做透视除法得到归一化的设备坐标

裁剪:

    工作:那些不在摄像机视野范围内的物体不需要被处理

屏幕映射:

    工作:是把每个图元的x和y坐标转换到屏幕坐标系下,屏幕坐标系是一个二维坐标系,它和我们用于显示画面的分辨率有很大关系 屏幕映射得到的屏幕坐标决定了这个定点对应屏幕上那个像素以及距离这个像素多远

三角形设置:

    工作:计算光栅化一个三角形网格所需的信息

三角形遍历:

    工作:检查每个像素是否被一个三角形网格所覆盖,如果覆盖的话就会生成一个片元 片元不是真正意义上的像素包含了屏幕坐标,深度信息,顶点信息,法线信息等

片元着色器:

    前面的阶段并不会影响屏幕的每个像素的颜色值,而是产生一些列的信息数据,真正对像素产生影响的是下一个流程 逐片元操作输入上一个阶段对顶点信息插值得到的结果 输出是一个或者多个颜色值 进行纹理采样