渲染流水线
1)应用阶段(CPU处理)
首先,准备好场景数据(摄像机位置,视锥体,模型和光源等)
接着,做粗粒度剔除工作。
最后,设置好每个模型的渲染状态(使用的材质,纹理,shader等)
这一阶段最重要的是渲染所需要的几何信息,即渲染土元,渲染图元可以是点,线,三角面等。
a.把数据加载到显存中
b.设置渲染状态,通俗说这些状态定义了场景中的网格是怎样被渲染的。
c.调用DrawCall,一个命令,CPU通知GPU。(这个命令仅仅会指向一个需要被渲染的图元列表,并不会包含材质信息,因为在上一阶段已经完成)
2)几何阶段(GPU处理)
主要用于处理所有和我们绘制的几何相关的事情。几何阶段负责和每个渲染图元打交道,进行逐顶点,逐多边形的操作。
几何结算的一个重要任务就是把顶点坐标转换到屏幕空间中,再交给光栅器进行处理。
总结:输入的渲染图元->屏幕空间的二维顶点坐标,每个顶点对应深度,着色等信息。
3)光栅化阶段(GPU处理)
将会使用上一个阶段传递来的数据来产生屏幕上的像素,并渲染出最终的图像。
主要任务是决定每个渲染图元中的哪些像素应该被绘制在屏幕上。
渲染流水线的起点是CPU,即应用阶段。
CPU流水线 GPU从CPU那里得到渲染命令后,就会进行一系列流水线操作,最终把图元渲染到屏幕上。
几何阶段:
顶点着色器/曲面细分着色器/几何着色器
裁剪(Clipping):将不在视野范围内的顶点裁减掉,这阶段可配置的,但是不可编程。
屏幕映射:负责把每个图元的坐标转换到屏幕坐标系中。 该阶段不可配置,编程。
光栅化阶段:
三角形设置:计算光栅化一个三角形网格锁需要的信息。 不可编程,不可配置。
三角形遍历:会检查每个像素是否被一个三角形锁覆盖。如果被覆盖,就会生成一个片元(fragment)。而这样一个找到哪些被三角形网格覆盖的过程就是三角形遍历。不可编程,不可配置。
片元着色器:可编程着色器。在DirectX中,片元着色器被称为像素着色器。
逐片元操作:最后一步。在DieectX中,称为输出合并阶段。
渲染流水线的最终目:渲染成为一张2D纹理,就是我们看到的屏幕。
输入是:摄像机,光源,shader,纹理等。