实时渲染(第三版):第二章 图形渲染管道 2.1 体系结构

来源:互联网 发布:激战2马乔丽捏脸数据 编辑:程序博客网 时间:2024/04/30 16:15
 

第二章 图形渲染管道

    一环薄弱,全局必跨。
                    ----匿名

    本章介绍实时图形的核心部分:图形渲染管道,也简单地称作管道。管道的主要功能是生成,或者说是渲染一个2D图像,前提是你提供了一个虚拟的相机、3D对象、光源、着色方程、纹理等等。渲染管道是实时渲染的底层工具,如图2.1所示。图像中对象的问你只和形状有下面几个方面决定:对象的几何形状、环境属性、相机位置。对象的外观则受下面几个方面的影响:材质属性、光源、纹理和着色模型。

    我们即将讨论和讲解渲染管道的各个不同的阶段,我们关注其功能而不是其实现。实现的细节,要么留给后面的章节,要么就是程序人员无法控制的元素。比如,对某个使用线的人来说,重要的是下面的这些特性:顶点数据的格式、颜色及其样式类型、还有深度测试是否有效,而不是使用Bresenham画线算法[142]或对称双步算法[1391]实现。这些管道的一些阶段尝尝在不可变成的硬件上实现,这导致无法优化或改善实现。基本的绘画和填充算法的细节在本书(如Rogers [1077])有深度的介绍。在不好控制一些底层硬件时,算法和编码方法就对图像的生成速度和质量有这显著的影响。


图 2.1 左边图像中,一个虚拟相机放在了金字塔的顶端(四条线的收敛处)。只有在视锥内部的基元才会被渲染。对一个透视渲染(此处就是这种情况)的图像来说,视锥是一个平截头体,比如有一个矩形基的平截金字塔。右边的图像显示了相机“看”到的内容。 注意,左图中的红色圆圈并没有渲染到右图中,因为它位于视锥之外。另外,蓝色的双绞棱镜也被视锥的上平面给剪切了。

2.1 体系结构

    在物理上,管道的概念千差万别,从工厂组装生产线到滑雪升降机。它也应用于图形渲染。

    管道包含几个阶段[541]。在一个石油管道中,如果第二段中的石油没有移动到第三段,则第一段中的石油就无法移动到第二段。这表示,管道的速度由最慢的那个阶段决定,而无论其他阶段有多快。

    理想情况下,被分割为n个管道阶段的非管道系统会有一个速度提升因子n。这种性能上的增加是使用管道的主要原因。比如,仅有一个椅子的滑雪缆车是效率低下的,增加椅子能够有一个按比例的加速。管道阶段并行执行,但它们会等待直至最慢的阶段完成。例如,在汽车生产线的方向盘装配阶段,需要三分钟,而其他阶段需要两分钟,那么,能够达到的最好速率是每三分钟制造一辆汽车;其他阶段必须空闲一分钟以等待方向盘装配完毕。对这个特别的管道来说,方向盘装配阶段是瓶颈,因为它决定整个产品的速度。

    这种类型的管道构造也用于实时计算机图形环境。实时渲染管道粗略分为三个概念上的阶段:应用、几何形状和光栅化,如图2.2所示。该结构是核心--渲染管道的引擎--用于实时计算机图形应用,是后续章节进行讨论的根本。这些阶段中的每个,在其自身内部,通常也是一个管道;这意味着,它们各自有几个子阶段组成。我们要区分概念阶段(应用、几何形状和光栅化)、功能阶段和管道阶段。功能阶段需要执行一个确定的任务,但不会指定执行任务的方式。而管道阶段会被同时执行;为实现高性能需求,可能会被并行执行。比如,几何形状阶段可以分成5个功能阶段,但是,具体要如何分割管道阶段,则由图形系统的实现决定。一个给定的实现可能组合了两个功能阶段为一个,然而,出于更多的时间考虑,又分割了另一个功能阶段为好几个管道阶段,甚至是并行执行它。


图 2.2 渲染管道的基本构成,有三个阶段:应用、几何形状和光栅化。这些阶段中的每个,在其自身内部,可能也是一个管道,如几何形状阶段下方所示;或者是一个可被(部分)并行执行的阶段,如光栅化阶段下方所示。本图中,应用阶段是一个单独的过程,但该阶段也可以被管道化或并发化。

    最慢的管道阶段决定着渲染的速度,即图像的更新速率。该速度可以用帧每秒(fps)衡量。fps,也是每秒钟渲染的图像的数量。它还可以使用赫兹(Hz)表示。赫兹是“1/秒数”(如,更新频率)的简易符号。应用用来生成图像的时间通常随着每帧需要执行的计算的复杂度而变化。可以使用fps衡量某特定帧的速率,或某段时间中的平均性能;赫兹用于硬件,如显示器,它被设置为一个固定的频率。既然是管道,仅把想要渲染的数据传递给整个管道所需的时间相加是远远不够的。它是管道构造的结果。管道构造允许阶段并行执行。如果我们能够定位瓶颈(如,管道的最慢阶段),并测量数据通过它的时间,那么我们就可以计算出渲染速度。假设,瓶颈阶段需要20ms(毫秒),则渲染速度是1/0.020 = 50 Hz。不过,这仅当输出设备能够以这个特定的速度进行更新时才会成立;否则,实际的输出频率只会更低。在其他的一些管道环境中,使用吞吐量替代渲染速度。

    示例:渲染速度。假设输出设备的最大更新频率是60Hz,且渲染管道的瓶颈已经找到,它需要62.5ms。那么,渲染速度可以如下计算。首先,忽略输出设备,获得一个最大的渲染速度,1/0.0625 = 16 fps。其次,根据输出设备的频率调整计算结果:60Hz能够应用16fps的有:60Hz,60/2 = 30 Hz, 60/3 = 20 Hz, 60/4 = 15 Hz, 60/5 = 12 Hz等等。这意味着我们最终能够获得的渲染速度是15Hz,因为它是不大于16fps中,输出设备可以处理的最大的常量速度。

    正如名字所示,应用阶段由应用驱动,因此,实现于在通用CPU上运行的软件中。这些CPU通常包含多核,能够并行处理多个执行线程。这就让CPU可以高效地执行应用阶段的大量任务。传统上,CPU执行的一些任务,依赖于应用的类型,有碰撞检测,全局加速算法,动画,物理模拟等等。下一步是几何形状阶段,它处理转换、投影等。这个阶段计算:绘画什么,如何绘画,以及在何处绘画。几何形状阶段通常运行于图形处理单元(GPU)上。GPU包含许多可编程的核心和固定操作硬件。最后,光栅化阶段使用前一个阶段生成的数据和任何所需的逐像素计算来绘画(渲染)一幅图像。光栅化阶段完全由GPU处理。这些阶段及其内部管道将在下面的三节进行讨论。GPU如何处理这些阶段的更多细节在第三章给出。

原创粉丝点击