v0.1 架构基线 · 立项第 1 天 · 2026-10-22

把游戏
当作可编译程序的产物

MagicEngine 是 AI 原生、预算感知的跨端游戏引擎。内容以可读、可验证、可复现的 MIR 存在,由 Agent 生成,由编译链按目标平台的预算编译成包——从 4 MB 微信小游戏到主机 3000 万面。

主包上限
4MB
面/帧 跨度
5万→3000万
编译链
7段
P0 可承诺
88人周
scene/night_street.mir 设计示例 · 引擎尚未实现
// 预算不是事后统计,是节点的一等属性
scene "night_street" {
  budget { tri=50k tex=28MB
           draw=96 ms=9.2 mem=400MB }

  node n_1a7 : mesh/street_lamp {
    attrs  { mat="metal:painted" }
    budget { tri=1.2k ms=0.06 }
    provenance { by="agent:artisan" seed=0x9f2a }
  }

  node n_3f : light/cluster {
    attrs  { count=6 radius=8m }
    budget { ms=0.8 }
  }
}
$ me build --target=wx-ios --contract=30fps/600MB
  • ② legalize  virtual_geometry → LOD 链Tier0
  • ③ budget    最紧节点 n_3f 92%余量 >5%
  • ⑥ link      3.71MB 主包 + 4 分包CDN
  • ⑦ pack      main.zip 3.71MB≤ 4MB
01

我们相信的三件事

这三条决定了架构长什么样,也决定了什么不做。

瓶颈是内容成本,不是画质算法

Nanite 改变行业不是因为光栅化更优雅,而是它消灭了 LOD 制作这道人力工序。任何不削减人的工作量的技术,都进不了生产管线。

AI 必须进编译链,不能只做面板

Cocos / Unity / Unreal 的 AI 都挂在引擎外面,天花板是人的手速。我们让 AI 直接产出 MIR 变换,由校验器硬门禁、由编译器落盘,人只 review。

跨端是编译目标,不是导出按钮

同一份 MIR 编译到 WebGL2 与编译到主机,预算差四个数量级(5 万面 vs 3000 万面)。平台差异写进类型系统,而不是运行时用 #ifdef 兜。

02

三个不常见的选择

别人做“引擎 + AI 助手”,我们做“内容即程序”。差别全在这三处。

AI Bake

工具期生成,运行期零推理

小游戏跑在 WASM + WebGL2 上:没有 NPU,没有 CUDA,单线程为主。运行时跑模型不成立,所以大模型只在工具期工作,产出被烘焙成确定性数据。

  • 光照探针、导航网格、LOD 层级、材质参数、动画片段
  • 烘焙进包或 CDN 分包,运行时零推理开销
  • 这是“AI 引擎”第一次能跑进 4MB 主包
MIR

带预算的中间表示

MIR 之于游戏引擎,如同 MLIR 之于编译器:资产不再是二进制 blob,而是带类型的程序,可读、可 diff、可 review。

  • 每个节点标注 tri / tex / draw / ms / mem
  • 校验器是硬门禁,不通过不给进包
  • seed + model + recipe 三元组锁定复现
性能契约

性能是每次提交的断言

项目里声明目标:微信 iOS / 低端机 / 30fps / 峰值 600MB。引擎把这条契约编译成每个资源的预算,并在 CI 里持续验证。

  • 超支时精确报到节点,而不是“整个场景掉帧”
  • 优化 Agent 产出降级 diff,人 review 后合入
  • 永远留 5% 帧预算余量:真机有温度墙
03

按后端能力分级,不按平台名

微信 iOS 已有原生 Metal(compute / indirect / UAV 可用),安卓仍是 WebGL2(无 compute)。同一个“微信小游戏”,是两份不同的 lower 结果。

各 Tier 的能力与预算
Compute Shader✗ 无
Indirect Draw✗ 无
Mesh Shader✗ 无
硬件光追✗ 无
稀疏 / 虚拟纹理✗ 无
目标分辨率720–1080p
三角面 / 帧5 万
Draw call / 帧< 100
帧率30
峰值内存400MB

Tier 0 是硬边界:没有 compute、没有 indirect,“GPU driven”在小游戏低端机上不成立。几何走编译期 LOD 链,光照走烘焙 + SH 探针。

三角面 / 帧(对数尺度感受)

04

七段编译链

MIR 到可执行包是一条标准的多 pass 流水线。降级在编译期决定,不给运行时留 if。

  1. ①parse.mir 文本 → AST
  2. ②legalize目标能力合法化
  3. ③budget节点间预算协商
  4. ④ai-pass唯一非确定性 pass
  5. ⑤lower平台特化 IR
  6. ⑥link4MB 主包分包
  7. ⑦packzip / APK / IPA / 镜像

legalize 是跨端的核心

virtual_geometry 在 WebGL2 目标上被合法化成“预烘焙 cluster LOD 链”,而不是报错不支持。

ai-pass 可以关掉

它是唯一的非确定性 pass,必须记录完整 provenance,并支持 --no-ai 复现 bug。

link 决定包里放什么

把 30MB 内容按场景可达性切成“4MB 主包 + N 个 CDN 分包”,与链接器分配段地址同理。

05

先做一款能上线的游戏,引擎是副产品

每个阶段都以一款真实上线的产品为交付物。P0 的唯一目的不是“做出引擎”,而是用最小成本验证:AI 生成的内容能不能真的省下人力。

P0 · 0–6 个月

2D / 2.5D 垂直切片

一款真实上线的微信小游戏:主包 ≤4MB,低端安卓 30fps 稳定,全程零手写 shader。

P1 · 6–18 个月

3D 移动端

微信 + 抖音双端;Metal 后端解锁 compute;TAA 与超分必须在 P1 做完。

P2 · 18–36 个月

PC 与高端渲染

虚拟几何、Character Stack、HWRT-DDGI。“逼真”从这一阶段才真正开始。

P3 · 36 个月+

3A 与商业化

主机正式支持、大世界流式、运行时 AI;授权与云烘焙服务。

P0 详细排期 · 26 周 / 13 个双周迭代 / 4 FTE 起点 2026-11-02
D0语言决策门
M0.2首个渲染闭环
M0.4Agent 闭环可用
M0.3可玩切片
M0.5包体达标
M0.6稳定可上线
Gate 0六项指标 ≥4 项
  • D0 · W2wasm 上屏 ≤800KB,FFI 开销 <2μs,构建确定性
  • M0.2 · W6.mir 到屏幕闭环,预算超限精确报节点
  • M0.3 · W16中端安卓 30fps,帧时间 p95 ≤33ms,内存 <600MB
  • M0.5 · W18主包 ≤4MB 真机安装,首帧 <3s
  • M0.6 · W2230 分钟无崩溃,5 台真机全绿
  • Gate 0 · W26上线 / 包体 / 真机性能 / AI 占比 / 工时比 / 无手写 shader
06

立项第一天,已经有能跑的东西

架构是提案,但这几件是实测过的:可复现、可校验、有数字。

31
ogg 音效已入库

12 条配方确定性合成,两次构建 MD5 完全一致

7
硬校验项全绿

峰值 / 削波 / LUFS / 频谱质心 / 接缝 / 直流 / 静音

11
音频后端许可核验

3 个会否决商用的已排除,主选与备选均已实测

0
越界与重复契约

80 个文件过归属守卫:42 ok / 38 note / 0 fail

不是 demo,是可回滚的资产流。音效以“配方 + 种子”入库,输出 ogg;wav 是 16MB 中间产物,永不进版本控制,任何时候都能确定性重建。声学体检抓到过真实音色错误(雨声频谱质心 8289Hz 偏高,修正后 4562Hz)——这类问题人耳要听三十遍才确认。

07

明确不做

架构的第一性工作是划边界。以下每一项都是主动放弃,违反即失控。

5 年内写实画质超过 UE5对手有 20 年与 Quixel 资产库,正面硬刚必输,换赛道
全平台同步交付主机 SDK 有资质门槛,工作量是小游戏的 20 倍以上
自研物理与混音中间件集成 Jolt / Wwise / FMOD;自研的只是音效合成
通用低代码平台与“面向 3A”直接冲突,会毁掉表达力上限