- 2000年,Oni3 Engine,更像一个 library
- 2005年,MT FRAMEWORK,统一的公司内引擎(当次代)
- 2017年,RE ENGINE,下一代
RE ENGINE 代表作
- Resident Evil 7: Biohazard,《生化危机7》
- Devil May Cry 5,《鬼泣5》
- Monster Hunter: Rise,《怪物猎人:崛起》
- 一个引擎,用于所有项目
- 支持快速的迭代
- 特性1:模块化设计
- 特性2:向下兼容性
- 特性3:Editor & Rendering 分离
- 特性4:异步 I/O
- 特性5:C# Scripting
特性3-5可以参见 GCC 2017 的分享。本篇重点讲前两者。
- 允许替换引擎核心模块
- 模块间的头文件的使用,存在三种关系
- Require,直接使用
- Either,通过宏选择
- Optional,通过宏开/关
- 专门的 Module Configuration 程序
- 独立管理所有 module 之间的依赖
- 不同游戏,有不同的依赖图(可以取消不需要的 module)
- Initialize,模块初始化
- Setup,和其它模块相关的初始化
- Start,游戏启动执行一次
- Update,每帧tick
- Terminate,和其它模块相关的释放
- Finalize,模块释放
- 右边是引擎的 MainLoop,一帧内从上到下执行
- 左边是一个模块实现对应的接口,可以对接到引擎 MainLoop 不同阶段去执行
- 上图是《鬼泣5》中的 job-dependency graph
- 下图是 PS4 上 Core-0 的利用率
- 引擎根据 Module Configuration 配置的依赖关系,做并行化
- 让老项目可以跑在新引擎上
- RE ENGINE 不同版本之间,如何保证渲染效果的兼容
- 将变化的内容抽象为工程配置(如图:选择不同的 Shading Model)
- 不同配置启用不同流程,甚至是完全不同的模块代码
- 左边是老引擎,右边是 RE ENGINE
- 从项目组转交给引擎组维护
- 老项目重制版本身就是新引擎的验证
- 对于 renderer,绝对的 data-driven
- Editor 编辑好的数据,通过 TCP/IP 送给不同的 renderer (PC/PS4/XBOX)
- 编辑的数据,实时发送给 PS4
- PS4 再将显示内容,传回给 Editor
- 只允许 Async-I/O 任务
- 底层可针对不同情况进行优化,比如
- HDD:根据所需要加载任务的位置,减少 seek time
- SSD:各种快,直接并行加载
- 游戏逻辑使用 C#
- 独立维护的 C# VM (REVM)
- 改良的 GC 机制 (FrameGC)
- 三个游戏的CS源文件数、代码行数、编译时间
- 没有一页页翻译
模块化设计
和Editor/Rendering分离
比较有意思