Lecture 2 引擎架构分层与整体 Pipeline
Layered Architecture of Game Engine
A glance of game engine layers
Tool Layer
- Chain of Editors
- 编辑器中的工具链
Function Layer
- 可视化、可移动、可玩
- 物理
- 动画
- 渲染
- 摄像机、UI、输入
- 脚本,状态机,AI
Resource Layer
- Data and files
- 建模
- 图形
- 声音
- 视频
Core Layer
- swiss knife of game engine
- 可重用代码工具箱
Platform Layer
- launch on different platforms
middleware and 3rd party libraries
practice is the best way to learn
做一个游戏中的可移动角色
Resource - how to access my data
Unify file access - meta asset 通用数据格式
importing - 将外部数据转化为引擎可用的高效数据 assets
composite asset - 将各种数据相关联
GUID - 每个资产的唯一识别号
Resource - Runtime Asset Manager
实时资产管理,总可以通过该系统来加载/卸载相应资源
通过 handle 系统管理资产生命周期
Resource - Manage Asset Life Cycle
- 不同资源有不同生命周期
- 在(内存等)资源有限情况下要求适时加载/释放资源
- 垃圾回收(garbage collection) 以及 延迟加载(deferred loading)很关键
Function - How to make the world alive
每 1/30 s 处理一次
Function - Dive into ticks
类似 unity update 函数?
tick logic - 先构建逻辑 logic
tick render - 再渲染
Function - tick the animation and renderer
- 每个 tick(经过大量简化的理想情况)
- 获取角色每帧动画
- 驱动骨骼和皮肤
- 渲染器在迭代的 render tick 中处理每帧相应的渲染任务
Function - heavy-duty hotchpotch
- 功能层为游戏引擎提供了大量主要功能模块
- object 系统
- 周期性 loop updates
- game loop 是读游戏引擎代码的关键
- 引擎和游戏之间的界限会模糊
- 相机,角色,行为
- 为程序员设计可扩展引擎 API
Function - multi-threading
多核架构,多线程处理
最理想情况是完美调度 - 都有事情干
多核也是未来的方向,在架构的时候就要考虑
core - math library
- 线性代数
- rotation, translation, scaling
- matrix splines, quaternion
core - math efficiency
单指令(一个 ALU)完成矩阵运算
core - data structure and containers
- c++ 提供的标准容器在使用时 内存不受控(多且分布不紧密)
core - memory management
- 游戏引擎表现的主要瓶颈
- 内存池分配
- 减少缓存丢失
- 内存分配
- polymorphic memory resource PMR
现代计算机本质还是图灵机,不断更新 但更快的(内存管理)秘诀就三个:
- 把数据放在一起
- 按序访问数据
- 按块分配和释放数据
core - foundation of game engine
- 核心层为不同功能模块提供工具箱 utilities
- 设计和实现都很棒
- 高标准的 coding
platform - target on different platform
系统兼容性(平台无关性) - 文件系统
platform - graphics API
RHI
- 重新定义 graphics API
- 把各硬件 SDK 区别封装起来
platform - hardware architecture
tool - allow anyone to create game
以地图编辑器为中心构建的编辑器系统,方便团队协作
释放创意
tool - digital content creation
别的工具生成的数字资产来创建 assets
why layered architecture
- 解耦,减少复杂性
- 更低层与更高层独立
- 更高层不需要关心低层如何构建
- 对于不断更新的需求的快速回应
- 高层快速更新发展,但更低层基本稳定
复杂系统是被不断封装起来的
碰到需求先思考是哪层的
一般只允许上调用下,不允许反向
Neat PILOT Engine
release plan
takeaways
- 引擎是分层架构的
- 工具
- 功能
- 资源
- 核心
- 平台
- 更低层 更稳定,更高层 更灵活 可定制
- 虚拟世界由 ticks 来驱动