The scene above is a Blender room, baked and compressed, loading in your browser. Getting it here is the project.
Where the work happens
- Geometry nodes for procedural assets and controlled variation — build the rule, not the object, and get fifty of them
- bpy scripting for the part nobody wants to do twice: batch export, LOD passes, naming conventions, material normalization
- Baked lighting instead of realtime lighting, because a web scene has a millisecond budget, not a render farm
The compression path
A Blender scene is not a web asset until it has survived a diet. The route: bake lighting to texture, decimate with intent, export glTF, compress geometry with Draco and textures with KTX2, then push to Cloudflare R2 behind a cached custom domain. The target is a model that loads over hotel wifi on a three-year-old phone and still reads as the thing I made.
Most of the craft is deciding what to throw away. A polygon budget is a design constraint, and design constraints are where the interesting decisions live.
Downstream
Outputs feed diffusion workflows in ComfyUI, compositing in After Effects and DaVinci Resolve, realtime scenes in Three.js, and playable environments in Godot — depending on what the deliverable needs to be.
