[实时渲染] 2.4 光栅化阶段

来源:互联网 发布:90年代的网络歌曲 编辑:程序博客网 时间:2024/05/24 06:02
     给定变换和投影过的顶点以及相关的着色数据(来自几何阶段),光栅化阶段的目的是计算并设置被物体覆盖的像素的颜色,该过程也称为光栅化或扫描转换(scan conversion),是将屏幕空间带z值(深度值)的二维顶点及其相关的各种着色信息转换到屏幕上的像素。
     如几何阶段相似,该阶段也被分成几个功能阶段:三角形设置,三角形遍历,像素着色,混合,如图2.8所示。

2.4.1 三角形设置
     三角形表面的微分和其它数据在该阶段进行计算,该数据用来进行扫描转换,以及对几何阶段生成的各种着色数据进行插件。该阶段使用固定功能的使用进行处理。

2.4.2 三角形遍历
     该阶段检查每个像素中心(采样)是否被三角形覆盖,并为像素的其它部分生成一个与三角形重叠的片元(fragment),找到三角形内的采样或像素称为三角形遍历或扫描转换。每个三角形片元的属性使用三个顶点间插值得到的数据进行生成(见第五),这些属性包括片元的深度,以及由几何阶段生成的任何着色数据。Akeyley,Jermoluk[7]以及Rogers[1077]提供了更多关于三角形遍历的信息。

2.4.3 像素着色
     任何逐像素着色的计算都是在该阶段执行,使用插值过的着色数据作为输入,结果是一个或多个颜色被传递到下一个阶段,与三角形设置与遍历使用专用硬件不同,像素着色阶段在可编程的GPU核心上执行,大量不同的技术被应用在这里,其中一个最重要的技术是贴图(texturing),贴图在第六章会更深入研究。简单地说,给一个物体贴图意思是说将一个图片粘到物体上,图2.9详细描述了这个过程。最常用的图片可以是1维,2维和3维的

2.4.4 混合
     每个像素的信息存储在颜色缓冲区(color buffer)中,缓冲区是一个矩形的颜色数组(红,绿和蓝三个分量),混合阶段的责任是联合着色阶段产生的片元颜色与当前缓冲区中的颜色。与着色阶段不同,GPU的子单元通常执行的这一步不是完全可编程的,但是是高度可配置的以达到不同的效果。
     该阶段也负责处理可见性,这是说当整个整个场景被渲染后,颜色缓冲区中应当包含场景中从相机位置可以看到的图元的颜色。对大多数的图形硬件,这一阶段使用Z-Buff算法[162],Z-buff是一个与颜色缓冲区形状大小相同的缓冲区,每个像素存储相机到当前最近图元的z值,这是说当一个图元被渲染到一个特定的像素,该图元在该像素的z值被计算并与z-buff中的值进行比较,如果新的z值比z-buffer中的值小,由于该图元在该像素更接近相机所以会被渲染,因此该像素的z值和颜色会使用被绘制的图元的z值和颜色进行更新,如果计算得到的z值大于z-buffer中的值,颜色缓冲区和z-buffer保持不变。Z-buffer算法非常简单,具有O(n)的收敛性(n是被渲染的图元数量),并且对任何能给相关像素生成z值的图元都是有效的。同时注意,该算法允许大部分的图元可以以任何顺序进行渲染,这也是该算法流行的另一个原因,然而对于部分透明的图元不可以仅仅使用任何顺序,他们必须在不透明体渲染之后,并且使用从后向前进行渲染(5.7节),这是z-buffer的一个主要缺点。
     我们已经提到颜色缓冲区和Z-buffer用来存储每个像素的颜色和z值,另外还有其它的通道和缓冲区用来过滤和捕捉片元信息,alpha通道是被指定到颜色缓冲区用来存储每个像素的透明度(见5.7节),一个片元上可选的alpha测试(alpha test)可以在深度测试之前执行,片元的alpha值可以与参考值进行指定的测试(等于,大于等),如果片元测试失败,将被从后续的处理中移除,该测试通常用于保证完全透明的片元不会影响到Z-buffer(见6.6节)。
     模板缓存(stencil buffer)是一个离屏的缓冲区用来记录被渲染图元的位置,通常每个像素包含8个bit,图元可以使用不同的方法(function)来渲染到模板缓存,该缓存的内容然后可以用来控制渲染到颜色缓冲区和z-buffer。举个例子,假设一个实心圆已经被绘制到模块缓存,可以联合使用一个操作允许渲染后续图元到只有圆显示的颜色缓冲区上,模板缓存是生成特殊效果的有力工具,所有这些操作在图元的结尾称为光栅操作(raster operations, ROP)或融合操作。
     帧缓存(frame buffer)通常指一个系统上的所有缓冲区,不过有时仅仅值一个包含颜色缓冲区及Z-buffer的集合,1990年Haeberli和Akeley[474]提出了一个帧缓存的补充,称为累积缓冲区(accumulation buffer),在该缓冲区中图像可以使用一个操作集合进行累积,例如,一个图像集合显示一个运动中的物体可以被累加和平均来生成运动模糊,其它可以生成效果包括景深(DOF),抗锯齿(antialiasing),软阴影等等。
     当图元到达光栅化阶段,这些从相机视点可见的图元会被显示在屏幕上,屏幕显示了颜色缓冲区中的内容。为了避免人类观察都看到正在被光栅化以及发送到屏幕上的图元,双缓冲区(double buffering)被使用,这也即是说场景的渲染发生在离屏的后缓冲区(back buffer)中,一旦场景在后缓冲区中渲染完成,后缓冲区的内容与之前正在屏幕上显示的前缓冲区(front buffer)中内容进行交换,交换发生在一个可以安全执行的垂直回扫(vertical retrace)时间里。
     更多关于不同的缓冲区及缓存技术见5.6.2和18.1节












0 0