游戏引擎内核
游戏引擎是”游戏的实时操作系统”——每帧 16ms(60fps)内完成输入、物理、AI、渲染。
为什么学游戏引擎内核
游戏引擎的约束条件与操作系统内核类似: 严格的实时要求 (不能掉帧), 资源管理 (GPU 显存, 音频缓冲区), 并发调度 (渲染线程 vs 逻辑线程)。Eigen 数学库、Lua 虚拟机、物理求解器——这些组件共同构成了”游戏的 OS”。同时, ECS 架构的数据驱动思维对通用软件架构也有深刻启示。
文件索引
| 文件 | 内容 | C/C++ 关联 |
|---|---|---|
| 游戏循环 | Game Loop: process_input→update→render→present, fixed vs variable timestep, delta time, vsync | [[../../ISSUES |
| 渲染管线 | 顶点着色→光栅化→片段着色→后处理, GPU 资源生命周期, 场景图, 视锥剔除 | [[../../ISSUES |
| 物理引擎 | 碰撞检测: BVH→SAT/GJK; 刚体动力学: 力→加速度→速度→位置; 约束求解 (Sequential Impulse) | [[../../ISSUES |
| ECS架构 | Entity-Component-System: SoA 数据布局, Archetype, Sparse Set, 对比 OOP 继承 | [[../../ISSUES |
| 音频引擎 | 音频图: source→filter→mixer→output, DSP 基础 (卷积/混响/延迟), 空间音频, PortAudio/OpenAL | [[../../ISSUES |
| 脚本引擎 | C++↔脚本绑定, Lua C API, 反射/序列化, 热重载, embedding vs extending | [[../../ISSUES |
核心循环
FUNCTION game_loop():
WHILE running:
delta_time ← clock.update()
process_input()
update_physics(delta_time)
update_ai(delta_time)
render_frame()
present_frame()
IF delta_time < target_frame_time:
SLEEP(target_frame_time - delta_time)
阅读路径
游戏循环 → ECS架构 → 渲染管线 → 物理引擎 → 音频引擎 → 脚本引擎
- 先理解帧循环——这是游戏引擎的心脏
- ECS 是数据架构基础, 渲染/物理 System 都跑在 ECS 上
- 然后看渲染和物理——计算量最大的两个子系统
- 最后看音频和脚本——技术支持层面
著名引擎
| 引擎 | 语言 | 特点 |
|---|---|---|
| Unreal Engine | C++ | ECS (Mass), Blueprint 可视化脚本, Niagara VFX |
| Unity | C++/C# | ECS (DOTS), Burst Compiler, Job System |
| Godot | C++ | 自定义脚本 (GDScript), 节点树架构 |
| Bevy | Rust | 纯 ECS, 数据驱动 |
| raylib | C | 极简, 适合学习引擎原理 |
相关模块
- [[|系统内核]] — 操作系统提供的底层支持 (GPU 驱动, 音频驱动, 定时器)
- [[|语言运行时内核]] — 嵌入的脚本运行时 (Lua, Python, V8)
- C 与 Rust 的内核新时代 — 系统编程语言的演进