Hi everyone,
I wanted to share a project I’ve been working on called Untold Engine—a 3D renderer written entirely in Swift using Metal.
I started it as a way to better understand modern graphics systems, and over time it’s grown into a more complete renderer. Along the way, I transitioned the engine from C++ to Swift—not just as a learning exercise, but also to explore what a Swift–Metal rendering framework could look like when it gives developers more direct control and fewer constraints over how things are structured and rendered.
The current focus is on efficiently rendering XR scenes, with early visionOS support already in place. Some of the systems currently implemented:
- Apple Platform Coverage: Unified Swift + Metal codebase for macOS, iOS, and visionOS
- Rendering Pipeline: Metal renderer with PBR/IBL workflows and post-processing across standard and XR paths
- AR and XR Runtime Support: Built-in AR workflows plus visionOS integration and spatial interaction support
- ECS + Scene Graph Core: Component-based architecture with hierarchical transforms and scene root transform controls
- Async Content Loading: Asynchronous loading pipeline for scenes and assets to improve responsiveness on large worlds
- LOD and Streaming: LOD support with geometry streaming, streaming regions, and memory budget management
- Static Batching and Culling: Static batching, octree acceleration, and occlusion culling for large-scene performance
- Spatial Input Features: XR spatial input helpers including anchored pinch drag, distance tracking, and two-hand rotation
One of my motivations for building this was to explore how far Swift can be pushed in the rendering/graphics space, especially for systems that are traditionally written in C++.
If that’s something you’re interested in, feel free to take a look at the repository:
https://github.com/untoldengine/UntoldEngine
Here are some videos showcasing the Untold Engine + Vision Pro. It is still a work in progress:
Game Dungeon
Room
Cartoon City
Happy to discuss implementation details or design decisions if anyone is curious.
I’d also like to thank a few collaborators who have supported the project along the way. Building a 3D renderer is not an easy task, and their support has been truly invaluable.
Collaborators:
