为了正常的体验网站,请在浏览器设置里面开启Javascript功能!
首页 > 006 游戏中的高级图形技术

006 游戏中的高级图形技术

2010-09-12 15页 pdf 893KB 21阅读

用户头像

is_862825

暂无简介

举报
006 游戏中的高级图形技术 006 游戏中的高级图形技术 游戏场景中的实时画面生成取决于两方面:算法本身的效率和图形硬件的处理能力。随着图形硬件和 CPU的快速发展, 渲染速度越来越高,随之而来的是游戏场景的复杂度急剧增长。本章从实用性和效率出发,介绍三维游戏编程中几类高级 图形编程技术,包括高级纹理映射、Billboard、Impostor、阴影生成、域深、粒子系统、L系统,以及各类三维游戏中常见 的自然场景的特效生成算法,如树、云、雾、烟、爆炸、光晕等。 6.16.16.16.1 纹理映射 传统的几何造型技术只能表示景物的宏观形状,而无法有效地...
006 游戏中的高级图形技术
006 游戏中的高级图形技术 游戏场景中的实时画面生成取决于两方面:算法本身的效率和图形硬件的处理能力。随着图形硬件和 CPU的快速发展, 渲染速度越来越高,随之而来的是游戏场景的复杂度急剧增长。本章从实用性和效率出发,介绍三维游戏编程中几类高级 图形编程技术,包括高级纹理映射、Billboard、Impostor、阴影生成、域深、粒子系统、L系统,以及各类三维游戏中常见 的自然场景的特效生成算法,如树、云、雾、烟、爆炸、光晕等。 6.16.16.16.1 纹理映射 传统的几何造型技术只能表示景物的宏观形状,而无法有效地描述景物表面的微观细节,但恰恰是这些细微特征极大 地影响着景物的视觉效果。真实感图形绘制技术利用纹理图像来描述景物表面各点处的反射属性,成功模拟出景物表面的 丰富纹理细节。纹理映射技术以纹理图像作为输入,通过定义纹理与物体之间的映射关系,将图像映射到简单景物几何形 态上合成出具有真实感的表面花纹、图案和细微结构。而在不同视点和视线方向下景物表面的绘制过程实际上是纹理图像 在取景变换后,在简单景物几何上的重投影变形的过程。 简单地说,物体表面的纹理就是附着在物体表面的外观图像。纹理在计算机中的表示是一张 n维的规则图像(n可为1、 2、3、4,最常用的是二维)。纹理映射指的是给定一个物体,依据某些图像和映射函数来决定物体外观属性的过程。由于 图像像贴纸一样附着在物体表面,因此纹理映射也叫贴图。图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.纹理坐标插值模式 如上所述,游戏编程一般只在顶点上设置纹理坐标。从顶点纹理坐标计算出每个像素的纹理坐标的最常用方式是在每 个三角形的扫描线上线性插值,即纹理坐标 u、v的生成和 Gouraud渲染插值颜色的生成方式一样。由于实现简单(只需要 逐扫描线相加 delta-u和 delta -v),因此在图形加速器中被广泛采用。然而,认为纹理坐标 u和 v 在扫描线上是线性变化则是 不正确的,当多边形的法向与视线接近于垂直时这个问题更为严重。解决的办法是认为 u/z、v/z 和1/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 效果、锯齿、斑块、模糊、水纹、亮点等。MIP(Multum In Parvo,意思是在一个小的地方有很多东西)映射技术是图形学中最常用的纹理反走样技术。它试图解决当相机远离纹理所 在位置时出现的走样现象,基本思路是保证像素尺寸和纹素尺寸大致相等。因此,MIP 映射技术在内存中保存纹理的一系 列不同分辨率的版本,最高版本是原始纹理,后续版本的尺寸是前一版本的四分之一。例如,原始纹理精度是256×256,那 么接下来的 MIP 纹理的尺寸分别是128×128,64×64,…,1×1,如图6-3所示。纹理的 MIP层次是在 Direct3D设备创建纹 理(CreateTexture()函数)时自动完成。如果参数为1,则仅创建原始纹理,如果为0,则生成直到1×1的全部层次。 图6-3 MIPMAP 纹理(图片来源:DirectX 9.0 SDK) 7.纹理坐标变换 纹理坐标变换是指在纹理映射之前,对纹理坐标进行投影或矩阵变换。在 OpenGL 或Direct3D 中,每个纹理阶段都可 以定义一个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 Mapping,EMBM)涉及两个纹理。一个称为环境映射,负责物体表面的颜 色,一个称为凹凸映射,负责产生物体表面凹凸不平的效果。它的基本原理是利用凹凸纹理扰动环境映射的纹理坐标。凹 凸纹理的每个纹素有两个分量(du, dv),分别记录了纹理坐标(u, v)的位移。在应用凹凸纹理后,像素级的环境映射的纹理坐 标从(u, v)变为(u+du, v+dv)。环境映射既可以是视点相关的,也可以是视点无关的,而且可以用来模拟漫射和镜面光效果。 从视觉上看,应用环境凹凸纹理映射与扰动法向没有大的效果差别。如图6-7(左)所示,上图是凹凸纹理,下图是环境纹 理,右图为环境凹凸纹理映射结果。 同传统的凹凸纹理映射一样,此处的凹凸纹理也是从灰度级的高度图计算而得。总体而言,高度值越大,记录在凹凸 纹理中的纹理坐标位移越大。注意到位移的符号为正、负皆可,因此在图形硬件中实现时必须先将位移的范围从[-1, 1]变到 [0, 255]。 图6-7 环境凹凸纹理映射 环境凹凸纹理映射也可以适用于环境映射最常见的功能,即环境反射。从这个意义上说,将不同的信息编码在环境纹 理中,可以用来模拟不同的效果。 3.法向映射 法向映射(Normal mapping)是凹凸映射系列中最常用的技术。它的输入是一个法向图,记录了扰动后的曲面法向。本 质上法向图的数据来源也是高度图。法向的 x、y、z 三个分量分别被保存在 RGB 三个颜色通道中。 图6-8的左图是一帧高度图,右图是计算出来的法向图。法向的 x、y、z 三个分量从[-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光照明模型。如果使用低分辨率的 纹理,可以模拟粗糙的物体表面。它的局限性来源于它的预处理方式,当光源或场景物体的遮挡关系改变后必须重新生成。 立方体环境映射能解决球面映射的问题,可完全在 Direct3D 和 OpenGL中实现,已经成为业界标准。游戏编程人员们 利用立方体环境映射方便地创造反射和镜面光照效果,生成活泼、有趣的沉浸感强的三维游戏场景,例如赛车游戏的车身 上闪亮的环境光效果。 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 rendering,IBMR)就是为实现这一目标而的一系列 方法。IBMR 基于一些预置的图像来生成不同视点处的场景画面,有着鲜明的特点: � 图形绘制的计算量不取决于场景复杂性,而与所需屏幕分辨率有关。 � 预先存储的图像既可以是计算机合成的,也可以是实际拍摄的画面,两者可以混合使用,从而可能获取很高的真 实感。 在三维游戏引擎中,最为实用的 IBMR 技术当属混合式图像和几何绘制技术,它综合利用简化的场景几何和图像模拟 复杂场景物体的外观与形状。与纯粹基于图像的建模与绘制技术(如全景图、同心拼图、光场函数等)相比,混合式图像 和几何绘制技术存在两个优点: � 利用图像快速模拟出物体的表面细节和外观,从而比纯几何绘制更高效。 � 利用简化的几何方式模拟不同视点下的物体形状,从而避免纯图像方法的大数据量。 本节从面向游戏开发的实用性出发,描述三维游戏引擎中的简单然而高效的几类基于图像的建模与绘制技术,包括: 光晕、Sprite、Billboard、Impostor。 6.2.1 光晕光晕光晕光晕 光晕是相机在亮光的直接照射下所引起的现象,通常它由一个光环和淡淡的日冕组成。由于各种光的波长不同,当它 们照到透镜上时会发生折射,产生光环。日光的光环看起来像一枚戒指,它的外边缘是红色的,内边缘是紫色的。日冕在 透镜中分布不均匀,从中心点向四周辐射。此外,由于光线在透镜的内部发生反射和折射,所以会产生二次效应。例如, 照相机的隔膜片可以生成六边形的图案。 根据光学原理计算多个透镜的光晕效果显然得不偿失。游戏中通常采用一种简单的二维图像技巧,它的基本思路是把 光晕分解为两类组成元素,其一是光晕的主要部分,它控制光晕的形状,可大致分为4类,如图6-18所示。 (a)放射型 (b)环型 (c)十字型 (d)光束型 (e)四者的合成 图6-18 光晕形状的构成 图6-20是三个典型的光晕例子。 图6-19 光晕实例 6.2.2 精灵图元的绘制 基于图像绘制的最简单图元是 Sprite。Sprite 的名称来源是早期的二维游戏,当时这种动画技术经常用来模拟神话世界 的精灵(Sprite),其后就用 Sprite 来命名,中文名是精灵动画技术。在二维游戏中,Sprite是指一幅能在屏幕上移动的图像 。 简单的 Sprite图像和屏幕上的像素一一对应。Sprite 的显示有许多加速算法,如将它们预编译成一张像素表,可以避免测试 每个像素的透明度。稍微复杂的 Sprite技术能缩放图像,如一个10×10像素的 Sprite 通过简单的复制可以转换成20×20或30×30 的 Sprite。通过添加不同分辨率的 Sprites,可以使不同焦距之间的转换更加自然。显示连续运动状态的 Sprite可以生成物体 动画效果,这就是精灵动画。对于不同的观察角度,可以使用不同的 Sprite。 利用模板缓冲器可以完成精灵动画的溶解与清除。它的功能是锁定图像的某块区域,获得幻灯片之间过渡的效果,如 从左到右清除老的源图像,显示新的目标图像。算法首先构建一系列形状逐渐过渡的辅助多边形(从空区域到覆盖整个窗 口)。辅助多边形并不产生任何绘制结果(设置 alpha 为0,alpha 测试结果大于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 所示。第1~3种方法允许视点在与物体高度相同的区域内变化。当视点改变时,Billboard 四边形绕对称轴旋转,如果存在 多个四边形(第2、3种方法),需要融合它们的绘制结果。第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 技术 Billboard 和 Sprite 技术都采用简单的几何加纹理映射来完成场景的模拟。它们的缺陷在于过于简单的几何和一成不变的 纹理,使得相机靠近物体时出现明显的失真。为了弥补这些缺憾, 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)迭代函数系统 IFS(Iterated Function System,迭代函数系统)由一组能满足一定条件的映射函数 W i (如收缩的仿射变换)及一组变换 发生的概率 P i 定义:IFS i ={(w i , p i ), i=1, 2,…, n}。利用 IFS生成植物图像的过程是对初始植物图像按照已知概率选择函数而 实施的一种迭代变换。 (2)受限扩散凝聚模型 DLA(Diffusion-Limited Aggregation,受限扩散凝聚)模型的基本思路是:在一个平面网格上选定一个静止的微粒作为 种子,然后在距种子较远的格点上产生一个微粒,令微粒沿网格上下左右诸方向随机行走。如果该微粒在行走过程中与种 子相碰,就凝聚到种子上;如果微粒走到边界上,就被边界吸收而消失。如此重复上述步骤,就会以种子为中心形成一个 不断增长的凝聚集团。利用DLA和其修改的模型,可以对部分植物的形态结构进行计算机模拟,如植物根系的生长过程模 拟和海藻类植物的形态结构模拟等。 (3)L系统 植被以树枝为基本元素,植被模型的空间结构分为拓扑结构和几何描述两部分,拓扑结构表示树枝之间的层次关系。 通过层次关系把树枝组织在一起形成一棵完整的植物,其中每一树枝都可以有多个子树枝,也可以没有子树枝。除根树枝 外,每一树枝都有唯一的母树枝。植物的几何结构则定义树枝的空间形状。从宏观上看,植物在其形态结构的组成上有一 个共同点,即植物都是由主干、分枝、树叶这些基元组成的。每个基元的形成又遵守着一个同样的方式,即由主干上分出 第一层分枝,再由第一层分枝上生出第二层分枝,这样一层层地分下去,直至树叶。对植被的生长模拟可提供母树枝生长 子树枝的方法,由参数控制植物子树枝的生长,这些参数包括子树枝与母树枝的夹角、子树枝长度收缩比例、子树枝半径 收缩比例、子树枝相对母树枝的空间旋转角以及子树枝的生长模式。对子树枝的生长还需要引入随机控制变量,使子树枝 不显得呆板。 在采用“龟解释”文法串时,可根据不同植物的特点构造其枝与叶的基本几何造型。对于枝的具体构造可按照两条准则 进行:分枝的粗细是随分枝节点到主枝节点的距离的增加而减少;分枝的长度相对于主枝的长度按一定的比例关系缩放。叶 的构造可根据植物特点用少量多边形加以模拟。 6.4 场景光影特效模拟场景光影特效模拟场景光影特效模拟场景光影特效模拟 本节介绍三维游戏场景中增强真实感的最重要的三类特效,包括阴影、雾、运动模糊和域深。这些特效的最大作用是 增加场景的层次感。其中,阴影模拟一直是三维游戏中的难点,这里将主要阐述三类阴影生成算法,包括平面投影法、阴 影图法和阴影体法。 6.4.1 阴影 阴影是增加场景真实感的一种重要手段,它能暗示用户场景中物体的遮挡关系、深度提示和光源的数目及位置,如图6-29 所示。产生阴影的物体叫遮挡体,表面不被光源照射的物体称为被遮挡体。阴影可分为全阴影区域和软影(伪影)区域两 部分。全阴影区域是不能被任何光源照见的区域,伪影是被部分光源照射的区域。伪影形成了全阴影区域和全光照区域的 光滑过渡,它实际上反应了光源几何和被光照物体的函数关系。不难知道,场景中如果只有一个点光源,就不会产生伪影。 由于阴影区域通常有着对比度高的边界,如果阴影绘制时产生走样现象,会极大地影响场景的逼真程度。注意到图形绘制 流程并不直接支持阴影,但是可以采用一些技巧实现不同质量的阴影。阴影的质量由两个因素控制,其一是阴影物体的复 杂性,其二是被遮挡物体的复杂性。由于软件实现阴影无法达到游戏的实时性要求,因此本节只考虑结合图形硬件加速的 阴影生成方法。 图6-29 阴影带来深度提示 1.平面投影法 平面投影法是最简单的阴影生成算法,其主要思想是将遮挡物体沿光源方向投影变形到被遮挡的平面上,在平面上作 为二维物体绘制,绘制结果直接产生了遮挡物体的阴影。图6-30是算法示意图(图片来源:NVidia 公司)。 图6-30 平面投影法示意(左);平面投影法效果图(右) 在图形绘制引擎如 OpenGL 中,实现阴影的方式是将平行或透视投影矩阵设置到建模和相机矩阵,然后使用需要的阴 影颜色绘制这个物体。下面给出从一个方向光源沿 z轴将一个物体的阴影投影到 xy 平面的过程。 ① 正常绘制场景,包括产生阴影的物体。 ② 将建模和相机矩阵设置为单位矩阵后,再乘以一个缩放矩阵,该矩阵在 x、y、z 轴的缩放因子分别是(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.0、0.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)是雾的计算函数,Ccurrent、Cfinal分别是雾化前和雾化后的颜色 , fogdensity为雾的浓度。描述雾的衰减快慢的4种模式如表6-8所示。 表6-8 4种实用的雾化模式 距离 d的计算有两种模式:基于成像平面的雾和基于距离的雾。 无 f(d)=0 指 数 与距离成指数关系,具体公式是: 平方指数 与距离的平方成指数关系,具体公式是: 线性衰减 雾化效果在指定的起点和终点之间成线性关系。比起点更近的地方没有雾化效果,比终点更远的地方完全 被雾化。具体计算公式是: 6.4.3 运动模糊和域深 运动模糊模拟了相机在场景中快速运动时朦胧的效果,如图6-43(左)所示。它可以在一个高速的动画序列中极大地提 高真实感。运动模糊的模拟非常简单,采用的方法是多次绘制欲产生运动模糊效果的物体,每次绘制时递增改变它的位置 或旋转角度,并在累积缓冲器中加权平均每次的绘制结果。朦胧的程度与绘制的次数和累积方式有关。 游戏引擎中采用的相机模型是针孔模型,即透视投影模型。由于真实世界的透镜的成像面积有限,因此只能聚焦场景 中有限深度范围的物体。在这个范围之外的物体会逐渐变得模糊,这就是域深效果,如图6-43(右)所示。域深能用来提示 玩家与物体的远近关系,因此在第一人称视角游戏中经常会用到。为了模拟域深效果,可以将相机的位置和视角方向进行 多次微小的抖动,每次绘制的结果在累积缓冲器中加权平均。两者的抖动保持步调一致,使得相机的聚焦点保持不变。 图6-43 运动模糊效果(左)及域深效果(右) 6.5 小结小结小结小结 本章主要介绍三维游戏的高级图形技术,主要包括高级纹理映射技术、Billboard 和 Impostor技术、过程式建模与粒子 系统,以及阴影、雾、域深等特效的生成技术。游戏编程者可以结合基本的三维图形引擎实现这些效果。最佳的学习方法是打 开Doom3、Half Life、QuakeⅢ等游戏,实景体会游戏场景中所使用的各种技术。对于每个小的片断,还可以尝试使用 OpenGL Shading Language 或 Direct3D HLSL 等高级图形渲染语言给予实现。未来的游戏引擎设计将会引入可编程图形加速技术。 习习习习 题题题题 6 1.编程实现环境凹凸纹理映射、法向映射和光照映射技术,比较三者效果的异同。 2.学习 OGRE 中可编程图形硬件中的用法,实现可编程的多重纹理映射算法。 3.试玩 Half Life和 CS游戏,总结它们所使用的高级纹理映射技术。 4.利用球面映射实现 OGRE 中的天空盒特效,并添加动态的云层生成特效。 参 考 文 献 [1] Wolfgang F. Engel. AmirGeva andAndre LaMothe. Beginning Direct3D Game Programming. Prima Publishing, 2001 [2] Daniel Sánchez-Crespo Dalmau. CoreTechniques and Algorithms in Game Programming. New Riders Publishing, 2003 [3] PeterWalsh.Advanced 3D Game Programming with DirectX 9.0.Wordware Publishing, 2003 [4] Tomas Akenine-Möller and Eric Haines. Real-time rendering(2nd edition).
/
本文档为【006 游戏中的高级图形技术】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
热门搜索

历史搜索

    清空历史搜索