OVERVIEW of GAME ENGINE

引言

本课程将介绍现代游戏引擎所涉及的系统架构,技术点,引擎系统相关的知识。通过该课程,你能够对游戏引擎建立起一个全面且完整的了解。本节主要是对游戏引擎的概念做一个简单的了解。

那么首先的话呢,介绍一下我自己。那个实际上我的背景非常有意思,我本科是就读于浙江大学,我是在CAD/CG实验室,那个是很老牌的中国图形学的这个圣地吧。

然后我研究生的时候去了清华。在清华的同时,我去了微软亚洲研究院,在那个时代是一个非常热血的时代,就是我们一群中国的科研的小伙子们在老师的带领下去挑战SIGGRAPH,去挑战全球最前沿的这样的一个图形技术研究。

我到现在还记得那个时候我们被关在那个小黑屋里面,然后跟我们讲说你们是中国科研的国家队,你们并不比斯坦福MIT的学生笨 那你们去一起去冲击那个顶级会议的论文。所以其实那个时代给我们铸就了一种信念,就是说如果我们努力、如果我们是真的去用功的话,我们也可以做出世界顶级的东西。


那么其实在那之后的话呢,我本来认为我的职业路径一直是走这个学术,但是那个时候发生了一件事情,就是2004年虚幻三引擎面世。当时整个行业都被震撼到了,因为那个时代真正让大家见识到了什么叫次世代,然后那样的一个精彩的光影细节。我身边的朋友知道问我说:哎 王希你能不能够就是也做一个一样的东西出来,那这里面有什么技术,你们会不会做。当时我看完之后,我觉得:哎,这些技术好像我们都会做呀,对吧 因为你做完 research 时你会认为所有的系统它无非就是算法,每个算法我们都知道怎么去做。

但是的话我那时候在想,就是为什么我们做不出这样的一个大型的系统和平台?所以当时也怀着这个问题吧,我那个时候就决定说不再去做 research,而是去真的到工业去去看。

所以那时候就决定离开研究院,跑到那个美国去参加那个 bungie studio。那到bungie studio 的时候呢,实际上对我来讲是一个非常 interesting 的一个 journal。在 bungie 的话呢实际上,我用了大概五年时间参与了四款游戏:

  • Halo3
  • Halo ODST
  • Halo: Reach
  • DESTINY

特别是在 bungie 的最后三年那个时候,我们在做下一代的游戏引擎。大家知道最早 Halo 用的是自己的 InHouse 引擎,但是等我们决定启动做命运的时候,我们会发现就是这个行业发生了巨大的变化,游戏引擎我们要跑在一个完全不一样的计算机的软硬件架构上面,那个时候我会面临多核的时代。

还有一点就是过去我们做的是单机游戏,那未来我们要做的是什么呢?是可以在线上无数的玩家可以互联的这样一个游戏,那么他的体系结构需要发生这样的一次革命。我在美国整整待了五年吧,那个时候我毕业的时候这个转变是非常非常大的。

就是也是我今天开这门课的一个很大的原因就是说我们的同学可以在学校里学到很多的算法、计算机科学的基础知识,但是我们有了这样一些算法,我们可以发顶级的 paper,和我们做一个高水平的系统这之间的差距到底是什么呢?

其实我刚去美国的时候,我就想想回答这个问题。跟大家分享一个小故事 就是我在微软研究院的研究院的时候我还自以为自己编程还可以,但是等我到了那个 bungie 的时候我的前半年几乎说没有办法往那个引擎里面去加入你任何一行代码。为什么呢?你必须要理解那几百万行的那个系统它是按什么逻辑什么架构做出来的,所以今天那个 HALO3 的纪录片中间还有一个我的镜头就是他们早上六点钟跑去在拍摄早晨大家上班的样子,结果等他们摄影组到了我们的工作室时候发现有一个人没有走,然后我就趴在桌上的睡着了。他问我为什么没有走,我说我的 feature 还没有 checking。

所以在 HALO3 的时候,那时候我记得我做的是那个可交互的水体嘛。其实那个系统的话还是非常非常有意思的一个系统,所以我在讲就是其实用整整两年的时间吧,就是我自己亲身经历如何从一个 algorithm 算法 feature 到一个真的系统的变化。

所以十年前,也就是2011年那个时候我决定从美国回来创立了不鸣团队。为什么呢?我觉得中国有很多很聪明的人,但是我们没有人愿意聚集起来去做一个比较复杂的一个系统,真的把这些系统这些东西集合成一个 system。因为算法和系统是有本质区别的,就算法是这样的,就是说我有个很酷的 idea,我花几个月把它实现了,然后我就能发表一篇paper,这个周期是很短的,大概六个月左右。但是如果你做一个系统的话首先你要接受非常良好的,系统工程的训练 知道一个大型软件系统是怎么架构的,就是你需要知道你的特定系统怎么架,当我们真的开始去架的时候可能是一年时间你什么都看不见。

所以我们今天的话也非常开心有这样一个机会就是通过 GAMES104 这个平台,也是把我们的毕生所学系统性的整理出来,也是希望有更多的就是同学们会对这样的东西会感兴趣。

那么今天的课程我们讲的是现代游戏引擎的理论与实践,其实游戏引擎是为游戏服务的。那说起游戏的话每个同学都应该是非常的熟悉,我相信未来的时代一定是一个 Gamer 的时代,就是说我相信游戏会改变世界,那么这是一个让我热血了整整 20 年的一个行业。

这里面的话我们剪了一段视频,其实我们的编导组做完这个视频的时候我有一个小小的抱怨,就是为什么做只有地平线没有老头环,难道你们觉得老头环画面不够好吗?所以说其实我每每看到这个视频我都会很激动,但是老头环没有做进去我的激动会稍微少那么一点点。

那么其实游戏它最奇妙的一个地方是什么呢,就是每个人都很熟悉,就像你身边的手机一样,每个人都会用手机,但是有多少人能意识到其实在一个小小的手机里面集成了全世界最前沿的半导体技术、最前沿的材料技术、最前沿的计算机技术 。

其实游戏你看到的每一个画面、每一个细节,它都是在计算机里面用 01 去模拟出来的。这就是为什么今天我们去说一个游戏做的好不好,有这样的细节,那样的细节,我们会讲起来非常的轻松。但是真正的能做出一款游戏,它非常的难,它几乎集成了 Computer Science 里面几乎所有的知识门类,它本身的复杂度就是一个操作系统。

所以我认为就是说游戏实际上作为虚拟现实,是作为现代计算机科学的一个非常核心的一个应用。而且这个应用的话,它的技术含量也是最高的,那么游戏引擎的话就是我们讲的这个皇冠上的钻石,因为它是躲在下面看不见的东西。

其实中国的话我相信有将近几亿的游戏用户,那么会做游戏开发的人,我觉得应该有几百万很多人觉得我会用Unity、我会用Unreal。但是会用游戏引擎是你学会了开车,今天我们再问一个问题是中国有多少人会造车?

而造车的话,你就需要知道怎么去造发动机、发动机的底层工作原理是什么、它需要什么样的一些技术、有什么样的问题、什么样的这个材料……所以你会发现越到核心的东西,即使不止在中国,在全球真正做这件事情的人就会越来越少。所以 Game Engine 是实际上是我们这个行业的皇冠上的珍珠,它的技术壁垒也是最高的。

Topic 1 WHY WE NEED TO LEARN

那么为什么我们要学游戏引擎?

这个问题其实非常有意思,刚才我看到同学们弹幕里很多人在外说:我是不是要学很多其他的课程我才能够去上这门游戏引擎课。还有同学说:我如果不会 C++ 这个课我是不是上得了这个。

其实是我们当时在设计这个课程的时候我们很重点的在想的一个问题,就是说我简单来讲一下,我们立个Flag,就是我们尽可能在整个课程中讲人话,也就是说并不一定需要你有非常非常多的计算机的编程、开发的技术,但是你学完这门课程的时候你会对这样的一个现代的一个大型软件系统的架构有一个基本的一个理解。

为什么这件事情很重要的,这就是我特别想跟大家分享,为什么我们很愿意去做这门课,跟大家分享一下游戏引擎的底层架构知识。因为我们相信下一个时代将会是用游戏引擎技术,构造的一个虚拟现实的一个时代,就大家今天看到的很多东西,其实他背后底层用的基础都是游戏引擎技术。

METAHUMAN

现在越来越火的虚拟人技术,这是我们那个虚幻引擎的 METAHUMAN。也就是在过去的这个 10 年到 20 年在游戏中,我们对人的皮肤的三维材质、我们对毛发的 simulation 大家是不是觉得很好看对吧。那么大家想象一下未来以后我们打开我们的支付宝,打开我们的银行终端,那这样的一个技术它背后就是有游戏引擎,而且未来的虚拟人会越来越多的进入到我们的生活。

CINEMATIC & ANIMATION

那么引擎这件事情到底重不重要,那么另外一个很大的领域是什么呢,大家可能想象不到:就是影视行业。上面是好莱坞的用那个就是游戏引擎,在一个巨大的 LED 屏上形成了一个虚景。

然后这样演员可以对着他进行拍摄,所以今天我们在就是很多广告或者是电影里看到的场景,它其实用游戏引擎技术渲染出来的,这和传统大家理解的那个 offline 就是这个离线的渲染农场的方法已经又不一样了。这样的话我们的导播、我们的导演可以在现场调整光照调整布景。

SIMULATION

那么第三个的话呢这个也是大家会觉得非常 exciting 就是说军事模拟。

其实大家知不知道就是我们世界各国都在用游戏引擎技术在训练自己的军队,因为只有游戏引擎能够提供这么真实的这样的一个场景。大家想象下我玩的很多那个战争游戏是不是他就是一个战争模拟器,无论你是这个步兵、还是开着这个坦克车、还是开着这个坦克车 还是开着飞机 其实他都需要最前沿的荧屏技术帮助大家去这个还是开着飞机其实它都需要最前沿的荧屏技术帮助大家去这个就是身临其境的演练你的战术,去检测你的战法。

其实这件事情的重要度现在已是越来越高了,因为现代化的战争是越来越复杂,是系统对系统的对抗。

DIGITAL TWIN

那么另外一个很大的领域的话,就是数字孪生。

这个概念我相信同学们可能最近听说过一些非常 hot 的概念,比如说工业4.0、工业数字数字化,那么这个背后有个很热门的概念叫做数字孪生,包括最近大家一直在讲的元宇宙。

那么 其实数字孪生的话呢,我们可以认为就是说它会把现实世界的很多东西把它虚拟化的表达的计算机事件里面,这样能帮助我们更好的去理解,更好的去管理,更好的去构建未来的世界。

那这里面我举个简单的例子吧 比如说我们现在最热的这个无人驾驶,其实所有的无人驾驶车 99.9% 的驾驶旅程其实是跑在那个游戏引擎里面,因为我不可能把车子在路上开十亿公里。所以这个时候我们就要用游戏引擎模拟各种各样的下雨啊,各种各样的路面的情况啊,包括行人各种异常的情况。

Topic 2 HISTORY OF GAME ENGINE

我们开始这门课的话这一part,我们就先讲一下这个游戏引擎的历史。

Early Age of Video Games

一切的都是从最原始的时代开始。

其实我们这个行业非常的短,大概只有50多年的历史嘛。那最早的时候其实这个行业最早的时候的话呢,我们的机器很简陋,这个机器我不知道有没有同学玩过叫红白机,那上面有很多我们童年的快乐了,比如说魂斗罗、马里奥对吧,大家都觉得特别特别的经典。

但是在那个时代的话呢,实际上没有有游戏引擎的概念,游戏都非常的简单。然后那时候开发游戏最核心的能力是什么是,如何把一个复杂的这个元素把它放入到一个非常小的比如 40kb 的这样的存储空间里面去。

那么这个时候大家如果去看那个任天堂的有些报告,它会告诉你说那个时候为了节约资源我一个云彩,我把它变个原色比如说把白色的云彩这张贴图变个颜色放到地上,它就变成一个草丛;做一只小乌龟我把它正面、反面来回播放,你就看起来个小乌龟在地上走,其实那个时候其实做游戏是一个非常有趣的事情。

Father of Game Engine

那第一个提出游戏引擎的人是谁呢?那我觉得这里面我一定要去这个提这个John Carmack,就我们我们传说中的叫卡神,他绝对是我们这个行业里面我认为是这个教父级的人物,直到今天他还在为 Facebook 的那个 Oculus 在努力。我还非常非常的就是崇拜和敬佩他,就是说他还是那么谦卑,而且那么的务实在讲一些具体东西。

但其实他是个非常睿智的人,就是说在那个时代他是最早做了一款游戏叫Wolfenstein,就是重返德军总部。如果小伙伴们关心游戏的话,知道最近好像有一款重置的 3d 版再上线,那么这也是这个非常经典的一款游戏,就是可以说是开创了 fps 这个时代。


我们在做游戏的时候,我经常跟我们团队在讲大家千万不要被现成的东西给束缚住,因为有的时候比如说今天我们要游戏从业者,我们会说:哎呀,这个我要做一款什么什么类型的游戏。但是其实任何一种现在我们看见的游戏类型都是为被一款产品给创造出来给定义出来的,所以说未来世界我觉得会有很多新的引擎会出来、新的游戏类型会出来。

而在那个时代的话,世界上没有一个物种叫做游戏引擎。但是就卡马克他看见了一个东西,他说:当我在写各种各样的游戏的时候,中间有很多的代码是可以重用的,那么这些重用的东西我能不能抽出来呢?在这些产品中共用这些东西,我要不要把它定义成叫做一个 game engine 的东西?

所以这个老哥就说干就干,然后他做了第二款游戏,也是经典中的战斗机:Doom。Doom 的话 我忘了中文叫什么名字了,反正到现在 Doom 还是一个非常棒的一款射击游戏 。

在做 Doom 的时候 他把 Doom 里面的核心代码变成了一个游戏引擎。后这个引擎他授权给了另外一家公司,另外一家公司做了一款游戏叫做 ShadowCaster,就是这个暗影施法者。所以如果说我们今天在学习游戏引擎的话,我们会认为卡马克的这个 Doom 应该是全球的第一款的游戏引擎,而且很幸运的是第一款已经上在商业上就已经成功了。

不过今天我们这个课程叫现代游戏引擎,早期的游戏引擎大家只是意识到说我只是一些代码的共用。但是真正的现代游戏引擎的概念的话,我认为还是从 Quake 时代开始。

这个 Quake 实际上也是卡马克大神卡神的这个作品,在那个时代 Quake 是最经典的射击游戏。如果讲一个就是很有年代感的东西就是 Quake 一个很著名的叫做火箭跳,就是你可以拿这个 RPG 对着地上去轰,然后反作用力会让你跳得更高。


那为什么会出现这样的一个质的飞跃呢?这里面不得不讲一个划时代的东西:显卡。显卡今天的话同学们如果你们喜欢打游戏、如果想做游戏开发,每个同学每天脑子里心心念念的是:哎,我的那块 3080 什么时候能到对吧,现在肯定是买不到了。

那么其实在最早的时代,游戏计算机是没有显卡的,直到很后面大家才意识到说形运算和这个逻辑运算是不一样的,图形运算是大量的向量运算 + 大量并行化的运算。所以说如果我拿 CPU 去做图形的话很麻烦,第一代的显卡 Voodoo 显卡出来了。而 Quake 就抓住那个时代,所以他做了第一代的这样的一个 3D 的游戏。当时他的画面、他的沉浸感实际上是震撼了那个时代所有的玩家。

游戏引擎为什么会越来越发达?游戏引擎为何会越来越重要?其实这里面讲一个核心的一个关联度叫做硬件的发展。

其实在那个时候,我们在思考就是说,我们这个技术平平台的 driver 到底是什么,我一直认为是硬件的发展。我们以 PlayStation 为例的话,第一代的PlayStation 它的算力只有 0.066 个 g;那么一直到 PS2、PS3、PS4 到我们现在的 PS5,那 PS5 的算力是多少了?十个 tflops!


同学们这意味着什么?很多很多的游戏从业者、包括我们很多玩家会说:哇,太棒了,我可以做一个很棒很棒的东西出来,对不对?但实际上这个从软件工程上来讲的话,这是一场巨大的挑战。因为随着你的计算机算力会越来越丰富 越来越强大之后,你的系统就会越来越复杂。

这就像那个操作系统,最早期的时候操作系统谁都能做,很多人都能做。但是为什么到现在操作系统只有极少数的这个公司才有能力做,为什么?那是上亿万行的代码!那同样的游戏引擎也这样。

早期的游戏引擎其实是非常非常简单的,但是到现代游戏引擎的时候动辄就是几百万行到上千万行代码,而且里面的算法非常的复杂,游戏引擎的算法密度是非常非常高的。

Family of Game Engines

所以经过这将近 30 年的发展,今天我们可以看到一个非常丰富的游戏引擎的生态:大家非常熟悉的这个虚幻引擎、Unity 引擎还有前些年其实非常厉害的 CryEngine。

Middleware of Game Engine

同时大家去理解这个引擎的生态的话,引擎中间内部的东西实际上是随着游戏行业的发展变得非常的复杂,比如说物理运算。早期的游戏引擎里面都会自己写物理,比如怎么去做物理碰撞的检测,但后来大家发现这个问题越来越复杂,就会出现专门的做物理的这个模块的中间件。

这里面多说一句就说 Middleware 公司总是会不停的爆发出来,但是一般生命周期都不是很长。我们经常开个玩笑的,就是中间件公司最好的归宿是被某个游戏大厂或者游戏引擎大厂收购,但是其实他在整个游戏引擎生态里面扮演了一个非常重要的一个模块。

Topic3 WHAT IS GAME ENGINE

好,那接下来的话呢,就是我们进入到我们课程的正文了。首先的话介绍一下什么叫游戏引擎。

What’s Game Engine

传统的异能,就是我们一般讲什么定义意思,最首先寻找的是 Wikipedia。维基百科告诉我们什么叫游戏引擎,这是我从维基百科上扒下的一句话:游戏引擎是一个软件的这个框架,专门设计为游戏开发做的这样一系列的软件的工具的合集。

这句话的我听完之后我的感觉就是基本上等于什么都没有讲,循环论证了。那么当然了后面也有些好心人就说游戏引擎已经包括什么场景管理呀什么讲了一大堆的这个更具体的细节。

Our Definition: What’s Game Engine

其实我觉得这两个定义都不是特别的准确,因为一个是太概括了,就像是说什么是人?哦,两只脚吃饭能走路的叫人?那肯定不是人对吧。还有一个就是想哦,这个人有眼睛、有鼻子、有耳朵,这些都不是人的本身。

那么 什么是游戏引擎呢?我觉得我给了一个定义,就是说首先它是一个构建黑客帝国矩阵的技术底层框架(Technology Foundation of Matrix)。黑客帝国里面构建了一个非常伟大的一个想法:我们是不是生活在一个虚拟的世界。今天我们虽然能够感知到彼此,我们觉得好像我们生活在一个真实世界里面,但是我们是缸中之脑(注:又称桶中之脑,是知识论中的一个思想实验,实验的基础是人所体验到的一切最终都要在大脑中转化为神经信号)。

而其实 游戏引擎在过去的 30 年在做的一切的事情都是说在模拟一个虚拟世界,也就是未来。当我们戴上了 VR 的眼镜、插上了耳塞、当我们身体穿上了触感的皮肤,我们可能无法区分我们是生活在一个虚拟世界还是一个真实世界,而游戏引擎所有的软件和体系的架构都在为这件事情在服务。


那么第二个游戏引擎的定义,我认为是一个生产力的工具。也就是说通过这样的一个一套工具体系,我们可以把我们想象的那个世界 在这一个虚拟的空间里面构建出来:我们可以构建一个高达几英里高的一个一个巨大的一个建筑物;我们可以创造一个从来没有存在过的外星星球。

在过去我们对这种东西想象是停留在哪的?停留在我们的书本上、我们写一个故事或者停留在我们的画一幅画,或者我们拍部电影。但是游戏引擎提供了这样的一个工具,让大家把这个世界真的能够身临其境的创造出来,就是摆在我们的面前。

那么最后一个这是我个人的一个观点,我认为他是一个复杂性的艺术,因为当你有这么强大的需求和能力的时候,这个系统绝对不简单。

它是非常复杂,所以说几乎不存在一个完美的、紧致的一个引擎架构,实际上 它是一系列妥协、一系列决策的一个结果,所以我认为是一个复杂性系统的一个艺术。

这是我十年前我才去讲游戏引擎的时候我特别喜欢用一张图,这张图展现的是一个吸满血的蚊子。当我们用这个显微摄像机拍下来的时候,我们可以看到这么的美:它身体的那个材质无数的细节。所以其实大家想象一下就是今天我们看了游戏,我们说我们的次时代画面无比的真实,但是你跟大自然相比我觉得我们还差的特别的远。


这里面跟大家剧透一下为什么我这么热爱这个这个事业。

我记得十年前当时我看完那个阿凡达这部电影的时候,我特别的激动。我跟我的小伙伴讲,我说十年之内我不会失业,为什么?我们要十年甚至更久的时间把那样的一个美轮美奂的世界 真的通过游戏展示在大家的面前,让大家真的在这个世界里面可以交互。但今年育碧刚刚做了一个这个阿凡达的游戏,实话说我个人觉得还是没有达到我的期望。

Complexity of Simulation by 0/1

我特别希望大家能够建立的一个概念,就是这个课程的话就是上完之后当有人告诉你说:哎,我会做很多的 Renderer 很多的渲染,所以我就能做游戏引擎了。那上过我们这个 GAMES104 的课程,可能同学就说:NO,这个事情绝对没有那么简单。

这个是游戏引擎非常经典的一本书,叫作《Game Engine Architecture》,他画了一个游戏引擎的结构图。我自己是学图形学的科班出身的嘛,但是我很卑微的发现,就是原来我们的大图形学只在整个游戏进行中占那么小的一个部分。

我是大概差不多本科、研究生都在研究图形学,那时候觉得自己做学习还可以 但是没想到当我做游戏引擎的时候又整整花了 15 年学习他所有的相关的一个知识体系。所以的话以后有人问你说我做绘制是不是就能做游戏引擎了,那么学了我们 GAMES104 课程的同学就可以很自豪的回答 NO,你还要学另外百分之九十的知识,那就是游戏引擎。

它最大的一个挑战是什么呢?我们刚才讲的是说我们是构建一个黑客帝国,构建一个虚拟的世界,但是我们真实的世界假设全是虚拟的。

我经常在想上帝老人家特别厉害,为什么?它有无限的算力,它没有带宽的延迟,它有无限的存储,它可以采用暴力算法。但是很可悲的是在现代计算机里面们的算力是被严格的限制住的,那个计算机的 CPU 主频一直在涨对不对,但是你没有发现这几年主频涨的速度也是变慢了,我们几乎已经 hit 到了摩尔定律的这个上限。

游戏引擎的一个核心设计的边界条件就是 realtime 实时,这个是大家学游戏引擎特别要记住的一个关键性的概念。无论我有多么 fancy 的、多么厉害的算法,我能做出多么好的效果,如果你不能够在 1/30 秒 也就是 33 毫秒之内把这个计算结果给提交出去的话,那你这个算法就是无效的。而且这个实际上也不可能给你那么大的算力,比如说我们在做游戏引擎的时候我们的整个预算只有 33 毫秒,比如我做一个非常酷的这个物理爆炸,我可能只给你一毫秒到两毫秒。

而且同学们现在玩现代游戏的时候我们会对什么东西要求越来越高?讲的帧率对不对,玩一个动作游戏如果你低于 60 帧,我就觉得这个画面没有办法接受了。60 帧意味着什么?我的计算只有 15 毫秒!到一个这么短的一个时间片里面 这其实就是现代游戏引擎设计的核心难点。

所以 realtime 将会是引擎的一个核心关键点。

Toolchain for Creators

其实引擎它不仅仅是一系列的算法,它是一个生产力的工具。其实从最早期的 Quake 时代开始大家就意识到了,游戏引擎真正最大的用户是什么?是设计师和我们的艺术家。

艺术家需要有一整套工具在里面去构建他的世界,我要摆放、我要把关卡的规则放好、我要放各种各样的敌人 NPC……那么在早期的时候工具链是很简单很简单的,比如在 Quake 时代大家看到的就是这一个编辑器就可以了。但是大家打开一个现代游戏引擎的话则是一个庞大的工具体系,而且非常有意思的是说每一个工具它的使用者都是学习不同专业技能的人:我们的动画师会用角色编辑器,在里面编辑角色所有的动画所有的行为;我们这个关卡的设计师会在设计这个关卡里面所有的山川河流……

也就是说一个引擎他如果只是一大堆的代码,只是一个 SDK 的话实际上他是没有办法用的,它实际上必须要提供一个非常强大的工具体系,这也是我们上完 GAMES104 课程同学们要建立的一个非常强的概念就是做引擎,首先要学会的是做工具。而且工具的用户不是程序员,而是我们的艺术家和我们的设计师。

Developer Platform

当然了,其实程序员也是引擎的一个非常重要的用户。为什么呢?因为当我们在设计这样的一个技术底层的时候,我们不可能知道所有的游戏类型。比如说我要做一个场闯关动作游戏;我要做一个开放世界的冒险游戏;我要作为一个剧情的 MMORPG……那其实每一款游戏你的玩法变化都是多种多样的,这样的话我不可能把所有的玩法都做进到游戏引擎里面去,所以就要求让我们的这个游戏的程序员能够快速的去开发出他的特定的玩法,所以一个引擎在上面进行二次开发的能力的强弱也是一个引擎最重要的一个评判标准之一。

生产力工具一个很重要的一个属性叫做协作,可协作的生产力工具。一个现代游戏工作室动辄就是上百人,而且这上百人的话大概有 20 - 30 个大的分工,每个人的技能都不一样。会写写程序的人非常的少,也不是所有的艺术家都是共通的,有的人很会画贴图,有的人很会建模,有的人很会做动画,有的人很会去搭这个环境,有的人很适合去做过场动画……

那好,这样的人在一起我们怎么去协作呢?这个时候引擎的工具链非常的重要。虽然做引擎很挑战很难,但是我们一定要把自己放的特别的低,因为我们的目标是服务好这些优秀的艺术家和设计师,所以工具是生产力,工具是引擎第二个非常重要的标签。

那么最后一个其实就是引擎的复杂度 。

当我们把整个这套体系设计好,这些工具设计好之后是不是就完事了?其实不是的,随着时间的推移我们要不断的去对他进行完善升级:更好的算法,更好的展现,更好的一些 feature 比如说我会把光照做得越来越漂亮;我会把东西做得越来越细腻;可以做更逼真的物理模拟等等……

但是你这些底层技术一直在升级的时候过去大家做的那些资产,做的那些游戏逻辑必须都要全部能跑得起来。不能够说你一升级大家就不能跑了,所以我们行业里面有一句话叫做“你要在一架飞起来的飞机上把他的零部件逐渐换掉,甚至把整个引擎都换掉,他这个飞机是不能掉下来”。

所以如果同学们,当然我就是将来有机会去参与到真正的引擎研发的时候,我觉得我们一定要做好这样的一个觉悟,就是我们面对的是一个超复杂的系统。

我每次都特别喜欢用这张图,因为这真的代表当你面对上千万行的游戏引擎代码的时候你的内心的真实的感受。但是我们这群人最厉害的地方就在于能理解这个。

Topic 4 HOW TO STUDY

好的,那接下来就到了大家最关心的问题了,就是我怎么去学游戏引擎。我真的能学吗?我连 C 语言都不会,我能做游戏引擎吗?

这是我们在那个就是其实在我们行业里有个大牛,他在 github 上发了一个长图就说:你要成为一个游戏程序员,你要去这个学多少的书。当时我把那个图看了一遍然后我说:哎呀,我的天哪,好像好多书我也没看。

如果说今天大家真的想去做专业的游戏引擎开发,你会涵盖到 Computer Science 几乎所有的专业领域。

但是现在第一个是时间有限,第二个我们只有 20 节课的课时。所以我们的挑战就会非常大,就说:哎,那我们怎么样子用这么短的课时能够把大家带入到这个世界里面的话呢?所以我们定了一个课程的策略:只沿着主干道行径。

如果我们认为游戏引擎是那个远处的珠峰峰顶,你看到的是个云遮雾扰的一个山峰。但是你可以往左走、往右走、往前走,所有东西都和你有关,但是我们只找一条路径沿着那条主干道我们一路走上去,其他的东西我们都会点到,但是我们不会去。

为什么呢?因为其实这门课程我认为最核心的目的是帮助大家建立一个知识的体系结构,这就相当于是说我们上完了大学,上完大学并不意味着我们会成为专家,但是你上完大学之后当你未来在你的真实的场景中遇到任何挑战的时候 你知道去图书馆翻哪一本书,然后我去啃他就好了。

所以我们认为在学习这种大型的系统工程的时候体系结构 Framework 非常的重要。而且这门课的话最核心的目标就是帮助我们的同学建立现代游戏引擎的知识体系框架,而且每一个体系大家先不用急着钻的太深,因为未来我们有大把的时间去往你们去钻。

Topic 5 COURSE CONTENT

好,那接下来的话呢我给大家就快速的介绍一下我们接下来 20 节课的课程内容。

Basic Elements

我们的课程的第一节课会介绍一些游戏引擎的最基础的构建。

当你面对一个这么复杂的问题,你按什么方法去理解他去设计他,比如说怎么去理解 MVVM 的这个设计模式。这个听上去有点抽象,我们不讲那么复杂,我们讲人话就是游戏已经到底分几层,比如说第一层为什么我要把整个操作各个硬件平台、操作系统全部要虚拟化掉;第二层为什么我们要抽象出很多公用的东西……我们会一层层跟大家讲。

Rendering

那么第二节课我们讲 Renderer。

Renderer 的话 GAMES101 闫令琪教的那个图形学那个课讲得非常的好,但游戏引擎的渲染的话可以不需要有图形学的基础知识,没关系我们讲的是一些基础的算法。

我们讲的是体系结构,就是说当我知道了这个世界有材质、有光照、有这个网格、有动画、有这个大气构成的时候,我怎么把这些东西拼到一起,我怎么把这么多东西 fit in 到 1 - 30 毫秒里面去,那我怎该怎么用什么一种 pipline 去组织这些元素。

大家会知道一些很有趣的一些点,举个例子比如说一个小小的玻璃板透明物体 就会给我们整个渲染管线带来巨大的困难,这个地方如果有好多好多的玻璃,这个渲染就会非常的挑战,包括大家看到很多很前沿的卡通化渲染。

当我们学完这门课程的时候,我希望同学们说到:哦,我懂了,其实这只是各种图形学算法的组合。那我根据不同的应用场景找到这些部件,按照逻辑把它们拼到一起,那这就是游戏引擎课里面所讲的渲染,所以说我们不会讲太深的算法,但是我们会讲这么多算法是按着什么结构拼到一起去的。

Animation

我们的课程的第三环节是讲动画了。

动画的话其实也是一个非常大家很熟悉的概念,我们的角色只要动下来了我们就要动画。那么当我们用这个 Max、Maya 做出了很多很精彩的动画素材的时候,我怎么样把它变成一个可以玩起来的东西。

Physics

接着就是我们讲的这个物理。

物理其实是个非常有意思的概念,大家如果玩过这个 一些现代游戏或者现代游戏引擎的话,比如说你看见地上有个方块,你就想一脚去踢他那个方块,他就会动、他就会跑起来。

前面那三节它只是把东西展现在你的面前了,但是如果你真的让这个世界真的互动起来,其实这些所有的东西有另外一层的表达,我们叫做物理表达,也就是说这个表达是个孪生世界。

那么在这个物理表达里面,我们要用最简单的刚体、Box、Capsule 胶囊体躯表达这个世界;我们要用刚体力学模拟它各种运动;如果我们再复杂一点假设这个世界是软的,可以压的变形的 那我们是不是要一些弹性力学的东西;然后我们这时候有水、有烟、有头发,流体模拟学又来了……

那其实这些东西在我们认为现实生活中很自然的事情,在游戏的这个引擎里面的话 Physics 是一个非常重要的一个底层框架。我们不会讲的那么深,但是我们会把整个这个结构告诉大家。

Gameplay

接下来的话也是游戏引擎架构最核心的一个东西,叫做游戏性的架构。

因为有前面的渲染、物理、动画对吧,那我们其实是可以构建一个世界。这个世界你拿脚踹他一下,你会觉得这已经有点真实了,但是这是一个游戏吗?这不是游戏,它只是一个世界的 Simulator 模拟器,只是把这些东西放在这,你能和它交互,它本身并不是一个好玩的东西。

由我们的设计师设计出来的游戏规则是怎么样子用告诉计算机的呢?那我们怎么样的让设计师来表达这个世界呢?

Misc. Systems

讲完这些的话我觉得基本上同学们就可以做一个自己想做的游戏了。那这个时候我们会给大家补充一些颜值比较高的系统,比如说我们特别喜欢的特效系统。

那其实大家想象一下就是我突然要冒个烟冒个火,那么其实特效系统的话它的设计有意思的地方就在于他不能用程序写死,它也要提供一整套的框架和结构让艺术家可以创造各种各样的可能性。我们经常讲一个电影拍的不好就五毛钱的特效,其实游戏里面如果特效做的不好的话也是五毛钱的特效。


还有一些杂相系统,比如寻路系统。我们在游戏里看到很多的智能体 AI 这些东西,它是怎么知道路的,它怎么知道往左拐往右拐等等。

最后一个是大家可能会注意不到,但是其实每天你打游戏都会感觉到的相机系统(或者说传说中的 3C 系统)。大家如果喜欢玩射击游戏的话,你会发现就是那个枪杆、那个镜头感是非常非常重要。

Toolchain

所以这些系统和前面的系统配合在一起的话,大家基本上就可以做一个比较有意思的小游戏了。到这一节的话,我们开始介绍一些跟游戏工业化比较连接的比较紧的东西,第一个就是它的工具链。

游戏引擎的研发的话,最核心的是要构建一个就是工具体系。在我们的这个课程里面我们不会去介绍这些编辑器怎么用,我们是讲如何去构建一个可以给别人用的起来的一个游戏开发工具体系。

那这里面最重要的概念就是反射体系,这个就比较抽象了,它会比较高能。然后会告诉大家就是说如何你做了一整套工具,你后面会不停的升级它的数据格式 但是过去的数据、未来的数据你能否兼容。

Online Gaming

网络这一块实际上在现代游戏引擎中我们认为是越来越重要,包括那些商业引擎在过去这一方面做的实际上是比较弱的,但是现在我们会发现我们越来越需要连接到彼此。

Advanced Technology

在这个课程的最后三节课,我就讲一些大家喜闻乐见的东西,因为我当时答应我们的 GAMES 就说我们会给他同学们介绍一些比较前沿的概念。那还是老规矩,我们尽可能讲人话让大家能听懂。

那么前沿技术的话,第二节的话那就比较硬核了。我们会给大家介绍一些最前沿的这个游戏引擎的架构理论,比如说面向数据的编程(DOP)还有多线程的任务系统。

那么最后一节也是大家非常喜欢乐见的业界标杆,比如说虚幻引擎。

大家都觉得虚幻五特别棒,那虚幻五最重要的两个 Feature 是什么呢?一个就是全局光照,大家觉得这个光照美轮美奂,那就是著名的 Luman 技术;还有它无限的几何细节,上一个像素级的这种面片,就是我们的 Nanite 技术。


GAMES104 课程的精神是什么?就是把一切的高深的技术全部给平民化,两节课的时间就把这个神秘的面纱给大家。接下来如果大家有兴趣去研究这这些技术的时候至少知道从哪下手,知道它的要点在哪里。

Topic 6 COURSE LOGISTICS

General Information

References

Mini Engine

Assignments

Course Contributor


GAMES104_Lecture_01