目录前言序第一部分:基础知识1.简介1.1一个典型游戏团队的结构1.2什么是一个游戏?1.3什么是一个游戏引擎?1.4不同类型的游戏引擎1.5游戏引擎状况1.6实时游戏引擎架构1.7工作和资源流水线2.项目中用到的工具2.1版本控制2.2VisualStudio2.3性能查看工具2.4内存泄漏和坏内存的检测2.5其它工具3.游戏引擎中的程序基础3.1C++基础和最佳实践3.2C++中的数据、代码和内存3.3发现和处理错误4.游戏中的3D数学4.1在2D中解决3D问题4.2点和向量4.3矩阵4.4四元数4.5几种不同向量旋转的实现方法比较4.6其它有用的数学概念4.7硬件加速4.8随机数的产生第二部分:引擎的底层5.底层支持5.1游戏启动和退出子系统5.2内存管理系统5.3容器5.4字符串5.5配置6.资源和文件系统6.1文件系统6.2资源管理器7.游戏主循环和实时模拟器7.1渲染主循环7.2游戏主循环7.3游戏主循环架构风格7.4抽象的时间轴7.5度量和处理时间7.6多处理器下的游戏主循环7.7多人在线游戏的主循环8.人机接口8.1人机接口的类型8.2面对人机接口8.3输入的类型8.4输入的类型8.5人机接口系统8.6实际中的人机接口9.调试及开发工具9.1日志及追踪9.2调试时的屏幕输出小工具9.3游戏中的菜单9.4游戏中的控制台9.5调试用的摄像机及暂停游戏9.6作弊码9.7截屏及将游戏抓取成电脑9.8游戏中的性能查看第三部分:图形和动画10.渲染引擎10.1带深度缓存的三角形光栅化基础10.2渲染流水线10.3高级光照技术及全局光照10.4特效11.动画系统11.1动画的种类11.2骨骼动画11.3姿势11.4Clips?11.5蒙皮及矩阵调色盘11.6动画混合11.7延迟处理11.8压缩技术11.9动画系统构架11.10动画流水线11.11动作状态机11.12动画控制器12.碰撞及刚体12.1你想要游戏中加入物理效果吗?12.2碰撞/物理中间件12.3碰撞检测系统12.4刚体12.5将物理引擎整合到游戏中12.6更进一步:高级物理引擎特性第四部分:可玩性13.游戏可玩性介绍13.1游戏世界剖析13.2实现动态游戏物体13.3数据驱动的游戏引擎13.4游戏世界编辑器14.实时游戏可玩性基础系统14.1游戏性基础系统内容14.2实时游戏物件模型架构14.3游戏世界数据的格式14.4读取和流化游戏世界14.5物体引用和世界队列14.6实时更新游戏中的物体14.7事件及消息传递14.8脚本14.9高层游戏引擎流程第五部分:总结15.更多的15.1本书没有提到的一些引擎15.2再讲游戏性序1.前言当我在1979年得到我的第一台游戏机-Mattel做的一个非常酷的控制系统-的时候,还没有游戏引擎这个术语.那个时候电视游戏和街机在成人眼里只不过是小玩意儿,然后那个时候的软件也使它们跟运行它们的硬件绑定得非常紧密.今天,游戏已经是一个几百亿市场的产业,的无论在规模上还是在受欢迎程度上都不亚于好莱坞电影。引起这一切的软件,它们可以随意搭建出一个3D的世界,也就是游戏引擎。如idSoftware公司的Doomengine(毁灭战士),Quakeengine(雷神之锤),Epic的Unrealengine3(虚幻3),和Valve的Sourceengine。它们已经完整的规格化,做成可重用的开发工具,并开放开发执照给他人,它们差不多可以做出一切游戏,只要能想得到。当游戏引擎在架构和实现的细节上大幅度的变化之后,重构过的粗略的模块渐渐出现了,不论是有开发执照的商用的还是私有的引擎。事实上所有的游戏引擎都包含了一些类似的关键部分,包括渲染引擎,碰撞和物理引擎,动画系统,声音系统,游戏世界中的虚拟物体,人工智能等等。在这些内容中,一些相关的设计标准也渐渐的浮现出来了。有许多非常不错的讲游戏引擎各个独立部分的书,如3D数学等,内容非常详尽。还有一些书把各种有用的小贴士整合起来,涵盖非常广泛的游戏技巧。但是,我还没有找到一本可以给读者提供一个完整的描述现在游戏引擎的情况的书。本书的目的,就在于带领读者欣赏一下这个广阔而又复杂的游戏引擎世界。通过本书你会学到:1.真实的商用的游戏引擎是如何架构的2.现实中游戏开发团队是如何组织和工作的3.哪些子系统和设计模式是在所有实际的游戏引擎中反复出现的4.在各个主要的子系统中有哪些典型的需求5.哪些子系统是通用的,而哪些又是典型的为某种类型的游戏量身定做的6.一般游戏引擎是如何停止及开始的我们也亲自看了一下当前一些流行的游戏引擎内部是如何工作的,如Quake和Unreal,还有一些非常著名的中间件,如Havok物理库,OGRE渲染引擎,还有RadGameTools的3D动画及几何图形处理工具集。在开始之前,先回顾一些在游戏引擎中用到的大型软件开发的技巧和工具,它们包括:1.逻辑的和物理的软件架构上的不同2.配置管理,版本控制,和编译系统3.一些通用的有关C,C++,及VisualStudio的小技巧和小窍门本书假定你已经有非常强的C++基础(绝大多数游戏开发者的选择),还了解一些基本的软件开发准则.我还假定你已经懂得线性代数,3D向量和矩阵运算,还有三角运算(不过我们会在第四章简单回顾一下有关的重要内容)最好还有一些实时和事件驱动编程的经验。不过不要紧张,我将会简略回顾这些知识点,并指出一个方向-如果你觉得在我们开始之前你还需要补充一下相关的知识的话。1.1.一个典型游戏团队的结构在深入了解一个典型游戏引擎的结构之前,让我们先看一看一个典型的游戏开发团队的结构。游戏工作室一般由下面五个基本部门组成:工程师(engineer),艺术师(artists),游戏设计师(gamedesigners),制作人(producers),还有其它管理人员及支持人员(市场营销人员、法律顾问、信息技术支持、行政人员).每个部门还可以再细分,下面我们就这几个部分作一个简单的介绍.1.1.1.工程师Engineers工程师设计和实现这些能让游戏和自动化工具工作的软件。工程师一般还可以再分为两个基本的类型:游戏程序员(制作引擎和游戏本身)和工具程序员(制作工具,令其余的开发人员更好的工作)。不论是游戏程序员还是工具程序员,他们都具有一些特殊的技能。有一些程序员把他们的职业生涯集中在某个单一的引擎模块,如渲染,人工智能,音效,或者碰撞和物理。有一些人注重于游戏性和脚本,另外的则注重在系统层面而不是跟游戏本身相关。有一些人是全才,到处帮忙解决游戏开发中可能出现的问题。资深工程师有的时候需要负责一些技术上面的领导工作,这时候称他们为主程序员(leadengineer)。主程通常仍然设计和写代码,但他们也帮助控制团队的日常工作计划,从项目的技术角度来做一些决定,有时候还直接有相关人事权来管理人员。有的公司可能会有一个或者多个技术总监(Technicaldirector)。他们的工作则是从一个更高的角度来看公司的项目,确保团队了解到潜在的技术挑战,即将来临的行业发展,以及新技术等等。一个游戏工作室中最高级别的工程师职务是首席技术官(CTO)。如果一个公司有CTO的话,他们则是为整个工作室的技术作指导性的工作,在整个公司中是一个非常关系的管理者。1.1.2.艺术师Artists我们说在游戏行业中,“内容最重要”。艺术师制作所有的视觉上或音频上的游戏内容,他们的工作直接成就或者毁掉一个游戏。艺术师有不同的分类:1.概念设计师/原画师(Conceptartists),他们的概念图和绘画作品给团队说明最终游戏看上去会是怎样的一个视觉上的参考。他们一般在游戏的概念阶段的时候就开始工作了,但一般来说会在整个项目开发周期中作视觉上的指导。Itiscommonforscreenshotstakenfromashippinggametobearanuncannyresemblancetotheconceptart.2.3D建模师.他们为可视的游戏世界制造所有的3D模型。这个职能一般分为两个更细的:前台建模师和后台建模师。前者创造物件,角色,车辆,武器还有其它让游戏世界更丰富的东西,后者则创建静态的游戏世界(地形,建筑,桥等).3.纹理师(Textureartists),他们制作2维的图片作为纹理,应用到3D模型上面以提供细节和真实感4.灯光师(Lightingartists).他们负责摆设游戏世界中所有的灯光,包括静态的和动态的。要处理灯光的色彩、强度以及方向来使得场景看上去最具艺术效果和气氛.5.动画师(Animators).他们使游戏中的角色和物件具有动画。动画师在游戏制作中扮演的角色的工作很明白的,就如同他们在CG电影制作中的地位一样。不管怎样,一个游戏动画师必须有一些独特的专业技能,能在游戏引擎的条件下制作出非常平滑逼真的动画。6.动作捕捉演员(motioncaptureactors),他们常常提供一个粗略的动画数据,这些原始数据在被动画师整理进游戏之后会废弃。7.音效设计师(sounddesigners),他们跟工程师紧密配合以制作和混合游戏中的音乐和音效。8.配音员(voiceactors),他们为许多游戏提供语音9.作曲家(composers),许多游戏有一个或多个作曲家,他们为游戏提供原创音乐跟工程师一样,资深的艺术家也常常被称之为leader,如主美术等。有一些游戏团队有一个或多个艺术美术总监,非常资深的美术,负责整个游戏的画面效果,和及确保整个团队美术风格的一致性1.1.3.游戏设计师GameDesigners游戏设计师的工作是负责设计跟玩家体验有关的交互部分,通常被称之为游戏性(gameplay)。不同的游戏设计师负责不同的层次。一些(通常是资深的)游戏设计师他们站在宏观的高度,决定游戏的故事,章节或者关卡的次序,和整体上的玩家的目标.其他的游戏设计师则在一个独立的关卡或者游戏中的一块地理区域上工作,标出地形,决定敌人在何时何地出现,放置补给品如武器及医疗包,或者设计解谜的道具等等。还有一些设计师则做一些技术性的工作,跟负责游戏性的程序员一起写代码(一般是高级的脚本语言)。还有一些设计师曾经是程序员,他们想在游戏开发中扮演一个更活跃的角色来探索游戏应该怎样玩。有一些游戏团队雇佣了一个或多个写作者(writer),他们跟资深的设计师一起来构建整个游戏的故事,创建每一句对话。如同其他部门一样,一些资深的策划也担任管理者的角色。许多游戏团队有一个设计总监,工作职责是从总体上来把握游戏的各个设计,帮助控制项目进度,确保各个独立的游戏设计师在整个产品中保持一致性。资深设计师有时候会发展成为游戏制作人。1.1.4.游戏制作人producers游戏制作人的角色在不同的工作室里面有不同的含义。有的工作室里,他的工作是负责项目进度和作为一个人事上的管理者。有的公司中制作人相当于一个资深的游戏设计师。而在有的公司制作人是开发团队和公司其它部门(财务、法律、市场等)的桥梁。有的小公司则根本没有制作人。例如在NaughtyDog公司,公司里面所有的人,包括两位副总裁,都直接参与游戏制作,团队的管理和商务事宜由公司资深员工协商。1.1.5.其他人员一个直接参与游戏制作的团队后面是有一些至关重要的支持人员的。包括了公司的管理团队,市场部门(或者由外包的市场部门),行政人员,还有负责购买、安装、配置硬件和软件及提供相关支持的IT部门。1.1.6.发行商和工作室宣传、制作、发行一个游戏品牌的往往是发行商(publisher),而不是游戏工作室本身。发行商往往是大的公司,如EA,THQ,Vivendi,Sony,Nintendo等等。许多工作室并没有跟哪个特定的发行商有关系。他们把制作的游戏卖给出价最高的发行商。有的工作室则专门只为某家发行商服务,要么是签了长期的合约,或者是它们归发行商完全所有。例如,THQ的游戏部门是独立管理的,但它们是为THQ所有,并基本上要受THQ控制的,EA则更进一步,干脆直接管理它旗下的工作室。First-partydevelope