Game Engine Architecture by Jason Gregory:1.6 实时游戏引擎架构(1)

一个游戏引擎一般是由工具集和一个运行时组件组成。下面部分我们将首先研究这个运行时组件,然后再看工具集。
图片1.11展示了组成一个典型的3D游戏引擎的主要的组成部件。没错,它非常宏大!而且这张图片并没有把所有的工具都包含进来。游戏引擎绝对是一个大的软件系统。
就像其它所有的软件系统一样,游戏引擎是分层次结构的。一般来说上层依赖下层,但反过来不一定成立。当下层也依赖上层的时候,我们就说这是一个循环依赖。循环依赖在所有的软件系统中都是需要尽量避免的,因为它们导致系统联接关系不明,让软件变得不可测试,阻止代码重用。这个对大规模系统如游戏引擎尤其正确。

 

Runtime game engine architecture
图片1.11 Runtime game engine architecture

现在是图1.11中对话框中描述的组件的一个概览。本书剩下的部分将对这些组件进行一个更加深入的探讨,并学习这些组件如何被整合成一个功能齐全的完整的系统的。


1.6.1 目标硬件
目标硬件层,在图1.12中单独列出来的,是将运行游戏的电脑系统或者主机。典型的平台包括运行Windows或者Linux的PC,苹果iPhone和苹果电脑,微软的Xbox和Xbox 360, 索尼的PlayStation,PS2, PSP, PS3,任天堂的DS, GameCube, 还有Wii.这本书中大部分主题都是平台无关的,不过我们将会讲到一些针对PC或者主机的不同设计上的考虑,在某些有比较大的差别的地方。


1.6.2 硬件驱动
如图1.13描述的一样,硬件驱动是比较底层的由操作系统或者硬件开发商提供的软件组件。硬件驱动管理硬件资源,把操作系统与引擎上层跟无数不同的可用的硬件细节操作隔离开来。


1.6.3 操作系统
在PC上,操作系统是一直运行着的。它指挥着多个程序在一台电脑上运行,其中就包括你的游戏。操作系统如微软的Windows采用时间片的方法来让多个运行程序分享硬件资源,这个就是广为人知的抢占式多任务(pre-emptive multitasking). 这个表示一个PC游戏永远不能假定它对硬件有着完全的控制 - 它必须跟系统中的其它程序“和平共处”.
在主机上,操作系统一般只是一个很小的直接链接到你的游戏运行程序的库。在主机上,游戏一般完整的“拥有”整个硬件。不过,根据Xbox 360和PS3的介绍,并不是严格的这种情况了。例如,这些主机的操作系统可以打断你的游戏的运行,或者取得某些系统资源来显示在线信息,或者允许玩家暂停游戏,调出PS3的Xross Media Bar或者Xbox 360的dashboard。不管怎样,所有主机和PC上面的开发的差别在慢慢的缩小。


1.6.4 第三方SDK和中间件
大多数游戏引擎都使用了许多第三方的SDK和中间件,SDK提供的或者或者接口一般称之为应用程序接口(API).我们来看一些例子.

1.6.4.1 数据结构和算法
如同其它任何软件系统一样,游戏也非常需要一堆数据结构和算法来帮助处理。这是一些第三方提供的这些功能的例子。
* STL. C++标准模板库提供了大量的代码和算法来处理数据,字符串和I/O流
* STLport. 这是一个轻量级的简化过的STL的实现版本
* Boost. Boost是一个强大的处理数据结构和算法的库,被设计成STL的风格。(在线的Boost文档还是一个学习计算机科学的好地方。)
* Loki. Loki是一个强大到让你头痛的通用编程模板库。

游戏开发者在是否在引擎中使用模板库如STL上产生了分歧。有些人觉得STL的内存分配模式并不高效并导致内存碎片(看5.2.1.4节),这使得STL在游戏中不适用。另外一些人觉得STL的强大和方便足以掩盖它的缺点。而且事实上大部分问题都可以解决。我的个人意见是STL在PC上面使用是没有问题的,因为它的高级的虚拟内存机制对于小心的内存分配不是那么严格(但仍然需要小心)。在主机上,由于受限的或者根本就没有虚拟内存机制,还有昂贵的cache miss开销,你最好自己写一个具有可预测的或者极少内存分配的自定义数据结构(在PC项目上这样做的话也不会错到哪去).


1.6.4.2 图形
大部分游戏引擎是建立在这些硬件接口库上面的:
* Glide. 这是一个给老式Voodoo显卡的3D图形SDK. 它在硬件坐标转换和光照加速(hardware T&L)也就是DX8出现的时代非常流行。
* OpenGL. 一个广泛使用的轻便的3D图形SDK.
* DirectX. 微软的3D图形SDK,OpenGL的主要竞争对手。
* libgcm是一个底层的直接面向PS3的RSX显卡的接口,是索尼提供的一个比OpenGL更高效的选择。
* Edge是一个由Naughty Dog还有索尼为PS3提供的强大的渲染和动画引擎,它被许多第一方及第三方游戏工作室采用。(译者按:第一方工作室,first-part studio,与某家游戏机制作商签约的专门为他们制作游戏的工作室)


1.6.4.3 碰撞和物理
碰撞检测及刚体物理(在游戏开发交流中简称为“物理”)由下面这些有名的SDK提供支持:
* Havok. 一个非常流行的工业水准的物理及碰撞引擎
* Phy X. 另外一个具有工具水准的物理及碰撞引擎,可以从NVIDIA那免费下载。
* Open Dynamic Engine.(ODE) 是一个非常流行的开源物理/碰撞模块。


1.6.4.4 角色动画
这里有许多商业的动画包,包括但不限于:
* Granny. Rad Game Tool的非常游戏的Granny toolkit包括了能支持所有主流3D制作软件包括Maya和3DMax的性能优良的3D模型及动画导出插件,一个能读取和操作导出的模型及动画数据的实时库,还有一个强劲的运行时动画系统。在我看来,所有商业的或者私有的库中,Granny SDK有是最着最好的设计及最符合逻辑的动画API,特别是它对时间的天才的处理。
* Havok Animation. 随着角色变得越来越真实,物理及动画之间的界线变得越来越模糊。那个开发了游戏的Havok物理SDK的公司决定制作一个免费附送的动画SDK,它使得物理及动画之间的连接变得从未有的简单。
* Edge. Edge库是Naughty Dog的ICE team为PS3开发的,他们是Sony Computer Entertainment America的工具及技术团队,Sony在欧洲的高级技术团队开发了一个强劲的高效的动画引擎,还有一个为了渲染的高效的几何处理引擎。


1.6.4.5 人工智能(artificial interlligence, AI)
* Kynapse. 一直到最近,人工智能一直是由每个游戏自定义的。不过,有家叫Kynogon的公司制作了一个中间层的SDK叫作Kynapse.这个SDK提供低级的AI模块,包括寻路,绕开静态和动态的物体,发现某块区域内的弱点(例如,某个开着的窗户可能就是埋伏的好地方),还有一个合理的关于AI及动画的接口。


1.6.4.6 生物的角色模型(Biomechanical Character Models)
* Endorphin and Euphoria. 这些是用真实人类移动的高级生物模型制作的角色动画包。

我们在前面提到过,角色动画及物理之间的界线越来越模糊。Havok Animation这种工具包试图把物理和动画通过传统方式结合起来,也即是通过Maya这类工具做出用真人动画来提供主要的动画,而通过给出物理参数进行实时的运算。不过最近一家叫做natural Motion Ltd的公司制作了一个产品试图重新定义游戏中或者其它数字媒体中如何处理角色动画。

它的首款产品,Endorphin,是一个Maya插件,它允许动画师对角色进行完全的生物模拟并导出就如同手动动画制作一样的结果。这个生物模型计算重心,角色重量分布,以及一个真实的人在重力及其它作用力影响下如何保持平衡及移动的细节。

它的第二个产品,Euphoria,是一个Endorphin的实时版,它试图产生在不可预测作用力影响下实时的精确的物理及生物动画。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 《游戏引擎架构第二版》是由Jason Gregory所著的一本关于游戏引擎架构设计的书籍。它是对游戏引擎设计和构建的详细指南,旨在帮助开发者深入了解游戏引擎的内部结构和工作原理。 本书的第二版通过更新的内容和更详细的解释,进一步讨论了创建高效且易于使用的游戏引擎的各个方面。它涵盖了从高级架构设计到底层系统开发的方方面面,包括渲染、物理、动画、声音、AI、网络和工具等。读者可以从中学习到如何在各个层次上设计和实现游戏引擎的核心组件。 《游戏引擎架构第二版》强调了模块化和可扩展性的重要性。它提供了许多实践经验和设计原则,帮助开发者在建立游戏引擎时更好地组织代码和功能。此外,本书还提供了大量的案例研究和实际应用的示例代码,使读者能够更好地理解理论并将其应用到实际项目中。 该书面向具备一定游戏开发经验的开发者,旨在帮助他们扩展自己的技能,提高游戏引擎设计和开发的水平。通过学习《游戏引擎架构第二版》,读者可以更好地了解游戏引擎内部的工作原理,从而更好地优化游戏引擎的性能,并能够构建出更灵活、可靠和可维护的游戏引擎。 ### 回答2: 《Game Engine Architecture,Second Edition》是一本关于游戏引擎架构的书籍。这本书是游戏开发领域的经典之作,旨在介绍游戏引擎的设计和实现原理。 这本书的第二版相对于第一版进行了大量的更新和改进。作者在新版中添加了更多的案例分析和实际应用示例,以帮助读者更好地理解和应用书中所介绍的概念。此外,第二版还对游戏引擎开发中的最新技术和趋势进行了深入的探讨和解析。 《Game Engine Architecture,Second Edition》的内容包括游戏引擎的基本概念、引擎的组成和功能模块、资源管理、图形渲染、物理模拟、碰撞检测、游戏逻辑、声音和音频、网络通信等方面。通过系统化而全面的介绍,读者可以了解到游戏引擎的整体架构和各种技术细节。 该书还强调了良好的软件设计和开发实践,如可扩展性、可维护性和模块化设计。除了技术知识,作者还分享了个人的经验和见解,帮助读者更好地理解和解决游戏引擎开发中的挑战和问题。 总的来说,《Game Engine Architecture,Second Edition》是一本非常有价值和权威的游戏开发参考书籍。无论是游戏引擎开发者、游戏程序员,还是对游戏开发感兴趣的爱好者,都可以从中获得宝贵的知识和指导,提升自己的技术水平。 ### 回答3: 《游戏引擎架构,第二版》是一本关于游戏引擎设计原理和实践的权威参考书籍。在这本书中,作者详细介绍了游戏引擎架构设计和实现方法。 首先,作者介绍了游戏引擎的整体架构。他提到了游戏引擎由多个子系统组成,如图形渲染、物理模拟、碰撞检测等。每个子系统负责不同的任务,并且它们之间需要进行良好的通信和协调。作者解释了如何设计这些子系统的接口和数据结构,以实现高效的工作流程和可扩展性。 其次,作者深入探讨了游戏引擎的核心功能。他介绍了游戏场景的设计和管理,包括实体组件系统和场景图等。他还讨论了游戏物理模拟的基本原理和技术,如刚体动力学和碰撞反应。此外,作者还解释了虚拟摄像机、光照和阴影等图形渲染的相关知识。 此外,作者还讨论了游戏引擎的性能优化和调试技巧。他提到了常见的性能瓶颈和优化策略,例如避免过多的内存分配和减少渲染调用次数。他还介绍了一些调试工具和技术,如性能分析器和调试器,以帮助开发人员发现和解决问题。 总的来说,《游戏引擎架构,第二版》通过深入浅出的方式,系统地介绍了游戏引擎的设计原理和实践。这本书对于有意设计和实现游戏引擎的开发人员来说是一本非常有价值的参考书籍,也可以作为大学课程的教材。读者将从中掌握到构建高性能、可扩展和易于调试的游戏引擎所需的知识和技能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值