分享

游戏中的高级图形技术

 googo 2010-07-17

6

游戏中的高级图形技术

 

 

 

 

游 戏场景中的实时画面生成取决于两方面:算法本身的效率和图形硬件的处理能力。随着图形硬件和CPU的快速发展,渲染速度越来越高,随之而来的是游戏场景的复杂度急剧增 长。本章从实用性和效率出发,介绍三维游戏编程中几类高级图形编程技术,包括高级纹理映射、BillboardImpostor、阴影生成、域深、粒子系统、L系统,以及各类三维游戏 中常见的自然场景的特效生成算法,如树、云、雾、烟、爆炸、光晕等。

6.1  纹理映射

传 统的几何造型技术只能表示景物的宏观形状,而无法有效地描述景物表面的微观细节,但恰恰是这些细微特征极大地影响着景物的视觉效果。真实感图形绘制技术利 用纹理图像来描述景物表面各点处的反射属性,成功模拟出景物表面的丰富纹理细节。纹理映射技术以纹理图像作为输入,过定义纹理物体之关系,将图像映射到简单景物几何形态上合成出具有真实感的纹、图细微结构。在不同视点和视线方向下景物表面的绘制过程实际上是纹理图像在取景变换后,在简单景物几何上的重投影变形的过程。

简单地说,物体表面的纹理就是附着在物体表面的外观图像。纹理在计算机中 的表示是一张n维的规则图像(n可为1234,最常用的是二维)。纹理映射指的是给定一个物体,依据某些图像和映射函数来决定物体外观属性的过程。由于图像像 贴纸一样附着在物体表面,因此纹理映射也叫贴图。图6-1显示了一个简单的二维木质纹理及其映射过程。

6-1  二维木质纹理映射

纹理射大体上可分为两类:一类用于改变物体面的图颜色;一类用来改变物体面的几何属性(如利用法量扰动以凹凸的效果)。例如,在室内游戏中,墙壁的花纹、地面凹凸不平的几何形状都可以利用纹理映射实现。与基于多边形的场景绘制方式相比,

6.1.1  纹理映射的基本原理

在 纹理映射的过程中,物体和图像是纹理映射的两个操作对象,映射函数建立物体和图像的逐点对应关系,而纹理映射的基本功能则是根据映射函数将物体上每个点找 到图像上对应点,并将对应点的颜色值赋给物体上的点。简单的一维纹理可以用来模拟等高线或轮廓线;二维纹理最为常用,其坐标一般用(u, v)表示;三维纹理坐标(u, v, w)既可以体纹理,也可以用第三 个分量表示沿投射方向的深度。

1.纹理映射的基本步骤

纹理映射可分为5个步骤。首先,物体上的某个点是纹理映射的起点。一般来讲,这个点定义在 物体局部空间,使得当物体方位改变时,纹理相应发生改变。由于纹理是一个规则的图像,因此从不规则的三维物体空间变换到纹理所在的规一化空间需要一个映 射。这个映射称为参数化,即纹理映射的第二个步骤。例如,二维纹理的规一化空间是[1, 0]×[1, 0],纹理上任意一点在规一化空间中的坐标就叫纹理坐标。第三步,从参数化空 间变换到图像对应点的位置,并取出对应点的颜色值。第四步是可选的,即取出的值可能会经过某些变换计算。最后是将取出的值根据给定的纹理融合函数,修改曲 面的颜色属性。下面将详细描述纹理映射技术在游戏编程中需要注意的原理性知识。

2.纹理映射函数生成

纹理射的区通常是三空间曲面,计算任意空间曲面与纹理域的对应关系本质上是一个参数化的过程。纹理映射函数的选取,或者说物体表面纹理坐标的生成,是纹理射的一个最基本的问题。如果选择了不好的纹理映射函数,纹理在物体表面上会出现扭曲、变形的效果。从数学的角度看,良好的映射 函数通常是保角映射或保面积映射。

平面:平面情形相对简单,可将其旋转至与某个坐标平面重合,于是与图像 域的对应关系变得相当简单。

数学曲面:对于具有数学表达式的曲面,可以直接选取映射函数。在3ds MAX等造型软件中,常用的映射函数有球面映射、圆柱映射、 平面映射、立方体等,分别对应某个参数化方法,具体映射方法将在6.1.4节中重点描述。

利用物体表面属性:物体表面的法向、参数曲面自身参数、视线方向等任何 与物体表面有关的属性都可以用来计算物体的纹理坐标。

过程式纹理:另外一类纹理坐标生成方式,好采用噪声函数等技术,自动合 成出三维纹理和对应的纹理坐标,详见6.3节。

3.纹理坐标插值模式

如上所述,游戏编程一般只在顶点上设置纹理坐标。从顶点纹理坐标计算出每 个像素的纹理坐标的最常用方式是在每个三角形的扫描线上线性插值,即纹理坐标uv的生成和Gouraud渲染插值颜色的生成方式一样。由于实现简单(只需要逐扫描线相加delta-udelta-v),因此在图形加速器中被 广泛采用。然而,认为纹理坐标uv在扫描线上是线性变化则是不正确的,当多边形的法向与视线接近于垂直时这个问题更为严重。解决的办法是认为u/zv/z1/z在扫描线上线性变化,这就是纹理映射中的透视映射模式。软件实现逐个像素 的除法(除以z)是一个非常耗时的操作,因此大多数游戏编程中使用了一些小技巧。例如,Quake游戏中每16个像素做一次除法,在这之间则直接对纹理坐标做线性插值。当前的主流显卡 都支持透视纹理映射模式。

4.纹理取址方式

在纹理映射的第三步中,从规一化的参数空间映射到纹理的图像空间,提高了 纹理映射的自由度。例如,可以将参数空间映射到纹理的某一部分,也可以应用矩阵变换对纹理图像实现旋转、平移、缩放等操作。另外一个重要的操作是考虑纹理 在物体表面的重复模式,即纹理坐标超出 [1,0] 范围时可采取的操作。一个简单的例子是墙壁上的砖块纹理。在OpenGL中这种情形叫纹理弯曲方式,而Direct3D中则称之为纹理取址方式。通常,物体表面的纹理坐标位于[0,1]区间。但是为了获得某些特效,纹理坐标可能会超出这个范围。图形引擎中 常用的4类纹理取址模式是:重复(wrap)、镜像(mirror)、截断(clamp)和重复边界颜色(border color),如图6-2所示。

重复:纹理对超出范围部分进行重复。如果指定的纹理坐标是u,那么重复后的纹理坐标是u=u±1.0。例如, 纹理坐标 (1.3, –0.4) 将采样 (0.3, 0.6) 处的值。

镜像:位于边界外的部分沿边界做镜像。例如,纹理坐标 (1.3, –0.4) 将采样 (0.7, 0.4)处的值。

截断:将超越 边界的值截断到最近的边界。例如,纹理坐标 (1.3, –0.4) 将采样 (1.0, 0.0)处的值。

重复边界颜 色:设置所有超越边界的纹素的值为给定的边界颜色。

      

a)重复                b)镜像              c)截断         d)重复边界颜色

6-2  纹理取址模式示意图(图片来源:DirectX 9.0 SDK

5.纹理融合模式

取出的纹理值可以经过任意的数值计算,并与物体经过光照明计算的颜色,或 保存在帧缓冲器中的颜色进行融合计算。常用的融合函数有以下3类。

¤    替代:纹理值替代目标值。

¤    渐变:与替代的区别在于,如果打开alpha通道,那么将纹理颜色与目标颜色值进行融合,但alpha值保持不变。

¤    相乘:颜色纹理与目标颜色值相乘。

6.纹理映射中的反走样技术

纹理映射中经常碰到的问题是纹理走样问题,一般包括:Moire效果、锯齿、斑块、模糊、水纹、亮点等。MIPMultum In Parvo,意思是在一个小的地方有很多东西)映射技术是图形学中最常用的纹理反走样技术。它试图解决当相机远离纹理所在位置时出现的走 样现象,基本思路是保证像素尺寸和纹素尺寸大致相等。因此,MIP映射技术在内存中保存纹理的一系列不同分辨率的版本,最高版本是原始纹理,后续版本的尺寸是前一版本的四分之一。例如,原始纹理精度是256×256,那么接下来的MIP纹理的尺寸分别是128×12864×64,…,1×1,如图6-3所示。纹理的MIP层次是在Direct3D设备创建纹理(CreateTexture()函数)时自动完成。如果参数为1,则仅创建原始纹理,如果为0,则生成直到1×1的全部层次。

6-3  MIPMAP纹理(图片来源:DirectX 9.0 SDK

 

7.纹理坐标变换

纹理坐标变换是指在纹理映射之前,对纹理坐标进行投影或矩阵变换。在OpenGLDirect3D中,每个纹理阶段都可以定义一个4×4的纹理变换矩阵。最常用的纹理变换就是投影纹理(projective texture),另外一个例子是绘制平移运动的水波纹理。 若每帧在u方 向移动du, 那么纹理变换矩阵可设置为

当纹理坐标超过了有效范围时,可以根据指定的纹理重复模式,将纹理坐标变 到有效范围后,再实行纹理坐标变换。

 

6.1.2  凹凸纹理映射

在 纹理映射中,除了在相机距离物体很远时产生走样外(可采用MIPMAP技术解决),当相机非常靠近物体时也会发生问题,即由于纹理采样本身的不足,一个纹素投影到多个像素。如果纹理滤波是点采样模 式,结果将非常古怪和丑陋。如果采用双线性滤波或者三线性滤波,则造成严重的模糊。几乎在所有的第一人称视角游戏中,地面的纹理在视点很近时就会产生这种 现象。从图形学的角度看,现在几乎没有办法解决这个问题。

一个很直观的办法是使用更精细、尺寸更大的纹理。这既带来了显存的负担,也没有从根本上解决问题,即当视点更靠近物体时,方法 仍将失效。从信号处理的角度看,大多数纹理保存的是低频信号,其有效范围不高。但是,真实世界中还存在高频信息,即当视点靠近人眼时注意到的细节,如凹凸 纹理、裂缝、粗砂状、颗粒状纹理等。很明显,利用纯几何方式对它们进行建模将既费事,也得不偿失。它们实际上可以被看做某种纹理模式,重复地贴在物体表 面,将它们与低频的基纹理结合,就可以消除视点靠近时产生的模糊效应。本节和6.1.3节将介绍这类模拟物体表面细节的技术,即凹凸纹理映射和位移映射技术。

凹 凸纹理记录了物体表面小尺度的高度场变化,即物体表面相邻点的高度的差分。每个点的差分在绘制时改变了曲面的法向,采用多步纹理映射模式进行光照明计算。

凹凸映射通常在每个像素层次上扰动法向向量,并用纹理作为输入,记录扰动 值。在图形引擎中,出于对效率的考虑,也可以在顶点基础上扰动法向量。图6-5是一个简单的凹凸映射例子。

6-5  凹凸纹理映射示意图

1.浮雕型凹凸映射

浮雕型凹凸映射与最早的凹凸映射类似,所不同的在于浮雕型凹凸映射直接计 算光亮度,而不是得到用于像素级光照计算中的扰动过的法向向量。因此,浮雕型凹凸映射不允许运用任何光照明模型。进行浮雕型凹凸映射的第一步是预处理高度 图,生成两个辅助图像。其中,第一个图像的光亮度是高度图的一半,第二个图像的光亮度是高度图的反色图的一半。绘制时综合3个图像,利用多步纹理技术完成。其中,第一步绘制半亮度图,第二步绘制反 色半亮度图,但是纹理坐标朝光源方向稍微扰动,第一步和第二步的融合操作是加法。第三步将结果和顶点光照明计算结果与纹理映射做乘积型融合操作。图6-6显示了前两步的绘制过程。

6-6  浮雕型凹凸纹理映射示意图

不难发现,由于没有使用扰动的法向量,因此浮雕型凹凸映射只能模拟漫射光 效果。它的好处在于不需要任何特殊的硬件支持,在标准的OpenGL 1.1中使用多步纹理映射功能就可以完成。

2.环境凹凸纹理映射

环境凹凸纹理映射(Environment Map Bump MappingEMBM)涉及两个纹理。一个称为环境映射,负责物体表面的颜色,一个称为凹凸映 射,负责产生物体表面凹凸不平的效果。它的基本原理是利用凹凸纹理扰动环境映射的纹理坐标。凹凸纹理的每个纹素有两个分量(du, dv),分别记录了纹理坐标(u, v)的位移。在应用凹凸纹理后,像素级的环境 映射的纹理坐标从(u, v)变为(u+du, v+dv)。环境映射既可以是视点相关的,也可以是视点无关的,而且可以用来模拟 漫射和镜面光效果。从视觉上看,应用环境凹凸纹理映射与扰动法向没有大的效果差别。如图6-7(左)所示,上图是凹凸纹理,下图是环境纹理,右图为环境凹凸纹理映射结 果。

同传统的凹凸纹理映射一样,此处的凹凸纹理也是从灰度级的高度图计算而 得。总体而言,高度值越大,记录在凹凸纹理中的纹理坐标位移越大。注意到位移的符号为正、负皆可,因此在图形硬件中实现时必须先将位移的范围从[-1, 1]变到[0, 255]

6-7  环境凹凸纹理映射

环境凹凸纹理映射也可以适用于环境映射最常见的功能,即环境反射。从这个 意义上说,将不同的信息编码在环境纹理中,可以用来模拟不同的效果。

3.法向映射

法向映射(Normal mapping)是凹凸映射系列中最常用的技术。它的输入是一个法向图,记录了扰动后的 曲面法向。本质上法向图的数据来源也是高度图。法向的xyz三个分量分别被保存在RGB三个颜色通道中。

6-8的左图是一帧高度图,右图是计算出来的法向图。法向的xyz三个分量从[-1, 1]空间变到[0, 255]。法向由高度图变换而得,因此定义在高度图所在的空间。为了在光照明计算 时正确使用法向量,必须将法向变换到着色点处的局部空间,即切平面空间。与前面介绍的在每个像素上计算局部坐标系不同,一种更为有效的方式是在顶点上预先 计算切向和副法向向量,然后在顶点上将光源向量变换到顶点处的切向空间,光栅化过程将产生每个像素上的光源向量。对这个向量规一化后,它实际上位于切向空 间,结合扰动后的法向量,就可以在切向空间中进行正确的光照明计算。图6-9是一个基于像素级的法向映射技术的游戏场景。

6-8  将高度图转换为法向图

6-9  基于像素级法向映射技术的游戏场景

 

 

6.1.3  环境纹理映射

反射效果能提高游戏场景的真实 感,但是在图形硬件中不能直接支持精确的反射计算,而且比较耗时。环境映射是一个有效地模拟场景的反射现象的加速技术。取景物的中心作为固定视点来观察整个场景,并将周围场景的二维图像记录 在以该点为中心的某种简单可以参数化的几何物体(如球面、立方体和柱面),以全景图像的方式提供了其中心视点处的场景描述。在绘制时,环境纹理映射不需要 发出二级反射光线,而是直接从环境纹理中计算,即物体表面各点处的光亮度的决于入射方向对应的环境纹理。

球面环境映射是环境映射的一 种,它所展示的图像等价于以平行投 影方式观察一个全反射球面的效果。由于将场景图像映射到球面,被映射的物体的每个顶点必须投影到球面参数化的(u, v)坐标上,进而采样球面环境纹理。球面环境纹理的例子如图6-14(左下)所示。反射光线向场景发射后所交的第一个点的光亮度记录在球面环境纹理上。

生成镜面球面环境映射的第一种方法是实拍图像,这种方法的缺点是相机本身也出现在反射纹理中。第二种方法是使用一个鱼眼镜头直接生成360°180°全 角图像。

球面环境映射效果图(左上)、球面环境纹理 (左下)、球面环境映射的反射光线计算示意(右)

6-14  球面环境映射的反射

除了镜面反射外,球面环境映射还可以模拟与物体表面有关的其他效果,如Phong模型和折射。球面环境映射的理想状况是相机和环境物体位于无穷远处。如果物体具有自身反射性质(它不是凸物体),或者相机与其他物体不在无穷远处时,球面 映射理论上是不正确的,这是因为球面环境纹理在物体中心点上建立却试图模拟物体的整个表面的反射效果。球面环境映射的另一个严重缺陷是视点依 赖性,即只适用于一个方向和一个相机。纹理映射到球面后会产生伸缩或变形效果,当视点移动较大距离时,必须重新计算球面环境纹理,而底层图形API逐帧计算球面环境纹理的效率不高。此外,生成球面纹理坐标采用的球面参数化不 是保面积变换,因此在多边形平面上对球面纹理坐标进行线性插值并不符合球面的特性。由于球面环境映射的这些缺陷,尽管绝大多数显卡支持球面环境映射,它的 实用性仍然大打折扣。

立方体环境映射 使用立方体的六个面作为保存环境纹理的几何体,一个立方体纹理由6张不同纹理组成,每张 纹理对应立方体的一个面,这6个面分别是:+X方向(+Y, Z)X方向(+Y, +Z)+Y方向(Z, X)Y方向(+Z, X)+Z方向(+Y, +X)Z方向(+Y, +X)。立方体纹理的生成远 比球面环境映射简单,只需要在立方体的中心设置一个视野为90o的相机,分别朝6个方向绘制场景。这些图像能在底层图形API中实时生成,而且不 会导致变形,当视点绕着物体移动时,它能始终正确地反射出场景的正确位置。此外,立方体纹理允许在各个平面上进行线性插值,因此既没有图像变形,也不会导 致奇异点。图6-15(左)是立方体纹理,而右图是它的6个面的展开。

6-15  立方体纹理概念图(左)及展开的六个立方体 面(右)

立方体环境映射并不限于模拟精确的反射,也可以模拟镜面高光、漫反射和Phong光照明模型。如果使用低分辨率的纹理,可以模拟粗糙的物体表面。它的局 限性来源于它的预处理方式,当光源或场景物体的遮挡关系改变后必须重新生成。

立方体环境映射能解决球面映射的问题,可完全在Direct3DOpenGL中实现,已经成为业界标准。游戏编程人员们利用立方体环境映射方便地创造 反射和镜面光照效果,生成活泼、有趣的沉浸感强的三维游戏场景,例如赛车游戏的车身上闪亮的环境光效果。

6.1.6  高级纹理映射技术总结

凹 凸纹理映射的主要思想是扰动用于光照明计算的物体表面法向。Blinn提出的早期凹凸纹理映射使用高度图在线计算法向,对图形硬件的处理能力提出了很高的要求。两个改进的算法浮雕型凹凸纹理映射和 环境凹凸纹理映射并没有真正扰动法向,因此适用范围不广。法向映射技术真正给出了扰动的法向计算方式,可通过预计算的方式模拟出任意光照明模型,是游戏引 擎中实现凹凸映射的标准算法。细节纹理技术用较少的几何数据替代高度复杂的物体表面细节,大幅提高了绘制效率。水平线凹凸纹理映射则进一步增加了物体表面 的深度信息。

与凹凸纹理映射不同的是,位移纹理映射既能模拟凹凸的表面细节,还能模拟 微观的几何扰动,缺点是图形硬件不支持逐像素的位移映射,因而只能采用自适应网格剖分的折衷方案。

与凹凸纹理映射和位移纹理映射不同,环境纹理映射的目标是模拟某个物体的 周围环境。球面环境映射是一个非均匀映射,因 而会导致图像扭曲变形现象,这在两极尤为严重。此外,球面投影缺乏一种适合于计算机存储的表示方法。尽管立方体环境映射克服了球面环境映射的一些缺陷,但 对非计算机生成的图像,实拍获得立方体环境映射是非常困难的。这是因为立方体环境映射是由6幅广角为90°的画面构成,它们之间的拼接要求精确的摄像机定位技术。由于平面投影也 是非均匀的,在立方体的边界和角点处仍存在采样过多的问题。

光照映射则模拟光源对物体表面光亮度的影响,极大地节省了在线的光照明计 算,是三维游戏图形引擎中不可或缺的技术。表6-4比较了上述几类高级纹理映射技术的异同。

6-17比较了常规纹理映射、凹凸纹理映射和位移映射的绘制效果。其中,凹凸纹理 是一幅灰度图,灰度值低对应地球的低海拔地区。应用凹凸纹理映射产生了凹凸不平的表面外观,但是轮廓仍然是光滑的球面。位移映射则产生了真正的物体表面几 何细节和轮廓。

6-4  各类纹理映射技术的 特点比较

 

 

 

改变几何

 

图形硬件实现

实 用 性

常规纹理映射

直接支持

凹凸纹理映射

可以

方便

位移映射

可以

可以

困难

球面环境映射

可以

可以

中等

立方体环境映射

可以

直接支持

光照映射

可以

可以

可以

方便

a)纹理映射                       b)凹凸映射                   c)位移映射

d)纹理映射线框表示                e)凹凸映射线框表示          f)位移映射线框表示

g)常规纹理                                  h)凹凸纹理

6-17  常规纹理映射、凹凸映射、位移映射比较(图 片来源:Direct3D 9.0 SDK

6.2  混合式图像和几何绘制

传 统的图形绘制技术是面向场景几何的,涉及到场景的建模、消隐和光亮度计算,尽管通过第5章的可见性预计算技术及场景几何简化技术可大大减少需处理的景物面片数 目,但对高度复杂的场景,现有的图形硬件仍无法实时绘制简化后的游戏场景。基于图像的建模与绘制技术Image based modeling and renderingIBMR就 是为实现这一目标而设计的一系列方法。IBMR基 于一些预置的图像来生成不同视点处的场景画面,有着鲜明的特点:

¤    图形绘制的计算量不取决于场景复杂性,而与所需屏幕分辨率有关。

¤    预先存储的图像既可以是计算机合成的,也可以是实际拍摄的画面,两者可以混合使用,从而可能获取很高的真实感。

在 三维游戏引擎中,最为实用的IBMR技术当属混合式图像和几何绘制技术,它综合利用简化的场景几何和图像模拟复杂场景物体的外观与形状。与纯粹基于图像 的建模与绘制技术(如全景图、同心拼图、光场函数等)相比,混合式图像和几何绘制技术存在两个优点:

¤    利用图像快速模拟出物体的表面细节和外观,从而比纯几何绘制更高效。

¤    利用简化的几何方式模拟不同视点下的物体形状,从而避免纯图像方法的大 数据量。

本 节从面向游戏开发的实用性出发,描述三维游戏引擎中的简单然而高效的几类基于图像的建模与绘制技术,包括:光晕、SpriteBillboardImpostor

6.2.1  光晕

光 晕是相机在亮光的直接照射下所引起的现象,通常它由一个光环和淡淡的日冕组成。由于各种光的波长不同,当它们照到透镜上时会发生折射,产生光环。日光的光 环看起来像一枚戒指,它的外边缘是红色的,内边缘是紫色的。日冕在透镜中分布不均匀,从中心点向四周辐射。此外,由于光线在透镜的内部发生反射和折射,所 以会产生二次效应。例如,照相机的隔膜片可以生成六边形的图案。

根 据光学原理计算多个透镜的光晕效果显然得不偿失。游戏中通常采用一种简单的二维图像技巧,它的基本思路是把光晕分解为两类组成元素,其一是光晕的主要部 分,它控制光晕的形状,可大致分为4类,如图6-18所示。

        

a)放射型             b)环型              c)十字型            d)光束型          e)四者的合成

6-18  光晕形状的构成

6-20是三个典型的光晕例子。

    

6-19  光晕实例

 

6.2.2  精灵图元的绘制

基 于图像绘制的最简单图元是SpriteSprite的名称来源是早期的二维游戏,当时这种动画技术经常用来模拟神话世界的精 灵(Sprite),其后就用Sprite来命名,中文名是精灵动画技术。在二维游戏中,Sprite是指一幅能 在屏幕上移动的图像。简单的Sprite图像和屏幕上的像素一一对应。Sprite的显示有许多 加速算法,如将它们预编译成一张像素表,可以避免测试每个像素的透明度。稍微复杂的Sprite技术能缩放图像,如一个10×10像素的Sprite通过简单的复制可以转换成20×2030×30Sprite。通过添加不同分辨率的Sprites,可以使不同焦距之间的转换更加自然。显示连续运动状态的Sprite可以生成物 体动画效果,这就是精灵动画。对于不同的观察角度,可以使用不同的Sprite

利 用模板缓冲器可以完成精灵动画的溶解与清除。它的功能是锁定图像的某块区域,获得幻灯片之间过渡的效果,如从左到右清除老的源图像,显示新的目标图像。算 法首先构建一系列形状逐渐过渡的辅助多边形(从空区域到覆盖整个窗口)。辅助多边形并不产生任何绘制结果(设置alpha0alpha测试结果大于0时 则通过),只是将它覆盖像素的模板值变为1。 绘制时,初始化模板缓冲器为0。在模板值为0的区域绘制源图像(即没被辅助多边形覆盖的区域),在模板值为1的地方绘制目标图像。随着辅助多边形的变化,即可完成源图像到目标图像 的溶解效果。

6.2.3  Billboard技术

利 用简单的纹理映射几何绘制手段替代复杂的几何绘制能增加场景真实感和效率。Billboard技术采用一个带有纹理的四边形,其纹理图像为该Billboard所代表的物体的图像,即用带有该物体图像的长方形,代替该物体生成该物 体的图形画面。Billboard放置于所代 表物体的位置中心,并随相机的运动而变化,始终面对用户。将Billboard技术与alpha纹理和动画技术结合,可以模拟很多自然界现象,如树、烟、火、爆炸、云等。图6-21显示了一个用Billboard技术表示的森林场景。

6-21  Billboard技术表示的森林场景(图片来源:Direct3D 9.0 SDK

早期的Billboard的图像是预先得到的,且只针对具有一定对称性的物体。4种最常用的Billboard几何表示方法如图6-22所示。第13种方法允许视点在与物体高度相同的区域内变化。当视点改变时,Billboard四边形绕对称轴旋转,如果存在多个四边形(第23种方法),需要融合它们的绘制结果。第4种方法额外生成了顶部和底部的四边形,允许视点位于物体上方或下方,这在 飞行器模拟类游戏中广泛使用。除这4种表示方 法外,对于对称 性不强的物体,可以使用视点依赖的Billboard技术,分为两步进行:第一步是预处理阶 段,对于每个可能的视线方向计算一个物体的图 像;第二步是绘制阶段,当视线方向给定时,选择最近的两个视点,取出它们对应的纹理并它进行插值和纹理融合。

6-22  4种常用的Billboard几何表示(虚线代表对称轴)

Billboard四边形法向和向上向量的不同设置方式对应着不同的Billboard技术。

1.平行屏幕的Billboard技术

平行屏幕的Billboard技术是最常用也是最经典的Billboard方法,也就是说,Billboard四边形的法向始终重合于视线方向。而向上的方向就是相机的向上方向。平行 屏幕的Billboard技术可以用来显示注 释文字,这也正是Billboard(公告 牌)技术名称的由来平行屏幕的Billboard技术经常用于显示圆形物体和粒子。

2.平行物体的Billboard技术

由 于圆形物体的对称性,当相机绕视线方向旋转时, Billboard的外观始终保持一致。对于其他形状的物 体,采用平行屏幕的方式并不是很合适。此时可定义物体的向上方向为相机的向上方向,而法向仍平行于视线方向。

3.视点朝向的Billboard技术

在 前面两种Billboard方法中,法向始终 平行视线方向,即场景所有的Billboard使 用同一个旋转矩阵,这样无法模拟透视投影的变形效果。当相机的视角和真实人眼的视角相一致时,或视角和Billboard都较小的时候,变形的效果可以忽略不计,此时Billboard的法向可以取为平行视线方向。反之,Billboard的法向应该取为从视点到Billboard中心的连线,这就是视点朝向的Billboard技术,如图6-24所示。

6-24  平行屏幕的Billboard技术和视点朝向的Billboard技术

6.2.4  Impostor技术

BillboardSprite技术都采用简单的几何加纹理映射来完成场景的模拟。它们的缺陷在于过于 简单的几何和一成不变的纹理,使得相机靠近物体时出现明显的失真。为了弥补这些缺憾,Impostor(替身图)技术巧妙利用游戏每帧间的连续性,采用二维图像和真实的三维 模型的投影替代真正的物体几何特征。

6.3  过程式建模技术

三 维游戏中对复杂自然场景的模拟有两个终极目标。其一是物体空间上的高度真实感,地绘制白云山川河流草树等,使得玩家身临,在到游戏画面时如 同置身于真正的大然;其二是游戏的实时性,这是保证游戏流畅的必要条件。为了获得游戏运行 时的时空一致性,三维游戏引擎中的复杂自然场景特效的生成必须采用许多精致的技巧。本节按照景物的分类重点介绍下面三类技术:植被的构造和绘制技术,雾、火焰的构造和绘制技术,的模和绘制技术。

6.3.1  粒子系统

粒 子系统(particle system)是一系列独立个体的集合,这些独立个体就称为 粒子,它们以一定的物理规律和生命周期在场景中运动。从物理上看,粒子可以抽象为空间中的一个点,这个点拥有某些属性,并随时间运动。通常,粒子的属性包 括位置、速度、加速度、能量、方向等。粒子的运动具有随机性,在粒子运动过程中,粒子属性被显示、修改和更新。基于粒子系统的建模方法的基本思想是采用许 多形状简单的微小粒子(如点、小立方体、小球等)作为基本元素,来表示自然界中不规则的模糊景物。粒子的创建、消失和运动轨迹受不同的因素影响,如粒子自身的冲力、重力、粒子与其他物体的碰撞等。 粒子与其他物体的碰撞检测需要耗费大量的时间,一般不予考虑。由粒子系统表示的物体,要么是给定时刻粒子的位置,如火、雪、烟,要么是粒子的一部分运动轨迹,如草和树。通用的模拟粒子系统运行流程见例程6-1

游戏场景中的很多现象和物体都可以用粒子系统来模拟,包括烟、火焰、爆 炸、血溅等。游戏引擎中,通常都设计一个专门的模块,即粒子系统,以完成对它们的模拟。在著名的星际迷航游戏中,就设计了将近400个粒子系统,总计75万个。由于粒子系统包含大量的运动的小粒子,出于对效率的考虑,必须综合 平衡粒子系统的效率、速度和可扩充性。在设计粒子系统时,必须避免粒子系统生成大量的多边形。

粒子系统的绘制有不同的方式。例如,在游戏场景中存在多个血迹系统,因此需要绘制的粒子状态有血的喷射、血的溅射、血流和血喷 溅到镜头等4种,每种都需要不同的粒子绘制方 式。血的喷射模拟的是血在空气中飞散的过程,当血碰到墙壁和地板时,粒子变成血的溅射效果。当游戏的角色躺在地板上气绝时,地板上的血的粒子系统就采用血 流的模式。

减 少粒子系统中内存操作(分配和释放)的一个技巧是当一个粒子消亡后,并不从内存中释放它,而是设置一个可重新初始化的标记。当所有的粒子被设置为消亡后, 再一次性释放整个粒子系统的内存。当一个新的粒子进入后,必须自动完成该粒子的初始化过程。除此之外,还将考虑当粒子系统的行为超过了预先设定的模式时, 可能采取的方法。为了支持粒子系统的可配置性,需要生成一个手工的粒子系统,允许应用程序在每帧更新粒子的属性。最后一个必须考虑的特征是如何将粒子系统 和游戏引擎无缝地连接起来。例如,首先需要将烟系统和场景中的雪茄关联,雪茄又将和抽烟的人物关联。

 

6.3.2  L-系统与植被的模拟

游 戏场景中植被的模拟需要考虑两方面,一是植被的形态,二是植被的外观。多边形表示是游戏场景中最常用的方法,对于可以由几何曲面定义的物体,尤 其是它在屏幕上的投影面积比较大(如近距离阔叶树)时,通常可用多边形进行描述。然而,复杂的自然场景通常包含成千上万株植物,一棵树不同形态、不同方向 的枝条上有数以万计的树叶。尽管基于多边形表示的植被绘制可以采用各种成熟的 真实感图形技术,如Z-buffer深度消隐、光线跟踪方法、光能辐射度方法等,但无法达到游戏的实时性要 求,因此,多边形表示的方法适 用于中、低等复杂度的场景。而对于复杂的游戏场景,必须根据植物形态学做适当的简化和仿真,从而获得利于绘制的植被模型。在游戏引擎中,常用的植被模拟技术有Billboard、粒 子系统和分形系统等三类。三者的特点各异,用法不同。基于Billboard技术的植被模型最为简单有效,因此被广泛采用。基于粒子系统的方法能模拟 自然界植被动态的效果。而分形系统主要关注的是植被的形态,由分形系统生成的植被模型最终需要采用多边形绘制、粒子系统或者Billboard方法进 行绘制法。

子系所绘制的森林是计算机绘制然景物的,它用 圆台状粒子组成植物的枝条,用小球状或小立方体粒子组成树叶,只要建立了这些粒子组合或排列的模型,就可以实现对植物形态结构的模拟,粒子在生命周期中的 变化就会反映出植物生长、发育到最终消亡的过程。同时在粒子系统中引入随机变量以产生必要的变化,并选取一些决定性的参数来表达植物的大致形态。为了模拟一棵树,通常需要数十 个参数控制分枝的角度和枝干的长度。粒子系统的一个主要优点是由于其基本组成元素是点、线等易于变换和绘制的图元。但是,粒子系统的设计是一个反复试验和 修改的过程,而且子系的树造型有比较明显的痕迹可提供的真实感有限。

利用分形植物形态结构的分形性质(结构自相似性)产生植物图形或图像的方 法有IFS(迭代函数系统)法、DLA(受限扩散凝聚)模型法和L系统等。由于L系统最为实用,所以我们将在后面重点介绍L系统。

1)迭代函数系统

IFSIterated Function System,迭代函数系统)由一组能满足一定条件的映射函数Wi(如收缩的仿射变换)及一组变换发生的概率Pi定义:IFSi={(wi, pi), i=1, 2, , n}。利用IFS生成植物图像的过程是对初始植物图像按照已知概率选择函数而实施的一种迭 代变换。

2)受限扩散凝聚模型

DLADiffusion-Limited Aggregation,受限扩散凝聚)模型的基本思路是: 在一个平面网格上选定一个静止的微粒作为种子,然后在距种子较远的格点上产生一个微粒,令微粒沿网格上下左右诸方向随机行走。如果该微粒在行走过程中与种 子相碰,就凝聚到种子上;如果微粒走到边界上,就被边界吸收而消失。如此重复上述步骤,就会以种子为中心形成一个不断增长的凝聚集团。利用DLA和其修改的模型,可以对部分植物的形态结构进行计算机模拟,如植物根系 的生长过程模拟和海藻类植物的形态结构模拟等。

3L系统

植被以树枝为基本元素,植被模型的空间结构分为拓扑结构和几何描述两部 分,拓扑结构表示树枝之间的层次关系。通过层次关系把树枝组织在一起形成一棵完整的植物,其中每一树枝都可以有多个子树枝,也可以没有子树枝。除根树枝 外,每一树枝都有唯一的母树枝。植物的几何结构则定义树枝的空间形状。从宏观上看,植物在其形态结构的组成上有一个共同点,即植物都是由主干、分枝、树叶 这些基元组成的。每个基元的形成又遵守着一个同样的方式,即由主干上分出第一层分枝,再由第一层分枝上生出第二层分枝,这样一层层地分下去,直至树叶。对 植被的生长模拟可提供母树枝生长子树枝的方法,由参数控制植物子树枝的生长,这些参数包括子树枝与母树枝的夹角、子树枝长度收缩比例、子树枝半径收缩比 例、子树枝相对母树枝的空间旋转角以及子树枝的生长模式。对子树枝的生长还需要引入随机控制变量,使子树枝不显得呆板。

在采用“龟解释”文法 串时,可根据不同植物的特点构造其枝与叶的基本几何造型。对于枝的具体构造可按照两条准则进行:分枝的粗细是随分枝节点到主枝节点的距离的增加而减少;分 枝的长度相对于主枝的长度按一定的比例关系缩放。叶的构造可根据植物特点用少量多边形加以模拟。

 


 

6.4  场景光影特效模拟

本节介绍三维游戏场景中增强真实感的最重要的三类特效,包括阴影、雾、运 动模糊和域深。这些特效的最大作用是增加场景的层次感。其中,阴影模拟一直是三维游戏中的难点,这里将主要阐述三类阴影生成算法,包括平面投影法、阴影图 法和阴影体法。

6.4.1  阴影

阴 影是增加场景真实感的一种重要手段,它能暗示 用户场景中物体的遮挡关系、深度提示和光源的数目及位置,如图6-29所示。产生阴影的 物体叫遮挡体,表面不被光源照射的物体称为被遮挡体。阴影可分为全阴影区域 和软影(伪影)区域两部分。全阴影区域是不能被任何光源照见的区域,伪影是被部分光源照射的区域。伪影形成了全阴影区域和全光照区域的光滑过渡,它实际上 反应了光源几何和被光照物体的函数关系。不难知道,场景中如果只有一个点光源,就不会产生伪影。由于阴影区域通常有着对比度高的边界,如果阴影绘制时产生 走样现象,会极大地影响场景的逼真程度。注意到图形绘制流程并不直接支持阴影,但是可以采用一些技巧实现不同质量的阴影。阴影的质量由两个因素控制,其一 是阴影物体的复杂性,其二是被遮挡物体的复杂性。由于软件实现阴影无法达到游戏的实时性要求,因此本节只考虑结合图形硬件加速的阴影生成方法。

6-29  阴影带来深度提示

1.平面投影法

平 面投影法最简单的阴影生成算法,其主要思想是将遮挡物体沿光源方向投影变形到被遮 挡的平面上,在平面上作为二维物体绘制,绘制结果直接产生了遮挡物体的阴影。图6-30是算法示意图(图片来源:NVidia公司)

6-30  平面投影法示意(左);平面投影法效果图 (右)

在图形绘制引擎如OpenGL中,实现阴影的方式是将平行或透视投影矩阵设置到建模和相机矩阵,然后使用需要的阴影颜色绘制这 个物体。下面给出从一个方向光源沿z轴将一个物体的阴影投影到xy平面的过程。

正常绘制场景,包括产生阴影的物体

将建模和相机矩 阵设置为单位矩阵后,再乘以一个缩放矩阵,该 矩阵在xyz轴的缩放因子分别是(1.0, 0.0, 1.0)

设置产生阴影物体的其他位置信息。

设置阴影颜色

绘制产生阴影的 物体。

在第⑤步,产生阴影的物体被重复绘制了一次,而第②步设置的矩阵将物体压 平成一个平面阴影。这个方法可以扩充到在平坦的物体上投影阴影,只需要在第二步的矩阵中再添加额外的变换。本质上,这种基于投影的方法在被投影面上融合了 一个共面的阴影多边形。而共面多边形的绘制由于精度的原因,会产生走样。解决办法是将阴影多边形稍微沿被投影面的法向方向平移。而光源的方向可以在第②步 之后调用一个剪切变换进行改变。如果在变换中再加一个透视变换,方向光源就可以变成点光源。

平面投影法存在两个严重的局限性。首先,它无法在非平坦曲面上生成阴影, 也不能在凹平面上生成阴影。对于有多边形组成的物体,尽管可以对每个多边形分别进行阴影计算,但是需要对结果进行多边形裁剪操作。部分情况下可以采用模板 缓冲技术辅助完成裁剪操作,因此可以在比较简单的场景,如房间的一角上利用这个方法计算阴影。第二个问题是如何控制阴影的颜色。由于阴影是产生阴影的物体 的投影,而这些物体的法向已经被投影操作扭曲,因此无法正确地计算阴影的颜色。

由于阴影的生成十分耗费计算资源,因此很多游戏引擎中使用简化的阴影生 成。为达到快速的阴影绘制,在计算阴影区域时,根据物体的包围盒来计算。最简单的阴影生成可使用固定大小的阴影区域来模拟,然后根据物体的三维位置直接进 行垂直投影,从而在二维水平面上快速地生成阴影,如图6-31所示。

6-31  快速平面投影法示意图

快速阴影生成法虽然速度快,实现简单,但效果比较呆板。为了更真实地模拟阴影视觉效果,在阴影生成中还要考虑:一,阴 影随光源的高度变化,产生缩放;二,阴影的位置随光源的照射角度产生变化。

2.阴影图算法

阴影图是一个预计算的纹理,它保留了光源的各发射方向上与场景物体的最近 距离。在绘制时,计算当前视点下的可见部分与光源的距离,并与相应方向上阴影图保留的距离进行比较,如果前者大于后者,则说明可见点与光源之间存在一个遮 挡点,因而位于阴影之中。阴影图技术分为两个步骤。第一步建立光源局部坐标系,并以光源为中心生成立方体,然后以光源为视点,分别以立方体的6个面为成像平面绘制场景。每次绘制时打开深度缓冲功能,以计算各个方向 上最近点的距离。距离越小,说明场景与光源越近。深度缓冲器中记录的值可以保留在立方体纹理中,从而完成阴影图的构造。第二步以视点为中心绘制场景。对于 成像屏幕的每个可见点,将它投影到立方体表面上,并将阴影图的对应位置保留的值与它到光源的距离(称为光源深度)进行比较,判断出它与光源之间的可见性。 图6-33显示了阴影图算法的大致思想,其中 遮挡物体A比被遮挡物体B更靠近光源,因此在阴影图上保留的是A到光源的距离。在场景绘制时,比较B到光源的距离与阴影图保留的值,从而判断出B位于A的阴影区域。在OpenGL中,可以利用投影纹理和OpenGL扩展函数SGIX_shadow()实现阴影图与场景物体的深度比较。Direct3D也提供了类似的函数。

6-33  阴影图算法示意(点画部分表示阴影图)

阴影图算法本质上是一个图像空间的算法,它将场景物体的三维遮挡关系转化 为二维离散的深度比较。阴影图算法的效率由阴影图的分辨率决定,与遮挡物体的场景复杂度无关。静态光源和静态场景的阴影图可以预先计算,并在视点改变时反 复使用。同样,阴影图的分辨率决定了算法的精度,由于图像的离散实质,不可避免地带来走样现象。

上面的阴影图计算考虑的是点光源,因此产生了尖锐和明显的阴影边界。现实生活中不存在完全意义上的点光源,为了模拟软阴影边 界,可以采用抖动光源位置并加权平均每次抖动的结果,可以获得真正的阴影和伪影效果。光源的抖动模式应当是不规则的,这样使得阴影更为自然。对多个独立的 光源也可以采用累积缓冲技术,获得逼真的光影效果。

3.阴影体算法

阴影体方法的核心思想是将阴影看成阴影体与场景中被遮挡物体的交集。所谓 阴影体,是一个虚拟的物体,即连接光源与遮挡物体的顶点向场景延伸所生成的有限或半无穷锥体,如图6-34所示。不同类型的光源生成的阴影体是不同的。对于点光源,边的延伸是点对点 的。对于无限远处的方向光源,所有的轮廓边延伸为无穷远处的一个点。

6-34  阴影体算法示意图(虚线部分为阴影体表面) (左)、茶壶生成的阴影体(右)

注意到问题的实质是近平面裁剪造成了阴影体不封闭,一种实用的解决办法是 将阴影体中被裁剪掉的朝向视点的面投影,在近裁剪平面中形成替代的封闭阴影体。下面分两种情分析。第一种情况是遮挡体轮廓的所有顶点都位于视域四棱锥内 部,此时对遮挡体轮廓的所有朝向视点的面生成一个四边形包围盒,然后将该四边形作为阴影体的前向面投影到近裁剪平面。第二种情况是阴影体的部分顶点位于视 域四棱锥内部,这时需要计算出视域四棱锥与阴影体的交点,获得封闭的阴影体的朝向视点的顶点。这个方法的缺点仍然是深度值的精度问题,也就是说,由于深度 缓冲的精度误差,近裁剪平面仍然有可能裁剪掉那些用来形成封闭阴影体的新顶点。为了解决这一问题,人们又提出了一种方法,即在视点和近裁剪平面上建立一个 深度差。通常,场景的远、近裁剪距离设置为1.00.1,如果在 绘制阴影体时设置深度范围为[0.0,1.0], 并将新形成的阴影体顶点投影在深度值为0.05的 平面上,这样就不会造成深度判断误差。然而,这种方法经常会出现裂缝或“洞”的错误。到目前为止,近裁剪平面的问题还没有完美的解决方案。

6.4.2  

雾 是由大气中的不同尺寸的灰尘和水珠等不纯净杂质,反射、散射和吸收等作用引起的自然现象,反映在游戏画面中的结果是光亮度衰减。游戏中的雾是一种特效,它 能够将场景与某种预先设置的颜色融合,给出一种朦胧的雾感。物体距离相机越远,雾的效果越明显。图6-40(图片来源:Direct3D 9.0 SDK为一个无雾和有雾的场景对比。在几乎所有的三维游戏中都会用到雾化效果来增强场景的纵深感和距离感,给游戏营造气氛。雾的另一 个用途是减少场景复杂度,图6-40左图中的 除前面4根柱子外的其他柱子在雾化影响下是不 可见的,因而不需要被绘制。因此,在游戏中采用雾化效果可以提高效率,引擎只需要绘制一定距离内的场景,在给定距离之外的场景或用环境映射技术进行模拟, 或者用雾来掩饰没有处理的部分,提高逼真度。

 

6-40  一个简单的场景(左)及加雾后的场景效果 (右)

雾化效果的基本原理是随着距离的变远,逐渐地体现雾的颜色,直到物体完全 被雾所掩盖。雾化效果的画面颜色生成的公式Cfinal=f(d)Ccurrent+(1-f(d))Cfog其中d是雾的厚度,f(d)是雾的计算函数,CcurrentCfinal分 别是雾化前和雾化后的颜色,fogdensity为雾的浓度。描述雾的衰减快慢的4种模式如表6-8所示。


6-8  4种实用的雾化模式

f(d)=0

 

与距离成指数关系,具体公式是:

平方指数

与距离的平方成指数关系,具体公式是:

线性衰减

雾化效果在指定的起点和终点之间成线性关系。比起点更近的地方没有雾化效果,比终点更远的地方完全被雾化。具体计算 公式是:

 

距离d的计算有两种模式:基于成像平面的雾和基于距离的雾。

6.4.3  运动模糊和域深

运 动模糊模拟了相机在场景中快速运动时朦胧的效果,如图6-43(左)所示它可以在一个高速的动画序列中极大地提高真实感。运动模糊的模拟非常简单,采用的方法是多次绘制欲产生运动模糊效果的物体每次绘制时递增改变它的位置或旋转角度,并在累积缓冲器中加权平均每次的绘制结果。朦胧的程度与绘制的次数和累积方式有关。

游戏引擎中采用的相机模型是针孔模型,即透视投影模型。由于真实世界的透 镜的成像面积有限,因此只能聚焦场景中有限深度范围的物体。在这个范围之外的物体会逐渐变得模糊,这就是域深效果,如图6-43(右)所示。域深能用来提示玩家与物体的远近关系,因此在第一人称视角 游戏中经常会用到。为了模拟域深效果,可以将相机的位置和视角方向进行多次微小的抖动,每次绘制的结果在累积缓冲器中加权平均。两者的抖动保持步调一致,使得相机的聚焦点保持不变。

    

6-43  运动模糊效果(左)及域深效果(右)

6.5  小结

本 章主要介绍三维游戏的高级图形技术,主要包括高级纹理映射技术、BillboardImpostor技术、过程式建模与粒子系统,以及阴影、雾、域深等特效的生成技术。游戏编程者可以结合基本的三维图形引擎实现这些效果。最佳的学习方法是打开Doom3Half LifeQuakeⅢ等游戏,实景体会游戏场景中所使用的各种技术。对于每个小的片断,还可以尝试使用OpenGL Shading LanguageDirect3D HLSL等高级图形渲染语言给予实现。未来的游戏引擎设计将 会引入可编程图形加速技术。

    6

1. 编程实 现环境凹凸纹理映射、法向映射和光照映射技术,比较三者效果的异同。

2. 学习OGRE中可编程 图形硬件中的用法,实现可编程的多重纹理映射算法。

3. 试玩Half LifeCS游戏,总结它们所使用的高级纹理映射技术。

4. 利用球 面映射实现OGRE中的天 空盒特效,并添加动态的云层生成特效。

 

[1]  Wolfgang F. Engel. Amir Geva and Andre LaMothe. Beginning Direct3D Game Programming. Prima Publishing, 2001

[2]  Daniel Sánchez-Crespo Dalmau. Core Techniques and Algorithms in Game Programming. New Riders Publishing, 2003

[3]  Peter Walsh. Advanced 3D Game Programming with DirectX 9.0. Wordware Publishing, 2003

[4]  Tomas Akenine-Möller and Eric Haines. Real-time rendering(2nd edition). A.K. Peters Ltd., 2003

[5]  DirectX 9.0 SDK. Microsoft Coperation, 2003

[6]  http://www.

[7]  http://www.

[8]  http://www.

[9]  http://www.

[10]  http://www./

[11]  http://www.

[12]  McReynolds, Tom, David Blythe, Brad Grantham, and Scott Nelson. SIGGRAPH 99 Advanced Graphics

Programming Techniques Using OpenGL course notes, 1999

[13]  Harris, Mark J. and Anselmo Lastra. Real-Time Cloud Rendering. Proceedings of Eurographics, 2001(Vol. 20, No. 3): 7684

[14]  Meyer, Alexandre, Fabrice Neyret, and Pierre Poulin. Interactive Rendering of Trees with Shading and Shadows. 12th Eurographics Workshop on Rendering, June 2001:182195

[15]  Reeves, William T. Particle Systems A Technique for Modeling a Class of Fuzzy Objects. Computer Graphics, Vol. 17, No. 3 (1983): 359376

[16]  Reeves, William T. Approximate and Probabilistic Algorithms for Shading and Rendering Structured Particles Systems. Computer Graphics, Vol. 19, No. 3 (1985): 313-322

[17]  Oliveira M., Bishop G., and McAllister D. Relief Texture Mapping. ACM Transactions on Graphics, Volume 19, Issue3, July 2000

[18]  Lifeng Wang, Xi Wang, Xin Tong, Stephen Lin, Shimin Hu, Baining Guo, Heung-Yeung Shum. View Dependent

Displacement Mapping. ACM Transactions on Graphics, Volume 22, Issue 3, July 2003

[19]  Peter-Pike J. Sloan Michael F. Cohen. Interactive Horizon Mapping. Eurographics Rendering Workshop, June, 2000

[20]  Terry Welsh. Parallax Mapping with Offset Limiting: A Per-Pixel Approximation of Uneven Surfaces. Infiscape

Corporation, January 18, 2004

[21]  Cass Everitt and Mark Kilgard. http://developer./docs/IO/2585/ATT/RobustShadow Volumes.pdf



    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多