Home / Roadmap
Audited against the source rather than against prior documentation. The absent rows are here for the same reason as the shipped ones: you should be able to decide against this engine using its own documentation, and find out on day one rather than in week three.
The full working document lives in the repository as Roadmap.md, with the dependency reasoning behind every ordering decision. This page is the public summary of it.
Shipped
Implemented and exercised by a running application.
Partial
Exists but incomplete, or implemented on some backends only.
Absent
No code exists. Not "planned soon" — nothing there today.
| Capability | Status | Evidence |
|---|---|---|
| Fixed pass schedule, FrameStart Compute through Overlay | Shipped | Rendering/RenderPass.cs |
| Compute effect registration with graceful backend degradation | Shipped | Rendering/Compute.cs |
| Four backends, each with its own shader implementation | Shipped | three shader compilers plus WGSL |
| Bloom, GTAO, TAA, depth view | Shipped | Rendering/Effects/, four backends |
| DDGI: SDF volume, probe irradiance atlas, Chebyshev occlusion | Shipped | Effects/Ddgi.cs |
| Sky atmosphere, day/night cycle, procedural cloud noise | Shipped | Effects/SkyAtmosphere.cs, DayNightCycle.cs |
| Cascaded shadow maps, 3 cascades + 1 punctual in 4 atlas slots | Shipped | Rendering/CascadedShadow.cs |
| Velocity buffer | Shipped | RenderPass.cs, consumed by TAA |
| CPU frustum culling, per-instance broad phase, shadow culling | Shipped | Rendering/Frustum.cs, on by default |
| GPU instancing with per-instance skinning and morph targets | Shipped | Controls/InstancedModel.cs |
| Per-instance surface picking and highlight modes | Shipped | Panels/ObjectPicker.cs, Rendering/Highlight.cs |
| glTF loading and animation playback | Shipped | Models/GltfAsset.cs, GLTFAnimationPlayer.cs |
| MSDF text rendering | Shipped | Season/Fonts/, all backends |
| Scene normal buffer | Absent | GTAO derives normals from depth |
| Indirect draw and dispatch | Absent | no indirect path on any backend |
| Texture compression: BC, ASTC, ETC2, KTX2 | Absent | no compressed-format path |
| Occlusion culling, Hi-Z | Absent | — |
| GPU particles | Absent | — |
| Screen-space reflections | Absent | DDGI covers indirect diffuse only |
| Decals | Absent | — |
| Volumetric fog, light shafts | Absent | atmospheric scattering exists, local volumetrics do not |
| Water system | Absent | the sample's sea is scene content, not an engine system |
| Terrain, heightmaps, tessellation | Absent | — |
| Mesh or terrain LOD, impostors | Absent | — |
| Motion blur | Absent | velocity buffer exists, only the resolve is missing |
| VR / XR of any kind | Absent | no OpenXR, no stereo, no HMD tracking |
| glTF export | Absent | import only |
| Mesh processing: decimation, UV repair, normal repair | Absent | — |
| Material instances and variants, batch merging by material | Absent | materials come from glTF import |
One fact that sets the cost of several items above. The pipeline is forward rendering — pipeline states are organised as Opaque / Transparent / Fade with cull variants, with a storable depth target and a velocity target. There is no G-buffer. That is why reflections and decals are gated on adding a normal target, and why deferred decals are not simply "next up".
| Capability | Status | Evidence |
|---|---|---|
| Show / Play / Edit / Debug modes | Shipped | Apps/Engine/App.cs |
| Object selection, per-instance picking, highlight | Shipped | Panels/ObjectPicker.cs |
| Drag versus click discrimination, object dragging | Shipped | 20 px threshold in ObjectPicker.cs |
| Player collision, occluder fade | Shipped | Management/PlayerCollider.cs, OcclusionFade.cs |
| Debug views for intermediate buffers | Shipped | depth, velocity, SDF, GI probes |
| Island scene with dynamic behaviour | Shipped | hardcoded in App.Create() |
| Property editing: position, size | Partial | fixed fields, no generic property grid |
| Scene serialization, save, load | Absent | no serializer, no scene format, no world file |
| Empty, sceneless startup | Absent | Create() builds the island unconditionally |
| Scene hierarchy inspection | Absent | — |
| Asset library or catalogue | Absent | model paths are hardcoded per scene class |
| Undo / redo | Absent | — |
| Capability | Status | Evidence |
|---|---|---|
| Text generation and translation | Shipped | llama.cpp / GGUF |
| Image generation and editing | Shipped | SD1.5, SDXL, SD3.5, Qwen-Image-Edit, Flux.2-Klein and more |
| Video generation | Shipped | — |
| Music generation | Shipped | StableAudio |
| Speech to text | Shipped | Whisper / GGUF |
| Text to speech, dual ONNX and GGML backends | Shipped | including voice cloning |
| Vision and OCR | Shipped | — |
| Model acquisition | Partial | panels link to the source repository; the app does not download weights |
| Generated output flowing back in as an engine asset | Absent | results stop inside the AI panels |
| Any network client | Absent | everything runs locally today |
| 3D generation, auto-rigging, animation synthesis | Absent | — |
| Unit tests | Absent | — |
| Benchmark scenes with recorded numbers | Absent | the central performance claim is unmeasured |
| Screenshot / image-diff regression | Absent | — |
| Frame allocation budget or GC measurement | Absent | — |
| Feature-by-backend support matrix in docs | Absent | planned as generated, not hand-maintained |
| Asset import caching | Absent | glTF is re-parsed on every run |
The foundations block is deliberately unflattering. The project's central claim is that architectural minimalism recovers what a managed runtime costs — and that claim currently has no measurement behind it. Fixing that is Track D, and it is not scheduled late.
Work is grouped into tracks that map to the questions the project actually faces. Ordering inside each track is by dependency, not by appeal — several attractive features sit late because their prerequisites are infrastructure work across four backends.
| Track | Question it answers |
|---|---|
| A. Rendering | Is the renderer genuinely next-gen? |
| B. Host & worlds | Can someone see what the engine does without reading the source? |
| C. AI | Is the paid layer worth money, and does it help make games? |
| D. Foundations | Can any of the above be proven, maintained, or shipped? |
| E. VR / XR | Can the renderer reach platforms where single-view assumptions stop applying? |
Three of the items are not features at all but infrastructure the others sit on. They are unglamorous and none of them produce a screenshot, which is exactly why they are named explicitly instead of being discovered halfway through building particles.
| # | Item | Blocked by | Cost | Visible? |
|---|---|---|---|---|
| 1 | A1 Motion blur | — | Low | Yes |
| 2 | A0.3 Texture compression | — | Medium | No |
| 3 | A0.2 Scene normal target | — | Low–Medium | No |
| 4 | A0.4 Per-view matrix split | — | Medium, four backends | No |
| 5 | A2 Screen-space reflections | A0.2 | Medium | Yes |
| 6 | A3 Volumetric fog and light shafts | — | Medium | Yes |
| 7 | A0.1 Indirect draw and dispatch | — | High | No |
| 8 | A6 GPU particles | A0.1 | Medium | Yes |
| 9 | A7 GPU-driven culling | A0.1, D1 | High | No |
| 10 | A4 Dynamic water | A2 | Medium | Yes |
| 11 | A5 Decals | A0.2 | Medium | Yes |
| 12 | A8 Mesh LOD | mesh processing | Medium | No |
| 13 | A9 Terrain and terrain LOD | A0.1, A7, A8 | Very high | Yes |
Why the order looks like that.
Update cost than draw submission — and if so, A7 is the wrong fix.An editor is a demonstration surface, not the workflow. It exists so the renderer can be seen. It does not exist to become the way the engine is used.
Create() builds the whole island unconditionally. "Run with no world loaded" and "create a new world" are the same capability, and everything else in this track needs it first.The anti-fragmentation contract. A serialized world record is a C# type name plus construction parameters. It is never a bag of properties with attached behaviour fragments. Layout is data; behaviour is code; the boundary is the type name. That single constraint is what keeps this from becoming an inspector-assembled component model.
| World tier | Contents | Shareable as a file? | Who can open it |
|---|---|---|---|
| Static world | Built-in types only, plus bundled assets | Yes | Anyone with the app |
| Code-bearing world | References project-defined types | No — share the C# project | Anyone with the source |
That distinction has to be explicit in the format and visible in the UI, or the project inherits the exact dependency problem it is trying to avoid: a shared world that silently fails to load because a type is missing.
Panel or Control subclass, so a generated class only has to be instantiated and added — no serialization format to satisfy, no component model to register with.C2 comes before C3, which inverts the intuitive order. C2 is an HTTP client plus a Roslyn host; C3 is a mesh pipeline plus an exporter plus a model. C2's quality is supplied by frontier models and improves for free; C3's is capped by what local 3D models produce today, which is not yet drop-it-in-a-game quality. And C2 exploits something this engine has and its competitors do not — behaviour as a single compilable C# class.
Runtime C# compilation is unavailable under full AOT, which rules out iOS and WebAssembly. That constraint is stated rather than worked around: the feature is desktop-only by nature.
Every item here is either a prerequisite for proving a claim in another track, or a prerequisite for the project surviving contact with contributors.
BaseApp under 50 lines, one-concept samples, and a written walkthrough for adding a compute effect — currently the most contributor-friendly extension point in the engine, and discoverable only by reading Ddgi.cs.The renderer is single-view by construction: one camera per frame, matrices bundled per object, static render-target singletons, window-vsync frame pacing, pointer-only input and screen-space UI. Every one of those is an assumption VR breaks. So this track is deliberately last — it is a new platform claim, not a feature on the existing one.
| Item | Content | Depends on |
|---|---|---|
| E0 | OpenXR runtime binding: session lifecycle, swapchain import sharing the existing device and queue, action sets, xrWaitFrame pacing | desktop maturity |
| E1 | Dual-view rendering: two eye passes or a multiview broadcast, per-eye matrix constants | A0.4 |
| E2 | Per-eye render state. DDGI and cascaded shadows stay shared — they are world and light space, which is this architecture's VR advantage | E1 |
| E3 | XR input: 6DoF poses, action-based buttons, haptics, ray picking on top of the existing unprojection | E0 |
| E4 | VR UI: world-anchored panel quads or composition layers | E0 |
| E5 | Quest: OpenXR loader under the Android host, plus an XR quality preset through the existing RenderQuality ladder | E2, E3 |
A0.4 — the per-view matrix split — sits early in Track A precisely so the hardest refactor is paid for long before this track starts, and while the scene pass is already open for the normal target.
Dates are intent, not commitment.
Outcome: the funnel exists, and the paid tier has a reason to be bought.
Outcome: someone can create and save a world, and the performance claim has a number attached.
Outcome: the strategy-scale claim is demonstrated rather than asserted.
Outcome: natural-language world creation, on a world format designed for it.
Phase 4 and beyond. A8 mesh LOD and A9 terrain; C3 static prop generation; C4 auto-rigging if quality justifies it; Track E starting as a Windows and Direct3D 12 pilot, then Quest; Mac and mobile store presence. Console technical adaptation is acknowledged and scheduled nowhere — it is gated on SDK access, which is gated on the engine's standing rather than on engineering effort.
A roadmap without these is a wish list. Each of the following is a decision, not an omission.
Season/ stays smaller and clearer than the feature list would suggest.Disagreements about ordering are welcome and useful. Open an issue — the reasoning in Roadmap.md is written down so it can be argued with.