Back to Blog
BlenderLight BakingThree.jsWebGL

3D Homepage Development Log 04: Why the Browser Looked Like Plastic

A correct Blender preview does not automatically survive WebGL. The stable delivery bakes authored light into multiple beauty atlases and prevents the browser from grading it again.

·2 min read

The most visible failure of this stage was that detailed imported assets looked like plastic toys in the browser. The dark office chair and turntable collapsed into black shapes, the floor lamp looked charred, walls carried noisy spots, and the floor texture appeared both blurry and oversized. The models had not suddenly lost detail. Blender and the browser were evaluating different lighting, color management, and material capabilities.

Do Not Ask the Browser to Guess the Light Again

The final approach uses a stable authored delivery. Blender bakes the fixed warm setup into separate 2K beauty atlases for the desk, workstation, turntable, recliner, office chair, floor lamp, room shell, and lived-in props. Three.js displays those atlases through KHR_materials_unlit / MeshBasicMaterial, without adding another main light or tone-mapping pass that would change the result.

The bake pins sampling, denoising, and indirect-light clamps. Wall seams and the dark bookcase have explicit luminance audits. The floor was rebuilt with 1K base and normal textures plus 512 roughness, returning board width to a domestic scale instead of magnifying a few cuts across the room.

Poster and Live Frame Must Speak the Same Color

The same-camera poster and GLB share one display grade and a restrained warm-charcoal background. The browser handoff does not change exposure, white balance, or framing, avoiding the old transition where an acceptable poster immediately became a grey or crushed Canvas.

This gives up some dynamic-light freedom in exchange for consistency across browsers and GPUs. At the time this log was published, PNG was still the intermediate GLB texture delivery and KTX2 was the next transport and memory optimization; it needed to compress the approved image rather than quietly redesign the lighting.

Update, 2026-08-28: that transport stage is now complete. Production ships 21 embedded, complete-mip KTX2 textures (18 ETC1S and three UASTC) with a local Basis transcoder. The verified scene is 9.62 MB with an estimated 48.47 MB texture allocation, and the window glass no longer uses the full-frame transmission path. PNG remains only as the reproducible export source intermediate.

Warm studio after the stable beauty bake