20220518 - GAMES104 - Lecture 2:Layered Architecture of Game Engine


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 来驱动


Author:
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint policy. If reproduced, please indicate source !
  TOC