




已阅读5页,还剩49页未读, 继续免费阅读
(计算机应用技术专业论文)3d游戏引擎研究与实现.pdf.pdf 免费下载
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
3 。游戏引擎研究与觌 y7 0 0 4 8 4 摘要 游戏引擎是个处理游戏底层技术的平台,使用游戏引擎,游戏开发人员可以不用 花过多精力去处理系统架构、内存管理、图像绘制等一些底层的技术,可以直接使用引 擎提供的a p i 来进行游戏开发,从而大大缩短游戏开发时间,因此引擎是非游戏特有 的技术。3 d 引擎是游戏引擎中的子引擎,负责3 d 图形绘制功能,本文在分析现有3 d 商业引擎的基础上,设计和实现了一个功能完备的新一代3 d 引擎系统。 3 d 引擎功能主要是负责3 d 图形相关的功能。首先是光影效果,即场景中的光源 对处于其中的人和物的影响方式。游戏的光影效果完全是由引擎控制的,折射、反射等 基本的光学原理以及动态光源、彩色光源等高级效果都是通过引擎的不同编程技术实现 的。 其次是模型动画,目前游戏所采用的动画系统可以分为两种:一是骨骼动画系统, 一是模型动画系统,前者用内置的骨骼带动物体产生运动,比较常见,后者则是在模型 的基础上直接进行变形。引擎把这两种动画系统预先植入游戏,方便动画师为角色设计 丰富的动作造型。 引擎的另一重要功能是提供物理系统,这可以使物体的运动遵循固定的规律,例如, 当角色跳起的时候,系统内定的重力值将决定他能跳多高,以及他下落的速度有多快。 子弹的飞行轨迹、车辆的颠簸方式也都是由物理系统决定的。 碰撞探测是物理系统的核心部分,它可以探测游戏中各物体的物理边缘。当两个 3 d 物体撞在一起的时候,这种技术可以防止它们相互穿过,这就确保模型撞在墙上时 不会穿墙而过,因为碰撞探测会根据模型和墙之间的特性确定两者的位置和相互的作用 关系,保证了游戏场景的真实性。 渲染是引擎的核心,当3 d 模型制作完毕之后,美工会按照不同的面把材质贴图赋 予模型,这相当于为骨骼蒙上皮肤,最后再通过渲染引擎把模型、动画、光影、特效等 所有效果实时计算出来并展示在屏幕上。渲染引擎在引擎的所有部件当中是最复杂的, 它的强大与否直接决定着最终的输出质量。 引擎还负责玩家输入处理,处理来自键盘、鼠标、摇杆和其它外设的信号。 本文通过对g e n e s i s 3 d 、u n r e a l 、q u a k e 三个引擎架构和代码的分析,设计并实现了 一款具备场景模块处理、a c t o r 、模型动作处理、位图处理、雾效、摄像机、象素格 式、驱动处理、内存处理、物理、矩阵操作等1 1 个功能模块的3 d 引擎系统。对绘制 技术、碰撞检测技术、模型动画等方面都做了较为深入的研究。代码实现了一个具备 独立引擎功能的系统,游戏开发人员可以在这个引擎平台上进行各种不同的游戏的开发 而不需在底层处理上花费过多时间。 本文的贡献在于: 1 、设计并实现了一个具备主要图形绘制功能的3 d 引擎,为游戏开发人员提供了一 个开发平台,使开发人员可以完全独立于底层图形a p i 进行游戏开发; 2 、设计并实现了大面积场景植被建模和绘制过程; 3 、提出了高真实感植被绘制基因库概念。 关键词:3 d 引擎,渲染,碰撞检测,骨骼动画,雾效,象素格式 3 d 游戏引擎研究与实现 a b s t r a c t g a m ee n g i n ei sap l a t f o r mt e c h n i q u ei ng a m ed e s i g n w i t ht h ee n g i n e ,g a m e d e v e l o p e r s c a nc o n c e n t r a t eo ng a m ed e s i g na n di g n o r es t o r a j fs y s t e m ,g a m e a r c h i t e c t u r e ,a n dr e n d e r i n ge t c t h eg a m ed e v e l o p e r sc a ns h o r t e nt h ep e r i o do f g a m ed e v e l o p m e n tu s i n gt h ee n g i n e ,s ow e c a l lt h ee n g i n ed o e sn o tb e l o n gt o g a m ed e s i g nt e c h n i q u e 3 de n g i n e i so n ep a r to fg a m ee n g i n e ,j u s tc h a r j f dw i t h t h e3 dg r a p h i cp r o c e s s t h i st h e s i sd e s i g na n di m p l e m e n tap e r f e c t3 de n g i n e o fn e wg e n e r a t i o n 3 de n g i n ei sc h a r j f dw i t ht h eg r a p h i cp r o c e s si ng a m ed e v e l o p i n gf i r s t , i tc o n t r o lt h e1 i g h te f f e c t ,f u r t h e rm o r e ,t h el i g h te c h o ,r e f r a c t i o n , d y n a m i c1 i g h t ,a n dm u l t i e o l o r1 i g h t s o u r c ea r ea l s oi m p l e m e n t e db yt h ee n g i n e s e c o n d ,3 de n g i d e c o n t r o lt h ea n i m a t i o n t h et w oa n i m a t i o ns y s t e m su s e d b ym o s to ft h eg a m e sn o wa r eb o n ea n i m a t i o na n dm o d e la n i m a t i o n b o n ea n i m a t i o n i st h a tc a lm o v et h em o d e lb ym o v i n gt h eb o n e m o d e la n i m a t i o nd oi tb ym a t r i x t r a n s f o r m e n g i n ea l s op r o v i d et h ep h y s i c ss y s t e m ,m a k i n gt h em o d e lm o v ea c c o r d i n gt o t h ep h y s i c st h e o r y f o re x a m p l e ,w h e na na c t o rj u m p ,t h ee n g i n en e e dc a l c u l a t e t h ej u m ph e i g h ta n dt h es p e e do ft h ea c t o rw h e ni t f a l l t h ee n g i n ec a l la l s o d e f i n eh o wt r u c kh a v eaj o l t , c o l l i s i o nd e t e c t i o ni st h ec o r eo fp h y s i c ss y s t e m t h i sm o d u l ec a nd e t e c t t h eb r i mo fo b j e c ta n dd e e i d et h en e wp o s eo ft h et w oo b j e c t sa f t e re o l l i s i o n e n g i n ec a np r o c e s st h e u s e ri n p u t a f t e ra n a l y s et h ec o d e so fg e n e s is 3 d ,u n r e a la n dq u a k e ,w ed e s i g na n d i m p l e m e n ta3 de n g i n e t h i se n g i n ei n c l u d ew o r l d m o d u l e ,a c t o rm o d u l e ,m o t i o n m o d u l e ,b i t m a pm o d u l e ,f o g ,c a m e r a ,p i x e l f o r m a t ,c o l l i s i o nd e t e c t i o nm o d u l e e t c t h e s i sc o n t r i b u t i o n : 1 d e s i g n a n di m p l e m e n ta3 de n g i n e w i t hm o s to ft h e g r a p h i cp r o c e s s p r o c e d u r e w i t ht h i s3 de n g i n e ,t h eg a m ed e v e l o p e r sc a n m a k ean e wg a m ew i t h o u t c o n s i d e r i n ga 1 1k i n d so fg r a p h i ca p i s 2 e s t a b l i s h e sac o m p l e t em e c h a n i s m z or e n d e rt h ev e j f t a t i o ni nal a r j f s c e n e 3 p r o v i d ean e wc o n c e p t i o no f r e a li s t i cv e j f t a t i o n r e n d e r i n g k e yw o r d s :3 de n g i n e ,r e n d e r ,c o l l i s i o nd e t e c t i o n ,b o n ea n i m a t i o n ,f o ge f f e c t p i x e lf o r m a t 3 d 游戏引擎研究与实现 第一章前言 1 1 应用背景 三维图形技术在建筑虚拟、城市规划、场景游历、效果场景制作、城市规划、房地 产开发、虚拟教育、展馆展示、古迹复原、交通线路设计、3 d 游戏等各方面都有广泛 的实际应用。特别是这一两年,中国的游戏产业目前正处于一个迅猛发展的时期,仅嘲 络游戏部分2 0 0 3 年市场就增长4 5 8 ,随着游戏对场景真实性、画面质量、速度等要 求越来越高,底层图形技术已经成为游戏技术发展中的重要障碍。本文将主要针对游戏 3 d 技术介绍和描述我们的3 d 引擎架构以及实现方案。 1 2 国内外发展概况 一、什么是引擎 我们可以把游戏的引擎比作赛车的引擎,引擎是赛车的心脏,决定着赛车的性能和 稳定性,赛车的速度、操纵杆这些直接与车手相关的指标都建立在引擎的基础上。游戏 也是如此,玩家所体验到的剧情、关卡、美工、音乐、操作等内容都是由游戏的引擎直 接控制的,它扮演着中场发动机的角色,把游戏中的所有元素捆绑在一起,在后台指挥 它们同时、有序地工作。 无论是2 d 游戏还是3 d 游戏,无论是角色扮演游戏、即时策略游戏、冒险解谜游 戏或是动作射击游戏,哪怕是一个只有1 兆的小游戏,都有这样一段起控制作用的代码。 经过不断的进化,如今的游戏引擎已经发展为一套由多个子系统共同构成的复杂系统, 从建模、动画到光影、粒子特效,从物理系统、碰撞检测到文件管理、网络特性,还有 专业的编辑工具和插件,几乎涵盖了开发过程中的所有重要环节,以下就对引擎的一些 关键部件作一个简单的介绍。 首先是光影效果,即场景中的光源对处于其中的人和物的影响方式。游戏的光影效 果完全是由引擎控制的,折射、反射等基本的光学原理以及动态光源、彩色光源等高级 效果都是通过引擎的不同编程技术实现的。 其次是动画,目前游戏所采用的动画系统可以分为两种:一是骨骼动画系统,一是 模型动画系统,前者用内置的骨骼带动物体产生运动,比较常见,后者则是在模型的基 础上直接进行变形。引擎把这两种动画系统预先植入游戏,方便动画师为角色设计丰富 的动作造型。 引擎的另一重要功能是提供物理系统,这可以使物体的运动遵循固定的规律,例如, 当角色跳起的时候,系统内定的重力值将决定他能跳多高,以及下落的速度有多快,子 弹的b 行轨迹、车辆的颠簸方式也都是由物理系统决定的。 3 d 游戏引擎研究与实现 碰撞探测是物理系统的核心部分,它可以探测游戏中各物体的物理边缘。当两个 3 d 物体撞在一起的时候,这种技术可以防止它们相互穿过,这就确保了当你撞在墙上 的时候,不会穿墙而过,也不会把墙撞倒,因为碰撞探测会根据你和墙之间的特性确定 两者的位置和相互的作用关系。 渲染是引擎最重要的功能之一,当3 d 模型制作完毕之后,美工会按照不同的面把 材质贴图赋予模型,这相当于为骨骼蒙上皮肤,最后再通过渲染引擎把模型、动画、光 影、特效等所有效果实时计算出来并展示在屏幕上。渲染引擎在引擎的所有部件当中是 最复杂的,它的强大与否直接决定着最终的输出质量。 引擎还有一个重要的职责就是负责玩家与电脑之间的沟通,处理来自键盘、鼠标、 摇杆和其它外设的信号。如果游戏支持联网特性的话,网络代码也会被集成在引擎中, 用于管理客户端与服务器之间的通信。 引擎相当于游戏的框架,框架打好后,关卡设计师、建模师、动画师只要往里填充 内容就可以了。因此,在3 d 游戏的开发过程中,引擎的制作往往会占用非常多的时间, 正是出于节约成本、缩短周期和降低风险这三方面的考虑,越来越多的开发者倾向于使 用第三方的现成引擎制作自己的游戏,个庞大的引擎授权市场已经形成。 二、引擎的发展历史 曾经有一段时期,游戏开发者关心的只是如何尽量多地开发出新的游戏并把它们推 销给玩家。尽管那时的游戏大多简单粗糙,但每款游戏的平均开发周期也要达到8 到 1 0 个月以上,这一方面是由于技术的原因,另一方面则是因为几乎每款游戏都要从头 编写代码,造成了大量的重复劳动。渐渐地,一些有经验的开发者摸索出了一种方法, 他们借用上一款类似题材的游戏中的部分代码作为新游戏的基本框架,以节省开发时间 和开发费用,引擎的概念就是在这种机器化作业的背景下诞生的。 每一款游戏都有自己的引擎,但真正能获得他人认可并成为标准的引擎并不多。纵 观九年多的发展历程,可以看出引擎最大的驱动力来自于3 d 游戏,尤其是3 d 射击游 戏。因此,下面对引擎的历史回顾将主要围绕动作射击游戏的变迁展开。 引擎的诞生( 1 9 9 2 年- 1 9 9 3 年) 1 9 9 2 年,3 dr e a l m s 公司a p o j f e 公司发布了一款只有2 兆多的小游戏德军 司令部,它在整个电脑游戏发展史上占据着重要地位。这部游戏开创了第一人称射击 游戏的先河,更重要的是,它在x 轴和y 轴的基础上增加了一根z 轴,在由宽度和高 度构成的平面上增加了一个向前向后的纵深空间。 引擎诞生初期的另一部重要游戏同样是出自i ds o f t w a r e 公司的一款非常成功的第 人称射击游戏毁灭战_ 【j ( d o o m ) 。d o o m 引擎在技术上大大超越了w o l f e n s t e i n 3 d 引擎,德军司令部中的所有物体大小都是固定的,所有路径之间的角度都是直角, 3 0 游戏引擎研究与实现 也就是说你只能笔直地前进或后退,这些局限在毁灭战士中都得到了突破。尽管游 戏的关卡还是维持在2 d 平面上进行制作,没有“楼上楼”的概念,但墙壁的厚度可以 为任意,并且路径之间的角度也可阻为任意,这使得楼梯、升降平台、塔楼和户外等各 种场景成为可能。 由于d o o m 引擎本质上依然是二维的,因此可以做到同时在屏幕上显示大量角色而 不影响游戏的运行速度。值得一提的是,尽管d o o m 引擎缺乏足够的细节度,但开发者 仍然在毁灭战士中表现出了惊人的环境效果,其纯熟的设计技巧实在令人赞叹。 不过更值得纪念的是,d o o m 引擎是第一个被用于授权的引擎。1 9 9 3 年底,r a v e n 公司采用改进后的d o o m 引擎开发了一款名为投影者的游戏,这是游戏史上第一例 成功的嫁接手术。1 9 9 4 年r a v e n 公司采用d o o m 引擎开发异教徒,为引擎增加了飞 行的特性,成为跳跃动作的前身。1 9 9 5 年r a v e n 公司采用d o o m 引擎开发毁灭巫师, 加入了新的音效技术、脚本技术以及一种类似集线器的关卡设计,使你可以在不同关卡 之间自由移动。r a v e n 公司与i ds o f t w a r e 公司之间的一系列合作充分说明了引擎的授权 无论对于使用者还是开发者来说都是大有裨益的,只有把自己的引擎交给更多的人去使 用才能使引擎不断地成熟起来。 引擎的转变( 1 9 9 4 年一1 9 9 7 年) 在引擎的进化过程中,肯谣尔弗曼于1 9 9 4 年为3 dr e a l m s 公司开发的b u i l d 引 擎是一个重要的里程碑,b u i l d 引擎的“肉身”就是毁灭公爵( d u k en u k e m3 d ) 。毁 灭公爵已经具备了今天第一人称射击游戏的所有标准内容,如跳跃、3 6 0 度环视以及 下蹲和游泳等特性,此外还把异教徒里的飞行换成了喷气背包,甚至加入了角色缩 小等令人耳目一新的内容。在b u i l d 引擎的基础上先后诞生过1 4 款游戏。不过从总体 来看,b u i l d 引擎并没有为3 d 引擎的发展带来任何质的变化,突破的任务最终由i d s o f t w a r e 公司的雷神之锤( q u a k e ) 完成了。 雷神之锤紧跟在毁灭公爵之后发售,从内容的精彩程度来看毁灭公爵 超过雷神之锤不少,但从技术的先进与否来看,雷神之锤是毫无疑问的赢家。 q u a k e 引擎是当时第一款完全支持多边形模型、动画和粒子特效的真正意义上的3 d 引 擎。此外q u a k e 引擎还是连线游戏的始作俑者,最终把网络游戏带入大众的视野之中 的是雷神之锤,是它促成了电子竞技产业的发展。 一年之后,i ds o f t w a r e 公司推出雷神之锤2 ,一举确定了自己在3 d 引擎市场上 的霸主地位。雷神之锤2 采用了一套全新的引擎,可以更充分地利用3 d 加速和 o p e n g l 技术,在图像和网络方面与前作相比有了质的飞跃,r a v e n 公司的异教徒2 和军事冒险家、r i t u a l 公司的原罪都采用了q u a k ei i 引擎。 正当q u a k e i i 独霸整个引擎市场的时候,e p i c m e g a g a m e s 公司的虚幻问世了。 尽管当时只是在3 0 0 x 2 0 0 的分辨率下运行的这款游戏,除了精致的建筑物外,游戏中的 3 d 游戏引擎研究与实现 许多特效即便在今天看来依然很出色,荡漾的水波,美丽的天空,庞大的关卡,逼真的 火焰、烟雾和力场等效果。从单纯的画面效果来看,虚幻是当之无愧的佼佼者。 u n r e a l 引擎可能是使用最广的款引擎,在推出后的两年之内就有1 8 款游戏与e p i c 公司签订了许可协议。u n r e a l 引孳的应用范围不限于游戏制作,还涵盖了教育、建筑等 其它领域。 引擎的革命( 1 9 9 8 年- 2 0 0 2 年) 游戏的图像发展到虚幻这里已经达到了一个天高度,但引擎技术对于游戏的作 用并不仅局限于画面,它还影响到游戏的整体风格。 两部划时代的作品同时出现在1 9 9 8 年v e 公司的半条命和l o o k i n g g l a s s 工作室的神偷:暗黑计划,对后来的作品以及引擎技术的进化造成如此深远的影响。 曾获得无数大奖的半条命采用的是q u a k e 和q u a k e 引擎的混合体,v a l v e 公 司在这两部引擎的基础上加入了两个很重要的特性:一是脚本序列技术,这一技术可以 令游戏以合乎情理的节奏通过触动事件的方式让玩家真实地体验到情节的发展,这对于 诞生以来就很少注重情节的第一人称射击游戏来说无疑是一次伟大的革命;第二个特性 是对人工智能引擎的改进,敌人的行动与以往相比明显有了更多的狡诈,不再是单纯地 扑向枪口。这两个特点赋予了半条命引擎鲜明的个性,在此基础上诞生的要塞小 分队、反恐精英和毁灭之日等优秀作品又通过网络代码的加入令半条命引 擎焕发出了更为夺目的光芒。 在人工智能方面真正取得突破的游戏是l o o k i n gg l a s s 工作室的神偷:暗黑计划, 采用的是l o o k i n gg l a s s 工作室自行开发的d a r k 引擎,d a r k 引擎在图像方面比不上雷 神之锤2 或虚幻,但在人工智能方面它的水准却远远高于后两者。如今的绝大部 分第一人称射击游戏都或多或少地采用了这种隐秘的风格。 受半条命和神偷:暗黑计划两款游戏的启发,越来越多的开发者开始把注 意力从单纯的视觉效果转向更具变化的游戏内容,其中比较值得提的是离子风暴工作 室出品的杀出重围,杀出重围采用的是u n r e a l 引擎,尽管画面效果十分出众, 但在个体的人工智能方面它无法达到神偷系列的水准,图像的品质抵消了人工智能 方面的缺陷,而真正帮助杀出重围在众多射击游戏中脱颖而出的则是它的独特风格, 游戏含有浓重的角色扮演成分,人物可以积累经验、提高技能,还有丰富的对话和曲折 的情节。同半条命一样,杀出重围的成功说明了叙事对第一人称射击游戏的重 要性,能否更好地支持游戏的叙事能力成为了衡量引擎的一个新标准。 从2 0 0 0 年开始3 d 引擎朝着两个不同的方向分化,一是如半条俞、神偷和 杀出重围那样通过融入更多的叙事成分和角色扮演成分以及加强游戏的人工智能来 提高游戏的可玩性,:是朝着纯粹的网络模式发展,在这一方面,i ds o f t w a r e 公司再次 走到了整个行业的最前沿,在q u a k ei i 出色的图像引擎的基础上加入更多的网络成分, 3 d 游戏引擎研究与实现 推出了一款完全没有单人过关模式的纯粹的网络游戏雷神之锤3 竞技场,它与 e p i c 公司稍后推出的虚幻竞技场一同成为引擎发展史上的一个转折点。 随着q u a k e1 i i 引擎的大获成功,r a v e n 公司再次同i ds o f t w a r e 公司合作,采用 q u a k e 引擎制作了第一人称射击游戏星际迷航:精英部队,此外这部引擎还被用 于制作第三人称动作游戏重金属f a k k 2 和艾丽丝漫游魔境、两款二战题材 的射击游戏重返德军总部和荣誉勋章:盟军进攻,充分显示了q u a k ei l l 引擎的 强大潜力。 e p i c 公司的虚幻竞技场虽然比雷神之锤3 竞技场落后了一步,但如果仔 细比较下的话,你就会发现它的表现要略高出后者筹。从画面方面看两者差不多打 成平手,但在联网模式上,它不仅提供有死亡竞赛模式,还提供有团队合作等多种激烈 火爆的对战模式,而且u n r e a lt o u r n a m e n t 引擎不仅可以应用在动作射击游戏中,还可 以为大型多人游戏、即时策略游戏和角色扮演游戏提供强有力的3 d 支持。 在1 9 9 8 年到2 0 0 0 年期间迅速崛起的另一款引擎是m o n o l i t h 公司的l i t h t e c h 引擎, 这款引擎最初是用在机甲射击游戏升刚上的。采用l i t h t e c h 第一代引擎制作的游 戏包括血兆2 和清醒等。2 0 0 0 年l i t h t e c h 公司推出了引擎的2 0 版本和2 5 版 本,加入了骨骼动画和高级地形系统,l i t h t e c h 引擎除了本身的强大性能外,最大的 卖点在于详尽的服务,除了l i t h t e c h 引擎的源代码和编辑器外,购买者还可以获得免 费的升级、迅捷的电子邮件和电话技术支持,l i t h t e c h 公司甚至还会把购买者请到公司 进行手把手的培训。而且l i t h t e c h 引擎的平均价格也不算很高,大约在2 5 万美元左右, 同q u a k e 引擎的7 0 万美元相比已经是相当低廉了。 新一代引擎 u n r e a l3 引擎 虚幻引擎3 是一个面向下一代游戏机和d i r e c t ) ( 9 个人电脑的完整的游戏开发平 台,提供了游戏开发者需要的大量的核心技术、数据生成工具和基础支持。 虚幻引擎3 的设计目的非常明确,每一个方面都具有比较高的易用性,尤其侧薰 于数据生成和程序编写的方面,因此美工只需要程序员的很少量的协助,就能够尽可能 多地开发游戏的数据资源,同时这个过程是在完全的可视化环境中完成的,实际操作非 常便利。与此同时,虚幻引擎3 还能够为程序员提供个具有先进功能的,并且具有可 扩展性的应用程序框架( f r a m e w o r k ) ,这个框架可以用于建立、测试和发布各种类型 的游戏。 6 4 位色高精度动态渲染管道 g a m m a 校正和线性颜色空间渲染器提供了完美的颜色精度,同时支持了各种后 期特效例如光晕,镜头光环和景深等效果。 在最新的一代显示芯片发布的过程中,我们注意到 广一个非常明显的特点,就是 3 d 游戏引擎研究与实现 新一代的显示芯片已经不再满足于传统的3 2 位色深,转而需要更加高精度的颜色范 围,这一点在n v 4 0 和r 4 2 0 身上都能非常明显的看出来。在n v 4 0 上,这种技术被 称为h p d r 技术,而在r 4 2 0 身上,这种技术也有所体现。 支持当前所有的基于像素的光照和渲染技术,包括使用法线贴图技术的参数化的 p h o n g 光照、虚拟位移贴图、光线衰减函数、采用预计算的阴影遮罩技术以及使 用球形h a r m o n i c 贴图的预计算的凹凸自阴影。 高级的动态阴影 虚幻引擎3 提供对下列3 种阴影技术的完全支持: 1 、采用动态模板缓冲的阴影体积技术,能够完艇支持动态光源,这样就能在场景 中所有物体上精确地投射阴影; 2 、能够让动态的角色在场景中投射出动态的、柔和的模糊阴影,这个过程是通过 使用16 x 超级取样的阴影缓冲实现的; 3 、采用了拥有极高质量和极高性能的预先计算出的阴影遮罩,从而可以将静态光 源的交互现象离线处理,同时保留了完整的动态高光和反射效果。 u n r e a le n g i n e3 是首款支持s h a d e rm o d e l3 , 0 的游戏引擎,后者是微软d i r e c t x 9 0 中所提供的一项重要特色功能。目前,只有n v i d i a 的】f i b r c e6 系列图形芯片才支 持s h a d e rm o d e l3 0 。 0 u a k e 3 引擎 q u a k e 引擎,可以说是目前最流行的第一人称射击游戏引擎之一。 从光影效果上来看,d o o m 3 的引擎要比s o u r c e 领先一大截。d o o m 3 引擎对于所 有物体都采用了实时生成的光照和凹凸贴图,产生正式的光影效果,画面让人惊叹。游 戏中每件物体都充分融入环境当中,并且在光影上相互影响。在i d 早期的游戏引擎中, 光照效果是通过环境光线贴图完成的,而模型则是通过光线的各种变形实现,这也就导 致模型和环境有些格格不入,物体浮在画面上,缺乏真实感。 s o u r c e 引擎的主要光照系统采用的是实时辐射光照方式,也就是i d 在q u a k e3 引 擎中采用的。所以我们可以说i d 在这个方面领先了v a l v e 好凡年。s o u r c e 引擎采用了 动态光线和光照贴圈方式,并且还应用了高动态范围光照技术,它和其他游戏采用的引 擎相比要好很多,不过在光影的真实性上就有所欠缺了。d o o m 3 引擎为照片级真实 的游戏指出了发展的个方向d o o m 3 发售以后,一直有人认为d o o m 3 引擎只适合 渲染较小的室内场景。这种看法实际上是不正确的,i d 的这款引擎同样可以渲染宏大的 室外场景。未来发布的游戏中,采用这款引擎的q u a k e 4 将向大家表明d o o m 3 引擎的 全部实力。从技术上来看,i d 开发的这款引擎更适合处理室内环境,因为引擎中采用的 b s p ( 二进制空间分割) 系统针对显卡引擎进行过优化,可以更好的完成室内任务。 s o u r c e 引擎则正好相反,它处理室外场景更加适合,在室内环境的处理上无论是真 3 d 游戏引擎研究与实现 实性,还是细节上都比不上d o o m 1 3 本文的研究内容 本文通过对现有的几个3 d 引擎的分析,设计并实现了一款具备场景模块处理、 a c t o r 、模型动作处理、位图处理、雾效、摄像机、象素格式、驱动处理、内存处理、 物理、矩阵操作等1 1 个功能模块的3 d 引擎系统。对绘制技术、碰撞检测技术、模型 动画等方面都做了较为深入的研究,并且在这些现有引擎基础之上特别新增了大面积 植被绘制技术,在最后提出一种新的思想植被绘制基因库概念。 本文实现的是一卜具备独立引擎功能的系统,游戏开发人员可以在这个弓i 擎平台上 开发各种不同的游戏,而不需在底层处理上花费过多的时间。 第二章技术背景 2 1 渲染和构造3 d 世界 2 1 1 渲染器 渲染器让游戏场景可视化,让玩家可以看见场景,从而能够根据屏幕上所看到的东 西作出适当的决断,因此当构造一个游戏引擎的时候,首先就是建造渲染器。超过5 0 的c p u 处理时间花费在渲染器上面,如果没有一个好的渲染器,游戏永远不会成为一 个一流的游戏。 在一般意义上,渲染器的工作就是要创造出游戏的视觉闪光点,实际上达到这个目 标需要大量的技巧。3 d 图形本质上是用最少的努力创造出最大效果的一门艺术,因为 额外的3 d 处理在处理器时间和和内存带宽方面都是极为昂贵的。 2 1 2 建造3 d 世界 3 d 物体( 对象) 被储存成3 d 世界中的一。系列点( 被称为顶点) ,彼此之间有相互 关系,所以计算机知道如何在世界中的这些点之间画线或者是填充表面。一个立方体由 8 个点组成,每个角一个点。立方体有6 个表面,分别代表它的每一个面。这就是3 d 对 象储存的基础。对于一些比较复杂的3 d 物体,比如说一个q u a k e 的关卡,将有数以 千计( 有时数以十万计) 的顶点,和数以千计的多边形表面。本质上与上面的立方体例子 3 d 游戏引擎研究与实现 类似,它仅仅是由许许多多的小多边形组成的一些复杂场景。模型和世界如何储存是渲 染器的一部份功能, 而不属于应用程序,游戏部份。游戏逻辑不需要知道对象在内存中 如何表示,也不需要知道演染器将怎样把他们显示出来。游戏只是需要知道演染器将使 用正确的视野去表示对象,并将在正确的动画帧中把正确的模型显示出来。 在一个好的引擎中,渲染器应该是可以完全被一个新的渲染器替换掉,并且不需要 去改动游戏的一行代码。 内部的表示方法除了使用坐标系统,还有其他方法可以在计算机内存里表示空间 的点。在数学上,可以使用一个方程式来描述直线或曲线,并得到多边形,而几乎所有 的3 d 显示卡都使用多边形来作为它们的最终渲染图元。一个图元就是在任何显示卡上 面所能使用的最低级的绘制( 渲染) 单位,几乎所有的硬件都是使用三个顶点的多边形 ( 三角形) 。新一代的n v i d i a 和a t i 显卡可以允许以数学方式渲染( 被称为高次表面) , 但因为这不是所有图形卡的标准,不能靠它作为渲染策略。 2 1 3 裁剪 现在有一个由几十万个顶点多边形描述的世界,以第一人称视角位于我们这个 3 d 世界的一边。在视野中可以看见世界的一些多边形,而另外些则不可见,因为 一些物体,比如一面看得见的墙壁,遮挡住了它们。即使是最好的游戏编码人员,在 目前的3 d 显卡上,在一个视野中也不能处理3 0 0 ,0 0 0 个三角形且仍然维持6 0 f p s 。 显卡不能处理它,因此我们必须写一些代码,在把它们交给显卡处理之前除去那些看不 见的多边形,这个过程被称为裁剪。 有许多不同的裁剪方法。如果全部多边形都在屏幕上,相同的纹理,相同的尺寸 大小,正在往显示卡上传送多边形的应用程序除了传送多边形以外什么也不做,这时 显卡能处理多少多边形数量,就是图形芯片厂商呈现给你的数字。然而,在真实的游 戏情形中,应用程序时常在后台做着许多其他的事情,多边形的3 d 变换,光照计算, 拷贝较多的纹理到显卡内存等等。不仅纹理要送到显示卡,而且还有每个多边形的细 节。一些比较新的显卡允许你实际上在显卡内存本身里面储存模型,世界几何细节,但 这可能是昂贵的,将会耗光纹理正常可以使用的空间,所以你最好能确定每一帧都在使 用这些模型的顶点,否则只是在浪费显示 上的存储空间。 最简单的裁剪方式就是把世界分成区域,每个区域有一个其他可见区域的列表。 那样,只需要显示针对任何给定点的可见部分,如何生成可见视野区域的列表是技巧 所在,有许多方法可以用来生成可见区域列表,如b s p 树,、窥孔等等。 b s p 表示二叉空间分割,是一种将世界分成小区域的的方法,通过组织世界的多边 形,容易确定哪些区域是可见的而哪些是不可见的,从而方便了那些不想做太多绘制工 作的基于软件的渲染器。它同时也以一种非常有效的方式让你知道你位于世界中的什么 一1 l 一 3 d 游戏引擎研究与实现 地方。 在基于窥孔的引擎里,每个区域( 或房间) 都建造有自己的模型,通过每个区域 的门( 或窥孔) 能够看见另外的区段。渲染器把每个区域作为独立的场景单独绘制。 这就是它的大致原理。 足以说这是任何一个渲染器的必需部份,而且非常重要。 尽管些这样的技术归类在”遮挡裁剪”之下,但是他们全部都有同样的目的:尽 早消除不必要的工作。对於一个f p s 游戏( 第一人称射击游戏) 来说,视野中时常有许 多三角形,而且游戏玩家承担视野的控制,丢弃或者裁剪不可见的三角形就是绝对必要 的了。对空间模拟来说也是这样的,可以看见很远很远的地方,裁剪超过视觉范围外 面的东西就非常重要。对于视野受到限制的游戏来说,比如r t s ( 即时战略类游戏) 一 通常比较容易实现。通常渲染器的这个部份还是由软件来完成,而不是由显卡完成, 由显卡来做这部分工作只是一个时间问题。 2 1 4 基本的图形管道 从游戏到多边形绘制的图形管线过程大致如下: 游戏决定在游戏中有哪些对象,它们的模型、使用的纹理、他们可能在什么动画 帧、以及它们在游戏世界里的位置,游戏也决定照相机的位置和方向。 游戏把这些信息传递绘渲染器,以模型为例,渲染器首先要查看模型的大小、照 相机的位置、然後决定模型在屏幕上是否全部可见,或者在观察者( 照相机视野) 的 左边、在观察者的后面、或距离很远而不可见。它甚至会使用一些世界测定方式来计算 出模型是否是可见的。( 参见下面这条) 世界可视化系统决定照相机在世界中的位置,并根据照相机视野决定世界的哪些区 域多边形是可见的。有许多方法可以完成这个任务,包括把世界分割成许多区域的 暴力方法,每个区域直接为“我能从区域d 看见区域a b c ”,到更精致的b s p ( 二叉 空间分割) 世界。所有通过这些裁剪测试的多边形被传递给多边形渲染器进行绘制。 对於每一个被传递给渲染器的多边形,渲染器依照局部数学( 也就是模型动画) 和 世界数学( 相对于照相机的位置) 对多边形进行变换,并检查决定多边彤是不是背对相机 ( 也就是远离照相机) 。背面的多边形被丢弃。非背面的多边形由渲染器根据发现的附近 灯光照亮。然后渲染器要看多边形使用的纹理,并且确定a p i 图形卡正在使用那种纹 理作为它的渲染基础。多边形被送到渲染a p i ,然后再送给显卡。 通常把所有的多边形放到一些列表内,然後根据纹理对这个列表排序( 这样你只需 要对显卡传送一次纹理,而不是每个多边形都传送一次) 。在过去,会把多边形按照它 们到相机的距离进行排序,首先绘制那些距离相机最远的多边形,但现在由于z 缓 冲的出现,这种方法就不是那么重要了。当然那些透明的多边形要除外,它们要在所有 一1 2 一 3 d 游戏引擎研究与实现 的非半透明多边形绘制之后才能够绘制,这样一来,所有在它们后面的多边形就能正 确地在场景中显现出来。当然,实际上必须得从后到前地绘制那些多边形。但时常在 任何给定的f p s 游戏场景中,通常没有太多透明的多边形。它可能看起来像有,但实 际上与那些不透明的多边形相比,其比率是相当低的。 一旦应用程序将场景传递到a p i ,a p i 就能利用硬件加速的变换和光照处理 ( t l ) 。,几何变换允许3 d 显卡按照你的尝试,根据相机在任何时间的位置和方向, 在世界的正确角度和位置绘制多边形。 对于每个点或顶点都有大量的计算,包括裁剪运算,决定任何给定的多边形实际 上是否可见,在屏幕上完全不可见或部分可见。光照运算,计算纹理色彩明亮程度, 这取决于世界的灯光从什么角度如何投射到顶点上。过去,处理器处理这些计算,但 现在,当代图形硬件就能为你做这些事情,这意味着处理器可以去做其他的事情了。 很明显这是件好事情,由于不能指望市面上所有的3 d 显卡板上都有t l ,所以必 须写所有的这些例程。 2 1 5 曲面片( 高次曲面) 除了三角形,曲面片的使用现在正变得更普遍。因为他们能用数学表达式来描述 几何( 通常涉及某种曲线的几何形体) ,而不仅仅只是列出大量的多边形以及在游戏 世界中的位置,所以曲面片( 高次表面的另一个名称) 非常好。这样,你实际上就 能够动态地根据方程式来建立( 和变形) 多边形网格,并决定你实际想要从曲面片上 看到的多边形数量。 事实上现在的a t 显卡具有t r u f o r r n ,它能带一个以三角形为基础的模型,并 将该模型转换为基于高次表面的模型,使其平滑一接着再用十倍三角形数量把模型转 换回基于大量三角形的模型( 被称为r e t e s s e l a u o n ) 。然后模型送往管线做进一步的处理。 实际上a t i 仅仅在t l 引擎之前增加了一个阶段来处理这个过程。这里的缺点是, 要控制哪些模型需要被平滑处理而哪些又不需要。你常常想要一些边缘比较尖锐, 比 如鼻子,但它却被不恰当的平滑过了。这仍然是一种很好的技术,而且我能预见它在 将来会被更多的应用。 2 23 d 环境的光照和纹理 2 2 1 世界的灯光 在变换过程中,通常是在称为观察空间的坐标空间中,有一种最重要的运算之一: 光照计算。有很多不同的光照方法,从简单的计算多边形对于灯光的朝向,并根据灯光 一1 3 一 ! ! 鲎望! ! 兰竺圣皇壅望 到多边形的方向和距离加上灯光颜色的百分比值,一赢到产生边缘平滑的灯光贴图叠加 基本纹理。而且些a p i 实际上提供预先建造的光照方法。举例来说,o p e n g l 提供 了每多边形,每顶点,和每像素的光照计算。 在顶点光照中,需要决定一个顶点被多少个多边形共享,并计算出共享该顶点的所 有多边形法向量的均值( 称为法向量) ,并将该法向量赋顶点。一个给定多边形的每个 顶点会有不同的法向量,所以你需要渐变或插值多边形顶点的光照颜色以便得到平滑的 光照效果。你没有必要用这种光照方式查看每个单独的多边形。这种方式的优点是时 常可以使用硬件转换与光照( t & l ) 来帮助快速完成。不足之处是它不能产生阴影。 举例来说,即使灯光是在模型的右侧,左手臂应该在被身体投影的阴影中,而实际上模 型的双臂却以同样的方式被照明了。 这些简单的方法使用着色来达到它们的目标。当用平面光照绘制一个多边形时, 你让渲染( 绘制) 引擎把整个多边形都着上一种指定的颜色。这叫做平面着色光照。( 该 方法中,多边形均对应一个光强度,表面上所有点都用相同的强度值显示,渲染绘制时 得到一种平面效果,多边形的边缘不能精确的显示出来) 。 对于顶点着色( g o u r a u d 着色) ,让渲染引擎给每个顶点赋予特定的颜色。在绘 制多边形上各点投影所对应的像素时,根据它们与各顶点的距离,对这些顶点的颜色进 行插值计算。 p h o n g 着色,通过纹理工作,但不对每个顶点颜色进行插值决定像素颜色值, 它 对每个顶点的法向量进行插值,会为每个顶点投影的像素做相同的工作。对于g g u r a u d 着色。你需要知道哪些光投射在每个顶点上。对于p h o n g 着色,你对每个像素也要知 道这么多。 p h o n g 着色可以得到更加平滑的效果,因为每个像素都需要进行光照计算,其绘制 非常耗费时间。平面光照处理方法很快速,但比较粗糙。p h o n g 着色比g o u r a u d 着色 计算更昂贵,但效果最好,可以达到镜面高光效果( ”高亮”) 。 2 2 2 不同的灯光 接着是生成照明映射,用第二个纹理映射( 照明映射) 与已有的纹理混合来产生照 明效果。这样工作得很好,但这本质上是在渲染之前预先生成的一种罐装效果。如果 使用动态照明,必须在每一帧重新生成照明映射,按照动态灯光的运动方式修改这些照 明映射。灯光映射能够快速的渲染,但对存储这些灯光纹理所需的内存消耗非常昂贵。 你可以使用一些压缩技巧使它们占用较少的的内存空间,或减少其尺寸大小,甚至使 它们是单色的( 这样做就不会有彩色灯光了) 等等。 许多游戏通常使用某种混合照明方式。以q u a k e i i i 为例,场景使用照明映射,动 一1 4 一 3 d 游戏引擎研究与实现 画模型使用顶点照明。 预先处理的灯光不会对动画模型产生正确的效果,整个多边形 模型得到灯光的全部光照值,而动态照明将被用来产生正确的效果。当然,所有这些在 新的d o o m 引擎里面都不复存在了,但要看到所有的效果,至少需要1 g h zc p u 和 g e f o r c e 2 显卡。 一旦场景经过转换和照明,我们就进行
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026届贵州省黔东南州剑河县第四中学化学高二第一学期期中综合测试试题含解析
- 桥本氏甲状腺病课件
- 2025年心理咨询师面试技巧心理评估与咨询技能模拟题集
- 2025年软件开发项目经理面试全攻略及预测题解析
- 桑塔纳转向系拆装与检修
- 2025年编程高手必做软件工程师面试题集
- 2025年公路水运工程试验检测人员应试题及答案
- 北京市门头沟区2023-2024学年七年级下学期第一次月考生物试题及答案
- 北京市门头沟区2023-2024学年九年级上学期期末质量监测数学试题及答案
- 公务员面试题及答案
- 水稻全程机械化栽培技术
- 2025年患者转运与护理知识试题附答案
- 浙江省2025年中考语文真题试卷及答案
- 物流跟踪管理办法
- BIM建模(活页式) 课件 61.项目桥梁轴网创建 -70.视觉样式
- 巡察整改培训课件
- 学校竣工活动方案
- 浙江省台州市2024-2025学年高一下学期期末质量评估历史试题(含答案)
- 幼儿园老师美术教学培训
- 矿山巷道测量方案(3篇)
- 11人制足球竞赛规则
评论
0/150
提交评论