我是靠谱客的博主 呆萌西牛,最近开发中收集的这篇文章主要介绍光栅化具体描述,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

和几何形状阶段类似,本阶段也细分为几个功能阶段:建立三角形、遍历三角形、像素着色和合并,如图2.8。

2.4.1 建立三角形

本阶段计算三角形表面的差值和其他数据。该数据用于扫描转换,以及几何形状阶段生成的各种着色数据的插值。该过程由任务专用的固定操作硬件执行。

2.4.2 遍历三角形

在这个阶段,将检查每个被三角形覆盖了中心(或某样品)的像素,并为和三角形重叠的像素部分生成片段。查找哪些样品或像素在三角形内部这一过程叫做三角形遍历或扫描转换。每个三角形片段的属性都被使用三角形的三个顶点(参考第五章)间的插值数据生成。这些属性包括片段的深度和来自几何形状阶段的着色数据。Akeley 和 Jermoluk [7]和 Rogers [1077]提供了三角形遍历的更多信息。

2.4.3 像素着色

本阶段使用插值的着色数据作为输入,执行所有的逐像素着色计算。最终结果是将一个或多个颜色传递给下一个阶段。和建立三角形与遍历三角形阶段不同,本阶段由可编程的GPU核执行。此处有大量的技术可以使用,其中最重要的一种是纹理。纹理在第六章详细介绍。此处,简单地说,对对象进行纹理操作,就是将一幅图像粘合到对象上。这一过程如图2.9所示。图像可以是一维、二维和三维的,其中二维的最为常见。

这里写图片描述
2.4.4 合并

每个像素的信息被存储在颜色缓冲中,它是颜色的矩形数组(每个颜色拥有红、绿、蓝三部分)。合并阶段负责将着色阶段生成的片段颜色和当前缓冲中存储的颜色进行组合。和着色阶段不同,通常,执行本阶段的GPU子单元不是完全可编程的。不过,它具有较高的配置性,可以启用各种效果。

本阶段还负责解决可见性。这意味着,在整个场景被渲染后,颜色缓冲应当包含场景中视点可以看到的基元的颜色。对大多数图形硬件,这由z缓冲(也叫深度缓冲)算法[162](当z缓冲无效时,可以使用BSP树以从后到前的顺序渲染场景)完成。z缓冲和颜色缓冲具有相同的大小和形状;它存储每个像素的z值,该值是相机到当前最近基元的距离。这意味着,当一个基元被渲染到某像素时,会首先计算该基元在该像素处的z值,然后将计算出来的z值和当前z缓冲中的z值进行比较。如果计算出来的z值小于当前z缓冲中的,则说明在该像素位置处,现在绘画的基元到相机的距离比前面绘画的基元要近。因此,该像素的z值和颜色应当被更新。如果计算出来的z值大于当前z缓冲中的z值,则颜色缓冲和z缓冲就应当保持不变。z缓冲算法很简单,有一个O(n)集合,其中,n是正被绘画的基元的数目。它作用于能够计算各个(相关)像素的z值的基元。该算法允许大多数基元以任意顺序渲染,这也是它能够普及的一个原因。不过,部分透明的基元不在此列。它们必须在不透明基元之后进行渲染,并且以从后到前的顺序(参考节5.7)。这是z缓冲的主要弱点。

我们提过,颜色缓冲存储颜色,z缓冲存储z值。除此之外,还有其他通道和缓冲,能够用来过滤和捕捉片段信息。alpha通道关联于颜色缓冲,它存储各个像素的不透明值(参考节5.7)。在深度测试之前,可以对收到的片段进行一个可选的alpha测试(在DirectX10中,alpha测试不再是本阶段的一部分,而是像素着色器的一个函数)。片段的alpha值被用指定的方式(等于,大于等)和参考值进行比较。如果片段未能通过测试,就不会被继续处理。alpha测试通常被用来确保完全透明的片段不会影响到z缓冲(参考节6.6)。

模板缓冲是一个离屏缓冲,用来记录已渲染的基元的位置。它通常包含8个比特位每像素。首先,可以使用各种函数将基元渲染到模板缓冲;然后,模板缓冲的内容就可以用来控制颜色缓冲和z缓冲的渲染。假设一个实心圆圈已经绘画到模板缓冲。这可以和一个操作组合。该操作允许后续基元只能渲染到圆圈覆盖的颜色缓冲区域。模板缓冲是一个强大的特效工具。在管道最后的所有这些函数叫做光栅操作(ROP)或混合操作。

帧缓冲一般由系统中的所有缓冲组成,但有时,我们习惯于用它表示颜色缓冲和z缓冲的组合。在1990年, Haeberli 和 Akeley [474] 介绍了一种帧缓冲的补充,叫做累积缓冲。在这种缓冲中,图像可被使用一套操作进行累积。比如,可将显示对象运动的一组图像进行累积和平均,这样就可以生成运动模糊。可以生成的其他效果还有景深、抗锯齿、柔和阴影等。

当基元到达和传过光栅化阶段,视点可见的将被显示到屏幕上。屏幕显示的是颜色缓冲的内容。为避免人们看到基元光栅化、显示到屏幕的过程,我们使用双缓冲。这就是说,场景的渲染不在屏幕上,而在一个叫做后备缓冲的地方进行。当场景在后备缓冲中渲染好之后,后备缓冲的内容和前缓冲(前面屏幕显示的内容)互换。互换在垂直回扫期间发生。垂直回扫是可以安全执行该操作的时间。

最后

以上就是呆萌西牛为你收集整理的光栅化具体描述的全部内容,希望文章能够帮你解决光栅化具体描述所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(34)

评论列表共有 0 条评论

立即
投稿
返回
顶部