1.4 不同类型引擎之间的区别

本文是Game Engine Architecture的一部分
免责声明

(kid:从现在开始我尽量在翻译中使用游戏和公司的中文名称)
 

游戏引擎通常是类型特定的。被设计用于拳击台上的二人格斗游戏的引擎会和大型多人在线游戏(MMOG)引擎,第一人称射击(FPS)引擎,或者是即时战略游戏(RTS)引擎非常不同。然而,这些不同种类的引擎之间也有大块的重叠部分 —— 所有3D游戏,无论类型,都需要用户进行某种底层输入(鼠标,键盘或游戏手柄),某种形式的三维模型渲染,某种形式的头顶标识(heads-up display,比如文字),一个强大的引擎系统,等等(kid:其实作者挺啰嗦的)。因此,即使Unreal引擎是专门为第一人称射击游戏设计的,它也成功地被大量用于构建各种其它类型的游戏。包括广受欢迎的第三人称射击游戏战争机器,基于角色的动作冒险类游戏格林,一种未来的赛车比赛游戏速度之星

 
让我们来看看一些常见的游戏类别,以及实现他们的技术的一些特别要求。
 
1.4.1 第一人称射击游戏(FPS)
第一人称射击游戏(FPS)的代表作有雷神之锤虚幻竞技场半条命反恐精英,和使命召唤(见图1.2)。历史上这些游戏都与以下性质有关:玩家主要在一个大型但封闭的室内场景中漫游,移动的速度相对较慢。然而,现代的第一人称射击游戏中可能出现各式各样的虚拟环境,包括辽阔的户外区域与狭小的室内区域。现代FPS游戏的移动机制可以包括步行,基于轨道或自由驾驶的车辆,气垫船,船只,和飞机。关于这种类型游戏的概述,请参阅 http://en.wikipedia.org/wiki/First-person_shooter
 
第一人称射击游戏通常是最具技术挑战性的,其复杂程度可能只有第三人称射击/动作/平台游戏和大型多人游戏可以相比。这是因为第一人称射击游戏旨在给玩家提供一种错觉,使其沉浸在一个详细的,超现实的世界之中。游戏行业的很多重大技术创新都在这一类别的游戏中产生,这一点都不令人奇怪。
 
图1.2 使命召唤2 (Xbox 360/PLAYSTATION 3)
 
第一人称射击游戏通常专注于技术,例如
  • 高效地渲染大型3D虚拟场景;
  • 一个合理的镜头控制/瞄准机制;
  • 玩家武器与手臂的高保真动画;
  • 各式各样威力强大的手持武器;
  • 一个不细致的玩家运动和碰撞模型,这经常使游戏中的人物看上去像是在“漂浮”;
  • 具有高保真动画和人工智能的非玩家角色(敌军或盟友);
  • 支持小规模的多人在线游戏功能(最高通常可达64位玩家同时在线),以及无处不在的“死亡竞赛”游戏模式。
第一人称射击游戏所采用的渲染技术几乎总是根据特定需要经过精心调整和高度优化过的。例如室内“地牢爬行”游戏经常采用基于二分空间树或门户系统的渲染系统。户外FPS游戏使用其他种类的渲染优化,例如阻塞裁剪,或将玩家看不见的部分下线。
 
当然,要使玩家能沉浸在超现实的游戏世界中,仅靠经过优化的高质量图形技术是不够的。角色动画,音效和音乐,刚体物理,过场动画,以及无数的其他技术都必须处在尖端位置才行。因此,这个类型的游戏有着行业中最严格而广泛的技术要求。
 
1.4.2 平台游戏和其他第三人称游戏
“平台游戏”指的是那种以玩家在平台之间的跳跃为主要游戏机制的,第三人称的角色动作类游戏。经典的2D平台游戏包括恐慌空间大金刚陷阱!,和超级玛丽。3D时代的平台游戏包括超级玛丽64古惑狼雷曼2刺猬索尼克Jak & Daxter系列(图1.3),瑞奇与叮当系列以及最近的马里奥银河。在这个网址 http://en.wikipedia.org/wiki/Platformer 可以看到对这个类别游戏的深入讨论。
 
图1.3 Jak & Daxter: The Precursor Legacy
 
基于角色的第三人称游戏与第一人称射击游戏有非常多的共同点,但其把更多的重点放在了主角的能力和运动模式上。此外,玩家所控制的角色必须要有高保真的全身动画,而不是像FPS中仅需为“漂浮的手臂”准备低分辨率的动画。值得注意的是,几乎所有的FPS游戏都支持在线多人对战,所以除了第一人视角,玩家的全身像也必须被渲染。不过,FPS游戏中玩家角色的模型细节度常常不比怪物的模型逼真,更不用说和第三人称游戏中的玩家角色模型相比了。

图1.4 战争机器
 
在一个平台游戏中,主角人物通常是卡通风格的,因此并不需要特别真实或者具有高的分辨率。然而,第三人称射击游戏通常具有一个高度真实的人形玩家角色。在两种情况下,玩家角色通常都有一组丰富的动作动画。
 
一些该类游戏特别着重的技术包括
  • 会移动的平台,梯子,绳索,格子墙,和其他有趣的运动模式;
  • 如同解谜般的游戏环境元素
  • 第三人称的“追踪式”摄像机镜头,由玩家通过游戏手柄(在游戏机上)或鼠标(在电脑上——注意,虽然许多流行的第三人称射击游戏是在PC平台上运行,绝大部分的平台游戏只存在于游戏机平台上)操作;
  • 一个复杂的摄像机碰撞系统用以确保摄像机不会被背景几何体或前景对象遮挡。
1.4.3 格斗游戏
 
格斗游戏的通常形式是两位人类玩家各自操控自己的游戏角色,在一个类似拳击台的环境中不断向对方发起攻击。这类游戏的代表作有刀魂铁拳(图1.5)。维基百科的 http://en.wikipedia.org/wiki/Fighting_game 页面提供了这类游戏的综述。
 
传统的格斗类游戏将它们的技术努力放在
  • 一组丰富的战斗动画;
  • 精确的命中检测;
  • 一个能适应复杂的按钮和手柄按键组合输入的用户输入系统;
  • 人群,或者是相对静止的背景画面。
因为这些游戏中的三维世界非常小,相机位置也时常集中在动作的部分,历史上的这些游戏很少或基本上没有对世界场景进行裁剪的必要。它们同样也不会采用先进的三维音效传播模型。

图1.5 铁拳3 (PlayStation)
 
先进的格斗游戏例如EA的搏击之夜3(图1.6)提升了技术并增加了以下特性
  • 高清的人物角色图形,包括真实的皮肤着色器与地下散射和汗水效果;
  • 高保真的角色动画;
  • 基于物理的游戏角色衣物布料与头发模拟。
值得注意的是一些格斗游戏,如天堂之剑,的游戏场景是一个规模巨大的虚拟世界,而不是一个限定的竞技场。事实上,许多人认为这是一种单独的游戏类别,有时候这种游戏被称为混战。这种格斗游戏需要更多的类似第一人称射击 或即时战略游戏所用的技术。
 
图1.6 搏击之夜3 (PLAYSTATION 3)
 
1.4.4 赛车游戏
赛车类游戏包括了所有主要任务为在某种赛道上,驾驶一辆汽车或其他什么的载具进行比赛的游戏。这类游戏可分出许多子类。仿真类的赛车游戏(“sims”)旨在提供一个尽可能真实的驾驶经验(例如,GT赛车)。街机赛车游戏更注重夸张的游戏效果而非现实主义(例如,旧金山大赛车Cruisin’ USA雷霆快艇)。一个相对较新的分支探索了街头赛车中个性化自己的车辆的亚文化(例如,极品飞车极品醉车)。卡丁车竞赛是另一个子分支,受人欢迎的平台游戏角色或电视角色被重塑为某种怪诞车辆的司机(例如,马里奥赛车, Jak XFreaky Flyers)。“赛车”游戏并不总需要与竞赛有关。例如,一些卡丁车游戏,提供了一些游戏模式,包括玩家彼此之间相互射击,收集金币,或从事其他各式各样的不计时任务。想参与这一类别游戏的讨论,请参见 http://en.wikipedia.org/wiki/Racing_game 。
 
赛车游戏通常是非常线性的,这与老式FPS游戏十分相似。然而,赛车游戏的移动速度通常比FPS游戏快的多。因此,赛车游戏将大部分重点放在各种赛道上,如基于走廊的赛道,环形赛道,有时赛道还具有各种替代路线或秘密捷径。赛车游戏通常将所有游戏画面细节集中在车辆,赛道和即时环境的渲染上。然而,卡丁车赛游戏也要投入显著的渲染和动画带宽用以渲染驾驶赛车的角色。图1.7显示了著名的GT系列的最新一部作品,GT赛车5的游戏截图。
 
图1.7 GT赛车5 (PLAYSTATION 3)
 
一些典型的赛车游戏所具有的技术属性包括
  • 在渲染远景时使用各种“技巧”,比如使用带贴图的二维薄片渲染远处的山和树木;
  • 跑道通常被分解为相对简单的称作“扇区”的二维区域。这种数据结构将用于优化渲染和决定可见性,帮助非玩家控制的车辆的人工智能寻路,以及解决其他的许多技术问题;
  • 相机通常是以第三人称视角跟随在车辆后面的,或者有时是在驾驶室内以第一人称视角出现;
  • 当赛道包含了隧道和其他的一些“紧凑”的环境,为保证相机不会撞上背景几何体,有许多工作要做。
1.4.5 即时战略游戏(RTS)
现代即时战略游戏(RTS)的鼻祖是沙丘II:王朝的建立(1992)。该类别的其他游戏包括魔兽争霸命令与征服帝国时代,和星际争霸。在这个类型的游戏中,玩家需要在一块巨大的地图上部署兵工厂和战斗单位,并尝试以优势兵力淹没对手。游戏世界通常是显示在一个自上而下的倾斜视角下的。对于该类别游戏的更多讨论,请参见 http://en.wikipedia.org/wiki/Real-time_strategy
 
RTS游戏的玩家通常被限制不可以大幅度改变视角以观察更远的地方。这个限制允许了开发人员可以使用许多手段来优化RTS游戏的渲染引擎。
 
图1.8 帝国时代
 
这一类别的老式游戏使用一种基于网格的建筑格局,并使用正投影来大大简化渲染机。例如,图1.8显示了经典RTS游戏帝国时代的屏幕截图。
 
现代RTS游戏有时会使用透视投影以及一个真正的3D世界,但它们仍然使用网格布局系统来确保单位和背景元素如建筑可以正确地与其他单位对齐。一个流行的例子,命令与征服3,在图1.9中显示。
 
图1.9 命令与征服3
 
其他一些常见于RTS游戏实践的技术包括
  • 每个单位都是相对低分辨率的,因此游戏可以支持数量众多的单位出现在同一个屏幕上;
  • 游戏的设计和运行通常是基于高度场地形画布之上的;
  • 玩家通常被允许在地形上建造或部署单位;
  • 典型的用户交互式通过鼠标单击以及区域选择选中单位,加上包含命令,设备,单位类型,建筑类型等等的菜单或工具栏。
1.4.6 大型多人在线游戏(MMOG)
大型多人在线游戏的典型例子有无冬之夜无尽的任务魔兽世界星球大战等等。MMOG被定义为任何支持大量玩家同时在线(从数千到数十万)的游戏,通常所有玩家在一个非常巨大的,持久的虚拟世界中进行游戏(即,游戏内部世界的状态将持续很长时间,远超出任何一名玩家的游戏会话)。在其他方面,该类游戏的游戏体验往往类似于它们的小规模多人同行。该类游戏的子类别包括大型多人在线角色扮演类游戏(MMORPG),大型多人在线即时战略游戏(MMORTS),和大型多人在线第一人称射击游戏(MMOFPS)。对于该类游戏的其他讨论,请参见http://en.wikipedia.org/wiki/MMOG 。图1.10显示了巨流行的游戏魔兽世界的屏幕截图。
 
图1.10 魔兽世界
 
一个强劲的服务器是所有MMOG的心脏。这些服务器维护游戏世界的授权状态,管理用户登入和登出,提供文字聊天或语音聊天(VoIP),等等。几乎所有的MMOG都会要求用户按某种规则缴纳费用以继续游戏,某些游戏可能还会提供游戏世界与现实世界之间的小额交易。因此,中央服务器的最重要作用也许是处理各种计费和小额交易,这是游戏开发者的最主要收入来源。由于MMOG要支持巨大的场景和大量的同时在线用户,这类游戏中图形分辨率几乎总是低于其非大型多人游戏同行。
 
1.4.7 其他类型的游戏
当然,还有许多其它种类的游戏是我们不准备在这里覆盖讨论的。一些例子包括
  • 运动类游戏(足球,垒球,曲棍球,高尔夫,等等);
  • 角色扮演类游戏(RPG);
  • 上帝游戏,例如Populus黑与白
  • 环境/社交模拟类游戏,比如模拟城市模拟人生
  • 益智类游戏,如俄罗斯方块;
  • 以及其他的。
我们已经看到,每种类别的游戏都有自己的特定技术需求。这就解释了为什么不同种类游戏的游戏引擎之间会有所不同。然而,不同类别的引擎之间依旧有大块的技术重叠,尤其当两个引擎时来自同一硬件平台的时候。随着越来越强大的硬件的出现,由于优化而导致的不同类别引擎之间的差异正在逐渐蒸发。因此,重用同一个引擎来开发不同种类的游戏,甚至是不同硬件平台的游戏,将成为可能。

1 介绍

本文是Game Engine Architecture的一部分
免责声明

当我在1979年获得我的第一个游戏机 —— 一个由美泰(Mattel’s)生产的电子游戏系统时,“游戏引擎”这个词还不存在。在当时的成年人看来,这些视屏游戏机和街机无非就是玩具。而使这些游戏运转的软件都是为游戏和硬件高度定制化的。今天,游戏业已成为了一个在规模和流行程度上都能与好莱坞相匹敌的数十亿美元的主流行业。而驱动这些无处不在的三维游戏的软件 —— 游戏引擎,像Quake和Doom引擎,Epic Games的虚幻3(Unreal 3)引擎,和Valve’s 的Source引擎等 —— 已经成为了功能齐全的、可重用的软件开发工具包,它们可被授权用于开发几乎任何能想象到的游戏。
尽管游戏引擎的具体实现和架构各有不同,但当我们考察这些开源以及非开源的游戏引擎时,会发现大体上有模式可循。几乎所有的游戏引擎都包含有一系列相似的核心组件,包括渲染引擎,碰撞和物理引擎,动画系统,音效系统,游戏世界对象模型,人工智能系统,等等。在每一个这些组件中,数量相对较少的一些不完全标准设计方案也开始出现。
有相当多的书对游戏引擎的某个子系统,如三维图形,描述得极尽详尽。你可以通过另外的书籍拼凑出游戏技术其他领域的一些有价值的建议和技巧。然而我一直都未能找到一本书,能为读者提供一副组成现代游戏引擎的所有组件的合理全景图。这本书的目标,就是带领和指导读者参观和实践这巨大而复杂的游戏引擎架构景观。
在这本书中,你将学会:
  • 现实中工业级的游戏引擎产品是如何构建的;
  • 现实中的游戏开发团队是如何组织和工作的;
  • 哪个主要的子系统和设计模式在几乎所有游戏引擎中一次又一次地出现;
  • 每个主要子系统的典型需求;
  • 哪些子系统是通用的,哪些子系统是为某种特定类型的游戏而特别设计的。

我们还将亲自观察一些流行的游戏引擎内部是如何运作的,比如Quake和Unreal。与此同时还有一些知名的中间件,例如Havok物理库,OGRE渲染引擎,Red Game Tools的Granny 3D动画与几何体管理工具包。

在我们开始之前,我们将回顾一些在游戏引擎开发上下文中,大型软件工程所使用的技术和工具,包括
  • 逻辑上的与物理上的软件架构的不同;
  • 配置管理,版本控制,构建系统;
  • 一些使用微软Visual Studio开发环境编写C和C++的技巧。

在本书中,我假设您已经对C++有了一个坚实的理解(C++是大多数现代游戏开发商的选择),并了解软件工程的基本原则。我还假设你已经接触过线性代数,三维向量,矩阵数学,和三角函数(虽然我们会在第四章回顾它们的核心概念)。理想情况下你应该接触过一些实时渲染和事件驱动编程的基本概念。但不要害怕,我将会简短地回顾这些主题。如果你觉得在我们开始之前你需要更进一步地磨练你的技能,我还会给你指出正确的方向。