Real-time Rendering with a Neural Irradiance Volume
Delivering fast inference (~1ms/frame), a tiny memory footprint (1-5MB), 10x quality gains over probe-based methods @ equivalent mem budgets, bringing neural rendering within reach of consumer hardware without RT or denoising.
arnocoomans.be/eg2026
27.02.2026 09:32 β
π 56
π 15
π¬ 3
π 0
It's being worked on! Details are still being shaked out.
Prerequisites have starting landing in the spec and in dawn (Chrome). E.g. latest Chrome release now supports textures and samplers in let bindings (variables).
Some type of buffer reinterpreting scheme is also being debated.
27.02.2026 03:13 β
π 0
π 1
π¬ 2
π 0
So... back to the drawing board? Maybe copying what Doom DA did and cluster lights in world-space rather than any sort of RIS-based scheme.
26.02.2026 04:20 β
π 4
π 0
π¬ 0
π 0
No matter what your RIS output is, you have to write it back to the cache. You can't conditionally do that and stay correct.
So scrapping that and trying to think of other schemes, I'm basically just reinventing ReGIR (except I don't want to do ReGIR since it requires many visibility tests).
26.02.2026 04:18 β
π 3
π 0
π¬ 1
π 0
Update on bsky.app/profile/jms5...:
Turns out my code was bugged, and I never actually wrote to the cache...
Fixing that reveals that the whole scheme was wrong anyways - conditionally replacing cache cells with RIS outputs does not give an unbiased/correct output.
26.02.2026 04:16 β
π 12
π 1
π¬ 1
π 0
Only thing I'd be worried about is making shader writing _too_ accessible - I don't want people making a million pipeline variations instead of 20 uber-ish shaders.
25.02.2026 01:51 β
π 0
π 0
π¬ 1
π 0
Thank you - this is very interesting!
I know our users would love if we did this with Rust, so that people don't have to learn WGSL :P
But the basic idea of a general shader skeleton, and then allow users to compose pieces to modify inputs/outputs between stages of the skeleton seems good.
25.02.2026 01:50 β
π 1
π 0
π¬ 1
π 0
Anyone have examples of Material APIs they like in an engine, or links to good talks on this topic?
Right now Bevy materials let you reuse host code (texture/buffer bindings), but customizing the default material is essentially "go to github and copy paste the entire shader". Not very modular.
24.02.2026 03:40 β
π 8
π 2
π¬ 1
π 0
π Unleash your creativity with GPU Zen 4!
π Dive into cutting-edge techniques from industry experts to tackle complex graphics challenges and elevate your projects.
Available now on Amazon!
π Standard Edition: a.co/d/0cvhJuSU
βοΈ Deluxe Edition: a.co/d/07t0MZGz
#GPUZen #GameDev
19.02.2026 23:02 β
π 22
π 9
π¬ 0
π 0
Maybe cache the result of the 32 sample RIS in the cell and use that, so we're not doing the expensive RIS per-pixel?
Message me if you have ideas!
19.02.2026 02:35 β
π 2
π 0
π¬ 1
π 0
ReGIR - An advanced implementation for many-lights offline rendering | Tom Clabault
Tom Clabault's website
For GI, I don't really have a good idea of where to go next. Perhaps just ReGIR after all? I know Tom Clabault got good results tomclabault.github.io/blog/2025/re..., but it's fairly expensive.
19.02.2026 02:34 β
π 3
π 0
π¬ 1
π 0
For ReSTIR DI, I next want to try feeding the traditional froxel-based light clustering into the initial RIS. Could help with many-lights.
19.02.2026 02:33 β
π 2
π 0
π¬ 1
π 0
So yeah, total bust. I was hoping to get a good sampling distribution I could feed into ReSTIR DI, and switch the irradiance caching part of the world cache to not store DI, and do NEE per-pixel for GI instead of immediately terminating in the cache - which would massively prevent light leaks.
19.02.2026 02:30 β
π 2
π 0
π¬ 1
π 0
Final result... the cache (left) has higher variance than just brute-force 32-sample RIS (right). Complete failure :/
19.02.2026 02:27 β
π 4
π 0
π¬ 1
π 0
5a. If in cache, update weight and estimated visibility
5b. If not in cache, is visible, and contribution larger than one of the 8 lights already in the cache, replace it
6. Generate an alias table of the 8 lights and their final weights to accelerate per-pixel sampling in the rest of the renderer
19.02.2026 02:25 β
π 2
π 0
π¬ 1
π 0
1. Do RIS over 8 random lights
2. Separately, do RIS over the up to 8 cached lights
3. Combine the reservoirs of 1. and 2., capping the random reservoir's weight to 25% of the other reservoir's weight
4. Test visibility of the final sample
19.02.2026 02:22 β
π 2
π 0
π¬ 1
π 0
With just a few lights, it's not a big deal. With 441 lights like this scene, pure random sampling becomes more of a problem.
My idea is that I would extend my existing spatial world cache structure to also store the 8 best lights it has found so far, in addition to cached irradiance (DI+GI).
19.02.2026 02:19 β
π 3
π 0
π¬ 1
π 0
Several different parts of Solari (realtime pathtracing) need to sample direct lighting:
* Diffuse GI (which is already cached in world space)
* Specular GI pathtracing (when it can't terminate in the world cache)
* Per-pixel ReSTIR direct light would like a better initial distribution than random
19.02.2026 02:15 β
π 3
π 0
π¬ 1
π 0
π§΅ I've been experimenting with caching the best lights in world space to improve NEE sampling. Inspired by ReGIR, MegaLights, and www.yiningkarlli.com/projects/cac....
19.02.2026 02:13 β
π 47
π 7
π¬ 1
π 1
Thank you, kram looks pretty good! I think it's only missing BC6H, but I can add a second library to handle one format, I don't mind that too much.
Agreed on there not really being a great all in one option.
11.02.2026 03:30 β
π 0
π 0
π¬ 0
π 0
Really cool to see that AVIF and runtime GPU compression work so well!
Spark is not freely available though, right? (which is totally understandable - it's a ton of work!)
10.02.2026 03:38 β
π 2
π 0
π¬ 1
π 0
An Updated Sponza glTF β Ignacio CastaΓ±o
I've put together an updated version of the Sponza scene with uncompressed PNG and compressed AVIF textures. I wrote about the process and compared the results against KTX.
www.ludicon.com/castano/blog...
#webgpu #web3d #sparkjs
10.02.2026 00:29 β
π 13
π 2
π¬ 3
π 1
raytracing
If you're interested in taking things further, I have an open source WGSL PT that uses HW RT as part of the Bevy game engine, and I think your experience would be super valuable. Feel to reach out if you want to chat!
jms55.github.io/tags/raytrac...
30.01.2026 03:03 β
π 1
π 0
π¬ 0
π 0
Awesome job! I always love seeing more people experimenting with realtime pathtracing.
30.01.2026 03:03 β
π 1
π 0
π¬ 1
π 0
New post on how to do real-time diffuse global illumination using surfels and #WebGPU: juretriglav.si/surfel-based... #threejs
29.01.2026 12:22 β
π 164
π 30
π¬ 1
π 2
That's normal - that's just how ReSTIR works.
I compared to Blender, and I think my realtime version is actually more correct, and that my pathtracer is somehow broken...
20.01.2026 23:56 β
π 0
π 0
π¬ 0
π 0