首页 / 路线图
对着源码审计,而不是对着先前的文档。缺失的行和已发布的行 出现在这里是出于同一个原因:你应该能仅凭引擎自己的文档 做出取舍,并且在第一天而不是第三周发现真相。
完整的工作文档在仓库里,即 Roadmap.md, 包含每个排序决定背后的依赖推理。本页是它的公开摘要。
已发布
已实现,并由一个正在运行的应用实际使用。
部分
存在但不完整,或只在部分后端上实现。
缺失
没有代码存在。不是“即将上线”——今天什么都没有。
| 能力 | 状态 | 证据 |
|---|---|---|
| 固定通道调度,从 FrameStart Compute 到 Overlay | 已发布 | Rendering/RenderPass.cs |
| 带优雅后端降级的 compute 特效注册 | 已发布 | Rendering/Compute.cs |
| 四种后端,各有自己的着色器实现 | 已发布 | 三种着色器编译器加 WGSL |
| 泛光、GTAO、TAA、深度视图 | 已发布 | Rendering/Effects/,四个后端 |
| DDGI:SDF 体积、探针辐照度图集、切比雪夫遮蔽 | 已发布 | Effects/Ddgi.cs |
| 天空大气、昼夜循环、程序化云噪声 | 已发布 | Effects/SkyAtmosphere.cs、DayNightCycle.cs |
| 级联阴影贴图,4 个图集槽位中 3 个级联 + 1 个点光源 | 已发布 | Rendering/CascadedShadow.cs |
| 速度缓冲 | 已发布 | RenderPass.cs,由 TAA 消费 |
| CPU 视锥剔除、逐实例粗筛、阴影剔除 | 已发布 | Rendering/Frustum.cs,默认开启 |
| 带逐实例蒙皮和变形目标的 GPU 实例化 | 已发布 | Controls/InstancedModel.cs |
| 逐实例表面拾取和高亮模式 | 已发布 | Panels/ObjectPicker.cs、Rendering/Highlight.cs |
| glTF 加载与动画播放 | 已发布 | Models/GltfAsset.cs、GLTFAnimationPlayer.cs |
| MSDF 文本渲染 | 已发布 | Season/Fonts/,所有后端 |
| 场景法线缓冲 | 缺失 | GTAO 从深度推导法线 |
| 间接绘制与调度 | 缺失 | 任何后端都没有间接路径 |
| 纹理压缩:BC、ASTC、ETC2、KTX2 | 缺失 | 没有压缩格式路径 |
| 遮挡剔除、Hi-Z | 缺失 | — |
| GPU 粒子 | 缺失 | — |
| 屏幕空间反射 | 缺失 | DDGI 只覆盖间接漫反射 |
| 贴花 | 缺失 | — |
| 体积雾、光束 | 缺失 | 大气散射存在,局部体积效果不存在 |
| 水面系统 | 缺失 | 示例里的海面是场景内容,不是引擎系统 |
| 地形、高度图、曲面细分 | 缺失 | — |
| 网格或地形 LOD、冒名体 | 缺失 | — |
| 运动模糊 | 缺失 | 速度缓冲存在,只缺解析 |
| 任何形式的 VR / XR | 缺失 | 没有 OpenXR,没有立体,没有 HMD 追踪 |
| glTF 导出 | 缺失 | 仅导入 |
| 网格处理:减面、UV 修复、法线修复 | 缺失 | — |
| 材质实例与变体、按材质批量合并 | 缺失 | 材质来自 glTF 导入 |
一个决定上面几项成本的事实。 管线是 前向渲染——管线状态组织为 Opaque / Transparent / Fade 加剔除变体, 带一个可存储的深度目标和速度目标。没有 G-buffer。 这就是反射和贴花被门控在新增法线目标之后、延迟贴花 不是简单的“下一项”的原因。
| 能力 | 状态 | 证据 |
|---|---|---|
| 显示 / 播放 / 编辑 / 调试模式 | 已发布 | Apps/Engine/App.cs |
| 对象选择、逐实例拾取、高亮 | 已发布 | Panels/ObjectPicker.cs |
| 拖拽与点击区分、对象拖拽 | 已发布 | ObjectPicker.cs 中的 20 px 阈值 |
| 玩家碰撞、遮挡物淡出 | 已发布 | Management/PlayerCollider.cs、OcclusionFade.cs |
| 中间缓冲的调试视图 | 已发布 | 深度、速度、SDF、GI 探针 |
| 带动态行为的岛屿场景 | 已发布 | 硬编码在 App.Create() 中 |
| 属性编辑:位置、尺寸 | 部分 | 固定字段,没有通用属性网格 |
| 场景序列化、保存、加载 | 缺失 | 没有序列化器,没有场景格式,没有世界文件 |
| 空的、无场景的启动 | 缺失 | Create() 无条件构建岛屿 |
| 场景层级检查 | 缺失 | — |
| 资产库或目录 | 缺失 | 模型路径按场景类硬编码 |
| 撤销 / 重做 | 缺失 | — |
| 能力 | 状态 | 证据 |
|---|---|---|
| 文本生成与翻译 | 已发布 | llama.cpp / GGUF |
| 图像生成与编辑 | 已发布 | SD1.5、SDXL、SD3.5、Qwen-Image-Edit、Flux.2-Klein 等 |
| 视频生成 | 已发布 | — |
| 音乐生成 | 已发布 | StableAudio |
| 语音转文字 | 已发布 | Whisper / GGUF |
| 文字转语音,ONNX 与 GGML 双后端 | 已发布 | 包括声音克隆 |
| 视觉与 OCR | 已发布 | — |
| 模型获取 | 部分 | 面板链接到源仓库;应用不下载权重 |
| 生成输出回流为引擎资产 | 缺失 | 结果止于 AI 面板内部 |
| 任何网络客户端 | 缺失 | 目前一切都在本地运行 |
| 3D 生成、自动绑定、动画合成 | 缺失 | — |
| 单元测试 | 缺失 | — |
| 带记录数字的基准场景 | 缺失 | 核心性能主张未经测量 |
| 截图 / 图像差异回归 | 缺失 | — |
| 帧分配预算或 GC 测量 | 缺失 | — |
| 文档中按后端的特性支持矩阵 | 缺失 | 计划为自动生成,而非手工维护 |
| 资产导入缓存 | 缺失 | glTF 每次运行都重新解析 |
基础这一块刻意不粉饰。项目的核心主张是架构极简 能赚回托管运行时花掉的成本——而这个主张目前没有任何测量支撑。 修复它是 D 轨的事,而且它没有被排在后面。
工作按轨道分组,每条轨道对应项目实际面对的问题。每条轨道 内部的排序按依赖关系,而不是按吸引力——几个诱人的特性排在 后面,因为它们的先决条件是横跨四个后端的基础设施工作。
| 轨道 | 它回答的问题 |
|---|---|
| A. 渲染 | 渲染器是否真的达到次世代水准? |
| B. 宿主与世界 | 不读源码,别人能否看出这个引擎做了什么? |
| C. AI | 付费层是否物有所值,并且它是否有助于制作游戏? |
| D. 基础 | 以上任何一项能否被证明、维护或交付? |
| E. VR / XR | 渲染器能否触达单视图假设不再成立的平台? |
其中三项根本不是特性,而是其他项所依赖的基础设施。它们 不光彩,而且没有一项能产出一张截图,这正是它们被明确点名、 而不是在构建粒子做到一半时才被发现的原因。
| # | 项目 | 被什么阻塞 | 成本 | 可见? |
|---|---|---|---|---|
| 1 | A1 运动模糊 | — | 低 | 是 |
| 2 | A0.3 纹理压缩 | — | 中 | 否 |
| 3 | A0.2 场景法线目标 | — | 低–中 | 否 |
| 4 | A0.4 逐视图矩阵拆分 | — | 中,四个后端 | 否 |
| 5 | A2 屏幕空间反射 | A0.2 | 中 | 是 |
| 6 | A3 体积雾与光束 | — | 中 | 是 |
| 7 | A0.1 间接绘制与调度 | — | 高 | 否 |
| 8 | A6 GPU 粒子 | A0.1 | 中 | 是 |
| 9 | A7 GPU 驱动剔除 | A0.1, D1 | 高 | 否 |
| 10 | A4 动态水面 | A2 | 中 | 是 |
| 11 | A5 贴花 | A0.2 | 中 | 是 |
| 12 | A8 网格 LOD | 网格处理 | 中 | 否 |
| 13 | A9 地形与地形 LOD | A0.1, A7, A8 | 很高 | 是 |
为什么顺序长这样。
Update 开销而不是绘制提交——如果是这样,A7 就是错误的修复。编辑器是一块演示面板,而不是工作流。它存在是为了让渲染器能被 看见。它不存在于成为引擎被使用的方式。
Create() 无条件地构建整个岛屿。「不加载任何世界地运行」和「创建一个新世界」是同一种能力,而本轨的一切其他事项都首先需要它。反碎片化契约。 一条序列化的世界记录是一个 C# 类型 名加构造参数。它永远不是一袋带着行为碎片的属性。布局是数据; 行为是代码;边界是类型名。正是这一条约束,让它不会变成在检查器里 拼装出来的组件模型。
| 世界等级 | 内容 | 能作为文件分享吗? | 谁能打开它 |
|---|---|---|---|
| 静态世界 | 仅内置类型,外加捆绑资产 | 是 | 任何装有应用的人 |
| 携带代码的世界 | 引用项目定义的类型 | 否——分享 C# 项目 | 任何持有源码的人 |
这种区分必须在格式中明确、在 UI 中可见,否则项目就继承了 它正试图避免的那个依赖问题:一个共享世界因为缺少某个类型 而无声地加载失败。
Panel 或 Control 子类,所以一个生成的类只需要被实例化并添加——不需要满足任何序列化格式,不需要向任何组件模型注册。C2 排在 C3 前面,这与直觉顺序相反。C2 是一个 HTTP 客户端 加一个 Roslyn 宿主;C3 是一条网格管线加一个导出器加一个模型。C2 的 质量由前沿模型供给,免费提升;C3 的质量受限于本地 3D 模型今天能 产出的东西,而那还不是可以直接放进游戏的质量。而且 C2 利用了 本引擎有而竞争对手没有的东西——行为即一个可编译的 C# 类。
运行时 C# 编译在完全 AOT 下不可用,这就排除了 iOS 和 WebAssembly。 这个约束被明说而不是被绕过:该特性本质上是仅桌面端。
这里的每一项,要么是证明另一条轨道里某个主张的先决条件, 要么是项目在与贡献者接触后存活下来的先决条件。
BaseApp、单一概念的示例,以及一份添加 compute 特效的书面教程——这是当前引擎中对贡献者最友好的扩展点,而目前只有读 Ddgi.cs 才能发现它。渲染器在构造上就是单视图的:每帧一个相机、矩阵按对象捆绑、 静态渲染目标单例、窗口 vsync 帧节奏、仅指针输入和屏幕空间 UI。 其中每一项都是 VR 会打破的假设。所以这条轨道被刻意放在最后—— 它是一个新平台主张,而不是现有平台上的一个特性。
| 项目 | 内容 | 依赖 |
|---|---|---|
| E0 | OpenXR 运行时绑定:会话生命周期、共享现有设备和队列的交换链导入、动作集、xrWaitFrame 节奏 | 桌面端成熟度 |
| E1 | 双视图渲染:两次眼睛通道或一次 multiview 广播、逐眼矩阵常量 | A0.4 |
| E2 | 逐眼渲染状态。DDGI 和级联阴影保持共享——它们是世界空间和光空间,这正是本架构在 VR 上的优势 | E1 |
| E3 | XR 输入:6DoF 位姿、基于动作的按钮、触觉反馈、在现有反投影之上的射线拾取 | E0 |
| E4 | VR UI:锚定在世界的面板四边形或合成层 | E0 |
| E5 | Quest:Android 宿主下的 OpenXR 加载器,外加经由现有 RenderQuality 阶梯的一个 XR 质量预设 | E2, E3 |
A0.4——逐视图矩阵拆分——被放在 A 轨的早期,正是为了让最难的重构 在这条轨道开始之前很久就付清代价,并且趁场景通道已经为法线 目标敞开的时候做。
日期是意图,不是承诺。
结果:漏斗存在,付费层有了被购买的理由。
结果:有人能创建并保存一个世界,性能主张有了数字支撑。
结果:战略规模的主张被演示,而不是被断言。
结果:基于为此设计的世界格式的自然语言世界创建。
阶段 4 及以后。 A8 网格 LOD 和 A9 地形; C3 静态道具生成;C4 自动绑定,如果质量能证明它值得;E 轨从 Windows 和 Direct3D 12 试点开始,然后是 Quest;Mac 和移动端商店上架。主机技术 适配被承认但无处排期——它受限于 SDK 获取,而 SDK 获取受限于 引擎的地位,而不是工程投入。
没有这些的路线图只是一张愿望清单。下面每一条都是一个 决定,而不是一处遗漏。
Season/ 保持比特性列表所暗示的更小、更清晰。关于排序的分歧是欢迎且有用的。 开一个 issue—— Roadmap.md 里的推理都写了下来,以便被质疑。