最近在学习 王希老师的《游戏引擎导论》课
发现论坛对这一块几乎没有知识分享,特此把自己的学习笔记发上来
和大家一起学习
纯手写,就不配图了,耐心看完肯定能有收获的
PS:学习引擎,不只是为了做引擎开发
而是当你在用别的引擎时候,你能更快速的站在引擎开发者的角度,去思考问题,提高开发的效率
最近在学习 王希老师的《游戏引擎导论》课
发现论坛对这一块几乎没有知识分享,特此把自己的学习笔记发上来
和大家一起学习
纯手写,就不配图了,耐心看完肯定能有收获的
PS:学习引擎,不只是为了做引擎开发
而是当你在用别的引擎时候,你能更快速的站在引擎开发者的角度,去思考问题,提高开发的效率
游戏的引擎,一般分为5个层
工具层
功能层
核心层
平台层
第三方
依次从上往下,工具层往往是最容易接触到的,平台层是最底下的。第三方比较特殊…
各个层级负责的功能,大意如下:
工具层-> 编辑器,各类工具,创作工具,给艺术家用的东西,第一面向看到的东西,都可以归类到这里
功能层-> 渲染,物理,状态机,AI,动画,声音,UI,输入,脚本 。程序第一手开始接触的"逻辑"
资源层-> 提供场景关卡脚本和游戏逻辑等数据,我们常看到的META,其实也归类到这里
核心层-> 程序逻辑,各种基础的逻辑核心,啥对象池啊,数学运算啊都是这些
平台层-> 操作系统,文件系统,材质和绘制SDK,控制接口,输入输出驱动。这个应该是cocos开发比较多接触的,毕竟大家常常 安卓,IOS,WEB都发布
游戏第三方层-> havok,wwise, truesky ,speedtree,physx,fmod,simplygon。(COCOS这边就是BOX2D, 龙骨,spine,那种不是官方第一手开发的功能,大致分在这里)
那每个层,都是干啥的呢?
工具层: 以地图编辑器为中心,围绕实现的一系列编辑器 DDC维护 ,这里很重要的就是,以地图编辑器中心。因为只有这样,游戏的内容才会更容易搭建的健壮稳固
功能层:
首要就是tick,也就是游戏循环 ,游戏的最基本运行单位是tick ,细分为 tickLogic,tickRender。先逻辑,然后根据逻辑进行渲染 功能层是非常庞大的,内容也是最多的,功能层贴进游戏。可以为了项目的需求去做不同的改变。而多线程是游戏引擎的未来 (现在看3.X的游戏循环是不是就很容易懂了?)
资源层:
首先要把资源文件转换成资产(资源和资产,是2个东西), 方便引擎调用,提升程序解析效率。因为大部分资源文件有对游戏开发无用的数据结构,同时生成了资产关系文件以及GUID(唯一识别号) 现代游戏引擎中数据之间的关联是很重要的 ,比如一个预制体里面有什么图片粒子动画。都是要进行一个关联,才能方便引擎加载的
同时,这里也需要有实时的资产管理器:管理所有资产的生命周期 按需加载,延迟加载
核心层:
首先就是数学库 游戏为什么数据库单独写?因为游戏引擎一切为效率服务。运算不追求绝对正确,而大部分语言通用的数学库,不满足于游戏开发的效率要求。游戏大部分数学大致正确就可以,运算速度一定优先,其次就是数据结构,大部分游戏为了效率,无所不用其极,核心层都要自己优化,就是为了内存管理
平台层: 平台无关性,抹除平台的差异性。充分利用平台硬件。你在上层的调用,实际上在这层是有各种区别操作的。这点相信cocos开发们很懂这个啦,但是其实这里面的门道还是有很多的
为什么引擎要分层?
游戏引擎复杂度太高了,分层以后职责专一,复杂度相对于每一层减少了。
越底层的东西越不要动
下层尽量不能调用上层
所以我们在实现功能的时候,先想逻辑应该属于哪一层,再去动手
程序优化的根本核心 这应该是很多程序开发一开始很容易遇到的思想问题
图灵优化:
尽可能把数据放一起。
访问的时候尽可能按顺序
读写的时候不要一个一个的,要一次一块 。
End
其实后面还有很多关于渲染,物理,AI的知识,先分享这么一节课的笔记吧
请问在哪里学习这门课程
B站搜索 GAMES104