Compensation for energy loss in single-scattering microfacet BSDF models Single-scattering microfacet-based surface models like the original Torrance-Sparrow BRDF or derived models like the BSDF for rough dielectric surfaces by Walter et al. neglect inter-reflection of light between microfacets, which results in energy loss causing darkening especially at higher roughness values.

The problem can be easily demonstrated using the furnace test. The following images show the behaviour of my implementation of a conductive microfacet BRDF using the Smith model and GGX distribution for roughness parameters from 0.2 to 1.0 (the Fresnel coefficient is deliberately set to 1 here to make the problem easier to see):







Furnace test of rough dielectric (IoR 1.51) BSDF using the Smith model and GGX microfacet distribution for roughness parameters from 0.2 to 1.0:







Eric Heitz et al. have just recently proposed a multiple-scattering model which solves the darkening problem by solving the light interaction completely, but there are performance issues due to stochastic nature of its evaluation routine as metioned by Heitz himself in the LuxRender forum.

Is there a known compensation method for recovering the lost energy of single-scattering models? Not necessarily physically correct, but at least not breaking physical plausibility (Helmholtz reciprocity and energy conservation) too much and, ideally, without the necessity of hand tuning parameters.

In the Disney BSDF, there is a parametrized component called “sheen” (basically a Fresnel-based glossy lobe) which can be used for compensation of darkening at edges, but as they mention in their Siggraph 2015 course it is very ad hoc method: 


  “...this is very approximate, and doesn't work as well for other
  roughness values...”


The aforementioned comment from Eric Heitz in the LuxRender forum also suggests using some compensation hack, but, unfortunately, doesn't go into any details:


  To my knowledge, you can use some simpler hacks to improve energy conservation in the single scattering models (like tweaking albedo). However, if you do that, you cannot get a perfectly energy conserving material (for instance perfect white rough glass) without breaking the reciprocity of the BSDF.
To my knowledge, there is no easy and analytic way of recovering the energy lost in single-scattering models. The previous techniques precompute the energy loss and reinject it in the BRDF as a diffuse-like component:


http://sirkan.iit.bme.hu/~szirmay/scook.pdf
http://www.cs.cornell.edu/projects/layered-sg14/layered.pdf


What they propose is energy conservative and reciprocal, and it is probably the simplest way of fixing the visual darkening due to the energy loss. The main drawback is that since the energy loss does not have an analytic expression, it has to be precomputed and stored in a look-up table.