前言
写作本书的缘由
游戏引擎技术在国外发展十分迅速,根本原因在于国外的从业者有很扎实的基础,每一代引擎都是根据游戏迭代而来的。国内游戏行业起步相对较晚,再加上从业者有时急于求成,引擎的人才积累远远不如国外,导致国内的自研引擎企业寥寥无几。学习游戏引擎开发的门槛很高,不具备一定知识是很难自学的,这就让很多想学习引擎的人觉得遥不可及。
本书主要讲解游戏引擎的制作与开发,通过详细的引擎代码示例来剖析引擎中的内部技术。书中内容有些是目前市面上比较成熟的解决方案,有些是作者优化并改进的新的架构,对学习和研发引擎开发有很大帮助。如果使用商业引擎,本书对理解引擎的内部架构并很好地使用引擎也会帮助很大。
通过本书,读者可以清晰地了解大企业制作引擎的基本流程和思路,从而以高效地制作游戏为最终目标。一个好的引擎应该做什么,不应该做什么,本书都会详细介绍。
本书内容
本书的很多概念都来自Unreal Engine,但决不是照搬Unreal Engine来讲解。本书配套引擎的代码只有不到10%的地方参照了Unreal Engine,大部分内容是通过另一种方式甚至采用其他的架构来实现的。本书首先帮助读者理解什么是游戏引擎以及游戏引擎的组成部分,让读者对游戏引擎有一个全面的认知。通过“盖楼”的方式,一步步帮助读者建立游戏引擎底层模块,这些底层模块是游戏引擎的基石,帮助游戏开发人员和游戏引擎进行有效的“沟通”,并为在游戏引擎中实现动画、渲染等高级效果提供很好的保障。本书配套的自研引擎叫作VSEngine,作者在实际工作中的一些技术思路和尝试都以它为基础,随着作者自身能力的提升,这个引擎也先后重构过多次。
本书提供了100多个示例,尽可能透彻地说明问题,其中标题带*号的章节都没有给出具体的实现,而只是介绍了详细做法。读者如果想真正掌握本书的知识,就应该完全自己去实现它们。同时每章都有一些练习,有一些是作者准备实现但没时间去实现的;有一些练习很难,即便是经验丰富的引擎开发人员,如果没有这方面的实践,也需要认真思考一番。
本书计划分为两卷出版。卷1主要涉及游戏引擎的基础架构,一共13章,各章主要内容如下。
第1章并没有像其他传统技术图书那样介绍游戏引擎,而使用一个例子去解释什么是游戏引擎,并从一个引擎开发者的角度剖析一些引擎开发的问题。
第2章介绍引擎和引擎编辑器,以及学习引擎所需要的基础知识。
第3章介绍一些底层基础部分,包括文件系统、线程系统、内存管理等和底层跨平台相关的内容。
第4章介绍引擎中使用的基本数据结构,包括数组、队列、链表等类型,这些数据结构没有采用第三方库,都是重新实现的。
第5章介绍数学库,这里并没有介绍每一种数学算法,而只列出本书配套引擎的数学库中的相关代码和功能,并给出具体算法的出处。
第6章讲解引擎初始化方面的知识,引擎中存在很多单件实例管理器、默认值、默认资源,有效地初始化它们是很有必要的。
第7章介绍应用程序框架。不同平台对应的程序入口和执行流程不同,有效地跨平台和用统一的流程管理成为游戏设计中很重要的一个方面。该章还介绍如何关联不同的输入/输出设备到引擎中。
第8章介绍引擎中的对象系统,包括智能指针、RTTI、属性和函数的反射与复制、存储、加载、克隆(clone)、属性与UI的映射。该章最后还介绍了Unreal Engine 4的反射机制。强大的对象系统是一个好的引擎必不可少的。
第9章介绍引擎中资源的管理,包括外部资源和内部资源,并讲解如何有效组织这些资源。
第10章介绍引擎设计的一些哲学理念。深入了解引擎设计理念对于使用和制作引擎都有很大帮助。该章最后一节介绍的内容是引擎设计哲学的一个延伸,有助于读者全面了解垃圾回收机制。
第11章讲解场景管理,包括管理场景物体和相机之间的裁剪关系。该章最后简单介绍遮挡剔除。
第12章介绍如何把一个FBX静态模型导入为引擎格式的静态模型,并添加材质和渲染。
第13章讲解LOD技术,包括如何生成模型的LOD以及集成到引擎中进行渲染,同时介绍在引擎中如何加入和实现地形。
游戏引擎的其他一些相关内容,包括骨骼模型、动画、渲染技术、多线程以及其他额外话题,将纳入《游戏引擎原理与实践 卷2:高级技术》中。
本书特色
不同游戏引擎的内部架构千差万别,而且游戏引擎涉及的知识点甚多,很少有人能全面把握每一个知识细节。同时,游戏引擎属于实践性的工程,必须有足够令人信服的演示示例以及代码支持,加上商用引擎的授权、作者个人时间有限等各方面的因素,导致市面上的游戏引擎图书要么泛泛而谈,要么距离真正开发游戏相去甚远。读者阅读完这类图书之后,并不知道一个商业引擎应该具备什么,应该如何写一个商业游戏引擎。本书旨在弥补目前市面上引擎图书的不足之处,尽量详细地解答上面所涉及的问题。
目前国内有自研引擎能力的公司和个人都很少,本书提供了一个良好的知识储备,帮助没有写过商业引擎的人揭开游戏引擎的神秘面纱。读者只要详细阅读本书并了解每个知识点,就能够极大地提升引擎开发能力。即使你使用商业引擎,通过阅读本书,也能够更好地理解引擎机制,在使用相应的游戏引擎的时候更加得心应手,同时你还将具备修改商业引擎的能力。
读者对象
本书要求读者熟练掌握C++、数据结构、3D编程、设计模式以及多线程的基础知识,否则对本书中的一些内容理解起来会比较困难。如果你有一定的3D游戏开发经验,或者你是想要尝试3D引擎开发的新手,本书会非常适合你阅读和学习。
本书对大部分比较难的知识点会详细讲解,而对于和游戏开发相关度较小的一些简单与基础的知识点,本书则会列出相关的图书和资源,推荐读者去阅读。
通过阅读和学习本书,读者能够:
•了解游戏引擎的基本原理和作用;
•了解大公司开发引擎的基本流程;
•获得良好的游戏引擎方面的知识储备;
•通过本书专门配套的引擎和示例,可以了解开发游戏引擎的具体细节。
资源支持
本书代码可以从异步社区(www.epubit.com)下载,其中包括本书配套引擎和为讲解引擎而准备的示例程序。
作者简介
程东哲,游戏引擎开发工程师,吉林大学计算机硕士,现就职于腾讯公司,曾先后参与了《逆战》《斗战神》《众神争霸》《无尽之剑——命运XBOXONE》《云游戏》《Lucky Night VR》等游戏项目开发。主要负责游戏引擎开发工作,曾开发过腾讯内部自研May引擎和AGE引擎,修改和移植过Unreal Engine。
致谢
感谢我的妻子对写作本书的支持。为了写作本书,我牺牲了很多陪伴家人的时间,没有他们的理解和支持,我不可能完成本书的写作。感谢人民邮电出版社的陈冀康编辑,本书是在他的一再推动和鼓励下完成的。
感谢叶劲峰先生为本书作序,同时感谢沙鹰、王杨军、王琛、付强等专业人士对本书的大力推荐。能够得到他们的肯定和支持,我感到万分荣幸。
感谢唐强、周秦、Houwb在百忙中帮助校验本书并修改本书配套代码,没有他们的努力,本书是无法顺利出版的。感谢熊路遥对13.5.2节的技术支持。
感谢本书的所有读者。选择了这本书,意味着你对我的支持和信任,也令我如履薄冰。由于水平和能力有限,书中一定存在很多不足之处,还望你在阅读过程中不吝指出。可以通过79134054@qq.com联系我。