The evidence-backed close of the bake-off. · Rendered from docs/decisions/0006-engine-three.md in the project repository · view as Markdown

ADR-0006: Three.js is the museum's engine

Decision

Three.js renders Inception Space. The Babylon.js slice stays in the repository as a comparison spike, reachable at index.html?debug, and is not part of the product.

Why

ADR-0003 refused to pick an engine from a synthetic bake-off, and that was right: the Phase 1 captures had both engines failing the 60 fps gate on the worst-case full-face artwork path, with Three.js modestly ahead (docs/benchmarks/ENGINE-BAKEOFF.md). A modest lead is not a decision.

What decided it is the month since. Everything product-shaped — the zero-gravity corridor, pocket rooms, the paint scheduler, the quality tiers, the sky easter egg, prop labels, and now the .lpr warp shader — was built on Three.js and measured there. The engine question stopped being "which is faster in the abstract" and became "is there a reason to port a working museum", and there is not.

The one number that mattered turned out not to be an engine number at all: in-room frame time was dominated by canvas-to-GPU uploads, which neither engine causes and which .lpr plus a GPU renderer removes (docs/PERFORMANCE.md).

Consequences