GAMES104:02引擎架构分层-学习笔记


一、游戏引擎分层架构

0.游戏引擎分层简介

  • 用户层
  • 工具层(Tool Layer):编辑器、工具界面
  • 功能层(Function Layer):渲染Rendering、动画Animation、物理Physics、相机Camera和实现游戏性的脚本Script、状态机FSM、AI等功能模块
  • 资源层(Resource Layer):各类图片、动画、音频资源加载
  • 核心层(Core Layer):核心功能如内存管理、容器分配、数据计算、多线程处理等
  • 平台层(Platform Layer):对接不同游戏平台、主机和硬件
  • 第三方库(Third Party Libraries):中间件和第三方库通过SDK(Software Development Kit)调用

1.资源层

  1. 将资源(resource)转变为资产(asset),比如将各类图片提取有用信息后(比如psd格式里就有很多无用信息)转换为适合GPU处理的DTS格式
  2. 使用一个Composite asset文件(如XML)定义资源间的关联性,如一个模型的贴图、动画、材质等对应,并使用全局唯一标识符(GUID)进行管理
  3. 运行游戏时,使用资产管理器(Runtime Asset Manager)管理资产的生命周期(Asset Life Cycle),包括资产的实时加载卸载、资源的分配、垃圾回收(GC)、延时加载等

2.功能层

在一个tick时间内(帧?)分别先后执行tickLogic()和tickRender(),(逻辑帧和渲染帧,类似unity的Update()那一套)

  • 逻辑帧执行
    1. Camera
    2. Motor
    3. Controller
    4. Animation
    5. Physics
  • 渲染帧执行
    1. RenderCamera
    2. Culling
    3. Rendering
    4. Postprocess
    5. Present

功能层涉及的东西核心又多且杂,给引擎提供核心功能模块(major function modules)、Loop Update、并且是游戏和引擎的过渡。同时功能层的多线程运算已经成为主流,并且多核中的dependency非常重要。

3.核心层

核心层为所有逻辑提供基础,比如数学库[线性代数就够用]、数据结构和容器(链表树)、内存管理等。

游戏引擎非常注重效率,比如在数学库中,可以使用逼近算法(不完全准确),或者用SIMD(单指令多数据Single Instruction Multiple Data,以同步方式,在同一时间内执行同一条指令)提高计算效率,或者使用SSE指令进行矩阵计算;比如数据结构(比C++)更方便内存管理,以减少内存浪费(这点与操作系统类似)。

  • 提升CPU内存效率的三个要点:1,数据集中存放;2,按照顺序结构排序;3,输入输出批处理-----ecs核心思路
  • 因此对代码质量要求很高(安全且高效),能写核心层的人可以做初级架构师啦

4.平台层

有时候写完代码发现不同平台文件加载路径的符号都不一样,这时候就需要用到平台层,来消除不同平台间差异的影响。平台层通过Render Hardware Interface(RHI)来解决这些差异问题,利用虚函数对不同平台的图形API进行重新封装。

甚至不同平台连CPU架构都不一样,比如索尼还有个SPU,不同平台的优化差异很大。

5.工具层

工具层主要为创作者提供生产力工具,比如蓝图、材质编辑器、Shader Lab等,引擎追求runtime效率,但工具不需要runtime只需要开发效率,因此可以使用C++、C#甚至h5来制作。

有时候工具层的代码量会比其它层都大的,维护成本也更高,因此一样相当核心。

  • Asset Conditioning Pipeline(资源导入导出器)+ 引擎编辑器 = 引擎完整的工具层。

二、为什么分层架构

游戏的复杂度高,技术面广,分层可以使不同模块部分解耦,各自独立提供服务,如同封装的思想(也如同社会结构),底层为上层提供基础服务,上层调用底层的工具,上层灵活,底层稳定。层次之间只允许上层调用下层,稳定清晰。

总结

  • 游戏引擎被设计为分层架构,各引擎大同小异,命名不同但分类都有
  • 在这一分层架构中,底层为上层提供基础服务,上层调用底层的工具,上层灵活,底层稳定
  • 游戏中的虚拟世界由一系列tick时间组成
  • 8
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值