Correcting Blenders Roughness Value

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.

Glossy shader Blender Raw

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:

value-roughnessThis 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):

Shader

This is what we are doing:

Value CorrectionDoes 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:

Comparison Roughness values

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/

http://seblagarde.wordpress.com/2014/04/14/dontnod-physically-based-rendering-chart-for-unreal-engine-4/

Advertisements

Comments are closed.