owl-project / NVISII

Apache License 2.0
328 stars 28 forks source link

Will restir branch get merged to master #143

Closed diwot closed 2 years ago

diwot commented 2 years ago

Hi I noticed that there is a branch that seems to implement restir (according to the branch name, actually I have not tested it). Since restir can help to speed up convergence of path traced scenes a lot, I was wondering if there are plans to bring that functionality to master. I don't think it is on master since all content in the file https://github.com/owl-project/NVISII/blob/master/src/nvisii/devicecode/reservoir.h is commented out. image Great project by the way :)

natevm commented 2 years ago

Hey diwot, thanks for the interest!

restir is complicated. It’s mainly useful for games, and works by iteratively optimizing for the perfect single representative sample, sharing those results over space and time. In games, that’s what you want, since you then apply a denoiser to filter out any remaining noise.

However, ReSTIR does not converge to the true ground truth. For example, if two lights equally light a surface, a ReSTIR reservoir will get stuck with either one light or the other, and cannot simultaneously account for the contributions of both lights. So, at least as far as I know, you cannot use ReSTIR to render unbiased high quality images.

Perhaps one day we’ll make an approximate real-time rendering mode to nvisii. But for now, I’d instead prefer to improve how we importance sample lights, to somehow account for distance in addition to luminance.

natevm commented 2 years ago

Closing for now, but we can open again down the road if it becomes relevant again.