Surfel-based global illumination on the web
vmg12
41 points
3 comments
May 09, 2026
Related Discussions
Found 5 related stories in 84.0ms across 8,303 title embeddings via pgvector HNSW
- Show HN: Browser-based light pollution simulator using real photometric data holg · 37 pts · May 02, 2026 · 51% similar
- Rendering the Sky, Sunsets, and Planets ibobev · 444 pts · May 12, 2026 · 49% similar
- Watercolor World with Three.js lovegrenoble · 14 pts · April 30, 2026 · 48% similar
- Streaming large 3D Gaussian Splats worlds on the Web with Spark 2.0 dmarcos · 16 pts · April 14, 2026 · 47% similar
- Jax's true calling: Ray-Marching renderers on WebGL BenoitP · 72 pts · April 01, 2026 · 46% similar
Discussion Highlights (3 comments)
cadamsdotcom
Awesome. > The fact that you can get physically-plausible light bounce and temporal stability all running in real-time on a web page... on a phone... feels like we're actually in the future. Even as some things about the open web are in trouble, others are thriving! This was such a great in depth read, learned a ton and got to see great graphics and play with lots of knobs. A+ :)
rendaw
I've been playing around with reviving radiosity for incremental GI for low-poly scenes, and this sounds very similar (and probably much better). I put a camera on each lightmap texel, rendered the scene, then summed the pixels (roughly) in the render to get the light. I chose the "slow" approach, where lighting took several seconds, but was done idly. And then once the lightmap had a certain amount of stability I'd stop the light calculations until the scene changed. It sounds like the advantages here are: - Optimized sampling, rather than just every lightmap texel. My idea was to tie the lightmap to LOD, but I feel like this is much smarter. - Optimized light accumulation, dedicating more resolution to high-light areas to reduce noise It seems like it has a more advanced "stability" calculation. Things that are the same: - Lighting is still incremental - when they e.g. change the light direction, even with optimizations, there's still some ghost light that slowly moves over so I'm not sure how this would work in really dynamic situations (car traffic) Things that are different: - It looks like the light data is cached based on the current view. I store light for the whole scene, so there's no light fluctuation when doing camera movement/rotation. I think the tradeoff here is the view-relative caching is probably more optimized. Limitations of both, IIUC: - Reflections, water, etc. Radiosity is diffuse lighting only. I think you can combine it with other hacks like screen space reflections though
Panzerschrek
Why not using an approach with light probes instead? They can be placed statically (or be changed only rarely), usually much less probes are required compared to surfels.