游戏引擎的架构分层,由上到下分别是:工具层、功能层、资源层、核心层和平台层。
为什么引擎需要分层?
老师说游戏引擎的开发其实和操作系统的开发非常类似,需要兼容硬件,管理资源、形成生态,并且非常重视性能
分层是为了封装不同功能,降低复杂度
资源层
引擎将所有的资源归类为Asset,管理这些资源的生命周期
资源生命周期:
不同的资源拥有不同的生命周期
加载的资源需要再有限的内存中被释放
GC
资源compose 资产合集
GUID:资产唯一识别号

功能层
最为庞大的一层,提供主要的功能模型,比如ObjectSystem,也提供了GameLoop功能,处于游戏和引擎的边界,比如提供3C功能和游戏API
tick
我的理解为更新管线,每一个Tick当中都会更新各种资源状态

逻辑帧和渲染帧

eg.角色动画Tick: 主要运用视觉残留原理
在每一个Tick中:刷新角色动画帧、驱动骨骼、渲染处理
多线程

目前的主流(图中中间):逻辑与渲染分离,将一些并行的计算,比如物理和骨骼单独fork出来
未来趋势:jobSystem,将每一个功能模块化,但目前的难点是计算依赖
核心层
核心层会提供各种功能模块需要的工具,并且需要非常高性能表现的代码,需要兼顾效率和安全性

数学库
物理功能+渲染功能,比如CG需要的线性代数
由于游戏引擎对效率非常敏感,对数学优化要求很高
SIMD概念(Sigle Instruction Mutiple Data)
在CPU设计当中,使得一个ALU(计算单元)能同时实现多个运算
比如在CG运算中,需要进行多次矩阵计算,所以SIMD在游戏引擎中被广泛使用
数据结构和内存管理
比如容器,游戏引擎会对语言本身的容器进行优化,做一套引擎本身的数据结构
引擎有自身的内存管理,包括内存池,增加缓存命中等等
平台层
目的是兼容不同平台
图形API选择 RHI(Render Hardware Interface):比如DX/Windows、Vulkan/Android
硬件兼容(Hardware Architecture):不同的平台CPU(或者PPU)架构不一样,比如PS平台有协助PPU(SPPU)
工具层
不是RunTime,属于编辑器Editor
DCC(Digital Content Creation):数字资产生成工具,比如3dmax和blender
数字资产通过Asset condition pipeline变为游戏可用资源,具体表现为各种导入和导出工具
参与讨论
(Participate in the discussion)
参与讨论