All the different ReSTIR variants

If you didn’t already know, a Blender developer called Weizhen Huang tried to implement ReSTIR into Blender in 2024
https://projects.blender.org/blender/blender/pulls/121023
But she put it on pause, I think because she said Blender lacked some things in its architecture to implement this algorithm, and there was still ongoing researches to solve the obvious glitches of ReSTIR.

You can see the white patches in the older ReSTIR techniques in this video, although it loads pretty slowly.

So, in the checkboxes in the task, you can see at the time, Weizhen was already aware of the base ReSTIR algorithm, which handled Direct Lighting, and ReSTIR-PT, which handled Indirect Lighting as well.

As you may know, in 3D, the lighting in volume or caustics works differently than on diffuse surfaces. The later ReSTIR researches added support for those things, so bringing more coverage for ReSTIR. There are Area ReSTIR, ReSTIR BDPT etc. You can see what each ReSTIR variant brought on its Wiki page.

However, that list is not exhaustive. If I’m not mistaken, Daqi Lin leads most of the ReSTIR researches in Nvidia, so you can see his publications for them.

The newest one, ReSTIR-PG, where PG stands for path guiding, is originally an excellent news, because it combines ReSTIR and path guiding. It nearly eliminates the glitches that exist in all the older ReSTIR algorithms. But now I feel a little worried. Why? It using path guiding, means that it overlaps with OpenPGL, which is definitely coming to Blender. I fear they may be incompatible with each other. I am confident that OpenPGL uses more advanced algorithms than Nvidia’s path guiding, as is the case with OIDN and the Optix denoiser. Nvidia doesn’t care about using the best algorithms. They care about making things exclusive to Nvidia GPU. That means we may miss the best of both worlds. However, that may also mean, if Blender can replace the PG in ReSTIR-PG with OpenPGL, it may even outperform ReSTIR-PG.

Another less noticed research on ReSTIR is Intel’s version of it, Histogram Stratification for Spatio-Temporal Reservoir Sampling

They took a different approach to improve the original ReSTIR. And it should have a much lower hardware requirement than Nvidia’s ReSTIR. So maybe this is even more suitable for Blender. However, the current Blender task on ReSTIR is based on the Nvidia’s version, because back then the Intel one didn’t even exist yet.

4 Likes

This is very interesting! I wondered where this was going if anywhere. Thanks for posting.

1 Like

What about “Area ReSTIR: Resampling for Real-Time Defocus and Antialiasing” from the Utah graphics Lab
https://graphics.cs.utah.edu/research/projects/area-restir/
Much better quality with a slight performance decrease.

2 Likes

The improvements made with small, specular, highlights and especially in DOF are too obvious to overlook here. For Cycles we would probably want the robust model since it is not like the intention is rendering images and animation instantaneously (if you need ultra-fast then use Eevee).

I did mention it. It is a relatively old paper now. There are new researches on ReSTIR by now. I assume they are built on Area ReSTIR. Each ReSTIR paper seems to be an improvement over the previous one.

Well we would have to compare them first, even the oldest version of Restir with a good denoiser would bring significant uplifts in quality/performance. Advancements is not always linear, the best solution sometimes has to fight to be the top dog.

Well… if one read the part on Wikipedia ResSTIR: challenges and limitations then it seems that one needs some “special” data while rendereing and also maybe some fitting noise reduction is needed.

Seeing the results of the less costly different noise reductions it may simply be to ineffecient to implement alone in the way cycles has to provide the data and so is slower and more memory consuming ?

What i ever wondered: there are some renderes (i believe renderman ??) Which seems to store some extra (?) data an when you stop the rendereing you can continue it later if you want (and do noise reduction on the result you have so far).

:thinking: it might be also “nice” to store render result at 100, 250, 500, 1000… samples and while the computer is still working and you are happy with the result so far you just stop it… so no need to re-render the already done samples again when wanting some higher samples… (making screen shots of the render window does not help when it’s in any format and your monitor is not “bigger”…)

Or… i’m not aware of that possibility ? I’m only aware of the possibility to store the noisy image and the denoised image at the same time via the compositor and maybe denoise it later with some other different compositor setup or even with some other denoising app.