Shader 入门笔记(二) CPU和GPU之间的通信,渲染流水线

时间:2022-03-08 02:26:15

渲染流水线

1)应用阶段(CPU处理)

  首先,准备好场景数据(摄像机位置,视锥体,模型和光源等)

接着,做粗粒度剔除工作。

最后,设置好每个模型的渲染状态(使用的材质,纹理,shader等)

这一阶段最重要的是渲染所需要的几何信息,即渲染土元,渲染图元可以是点,线,三角面等。

a.把数据加载到显存中

  b.设置渲染状态,通俗说这些状态定义了场景中的网格是怎样被渲染的。

  c.调用DrawCall,一个命令,CPU通知GPU。(这个命令仅仅会指向一个需要被渲染的图元列表,并不会包含材质信息,因为在上一阶段已经完成)

2)几何阶段(GPU处理)

  主要用于处理所有和我们绘制的几何相关的事情。几何阶段负责和每个渲染图元打交道,进行逐顶点,逐多边形的操作。

几何结算的一个重要任务就是把顶点坐标转换到屏幕空间中,再交给光栅器进行处理。

总结:输入的渲染图元->屏幕空间的二维顶点坐标,每个顶点对应深度,着色等信息。

3)光栅化阶段(GPU处理)

将会使用上一个阶段传递来的数据来产生屏幕上的像素,并渲染出最终的图像。

主要任务是决定每个渲染图元中的哪些像素应该被绘制在屏幕上。

渲染流水线的起点是CPU,即应用阶段。

 

CPU流水线  GPU从CPU那里得到渲染命令后,就会进行一系列流水线操作,最终把图元渲染到屏幕上。

   几何阶段:

        顶点着色器/曲面细分着色器/几何着色器

        裁剪(Clipping):将不在视野范围内的顶点裁减掉,这阶段可配置的,但是不可编程。

        屏幕映射:负责把每个图元的坐标转换到屏幕坐标系中。 该阶段不可配置,编程。

     光栅化阶段:

        三角形设置:计算光栅化一个三角形网格锁需要的信息。 不可编程,不可配置。

        三角形遍历:会检查每个像素是否被一个三角形锁覆盖。如果被覆盖,就会生成一个片元(fragment)。而这样一个找到哪些被三角形网格覆盖的过程就是三角形遍历。不可编程,不可配置。

        片元着色器:可编程着色器。在DirectX中,片元着色器被称为像素着色器。

        逐片元操作:最后一步。在DieectX中,称为输出合并阶段。

渲染流水线的最终目:渲染成为一张2D纹理,就是我们看到的屏幕。

输入是:摄像机,光源,shader,纹理等。