Hey guys, I've made some more tests across different renderers to compare diffuse roughness at min/max values. Diffuse only, no specularity involved, here is what we get :
We can see that Fstorm and PxrDisney really stand out here, simply by the fact that they are modifying the shadow terminator according to the roughness (diffuse roughness for Fstorm, global roughness for PxrDisney). We can also notice that PxrDisney shader brighten up the diffuse at grazing angles, which Fstorm doesn't. Let's try to go a little bit more in depth.
It looks like there are two models that seem to be involved here :
_the diffuse model
_the geometric shadowing-masking model
For the diffuse model, PxrDisney uses a custom-made empirical brdf based on their observation of MERL100 samples.
This produces a diffuse Fresnel shadow that reduces the incident diffuse reflectance by 0.5 at grazing angles for smooth surfaces and increases the response by up to 2.5 for rough surfaces. This seems to provide a reasonable match to the MERL data and was also found to be artistically pleasing.
This is clearly noticeable on the PxrDisney test. As a contrary, Fstorm doesn't seems to do such computation and I now assume Lambertian model is used there.
The shadow terminator seems to be driven by the geometric shadowing-masking model which represent the shadowing from the microfacets (a.k.a specular G function). The BRDF viewer allows us to preview the different BRDFs independently, to better see the distinct contribution of each function in the shader. I used it to preview some specular G functions and made some screen of the Walter BRDF which is the one that seems to be the closest to what we get in Fstorm.
Min and max :
This function exposes an alphaG parameter which has a range of [0.001;1]. What's more, the PxrDisney has been implemented as follow :
we use the G derived for GGX by Walter but remap the roughness to reduce the extreme gain for shiny surfaces. Specifically, we linearly scale the original roughness from the [0, 1] range to a reduced range, [0.5, 1], for the purposes of computing G.
This correlates very well with what we get in Fstorm -> diffuse roughness range [0.5;0.99].
However, the implementation of this function seems to differ blithely between the Fstorm shader and Disney shader. In the Disney shader, everything is derived from the global roughness setting and is automatically performed backend. In Fstorm, the parameter is exposed and this seems to affect the diffuse component only.
In regards to the "more directional look" Juraj and Dubcat were talking about, I've also made some test on the specular part :
Corona :
Fstorm :
I guess it's because Fstorm uses Beckmann BRDF instead of GGX :
Beckman :
GGX :