本篇博客旨在收集(第二版)书籍中每一章中重要的知识点,一方面供他人一起学习,另一方面可以让本人在之后能更快地温故知新。本篇或许对于游戏程序员有提升的知识,策划/美术可以适当了解。但是更多创意和想法读原书可以更好地学习。
第一章中将运行时的引擎架构讲得事无巨细,每一层都有足够的例子支撑,本篇也仅仅做一个搬运工作。
运行时引擎架构
游戏引擎是以软件层构建的。通常上层依赖下层但下层不会依赖上层。如若下层依赖上层则是循环依赖,在任何软件系统中都要极力避免循环依赖,否则会导致耦合、难以测试、妨碍代码重用等现象。
主要需要了解的有从下到上几个层次:平台层、核心层、资源层、功能层和工具层。另外会有第三方软件开发包层。
游戏引擎需要运行于不同的平台上,我们制作或者使用引擎第一步就要思考最终游戏成品需要运行在ns还是ps,还是pc或者手机。目前市场认可度和接触范围最广的引擎当属unity和UE,这两个引擎恰好都可以支持pc、Android、ios这些主流市场平台。
核心层说白了就是对类似于内存分配、数学库、自定义数据结构和算法这类工具箱性质的层级,通常情况下这类工具包都是针对平台专门优化过的最佳资源,同时只需要存在一份,供有需求者调用即可。例如矩阵运算、矢量运算、垃圾回收机制。
资源层指的是引擎支持的游戏资产以及对它们进行管理的资源管理器。在unity中支持最基本的png、jpg、model导入,以及prefab、atlas、anim等独特的游戏资产格式。不仅这些格式文件,还至少需要串联各个格式资源文件的拼装组合,unity则使用了guid序列化的形式来管理每个资源。
有了资源后,引擎至少要支持几项有趣的功能来维持正常的游戏工作流运转,比如动画、碰撞检测、渲染、状态机、AI、音频等这些功能。
有了这些功能,直接用工具把这些功能用起来即可,比如unity和UE平台都有编辑器,开发人员可以直接在editor窗口进行相应的场景编辑,ue还有一个蓝图系统可以用来做script编辑。
第三方软件开发包层不属于引擎本身,但引擎可以借用第三方软件或者中间件来协助完成某些工作,比如下至C++的STL库、上到unity的dotween组件,渲染方面的SDK既可以用OpenGL,又可以用directX。Unity渲染底层支持DirectX和OpenGL,但虚幻引擎的底层不再是OpenGL。
如果对这方面想要深入研究,可以跳转B站传送门一个说现代游戏引擎很好的视频传送门。