Skip to content

Latest commit

ย 

History

125 Commits

Folders and files

NameName
Last commit message
Last commit date
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๐ŸŽฎ UntoldArcade

UntoldArcade is the demo playground for the Untold Engine โ€” a real, running Xcode project for every major thing the engine can do, from mixed-reality digital twins to GPU cloth you can punch a ball through.

Clone it, open a folder, hit โŒ˜R, and you're looking at the feature instead of reading about it.


๐Ÿ“บ Demos

Each demo is a standalone Xcode project with its own README, tutorial, and bundled assets โ€” no setup beyond opening the .xcodeproj. The four Rendering Extensions (CoolSaber, CoolWater, CoolCloth, CoolWeb) are reusable plugins โ€” each ships its own shader library, pipelines, and render-graph passes, and can be dropped into any project.

โš”๏ธ CoolSaber โ€” visionOS ยท Rendering Extension

CoolSaber demo

Lightsaber duels driven by PSVR2 Sense controllers โ€” pull the trigger to ignite a glowing blade, then duel a friend over SharePlay with clashing sparks, haptic kicks, and synthesized saber audio. Requires a physical Vision Pro (the deferred G-buffer exceeds simulator tile memory).

open CoolSaber/Examples/CoolSaberVisionOS/CoolSaberVisionOS.xcodeproj

๐Ÿ’ง CoolWater โ€” visionOS ยท Rendering Extension

CoolWater demo

Real-time animated water with reflection/refraction and ripple simulation.

open CoolWater/Examples/CoolWaterVisionOS/CoolWaterVisionOS.xcodeproj

๐Ÿงต CoolCloth โ€” visionOS ยท Rendering Extension

CoolCloth demo

GPU cloth simulation (XPBD, small-steps scheme) hanging in your real room โ€” pinch it to grab a particle, throw a ball through it, switch materials live, and let real furniture occlude it.

open CoolCloth/Examples/CoolClothVisionOS/CoolClothVisionOS.xcodeproj

๐Ÿ•ธ๏ธ CoolWeb โ€” visionOS ยท Rendering Extension

CoolWeb demo

A Spider-Man web-shooter demo โ€” strike the classic web-shooter pose (thumb, index and pinky extended, middle and ring curled) and a web line fires from your wrist, blooms into a net on the surface it hits, and stays tethered to your hand until you open your palm to release it. Requires a physical Vision Pro (hand tracking and scene reconstruction aren't available in the simulator).

open CoolWeb/Examples/CoolWebVisionOS/CoolWebVisionOS.xcodeproj

๐Ÿ€ CoolBasket โ€” visionOS ยท Physics Backend

Mixed-reality basketball, and the first consumer of the engine's physics backend plugin seam: a pure-Swift PhysicsBackend simulates the ball against your real floor, walls and furniture (ARKit plane detection), the hoop you place in your room, and your hands. Look at the floor and pinch to place the hoop, pinch near the ball to pick it up, flick to throw โ€” a shot only counts when it comes down through the rim.

  • PhysicsBackendPlugin installed before renderer creation, driven by the engine's PhysicsCoordinator โ€” zero engine changes
  • Rigid bodies, static colliders and trigger volumes expressed with the engine-owned RigidBodyComponent/ColliderComponent
  • Contact and trigger events delivered through PhysicsEvents
open CoolBasket/Examples/CoolBasketVisionOS/CoolBasketVisionOS.xcodeproj

๐Ÿงฒ UntoldJoltPhysics โ€” plugin ยท Physics Backend

Jolt Physics behind the engine's physics backend seam, as a Swift package every demo can depend on: untoldengine/UntoldJoltPhysics. Jolt comes as source from the untoldengine/JoltPhysics fork (the upstream tree plus a Package.swift) and SwiftPM compiles it โ€” no binaries โ€” for macOS, iOS and visionOS. CoolBasket can run on it instead of its built-in backend: pick "Jolt Physics" in its control window.

.package(url: "https://github.com/untoldengine/UntoldJoltPhysics.git", branch: "develop")

๐Ÿ›๏ธ ArchvizViewer โ€” visionOS

ArchvizViewer demo

Load a Blender-authored architectural visualization straight into mixed reality โ€” lights, camera, and color management carried over exactly as the artist set them up. Pinch-drag and two-hand rotate to walk the scene around your room. Reference project for the Archviz To Vision Pro tutorial.

  • Async, non-blocking model loading (setEntityMeshAsync)
  • Blender-authored lights/camera/color management (loadSceneAuthored)
  • Vision Pro spatial picking and two-hand scene rotation
open ArchvizViewer/ArchvizViewer.xcodeproj

๐Ÿ›‹๏ธ BedroomTwin โ€” visionOS

BedroomTwin demo

A digital twin of a bedroom: the same room model, but different parts of it behave differently. The window becomes a passthrough light portal; the lamps, door, curtains, and laptop stay individually tappable and carry live mock status data. Reference project for the Bedroom Digital Twin tutorial.

  • SceneChannel splitting geometry into context / window / selectable objects by naming convention
  • Light-portal + passthrough ghost rendering on the window channel
  • Per-object tap selection resolved against mock digital-twin status data
open BedroomTwin/BedroomTwin.xcodeproj

๐Ÿ™๏ธ CityStreaming โ€” visionOS

CityStreaming demo

A city too big to fit in GPU memory, streamed in tile by tile as you walk through it โ€” nearby tiles load at full detail, distant ones fall back to LOD/HLOD, and static batching updates incrementally in the background. Reference project for City Streaming On Vision Pro.

  • Tiled streaming manifests (setEntityStreamScene) instead of one monolithic model
  • Distance-based load/unload with LOD/HLOD fallback
  • Spatial debug overlays for tile bounds, octree residency, and texture streaming tiers
open CityStreaming/CityStreaming.xcodeproj

๐Ÿ› ๏ธ SceneBuilder โ€” macOS / iOS

A declarative, SwiftUI-style syntax for building 3D scenes in code โ€” cubes, PBR materials, and animated waves assembled without a scene editor.

open SceneBuilder/SceneBuilder.xcodeproj

๐Ÿซง SplatTwin โ€” macOS

SplatTwin demo: the same view as meshes and after the swap

Mesh-to-Gaussian-splat twins: three objects cross-fade from their mesh to a splat "capture" as you walk up to them and back as you leave, while the mesh keeps writing depth as a shrunk occluder shell and keeps casting its shadow. The captures are synthesised at first launch, so nothing large ships. The swap policy is the demo's own code on the engine's public API, an example of extending the engine from outside; a HUD exposes the swap distance, fade, splat exposure and the occluder shells.

open SplatTwin/SplatTwin.xcodeproj

โš™๏ธ Requirements

  • Xcode 26.1 or later
  • macOS 26.01+ (for macOS demos)
  • iOS 26.01+ (for iOS demos)
  • visionOS 26.01+ (for Vision Pro demos)
  • Metal-capable GPU
  • A physical Apple Vision Pro for CoolSaber (simulator can't run the deferred renderer's G-buffer) and CoolWeb (simulator has no hand tracking or scene reconstruction)

๐Ÿš€ Getting Started

1. Clone the repo

git clone https://github.com/untoldengine/UntoldArcade.git
cd UntoldArcade

2. Open a demo project

Each demo is a standalone Xcode project. Navigate to the demo folder and open the .xcodeproj file โ€” see the open command under each demo above.

Most demos generate their Xcode project from project.yml via XcodeGen. If you add/remove source files or change dependencies, re-run xcodegen generate inside that demo's folder before opening/building.

3. Build and run

  • Select your target device (Mac, iPhone, iPad, or Vision Pro simulator)
  • Press โŒ˜R to build and run
  • SPM will automatically fetch the Untold Engine dependency on first build

๐Ÿ”— Engine Dependency

Each demo project depends on the Untold Engine via Swift Package Manager (SPM). The workspace is already configured to fetch the engine from its develop branch on GitHub.

๐Ÿ“‚ Project Structure

UntoldArcade/
โ”œโ”€โ”€ CoolSaber/           # Rendering Extension โ€” PSVR2 lightsaber duels + SharePlay
โ”œโ”€โ”€ CoolWater/           # Rendering Extension โ€” real-time animated water
โ”œโ”€โ”€ CoolCloth/           # Rendering Extension โ€” GPU cloth simulation (XPBD)
โ”œโ”€โ”€ CoolWeb/             # Rendering Extension โ€” Spider-Man web-shooter demo
โ”œโ”€โ”€ CoolBasket/          # Physics Backend โ€” mixed-reality basketball on the plugin seam, on either backend
โ”œโ”€โ”€ ArchvizViewer/       # visionOS โ€” Blender archviz scene in mixed reality
โ”œโ”€โ”€ BedroomTwin/         # visionOS โ€” digital-twin bedroom with channel-based selection
โ”œโ”€โ”€ CityStreaming/       # visionOS โ€” tiled city streaming with LOD/HLOD
โ”œโ”€โ”€ SceneBuilder/        # macOS/iOS โ€” declarative scene-building demo
โ”œโ”€โ”€ SplatTwin/           # macOS โ€” mesh-to-Gaussian-splat twins
โ””โ”€โ”€ docs/media/          # Screenshots/GIFs/video referenced by this README

Each demo folder generally follows:

<Demo>/
โ”œโ”€โ”€ project.yml               # XcodeGen config (where used)
โ”œโ”€โ”€ README.md                 # Demo-specific overview + what it teaches
โ””โ”€โ”€ Sources/<Demo>/
    โ”œโ”€โ”€ <Demo>App.swift        # App entry point
    โ”œโ”€โ”€ GameScene.swift        # Scene setup, input, per-frame logic
    โ””โ”€โ”€ GameData/               # Bundled models, textures, HDRs, streamed tiles

๐Ÿค Contributing

We welcome contributions! If you'd like to:

  • Add a new demo game
  • Improve existing demos
  • Enhance documentation

Please fork the repo, open a PR, or join discussions in the Untold Engine repo.

๐Ÿ“œ License

This project follows the same license as Untold Engine. See the LICENSE file for details.

About

No description, website, or topics provided.

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages