Warm Nights
From First Blender Render to Web-Ready 3D Scene
Apr, 2023 - Jul, 2023
- Project Type: Personal project
- Focus: 3D web pipeline (Blender to WebGL integration)
- Stack: Blender, Three.js
- Goal: Build a performant, web-ready 3D scene from scratch
- Outcome: Interactive 3D experience under 10MB total size
The Start
In 2023, I transitioned into 3D web development and wanted a hands-on way to understand the full pipeline, from modeling, texturing, UV unwrapping, baking, and real-time rendering for the web.
After following isolated tutorials, blogs, and case studies, I decided to build a complete scene and push it until it was viable for Three.js.

A screenshot from Blender where I was trying my first render

My first render, it really felt good
The first render helped me understand how light, geometry, and materials interact. More importantly, I saw what doesn’t translate well to real-time rendering.
One early issue was incorrect light behavior through geometry, which revealed gaps in my understanding of materials and scene structure.

The render now looks like a door
Exploration & Limitations
I ended up creating an abstract scene to push my understanding of colors, materials, and composition. This quickly exposed how complex proper texturing and shading actually are, especially when the target is WebGL.

The render of the abstract scene
At this point, I shifted focus from offline rendering to the web. I explored baking geometry, lighting, and colors into textures that could be efficiently rendered in Three.js.

A screenshot where the web version is on the right, Blender render on the top left, and the baked texture in the bottom left
Matching Blender’s appearance inside a real-time renderer was not easy at all and required understanding color spaces, texture formats, and export settings.
Time to Give It Everything I Have
For the final iteration, I committed to building a complete scene end-to-end, treating it as a production-style exercise rather than a test.

Once I was done with the modeling and was ready to UV Unwrap everything

Everything is colored, but this was the material preview

While rendering, just two samples and it looked greatly amazing back then!
Geometry was merged and textures were baked into smaller atlases to reduce draw calls and load times.

Simple particle systems and lightweight interactions were used to create the illusion of depth and physical response without expensive simulations. Grass, glowing particles, and snow were implemented directly in Three.js to preserve interactivity and make them more randomized.
Optimization Steps
A major goal was keeping the experience lightweight.
- Textures: Personal project
- Models: 3D web pipeline (Blender to WebGL integration)
- Bundled Code (including the Libraries): Blender, Three.js
- Code I Wrote: Build a performant, web-ready 3D scene from scratch
Total size remained under 10MB uncompressed, with several optimization opportunities identified for future iterations.
Reflection
This project marks my entry point into 3D web development. While I would approach many decisions differently today, it validated my ability to move between tools, reason about performance, and ship a complete interactive experience for the web.





