← devlog

2026-05-16

Why splats — the photoreal-first stance

Gaussian splats are the moat. Everything else (post-process, audio, mode-design) is in service of not getting between the capture and the eye.

A captured Gaussian-splat scene encodes geometry and view-dependent appearance in a single representation. The light is already in the data. The shadows are in the data. The materials are in the data. The render path doesn't fake any of this — it samples it back out.

That changes how the engine should treat photoreal. The default should be "show the photograph"; departures from that should be deliberate and opt-in. A vignette layered on top of a real photograph reads as a filter; tonemapping a correctly-mapped image reinterprets it as a dream of the place rather than the place itself.

The PRD calls this "photoreal-first." It shows up in the code as a literal default: visualPreset starts at null, which bypasses the entire post-process chain. LUTs only bind under the Cinematic preset. The five accessibility surfaces that we wired are accessibility surfaces, not aesthetic ones. The atmosphere chip the original PRD wanted ("ROOM · 13:42 LOCAL · 22 °C · CLEAR") never shipped because the time and temperature would be invented and the brain reads invented time-stamps over a real photo as a tell.

The flip side: when a capture itself reads weak — washed out, low contrast, unbalanced — the post-process chain is right there. The Cinematic preset is one tap away in Settings. The per-arena LUTs are authored. None of that is hidden.

It would be cheaper to just ship the post chain on by default. That isn't the bet we're making.