THE WIZARD'S
LIBRARY
A complete Blender-built Gothic hall, translated into a desktop first-person Three.js walkthrough. Follow the candlelit aisle, read the room from floor to gallery, circle the globe and spiral stair, and approach the cold light beyond the great window.
Enter the library live production build · desktop keyboard + mouse
Use a desktop browser and allow the large scene bundle to finish loading. Click the ENTER button to capture the mouse; fullscreen gives the clearest view. Mobile layouts can show the room, but there are no touch controls and this build is not presented as mobile-playable.
CLICK ENTER to enter · MOUSE to look · WASD or ARROWS to move · SHIFT to run · F fullscreen · ESC release mouse. Headphones reveal the synthesized footsteps, candle crackle, low room tone, and cathedral reverb.
Keep the authored room.
Change the rendering contract.
The browser version is not a panoramic render wrapped around a camera. The owner-supplied Blender scene was exported as 27 material-batched meshes with 27 materials, while book colors remain stable through vertex color. Baked base color, AO, roughness, metallic, and tangent-normal channels carry the procedural surface work into the realtime asset.
Five Blender views—hero, gallery, stair, entrance, and desk—became regression anchors for camera position, focal intent, and exposure. They keep the same spatial reading while the browser adds its own walk camera, collision bounds, local light management, WebAudio, and deterministic comparison hooks.
Warm knowledge within.
Cold daylight beyond.
The room is organized around one long Gothic axis: reading tables and scattered papers at ground level, book walls and pointed stone bays at the sides, timber galleries above, then chandeliers, blue-gold banners, a globe, and a spiral stair breaking the repetition. Candlelight holds the wood and brass in warm pools while the great window stays deliberately pale and cool.
Three.js r170 renders the scene through AgX and OutputPass. A 4096 PCF sun shadow, a PMREM interior reflection environment, fog, a bright exterior portal, restrained Bloom, eight resident structural lights, and a 24-light nearest-neighbour pool reinterpret the authored lighting without pretending to reproduce Cycles. The realtime build has no multi-bounce GI, volumetric shafts, or the desk camera's f/2.4 depth of field.

Four times the pixels.
That was the hitch.
The earlier hardware A/B isolated render resolution as the main frame-rate bottleneck—not Shift movement, collision, or the frozen-shadow policy. On the same Radeon 8060S / RADV machine and complete 1K/512 KTX2 scene, a 1280×720 backing canvas at DPR 1 reached 60.18 FPS, while DPR 2 expanded the canvas to 2560×1440 and fell to 33.59 FPS with static shadows. Version 34 therefore starts ordinary walkthroughs at DPR 1 or lower with 2× scene MSAA; after at most 45 frames or 1.5 seconds of warm-up, a sustained result below 52 FPS can step down to 0.85 and then 0.7. Frozen comparison shots and ?quality=high preserve DPR 2 / 4× MSAA. The original 1K–4K texture build remains available through the diagnostic original-texture fallback.
- Process-tree PSS: 2150.4 → 669.6 MiB at DPR 2
- Process-tree RSS: 2428.7 → 939.8 MiB at DPR 2
- Ready: 10567 → 9597 ms for original → 1K/512 KTX2 at DPR 2
- Historical KTX2 frame-rate A/B: 60.18 FPS at DPR 1 / 4× MSAA; 33.59 FPS at DPR 2
- v34 live profile: DPR ≤ 1 / 2× MSAA, then adaptive 0.85 / 0.7 below 52 FPS
- DPR 2 shadows: 33.59 FPS static; 30.19 FPS continuously updated
- Frozen static/continuous comparison frame: AE=0 and RMSE=0, with zero recorded runtime errors
The FPS figures above are the prior hardware baseline that isolated DPR; they do not claim a fresh browser measurement for v34. AE=0 / RMSE=0 compares the frozen static-shadow and continuously updated shadow screenshots at the same DPR 2 camera. It does not compare Three.js against Blender or Cycles, and it is not a claim of pixel equivalence.