概述

  • Tool Layer:最表面用于制作者交互的为编辑层->在其之下的为功能层(Function Layor),负责各个模块的功能逻辑实现;
  • Resource Layer:一个文件管理系统,来管理游戏数据中各类数据文件。
  • Core Layer:提供实现各个资源模块所需要的基准功能,例如线性代数库、时间库等基础支持部分;
  • Platform Layer:用于解决游戏上线后兼容到的设备,将不同设备的输入、不同操作系统、发布平台等的规则统一。
  • 3rd Party Libraries:第三方插件;一些特殊的模块由中间件来实现,如Wwise音效以及PhyX的物理引擎等

资源层(Resources)

  • 将第三方格式数据转换成在引擎中的高效处理格式例如.ast;利于将各种图像等均抽象为.ast,只保留我们需要的部分,例如Photoshop中的.psd文件我们抛出它在dcc中的可编辑等效果,而只保留图像本身的纹理数据——是一种数据转换的逻辑。
  • 每个资产保持有独立的不重复的GUID,全局唯一编号;
  • 利用handle系统保证资源的引用依赖稳定: 资源层处理
  • 延迟加载、GC(垃圾回收)机制是很重要的资源用于管理整个游戏在运行时的生命周期和资源分配,对运行效率等尤为关键。

功能层(Function)

  • 以Tick为核心逻辑,此处主要分为两部分——Logic &Rendering;把运行逻辑和渲染表现分开进行设计。
  • 处理逻辑:单线程-多核心处理系统-JOB系统(解耦各部分,以最小的任务作为元进行计算处理逻辑。)-解耦处理逻辑 从单线程到多线程

核心层(Core Engine)

  • 数学计算:包括一些线性代数(坐标变换的基石)、微积分、基础的四则运算实现。注意,有时候并非强烈的要求计算的完全精确,数值的解算速度也是重要的需求! 传世经典:平方根倒数
  • 数据结构设计:类似于C++的STL容器的自主实现;由于STL中的CRUD十分暴力,对堆栈的优化效果很差,且效率很差,因此我们需要通过CoreFunction来解决Cache的效率。
  • 内存管理:解决如何高效的进行内存访问和数据管理的问题。现代计算机如何遵循图灵机架构。需要进行记忆池、减少cache命中丢失等内存管理问题。

工具层( Platform Layer)

  • Render Hardware Interface(RHI):实现硬件的平台编译,以解决在不同操作系统下的接口实现,让所有系统都Feature的尽可能优化性能,且尽量优化性能
  • Tool:设计一套工具来允许别人以编辑器为中心,实现各种功能的编辑效果,设计好优秀的开放接口来解决一系列问题。 通过管线处理,把DCC工具和Engine中的Editor实现共同实现工具来完成接入的工具链进行数据的流畅传输。 系统和工具的互传

Why Layered?

  • 通过将复杂问题拆分并且层级性封装,以实现各个部分的解耦,通过拓展上层结构实现更鲁棒,灵活的效果拓展。在实现时需要首先思考这一效果应该在哪一系统实现,如何交互,如何实现。
  • 绝对不允许调用倒置从而反而产生倒置的强耦合