荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: bily (x+y=z), 信区: Hardware
标  题: 3d图形处理的原理(上)
发信站: BBS 荔园晨风站 (Mon Dec 20 12:53:30 1999), 转信


最近一年多来,在3Dfx、Intel们的狂轰滥炸中,在Quake、古墓丽影们的推
波助澜下,三维图形已经成为计算机迷眼中的又一个热点。3D世界到底是怎样
的神奇,我们又是怎样享受它的乐趣呢?就让我们来一探究竟吧。
 探索3D图形处理的奥秘(上)

 图形基础
为真正掌握3D图形,必须先打好一个牢固的基础。显然,最合理的起点就是
计算机图形的基本理论。
对每幅计算机图像来说,它的最小构成元素都是像素(Pixel)。一个像素由
三个颜色组件构成:红色、绿色和蓝色。处理器计算出屏幕上每个像素的三种颜
色值,然后以数字形式保存到一种特殊类型的本地内存(即显示内存)中。之所
以要用显示内存保存视频信息,是因为它同时连接了CPU和图形控制器。需要的
时候,显示内存中的信息被“推”至图形控制器。图形控制器取得数字形式的
信息,并将其转换成波形信号,决定三个电子枪的电压。
电子枪三个一组,分别负责一个颜色组件。正如早先指出的那样,电子枪发
射强度是由输入的电压决定的。电子束击中荧屏背面,那里均匀涂抹着大量荧
光体。每一像素由三个荧光体构成,分别能发出红光、绿光及蓝光。这三种颜
色我们称之为三原色。将不同强度的红、绿、蓝色组合在一起,我们可以得到
大自然中的任何一种颜色。
例如,真彩色(之所以叫这个名字,是由于任意两种颜色之间的过渡非常平
滑,接近自然彩色)可用24位二进制数表示(即1670万色)。通常,这24位在
每个颜色组件中均匀分布,即每一原色获得8位。因此,每个原色可有2的8次方
即256种变化!与真彩相比,低一级的是高彩或16位彩色,它能产生65536种不
同的颜色。目前32位彩色也比较常见,它可产生几十亿种颜色。
不幸的是,产生这些颜色的荧光体不可能一直发光,必须不停地刷新或重
画。电子枪必须周期性扫描屏幕。若扫描速度不够快,屏幕就会产生闪烁。为
缓解这种闪烁,必须增大刷新频率。通常每秒刷新60-70次才能得到平滑、稳定
的显示。
随着分辨率的增大,屏幕刷新会变得越来越困难,因为这意味着需要更高的
带宽。分辨率是显示器的一个重要指标,它表示了同屏显示的颜色及像素数量
和屏幕的(对角)几何尺寸。像素数量通常用下述形式表示:每水平扫描行的像
素×每垂直扫描列的像素。一个15英寸、24位、1280×1024的屏幕,能展现比
一个14英寸、24位、800×600屏幕更多的细节。这是由于在1280×1024的屏幕
中,像素点的尺寸要小得多,屏幕能够显示更多的像素的缘故。
现在,我们已熟悉了图形的基本术语和概念。下面开始探索令人振奋的3D世
界!下图是揭示2D与3D图形差异的一个简单例子。3D图像展现了更多的细节和
深度。现实世界的一些细节可使3D图形变得更加真实。这些细节主要包括大量
彩色光影、照明效果以及纹理。尽管2D图形可模仿3D的写真效果,但绝对要逊
色许多。由于3D图形采用独特的存储方法,所以能从任意角度精确地观察它。
而对于2D图形,我们就只能从一个特定的角度去看了。

    3D图形流水线
3D图形其实并不难想象,因为我们就生活在一个3D现实世界里。自计算机能
准确表达3D图像以来,至今已过去了大约30年。然而,对更逼真和更自然图像
的渴求从来就没有间断过,今天如此,明天亦如此。为达到对图像拟真度的要
求,必须在上色、调匀纹理表面以及精细照明效果上下功夫。为绘制出逼真的
3D物件,场景中的每张图都必须在“3D流水线”上完整地走一遭。(当然目前有
不同的3D流水线加工方案,这儿介绍的并非唯一一种可能。)在这里我们将解释
流水线的每一道工序,并在必要时提供示意图,方便大家理解。若未完成整条
流水线的处理,屏幕上是不会出现3D图像的。这里的示意图仅仅是为了方便大
家理解幕后的一系列操作,并不代表它们真能在屏幕上显示。在3D图形流水线
中,最主要两个阶段是几何与光栅处理。几何处理阶段会完成所有计算。在接
下去的光栅处理阶段,则根据计算结果产生实际的屏幕显示。
在几何处理阶段进行的计算可分为四类:镶嵌(Tessellation)、转换
Transformation)、照明(Lighting)以及设置(Setup)。3D物件进入流水
线处理之前,必须先定义成坐标数据的形式,或采用数学公式表达。镶嵌的目
的就是将这些坐标数据转换成多边形。通常会进一步将这些多边形变成三角形
或四边形,以简化计算。镶嵌好的物件也叫作“框架”(Wireframe),可将其
大致看作一个现实世界的物件。这种物件有一些明显的特征,例如形状、尺寸
以及方向等。下面是一个镶嵌好的框架模型示例。该模型完全由相互连接的多
边形构成(这里是三角形),是绘制更真实图形的关键基础。我们对选择点
顶点)的计算会影响多边形内的每一个像素,因为这些像素均由顶点的原始
数据再计示而来。
第二步是转换。转换是物件的一种特殊处理方法。我们可旋转、位移以及缩
放一个物件。其中,旋转是物件围绕x,y和z轴的一种运动;位移则是物件朝一
个方向的运动。例如,地球的自转可认为是“旋转”,而地球绕太阳的公转则
可认为是“位移”。通过位移与旋转的组合,可产生任意形式的运动。“缩
放”代表物件尺寸的变化。
均匀缩放”是指增大或减小整个物件的尺寸。进行均匀缩放时,比例保持
不变。照相机镜头的变焦便是均匀缩放的一个例子。“不均匀缩放”是指增大
或减小部分物件的尺寸。我们在哈哈镜里看到的镜像便是不均匀缩放的一个例
子。一个乘法矩阵定义了缩放时物件尺寸的变化因子。变形特别适合在图形环
境中产生运动效果。
现在,所有顶点都已到达最终位置(至少在流水线的这一阶段如此)。随
后,我们可决定哪些顶点不会影响最终的图形显示。例如,位于屏幕以外的所
有内容都要剔除——不画出任何内容。这一过程叫作“剪切”。还有一些顶点
超过了指定的深度或z坐标。删除这些部分的过程叫作z剪切(如图8所示)。大
多数时候,3D物件(如立方体)的背墙是看不见的。此时,构建这些背墙的顶
点也要剔除,为将来的计算作好准备。剪切和剔除是非常重要的准备工作,因
为它们使计算只针对那些要显示出来的元素进行。由于并不需要计算看不见的
东西,所以最终图型的质量不会受到影响。
照明是几何处理最复杂的工序。每个顶点的灯光效果都由一个照明公式决
定。在大多数现实环境中,不同的光源会严重影响“真实”的含义。在3D图形
环境中,光源使物件显得更加真实。有大量照明公式可供选用,每个都以独特
的方式影响着多边形的构造。通常有两种类型的照明:点光源和泛射。点光源
是指灯光仅来自一个光源。例如,一支手电筒便是一个点光源。而泛射则是指
无固定方向的光线照射。
若不使用泛射灯光,物件上未被点光源照到的多边形就会变成全黑。照明公
式的复杂性会对图形渲染的性能与质量造成影响。若照明公式比较复杂,虽然
可以提高质量,但渲染或图形生成速度也会变慢。下面是用两种类型的光源进
 行渲染的结果。
3D数据向2D数据的转换是在“设置”阶段完成的。这一阶段也通常称为“透
视投影”。例如,假设从正前方观看,立方体看起来就是一个正方形。但若保
持视点不变,然后旋转立方体,就会发现它渐渐变成一个平行四边形。如正方
体继续旋转,则平行四边形会变得越来越小,直至最后变成一条线,线后的那
些点则逐渐被屏蔽掉。
对于3D图形在2D屏幕上的显示,“设置”过程无疑是非常关键的。用于显示
这些图形的过程叫作“光栅处理”,后面会详细讲述。几何处理是计算特别密
集的一个阶段,对计算能力的要求也特别高。在几何处理阶段,所有信息都保
存在顶点里。光栅处理的目的就是获取这些信息,并相应填充多边形。这一阶
段决定了3D模型的表面质量,比如颜色和纹理等。此时面临的最大问题就是计
算速度。为产生平滑的运动图像,屏幕内容必须以每秒约30帧的速度更新。这
更新频率叫作“帧频”。(注意不要把它与屏幕的“刷新频率”搞混淆了。刷
新频率是指荧光体的刷新频率;而帧频是指图形的显示更新频率。)所以在1/30
秒的时间里必须做些什么事情呢?简而言之,要做的事情太多了!通常将光栅
处理划分为四个基本类别——可见性(Visibility)、纹理贴图(Texture
mapping)、着色(Shading)以及平滑处理(Smoothing)。
“可见性”的定义是光栅处理的一道主要工序。可见性决定了哪些物件或物
件的哪些部分可在屏幕上看见。有几个方面的原因决定了物件的可见性。如一
个物件位于另一个物件的前方,则只有最前面的物件才会完全显示出来。对计
算机来说,它如何判断特件之间的相对方位呢?我们通过跟踪特件的z坐标来实
现。这一工作通常在z缓冲里完成。z缓冲保存了下一帧的z坐标数据。
若z缓冲里的某个像素(有个较小的z值)比它在当前显示帧里对应的像素更靠
近坐标原点(有更小的Z值),那么在下一帧里,较近的像素会取代较远的像素。
唯一的例外就是缓冲区内较近的像素被设为透明或半透明。此时,较远的像素
仍以某种形式保留下来。像素的透明/半透明状态保存在第四个颜色组件里
(位于红、绿和蓝之后),名为Alpha(α),或者“色层”。Alpha值决定了
透过一样东西能看到其他多少内容。这个值在一种名为Alpha混合或色层混合的
技术中特别有用。色层混合会以近端像素颜色的透明/半透明状态以及两个元
 素的颜色值为基础,对颜色进行重叠与合并。
在光栅处理阶段,另一道关键的工序是纹理贴图。它的原理非常简单,就是
将纹理或材质粘贴到3D物件表面。有些人把它想象成一个多面体的壁纸。纹理
贴图最大的好处就是在非常大的表面区域展现出大量细节。如果仅仅原样复制
该平面上的纹理而不进行额外的纹理贴图,可以快速产生大量多边形,从而节
省加速器或处理器资源。由于存在第3维,所以表面贴图并非总是这么简单。为
确表现出纹理,必须旋转贴图,与多边形的角度配合,这就叫作“透视矫正
纹理贴图”( Perspective Correct TextureMapping)。此外,根据多边形所
处的位置,纹理贴图必须进行适当的缩放。
左数第一张图是一个正方形,与屏幕表面平行,粘贴了一种格子纹理。第二
个正方形则转动了一个角度,但仍用格子纹理粘贴。最后一张图保持正方形的
转角不变,也用相同的纹理粘贴,只是采用了透视矫正技术。
在这幅图中,我们为月神应用了不同的纹理光栅处理阶段的第三道工序涉及
照明效果或者“着色”。着色是指在图像中精确展现出光影效果。在几何处理
阶段,以一些照明公式为基础,已完成了大量计算,已经知道灯光会对图像的
每个顶点造成什么影响。在光栅处理阶段,必须利用这些数据判断灯光对每个
像素造成的影响。目前可利用三种流行的技术完成顶点照明数据向像素照明数
据的转换,分别是平面着色(Flat Shading)、高洛德着色(Gouraud
Shading)以及补色着色(Phong Shading)。平面着色最简单,速度也最快,
特别适合用它处理盒状物件。对图像进行了平面着色以后,每个多边形只能分
配到一种颜色,代表物件那一部分的状态。为完成平面着色,只需将照明模型
应用于多边形表面的某个点即可。这儿的“照明模型”是指一个特殊的数学公
式,它同时考虑到了3D物件相对于光源的方位,以及采用的是何种类型的表
面。因此,平面着色的结果是一个浓淡不均的“斑驳”表面。
高洛德着色是目前最常用的一种着色方法,它比平面着色逼真得多。照明模
型应用于多边形的每一个顶点。结果产生的颜色(遵守照明公式)均匀分布于
多边形的表面。这样做出来的阴影显得非常光滑和真实。
补色着色模型甚至比高洛德着色还要复杂。尽管得到的结果经常都差不多,
但补色着色对镜面反光有特别强的表现能力。“镜面反光”是指光线反射离开
一个表面。这类反射尤其在金属或塑料表面上有非常生动的效果。之所以补色
着色能有如此逼真的效果是因为它为特件上的每一个点计算了通过物件表面的
总的光强,这样每一个像素都将在接收光总量的基础上表现出本色。(待续)

                                        摘自<<微型计算机>>

--
※ 修改:·bily 於 Dec 20 13:02:43 修改本文·[FROM: 192.168.28.220]
※ 转载:·BBS 荔园晨风站 bbs.szu.edu.cn·[FROM: 192.168.28.220]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店