走向进阶的共鸣 ---深入理解工业级的《游戏引擎架构》_游戏引擎架构书评-查字典图书网
查字典图书网
当前位置: 查字典 > 图书网 > 编程 > 游戏引擎架构 > 走向进阶的共鸣 ---深入理解工业级的《游戏引擎架构》
秦春林 游戏引擎架构 的书评 发表时间:2014-06-19 18:06:52

走向进阶的共鸣 ---深入理解工业级的《游戏引擎架构》

这两年,我阅读了大量关于游戏开发相关的博客,文章及书籍,从理论到实践;也不断通过各种互联网工具查阅实际开发中的一些技术细节和思路;经常与同行进行不同程度的交流和探讨。我体会到,对于某个领域,最重要的是要理解该领域的系统性的知识和原理,要明白它用来解决什么问题,解决问题的思路是什么,这样你才能去高效地实现细节。

然而对一个领域进行系统性讲解的书籍并不多,因为这要求作者不仅能够使用其介绍的技术来解决实际问题,还要对其宏观意义上有更深刻的认识。这就是工作经验富有魅力的地方,也是知识富有艺术性的部分。而《游戏引擎架构》正是这样一本站在系统性的高度,对游戏引擎的各个部分进行精心组织,涵盖一个工业级游戏引擎理论及各个部分实践的非常优秀的著作。原著作者Jason Gregory是世界一流游戏工作室顽皮狗(Naughty Dog)的资深开发者,其所参与的《神秘海域(Uncharted)》系列,《最后生还者(The Last of Us)》都是具有相当高口碑的优秀作品。

我们每一个游戏开发者,都想要了解一个游戏的每个技术点是如何实现的,以及对于组织这些技术的游戏引擎是怎样组织在一起工作的。对于这本书的阅读体验,本书的译者叶劲峰和推荐序者云风都不约而同的提到共鸣。书中对于游戏引擎每个组件的原理,业界方案,甚至其实现数据结构的介绍,阅读起来都是一气呵成的,它会在你以前的经验基础上,形成一种深深的共鸣,让你对游戏引擎的各个组件有更深刻的理解。下面我们选取一些精华内容进行解读。

在基础部分,第3章详细描述了游戏中C++的使用及内存管理方案,从基础数据结构,对象内存布局,字节对齐等方面进行了深入的分析,其中基础数据类型及操作对SIMD寄存器的支持能提升引擎的运算性能,它也能用于实现部分多线程游戏循环架构等方面,对于自研游戏引擎或者从事引擎基础开发的读者有非常重要的借鉴意义。第4章总结了游戏中常见的3D数学知识,虽然是数学基础知识,但是作者主要是围绕游戏中的应用来讲解,这样更易于理解。比如用SQT变换来代替一个4x4的仿射矩阵,可以轻松实现LERP插值计算,它被用于第11章讲述的骨骼动画中的动画混合等方面。此外对于资源及文件系统相关的介绍也是比较详细的,作者重点讲述了资源管理器,包括版本控制,数据库的设计,离线资源管道以及运行时资源管理等,笔者就借鉴了书中关于运行时资源生命周期的管理设计了一套关卡间资源过渡和共享的管理方案。

对于低阶引擎系统方面,笔者独爱游戏循环及实时模拟一章。通常我们理解游戏循环就是按照一定的帧率更新游戏中的状态,而本章却从时间线的角度来理解游戏循环。不同的游戏对象或者子系统拥有自己的局部时间线,从这样的角度去理解游戏循环就能更好地处理游戏中的同步等问题。此外本章还讲述了基于多处理器的游戏循环,由于多核并行性越来越重要,多数游戏工作室的引擎都开始不同程度地支持并行性,本节从Xbox 360和PlayStation3的硬件架构出发,讲述了SIMD,分叉及汇合,作业模型等多线程游戏循环的方案及实现。最后本章还介绍了网络多人游戏循环以及在《雷神之锤2》中的案例分析。

图像及动画部分堪称本书最精华的部分,任何阅读过该书的读者都毫不吝啬的对其赞赏不已。第10章介绍了采用深度缓冲的光栅化相关图形渲染的知识。光照几乎是现代工业级游戏引擎体现差异的地方,本章用大量的篇幅来介绍游戏中的各种光照技术,从传统局部光照模型Phong氏光照模型的算法实现,到基于图像的光照如法线,高度,镜面,环境贴图等,以及阴影渲染,环境遮挡,镜像,焦散,次表面散射,预计算辐射传输等全局光照技术,这些都是当下工业级的游戏引擎正在使用的技术。

3D游戏中人物的动作及动画总是最为迷人的部分,第11章详细讲述了骨骼动画的原理,数据结构及算法实现。首先讲述了骨骼的阶层数据结构,姿势及其内存数据结构。关节的姿势直接控制网格顶点,每个网格顶点可绑定至一个或者多个关节,每个关节定义一个坐标空间,所以每个关节姿势就是一个仿射变换。有了这些基础概念,动画片段用来表示一个小粒度的动作,它包含一连串连续的姿势,或者一些离散的重要姿势,每个动画片段包含一个局部时间线,动画引擎能够对姿势进行插值来计算中间姿势。这里作者还详细介绍了不同角色之间的动画同步,动画的数据格式以及动画重定目标(retarget)等内容。然后作者介绍了关节姿势变换来驱动蒙皮的过程,每个关节都是一个局部空间,它通过蒙皮矩阵来计算其相对于全局姿势的变换,蒙皮顶点也即是使用蒙皮矩阵来计算其在模型空间中的位置。

动画混合用于计算多个动画片段对角色最终姿势的影响,这使3D游戏中人物的动作更加逼真,通过少数动画片段就能产生更加复杂的人物动画。这部分首先讲述用SQT来实现两个关节姿势之间的线性插值计算,它可以用来实现任意给定两个时间点的中间姿势;如若把两个不同片段的时间线适度地重叠,则它可以用来计算不同动画片段之间的淡入和淡出,由此逐步推导出对任意数目的动画片段进行混合。加法混合引入一种区别片段的新类型动画,它记录两个姿势之间的改变,这个改变可以作用于任何正常动画片段,从而产生更加丰富的动画混合效果,本章还介绍了怎样用表达式树来表示各种混合计算。最后讲述了游戏引擎中怎样通过动作状态机,来使应用程序可以以更直接了当的,状态驱动的方式控制游戏中角色的动作,作者介绍了虚幻引擎中的图形化动画编辑器,以及顽皮狗《神秘海域》采用的基于文本的方式描述动画状态。

最后的游戏性系统部分的介绍,也是笔者非常喜欢的章节,这也是大部分开发者会接触的层面。作者探讨了各种运行时对象模型架构,尤其详细对比了以对象为中心和以属性为中心的两种主流对象模型架构,而后者正是笔者正在研究和使用的模型。

要用如此短的篇幅描述这么一本将近800页,内容如此丰富的著作,这令笔者感到非常不自在,我唯恐哪一个文字暗淡了这本书的光芒。

这本书详细地探讨了游戏引擎的方方面面,并且这些知识点不是简单地罗列,你甚至能感觉到作者根据自己丰富的经验,去设置哪些内容是你需要了解的,而哪些知识是你需要知悉原理的。对于那些比较重要的内容,作者甚至给出了数据结构及算法,读者可以全面了解游戏引擎各个方面的理论及实践。将近800多页,阅读起来丝毫不感到累赘,犹如看大片一样的畅爽感,紧凑,一气呵成。不管你是具有什么背景的经验,相信都能从书中各个丰富的细节找到共鸣。

最重要的是,这不是一本讲述概念的教科书,书中所讲述的技术都是当今主流工业级游戏引擎正在使用的技术。例如《神秘海域》引擎中的调试绘图功能,虚幻引擎中的图形化着色语言,动画编辑器等等。书中探讨的关于全局光照技术,是当前主流商业游戏引擎高品质的核心竞争力,例如Unity3D宣布将在Unity5中采用基于光线追踪的全局光照技术,用来动态生成光照贴图;骨骼动画系统相关的知识如加法混合,几乎在当今及未来很长一段时间都会是行业主流技术。

另外值得一提的是,译者在翻译这本书时非常严谨,加注了大量便于读者理解的注释,以及对原著中少数概念性错误的部分加以纠正。这不仅帮助读者更好地理解其中的概念,这种严谨的风格在翻译著作当中是罕见的。翻译作者的素养不仅是要实现文字功能的字面翻译,他也应该和原作者一样,确保书中的每个概念都是没有学术错误的,这样才会放心地交给读者去阅读。

所以,我们技术人到底应该怎样进阶?游戏开发是一个非常庞大的技术领域,我们通常从互联网,工作,以及与同行的交流中获得一些零散的知识。当有一天,一个经验非常丰富的朋友站在一个系统性的高度将这些所有技术的来龙去脉娓娓道来,使我们在共鸣中走向进阶,这个朋友就是《游戏引擎架构》。

展开全文
有用 26 无用 0

您对该书评有什么想说的?

发 表

推荐文章

猜你喜欢

附近的人在看

推荐阅读

拓展阅读

对“走向进阶的共鸣 ---深入理解工业级的《游戏引擎架构》”的回应

秦春林 2016-10-28 13:24:57

答主的新书《游戏引擎全局光照技术》现已开发试读哦,快去下载吧:http://www.thegibook.com

HBK 2015-09-23 18:16:42

答主,你的我所理解的cocos2d-x也是我正在拜读的书籍

秦春林 2014-07-15 12:44:51

@vinjnmelanie http://weibo.com/hielvis

vinjnmelanie 2014-07-02 12:45:57

答主靠谱,有没有SNS帐号,关注下你

NetFly童鞋 2014-06-19 18:20:03

不错,以技术的角度来写书评这才好,那些sb出版社滚粗!