daros wrote: ↑
Fri Nov 27, 2020 1:33 pm
To me the actual disney halo problem seems to be much simpler as it looks.
The specular disney shader, as i see it implemented in Lux, seems to me a simple reflection layer following a fresnel function on top of diffuse reflection.
There are two parts to this in the Disney shader:
1) There is indeed a fixed Fresnel-reflection layer (using the Schlick approximation). You can see the corresponding line of code here
, together with the line below it. FH is the Fresnel factor ( =1 at the edge), and the line below is a linear interpolation ("Lerp"), which fades to white ("Spectrum(1.0f)") when FH = 1.
The effect can be visualised when you set metallic=1, roughness=0 and the material color to complete black. The result is the bottom image in this post
1.5) As Dade has pointed out before, Disney always has a glossy (=metallic) component and is never 100% diffuse, keep that in mind.
2) The diffuse component has a blended behaviour with roughness: at roughness=0, there is a Fresnel-falloff towards the edges, reaching a factor of 0.5 at the edge. At roughness=1, it "models" grazing retro-reflection, so the intensity is amplified by a factor 2.5.
The reason why you are not seeing the falloff at roughness=0 is because of the blend with the metallic component.
Regarding energy conservation: Indeed, the Disney BRDF is not strictly energy conserving at all values and when the material color is perfect white, specifically caused by this diffuse retroreflection model at high roughness. Quote from Burley (2015):
While the Disney BRDF is not strictly energy conserving, for reasons discussed in Section 5.1, the
parameters are defined in such a way as to produce plausible results that are energy conserving given
plausible albedos which are typically much less than one.
In other words, it was deemed acceptable because realistic color settings are never full white.