可移植、可扩展多人3D游戏引擎的设计与构架

可移植、可扩展

多人3D游戏引擎

设计与构架

 

Version: 0.1.1 


Markus Hadviger

维也纳工业技术大学计算机图形学院

 

      

QQ: 4754105

E-mail: zhudelunalpha@mail.csdn.net

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

我要把我的这篇论文和作品献给我的父母、

Alois博士和Ingrid Hadwiger

如果没有他们的鼎力支持,这一切都将不会成为可能。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

目录

 

1 介绍 …….............................................................................................................. 1

1.1 3D计算机游戏引擎和图形学研究  1

1.2 关于本书论题 2

1.3 关于论题的组织 3

1.4 实现的总体蓝图 3

 

第一部分、基础知识以及相关工作

2 算法理论 ............................................................................................................. 5

2.1 层次细部划分Hierarchical subdivision 6

2.2 Occlusion culling 8

3 高性能底层图形API ........................................................................................... 10

3.1 Glide 10

3.2 OpenGL 11

3.3 Direct3D 11

3.4 几何处理过程 11

4 游戏开发技术的进展........................................................................................... 13

4.1 具有潜力的3D计算机游戏Seminal 3D computer games 13

4.2 消费性3D硬件产品 21

 

第二部分、Parsec引擎的设计与构架

5 概述 ….................................................................................................................. 26

5.1 引擎部分The engine 26

5.2 游戏部分The game 28

5.3 设想The vision 29

5.4 如何建立游戏How to build a game 29

5.5 如何建立引擎How to build an engine 30

5.6 本章概要Chapters outline 31

6 构架概述 .............................................................................................................. 33

6.1 游戏程序代码The game code 33

6.2 引擎程序代码The engine code 34

6.3 引擎核心Engine core 35

6.4 低层子系统Low-level subsystems 37

7 构架细节 ………….............................................................................................. 41

7.1 程序代码结构和约定Code structure and conventions 41

7.2 动态性 VS. 静态子系统绑定Dynamic vs. static subsystem binding 43

7.3 抽象渲染与遮盖?Abstract rendering and shaders 45

7.4 可移植性Portability 46

7.5 可扩展性Extensibility 48

7.6 游戏进程环路The game loop 48

8 底层子系统详述 ................................................................................................... 50

8.1 宿主系统的封装Host system encapsulation 50

8.2 图形API系统的封装Graphics API encapsulation 55

9 管理系统对象 ...................................................................................................... 58

9.1 对象类型和分类Object types and classes 58

9.2 世界体系The world 59

9.3 通用图形对象Generic graphical object 60

9.4 对象API Object API 65

10 ITER接口 ............................................................................................................ 70

10.1 如何去简单的渲染Specifying how primitives should be rendered 70

10.2 ITER rendering primitives 80

10.3 ITER rendering functions 87

11 Shaders .................................................................................................................. 90

11.1 Components of a shader 92

11.2 Shader definition 92

11.3 Shader implementation 94

11.4 Color animations 94

11.5 Texture animations 96

11.6 Attaching a shader 98

11.7 The art of writing a shader 99

12 The Particle System ........................................................................................... 100

12.1 Basic definition of a particle 101

12.2 Particle clusters 102

12.3 Particle appearance animation 103

12.4 Particle behavior animation 103

12.5 How the particle system uses particle clusters 107

12.6 Derived particle cluster types 108

12.7 Particle system API 111

13 网络部分 ........................................................................................................... 121

13.1 游戏代码的接口 Game-code interface 123

13.2 Parsec协议层 Parsec protocol layer 125

13.3 数据报API Packet API layer 126

14 命令控制台 ....................................................................................................... 127

14.1 用户命令注册? User command registration 128

14.2 控制台API Console API 131

 

第三部分、结论

15 结语 ................................................................................................................... 136

16 参考书目 ........................................................................................................... 138

 

 

 

 

 

 

 

 

 

 

 

 

摘要

 

这篇文章主要讨论关于一个3D游戏引擎的设计与构架问题——隐藏在计算机游戏三维图形学背后的技术。经过了最近若干年的发展,3D计算机游戏和图形学方面的研究已经逐渐相互靠拢并且在许多领域中已经结合在一起。游戏开发者们正在更多地运用研究社区的研究成果,同时计算机图形学专家们也已经发现计算机游戏已成为他们自身学科相关研究工作中一个重要的应用领域。

底层引擎技术领域作为一个被计算机游戏所运用的技术变得越来越重要并起到了决定性的作用。相应的,为了能够使引擎拥有从一个平台到另一个平台的可移植性,一般都会选择那些去封装与系统相关部分的极度模块化设计模式。同样,当一个游戏引擎被运用到许多不同类型的游戏制作过程之中时,它的可扩展性变得一样重要。这些功能同样鼓励那些游戏玩家社区为他们所喜爱的游戏开发扩展功能并使这些游戏能够在一段相当长的时间继续流行。

这篇文章的主要论点是一个特定的游戏引擎——Parsec——该引擎主要关注于系统构架和设计方面。这个引擎突出考虑对一个特定模块化构架的可移植性。他同样也是一个多人参与的游戏引擎,特别是它包含了一个强大功能的网络组件,多个玩家可以通过这个组件在网络上同时参与游戏进程。

尽管Parsec引擎不是一个旨在为每一种可以想象到的类型游戏所设计的完整的通用游戏引擎,但是宁愿被设计成为针对一个特定类型游戏的高性能引擎框架,因为可扩展性能够实现多方面的成果。因为已经被开发成一个与动作类计算机游戏有着紧密的构架——一个多人3D空间战斗游戏的Parsec引擎——它主要照顾到了太空飞船的外部空间环境。在关注引擎构架和设计的同时,另一个至关重要的目标就是和扩展引擎自身一样在一定级别上考虑使用引擎来开发一个新的游戏功能和特殊效果。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

感谢

 

我特别要向我的“导师”Dieter Schmalstieg表示非常诚挚的感谢,感谢他帮助并指导我的这个论题研究,以及支持我的观点以及帮助我去实现它,许多有用的见解和评价,并且能够忍受我想个一般的学生一样去麻烦他。而且我也将不会忘记使用Parsec引擎的扩展部分会议的许诺。

自从很多年来Parsec引擎已经变成为真实的团队成果,我要感谢那些所有在Parsec团队中做出杰出工作和巨大贡献的杰出成员:

Andreas Varga, Clemens BeerMichael Wögerbauer,他们都是伟大的程序员并为Parsec项目贡献了很多灵感。

Alex Mastny,他建立了更多令人印象深刻的美工和设计,这些着实让我感到很意外的惊喜。

Stefan Poiss,这么多年来,他的音乐天赋对我来说一直是个奇迹,而且最终他的音乐也一直使我欢呼和振奋。

感谢Karin Baier为整个过程提供了音效。

感谢Thomas Bauer,感谢他提供了许多无价的方法、思路,并也要感谢Uli Haböck利用晚上时间,很多在数学方面有洞察力的讨论和研究。

感谢Thomas Theußl能够忍受一个游戏技术痴迷、让生厌的人时常出现在他的办公室,占用的他的计算机,并还经常在那里享用他那一杯热巧克力。

感谢Karin Kosina,感谢他有着令人羡慕的幽默感、他的鼓励和他在音乐上的特殊体验——Kaos Keraunos Kybernetos!

感谢Helwig Hauser,它促使我很多演讲,CESCG(?),以及感谢计算机图形学协会的——la tante est mortevive la tante!

感谢Gerd Hesina在许多场合的帮助。

感谢Anna Vilanona i BartroliZsolt Szalavári带来一些开心的事情。

最后,但远没有结束,我要感谢那些所有的Parsec爱好者,他们正在急切企盼这最后的正式版本的出台…我们正在努力的工作中!

 

 

 

 

 

 

 

 

 

 

1章、介绍

 

1.1  3D计算机游戏引擎和图形学研究

大约在十年之前,计算机图形学的研究和计算机游戏开发是完全分开的两个不同领域。计算机游戏在消费市场上向来都有特有的目标,并且在那个时代,因为图形处理能力的问题,计算机消费硬件几乎并不在计算机图形学专家们的视觉范围内。因此,专家们在那时就使用昂贵的高端图形工作站,而游戏开发者们则面向完全不同的硬件平台。这个也暗示了那些计算机图形学专家所开发和使用的图形学算法和技术理论无法真正的被游戏开发者所使用。从另一个角度看,图形学专家同样也不会把计算机游戏视为自己的科学研究工作中的一部分。

但是,在这最后的十年,特别是最近不长的一两年里,我们已经能够看到廉价消费性图形硬件系统的性能已经达到——在很多领域甚至超过——极其昂贵的高端图形硬件的性能。这种形势下,使得计算机游戏开发者们逐步使用研究社团的科学成果,以渐渐缩小从一个新的引入技术到实际运用在消费品中的差距。计算机游戏的研究和开发已经从而在图形学应用领域中变得非常的重要。

推动了当今的3D计算机游戏发展的游戏引擎是真正一个不可思议的,让人感兴趣的焦点领域,在这个领域中,计算机图形学研究与引擎设计汇集到了一点上。但是,尽管图形系统是当前游戏引擎的一个组件,并使之可视化,但这并不意味着一个游戏引擎只有图形系统。有一种说法是一个游戏背后的特定游戏引擎包含了所有的技术,有能够创建现有的游戏环境但看上去又与游戏自身的内容情节相分离的系统框架。这其中也包括网络系统组件、人工智能系统(AI)、脚本语言系统、音响系统和其他相关的技术。

 

 

 

1.1 两个高度成功的游戏引擎。左:雷神之锤(Quake 右:虚幻(Unreal

 

除了在他们各自领域高度成功驱动游戏之外,这最近几年的最突出的游戏引擎还已经有了显著的成功商业授权的案例,像雷神之锤(Quake)和虚幻(Unreal)。尽管这两个引擎本来都是为特定游戏所设计开发的,但这些引擎也能够非常理想的被运用到其他在故事情节、图像表现、音响效果等多方面完全不同的游戏开发过程之中。事实上,为开发建立一个顶级游戏引擎所必须付出的努力是巨大的,同样以商业角度来看,开发一个能够授权给其他公司使用的引擎是一件很明智的做法,可以让这些公司把主要的开发精力更多的放在实际游戏内容的开发工作上而不是程序开发技术本身。这一点,对于那些没有能力开发一个完整引擎同时又在开发游戏的公司来说很重要,特别是比起那些有开发引擎能力的公司来说。

比起那些为一个特定游戏或者某个系列游戏开发的游戏引擎来说,有一小部分公司专门管住在引擎的开发上,与此同时他们并不关注于游戏的开发本身。Numerical Desgn Ltd.公司的NetImmerese就是这方面的典型例子,它是一个专门用于授权开发的具有弹性的独立游戏引擎技术。由于引擎本身的高弹性,所以可以称之为通用游戏引擎,然而例如像Quake这样的引擎是被定义为限制在一个动作类型的游戏或者至少是特定类型的游戏上的。在另一方面,高弹性也是通用引擎中主要的固有问题之一。因为他们并不牢牢的关注在那些被种种条条框框所限制的游戏内容上,所以这些引擎无法通过简单的方法达到像一些特别为某些游戏类型所定的引擎所能够达到的高性能表现。还有一个通用引擎的问题就是绝大多数的游戏开发商喜欢购买那些使用了已经被证明是成功了的技术的游戏通用引擎,特别是一个高度成功的售出了至少一百万套游戏所使用的游戏引擎。

 

1.2 关于本书的论题

这个论题包含了很多属于通用游戏引擎构架的材料,但其中的大多数都是关于一个特定引擎的设计与构架。这个称之为Parsec的引擎,是一个具有高可移植性和可扩展性的多人游戏引擎。该引擎是依照模块化、伸缩性、可扩展性以及更多的是可移植性的原则设计开发的。

比起通用的游戏引擎来说,Parsec引擎属于某一类或这里属于某特定类型游戏的引擎系统。这也就是说它是与一种动作类游戏同时开发的,而并不是因为很巧合的称它为Parsec,这期间没有安全距离。

1.2 Parsec

Parsec是一种多人3D战斗游戏,特别是旨在Internet网络联机娱乐上。基本上玩家可以互动的加入游戏进入太阳系系统的游戏情节中,也可以通过所谓的星门从一个太阳系到另一个太阳系之间进行跳跃。游戏的重点是快节奏的动作、引人入胜的图像和精彩的背景音效和反映无限巨大的外部太空空间设定的音乐。在本书的第五章中将会详细介绍游戏和它的背景故事内容。

Parsec引擎利用一个抽象的渲染API提供的功能,有着高性能的图形图像表现,以及一个封装了与系统相关功能的模块化子系统以此为了达到高的可移植性。网络子系统同样独立于底层的宿主系统和已经在使用的传输协议。当前系统已实现对Win32LinuxMacOS等宿主系统,OpenGLGlide的图形API系统和TCP/IPIPX等网络协议体系系统的支持。因为Parsec引擎开发过程的一个主要目标就是实现高可移植性,所以移植到其他不同的宿主系统、不同的图形API系统和网络协议系统是一个极其直接、简单的过程。

在对Parsec引擎的描述过程中,我们将重点放在构架和设计方面。然而,为了帮助那些对使用、扩展Parsec引擎和丰富Parsec引擎的开发者们向他们提供足够的技术细节,同时还要开发Parsec引擎,在这个过程中我们已经开始疲于奔命了。

 

1.3 如何组织本文

这篇文章是由三个主要的部分组成。

第一部分——基础和相关工作——其中包括关于一些在许多游戏引擎中非常重要的图形算法的基础问题。同样也包括对那些计算机3D游戏中极为重要的底层图形API函数接口的简要描述和介绍,比如OpenGLGlide。另外还有一些在近十年来在3D计算机游戏领域和消费性3D计算机硬件方面的发展过程的非常流行的相关作品的回顾。在这个部分中,我们涉及到许多关于计算机游戏本身以及他们正在使用和已经使用的算法和技术的背景材料。

第二部分——Parsec的设计与构架——这其中涉及到这篇论文中的主要话题,也就是Parsec引擎的设计与构架。尽管我们注意力放在了设计和构架方面,但是更多地实现方面将涉及到很多的细节。可移植性的关键设计是以引擎的整个构架作为中心的。我们将首先回顾Parsec游戏本身,然后给出关于他的构架总的概观,接着是关于构架得更多技术细节和实现。在这些概括介绍之后,我们将为每一个主要的引擎组件单独设立一个章节来讲解。

第三部分——结论——进行全面地文献总结和提供一些总结性的意见。

 

1.4 实现的概观

在这篇论文中所介绍的工作是关于ParsecParsec引擎和Parsec SDKSoftware Development Kit 软件开发包)的实现与使用。

Parsec是一个使用了同名游戏引擎的空间战斗计算机游戏,为了向玩家们提供交互性游戏经验。

Parsec SDKParsec引擎及其代码的子部分,Parsec引擎及其代码将可以在Internet上以源代码的形式得到,为了让用户进行修改和添加新功能的开发工作,例如添加新的武器和特殊效果、新的游戏模式,甚至是完全的修改,比如修改成几乎完全不同类型的游戏。

这篇论文同样也为了向希望在Parsec SDK上工作的开发者们提供背景信息和参考材料。

目前所有这些由180,000多行源代码构成的引擎组件是由像CC++写成的,这些代码被包含在近900多个、总计大约7MB的代码源文件中。所支持的系统由Win32MacOSLinux系统。OpenGLGlide3dfx)都作为在宿主系统中所支持的图形API目标函数。可用的网络组件的实现支持TCP/IP协议簇和Novell公司的IPX协议。

引擎的整个代码是非常模块化的,特别是以至于在不同宿主系统和图形API之间很重要。他能够非常透明地支持升序格式(例如Intel x86系列处理器)或者支持降序格式(例如PowerPC系列处理器)的系统,同时封装那些用于针对不同的目标平台的系统细节。

引擎代码中被包含在层次性很好的结构源代码数,代码数本身是对应了相应的目标子系统构架、宿主系统和图形API的版面,这个是作为论文的主要部分(第二章)来描述的。因为与系统相关的部分被清晰分离和分类了,它能够简单合理的为了特殊目标平台或者图形API扩展那些源代码文件。

和接下来关于构架方面的章节和有针对性地介绍特定子系统的章节一样,在第五章中包括更多实现方面的概观。

(未完)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值