Vultra Ecosystem

A modular family of C++ libraries for real-time rendering, XR research, and game development — from foundation utilities to a multi-backend RHI and a modern engine.

Vultra is not a single repository — it is an ecosystem of MIT-licensed, XMake-built C++ libraries that I design, write, and maintain, covering everything from foundation utilities to a cross-API render hardware interface and a modern rendering engine. Each piece is a standalone, reusable library; together they form the stack my PhD research and my games run on.

Origins

The story starts with Snow Leopard Engine, an OpenGL 4.6 group project at the University of Leeds. It taught me a lot — and left a lot to be desired: a legacy API, tightly coupled subsystems, and design decisions we could not undo late in the project. Modern graphics programming has decisively moved to explicit APIs like Vulkan, and when I began my PhD, the framework behind my research projects gradually matured. Those threads converged: instead of one monolithic engine, I rebuilt everything as an ecosystem of focused libraries. The vast majority of the code is handwritten; AI assistance came later for some of the tooling around it.

Design Principles

  • Modularity and reuse. Every library is split out as its own package precisely so that it can be reused by any project — my research code, my games, other people’s engines — rather than being owned by libvultra.
  • Offline-first content. Heavy work (shader compilation, mesh optimization, texture compression) happens at import/build time, so the runtime stays lean and loading stays fast.
  • Full-platform ambition. Desktop, Android, WebAssembly, and XR are all first-class targets, not afterthoughts.
  • Research-friendly. You should be able to program against the stack the way you program against raylib — no editor, no project wizard, just code — which is exactly what rapid research prototyping needs.

Why Not an Existing Solution?

I tried. bgfx is a product of an older era — its abstraction is built on OpenGL state-machine thinking, which forfeits the advanced features of modern graphics APIs. Diligent Engine and The Forge don’t fully cover the API matrix I need, and neither exploits Slang’s ability to compile a single shader source to every shading backend. NRI supports only Vulkan and DirectX. And none of them treat OpenXR as a design consideration — which, for someone whose research is high-performance VR rendering, was the final straw. So I wrote a RHI that satisfies my own requirements while aiming for the broadest platform support possible: VRI.

Architecture

flowchart TB
    subgraph foundation["Foundation"]
        vbase["vbase<br/>core utilities"]
        vfilesystem["vfilesystem<br/>FS abstraction"]
        vtask["vtask<br/>task scheduling"]
    end
    subgraph content["Content Pipeline"]
        vshadersystem["vshadersystem<br/>Slang shader pipeline"]
        vasset["vasset<br/>offline asset pipeline"]
        vrendergraph["vrendergraph<br/>render-graph schema"]
    end
    subgraph rendering["Rendering"]
        vri["VRI<br/>multi-backend RHI"]
        vrf["VRI-Framework<br/>embeddable render framework (private)"]
    end
    subgraph engine["Engine"]
        libvultra["libvultra / VultraEngine<br/>rendering + game engine"]
    end
    lazy["Lazy-100<br/>fantasy console"]

    vbase --> vfilesystem --> vasset
    vbase --> vasset
    vri --> vrf --> libvultra
    vshadersystem --> libvultra
    vasset --> libvultra
    vrendergraph --> libvultra
    vtask --> libvultra
    vri --> lazy
Layer Project Role
Foundation vbase Minimal, engine-agnostic core: UUID, StrongID, Result<T,E>, module/service registries, signals — no global state.
Foundation vfilesystem Composable filesystem abstraction with virtual mounts; desktop, Android, and WASM backends.
Foundation vtask Task scheduling on top of the battle-tested enkiTS.
Content vshadersystem Slang-based shader compilation and material reflection — one shader source, every backend.
Content vasset Offline-first asset pipeline: import once, optimize offline, load instantly at runtime.
Content vrendergraph Data-driven render pipeline schema — the .vrg.json format behind libvultra’s RenderGraph, built as a standalone library.
Rendering VRI Extensible RHI for Vulkan, D3D12, Metal, WebGPU, the OpenGL family, and CPU software rendering — with OpenXR support.
Rendering VRI-Framework A minimal, embeddable rendering framework on VRI; the future rendering core of libvultra.
Engine libvultra The engine itself: render graph, material graph, 3D Gaussian Splatting, OpenXR stereo rendering, plugins, AI-agent integration.
Proof Lazy-100 A fantasy game console built on VRI — proof that the stack can carry a complete, shippable product.

Where It’s Going

The long-term goal is an engine that is genuinely capable of both shipping games and supporting research:

  • libvultra’s rendering core will migrate onto VRI / VRI-Framework, completing the transition from its current Vulkan + WebGPU backends to the full cross-API stack.
  • A private VultraEngine repository is developing a new architecture with CoreCLR (C#) scripting, opening the door to the C# ecosystem and making middleware integration far easier than Lua alone.
  • The near-term research focus is high-performance VR rendering — stereo rendering, novel-view synthesis, and Gaussian Splatting in XR.
  • In three to five years, this should be a mature engine.