-
Notifications
You must be signed in to change notification settings - Fork 1.2k
Description
Hi Matt,
First off, huge thank you for providing pbrt textbook, source code, and the scene library. They have been invaluable resources and points of comparison for my own renderer.
While working on my own renderer and debugging a small visual diff I had against pbrt, I discovered that the diff was caused by differences in how light samples with a zero bxdf probability are treated. On my renderer, I discard them on the principal that a zero probability sample should not contribute to the scene while pbrt-v3 seems to include them. I assume this behavior is intentional; however, I couldn't find any details about it in the book.
Normally, the visual impact of the difference in behavior is very small unless you have a scene that is intentionally set up to make them obvious.
I've done that with these renders from the ecosys scene (drop-in pbrt file). The one that looks visually correct is the one from an unmodified copy of pbrt while the one with the artifacting is from a copy of pdf where I modified EstimateDirect to cut off light samples where scatteringPdf is zero. It feels intuitively wrong to say that the render that looks visually incorrect is actually the "correct" render, so I think I'll just instead say that my expectation was that these two renders should be identical and they are not.
I believe this behavior would also exist in pbrt-v4 based on my read of PathIntegrator::SampleLd but I have not verified it explicitly.
Also, just for completeness, the zero pdf paths themselves are caused by the interpolated vertex normals. The issue goes away if the surface normals are used instead.

