(计算机软件与理论专业论文)三维fps游戏渲染系统的研究.pdf_第1页
(计算机软件与理论专业论文)三维fps游戏渲染系统的研究.pdf_第2页
(计算机软件与理论专业论文)三维fps游戏渲染系统的研究.pdf_第3页
(计算机软件与理论专业论文)三维fps游戏渲染系统的研究.pdf_第4页
(计算机软件与理论专业论文)三维fps游戏渲染系统的研究.pdf_第5页
已阅读5页,还剩63页未读 继续免费阅读

下载本文档

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

文档简介

浙江大学硕士学位论文三维f p s 游戏渲染系统的研究 w i t h c o m p m o d e p h i s 1 c a 1 n g c a l a b s t r a c t t h ec o n s t a n td e v e l o p m e n t ,c u r r e n tg a m ee n g i n eh a sb e c o m ea t e ds y s t e mc o n s i s t so f 皿a n ys u b s y s t e m s , w h i c hi n v o l v i n g ,a n i m a t i o n ,l i g h t i n g ,p a r t i c l es y s t e m , a n da l s oi n v o l v i n g s y s t e m ,c o l l i s i o nd e t e c t i o n ,f i l em a n a g e r ,n e t w o r k a t t r i b u t e s ,e v e np r o f e s s i o n a le d i t a lt o o l sa n dp l u g i n sa r ei n v o l v i n gt o o t h e r e f o r e ,t h e r ea r eh i g h e rr e q u i r e m e n t st ot h er e a l t i m er e n d e r i n gs y s t e m , w h i c hi st h ec o r ep a r to ft h e3 df p sg 硼ee n g i n e a sar e s u l t ,t h et e c h n i c a l 1 e v e lo far e n d e r i n gs y s t e mi i n p l i e sw h i c ho ft h eg a m ei t s e l f f i r s t l y , t h i sa r t i c l ew i l ld i s c u s sa b o u tt h eg r a p h i cp i p e l i n e , a n d t h e nc o m e st ot h ea r c h i t e c t u r eo fr e n d e r i n gs y s t e m a tl a s t ,s o m eo ft h e c o r em o d u l e si n c l u d i n gr e n d e r i n ga p i sa b s t r a c t i o n ,r e s o u r c em a n a g e ra n d s c e n eg r a p hm a n a g e rw i l lb ed e s i g n e d t h em o s ti m p o r t a n to n ei nt h e s et h r e e i ss c e n eg r a p hm a n a g e r ,w h i c hi st h e “f r o n t e n d ”d a t am a n a g e m e n ts y s t e m t h a tp r o v i d e sp o t e n t i a l l yv i s i b l ed a t at ot h e “b a c k e n d ”r e n d e r i n g s y s t e m ,b e c a u s et h er e n d e r i n ge f f i c i e n c yo fa3 dg a m ed e p e n d sh e a v i l yo n t h ed e s i g na n do r g a n i s a t i o no ft h es c e n eg r a p hm a n a g e r i na d d i t i o n ,t h es y s t e md e s i g ni sb a s e do no b j e c t o r i e n t e dd e s i g na n d p e r f o r m e dm a n yc l a s s i c a ld e s i g np a t t e r n so ni t s o m ee x t e n d a b l ea n d m a i n t a i n a b l ea n du s e rc u s t o m i z a t i o ni s s u e sa r ei n v o l v e dd u r i n gt h es y s t e m d e s i 足n k e y w 。r d s :f i r s tp e r s o ns h o o t i n g3 dg a m e ,r e n d e r i n gs y s t e ,s c e n eg r a p h , d e s i g np a t t e r n ,b i n a r ys p a c ep a r t i t i o n ( b s p ) , p o t e n t i a l l yv i s i b l e s e t s ( p v s )r o a m ( r e a l 一t i m eo p t i m a l l ya d a p t i n gm e s h e s ) 3 浙江大学硕士学位论文三维f p s 游戏渲染系统的研究 第1 章绪论 1 1 三维游戏引擎概况一历史和现状 1 1 。l 什么是游戏引擎 简单地说,游戏引擎就是用于控制所有游戏功能的主程序,具体功能从计算 碰撞、物理系统和物体的相对位置,到接受玩家的输入,以及正确地输出画面声 音等等。经过不断的进化,如今的游戏引擎已经发展为一套由多个子系统共同构 成的复杂系统,从建模、动画到光影、粒子特效,从物理系统、碰撞检测到文件 管理、网络特性,还有专业的编辑工具和插件,几乎涵盖了开发过程中的所有重 要环节,以下就对引擎的一些关键部件作一个简单的介绍。 物理系统物理系统确保物体的运动遵循固定的规律,例如,当角色跳起的 时候,系统内定的重力值将决定他能跳多高,以及他下落的速度有多快,子弹的 飞行轨迹、车辆的颠簸方式等等。 碰撞检测碰撞检测是物理系统的核心部分,它可以检测游戏中各物体的物 理边缘。当两个3 d 物体撞在一起的时候,这种技术可以防止它们相互穿过,这 就确保了当物体撞在墙上的时候,不会穿墙而过,也不会把墙撞倒,因为碰撞探 测会根据物体和墙之间的特性确定两者的位置和相互的作用关系。 动画系统目前游戏所采用的动画系统可以分为两种:一是骨骼动画系统, 一是模型动画系统,前者用内置的骨骼带动物体产生运动,比较常见,后者则是 在模型的基础上直接进行变形。引擎把这两种动画系统预先植入游戏,方便动画 师为角色设计丰富的动作造型。 渲染系统这是游戏引擎最重要的功能之一,当3 d 模型制作完毕之后,美 工会按照不同的面把材质贴图赋予模型,这相当于为骨骼蒙上皮肤,最后再通过 渲染引擎把模型、动画、光影、特效等所有效果实时计算出来并展示在屏幕上。 渲染引擎在引擎的所有部件当中是最复杂的,它的强大与否直接决定着最终的输 出质量。渲染系统也正是本文要研究的对象。 通信系统 负责玩家与电脑之间的沟通,处理来自键盘、鼠标、摇杆和其它 浙江大学硕士学位论文三维f p s 游戏渲染系统的研究 外设的信号。如果游戏支持联网特性的话,网络代码也会被集成在引擎中,用于 管理客户端与服务器之间的通信。 1 1 2 引擎的历史 约翰卡马克( j o h n c a r m a e k ) 是三维f p s 游戏引擎之父。1 9 9 2 年,天极 ( a p o g e e ) 公司发布了一款名为德军司令部( w o l f e n s t a i n3 d ) 的游戏,这 款游戏可以况是一个革命,它开启了第一人称射击( f p s ) 游戏的先河。它在x 轴 和y 轴的基础上增加了一根z 轴,在由宽度和高度构成的平面上增加了一个向前 向后的纵深空间,这根z 轴对那些看惯了2 d 游戏的玩家造成的巨大冲击可想而 知。 游戏引擎的作者正是当时i d 软件公司的首席程序员,年仅2 l 岁的卡马克。 引擎诞生初期的另一部重要游戏同样是出自i d 软件公司的一款非常成功的第一 人称射击游戏毁灭战士( d o o m ) 。d o o m 引擎在技术上大大超越了 w o l f e n s t e i n3 d 引擎,德军司令部中的所有物体大小都是固定的,所有路径 之间的角度都是直角,也就是说你只能笔直地前进或后退,这些局限在毁灭战 士中都得到了突破。尽管游戏的关卡还是维持在2 d 平面上进行制作,没有“楼 上楼”的概念,但墙壁的厚度可以为任意,并且路径之间的角度也可以为任意, 这使得楼梯、升降平台、塔楼和户外等各种场景成为可能。但是d o o m 引擎在本 质上仍然是二维的。 在引擎的进化过程中,肯西尔弗曼( k e n s i l v e r m a n ) 于1 9 9 4 年为3 dr e a l m s 公司开发的b u i i d 引擎是一个重要的里程碑。毁灭公爵( d u k en u k e m3 d ) 就 是用这个引擎实现的。毁灭公爵已经具备了今天第一人称射击游戏的所有标准 内容,如跳跃、3 6 0 度环视以及下蹲和游泳等特性。但是b u i l d 仍然不是真正意 义上的三维引擎,突破最终还是由卡马克的i d 软件公司的雷声之锤( 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 引擎还是 连线游戏的始作俑者,尽管几年前的毁灭战士也能通过调制解调器连线对战, 但最终把网络游戏带入大众的视野之中的是雷神之锤,是它促成了电子竞技 浙江大学硕士学位论文三维f p s 游戏渲染系统的研究 产业的发展。一年之后,i ds o f t w a r e 公司推出雷神之锤2 ,一举确定了自己 在3 d 引擎市场上的霸主地位。雷神之锤2 采用了一套全新的引擎,可以更充 分地利用3 d 加速和o p e n g l 技术,在图像和网络方面与前作相比有了质的飞跃。 有大量的游戏使用了q u a k e 2 引擎,如r a v e n 公司的原罪( s i n ) 的等等。这 个时期还出了另一款非常优秀的引擎,那就是e p i c 公司的虚幻( u n r e a l ) 引擎, 这个游戏引擎从画面效果上超过了q u a k e 2 ,是当时的佼佼者。 从2 0 0 0 年开始3 d 引擎朝着两个不同的方向分化,一是如半条命、神偷 和杀出重围那样通过融入更多的叙事成分和角色扮演成分以及加强游戏的人 工智能来提高游戏的可玩性,二是朝着纯粹的网络模式发展,在这一方面,i d 软 件公司再次走到了整个行业的最前沿,他们意识到了对战有着巨大的娱乐性,于 是在q u a k ei i 出色的图像引擎的基础上加入更多的网络成分,破天荒推出了一 款完全没有单人过关模式的纯粹的网络游戏雷神之锤3 竞技场 ( q u a k ei i i a r e n a ) ,它与e p i c 公司稍后推出的虚幻竞技场( u n r e a lt o u r n a m e n t ) 一同 成为引擎发展史上的一个转折点。 1 1 3 引擎的现状 游戏引擎的历史是不断追求真实效果的历史,例如m a x f x 引擎追求画面的 真实,g e o m o d 引擎追求内容的真实,还有一些游戏在追求人工智能方面的真实 性。一个完整的游戏引擎需要包含的内容实在是太多了。 另一方面,游戏引擎也在不断进行着网络方向的探索,不过,由于受到技术 方面的限制,把第一人称射击游戏放入大型网络环境中的构想至少在目前还很难 实现。一般的大型网络游戏多为节奏较慢的角色扮演游戏( 删o r p g ) 。 本文研究的是f p s 游戏的渲染系统,目前的f p s 游戏在许多方面都有了很多 新的突破,主要包括以下几点:首先,动作创新上有所突破,或者说有了更好的 图象质量,游戏本身大量的问题都是关于多边型的数量、帧频比率还有图象引擎。 更多真实的图象,丰富的细节特写还有改进的粒子特效才能使得玩家取得更好的 游戏体验;其次,实现可破环的场景,令f p s 游戏不够真实的一个方面就是虚拟 场景。尽管有可以被摧毁的物件,但整个游戏世界是静止的,所以激战对他们几 浙江人学硕士学位论文三维f p s 游戏渲染系统的研究 并行特性,使得g p u 的运算能力不断提高。 1 3 三维游戏引擎的渲染系统 正如上文所提到的,渲染系统是三维游戏引擎最重要的功能之一,其实现的 好坏将直接影响游戏的表现力和质量。渲染系统的主要目的简单地说就是要把游 戏场景显示到屏幕上,三维物体是以顶点的形式储存在系统中的,当然,除了这 些几何数据,还有光照、材质、纹理等其它数据。渲染系统的目的是要尽可能高 效真实地把它们显示出来。可以将渲染系统按照功能划分为以下几个部分: 可见裁减( v i s i b i l i t y ) 、碰撞检测与反馈( c o l l i s i o nd e t e c t i o na n d r e s p o n s e ) 、摄像器( c a m e r a ) 、静态几何体( s t a t i cg e o m e t r y ) 、动态几何体 ( d y n a m i cg e o m e t r y ) 、粒子系统( p a r t i c l es y s t e m s ) 、布告板( b i l l b o a r d i n g ) 、 网格( m e s h e s ) 、天空体( s k y b o x ) 、光线( l i g h t i n g ) 、雾( f o g g i n g ) 、节点阴 影( v e r t e xs h a d i n g ) 和输出( o u t p u t ) 。其中每一个部分都应该有接口来方便 地实现改变设置( s e t t i n g s ) 、位置( p o s i t i o n ) 、方向( o r i e n t a t i o n ) 以及其 他可能与系统相关的属性配置。 目前三维游戏引擎可以说已经发展到比较成熟的阶段了,已经有了很多商用 或者开源的游戏引擎渲染引擎。如比较流行商用引擎有t o r q u eg a m ee n g i n e , 3 d g a m e s t u d i o ,r e a l i t ye n g i n e 等等;而比较著名的开源引擎有 o g r e ( o b j e c t o r i e n t e dg r a p h i c sr e n d e r i n ge n g i n e ) ,i r r l i c h t ,c r y s t a ls p a c e 等等。其中o g r e ( 面向对象的图形渲染引擎) 是用c + 十开发的面向场景且使用灵 活的3 d 引擎。它的目的是让开发者能更方便和直接地开发基于3 d 硬件设备的应 用程序或游戏。引擎中的类库对更底层的系统库( 如:d i r e c t 3 d 和o p e n g l ) 的 全部使用细节进行了抽象,并提供了基于现实世界对象的接口和其它类。 1 4 研究目标 设计一个三维f p s 游戏的渲染系统是一项相当大的工程,本文的研究目标并 不是要完整地实现一个渲染系统,而是想通过对已有的渲染系统的研究,得出一 浙江大学硕士学位论文三维f p s 游戏渲染系统的研究 2 2 2 场景的组织和管理 场景的组织结构是渲染系统最基础和最重要的部分,也是一个实现的难点。 它的决定会决定很多后续的工作,如碰撞检测,消隐,阴影等。 首先要涉及到的概念是空间细分,空间细分考虑整个物体空间并且根据物体 的空间占有( o b j e c to c c u p a n c y ) 对空间中的每一个点进行分类。可以把世界空间 中的物体细分为立方体素( v o x e l ) ,再对体素进行分类。八叉树( o c t r e e ) 是一 种描述三维空间的树状数据结构,它可以描述一个三维场景内物体的分稚情况, 并简单地将体素安排在层次结构中。 因此场景管理可以在预处理的时候建立一棵树,这里可以忽略物体的表示方 法,而把焦点集中在场景的划分上。在树建立起来之后,通过实时遍历这棵树来 发现是否有两个物体占据了同一个空间而发生冲突,或者一个物体的空间是否不 在视见约束体之内。这样,所有筛选等操作都可以简化为对树的遍历,这是一个 线形时间的操作。 另一种表示场景的数据结构是b s p 树,它被广泛应用于室内场景的处理中, 它使用一个分离面( s p l i t t i n gp l a n e ) 对每一层一分为二,从而实现对空间的 划分,其中用于分割的平面可以出现在任何方位。b s p 的想法最早在f u c h s ( 1 9 8 0 ) 中被提出,起初的目的是为了解决实时地消除隐藏面。b s p 可以说是八叉树的一 般化。前人在这方面已经做了很多有效的工作,f u c h s 首次将b s p 技术中剖分平 面的定侧性质应用于多边形场景的剖分,建立起空间二叉树结构该二叉树的每 一结点表示一个子空间及空间内所包含的多边形。在每一结点空间中,选取其中 一平面作为剖分平面,将该空间继续剖分成正负两子空间,分别作为该结点的两 个子结点,其中与剖分平面有交的多边形被分割成两个多边形,分别归入相应的 子空间中。上述过程是一个递归过程,直至每一子空间仅包含一个多边形为止 与八叉树剖分相比,b s p 树具有内存耗费小,剖分方式灵活,产生的无效区域较小 的优点:且对大部分场景来说,b s p 树较八叉树更为平衡。 另外,由于是二分空间,因此方向性很强,在判断上要比八叉树容易,既可 以代替z b u f f e r 解决遮挡问题,因为b s p 是可以确定物体的绘制顺序的,按照 这个顺序就可以保证没有z b u f f e r 也能够显示正确,还可以方便地执行碰撞检 测。 浙江大学硕士学位论文三维f p s 游戏渲染系统的研究 2 3 可视性处理 不渲染场景中不可见的面可以大幅度地提高渲染速度,特别是在大规模的场 景当中。就是在硬件加速技术飞跃发展的今天,虽然现在已经可以完成许多在过 去被认为是不可能实现的工作,但是对于隐藏面进行剔除仍是加速图形渲染的一 项重要技术。通常当一个游戏运行的时候,它最少需要以每秒3 0 帧的速度运行, 在几年前这使得如果每一帧渲染的带纹理的多边形数量超过5 0 0 0 个就会被认为 是不可接受的,而现在几乎所有的商业显卡每一秒都可以渲染几千万个多边形。 但是现在仍然需要使用隐藏面剔除这项技术,因为对于不可见物体渲染以后将会 被可见物体遮挡住,这样做无谓地浪费了显卡的带宽,尽管同时它也增加了场景 的细节,使游戏画面看起来更加吸引人。现在的问题是多大程度上来剔除隐藏的 多边形,象v f c ( v i e wf r u s t u mc u l l i n g ) 和p o r t a l 渲染这样的技术来剔除一 个不可见多边形是非常耗费时间的,用来去做这些计算的c p u 时间可以用来完成 其它诸如a i 或碰撞检测这样的工作,因此开发一个隐藏面剔除算法必须注意到 这一点。对于现在的游戏来说几乎没有一个是将每一个隐藏的多边形都进行剔 除,而是剔除一个多边形的集合如一个节点或一个物体等等。对于一个单独的多 边形它并不进行剔除,因此一个正确的隐藏面剔除方案是允许一定的重复渲染来 适当的减少计算量。因此,可以采用一个混合的方案,如果一个叶结点包含多边 形的集群,而不是单一的面,那就可以先用b s p 树快速地消除视见约束体之外的 物体,而视见约束体内的物体的可以性可以由硬件z 缓冲方法来实现。 b s p 树存在明显的缺点,如果要处理的是一个“有门”的场景,观察者还可 以透过门或者窗看到其它房间的物体,而看到得可能只有其它房间很少的物体, 这样如果对每个房间都创建单一的b s p 树的话就是很低效的。在这种情况下可以 使用p o r t a l 技术,常对于一个室内场景来说它可以被描述为由一个个“洞口”相 互连接的“房间”组成,这里“洞口”被称为p o r t a l 而“房间”被称为s e c t o r ,通常 s e c t o r 被定义为一个“凸”的“闭合”的多边形集合。p o r t a l 引擎的基本方法是当 通过一个指定观察位置的视见约束体( v i e wf r u s t u m ) 进行渲染时,如果一个 p o r t a l 出现在可视范围内,那么p o r t a l 将对视见约束体进行剪切,这样与其相 连的s e c t o r 将会通过一个观察位罨相同但已经改变过的视见约束体进行渲染。 这是一个非常简单而且非常适合进行递归调用的方法,由于视见约束体被 1 6 浙江大学硕士学位论文三维f p s 游戏渲染系统的研究 p o r t a l 进行了精确的限制,因此被隐藏的物体可以很简单进行剔除。 一个p o r t a l 引擎虽然能够提供许多非常好的特性,但是它的结构太复杂。 当你使用p o r t a l 技术来构建一个渲染系统时存在问题,最大的一个问题是在渲 染场景的每一帧都需要进行可视性检测,这会产生大量的多边形剪切操作,在场 景非常复杂的情况下,运算的代价会非常的高,因此需要寻找一种技术来对场景 中可视性检测进行预计箅而不是在运行期间进行计算。p v s ( p o t e n t i a l l y v i s i b l es e t ) 可视性集合,就是为了解决这个问题而出现的一项技术,可以通 过对b s p 中每一个叶节点设置一个p v s ,这个p v s 保存了从第一个叶节点开始看 到的叶节点集合,它不仅可以用来帮助加速场景渲染,还可以用来加速场景中光 照运算和进行网络优化。p v s 是在场景进行预渲染时计算出来的,每一个b s p 的 叶节点都保存一个可视节点的集合,当对场景进行渲染时,摄象机所在的叶节点 将被渲染,同时保持在p v s 中的叶节点也将会被渲染出 x 浙江大学硕士学位论文三维f p s 游戏渲染系统的研究 它点的像素的强度,在多边形面上产生渐变,因为它不能正确处理高光,通常只 用来计算漫反射。而p h o n e g 模型是g o u r a u d 的改进版本,由于使用向量插值并 且在每个像素计算明暗值,可以得到更加平滑的效果,但是速度会慢4 5 倍。一 般渲染系统需要有一个明暗选项供用户选择采用哪一种模型,对于阴影和纹理效 果也一样。 2 4 2 纹理映射 纹理( t e x t u r e ) ,是映射到几何图形表面给人以视觉效果的图像文件,二维 纹理映射( t e x t u r em a p p i n g ) 即把二维的纹理映射到三维的几何图形上。纹理 映射主要有两种可能的算法结构:逆向映射( i n v e r s em a p p i n g ) ( 较普遍) 和前 向映射( f o r w a r dm a p p i n g ) ,逆向映射是指像素通过映射找到其在纹理空间的“前 向”,然后滤波操作综合“前向”中的信息再确定屏幕像素的颜色;而前向映射 是把纹理空间中的一个纹素( t e x e l ) 对应到屏幕空间的一个曲线四边形。前向 映射易于理解,但是实际操作中逆向映射算法更为常用。 浙江大学硕+ 学位论文三维f p s 游戏渲染系统的研究 第3 章三维f p s 游戏渲染系统架构 3 1 简介 图形系统最终必须把对象显示出来,最后这个绘制可以调用d i r e c t 3 d 或者 o p e n g l 的a p i 来实现,当然也有在没有硬件加速的机器上使用软件模拟的,这 个不在本文的研究范围之内。本文研究对象是渲染系统的a p i 无关部分,即如何 设计实现场景组织和渲染流水线设置。如何很好地设计一个渲染系统的架构,使 之可以支持游戏这样高度复杂又需要实时渲染的应用是一个很大的问题。最重要 的是在设计时要考虑以下几个方面的问题: 1 如何高效地组织和提供数据给渲染器使之可以支持实时渲染。3 d 游戏需要 一定的实时帧率才能正常运行,这时需要实现裁减和深度缓存机制避免渲染不可 见的对象自然是不必说了,但是仅仅这样还是不够的,还需要实现场景图管理 ( s c e n eg r a p hm a n a g e m e n t ) ,尽可能地只把当前可见的或者即将可见的对象送 到渲染器。 2 渲染器提供给上层的接口应该是什么样的,一个设计良好的接口应该能够 支持不同的渲染器。场景图管理位于渲染器的上层,在它和渲染器之间定义什么 样的接口是十分重要的,特别是对于游戏这样的渲染的实时性要求很高的应用, 另外,游戏开发当中可能会引入一些新的需求而影响到场景图管理和渲染系统之 间的接口。 3 如何使得渲染系统能让应用程序的设计时方便使用。如果渲染系统要被设 计成中间件的形式的话,上层使用场景图管理可以使得渲染系统相对独立,这样 可以避免暴露底层细节。 4 当渲染系统需要支持新的图形特性的时候如何能使改动最少,即如何使渲 染系统具有良好的可扩展性。游戏的需求变化经常是非常巨大的,因此这一点及 其重要。比如设计的时候需要考虑如果系统需要加入新的几何对象类型或者新的 视觉特效( v i s u a le f f e c t ) 时如何使得接口和实现的修改是最小的。 1 9 浙江人学硕士学位论文三维f p s 游戏渲染系统的研究 3 2 总体架构设计 首先,为了支持不同的底层渲染实现,如d i r e c t 3 d ,o p e n g l 或者其它a p i , 必须抽象出一个发送底层渲染操作的类,它可以有不同的实现,而每一个实现可 以支持不同种类的底层渲染系统,把这个抽象类起名为r e n d e r s y s t e m 。 第二个重要的功能是场景管理模块,起名为s c e n e m a n a g e r ,如上一节所提到 的,它为使用本渲染系统的应用程序提供接口,另外,它还负责创建和管理摄象 机,可移动物体,灯光和材质,以及不可移动的场景的材质( 如天空,大地) 。 s c e n e m a n a g e r 还要负责保存了各种物体的列表,以便处理物体之间的关系。使 得渲染器和应用程序无须为之操心。s c e n e m a n a g e r 还把场景发送到渲染器里进 行渲染。它确定哪些物体需要绘制,生成一个场景,发送到渲染系统。此外,如 同在第二章中提到的,场景管理会使用多种方法,室内和室外的处理方法不尽相 同,s c e n e m a n a g e r 应该被设计成是一个基类,由子类来决定筛选,消隐等的算 法。如对于室内场景可以建立使用b s p 方法组织场景的b s p s c e n e m a n a g e r 处理。 第三,游戏场景中会使用到很多资源,如纹理,网格( m e s h ) 和地图等,这 些资源都来自于不同的文件,需要有访问和在内存中管理这些资源的模块 r e s o u r c e m a n a g e r 。 第四,定义e n t i t y 为在游戏场景中渲染的物体的形状,它们由网格的集合 构成,实体具有自己所使用的模型、材质、阴影、骨骼、动画、渲染状态等各种 个体属性。 第五,如上一章所述,场景的组织方式是树,因此需要节点类s c e n e n o d e , e n t i t y 可以a t t a c h 到s c e n e n o d e 上,由s c e n e n o d e 控制e n t i t y 的位置,方向 和缩放等等。s c e n e n o d e 用于保持对所有与它联系的物体的坐标和方向进行跟 踪。建立一个网格后,只有将这个网格赋予s c e n e n o d e 才会被渲染,否则就不会 在场景中进行渲染,因此s c e n e n o d e 不是要在屏幕上显示的物体,要渲染一个物 体,要先建立一个s c e n e n o d e ,并将一个网格赋给它,爿会在屏幕上显示出来。 可把不只一个的物体赋给s c e n e n o d e 。例如,在屏幕上有一个行走的物体,如果 想产生一个灯光环绕着他。那么可以用以下步骤来实现,首先,建立一个 s c e n e n o d e ,然后建立角色的网格,并将它赋予s c e n e n o d e 。下一步建立灯光, 并将它赋予s c e n e n o d e 。s c e n e n o d e 也允许将它赋给其它s c e n e n o d e ,这样就建 浙江大学硕士学位论文三维f p s 游戏渲染系统的研究 立了一个有等级的节点系统。 第六,摄像机( c a m e r a ) 和视口( v i e w p o r t ) ,c a m e r a 显然应该由s c e n e m a n a g e r 来控制,所以应该由s c e n e m a n a g e r 来创建它。考虑到有几人同时游戏等等的可 能,所以场景中可能会有多个c a m e r a 的对象。当需要处理多个c a m e r a 的时候, 视口的概念就很重要了,可以将屏幕分为几个部分,每个部分对应一个视口,视 口又对应到相应的摄像机,来显示正确的内容。 第七,光照( 1 i g h t ) 阴影( s h a d o w ) ,需要有管理光照的对象,光照是有多 种类型的,如点光源,方向光等等,光也有很多其它参数。阴影和光照一样,也 有很多不同的类型和参数,需要有单独的类来管理它们。 3 3 场景管理器的主要结构 3 3 1 简介 s c e n e m a n a g e r 需要管理所有场景中的物体,如果要显示一个物体,必须先把 它放入到场景中,再由s c e n e m a n a g e r 对物体的坐标进行跟踪。由于例如实现地 形渲染和室内场景演染的场景实现是不一样的,s c e n e m a n a g e r 也应该有多种类 型( 子类) 。 对于室内场景的实时渲染,都是基于b s p 技术的。通过b s p 技术,再加上p v s , p o r t a l 等技术可以大量减少场景的复杂程度,通过p o r t a l 技术还可以把一个室 内场景和一个室外场景连接起来;而室外场景的渲染有其特有的难点,主要有两 方面,大规模地形的渲染和如何增强场景真实性的问题,而且理论上室外场景是 无限大的,同时视野也是无限大的。其他的情况还有如野外的地表衍生物:树木、 杂草、地貌等。同时天气效果,如下雨、下雪,刮风和闪电等这些东西在一个 室内的环境下基本上是不需要考虑的。而且模拟这些效果都需要很高的代价,有 些甚至根本就没有办法模拟。 浙江人学硕士学位论文三维f p s 游戏渲染系统的研究 3 3 2 场景管理基类 场景管理基类定义s c e n e m a n a g e r 定义接口和实现基本的场景管理功能,它 管理被渲染的场景的内容。场景管理器必须采用最合适的数据结构和算法来管理 特定的场景,并且负责创建和管理摄像机,实体( 可移动的对象) ,光照和材质。 因此,像在场景重创建一个c a m e r a ,获得某个对象的材质,删除一个光照等等 这些操作都应该由场景管理器来完成;场景管理器还要负责在合适的时间调用渲 染器渲染场景( 比如时机可以在渲染目标要求更新的时候) ,这样用户就不需要 直接调用场景管理器的方法来演染场景,因此用户和场景管理器的交互基本应该 是发生在场景设置阶段,但是应该也要提供接口允许用户在渲染周期内动态地修 改场景内容或者设置。这样,可以把将待渲染得数据送进渲染管道分为以下几个 步骤: 更新场景图,由根s c e n e n o d e 一直递归调用下去,场景图管理基类只需要做 一些通用的操作,如更新a a b b 包围盒,具体的操作由具体的场景管理类实现; 在场景树中标记可见的几何体,鉴于实现的灵活性考虑,在基类中也不做过 多的优化,只根据当前摄像机的位置和视见约束体来确定某个s c e n e n o d e 是否可 见,快速的检测并且只将可见物体送入渲染管道是提高引擎效率的关键所在,在 这里有非常多的技术可以应用,如b s p t r e e ,q u a d t r e e ,p o r t a l ,p v s 等等将在 具体的场景管理器中实现。另一点,通常,场景中会包含各种各样的物体,透明 的不透明的,产生阴影的不产生阴影的,使用这种材质的,使用那种材质的等 等。如果不加组织的按照任意顺序来绘制,必然会频繁的在渲染状态之间来回的 切换或者频繁的改变材质纹理,而这也是降低帧速率的重要原因。因此,必须 通过加以分组形成不同的渲染队列,提高效率; 渲染可见的对象,经过上两步的筛选和分组,由这一步将数据送入渲染管道。 如上所述,为了获得较好的性能,不同类型的场景往往需要不同的算法来决 定渲染哪些对象。因此,场景管理基类不做场景组织方面的工作,而只提供通用 的接口,而把这些工作放到子类中实现。本文将对室内场景和室外场景各研究一 种场景组织方式。 浙江大学顿十学位论文三维f p s 游戏渲染系统的研究 3 3 3 室内场景管理一b s p s c e n e m a n a g e r b s p s c e n e m a n a g e r 使用b s p 作为管理室内场景的方法。 图4 游戏场景 如上图所示的复杂场景中,很多对象是我们看不到的,比如下面的楼层、围 墙后面的对象,传统的渲染方法对于整个场景都会忠实的进行渲染。现在通过 c u l l i n g 功能可以不完全计算这些部分,提高渲染系统工作效率。最简单的 c u l l i n g 方法就是把需要处理的场景分成不同的区域,每个区域都有一个相对于 其它区域的可见对象的列表。当然生成这个列表的计算方法有很多,也有多种列 表格式。这里用到的b s p ( b i n a r ys p a c ep a r t i t i o n i n g ,二进制空间分区) 树 是非常常用的一个方法,在d o o m 和q u a k e 就应用到了这种方法。这种方法把需 要处理的场景分成很多小的分区,然后就可以根据各个分区的关系来判断哪个是 可见的哪个是不可见的。 浙江大学硕士学位论文三维f p s 游戏渲染系统的研究 b s pt r e eh i e r a r c h y a 矗 de 图5 b s p 结构图 a 区是任何分区都遮挡不住的,所以在树型分支表中它的位于最上层b 和c 区的可见程度仅仅会被a 区遮挡,所以它们排列在第二层,而d 、e 区的可见程 度要受到其它三个分区的影响,所以位于最底层 由于q u a k e 等经典的f p s 游戏已经有了存储关卡的b s p 文件格式,因此需要 实现可以直接读取b s p 文件作为场景导入。对于在场景管理基类中提到的三步操 作,b s p s c e n e m a n a g e r 除了调用基类的功能,都需要做自己的具体实现: 更新场景图,把对象移动的消息通知给b s p 关卡。 在场景树中标记可见的几何体,遍历b s p 树,标记静态几何对象。 渲染可见的对象,渲染静态的几何对象。 上述三个步骤后都应该还需要调用基类的实现。 3 3 4 室外场景管理一q u a d s c e n e m a n a g e r 室外场景的特点是视野是没有室内场景那种限制的,因此不能使用b s p ,p v s 等技术来减小渲染复杂度。另外,室外场景还需要渲染天空,地形( t e r r a i n ) 等在室内场景中不需要的物体。我们知道,无限的大的场景需要无限的场景数据。 但是这是不可能的,我们只能希望场景越大越好,室外场景的主要部分是地形的 渲染,地形数据的多少决定了场景的大小。所以如何保存这些地形数据成了首要 浙江大学硕上学位论文三维f p s 游戏渲染系统的研究 的问题。( 但是在现在存储器成本迅速下降的今天,这个问题已经变的不是十分 的突出。) 其次是无限的视野问题,无限的视野就表示渲染无限的图元( 图元即 是0 p e n g l d i r e c t 3 da p l 支持的简单的几何图形) ,这也是不可能。图元的数量 是以场景大小的平方的速度增长的。光考虑地形数据,一个2 0 4 8 x 2 0 4 8 的地形, 如果不考虑减低细节程度和裁剪的话,它将要渲染8 m 的三角形,这样的三角形 量在p c 级别上目前还是远不能实现交互式帧率的。所以,如何减少要渲染地形 时候的图元数目成了室外场景实时渲染的关键问题。 l o d ( 1 e v e lo fd e t a i ) 是比较常用的地形渲染技术,根据一定的规则来简 化物体的细节,可以根据要求用不同的细节表达物体的表面,如离观察者近的用 较高的细节层次,较远的用低的细节层次。l o d 算法处理起来比较复杂,但是它 让我们可以足够自由的去控制我们的场景渲染,更加方便的使用显卡的硬件加速 功能。而且可以很容易的在场景中组合其他的物体。如树木,太阳以及粒子系统 等,它可以方便的让观察者以任意的角度去观察场景,我们只要让摄影机旋转一 定的角度就可以了。 图6 。l o d 示意图 使用l o d 技术可以大量减少需要渲染得三角形数目,再结合四叉树进行,四 浙江人学硕士学位论文三维f p s 游戏渲染系统的研究 3 6 光照和阴影 光源应该像其它对象一样可以加到场景中,所以创建光源的工作应该交给场 景管理器完成。光源有很多猎裂;溺藿攒;吼静二雏;撙嵫淫灌;彰蓣恭箬器 善锰甜楼基磐碍搽髫蒲舌析撂描,河沥淆济赫蒜掳莓焉灞稀静鞭赫础鹗筋醛矿蠢 娜型缯型搿愿围爨雾器醐鼎龃瓣韩j“鸶衍糍骶黼#靶融缎就豢镡桩轮篇躇放内存。资源的类型可以参见图1 0 ,对于每种资源,都提供相应的 r e s o u r c e m a n a g e r ( 见图1 1 ) 。r e s o u r c e m a n a g e r 使用字典来维护相应资源的名称 和资源指针之间的映射关系。每种r e s o u r c e 和每种r e s o u r c e m a n a g e r 需要组合 起来使用,使用起来比较复杂,建立一个r e s o u r c e g r o u p m a n a g e r 把资源分成组, 通过调用资源对应的r e s o u r s e m a n a g e r 来加载卸载组中的资源。 r e s o ur c e 类的主要成员: c l a s sr e s o u r c e 构造函数 r e s o ur c e ( r e s o u r c e m a n a g e r * c r e a t o r ,c o n s ts t r i n g n a m e ,r e s o u r c e h a n d l eh a n d l e , c o n s ts t r i n g & g r o u p ) : 析构函数 v i r t ua l r e s o u r c e ( ) 加载资源 v i r t ua lv o i dl o a d ( v o i d ) 重新加载资源 v i r t ua lv o i dr e l o a d ( v o i d ) 判断资源是否可以被重新加载 b o o lis r e l o a d a b l e ( v o i d ) c o n s t 卸载资源 v i r t ua lv o i du n l o a d ( v o i d ) 取得资源的大小 s i z e tg e t s iz e ( v o i d ) c o n s t 浙江大学硕十学位论文三维f p s 游戏渲染系统的研究 第4 章渲染系统的设计与实现研究 4 1 核心类 4 1 1 r e n d e r s y s t e m 这个类处理渲染系统和孽耋耋薯j 粤囊掣每誊。磐墨塑囊霸萎薹蔓0 垂囊 要二j t i 雩囊;! :;专一吲矧雾囊薪| ;| 誓每毫童雩专毒囊薹零荽囊菇璧纂童萋 童乏| | | ,l 孽董妻i 囊专耋要i 夔每萎荔耄萋零耋耋量垂? 蓦蓬善罄螽曩薹雾蔓型 羹蓊疆霎, l | ll 千 :未j 二 壬i # - - - - h 夸7 十 :丰辐:= jj 丰 i | i| 一 二月 | |+ 蓐嚣霸 卜 蠹警忖 丰蚓轻 p h 伟阡 16 ,0 ,8 0 ,0 ,1 s8 ,0 ,1 61 6 ,0 ,1 6 图7 四叉树( 1 ) 如果上图就是就是地形的平面图,视见约束体位于右下角,为了达到高效的 视见约束体剔出,首先把平面等分成4 份,就像上图中看到的那样,这就是四叉 树的基本原理。 0r 0 ,0 8 ,0 ,o1 6 ,0 ,0 o ,0 ,8 函小 l - - ,沽卜 掣| ji | 音掣 o淋 浙江大学硕士学位论文三维f p s 游戏渲染系统的研究 v i r t u a lv o i ds e t s h a d i n g t y p e ( s h a d e o p t i o n ss o ) = 0 : 设置是否启用动态光照 v i r t u a lv o i ds e t l i g h t i n g e n a b l e d ( b 0 0 le n a b l e d ) = o 设置当w 咄u f f e r s 可用时是否启用 v o i ds e t w b u f f e r e n a b l e d ( b 0 0 1e n a b l e d ) : 取回w - b u f

温馨提示

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

评论

0/150

提交评论