




已阅读5页,还剩50页未读, 继续免费阅读
(计算机科学与技术专业论文)3d游戏引擎的研究与实现.pdf.pdf 免费下载
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
独创性声明 本人声明,所呈交的论文是本人在导师指导下进行的研究工作及 取得的研究成果。尽我所知,除了文中特n j j n 以标注和致谢的地方外, 论文中不包含其他人已经发表或撰写过的研究成果,也不包含为获得 武汉理工大学或其他教育机构的学位或证书而使用过的材料。与我一 同工作的同志对本研究所做的任何贡献均已在论文中作了明确的说 明并表示了谢意。 签名:胁如 日期:汐,彤 学位论文使用授权书 本人完全了解武汉理工大学有关保留、使用学位论文的规定,即 学校有权保留并向国家有关部门或机构送交论文的复印件和电子版, 允许论文被查阅和借阅。本人授权武汉理工大学可以将本学位论文的 全部内容编入有关数据库进行检索,可以采用影印、缩印或其他复制 手段保存或汇编本学位论文。同时授权经武汉理工大学认可的国家有 关机构或论文数据库使用或收录本学位论文,并向社会公众提供信息 服务。 ( 保密的论文在解密后应遵守此规定) 虢引鹤卜m 新弱压。醐犹r 武汉理工大学硕士学位论文 摘要 近年来,国内外的游戏产业发展迅速,各种新的游戏模式不断涌现。随着 游戏产业的竞争日趋激烈,游戏工作室往往承受着保证游戏品质、项目期限和 响应需求变更等多重压力,因此它们需要游戏引擎及相应的游戏资产管线更好 地支持游戏制作的全过程。本文首先介绍了当前游戏产业的发展状况,并且阐 述了游戏引擎在游戏制作过程中的重要地位。然后正文部分根据论文课题的研 究现状,对3 d 游戏引擎的各个层次的重要组件进行了研究和设计。 通过研究和设计,3 d 游戏引擎封装了一些有用的底层a p i 和基本的图形接 口,实现了资源管理方案、基于多核心的引擎架构、层次式的图形子系统、基 本的脚本系统以及应用层的运行时游戏对象模型。同时,整个游戏引擎充分地 应用了数据驱动的架构思想,使得引擎自身更加灵活并且有效地支持游戏制作 过程。本课题的研究工作和创新点主要体现在如下几个方面: 1 ) 研究并设计内存对齐方案以提高存取数据的速度;考察了游戏引擎中各 种内存使用的每一种模式,并为它们创建一个不同的堆来提高各级c a c h e 的命 中率;同时还阐述了内存池在克服内存碎片等方面的潜力。 2 ) 为了方便跟踪和调试错误,分析并设计了游戏引擎各个组件所需要的相 关调试策略,实现了将调试信息定位到合适的输出目标的功能,并且支持在系 统崩溃时输出转储文件以提供最后的重现现场的机会。另外,调试系统还支持 绘制各种调试用的线条、文本和简单模型,用以辅助图形子系统的可视化调试 过程。 3 ) 将输入输出系统、图形子系统、音频系统和游戏主循环划分到不同的线 程中执行,实现了基于多核心的游戏引擎架构。各个线程之间采用发消息的方 式进行通讯,以减小各个模块之问的耦合度,同时也让部分功能的异步调用模 式成为可能。 4 ) 分析了传统的以对象为中心的模型的局限性后,为游戏引擎应用层实现 了一个以组件为中心的运行时游戏对象模型,并且加入消息机制以支持各个游 戏对象之间的相互通信。 最后,本文对所研究的内容做了总结,指出了设计中存在的一些不足,并 且提出了下一步的研究方向。 关键词:游戏引擎,多核心平台,资源管理,游戏编辑器 a b s t r a c t i nr e c e n ty e a r s ,w i t ht h er a p i dd e v e l o p m e n to f d o m e s t i ca n di n t e r n a t i o n a lg a m e i n d u s t 瞩av a r i e t yo fn e wg a m em o d e sh a v eb e e ne m e r g e d i na d d i t i o n , a st h eg a m e i n d u s t r yi sb e c o m i n gm o r ec o m p e t i t i v e , g a m es t u d i o so f t e n s u f f e ro v e r w h e l m e d p r e s s u r ea r r a n g i n gf r o mq u a l i t ya s s u r a n c e ,p r o j e c td e a d l i n e sa n dr e s p o n dt od e m a n d c h a n g e s ,s ot h eg a m ee n g i n ea n dt h ec o r r e s p o n d i n ga s s e tp i p e l i n e s h o u l df u l l y s u p p o r tt h ew h o l ep r o c e s so fg a m ep r o d u c t i o n t h i st h e s i sd e s c r i b e s t h ed e v e l o p m e n t t e n d e n c yo ft h ec u r r e n tg a m ei n d u s t r y , a n dw h a t i sm o r e ,i td e s c r i b e st h ei m p o r t a n t r o l et h a tg a m ee n g i n ep l a y si nt h eg a m ed e v e l o p m e n t t h e n , a c c o r d i n g t ot h ec u r r e n t i e s e a i hs t a t u s ,t h eb o d yo ft h i st h e s i sg i v e ss o m ed e t a i l e dc o m m e n t s o nt h er e s e a r c h a n da r c h i t e c t u r eo ft h e3 dg a m ee n g i n e t h r o u g hr e s e a r c ha n dd e s i g n ,t h e3 dg a m ee n g i n e e n c a p s u l a t e ss o m eu s e f u l l o w l e v e la p i ,w r a p ss o m eg r a p h i c si n t e r f a c e s ,i m p l e m e n t st h er e s o u r c em a n a g e r , t h e e n g i n ea r c h i t e c t u r eb a s e do n m u l t i c o r ep l a t f o r m ,t h eh i e r a r c h i c a lg r a p h i c ss u b s y s t e m , t h eb a s i cs c r i p ts y s t e ma n dt h er u n f i m eg a m eo b j e c tm o d e lw h i c hr e s i d e s i n t h e a p p l i c a t i o nl a y e r a tt h es a m et i m e , t h e3 dg a m ee n g i n e h a sm a d ef u l lu s eo f d a t a - d r i v e i lf r a m e w o r k ,m a k i n gt h ee n g i n em o r ef l e x i b l ea n de f f e c t i v ei nt h e i rs u p p o r t f o rg a m e p r o d u c t i o np r o c e s s 。t h et o p i c so f r e s e a r c ha n di n n o v a t i o na r em a i n l y r e f l e c t e di nt h ef o l l o w i n ga s p e c t s : 1 lt h em e m o r ya l i g n m e n tt e c h n i q u eh a sb e e nd e s i g n e dt oi m p r o v em e m o r y a c c e s ss p e e d t h r o u g ht h es t a t i s t i c so nt h ed i f f e r e n tm e m o r yu s a g em o d e l st h a tu s e d i nt h ew h o l eg a m ee n g i n e ,am e c h a n i s mt h a tc r e a t i n ga n e wh e a pf o re a c hm o d eh a s b e e nd e s i g n e dt om a i n t a i nc a c h ec o h e r e n c e a tl a s t ,m e m o r yp o o lt e c h n i q u e h a sb e e n d e s c r i b e df o ri t sp o t e n t i a lo nm i n i m i z a t i o no f m e m o r yf r a g m e n t s 2 1t of a c i l i t a t et h eb u gt r a c k i n ga n dd e b u g g i n gi ns o f t w a r e ,w ei m p l e m e n ta s u i t eo fr e l a t e dd e b u g g i n gs t r a t e g i e sf o rd i f f e r e n t k i n do fc o m p o n e n t si ng a m ee n g i n e , a n dt h ef e a t u r et oo u t p u tt h ed e b u g g i n gi n f o r m a t i o nt ot h ea p p r o p r i a t eo u t p u tt a r g e t , 锄dm e 如- i l c t i o n a l i t yt ow r i t ed u m pf i l e sa sa p p l i c a t i o nc r a s h e dw h i c hp r o v i d e sa n l i 哪n l m l 锣t or e c r e a t el a s tm e m o r yl a y o u te v e n t u a l l y i n a d d i t i o n , t h ed e b u g g i n g s y s t e ma l s os u p p o r t sav a r i e t yo fd e b u g g i n gf a c i l i t i e st od r a wl i n e s ,t e x ta n ds i n l p l e m o d e lt oa i dd e b u g g i n gv i s u a l i z a t i o no f t h eg r a p h i c ss u b s y s t e m 3 ) t h e3 dg a m ee n g i n ea r c h i t e c t u r eb a s e d0 1 1m u l t i c a ) r ep l a t f o r mh 鹤b e e n 1 m p l e m e n t e d ,b ym a k i n gt h ei n p u t - o u t p u t s y s t e m ,g r a p h i c ss u b s y s t e m s ,a u d i o s y s t e m s ,a n dt h eg a m el o o pi n t od i f f e r e n tt h r e a d s m e s s a g em e d l a n i 跹nh a sb e e n u t i l i z e dt od oc o m m u n i c a t i o nb e t w e e nd i f f e r e n tt h r e a d s ,t or e d u c e c o u p l i n gb e t w e e n m o d u l e s ,w h i c hm a k e si t p o s s i b l e t oi n v o k es o m ep a r to ft h e f l l n c t i o n a l i t i e s a s y n c h r o n o u s l y 4 ) w ei m p l e m e n tar u n t i m eg a m eo b j e c tm o d e lf o ra p p l i c a t i o nl a y e ro fg a m e e n g l n e w h i c hi sc o m p o n e n t 。c e n t r i ci n s t e a do fo b j e c t - c e n t d c a sm e s s a g em e c h a l l i s m n a ss o m en i c e c h a r a c t e r i s t i c s ,w eu t i l i z ei tt os u p p o r tt h ev a r i o u sc o m m u i l i c a t i o n s b e t w e e ng a m eo b j e c t sw i t h o u tt o om u c h c o u p l i n g f i n a l l y , t h ec o n t e n to ft h es t u d yw a ss u m m a r i z e da n df u t u r er e s e a r hd i i e c t i o n s a r ep r o p o s e d k e y w o r d s :g a m ee n g i n e ,m u l t i c o r ep l a t f o r m ,r e s o u r c em a n a g e m e n t ,g 锄ee d i t o f i i i 武汉理工大学硕士学位论文 目录 第l 章绪论l 1 1 游戏引擎概述一l 1 2 国内外研究现状2 1 3 游戏引擎研究的目的和意义3 1 4 本文的组织结构3 第2 章游戏引擎架构一5 2 1 游戏引擎总览5 2 2 基础层5 2 2 1 调试系统6 2 2 2 数据结构和算法7 2 2 3 数学库7 2 2 4 持久化系统8 2 2 5 输入系统8 2 2 6 多核心支持8 2 2 7 消息系统9 2 3 子系统层9 2 3 1 图形子系统9 2 3 2 声音子系统1 0 2 4 应用层11 2 4 1 脚本子系统1 1 2 4 2 游戏世界与对象模型12 2 5 游戏资产管线1 2 第3 章游戏引擎基础层1 4 3 1 内存管理1 4 3 2 调试系统15 3 3 多线程技术1 7 3 3 1 负载均衡一1 7 i v 武汉理工大学硕士学位论文 3 3 2 线程间的通信1 9 3 4 游戏资源管理1 9 3 4 1 资源的加载与保存2 0 3 4 2 高层次的资源管理2 1 第4 章数据驱动的引擎架构2 3 4 1 数据驱动简介2 3 4 2 脚本系统2 4 4 2 1 游戏脚本概览j 2 4 4 2 2 脚本系统实现一2 6 第5 章图形渲染2 8 5 1 多动态光源的光照模型2 8 5 2 图形子系统3 0 5 3 图形子系统中的多线程解决方案3 1 第6 章游戏引擎应用层系统3 3 6 1 游戏中的核心元素3 3 6 1 1 游戏世界3 3 6 1 2 游戏关卡3 5 6 1 3 高层次的游戏流程3 5 6 2 运行时游戏对象模型3 6 6 2 1 以对象为中心的架构3 6 6 2 2 以组件为中心的架构3 9 6 2 3 事件和消息传递4 1 第7 章总结与展望4 3 7 1 研究工作总结4 3 7 2 改进与展望4 3 致谢4 5 参考文献4 6 攻读硕士期间发表的论文及科研情况4 9 v 武汉理工大学硕士学位论文 1 1 游戏引擎概述 第1 章绪论 游戏引擎【l 儿2 】这个术语是在上个世纪9 0 年代中期非常流行的第一人称射击 游戏( f p s ) 中被提出来的。由i ds o f t w a r e 公司制作的游戏d o o m 就是一个非常 典型的代表,它的架构将游戏的核心组件、美术资源、游戏世界和游戏规则清 晰地隔离开来。这种相互隔离的架构使得其它游戏开发团队对其做少量的改动 就能在此基础上继续开发完全不同的游戏,同时也使得小规模的独立游戏工作 室能够在现有的工具上直接开发游戏。在上个世纪9 0 年代末期,诸如q u a k ei i i a r e n a 和u n r e a l 之类的游戏在设计的过程中充分的考虑了游戏组件重用和基于 工具的游戏开发,同时,在引擎中加入了诸如q u a k ec 脚本语言的支持使得引 擎更为灵活。游戏开发团队可以重用游戏引擎中的大部分关键组件来制作游戏, 虽然取得游戏引擎的授权需要很大的开销,但是与重新开发所有的核心组件相 比而言还是一种比较经济的选择。 游戏和游戏对应的引擎之间的界限通常是很模糊的,有些引擎给出了合理 的界限,然而有些引擎没有这样做。比如一个游戏渲染部分知道如何渲染特定 的游戏对象,而另外一个游戏中只提供了通用的材质和着色机制,它只需要游 戏对象的数据即可完成渲染。后一种游戏表现了一种被称为数据驱动的架构【3 】, 这种架构能够用来区分游戏和游戏引擎。当一个游戏包含硬编码逻辑、游戏规 则或者为了渲染不同类型的游戏对象使用了专用的代码,软件就会很难被重用 来制作不同的游戏。基于这种原因,游戏引擎应该是易于扩展并且能够很容易 地被不同的游戏重用的软件。 虽然方便扩展和重用是游戏引擎的两个重要特性,但是游戏引擎不可能用 来制作所有类型的游戏。大多数游戏引擎都是针对特定游戏硬件平台和特定类 型的游戏进行精心设计和调优的,而且大多数跨平台的游戏引擎也只适合用来 开发特定类型的游戏,比如要么是f p s 游戏或者是战略游戏。当游戏引擎试图 做到能够被应用到各种游戏平台以及各种游戏类型时,游戏引擎在各个方面的 效率可能都会被折中方案所损伤。比如,为室内环境设计的渲染引擎可能不适 合渲染室外场景。针对室内的渲染引擎使用b s p 树和通道技术【4 】来保证不会渲 武汉理工大学硕士学位论文 染被墙遮挡的物体;针对室外的渲染引擎不会过多的依赖遮挡查询技术,但是 它会通过l o d 技术1 5 j 使用更少的三角形面片来渲染较远的物体,用更精细的三 角形网格渲染较近的游戏对象。随着游戏平台硬件的不断发展和高效算法的不 断涌现,游戏引擎可以变得更为通用,但是游戏引擎的通用性和效率之间的相 互制约关系依然存在。 游戏引擎通常都是针对特定的游戏类型而设计的,常见的游戏类型有第一 人称设计游戏( f p s ) 、格斗类游戏、竞速游戏、即时战略游戏( i 玎s ) 、大型多 人在线游戏( m m o g ) 、体育类游戏、角色扮演游戏( r p g ) 、社交模拟游戏、 益智类游戏、网页游戏等。 1 2 国内外研究现状 在全球范围内,3 d 游戏产业正在飞速地向前发展,而游戏开发技术也在不 断发展。随着计算机软硬件技术的进步,现在的游戏开发已经发展到将以往的 一些用在虚拟现实中的技术运用于自身,游戏各方面的效果已经发展到了前所 未有的高度。在2 0 0 5 年以后,i ds o f t w a r e 公司推出了i dt e c h4 游戏引擎,并 且基于该游戏引擎开发出了雷神之锤4 和毁灭战士3 。与此同时,其 老对手e p i c 游戏公司的新一代引擎u n r e a l3 也推向了市场。从基于这两款游 戏引擎所开发的游戏来看,游戏越来越追求大规模场景渲染,而且在充分利 用可编程渲染管线后,游戏场景的真实感和丰富感得到了前所未有的提升。 除了上面的两家传统游戏公司外,还有很多后起之秀,比如c r y t e k 开发的 c r y s i se n g i n e2 3 ,开源的商业引擎n e b u l a3 也给我们展现了很多出色的效果, 它在多核心处理器平台上能表现出不错的效果。 由于国内的游戏研发起步较晚,水平还比较落后,同时由于研发3 d 游戏 引擎的前期投入非常高,而且风险大,因此真正有魄力从头做起的研发团体 不多。当前,国内的游戏开发领域就形成了这样的局面:在基础技术储备和 研发水平方面和国外的差距越来越大,更多的是靠引进国外的游戏引擎进行 游戏产品的开发。然而,购买国外引擎也不能完全地解决各个方面的问题。 第一,游戏引擎的授权成本相对较高,许多中小规模的游戏工作室无力购买; 第二,由于引擎本身的技术问题或者厂家的售后服务问题,使国内的某些游 戏项目发展缓慢,导致投资方和开发团队蒙受损失。 2 武汉理工大学硕士学位论文 1 3 游戏引擎研究的目的和意义 游戏引擎是一个较大的工程项目,国外的一些技术团体在研究和开发游戏 引擎的过程中会积累很多大规模系统设计和程序设计方面的经验和成果。游戏 开发领域的竞争非常激烈,玩家对游戏质量的要求也越来越高,游戏产品的快 速原型和快速迭代的需求要求游戏引擎提供强大的功能支持和灵活的架构方 案。 游戏引擎系统应该对其包含的各个子系统进行有机整合并且提供方便易用 的编辑器,有效地支持游戏制作的全过程,让游戏制作团队的精力更多地集中 在内容创建和组织上。游戏引擎的各个子系统将相关的各种具体技术封装起来, 使得游戏程序员不必过多的关注具体的实现细节,而只关注游戏逻辑和规则的 定义。 通常在游戏制作的过程中会碰到很多难以预料的问题,游戏引擎必须为游 戏开发人员提供简洁易用的接口以提高游戏制作的效率,比如提供脚本接口, 以良好的数据驱动的架构来支持游戏开发。随着计算机硬件技术的发展,游戏 玩家会不断地对游戏渲染效果和其它的游戏体验提出更高的要求,所以游戏引 擎的架构必须要具备一定的灵活性。 一直以来,国内的游戏引擎在技术层面上都处于模仿阶段,因此很难从某 些大的方面取得突破。随着多核处理器的普及,以往的一些基于单核心的游戏 引擎并不能得到性能上的提升,因此,设计一款与多核心处理器平台相适应的 游戏引擎会有不错的应用价值。与此同时,g p u 的架构也在发生着很大的变革, 其所支持的可编程渲染管线和通用编程特性为游戏引擎的发展带来了新的契 机。通过研究和开发一款3 d 游戏引擎,还能够在较大规模的软件开发管理方面 取得一定的成果。 1 4 本文的组织结构 本文一共分为七个章节,其组织结构如下: 第l 章是绪论,主要阐述了游戏引擎的概念、国内外研究现状、研究目的 及意义。 第2 章,游戏引擎的整体架构。介绍了3 d 游戏引擎的层次结构、各个层次 所包含的模块以及各个模块和层次之间的相互联系。 武汉理工大学硕士学位论文 第3 章,游戏引擎基础层。其中主要阐述了内存管理和调试系统两个方面。 第4 章,数据驱动的游戏引擎架构。介绍了游戏驱动在当前游戏开发领域 的重要新,并且以一个脚本系统为例子进行了说明。 第5 章,图形渲染。阐述核心渲染系统对渲染接口以及可编程渲染管线的 包装,接着对游戏引擎如何管理场景和视图进行了讲解,最后描述图形子系统 在多线程架构下是如何设计的。 第6 章,游戏引擎应用层系统。介绍游戏中的核心元素,设计了运行时游 戏对象模型,并展示了如何用关系型数据库组织游戏中的各种元素。 第7 章,总结和展望。对本文所做的工作进行总结,同时提出进一步的研 究方向与研究内容,为下一步的工作做准备。 4 武汉理工大学硕士学位论文 第2 章游戏引擎架构 游戏系统设计师的目标是设计一个外界能够进行交互的开放的虚拟游戏世 界,游戏世界本身需要支持渲染、音效、物理、人工智能、交互等和游戏性相 关的特性。在当今的游戏制作领域,为了提高开发效率以及避免重复性的劳动, 游戏工作室通常会采用一个合适的游戏引擎去制作具体的游戏产品。在这种游 戏制作方式下,游戏引擎需要实现各种相关的子系统并将它们有机的结合起来, 用来支持制作完整的游戏系统的全过程。 当前的游戏制作流程主要采用资产驱动的方案,因此游戏引擎管理游戏资 源的合理程度直接决定了游戏开发团队的开发效率。商用的游戏引擎除了提供 游戏运行时所需的各种子系统外,它们还提供一系列工具来制作具体的游戏资 源,比如模型编辑器、特效编辑器、动画编辑器、各种三方工具插件、场景编 辑器、剧情编辑器等j 。由于游戏引擎的运行时系统和编辑器【7 】只定义了游戏资 源的格式而不限定具体的游戏内容,所以游戏引擎可以用来开发各种具体的游 戏。本章将会简要地介绍游戏引擎的各个子系统以及各个系统之间的相互联系。 2 1 游戏引擎总览 一个游戏引擎通常由一个运行时组件和一套与游戏制作相关的工具组成。 图2 1 展示了3 d 游戏引擎的各个组成部分和层次结构图。游戏引擎和其它软件 系统一样也采用了分层的设计思想,高层次的系统会依赖低层次的系统提供的 一些服务。然而低层次的系统不能依赖高层次系统的功能,否则循环依赖会使 系统的耦合度变高,使系统变得不稳定的同时还阻碍了代码重用。 2 2 基础层 游戏引擎的基础层包含了很多游戏子系统层所需要的子功能模块,比如数 据结构和算法、数学库、时间系统、输入系统、调试系统、i o 系统、资源管理 系统、持久化系统、消息系统、多核心支持、低层次的渲染系统等。其中的很 多模块都可以直接使用第三方提供的成熟的软件开发包和中间件,以提高构建 5 武汉理工大学硕士学位论文 游戏引擎的效率。 2 2 1 调试系统 图2 1 游戏引擎架构图 游戏作为一个实时系统,游戏工程师需要查看游戏的性能以便进行优化。 另外,游戏系统中的内存资源是非常宝贵的,开发人员需要使用分析工具来检 测内存的使用情况。在游戏设计过程中,通常需要游戏引擎提供一些可视化的 调试功能以便在游戏运行中直接观察和调试游戏。很多公司在这方面提供了一 些通用的软件分析工具,包括i n t d 公司的v t u n e ,i b m 公司的p u r i f y 和 c o m p u w a r e 公司的b o u n d sc h e c k e r 。然而大多数游戏引擎都提供了一套自定义 的分析和调试工具,它们基本上包括如下一些基本功能。 1 ) 通过手工设置特定的代码行来检测执行某一段代码所需要的时间; 2 ) 在游戏运行的过程中,在屏幕上显示统计结果的功能; 6 武汉理工大学硕士学位论文 3 ) 将性能测试结果写入文本文件或者发送到网络的功能; 4 ) 在游戏结束或者游戏过程中,能够将内存的使用情况和内存泄漏报告写 入到文件中以供事后分析; 5 ) 支持在代码中输出调试信息,能够允许或者禁止输入特定类型或者特定 级别的调试信息; 2 2 2 数据结构和算法 游戏中需要大量的数据结构和算法来管理并且操作游戏中的各种元素和行 为强】,业界已经有了诸如s t l 、s t l p o r t 、b o o s t 和l o k i 等第三方提供的库。虽 然s t l 具有广泛的平台支持并且具有较好的时空复杂度保证,但是较好的游戏 引擎都会一套容器和算法相关的类库,而不采用c + + 中的s t l ,有两个方面的 原因。 第一,在大多数具体的场合下,s t l 并不能得到期望的优势。大多数s t l 在设计上主要考虑了时间复杂度和空间复杂度两方面,然而这两个标准通常只 能衡量元素规模非常大的情况下的时空效率。也就是说,虽然s t l 中的s e t 容器 实现能保证o ( 1 0 9 n ) 的插入、删除和查询的时间复杂度,但是其常量系数可能会 比较大,对于一些元素规模不大的需求,就不能真正发挥其优势。通常,游戏 引擎所管理的各种资源的规模相对较小,这个时候手工实现的数据结构和算法 就能取得更好的性能优势。 第二,使用s t l 通常会以牺牲一些其它的可能方案为代价。在游戏机平台 上,游戏设计者和程序员需要为游戏引擎的每个子系统规划内存的使用。大多 数子系统( 图形系统,声音系统,a i 系统等) 都会拥有一块大小合适的内存, 在预定的计划中,这便是相应的子系统所能使用的全部内存了。在这种情况下, 如果使用s t l 或者其它的类库,那么程序员就不能有效地控制内存的使用情况 了。另外s t l 的内存管理方案还可能会受到自定义内存管理方案的影响,这样 会造成s t l 性能上的损伤。 2 2 3 数学库 在设计游戏的过程中,会用到大量的数学相关概念和方法,将常用的与数 学相关的功能封装起来,让游戏开发人员不必关注其细节们。大部分游戏引擎都 会提供向量、矩阵、四元数、点、线、平面、曲面、常规几何体等相关数学概 7 武汉理工大学硕士学位论文 念和功能的支持。 2 2 4 持久化系统 很多游戏引擎都支持将游戏世界中的所有游戏对象的当前状态保存到磁 盘,并且从磁盘中加载数据并初始化游戏世界【l o 】。这种功能主要是为了实现游 戏过程中的存档,或者是让网络游戏的各个终端同步各种游戏数据,或者仅仅 为了让游戏编辑器能够加载和保存游戏关卡。对象持久化通常需要一些语言特 性,比如运行时类型标识( 咖) 、反射和抽象构造。r t t i 和反射能在运行时 动态地为软件提供对象的类型,以及该类型所提供的属性和方法的集合。抽象 构造使构造对象实例的过程不需要通过硬编码类型名来完成。如果在游戏引擎 的宿主语言中不支持r t t i 、反射和抽象构造,那么自己实现一套相应的机制会 给对象持久化过程带来很大的方便。 2 2 5 输入系统 当今游戏和电影最主要的差别就是,游戏通过交互实现内容的呈现,而电 影通过预先的定义呈现内容。对于游戏玩家来说,好的输入系统能够提升游戏 的体验值;对于游戏开发者来说,好的输入引擎需要和w i n d o w s 提供的消息循 环独立开来,并且支持多种输入设备。 2 2 6 多核心支持 当前的一些较为成熟的游戏引擎已经在单核心处理器上做了很多性能方面 的优化。在过去的几年里,基于单核心处理器的性能提升方案已经受制于一些 物理的因素,使得硬件性能的提升变得较为缓慢,与此同时,游戏引擎的性能 改进也受到了一些影响。现在,硬件制造商已经转向多核心处理器架构】,在 最近的游戏机平台也开始支持多核心处理器了。由于并发编程比传统的编程模 式更复杂,这就给游戏引擎的开发者带来了一个挑战,然而如果要利用新硬件 的优势,那么下一代的游戏引擎就必须解决并发编程的问题。 在多核心处理器平台越来越普及的形势下,对于那些没有针对多核心进行 设计的系统而言,很难从这种硬件的发展方式中受益。对于游戏引擎而言,有 大量的逻辑处理过程需要在c p u 上执行,如果能充分地挖掘多核心处理器平台 的潜力,那么会从很大程度上改进游戏的品质,提高玩家的体验。然而,由于 8 武汉理工大学硕士学位论文 游戏开发本来就是一项较为复杂的工程,支持多核心的特性后势必会让系统的 各个系统变得更为复杂。这样的复杂性理应交由游戏引擎来完成,让游戏开发 人员将更多的精力集中在游戏制作层面上。 2 2 7 消息系统 在多核心架构下,游戏引擎的各个主要的子系统都是在各个线程中运行的。 为了降低各个线程之间的耦合度,在游戏引擎中通常使用消息机制【1 3 】【1 4 】进行通 信。另外,消息机制使得消息能够被异步的处理,避免了各个线程之间的等待, 并为消息系统和各个子系统的优化提供了可能。 游戏对象之间也需要相互通信,消息驱动的游戏引擎创建一个包含了消息 类型和消息参数的消息对象,在同步操作的情形下该消息对象将被直接发送给 目标对象的消息响应函数,在异步操作的情形下该消息对象将首先被缓存在队 列中等待之后的某一时刻集中处理。 2 3 子系统层 从游戏引擎的层次图来看,子系统层位于基础层之上,它包含各种游戏相 关的高层次组件。 2 3 1 图形子系统 渲染引擎是任何一个游戏引擎中非常庞大而且复杂的组件,它的架构方式 有很多种,不过它还是从很大程度上受到了3 d 图形硬件设计方式的影响。其中, 一个较为常见并且有效的设计方式是设计一个层次式的图形渲染架构。图2 2 描 述了一个基本的图形子系统层次结构。 低层次的渲染系统包括引擎所需要的所有基本的渲染机制,这个层次主要 关注快速地渲染上层系统提供几何图元,而不用考虑这些图元当前是否在可视 区域内。图2 2 中的低层次渲染系统部分展示了该部分所包含的各种子模块。 图形设备接口在内部封装了和图形设备相关的枚举、初始化和创建过程, 并且为上层模块提供简单的接口。在低层次的渲染系统中的其它模块主要任务 是渲染诸如网格、线条、粒子、文本等几何图元,并且在内部针对相应的图形 接口进行性能优化。视口封装了摄像机和投影相关的各种参数;材质系统和光 9 武汉理工大学硕士学位论文 照系统管理了图形硬件和着色相关的状态;材质描述了图元所使用的纹理、图 形设备相关状态和可编程渲染管线需要用到的顶点像素着色器;通过材质计算 每个图元受到各种光源光照的结果。 低层次的渲染逻辑绘制所有提交过来的几何模型,而不会考虑当前的几何 模型是否被场景中的其它对象所遮挡。为了减少向低层次渲染逻辑提交的三角 形面片的数量,可以基于一些可见性查询方案设计一个高层次的场景管理机制。 对于一个小规模的游戏世界,可以使用简单的投影剔除算法进行渲染优化;对 于一个大规模的游戏世界,需要使用基于空间划分的数据结构得到潜在可见集 合来提升渲染效率。空间划分方案包括b s p 树、四叉树、八叉树或者球形层次 结构【l5 1 ,需要根据游戏世界的特征来选择合适的空间划分技术。 场景图和裁剪优化 空间划分遮挡查询l o d 系统 t 丁 低层次的渲染系统 绘制图元文本和字体静态和动态光照视口和屏幕空间 摄像机i 材质与着色l绘制调试用的图元i 纹理和表面管理 l 图形设备接口 2 3 2 声音子系统 图2 2 图形子系统 在任何一个游戏引擎中,声音部分和图形部分应该是一样重要的。声音子系 统可以做得非常简单,只在特定的时间或者发生特定的事件时播放音频文件; 声音系统也可以做得非常复杂,会考虑混音、环境音和多普勒效应等音效。q u a k e 和u n r e a l 这两款游戏引擎的声音子系统实现的功能比较基础,游戏开发团队可 以在它们的基础上自定义新的功能或者完整替换成其它的音频系统。d i r e c t x 提 供了一个不错的音频工具x a c t ,还有诸如s o n y 公司提供的s c r e a m 等一些专 业的功能非常强大的音频工具。就算是使用现成的专业音频工具包,也需要花 l o 武汉理工大学硕士学位论文 费一定的精力来做自定义的编程和集成工作,同时游戏中的高质量的音频效果 是通过反复地精心调整而得到,每一个细节都需要给予足够的重视。 2 4 应用层 2 4 1 脚本子系统 开发任何一个商业游戏都是一个较为复杂的工程。在游戏开发的过程中, 相关设计人员一直思考着如何才能尽可能地提升效率。对效率的传统定义主要 集中在游戏的运行速度,为了追求绚烂的渲染效果,软件工程师常常绞尽脑汁 地设计高效算法,甚至不惜为各种不同的平台编写相应的汇编代码。在如今的 游戏制作的商业环境中,游戏工作室常常需要面对由日益逼近的截止日期带来 的压力,结果往往是对时间妥协而使得游戏质量大打折扣。在这种情况下,开 发效率得到了更多的重视,尤其是实现原形的速度和游戏迭代的速度。根据计 算机领域的2 0 8 0 定理,在游戏运行期间,2 0 的代码占用了8 0 的时间或资源, 另外的8 0 的代码占用了2 0 的时间或资源。从技术上来看,可以通过应用脚 本技术和数据驱动的思想来提高开发效率【l6 1 。从管理上来讲,可以通过优化游 戏制作流程和应用敏捷开发思想来提高团队的开发效率。 从游戏运行效率的角度来讲,编译型语言在编译的过程中将代码转化成能 够被机器直接理解的指令,并且转化的过程中运用了各种指令优化方案,而解 释型语言为了追求灵活性和平台可移植性,直到代码执行的过程中才被翻译成 机器指令。使用解释型的脚本语言一方面能够节省开发时间,另一方面由于脚 本代码的解释特性,能够独立于应用程序来编辑相关的游戏行为,甚至在不需 要重新加载游戏的情况下编辑脚本来修改游戏行为【1 7 】。 在过去的十年间,脚本语言在游戏制作流程中变得越来越流行。比如,利用 脚本来控制各种动画序列,游戏中各种非玩家角色的行为,以及玩家角色同游 戏世界的相互作用逻辑。在先进的游戏制作流程中,由软件工程师设计出一个 合理的脚本系统和接口,实际的脚本编写和行为定义基本上都是由游戏设计师, 游戏平衡设计师和数值工程师等团队成员完成,而不用过分地依赖软件工程师。 游戏脚本另外的一个作用是加速游戏原形的塑造过程,能够迅速地响应各种游 戏玩法的测试和论证,它在游戏开发的前期创意和过程论证过程中起到了很大 的作用,保证游戏质量的同时降低了游戏开发的风险。 武汉理工大学硕士学位论文 2 4 2 游戏世界与对象模型 在虚拟的游戏世界里存在着很多游戏对象,不同的游戏对象包含不同的数 据并且具有不同的行为,通过这些属性能够模拟出不同的游戏元素。在面向对 象的分析与设计方法中,通常使用继承的方式为不同的游戏对象定义特定的数 据和行为。通过这种方式设计的系统通常会在需求增长和变更时暴露出很多问 题,比如需要为每一种类型的游戏对象创建一个合适的子类进而给予相应的实 现,并且一个游戏对象只能对应预先定义好的某种游戏类型,当游戏对象的特 性发生变化时,常常需要在庞大的类层次中调整类之间的继承关系( 即高耦合) , 另外,通过继承的方式得到的游戏对象类型包含着很多组关联不大的特性( 即 低内聚) ,造成类在版本迭代的过程中不断地膨胀。 用类继承的方式来构建游戏对象系统是一种高耦合的设计方式,在面向对象 的领域里,组合是一种耦合度较低的构建模式。通过对游戏世界的抽象分析, 游戏对象包含着各种需要呈现的特性,比如在游戏场景中可见,可调整方位, 可感知碰撞等。首先通过对这些特性进行封装,然后在一个游戏对象中包含所 需要的各种特性,就可以构建一个基于组合的游戏对象系统。另外,组合方式 能够动态地定义游戏对象的各种特性,相比类继承的方式,组合能够使数据驱 动的游戏开发方式更为灵活【l 剐。 2 5 游戏资产管线 任何二个游戏引擎都需要大量的数据,比如游戏资源、配置文件和脚本等 等。首先游戏制作团队使用各种数字内容创建( d c c ) 工具创造各种类型的游 戏元素,然后通过引擎提供的游戏资产管线对各种游戏资源进行合理的格式转 换和内容组织,最后交由运行时游戏逻辑对以上创作的内容进行利用,就形成 了游戏产品。 游戏从本质上上来讲就是一种多媒体应用程序。游戏引擎所使用的数据的 种类多种多样,比如三维网格数据、纹理数据、动画数据和音频数据等,这些 数据是设计师使用各种数字
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 房地产项目风险控制与合规管理方案
- 工业设备安装施工方案范例
- 企业成本核算及利润分析实例
- 合作出版流程与协议范本解读
- 数值计算方法课程满分作业解析
- 建筑结构加固施工安全操作流程
- 公路桥梁维护检测技术及案例汇编
- 企业大数据平台搭建技术方案参考
- 客户关系管理策略分析
- 小学生拼音学习口诀大全
- 2025-2030智慧养老行业竞争格局分析及投资前景与战略规划研究报告
- 2025-2030中国在线总有机碳(TOC)分析仪行业市场现状供需分析及投资评估规划分析研究报告
- 合伙购买墓地协议书
- 英语教学课件Unit 2 Different families课件9
- 医学综述研究进展汇报
- 2025年福建省泉州市中考二模历史试题(原卷版+解析版)
- 2025春 新人教版美术小学一年级下册致敬平凡
- 危险废物分析制度
- 换药室工作制度
- 宜家在物流成本管理上的问题及对策
- 水资源开发与保护联合协议
评论
0/150
提交评论