GAMES104-02:总览:引擎架构分层与整体pipeline
二、总览:引擎架构分层与整体pipeline
2.1 游戏引擎分层简介 5+1
- 工具层Tool Layer:各种编辑器
- 功能层Function Layer:让游戏Visible(渲染)、Movable(物理系统)、Playable(状态机&人机交互)
- 资源层Resource Layer:各种数据文件,如图形、几何、声音、视频、场景等等
- 核心层Core Layer:引擎的工具箱,如内存管理、容器分配、数学运算等等
- 平台层Platform Layer:隐藏不同平台的不同接口
第三方库文件3nd Party Libraries,与各个层都会有关系
2.2 资源层
- 将各种资源文件,转化成引擎统一的格式,如.uasset
- 这一步会将很多冗余信息清除,将文件的格式转化为GPU可以高效绘制的格式
- 还需要生成一些资源文件,用于表示不同资源文件之间的关联
- 需要负责管理所有资产的生命周期:垃圾回收GC、延迟加载
2.3 功能层
- 每经过一个Tick,会将整个游戏的逻辑和渲染运行一遍
- tick会分为两个步骤:tickLogic()
=> tickRender()
- tickLogic():对世界的模拟,如输入输出、物理系统、碰撞检测
- tickRender():对世界的渲染
- 功能层是整个引擎中最多的部分,会跟具体游戏有关联
- 功能层的某些模块既可以当作是引擎的模块,也可以当作是游戏的模块,如:相机的移动
多线程计算:
2.4 核心层
- 数学库:
- 为了提高效率,因此会在核心层中,重写数学库
- 如用SIMD实现矩阵乘法
- 数据结构和容器:
- 也是为了提高效率,因此会在核心层中,重写数据结构,而不是直接使用STL容器
- 内存管理
- 游戏引擎会提前申请一大块内存,由引擎管理
- 三个原则:尽可能将数据放到一起、按顺序访问数据、一次申请/释放一整块数据
- 一般来说,核心层的代码质量最高,轻易不会修改
2.5 平台层
掩盖掉不同平台之间的差异
文件的路径
图形学API:用Render Hardware Interface(RHI)隐藏起来
硬件架构
平台层的好坏影响了游戏在不同平台上的性能优劣
2.6 工具层
允许所有人用引擎创建游戏
- 保证工具层展示的结果和最终游戏的结果是一样的
- 以开发效率为优先,而不是以运行效率为优先
DCC:Digital Content Creation
- 将其他工具产生的数字资产,转化为引擎统一的数字资产
2.7 为什么要分层架构
- 降低问题的复杂度,让每一层只需要考虑自己的任务
- 越底层的东西越不会轻易改变
- 越往上,越灵活;越往下,越稳定
- 要先将问题划分为不同层次的任务,然后再进行开发
- 只允许上层调用下层,下层不能调用上层
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 华风夏韵!
评论