Skip to content
Demo Lab

Live · 3D experience

Splat Walk

Inspect a captured cave-lion head with native three.js Gaussian splats, free-flight controls, and interactive details.

Next.js / three.js / WebGPU / TypeScript / Tailwind CSS

Splat Walk cave-lion capture, with three annotation rings and exploration controls.
Preview captured September 11, 2026. Open the demo to interact.Lion reconstruction by Joanna Kobierska, shared by Renaud under CC BY 4.0. Screenshot resized and compressed. The scan is separately licensed from the MIT application code.

Overview

An object-inspection experiment built around a captured cave-lion head. Move around the scan, inspect three annotated details, and compare how the capture looks from another angle. Despite the name, the current scene is not a room-scale walk or a platform game.

Before you try it

Requires WebGPU, hardware acceleration, and a compatible browser. The experience provides capability and loading error states with retry. Movement is free-flight, without gravity or collision. The scan and renderer load on the separate demo site, not on this case-study page.

What to try

  1. Inspect a detail

    Choose Face to face, Surface detail, or Fine whiskers in the dock. These keyboard-focusable buttons open the same details as the rings on the capture.

  2. Change your viewpoint

    Choose Explore for mouse capture, then use WASD to move and Q/E for height. Escape releases the mouse. Without mouse capture, drag to look or focus the canvas and use arrow keys. On touch, the left half moves and the right half looks.

  3. Return without losing discoveries

    Choose Reset view to restore the starting camera while keeping the details you found. Refreshing the page starts a new discovery session.

How it works

The capture is the visual
three.js renders the Gaussian splats through its native WebGPU renderer and SPZLoader. Scene picking and the HTML detail controls share the same annotations. There is no mesh standing in for the scan.
Loading and recovery are part of the interface
Each loading attempt fetches the SPZ once. Progress uses the response length when available. GPU loss ends that attempt and removes the dead canvas; retry creates a new renderer. Hidden tabs pause rendering, and cleanup releases the scene resources.

Building an unusual browser prototype?