《游戏引擎实现原理》卷三《子系统与工具》全 34 篇,是接在卷一《引擎内核》与卷二《渲染引擎》之上的一套书:从第 1 章「资源模型、GUID 与依赖图」起,到第 11 章把前面所有零件装配成一个能编辑、能撤销、能存盘的最小编辑器,
helio会一路让《微光岛》活起来——一条从资源模型到流式区块的资源管线、一套剪辑轨道与状态机混合树的动画系统、一层骨骼与蒙皮矩阵的 GPU 蒙皮、一条引擎与物理库之间的清晰边界、一张把音源与总线连成有向图的混音链、一层四设备归一化的输入与可重绑定动作映射、一套反射驱动的脚本属性与热重载状态迁移,以及一套文档模型、命令栈、反射属性面板、视口与资产浏览器的编辑器。每一节都写代码,每一节的代码都在本机真跑过,跑出来的是真实字节、真实耗时与真实样本。
本页是《子系统与工具》的全书目录:按章节顺序列出全部 34 篇,点击标题直达正文。也可以从各节末尾的「阅读导航」按顺序通读,或先看目录篇 里的阅读路径与周计划。
全书概览
| 项目 | 内容 |
|---|---|
| 书稿 | 《游戏引擎实现原理》卷三《子系统与工具》 |
| 篇数 | 34 篇(正文 11 章 33 节 + 目录篇) |
| 领域 | 游戏引擎运行时子系统与编辑器工具链从零实现 |
| 贯穿项目 | 《微光岛》——一款低多边形 3D 收集冒险小游戏 |
| 从零引擎 | helio——纯 TypeScript,在卷一卷二之上接出 src/subsys/ 与 src/editor/ |
| 阅读方式 | 从目录篇 进入按顺序通读,或按查漏场景跳读 |
| 实测环境 | Node 26 与 headless Chromium(Web Audio / 视口渲染 / GPU 蒙皮) |
| 可运行性 | L1 逻辑本机实跑;L2 渲染与音频用 headless Chromium 验证,附真实像素与样本;编辑器面板 / 视口含 L3 / L4 部分 |
| 前置 | 卷一《引擎内核》与卷二《渲染引擎》,或了解句柄、ECS 与 Job System 的基本概念 |
全书目录
前置
| 篇目 | 核心内容 |
|---|---|
| 目录 | 本卷定位、与卷一卷二的关系、阅读路径、周计划与可运行性口径 |
第一部分:资源与流式(第 1–2 章)
让资源「进得来、存得下、装得对」——从资源模型与依赖图起步,经异步加载、引用计数、离线导入、增量构建,最后落到运行时的流式区块。
| 节 | 文章 | 核心内容 |
|---|---|---|
| 1.1 | 1.1 资源模型、GUID 与依赖图 | GUID、类型与路径;Kahn 拓扑加载序 + DFS 三色循环检测 |
| 1.2 | 1.2 异步加载与进度 | 并发上限、优先级队列、in-flight 去重、字节进度回调 |
| 1.3 | 1.3 引用计数、生命周期与释放 | 引用计数表、延迟释放队列、帧末 collect 统一释放 |
| 2.1 | 2.1 资源导入器与离线处理 | 注册表分派、版本失效、PPM / BC1 / mip 链、自描述产物 |
| 2.2 | 2.2 缓存、热重载与增量构建 | FNV-1a 内容哈希、依赖键沿 DAG 传播、增量重导脏子树 |
| 2.3 | 2.3 流式加载与区块(《微光岛》的岛) | 4x4 区块、距离优先级、每帧字节预算、双半径滞回 |
第二部分:运行时子系统(第 3–7 章)
让《微光岛》「动起来、碰得到、响得出、按得动、改得了」——动画与蒙皮、物理集成、音频、输入、脚本绑定与热重载。
| 节 | 文章 | 核心内容 |
|---|---|---|
| 3.1 | 3.1 剪辑、轨道与求值器 | 时间轴钳制 / 循环 / 乒乓、关键帧二分、step / linear / cubic 与 slerp |
| 3.2 | 3.2 状态机与混合树 | 参数驱动转移、exitTime、any-state、交叉淡化与一维混合树 |
| 3.3 | 3.3 蒙皮集成与性能基准 | CPU LBS + WGSL 蒙皮、CPU / GPU 逐顶点比对、蒙皮代价基准 |
| 4.1 | 4.1 引擎与物理库的边界 | 判别联合碰撞体、PhysicsBackend 接口、ColliderSync 版本同步 |
| 4.2 | 4.2 固定步长、插值与穿透 | 固定步长累加器、上一态与当前态插值、扫掠 AABB 防穿透 |
| 4.3 | 4.3 空间查询、分层与事件 | 位掩码分层、raycast 与 overlap、enter / exit / stay 三态事件 |
| 5.1 | 5.1 混音图与音频总线 | 有向图、拓扑序求和、OfflineAudioContext 逐样本比对 |
| 5.2 | 5.2 音效池、BGM 与流式 | voice 池、优先级抢占、淡入淡出包络、流式重采样与欠载检测 |
| 5.3 | 5.3 Web Audio 的限制与解锁 | 自动播放解锁、渲染量子量化、延迟补偿、设备缓冲 |
| 6.1 | 6.1 设备抽象与事件队列 | 四种设备归一化 InputEvent、帧内队列、边沿 / 电平语义 |
| 6.2 | 6.2 动作映射与重绑定 | 动作→控制绑定表、多设备并行、冲突检测、版本化持久化 |
| 6.3 | 6.3 输入缓冲与手感 | 跳跃缓冲、土狼时间、输入延迟补偿(手感数值属 L4) |
| 7.1 | 7.1 反射驱动的属性暴露 | 类型描述符→属性视图、类型强制、只读与隐藏、最小变更集 |
| 7.2 | 7.2 组件脚本的生命周期 | onCreate / onUpdate / onDestroy、状态机、帧末延迟卸载 |
| 7.3 | 7.3 模块替换与状态迁移 | 数据与代码分离、版本戳、迁移链升版(真实刷新时序属 L4) |
第三部分:编辑器(第 8–11 章)
让内容「做得出来、改得回去」——场景文档模型、可撤销命令栈、反射驱动的属性面板、视口与资产浏览器。
| 节 | 文章 | 核心内容 |
|---|---|---|
| 8.1 | 8.1 编辑器与运行时的关系 | 共享文档、编辑态 / 运行态两实例、Play / Pause / Stop 与快照 |
| 8.2 | 8.2 文档模型与脏标记 | 扁平节点表、id 与稳定 uid、脏标记沿父链传播、变更记录 |
| 8.3 | 8.3 序列化落盘与场景格式 | JSON 关卡格式、uid 引用、版本字段与迁移、拒绝更高版本 |
| 9.1 | 9.1 命令模式与可撤销操作 | Command 的 do / undo、撤销栈、redo 链断裂、合并判定 |
| 9.2 | 9.2 事务、合并与撤销栈 | 原子事务补偿回滚、时间窗合并、栈条数上限与字节预算 |
| 9.3 | 9.3 与数据模型的接缝 | 文档为唯一编辑目标、SetProperty / AddNode、命令→脏标记→重绘 |
| 10.1 | 10.1 反射驱动的属性面板 | 面板描述数据模型(纯数据,L1);DOM 渲染属 L3 |
| 10.2 | 10.2 编辑器控件与类型映射 | 类型→控件映射表、可覆写注册表(映射 L1);控件创建属 L3 |
| 10.3 | 10.3 多选编辑与批量修改 | 公共属性、全等 / 混合判定、批量命令(L1);面板交互属 L3 / L4 |
| 11.1 | 11.1 gizmo 与拾取射线 | 像素→NDC→世界射线、轴 / 面手柄、沿轴拖拽求解(拖拽属 L4) |
| 11.2 | 11.2 场景视口与渲染接入 | 渲染器接进视口、双相机、片元描边、网格叠加(回读像素核对) |
| 11.3 | 11.3 资产浏览器与关卡编辑 | 资产树、类型判定、稳定 GUID、拖放载荷、关卡加载(拖放属 L4) |
说明:本卷没有序、前言与附录(与卷一《引擎内核》不同),全部内容就是上表的 11 章 33 节,外加一篇目录 。
怎么用这份索引
- 系统学习:从目录篇 进入,按路径 A 顺序通读 11 章。
- 让世界动起来:直接跳到第二部分(运行时子系统,第 3–7 章),这块是让《微光岛》「活」的核心。
- 搭编辑器:直接跳到第三部分(编辑器,第 8–11 章),这块最独立、也最容易被单独拿走。
- 查问题:用目录篇 末尾的「常见问题速查」表,或按上表标题跳读。
- 配代码:每篇正文的代码块都标了层级与来源文件,L1 的可以直接复制出来在 Node 26 上跑,L2 的按正文给的 headless Chromium 跑法复现。
- 先看地基:还没读前两卷的话,先去《引擎内核》索引 与《渲染引擎》索引 把内核与渲染过一遍,再回来看本卷会轻松很多。
相关阅读
- 卷一《引擎内核》索引 :本卷的地基,从零写引擎内核
- 卷二《渲染引擎》索引 :本卷的画面来源,从零接出渲染引擎
- 游戏引擎专题导航 :Unity、Unreal 与 Defold 的选型与入门
- 图形学专题 :渲染管线、着色器与 GPU 的深度文章
- Defold 专题 :从引擎子系统视角看 audio / input / physics / hot-reload
- 书稿书架 :全部电子书与创作手记