第26章 站在巨人肩膀上——游戏引擎技术导论

章节导读
本章内容可以开阔大家的视野,让大家对游戏引擎有一个全新的认识。
游戏引擎是指一些已编译好的可编辑电脑游戏系统或者一些交互式实时图像应用程序的核心组件。这些系统为游戏设计者提供各种编写游戏所需的各种工具,其目的在于让游戏设计者能容易和快速地做出一款游戏作品,而不是从零开始写起,这样大大提高了开发的效率,节约了开发的时间和开发的成本。

游戏引擎让我们站在巨人的肩膀上进行游戏的开发,而不是从零开始。

26.1 游戏引擎的起源、意义和概念

26.1.1 游戏引擎的起源和意义

上帝说,要有光,于是,就有了光。
曾经有一段时期, 游戏开发者关心的只是如何尽量多地开发出新的游戏并把它们推销给玩家。
尽管那时的游戏大多简单粗糙, 但每款游戏的平均开发周期也要达到8~ 10 个月以上,这一方面是 由于技术的原因,另一方面则是因为几乎每款游戏都要从头编写代码, 造成了大量的重复劳动。渐 渐地, 一些有经验的开发者摸索出了一个偷懒的方法,它们借用上一款类似题材的游戏中的部分代 码作为新游戏的基本框架,以节省开发时间和开发费用。根据马克思的生产力学说, 单位产品的成 本因生产力水平的提高而降低,自动化程度较高的手工业者最终将把那些生产力低下的手工业者淘汰 出局,引擎的概念就是在这种机器化作业的背景下诞生了。
简而言之,因为想用更短的周期开发游戏,省掉重复编写代码的功夫,于是便有了游戏引擎。
首款的3D 引擎诞生于1992 年, 3D Realms 公司/Apogee 公司发布了一款只有2 兆多的小游戏 《德军司令部》( Wolfenstein 3D ) 。之后这款游戏引申为Wolfenstein 3D 游戏引擎,这也是 史上首款3D 引擎,它的作者是大名鼎鼎的约翰· 卡马克, 这位id Software 公司的首席程序师正是 凭借这款Wolfenstein 3D 引擎在游戏圈里站稳了脚跟。
之后,游戏业界都受此启发,各式各样的游戏引擎层出不穷。而各种游戏引擎的出现,使得游 戏开发并不需要从零开始,从而使得开发的周期大大缩短, 也使得开发成本大大降低。
游戏引擎崛起,游戏产业的黎明, 就此降临。

26.1.2 游戏引擎的概念理解

游戏引擎好比赛车的引擎, 是用于控制所有游戏功能的主程序,从计算碰撞、物理加速系统和物体的相对位置, 到接受玩家的输入,以及按照正确的音量输出声音等等。无论是角色扮演游戏、即时策略游戏、冒险解谜游戏或是动作射击游戏, 哪怕是一个只有1兆的小游戏,都有这样一段起控制作用的代码。
这里我们抛出一个概念。游戏引擎是指一些已编译好的可编写电脑游戏系统或者一些交互式实时图像应用程序的核心组件。这些系统为游戏设计者提供各种编写游戏所需的各种工具, 其目的在于让游戏设计者能容易和快速地做出一款游戏作品,而不是从零开始写起,这样大大提高了开发的效率,节约了开发的时间和开发的成本。
可以这样说,游戏引擎让我们站在巨人的肩膀上进行游戏的开发,而不是从零开始。

26.1.3 一款完善的游戏引擎的构成

我们很大程度上将游戏引擎都理解为渲染引擎,分为2D 图形引擎和3D 图形引擎,其实游戏引擎并不单单指渲染引擎。渲染引擎只是一款完善的游戏引擎最重要的组成部分,而一款完善的引擎,还包含物理引擎、碰撞检测引擎、音效引擎、脚本引擎、电脑动画引擎、人工智能引擎、网络引擎、场景管理引擎,以及IO 管理引擎等等。
其中, 3D 引擎的渲染系统通常建立在一套或者多套高级的图形API 之上(比如我们熟知的Direct3D 与OpenGL)。

《3D 游戏编程大事技巧》里有一妙言,要开发引擎必须脱离任何第三方图形API实现渲染, 即软引擎, 只有弱者才用第三方图形API 开发引擎, 霸气侧漏有木有。

26.1.4 DirectX 与游戏引擎的区别

在我们开始接触游戏引擎的时候,往往不清楚DirectX 与游戏引擎到底有何区别,这里我们展开来讲一下。
其实说起来非常简单,首先, Direct 是微软旗下的一种应用程序接口( API ),它为各种品牌的硬件提供了一个共同的硬件驱动标准,无论你是什么品牌的硬件,只要你遵循DirectX 约定的准则,用DirectX 这套API 开发出来的游戏就可以在你的硬件上很好地运行。我们可以把DirectX理解为硬件驱动,而Direct3D,只是DirectX 之中负责3D 图形渲染的一个组件而已。
而游戏引擎是为了实现一款游戏雏形而编写的一系列可重用的代码,很多游戏引擎的渲染部分实现了对Direct3D 的封装。我们可以理解游戏引擎为一系列的软件代码,而我们利用游戏引擎中已经现存的代码,开发起游戏来就能事半功倍。
所以,综合一下:

  • DirectX,可以理解为硬件的驱动,它为各种品牌的硬件提供了一个共同的硬件驱动标准。
  • 游戏引擎,是一系列构成一款游戏的可重用的代码,是用于控制所有游戏功能的主程序,游戏引擎的前身可为一款完整的游戏作品。

26.2 人气开源游戏引擎介绍

想事半功倍地开发出优秀的游戏作品,在选择游戏引擎上是必须要下足功夫的。
目前,多半的游戏引擎都是开源且免费授权的,也就是说,如果我们采用某款开源游戏引擎开发出了自己的游戏,无需任何费用,只要在我们的游戏作品中表明,使用了什么引擎来进行游戏开发的就可以了。也就是我们经常在很多游戏片头会看到的Power by XXX ,比如Power by Ogre 。下
面我们就来介绍几款目前比较火热的开源游戏引擎, 用它们进行游戏开发是完全免费的, 而且它们
开放源代码,我们可以阅读它们的代码进行深入的学习和提高。
1. lrrlicht Engine
lrrlicht Engine (鬼火引擎〉始于2003 年, 次年即被评为最佳开源游戏引擎。它具有高性能的实时3D 引擎, 用C++编写,也可用于.Net 语言。拓展语言绑定包含java 、perl 、ruby 、python,跨平台支持,使用D3D、OpenGL,以及自带API。 lrrlicht Engine 可以在移动平台Android 以及iOS上使用。值得一提的是, 鬼火引擎有专门的Android 版。
其功能特点可以与商业3D 引擎相比。优点是容易掌握,好学。新手入门建议学习Irrlicht 。
2. Ogre
Ogre (面向对象的图形渲染引擎) : Ogre 是用C++编写的,以现场为导向,灵活的三维引擎,它主要用于那些利用硬件加速的3D图形应用程序。它的类库提取了所有基础系统库的细节, 如Direct3D 和OpenGL , 并提供了一个基于世界对象和其他直观类的界面。Ogre 支持跨平台, 也就是说, Ogre 理论上可以在Android 以及iOS 等移动平台上使用, 不过需要进行相关的移植。
Ogre 人如其名, 完全采用面向对象的思想来进行设计,整体结构显得非常优雅, 宛如一件艺术品。在开源游戏引擎中, Ogre 有着最华丽的渲染质量,可以和大多数3D 商业引擎的渲染效果一较高下。作者非常喜欢这款开源引擎, 只可惜它仅仅是图形引擎,而不是功能全面完整的游戏引擎。
值得一提的是, 目前非常具人气的ARPG 游戏《火炬之光》系列就是采用的Ogre 引擎来开发的。
这里我们贴一副《火炬之光2 》的游戏美图:

好了, 看完绚丽的游戏截图,下面我们继续学习。相信总有一天, 我们也可以亲手写出这样优秀的游戏作品出来。
3 . Delta3D
Delta3D 是一个功能齐全的游戏引擎, 可用于游戏、模拟或其他图形应用。它的模块化设计集成了其他的开源项目,如开放场景图、开放动力学引擎、人物动画库和OpenGL 。Delta3D 把这些开源项目集成到一个易于使用的应用程序编程接口中。
4 . NeoEngine
NeoEngine 是一个全功能的用C++编写的开源3D 三维游戏引擎。该引擎是多平台的, 包括OpenGL 和DirectX 渲染功能, 支持Windows 、Linux 和Mac OS X 系统, 它提供了场景管理、顶点和像素着色、骨酷动画和物理、脚本,以及一个完全集成的工具链。

26.3 游戏引擎排名的权威榜单一瞥

本节收集了近年来公布的各大引擎榜单中的一些权威的引擎排名, 供大家参考。由于篇幅原因, 不可能对其中提到的每款引擎都做详细的介绍,如果大家对某款引擎感兴趣, 可以善用搜索引擎 google/百度。
需要注意的是,由于当今移动互联网的飞速发展, 很多地方已经将Unity3D 公认为全球最著名、 使用最广泛的游戏引擎。但其实Unity3D 并不适合在PC 上开发大型的3A 游戏大作。
1. develop 杂志2012 年十大游戏引擎排名
英国develop 杂志评选出来的2012 年十大游戏引擎排名如下:

2. devmaster.net 2012 年最佳商业引擎排名
接着是devmaster.net 网站评出的2012 年最佳商业引擎排名( Most Reviewed Commercial Engines) :

3. devmaster.net 2012 年最佳开源引擎排名( Most Reviewed Open Source Engines )
上面是最佳商业引擎排名,接着我们看看devmaster.net 网站为我们评出的2012 年最佳开源引擎排名( Most Reviewed Open Source Engines) :

这些权威的榜单或多或少地反应了当前游戏引擎业界中,哪些游戏引擎是比较具人气、比较热门的,大家如果需要选择一款游戏引擎深入学习和使用的话,这些榜单能给出选择的大方向。

26.4 优秀的免费/开源第一人称射击游戏介绍

提到下PS (第一人称射击游戏〉,大家马上会联想到CS 和CF ,但是,在FPS 游戏领域, 除 了这两款非常热门的作品之外,还有很多很多值得一提的优秀作品。
本节为大家带来了几款优秀的免费或开源FPS 游戏的介绍,依然是用来开阔大家的视野方 便大家在看完这本书之后进行后续学习。
既然下面的这几 款作品是免费或开源的, 就表示它们不仅可以免费玩到,而且游戏的源代码是 可以在互联网是找到的,这可是不可多得的珍贵学习资料呢。它们会让你了解一款完整游戏的代码 构成,下载、编译、阅读和学习它们的源代码, 一定会让你收获颇丰, 早日编写出属于自己的游戏。 好了,我们开始介绍吧。
1. AssaultCube
AssaultCube 是一个开源第一人称射击游戏,基于现实场景,能够团队作战,能运行在Microsoft  Windows 、Linux 和Mac OS X 平台上,这个游戏基于开源免费软件Cube 引擎,所以对于AssaultCube 只有地图是有版权的。而Cube 是一个开源、非传统的游戏引擎,结合很高的精度动态遮挡筛选与 在动态LOD 上迅速定形的几何模型布局, 拥有可配置的fps&图形细节。使用OpenGL & SDL 。这 个引擎的设计着重于通过简单的结构和猛烈火力展示丰富的功能,而不是精巧的复杂性。另外, Cube 也有同名的第一人称射击游戏。
2 . Aleph One
Aleph One 曾被称为Marathon 开源项目,是在Bungie Studios' Marathon 2: Durandal 上做了改进形成的项目。这个项目始于2000 年, Bungie 刚发布代码不久,就得到微软和铁杆游戏迷社区共同继续完善,现在Aleph One 已经成为一个由社区支持的颇为成功的开源项目。
3. OpenArena
OpenArena 是一个免费和开源的三维第一人称射击游戏。它吸收和利用了开源游戏《雷神之锤三:团队竞技场( QuakeIII:Team arena )》的源代码,进行了细节上的演绎,从而改进成一款更有特色的游戏。

26.5 关于游戏引擎的一些思考

很多朋友也会想到,既然都有了现成的游戏引擎为我们封装好各类DirectX 和OpenGL 的库函数,甚至游戏引擎公司为我们做出了各类可视化的设计工具,让我们无需了解调用的细节就可以使用这些工具制作出自己的游戏,那我们是不是就不用去学习图形API ,也就是不用去学习Direct3D或者OpenGL 了?
一千个人人眼中有一千个哈姆雷特。
如果你是本着快速开发一款游戏就完事交差的心态,知其然不知其所以然, DirectX 或者OpenGL 其实并不用去学习,直接去学习一款好的游戏引擎的SDK 就可以了。
如果你是本着学习求知的心态,想要把游戏开发的各方面知识和细节做到心中有数,甚至以后想自己写一款游戏引擎, DirectX 或者OpenGL 是必须要学的。适当了解DirectX 或者OpenGL 之后,再来接触一款游戏引擎,接触它的源码,我们就有资本看懂这些源码的实现细节, 就可以很容易地把这款游戏引擎使用DirectX 或者OpenGL 进行渲染的细节脉络看得清清楚楚。经常我们还涉及到了各种不同版本硬件渲染的支持问题,比如DirectX 8 与DirectX9 , 这时候就会考验我们对图像API 的掌握情况。同样, 掌握了DirectX 或者OpenGL 更利于我们对渲染或者是引擎的优化做到游刃有余。
另外, 大家都知道,撇开C 语言不谈, C++在目前高级编程语言中执行效率和性能首屈指。
大家也知道, 三维游戏的画面渲染有着非常高的性能需求。就光这一条对性能的要求,什么C#,什么Java 等等,全都只有在一旁抹鼻子哭了。
所以,事实如此, 现在市面上所有画质精美的单机游戏作品(鬼泣5 、上古卷轴 5 、刺客信条3 、仙剑奇侠传5 前传、古剑奇谭等等〉,所有的大型网络游戏( Dota2 、英雄联盟、魔兽世界、龙之谷、剑灵等等〉,所有高性能的三维游戏引擎(虚幻3 、Unity3D 、Cry Engine3 等等) ,以及一些高性能的2D 游戏引擎( Cocos2d-x 等等〉,都是用C++来开发的。
其实游戏引擎并没有那么神秘,说白了也就是那么回事,用类封装好功能的C++ ( 绝大多数引擎是用C++写的,但也有少许特例〉代码而已。C++写出来的游戏引擎自然能跨平台, Unreal Engine 3 、Unity3D 、Cocos2d-x 等游戏引擎就是绝好的例子。
学好C++,你可以亲手写出Unity3D , 亲手写出Cocos2d-x ,让大家都叫你大神,大家都用你写的游戏引擎做游戏, 等着你什么时候心情好了更新一下给引擎加更多功能: 而不是只会盲目跟风,今天大家说Unity3D 火,就都去学Unity3D ,明天大家说Cocos2d-x 热门, 就来学学Cocos2d-X.
你学游戏引擎, 学的只是人家某引擎作者某C++大神某引擎团队按心情来定的函数调用方式, 学的只是如何调用一些别人写好的一些类, 一些API 函数。这样在别人制定的一些rule 中固步自封,大家觉得有技术含量么?
我们是时候该该想一想了,为什么现在全球范围内优秀的三维引擎就是没有我们国产引擎的影子。
所以,无论是哪个平台, Windows 也好, iOS 也好, Android 也罢,如果你真正想在游戏开发领域有所作为,混出个名堂,请学
C++,请学计算机图形学,请了解计算机图形API ( OpenGL 或者DirectX ),而不是在跟风某种“热门”的游戏引擎的大潮中随波逐流,在某种移动平台的游戏开发中迷信某某引擎,乐不思蜀, 固步自封。

26.6 市面上各类游戏引擎完全列举

最后, 我们列举出目前市面上存在着的游戏引擎,开阔大家的视野。大家如果对某款引擎感兴 趣的话,以引擎的名字为关键字Google 一下, 一般就可以查到它的官方网站或者是Wiki 百科的内 容了。
需要指出的是,这里的引擎有的只是图形引擎, 有的只是物理引擎,也就是说并不都像那些完 善的商业引擎,比如虚幻3 引擎( Unreal Engine 3 ) 一样,具有完善而功能全面的物理引擎、碰撞 检测引擎、音效引擎、脚本引擎、电脑动画引擎、人工智能引擎、网络引擎、场景管理引擎,以及 IO 管理引擎等等。


















  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值