(计算机软件与理论专业论文)基于directx9的3d游戏引擎渲染系统的研究与实现.pdf_第1页
(计算机软件与理论专业论文)基于directx9的3d游戏引擎渲染系统的研究与实现.pdf_第2页
(计算机软件与理论专业论文)基于directx9的3d游戏引擎渲染系统的研究与实现.pdf_第3页
(计算机软件与理论专业论文)基于directx9的3d游戏引擎渲染系统的研究与实现.pdf_第4页
(计算机软件与理论专业论文)基于directx9的3d游戏引擎渲染系统的研究与实现.pdf_第5页
已阅读5页,还剩69页未读 继续免费阅读

(计算机软件与理论专业论文)基于directx9的3d游戏引擎渲染系统的研究与实现.pdf.pdf 免费下载

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

沈阳工业大学硕士学位论文 摘要 近年来游戏引擎技术在国内有了一定的发展。游戏引擎就是一个可以加速游戏开 发的套件。引擎中包括一些开发3 d 游戏过程中需要实现的底层功能。渲染系统是游戏 引擎中最主要的部分 论文介绍了课题研究的目的、课题研究的意义、国内外游戏引擎发展的情况和研 究设想和预期结果。 介绍了游戏引擎渲染系统的相关技术。主要介绍了3 d 建模,剔除操作、基本的图 形管线流程。 分析了游戏引擎渲染系统的实现机制。论文所讨论的渲染系统使用的是一种独特 的实现机制。它不同于一般渲染系统所使用的c o m 接口机制而且要比一般的c o m 接 口的实现机制要简单。但是它借用c o m 接口的概念。 设计并实现了游戏引擎渲染系统的三个主要模块:数学模型支持模块,贴图和材 质管理模块,渲染原语管理模块。数学模型支持模块主要包括用于渲染和碰撞检测的 数学模型类的实现。贴图和材质管理模块的主要功能是高效的管理渲染系统所需要的 贴图和材质等资源,避免这些资源的冗余。渲染原语管理模块的主要功能就是让渲染 系统可以高效的渲染原语以提高渲染系统的效率。数学模型支持模块的某些部分是使 用一种单指令流多数据流的s s e 指令来实现的。这种指令要比传统的单指令流单数据 流的指令效率要高得多。这部分介绍的渲染系统的顶点缓存管理类优化了对用户动态 数据的渲染。优化主要是基于贴图的分类的。 设计并实现了游戏引擎渲染系统的测试实验程序。实验程序主要对数学模型支持 模块中的用s s e 指令实现的功能和顶点缓存管理类中动态数据的渲染功能进行测试。 关键词:渲染系统,资源的冗余,单指令流多数据流,顶点缓存,基于贴图的分类 基于d i r e c t x 9 的3 d 游戏引擎渲染系统的研究与实现 r e s e a r c ha n di m p l e m e n t a t i o no far e n d e r i n gs y s t e mi n3 dg a m e e n g i n e b a s e do nd i r e c t x 9 a b s t r a c t i nr e c e n ty e a r s , g a m ee n g i n et e c h n o l o g yh a sb e e nd e v e l o p i n gs o m e w h a t c _ g d m oe n g i n ei sa t o o l k i ts u i t et h a ts p e e d su pg a m ed e v e l o p i n g t h ee n g i n ec o n s i s t so fs o m ef u n d a m e n t a l f u n c t i o n a l i t yt h a ti sn e c e s s a r yi nd e v e l o p i n g3 dg a m e t h er e n d e r i n gs y s t e mi st h em a i np a r to f a g a m e 廿l g i n e p u r p o r to ft h er e s e a l e hc c 咀d l l c i c di nt h ep 年i p e 写d e v e l o p m e n to fg a r f l oe n g i n ed e s i g ni no u r c o u n u ,a n da b r o a d , e n v i s i o no f t h er e s e a r c ha n dd e s i r e dr e s u l t 黜d i s c u s s e d s o m er e l a t i v et e c h n o l o g i e st h a tp e r t a i l lt ot h er e n d e r i i l gs y s t e mo fag a m ee n g i n ea i e i l l u s t r a t e d t h et e c h n o l o g i e sd i s s c n s e d 勰3 dm o d e l i n g , c i l l l i n go p e r a t i o na n db a s i cr e n d m g p i p e l i n e t h ei m p l e m e n t i n gm e c h a n i s mo ft h e 础:l d c r i l l gs y s t e mo ft h eg q n l o 锄g i i l ci sa n a l y z e d t h e r e n d e r i n gs y s t e md i s c u s s e di n t h i sp a r to ft h ep a p e ri m p l e m e n t sau n i q u em e c h e n i s n lt h e , i m p l e m e n t a t i o no ft h i sm e c h a n i s mi se a s i e rt h a nt h a to fc o mi n t e r f a c e h o w e v e r , i tb o r r o w st h e c o n c e p to f i n t e r f a c ef r o mc o m m e c h a n i s m t h r e em a i nm o d u l e so ft h er e n d e r i n gs y s t e ma r ed e s i g n e da n di m p l e m e n t e d t h e ya l em a t h m o d e ls u p p o r a n gm o d u l e , t e x t u r em a n a g e m e n tm o d u l ea n dr e n d e r i n gp r i m i t i v em a n a g e m e n t m o d u l e t h em a t hs u p p o r t i n gm o d u l em a i n l yc o n s i s t so ft h ei m p l e m e n t a t i o no fm a t hm o d e lt h a t 黜u s e di nr e n d e r i n ga n dc o l l i s i o nd e t e c t i o mt h em a j o rf u n c t i o no ft h et e x t u r em a n a g e m e n t m o d u l ei st oe f f i c i e n t l ym 黝g el & o o u l c e st h a ta r eu s e db yt h er e n d e r i n gs y s t e m , s u c h 勰t e x t u r e s a n dm a t e r i a l s , a v o i d i n gr e d u n d a n c i e s t h ef u n d a m e n t a lf u n c t i o no ft h er e n d e r i n gp r i m i t i v e n m n a g e m e n tm o d u l ei st oe n a b l et h er e n d e r i n gs y s t e mt or e n d e rp r i m i t i v e se f f i c i e n t l ya n dt h u st o o n h a n s y s t e mp e r f o r m a n c e s o m ep a r t so ft h em a t hm o d e ls u p p o r t i n gm o d u l eo ft h er e n d e r i n g s y s t e md i s c u s s e di nt h i sp a r ta l ei m p l e m e n t e du s i n gs s ei n s m l c t i o n st h a tb e l o n gt os i n g l e - i n s t r u c t i o n - m u l t i p l e - d a t as c h e m e s s ei n s t r l l c t i o n s 辩m o l ee f f i c i e n tt h a ni n s l l u c t i o n st h a tb e l o n g t os i n g l e - i n s t r u c t i o n - s i n g l e - d a t as c h e m e v e r t e xc a c h em a n a g e m e n tc l a s so f t h er e n d e r i n gs y s t e m d i s c u s s e di nt h i sp a r to p t i m i z e sr e n d e r i n go fd y n a m i cu s e rd a t a t h eo p t i m i z a t i o ni sp r i m a r i l y b a s e do nt e x t u r es o r t i n g t e s tp r o g r a mf o rt h er e n d e r i n gs y s t e mo ft h eg a m ee n g i n ei sd e v i s e da n di m p l e m e n t e d t h e m a i np u r p o s eo f t h ep r o g a ma r et e s t i n gf u n c t i o n a l i t yi m p l e m e n t e d u s i n gs s e i n s t r u c t i o n si nm a t h 沈阳工业大学硕士学位论文 m o d e ls u p p o r t i n gm o d u l ea n dw o r kd o n eb yv e r t e xc a c h em a n a g e m e n tm o d u l et or e n d e rd y n a m i c u s e rd a t a k e yw o r d s :r e n d e r i n gs y s t e m ,r e d u n d a n c i 髓o fr e s o u r c e s ,s i n g l e - i n s t r u c t i o n - m u l t i p l e - d a t a ,v e r t e xc a c h e ,s o r t i n gb a s e d o i lt e x t u r e s 独创性说明 本人郑重声明:所呈交的论文是我个人在导师指导下进行的研究工 作及取得的研究成果。尽我所知,除了文中特别加以标注和致谢的地方 外,论文中不包含其他人已经发表或撰写的研究成果,也不包含为获得 沈阳工业大学或其他教育机构的学位或证书所使用过的材料。与我一同 工作的同志对本研究所做的任何贡献均已在论文中做了明确的说明并表 示了谢意。 签名: 量9 ;皮 日期: 2 0 d 7 0 1 , o 关于论文使用授权的说明 本人完全了解沈阳工业大学有关保留、使用学位论文的规定,即: 学校有权保留送交论文的复印件,允许论文被查阅和借阅;学校可以公 布论文的全部或部分内容,可以采用影印、缩印或其他复制手段保存论 文。 ( 保密的论文在解密后应遵循此规定) 签名: 量4 ;皮 导师签名:丕包兰:羔 日期: 沈阳: 业大学硕士学位论文 1 绪论 1 1 课题研究的目的和意义 1 1 1 课题研究的目的 本课题的目的就是通过对游戏引擎渲染系统的理论研究,开发出一个可以胜任3 d 游戏和3 d 应用程序渲染功能的高效的游戏引擎渲染系统并在开发实践中掌握游戏引擎 渲染系统开发的一些关键技术。这些关键技术包括如何管理贴图以高效利用主存和显 存的空间,如何管理渲染原语以提高渲染效率等等。 1 1 2 课题研究的意义 国外早在1 9 9 2 就开始了游戏引擎的研发,而国内是近几年才开始真正意义探索游 戏引擎的设计。国内外的发展水平是有很大的差距的。但是游戏引擎的设计领域还是 存在很多的问题和挑战的。比如如何提高渲染的效率,如何高效的利用显存的空间等 等。从这个角度来看在游戏引擎的设计和实现方面还是有很大的空间的。另外目前国 内游戏市场对3 d 游戏的需求是呈现增长趋势的,而且在国内游戏产业作为一个比较有 生命力的产业还是很有发展前景的。因此对游戏引擎设计方面的研究还是有很大的现 实意义的。 1 2 国内外游戏引擎发展情况 1 2 1 国外游戏引擎发展情况 1 9 9 2 年,3 dr e a l m s 公司a p o g e 公司发布德军司令部( w o l f e n s t e i n3 d ) 。这 部游戏开创了第一人称射击游戏的先河更重要的是,它在x 轴和y 轴的基础上增加 了一根z 轴,在由宽度和高度构成的平面上增加了一个向前向后的纵深空剐”。 引擎诞生初期的另一部游戏毁灭战士( d o o m ) 。d o o m 引擎在技术上大大超越 了w o l f e n s t e i n3 d 引擎,德军司令部中的所有物体大小都是固定的,所有路径之 间的角度都是直角,即玩家只能笔直的前进或后退,这些局限在毁灭战士中得到 了突破。墙壁的厚度和路径之间的角度可以为任意,这使得楼梯、升降平台、塔楼和 户外等各种场景成为可能【2 1 。 d o o m 引擎是第一个被用于授权的引擎。1 9 9 3 年底,r a v e n 公司采用改进后的 d o o m 引擎开发了一款名为投影者( s h a d o w c a s t e r ) 的游戏,这是游戏史上第一例成 功的嫁接手术。1 9 9 4 年r a v e n 公司采用d o o m 引擎开发异教徒( h e r e t i c ) ,为引擎 基于d i r e c t x 9 的3 d 游戏引擎渲染系统的研究与实现 增加了飞行的特性,成为跳跃动作的前身。1 9 9 5 年r a v e n 公司采用d o o m 引擎开发 毁灭巫师( h e x e n ) ,加入了新的音效技术、脚本技术以及一种类似集线器的关卡设 计,使游戏者可以在不同关卡之间自由移动。r a v e n 公司与i ds o f t w a r e 公司之间的一 系列合作充分说明了引擎的授权无论对于使用者还是开发者来说都是大有裨益的,只 有把自己的引擎交给更多的人去使用才能使引擎不断地成熟起来口】【4 】。 1 9 9 4 年,肯西尔弗曼为3 dr e a l m s 公司开发了b u i l d 引擎,成为一个重要的里程 碑。它具备了第一人称射击游戏的所有标准内容,如跳跃、3 6 0 度环视以及下蹲和游泳 等特性。在b u i l d 引擎的基础上先后诞生过1 4 款游戏,包括台湾艾生咨讯开发的七 侠五义,这是当时也是现在国内不多的几款3 d 射击游戏之一【5 1 。 雷神之锤( q u a k e ) 紧接着发布。q u a k e 引擎是当时第一款完全支持多边形模 型、动画和粒子特效的真正意义上的3 d 引擎,而不是d o o m ,b u i l d 那样的2 5 d 引 擎。此外,q u a k e 引擎还是网络游戏的始作俑者,是它把网络游戏带入大众的视野之 中,并促成了电子竞技产业的发展【6 】。 1 9 9 5 年,i ds o f t w a r e 公司推出雷神之锤2 ( q u a k ei i ) 。雷神之锤2 采用了 一套全新的引擎,更加充分的利用3 d 加速和o p e n g l 技术,在图像和网络方面与 q u a k e 相比有了质的飞跃 7 1 。 同时, e p i cm e g a g a m e s 公司虚幻( u n r e a l ) 面世。u n r e a l 引擎是当时使用最广 的一款引擎,在推出后的两年之内就有1 8 款游戏与e p i c 公司签订了许可协议。u n r e a l 引擎的应用范围不限于游戏制作,还涵盖了教育、建筑等其他领域。d i g i t a ld e s i g n 公 司曾与联合国科教文组织的场景文化遗产分部合作采用u n r e a l 引擎制作过巴黎圣母院 的内部虚拟演示,z e nt a o 公司采用u n r e a l 引擎为空手道选手制作过武术训练软件, v i t om i l i a n o 公司也采用u n r e a l 引擎开发了一套名为“u n r e a l i t y ”的建筑设计软件,用 于房地产的演示【8 j 。 1 9 9 8 年,v a l v e 公司采用q u a k e 和q u a k ei i 引擎的混合体制作了半条命 ( h a l f - l i f e ) 。v a l v e 公司在这两个引擎的基础上加入了两个很重要的特性:一是脚本 序列技术,这一技术可以令游戏以合乎情理的节奏通过触动事件的方式让玩家真实地 体验到情节的发展,这对于诞生以来就很少注重情节的第一人称射击游戏来说无疑是 沈阳工业大学硕士学位论文 一次伟大的革命;第二个特性是对人工智能引擎的改进,敌人的行动与以往相比明显 有了更多的狡诈,不再是单纯的扑向枪口【9 l 。 同年,l o o k i n gg l a s :工作室采用的是自己开发的d a r k 引擎推出了神偷:暗黑 计划( t h i e f :t h ed a r kp r o j e c t ) ,它在人工智能方面取得了很大的突破:游戏中的敌人 懂得根据声音辨认游戏角色的方位,能够分辨出不同地面上的脚步声,在不同的光照 环境下有不同的目力,发现同伴的尸体后会进入警戒状态,还会针对游戏角色的行动 作出各种各样的反应【1 0 1 。 从2 0 0 0 年开始,3 d 引擎朝着两个不同的方向分化,一是通过融入更多的叙事成 分和角色扮演成分以及加强游戏的人工智能来提高游戏的可玩性;二是朝着纯粹的网 络模式发展。q u a k e1 1 i 在出色的图像引擎的基础上加入了更多的网络成分,成为引擎 发展史上的一个转折点【1 1 1 。 2 0 0 1 年开始,许多优秀的3 d 射击游戏陆续发布,2 0 0 1 年问世的几部引擎依旧延 续了两年多来的发展趋势,一方面不断的追求真实的效果,另一方面则继续朝着网络 的方向探索。 不过,由于受到技术方面的限制,把第一人称射击游戏放入大型网络环境中的构 想至少在目前还很难实现。 国外对三维游戏引擎的研究主要集中在几个大公司,如3 dr e a l m s ,i ds o f t w a r e , v a l v e 等等,它们研究开发了一批优秀的三维引擎,如q u a k e ,q u a k ei i ,q u a k e1 i i , h a l f l i f c 等。是它们推动了三维游戏引擎的发展。 1 2 2 国内游戏引擎发展情况 北京航空航天大学计算机系是国内最早进行v r 研究、最有权威的单位之一,它 们首先进行了一些基础知识方面的研究,并着重研究了虚拟环境中物体物理特性的表 示与处理;针对虚拟现实中的视觉接口,开发出了部分硬件并提出了有关算法及实现 方法;实现了分布式虚拟环境网络设计,建立了网上虚拟现实研究论坛,可以提供实 时三维动态数据库,提供虚拟现实演示环境,提供用于飞行员训练的虚拟现实系统, 提供开发虚拟现实应用系统的开发平台,并将要实现与有关单位的远程连接。近期, 北京航空航天大学虚拟现实与可视化新技术研究室开发了虚拟北航校园项目,并设计 实现了虚拟环境漫游引擎。在配置v o o d 0 0 2 图形加速卡的p i l 2 6 6 微机平台上,漫游 引擎驱动了一个由1 0 万个三角形构成的北航校园模型,其交互仿真率保持在2 5 帧秒 基于d i r e c t x 9 的3 d 游戏引擎渲染系统的研究与实现 以上。为了验证漫游引擎的通用性,还先后将漫游引擎用于房地产项目虚拟恒昌花园 及虚拟珠穆琅玛峰等漫游应用中【1 2 1 1 3 1 。 浙江大学c a d & c g 国家重点实验室开发出了一套桌面型虚拟建筑环境实时漫游系 统。该系统采用了层面迭加的绘制技术和预消隐技术,实现了立体视觉,同时还提供 了方便的交互工具,使整个系统的实时性和画面的真实感都达到了较高的水平。另 外,它们还研制出了在虚拟环境中一种新的快速漫游算法和一种递进网格的快速生成 算法。浙江大学开发的虚拟紫禁城项目就是虚拟环境漫游的研究成果【1 4 1 。 四川大学计算机学院开发了一套基于o p e n g l 的三维图形引擎o b j e c t 3 d 。该系统 在微机上使用v i s u a lc + + 5 0 语言实现,其主要特征是:采用面向对象机制;与建模工具 如3 dm a x ,m u t i g e n 相结合:对用户屏蔽一些底层图形操作;支持常用三维图形显示 技术如l o d 等;支持动态剪裁技术;保持高效率。 中国地质大学分析了基于微机的三维应用程序的结构特点,提出了一个基于 o p e n g l 和d i r e c t 3 d 两种3 da p i ( 应用程序编程接口) 的三维图形引擎结构框架。该 框架己经成功应用到其开发的系统“三维城市景观浏览器m a p 3 d v i e w e r 中”,收到了 较好的效果【旧。 2 0 0 3 年,国家8 6 3 计划正式将游戏引擎的研发纳入了国家高科技发展计划,并将 研发的任务交给了金山公司。据金山负责人说,它们已经开发了一套较为完整的引 擎,并将使用在新开发的游戏中。另外近期据报道一个成都的大学生彭海涛与三个志 同道合的朋友,历时两年研发出了国内第一款真正意义上的原刨3 d 网络游戏传说 o n l i n e 。这是一款有完全自主知识产权的3 d 游戏”7 1 。 1 3 课题所做的工作 课题完成了一个比较完整的3 d 游戏引擎的渲染系统。渲染系统可以胜任3 d 游戏 的要求。 引擎的渲染系统主要包括两个部分、三个模块:第一部分为用于碰撞检测的数学 模型支持模块,第二部分为实现渲染的贴图和材质管理模块和渲染原语管理模块。 数学模型支持模块:此模块包括碰撞检测所需要的数学模型类。包括:向量类, 矩阵类,射线类,平面类,包围盒类。 贴图和材质管理模块:此模块提供贴图的管理。 沈阳工业大学硕士学位论文 渲染原语管理模块:此模块提供渲染原语的管理。 本课题的创新点有三点: 首先,渲染系统的实现使用了一种独特的机制。它不同于一般渲染系统所使用的 c o m 接口机制而且要比一般的c o m 接口的机制实现要简单。 其次,渲染系统使用s s e 指令来实现数学模型类的相关功能。这种单指令流多数 据流的指令可以大大加快四维向量的处理。 最后,渲染系统的顶点缓存管理类加入了对用户动态数据处理的渲染函数。这个 渲染函数根据用户数据所使用的贴图或是材质的不同对用户数据进行分类并进行缓存 批处理从而提高了渲染动态数据的效率。 基于d i r e c t x 9 的3 d 游戏引擎渲染系统的研究与实现 2 游戏引擎渲染系统相关技术 2 13 d 建模 3 d 建模是游戏引擎渲染系统所涉及的关键技术之一。3 d 场景中的物体被储存成 一系列点,彼此之间有相互关系。比如一个立方体由8 个点组成,每个角一个点。这 就是3 d 对象储存的基础。对于一些比较复杂的3 d 物体,比如说一个q u a k e 的关 卡,它一般由数以千计的顶点和数以千计的多边形表面所组成。模型和场景如何储存 是渲染系统的一部份功能,而不属于应用程序的功能。游戏逻辑不需要知道对象在内 存中如何表示,也不需要知道渲染系统将怎样把它们显示出来。游戏只需要知道渲染 系统会正确地表示对象,并会在正确的帧中把模型显示出来f l s l 。 除了使用坐标系统,还有其他方法可以在计算机内存里表示空间的点。在数学 上,可以使用一个方程式来描述直线或曲线,并得到多边形,而几乎所有的3 d 显示 卡都使用多边形来作为它们的最终渲染原语。一个原语就是在任何显示卡上面所能使 用的最低级的渲染单位。几乎所有的硬件都是使用三个顶点的多边形。新一代的 n v i d i a 和a t i 显卡可以允许渲染高次表面【1 9 】。 2 2 剔除概观 剔除是渲染系统所必须使用的关键技术。假如现在有一个由几十万个多边形描述 的场景。以第一人称视角位于这个3 d 场景的一边。在视野中可以看见场景的一部分, 而另外一些则不可见,因为一些物体,遮挡住了它们。即使是最好的游戏编码人员, 在目前的3 d 显卡上,在一个视野中也不能处理3 0 0 0 0 0 个三角形并仍然将游戏的帧数 维持在6 0 f p s ( 帧每妙) 。显卡无法处理这么大的工作量,因此必须写一些代码,在把 它们交给显卡处理之前除去那些看不见的多边形。这个过程被称为剔除1 2 0 1 。 有许多不同的剔除方法。最简单的剔除方式就是把场景分成区域,每个区域有一 个可见区域的列表。这样在渲染的时候就只需要显示任何给定点的可见区域就可以 了。生成可见区域的列表是一个比较复杂的工作。有许多方法可以用来生成可见区域 列表,如b s p 树,窥孔等等。b s p 是一种将场景分成小区域的的方法,通过组织场景 的多边形,容易确定哪些区域是可见的而哪些是不可见的,从而方便了那些无法做大 量绘制工作的渲染系统。在基于窥孔的引擎里,每个区域都有自己的模型,通过每个 沈阳工业大学硕士学位论文 区域的门能够看见另外的区域。渲染系统把每个区域作为独立的场景单独绘制。这就 是它的大致的工作原型硼。 2 3 基本的图形管线流程 图形管线过程大致是这样:游戏决定在游戏中有哪些对象、它们的模型、使用的 贴图、他们可能在哪一动画帧、以及它们在游戏场景里的位置。游戏也决定照相机的 位置和方向。游戏把这些信息传递给渲染系统。以模型为例,渲染系统首先要查看模 型的大小,照相机的位置,然后决定模型在屏幕上是否全部可见,是在观察者的左 边,还是在观察者的后面,或是距离很远而不可见。它甚至会使用一些测定方式来计 算出模型是否是可见的。场景可视化系统决定照相机在场景中的位置,并根据照相机 视野决定场景的哪些区域是可见的i 2 1 l 。 对于每一个被传递给渲染系统的多边形,渲染系统依照转换矩阵对多边形进行变 换,并检查多边形是不是背对相机。背面的多边形被丢弃。非背面的多边形由渲染系 统渲染。然后渲染系统要看多边形使用的贴图,并且确定图形卡正在使用哪种贴图作 为它的渲染基础。多边形被送到渲染a p i ,然后再送给显卡。通常会把所有的多边形” 放到一些列表内,然后根据贴图对这个列表排序。在过去,会把多边形按照它们到相 机的距离进行排序,首先绘制那些距离相机最远的多边形。现在由于z 缓冲的出现, 这种方法就不是那么重要了。当然那些透明的多边形要除外,它们要在所有的非透明 多边形绘制之后才能够绘制,这样一来,所有在它们后面的多边形就能正确地在场景 中显现出来。当然必须得从后到前地绘制那些多边形。但在任何给定的f p s 游戏场景 中,没有太多透明的多边形。它可能看起来像有,但实际上与那些不透明的多边形相 比,其比率是相当低的。一旦应用程序将场景传递到a p i ,a p i 就能利用硬件加速的变 换和光照处理( t & l ) 。对于每个点或顶点都有大量的计算,包括裁剪运算,这些运算决 定任何给定的多边形实际上是否可见,在屏幕上完全不可见或部分可见。光照运算和 计算贴图色彩明亮程度,取决于场景的灯光从什么角度如何投射到顶点上。在过去, 这些运算由处理器承担。但现在,显卡上的图形处理器就完成这些工作,这意味着处 理器可以去做其他的工作了。课题所实现的引擎展现了图形管线流程的全过程【2 l l 。 基于d i r e e t x 9 的3 d 游戏引擎渲染系统的研究与实现 2 4 曲面片模型 除了三角形,曲面片的使用现在正变得更普遍。因为他们能用数学表达式来描述 某种曲线的几何形体,而不仅仅只是列出大量的多边形以及在游戏场景中的位置,所 以曲面片是一种理想的模型。这样就能够动态地根据方程式来建立多边形网格,并决 定实际想要从曲面片上看到的多边形数量。事实上现在的a t i 显卡具有t r u f o r m ,它 能接受一个以三角形为基础的模型,并将该模型转换为基于高次表面的模型,使其平 滑,接着再用十倍三角形数量把模型转换回基于大量三角形的模型( 被称为 r e t e s s e l a t i o n ) 。然后将模型送往管线做进一步的处理。实际上a t i 仅仅在t & l 引擎之 前增加了一个阶段来处理这个过程。它的缺点是,要控制哪些模型需要被平滑处理而 哪些又不需要。然而这仍然是一种比较好的技术,而且将来会得到广泛的应用的。课 题所实行的渲染系统包括了对曲面片的支型2 2 1 。 2 5 贴图 如果想要在屏幕上显示3 d 模型,模型所包含的多边形越少,对于每个模型所要完 成的计算就越少,在屏幕上显示它的时间就越少。举个例子,如果程序想显示一面表 面凸凹不平的墙,不能把墙的每一个凸凹不平的地方都用多边形来细致刻画。最可行 的方案就是用单独一个多边形来描述墙面,然后用一个凸凹不平墙的贴图文件来模仿 墙的真实效果。贴图就是一个2 d 的图像。如果渲染一个被贴图的多边形,图形适配器 就根据组成多边形的每个投影像素的贴图坐标来确定贴图文件的对应位置。然后从计 算出来的位置取出颜色值,并使用经过光照处理的这个颜色值并把它显示在屏幕上。 就用这种方法贴图可以在一个原本空白的平面上去模仿许多的细节。课题所实现的渲 染系统使用实现贴图管理的相关功能 2 3 1 。 2 6 多重贴图与凹凸映射 单一贴图映射能够带来很明显的3 d 真实感,使用多重贴图甚至可以使真实感更加 明显。过去想要实现这样的真实感需要多遍渲染,严重影响了像素填充率。但许多具 有多图形管线3 d 加速卡,如a t l 。sr a d e o n 和n v i d i a sg e f o r c e2 及更高级的显卡,多 重贴图可以在一遍渲染过程中完成。多重贴图效果是这样产生的:先用一个贴图绘制 沈阳工业大学硕士学位论文 多边形,然后再用另外一个贴图透明地绘制在多边形上面。多重贴图可以使贴图看上 去在移动,甚至产生阴影效果2 4 l 。 凹凸贴图是最近涌现出来的一种技术。几年以前m a t r o x 第一个在流行的3 d 游戏 中发起使用各种不同形式的凹凸贴图。凹凸贴图就是产生贴图来表现灯光在表面的投 射,表现表面的凹凸或表面的裂缝。课题所实现的渲染系统加入了对凹凸贴图的支持 2 4 1 1 2 5 1 。 2 7 显卡高速缓存的抖动问题 贴图高速缓存的管理对于游戏引擎的速度至关重要。贴图在图形显示卡内存被频 繁地换入换出的情况就被称作贴图高速缓存抖动。这种情况时,通常a p i 将会废弃每 个贴图,结果导致所有的贴图在下一帧将被重新加载。通常这是一个很耗时的操作。 对游戏玩家来说,当a p i 重新加载贴图到高速缓存时,会导致帧速率急剧下降【2 6 l 。 在贴图高速缓存管理中,有各种不同的技术减少贴图高速缓存的抖动。这是确保 任何3 d 游戏引它擎速度的一个决定性因素。贴图管理确保显卡只使用贴图一次,而不 是重复使用。这意味着如果所有这些多边形全部使用同一个贴图,显卡仅仅加载这个 贴图一次。这阻止a p i 往显卡加载贴图。o p e n g l 本身处理贴图高速缓存管理。根据 诸如贴图存取的频率等规律,a p i 决定哪些贴图储存在显卡上,哪些贴图存储在主 存。另外一种贴图高速缓存管理技术是贴图压缩。很像声音波形文件被压缩成m p 3 文 件。尽管无法达到那样的压缩比率,贴图压缩的效率仍然很显著。声音波形文件压缩 到m p 3 的压缩比可以达到1 1 :l 。而绝大多数硬件支持的贴图压缩运算法只有4 :1 的压 缩比率。尽管如此,这样能产生的效率提升仍然很明显。除此之外,在渲染过程中, 只有在需要时,硬件才动态地对贴图进行解压缩。课题所实现的渲染系统的贴图和材 质管理模块的实现考虑了减少显卡高速缓存抖动1 2 6 1 。 2 8 光照和材质 作为增加场景真实感的组件之一就是光照。如果没有光照,游戏程序就会像那些 比较老的游戏一样,很没有吸引力。在计算机图形学中,有两种光源,环境光光源和 直接光光源。环境光光源存在于3 d 场景中的任何一点。它在各个方向上有着相同的强 度。在自然界中,光经过空间中它碰到的每个物体的反射,使每个物体自己都成为发 光体,这就是环境光的来源。直接光源可以分成三类:一类是平行光源,一类为点光 基于d i r e e t x 9 的3 d 游戏引擎渲染系统的研究与实现 源,再一类是聚光灯光源。来自距离很远的光源的光叫做平行光源。因为观察者离光 源太远,光线已经走了很远的距离,所以可以认为所看见的光线都是互相平行的。这 种光源的光照计算是对光照计算的最大的简化,因为可以认为场景中的每一个物体都 是被同一个光向量所照亮的。光在角度,强度和颜色方面没有任何变化。点光源就是 将在空间中一点当作光源。这种光源的特点是发光点在各个方向上光的强度是均等 的。如果想计算基于这个点光源的光照,就只需知道光源的位置、光的颜色和强度。 点光源以不同的强度照亮平面的每一点,这是由于每个点和光源所成的角度不同的原 因。最复杂的一种光要属聚光灯光源了。它也是在技术领域中常见被使用的一种光 源。聚光灯光源和点光源很类似,但是聚光灯光源有一定的限制,它只能在一个小的 角度内发光。要定义一个聚光灯,需要定义很多参数值。首先,需要光源的位置、颜 色和光的强度。然后也必须知道聚光灯发射光线的方向。这和平行光源和点光源不 同,这两种光源分别知道光源的方向和光源的位置就可以了。最后还必须定义一个光 线可以从中产生的圆锥体。实际上,需要定义两个这样的圆锥体。课题所实现的渲染 系统实现了对光照的处理【2 7 1 1 2 8 1 。 材质决定一个物体如何处理照在它表面的光。材质是一个结构体,它定义了一些 描述表面如何受光照影响的一些属性。结构体包含用来描述粗糙表面一般反射的环境 光属性和一个散射光属性,还包括一个用来描述光滑表面反射的平行光属性。材质结 构体可以用在渲染当中。这个材质结构体定义了物体反射某一个特定类型光的百分 比。课题所实现的渲染系统实现了对材质处理【2 7 1 1 2 8 l 。 2 9 雾化效果和抗锯齿 如今绝大多数的引擎都能处理雾。因为雾可以让远处的场景慢慢在视野中消失, 所以当模型和场景进入视觉范围内时,观察者就不会觉得那些物体是突然出现的。有 一种称为体雾的技术。这种雾不是随物体离观察者的距离而定,它实际上是一个能看见 的真实对象。观察者可以从中穿越。当穿越体雾的时候,雾的可见程度随着变化。体 雾的一个比较好的例子是q u a k e l l i - - 些关卡中的红色雾。课题所实现的渲染系统支持 雾化效果的处理 2 9 1 30 1 。 当渲染单个多边形时,3 d 显卡仔细检查已经渲染的多边形,并对新的多边形的边 缘进行柔化。这样就不会得到明显可见的锯齿形的像素边缘。抗锯齿通常有两种技 沈阳工业大学硕士学位论文 术第一种方法是单个多边形级别的抗锯齿,需要按照从后面到前面的顺序渲染多边 形,这样每个多边形都能和它后面的多边形进行适当的混合如果不按序进行渲染, 最后会出现锯齿效果。在第二种方法是使用比实际显示分辨率更大的分辨率来渲染每 一帧。在缩小图像输出时,尖锐的锯齿形边缘就混合消失了。第二种方法的结果很理 想,但因为显卡需要渲染比实际结果帧更多的像素,所以需要大量的内存资源和很高 的内存带宽。课题所实现的渲染系统中加入抗锯齿的处理f 3 1 1 1 3 2 1 。 2 1 0 深度测试 深度测试帮助渲染系统丢弃隐藏的像素,从而防止过度绘制。过度绘制就是在一 帧中数次绘制一个像素位置。它以3 d 场景z 方向上存在的元素数量为基础,也被称 为深度复杂度。如果渲染系统使用了过多的过度绘制,就必须调整,因为它根本不能 处理这样的负荷。如不调整,就会影响游戏的帧数f 3 3 】刚。 深度测试是一种用来决定在相同的像素位置上哪些对象在其它对象前面的一种技 术。深度测试能够避免绘制那些隐藏的对象。另外深度测试可以帮助提高帧速率。例 如,在一个很复杂的场景中,有大量的多边形中的点重叠在同一像素的位置上。渲染 这样的场景要首先对非a l p h a 混合的多边形分类排序。从前到后绘制,优先使用距离 最近的像素填充屏幕。所以当要渲染它们后面的像素( 由z 或者深度测试决定) 时, 这些像素很快被丢弃,从而避免了混合步骤并节省了时间。如果从后到前绘制,所有 隐藏的对象将被完全绘制,然后又被其他对象完全重写覆盖。场景越复杂,这种情况 就越严重,所以深度测试可以大大提高渲染效率。课题所实现的渲染系统的快速渲染 得益于深度测试1 1 3 4 1 。 2 1 1 着色 顶点颜色值的确定主要有两种方法g o u r a n d 着色和p h o n e 着色。 在g o u r a u d 着色中,渲染引擎给每个顶点赋予特定的颜色。在绘制多边形上各点 投影所对应的像素时,根据它们与各顶点的距离,对这些顶点的颜色进行插值计算。 q u a k ei i i 模型使用的就是这种方法 3 5 l 。 另一种方法就是p h o n g 着色。这种方法和g o u r a u d 着色方法相同,也是通过贴图 来确定各像素颜色值。但这种方法不对每个顶点颜色进行插值决定像素颜色值。它对 每个顶点的法向量进行插值,并对每个顶点投影的像素做相同的工作。对于g o u r a u d 基于d i r e c t x 9 的3 d 游戏引擎渲染系统的研究与实现 着色,只需要知道哪些光投射在顶点上。但是对于p h o n g 着色,对每个像素也要知道 相同的信息【3 5 】。 p h o n g 着色可以得到更加平滑的效果,因为每个像素都需要进行光照计算。但是 其绘制非常耗费时间。g o u r a n d 光照处理方法很快速,但比较粗糙。p h o n g 着色比 g o u r a u d 着色需要的计算量更大,但是效果最好p ”。 2 1 2 顶点与像素着色器 顶点着色器是一种直接使用显卡硬件特征而不使用a p i 的技术。举例来说,如果 显卡支持硬件t & l ,就可以用d i r e c t x 或o p e n g l 编程,并使要渲染的顶点经过t & l 单元的处理,或者直接利用显卡硬件使用顶点着色器。它们允许根据显卡自身特征进 行特别编码而不使用显卡硬件固化的管线来处理顶点。事实上,现在n v i d i a 和a t i 在他们大量的显卡上都提供了这个特征。但是显卡之间表示顶点着色器的方法并不一 致。不能像使用d i r e e t x 或者o p e n g l 那样,为顶点着色器编写一次代码就可以在任 何显卡上运行。然而,因为直接和显卡硬件交流,它为快速渲染顶点着色器可能生成 的效果提供最大的保证。事实上,顶点着色器正将3 d 图形显示卡带回到游戏机的编码 方式,直接访问硬件,最大限度利用系统的资源,而不是依靠a p i 来做一切。更进一 步说,顶点着色器是一些在顶点被送到显卡渲染之前计算并产生顶点的特殊效果的程 序或者例程。像素着色器是那些当绘制贴图时在逐个像素上被执行的例程【3 6 1 1 3 7 1 。 2 1 3s i m d 技术 s i m d ( s i n g l ei n s t r u c t i o nm u l t i p l ed a t a ) 。单指令流多数据流,这是弗莱恩分类法 中的一种计算机体系结构。名字本身已经很清楚的表明了s 1 m d 的用途和它是怎么提 高性能的。一般来讲,对于一个汇编语言程序,处理器是按照线性序列处理数据并在 数据上执行指令的。每个c p u 周期执行一条指令或是一条复杂指令的一部分。所以如 果想要提高处理速度就必须提高c p u 的时钟周期。另一种提高速度的方法就是改变以 往的一条指令处理一个数据的模式,而是在一条指令中对多个数据进行并行操作。正 如s i m d 名称所揭示的那样,这种指令就是这样处理数据的。s i m d 的一条指令可以同 时对多个数据进行操作。按照一般的理解s i m d 指令可能是同时对多个寄存器进行操 作。但是实际上并不是这样的。s i m d 指令也是只对一个寄存器进行操作的,但是和以 沈阳工业大学硕士学位论文 往的指令不同的是这个寄存器中并不是一组数据而是多组数据。s i m d 指令所使用的寄 存器并不是传统的3 2 位的寄存器,它所使用的寄存器的位宽要比3 2 大。s i m d 就像处 理一个数组一样,可以对数组中的元素在同一个c p u 周期进行并行操作。举个例子, 假如需要一个三个3 2 位的浮点数来表示一个向量。这个向量需要一个9 6 位的s i m d 寄存器来存储。如果用传统的汇编语句,这个向量需要用三个3 2 位的寄存器来存储。 现在想要进行两个向量相加。如果是用传统的汇编语句实现的话,需要用六个寄存器 去存储两个待相加的向量而且需要用三个汇编指令去计算三个分量相加的结果。但是 如果使用s i m d 指令的话,只需要两个寄存器和一条指令。向量的三个分量可以被并 行处理。s i m d 支持几乎所有的3 d 游戏程序所需要的计算操作,如向量的加、减、 乘、平方根运算等等。模块中所使用的s l m d 指令主要是i n t e l 的s s e 指令3 8 1 。 2 1 4s s e 技术 2 1 4 1s s e 概述 i n t e l 在它的p e n t i u mi i ip r o c e s s

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论