Practical and theoretical implementation discussion.
4 posts • Page 1 of 1
Recently I'm implementing path tracing with next event estimation and encounters a nasty bug: refracted radiance is higher than my path traced reference. Then I discovered that the paper by Walter et al. (Microfacet Models for Refraction through Rough Surfaces) writes the microfacet BTDF formula with an eta_o^2 term in the numerator, while in PBRT-v3 P.548 equation 8.20 an eta_i^2 term is used instead. But, the paper and PBRT-v3 both have the same dw_h/dw_o term. This is so weird... or am I missing some important concepts here?
Thanks for your suggestion! But I'm not sure if it is okay to multi-post on several places since I already have posted a GitHub issue on PBRT-v3's repository. Actually I'm more confused than before after digging into this problem further. It looks like non of PBRT-v3, LuxRender, Mitsuba, Tungsten are consistent on the microfacet BTDF formula (they all seem to be slightly different from one another!), especially on the eta & wi/wo thing...
I guess this is related to the asymmetry of the BTDF (c.f. chapter 5 in Eric Veach's thesis). When evaluating the BTDF as radiance, there is a factor of (eta_o / eta_i)^2 between the transmitted and incident radiance. According to Walter's paper, they treat the BTDF as radiance (see the end of Section 2). And while I don't have the pbrt-v3 book, I assume they track radiance / eta^2 as suggested below Equation 18 in Walter's paper, which makes things more symmetric. So I would say both of them are correct.