Let me show you a typical sponza, but with prefiltered reflections (reflection and global illumination is from a ReflectionProbe, not loaded from an .env file):
I think this looks good. I’m really early with this, this first version does the prefiltering in javascript Float32 arrays, so it’s too slow for realtime. It “bakes” the lighting+reflection in around 4-5 seconds. Uploads the different mipmap levels as a PNG image.
I’m working on a next version with cascaded downscaling and gaussian blur postprocesses, kind of works, but I have problems uploading to a cube texture. It generates the textures in 6-8ms, so it may be still slow for 60fps realtime, but it will be usable for example generating the reflection after loading the scene.
Some update: this works really well, around 1300-1500ms for a reflection capture and filtering - most of it, about 1000ms is encoding the mipmap levels to RGBE PNG.
But, the first time I render the ReflectionProbe, the browser freezes for about 15s, I suppose some kind of slowness in shader compilation, or the allocation of many buffers. I hope I can figure it out.
The picture shows secondary reflections. (when a previous reflection texture is used) This looks really nice, like a ray-traced image, reflection of a reflection of a reflection…