游戏引擎的架构分层,由上到下分别是:工具层、功能层、资源层、核心层和平台层。

为什么引擎需要分层?

老师说游戏引擎的开发其实和操作系统的开发非常类似,需要兼容硬件,管理资源、形成生态,并且非常重视性能

分层是为了封装不同功能,降低复杂度

资源层

引擎将所有的资源归类为Asset,管理这些资源的生命周期

资源生命周期:

  1. 不同的资源拥有不同的生命周期

  2. 加载的资源需要再有限的内存中被释放

  3. 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变为游戏可用资源,具体表现为各种导入和导出工具