图形渲染流水线
作者:互联网
渲染流水线的主要作用是,在给定的一个虚拟相机、一些三维物体、光源以及其他的条件下,生成或渲染出一张二维图片。因此,渲染流水线是实时渲染最基本的工具。在图1中描绘了渲染流水线的处理过程。二维图像中的物体的位置和形状取决于他们的几何形状、环境的特征和相机在环境的位置。物体的外观受材质、光源、纹理(贴在物体表面的图片),和着色计算方程式影响。
图2.1 在左图中,一个虚拟相机位于棱锥体的尖端(即四条直线的交汇处)。只有在视景体中的图元才会被渲染。对于以透视的方式渲染的图像(正如上图),视景体是一个截头椎体。右图展示了相机方向看到的景色。要留意,因为左图中的环形物体不在视景体内,所以它没有被渲染到右图中。同样,左图中扭曲蓝色棱镜被视景体的截面截断了。
1.构架
在现实世界中,流水线概念以各式各样的形式表现出来,例如工厂装配流水线和快餐店的厨房。它也应用于图像渲染。图像渲染流水线由几个阶段组成,每个阶段执行一个更大的任务的一部分。
流水线的各阶段是并行执行的,且每个阶段都依赖与前一个阶段的结果。理想情况下,一个被分割为n个流水线阶段的非流水线系统可以加速n倍。采用流水线的主要原因就是为了获得这种性能提高。例如,一批功能可以快速地准备大量三文治,一个人准备面包,一个人添加肉类,一个人添加佐料。每个人将本阶段的结果传递给下个人,并且立即着手制作下个三文治的工作。如果每个人都需要20秒完成他们的工作,那么最快可能以20秒一个,一分钟3个的速度生产三文治。虽然流水线阶段的执行是并行的,但是在最慢的阶段完成之前,其他阶段都是停滞的。举个例子,添加肉类的阶段需要更多的时间,现需30秒。那么现在最快的速度可以在一分钟完成两个三文治。对于这个特殊的流水线,因为肉类环节决定了整个生产过程的速度,所以这个环节是该流水线的瓶颈。在添加肉类环节完成之前,佐料环节可以称之为“挨饿”(对客人来说也是如此)。
这类流水线结构也可以在实时计算机图形学的背景中发现。实时渲染流水线可以大致分为四个主要阶段——应用、几何处理、光栅化、像素处理。这四个阶段如图2所示。这个构架是渲染流水线的核心。它被应用于实时计算机图形学应用中,也是本节讨论的一个基础。
图2 渲染流水线的基础构架由四个阶段组成:应用(Application)、几何处理(Geometry Processing)、光栅化(Rasterization)、像素处理(Pixel Processing)。其中每个阶段本身可能都是一条流水线,正如插图中几何处理阶段,也有可能是(部分)平行化的,正如插图中的像素处理。在这插图中,应用阶段是一个单独的过程,但是这个阶段也可能是流水线型或平行化的。注意:光栅化是在图元(例如三角形)中找出像素。
每个阶段通常也是一个流水线意味着它们可能由几个子阶段组成。我们将在这里展示的功能阶段和实现的结构区分开来。一个功能阶段需要去执行一个特定的任务,但在这个流水线中这个完成这个任务的方法却是不确定的。一个给定的实现可以将两个功能阶段合并成一个单元或者使用可编程核心执行,而将另外一个更加耗时的功能阶段划分为几个硬件单元。
渲染速度可以在帧每秒中体现出来,帧每秒是指在每秒中可以渲染出来的图像数量。渲染速度也可以用Hz(一个表示1/second的简单符号)表示,即利用刷新的频率表示。还可以利用毫秒记录渲染一张图片的时间来表示渲染时间。生成一张图片的时间通常是变化的,这取决于每帧所需执行的运算的复杂程度。每秒帧数可用来表示特定帧的速率和一段使用时间内的平均性能。Hz用于硬件,例如被固定为一固定刷新速率的显示器。
顾名思义,应用阶段是由应用程序驱动,因此通常是由在通用CPU中运行的软件执行的。这些CPU通常具有多个核心,进而有能力并行执行多线程。这使CPU高效运行大量与应用阶段相关的的任务成为可能。一些通常在CPU上执行的任务取决于应用的类型,例如碰撞检测、全局加速算法、动画、物理模拟及许多任务。接下来的是几何处理阶段,它主要处理几何变换、投影及所有其他类型所有其他几何操作。这个阶段计算需要绘制的是什么,应该怎么绘制和应该绘制在哪里。几何处理阶段通常在包含大量可编程核心和具有特定操作的硬件的图像处理单元(CPU)里执行。光栅化阶段通常以三个顶点作为输入,形成一个三角形,并找出所有可以认为在三角形以内的像素,然后将这些像素转发到下一阶段。最后,像素处理阶段执行程序决定每一个像素的颜色,并对每一像素进行深度测试以检测其是否可见。它还可以执行每像素操作,例如将新计算的颜色与缓冲里旧的颜色进行混合。光栅化和像素操作两个阶段都是全部在GPU中进行的。
2.应用阶段
因为应用阶段是在CPU上执行的,所以开发者可以完全操控本阶段上发生的一切。因此,开发者可以完整地决定执行计划和随后的改善性能的修改计划。改变这里也会影响后续阶段的性能。举个例子,一个应用阶段的算法或设置可以减少需要渲染的三角片的数量。
综上所述,利用一种名为计算机着色器的独立模式,一些应用工作也可以由GPU中执行。这种模式视GPU为一种高度并行化的通用处理器,而忽视其专门渲染图像的特殊功能。
在应用阶段的最后,需要被渲染的几何图形将输入几何处理阶段。点、线和三角片等渲染图元可能最终会出现在屏幕(或其他任何正在使用的输出设备上)。这是应用阶段最重要的任务。
这个阶段的一系列基于软件的操作没有被划分为子阶段,不像几何处理、光栅化、像素处理阶段[1]。然而,为了增强性能,这个阶段进程被并行执行于多个处理器核心中。在CPU设计中,这被称为超标量体系结构,因为它可以在一阶段、同一时间执行多个进程。18.5节将呈现多种多样的运用多处理器核心的方法。
碰撞检测通常是一个被执行与该阶段的程序。在两个物体之间的碰撞被检测到后,将产生一个反馈,并发送给正发生碰撞的物体和力反馈设备。应用阶段也是处理来自其他源(例如键盘、鼠标、头戴式显示器)的输入的地方。根据这种输入,可能会采取几种不同的操作。加速算法(例如特定的剔除算法)也会在这里执行,以及不能在剩下流水线阶段中处理的其他操作。
3.几何处理阶段
在GPU上的几何处理阶段负责大部分的每三角片和每顶点操作。该阶段可以进一步划分为以下结果功能阶段:顶点着色、投影、裁剪、屏幕映射(图2.3)。
图3 几何处理阶段划分为一系列的功能阶段
[1] 由于CPU本身的流水线规模要小得多,所以也可以说应用阶段被进一步划分为几个流水线阶段,但这和这里没有关系。
标签:渲染,处理,像素,阶段,应用,流水线,图形 来源: https://www.cnblogs.com/mshentaiBlog/p/16503953.html