Correcting Blenders Roughness Value
19 December, 2014
For a long time I have witnessed some inconsistencies with Blenders Glossy shader, namely its roughness value. It always seemed weird to me, that there is such a high increase in roughness from value 0.0 to 0.1, as is seen here.
So most of the time I only used values in that range. But with the recent push in PBR shading I wanted to use the according textures within Blender to get easy realistic results. But the Glossy shader prevented an easy use. The look was always off. Here is a comparison to glossy values in a PBR shader:
In a PBR Shader the Glossy values are distributed linear, which is in line with its linear workflow. So it is obvious, that Blenders Roughness-Value distribution is not linear. It looks more like this:
This is also how images are gamma corrected to be displayed on monitors. This read is very helpful to understand what is going on and why: http://filmicgames.com/archives/299 .
So, one would think, that Blender wants to have a linear range of grey values to determine the roughness, but it actually wants values, when corrected according to the above curve will result in a linear Value-Roughness correlation. So what can we do to get a more intuitive control over the roughness value? And how can we use glossy textures resulting from a PBR workflow, e.g. from DDO (www.quixel.se)?
Since a Glossy Texture is just an inverted Roughness texture, both with linear greyscale values, we can easily use a glossy texture for the roughness input. But to account for Blenders glossy roughness calculation, we have to recalculate each value in the texture. This is easily done with a math node. Here is the simple PBR shader I created for myself, with corrected roughness (top left):
This is what we are doing:
Does this work and give us better results? Here is a comparison I did with different roughness values. At first I used a color ramp to correct the values. Note, that even the color ramp node in Blender, even though it says it is linear, in fact is not. The results with a corrected color ramp is the same with the power node:
As we can see, we get a better and linear distribution in roughness values.
In Review: Blender doesn’t use linear values for its roughness setting in the glossy shader. We have to correct for that in recalculating the input values. The result is a linear distribution in roughness values.
Resources:
http://www.marmoset.co/toolbag/learn/pbr-theory
http://www.marmoset.co/toolbag/learn/pbr-practice
http://filmicgames.com/archives/299
http://seblagarde.wordpress.com/2011/08/17/feeding-a-physical-based-lighting-mode/