<p>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:</p>

<ul>
<li><a href="http://sirkan.iit.bme.hu/~szirmay/scook.pdf">http://sirkan.iit.bme.hu/~szirmay/scook.pdf</a></li>
<li><a href="http://www.cs.cornell.edu/projects/layered-sg14/layered.pdf">http://www.cs.cornell.edu/projects/layered-sg14/layered.pdf</a></li>
</ul>

<p>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. </p>

CC BY-SA 3.0
2016-02-28T22:16:11.020Z
2016-02-28T22:16:11.020Z
Eric Heitz
<p>Single-scattering microfacet-based surface models like the original <a href="http://www.graphics.cornell.edu/~westin/pubs/TorranceSparrowJOSA1967.pdf" rel="noreferrer">Torrance-Sparrow BRDF</a> or derived models like <a href="https://www.cs.cornell.edu/~srm/publications/EGSR07-btdf.html" rel="noreferrer">the BSDF for rough dielectric surfaces</a> by Walter et al. neglect inter-reflection of light between microfacets, which results in energy loss causing darkening especially at higher roughness values.</p>

<p>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):</p>

<p><a href="https://i.sstatic.net/ZmLm3.jpg" rel="noreferrer"><img src="https://i.sstatic.net/ZmLm3.jpg" alt="roughness 0.2"></a>
<a href="https://i.sstatic.net/lIxSc.jpg" rel="noreferrer"><img src="https://i.sstatic.net/lIxSc.jpg" alt="roughness 0.4"></a>
<a href="https://i.sstatic.net/autib.jpg" rel="noreferrer"><img src="https://i.sstatic.net/autib.jpg" alt="roughness 0.6"></a>
<a href="https://i.sstatic.net/Ij2yS.jpg" rel="noreferrer"><img src="https://i.sstatic.net/Ij2yS.jpg" alt="roughness 0.8"></a>
<a href="https://i.sstatic.net/eP5XW.jpg" rel="noreferrer"><img src="https://i.sstatic.net/eP5XW.jpg" alt="roughness 1.0"></a></p>

<p>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:</p>

<p><a href="https://i.sstatic.net/EZWNf.jpg" rel="noreferrer"><img src="https://i.sstatic.net/EZWNf.jpg" alt="roughness 0.2"></a>
<a href="https://i.sstatic.net/wtcLq.jpg" rel="noreferrer"><img src="https://i.sstatic.net/wtcLq.jpg" alt="roughness 0.4"></a>
<a href="https://i.sstatic.net/YisLW.jpg" rel="noreferrer"><img src="https://i.sstatic.net/YisLW.jpg" alt="roughness 0.6"></a>
<a href="https://i.sstatic.net/SdaAG.jpg" rel="noreferrer"><img src="https://i.sstatic.net/SdaAG.jpg" alt="roughness 0.8"></a>
<a href="https://i.sstatic.net/5PdTb.jpg" rel="noreferrer"><img src="https://i.sstatic.net/5PdTb.jpg" alt="roughness 1.0"></a></p>

<p>Eric Heitz et al. have just recently proposed a <a href="https://eheitzresearch.wordpress.com/240-2/" rel="noreferrer">multiple-scattering model</a> 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 <a href="http://www.luxrender.net/forum/viewtopic.php?f=36&amp;t=12534#p118797" rel="noreferrer">LuxRender forum</a>.</p>

<p>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.</p>

<p>In the <a href="http://blog.selfshadow.com/publications/s2012-shading-course/burley/s2012_pbs_disney_brdf_notes_v3.pdf" rel="noreferrer">Disney BSDF</a>, 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 <a href="http://blog.selfshadow.com/publications/s2015-shading-course/burley/s2015_pbs_disney_bsdf_notes.pdf" rel="noreferrer">Siggraph 2015 course</a> it is very ad hoc method: </p>

<blockquote>
  <p>“...this is very approximate, and doesn't work as well for other
  roughness values...”</p>
</blockquote>

<p>The <a href="http://www.luxrender.net/forum/viewtopic.php?f=36&amp;t=12534#p118797" rel="noreferrer">aforementioned comment</a> from Eric Heitz in the LuxRender forum also suggests using some compensation hack, but, unfortunately, doesn't go into any details:</p>

<blockquote>
  <p>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.</p>
</blockquote>

<rendering><brdf><physically-based><microfacet>
Compensation for energy loss in single-scattering microfacet BSDF models
ivokabel
# Compensation for energy loss in single-scattering microfacet BSDF models

(Asked by: username_0 on 2016-02-28)

Single-scattering microfacet-based surface models like the original [Torrance-Sparrow BRDF](http://www.graphics.cornell.edu/~westin/pubs/TorranceSparrowJOSA1967.pdf) or derived models like [the BSDF for rough dielectric surfaces](https://www.cs.cornell.edu/~srm/publications/EGSR07-btdf.html) 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):

[![roughness 0.2](https://i.sstatic.net/ZmLm3.jpg)](https://i.sstatic.net/ZmLm3.jpg)
[![roughness 0.4](https://i.sstatic.net/lIxSc.jpg)](https://i.sstatic.net/lIxSc.jpg)
[![roughness 0.6](https://i.sstatic.net/autib.jpg)](https://i.sstatic.net/autib.jpg)
[![roughness 0.8](https://i.sstatic.net/Ij2yS.jpg)](https://i.sstatic.net/Ij2yS.jpg)
[![roughness 1.0](https://i.sstatic.net/eP5XW.jpg)](https://i.sstatic.net/eP5XW.jpg)

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:

[![roughness 0.2](https://i.sstatic.net/EZWNf.jpg)](https://i.sstatic.net/EZWNf.jpg)
[![roughness 0.4](https://i.sstatic.net/wtcLq.jpg)](https://i.sstatic.net/wtcLq.jpg)
[![roughness 0.6](https://i.sstatic.net/YisLW.jpg)](https://i.sstatic.net/YisLW.jpg)
[![roughness 0.8](https://i.sstatic.net/SdaAG.jpg)](https://i.sstatic.net/SdaAG.jpg)
[![roughness 1.0](https://i.sstatic.net/5PdTb.jpg)](https://i.sstatic.net/5PdTb.jpg)

username_1 username_1 et al. have just recently proposed a [multiple-scattering model](https://eheitzresearch.wordpress.com/240-2/) 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 username_1 himself in the [LuxRender forum](http://www.luxrender.net/forum/viewtopic.php?f=36&t=12534#p118797).

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](http://blog.selfshadow.com/publications/s2012-shading-course/burley/s2012_pbs_disney_brdf_notes_v3.pdf), 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](http://blog.selfshadow.com/publications/s2015-shading-course/burley/s2015_pbs_disney_bsdf_notes.pdf) it is very ad hoc method:

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

The [aforementioned comment](http://www.luxrender.net/forum/viewtopic.php?f=36&t=12534#p118797) from username_1 username_1 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.

**Tags:** rendering, brdf, physically-based, microfacet


---

## 1 answers

### Answer by username_1 on 2016-02-28. Score: 8 | Accepted answer

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.


---

