Hi again,
I had a bit of a delay in looking at the regularization code due to some work coming in, but now that I have some questions popped up and I was hoping to get some answers by asking them here.
First of all, the condition to regularize the BSDF is "regularize && w.anyNonSpecularBounces". As far as I read the code the "w.anyNonSpecularBounces" will be false only if all the bounces in a path up to this point have been specular.
This differs somewhat from what
Kaplanya&Dachsbacher used in their paper "Path Space Regularization for Holistic and Robust Light Transport". They suggest regularizing only the paths that, in extended Heckbert's notation do not contain the DD substring.
The condition in PBRT seems to regularize different paths. For example I think the path "LSDDDSE" would be regularized since all the bounces are non-specular. On the other hand I think the "LSDSDSE" path (which is used as an example in the paper) would not be regularized since it only contains one specular bounce.
What is the motivation behind doing it in such a way and are there any benefits?
Secondly, I noticed that only ConductorBxDF and DielectricBxDF actually do any regularization (with a notable addition of ThinDielectricBxDF which has it marked as TODO) and for other BxDFs this operation is a no-op. This actually makes sense for most of them since they are diffuse by nature or are completely different beast (
MeasuredBxDF
), but my concern is with
NormalizedFresnelBxDF. Wouldn't this type of distribution also benefit from regularization due to it being reflective in some cases?
Thirdly, by the extension of the previous point, it seems that reflective BxDFs are not covered by regularization even though it would seem they would benefit from it the most and are the most inline with the
Kaplanya&Dachsbacher papers theory due to Direc delta distributions. Is this an omission or was it done purposefully? And if it's the latter what was the motivation?
Best Regards,
Bart Siwek