Microfacet-based Normal Mapping


In the MDL SDK “v-cavities masking and and importance sampling utility” https://github.com/NVIDIA/MDL-SDK/blob/3e6182bc3141ea79c10ddf092a081232ced8e5f3/src/mdl/jit/libbsdf/libbsdf.cpp#L594 is implemented.

I saw “Microfacet-based Normal Mapping for Robust Monte Carlo Path Tracing” (also from Eric Heitz)
https://blogs.unity3d.com/2017/10/02/microfacet-based-normal-mapping-for-robust-monte-carlo-path-tracing/?_ga=2.229676249.491408733.1564437340-820844567.1564437340 including source code for mitsuba.

Is that already implemented in the MDL SDK ? If not, are there any plans to add it ?
It would be great!
Any answer/advice appreciated, how I could add it on my own (if its not present).

thank you very much!


that is indeed a great paper. It is, however, not implemented in the MDL SDK and we currently also don’t have concrete plans to add it. The reason simply is that this would add quite some code, require some architectural changes, opens up some questions (e.g. how to handle normals in layering), and will come at the cost of some computational overhead. It is also not clear if every renderer will strongly benefit (some renderers already implement other tricks to handle strongly bent normals and don’t care for physical plausibility that much).

You can of of course implement (at least parts of) it on you own: each elemental BSDF ends up with a normal and if the normal deviates from the geometric normal, you need the replace (or just “wrap up”) the elemental BSDF’s eval and sample functions (I would recommend implementing eq. 23).

Thank you for your answer and the information.
I will try equation 23. Do you think any BSDF can be the nested one? Or only diffuse reflection BSDF?

Any BSDF can be used, as long as it only reflects (and does not transmit) light.

While the paper only handles BRDFs explicitly, extending the technique to general BSDFs (including BTDF) should be possible (I think) but most likely requires some non-trivial extension.

1 Like

Great! Thanx for your answer.