DONTNOD specular and glossiness chart
April 30, 2012 22 Comments
With permission of my company : Dontnod entertainment http://www.dont-nod.com/
Edit: There is a more recent version of this chart for UE4 here.
I get the permission from my company to release the graphic chart I made for our artists to help them with our new physically based rendering (PBR) workflow.
In the past I provided a blurred and reduced version of it in my blog post: feeding a physical based shading model.
Any feedback are welcome and if this chart is useful for you, tell us.
I generate the chart by programming with Paint.net at high-resolution (2048×2048). I strongly advice again resizing or compressing (jpeg, png) the image because the value may be incorrect after the filtering.
Caution : The full resolution version of the chart is a tga file in a .zip that I rename to “.pdf” as WordPress don’t support zip file. So just right-click on the image below, save the pdf file then change the extension to “.zip”, decompress and you get the tga file.
(Real world pictures courtesy of Andrea Weidlich from “Exploring the potential of layerer BRDF models” siggraph asia 2009)
The chart has been design for my team and with our convention for textures. The chart is use as predefined value that the artist color pick and use when creating textures.
The chart is divide in two parts.
The upper is for specular color of material, the second is used for glossiness (roughness on the image).
Specular color
We use a RGB DXT1 texture to store colored specular with sRGB encoding. All displayed value are sRGB in this part. To be clear: artist color pick values, create their texture, save texture as usual and at runtime the shader convert the sRGB value to linear RGB value.
To force artists to use right range of values for specular color, we define two gradient of color displayed on the left. One for dielectric material (no metallic) and one for metallic material.
The range of value for no metallic material goes from 40 to 75, which mean 0.017-0.067 in linear space which overlap the range 0.02-0.05 of common dielectric material.
The range of value for no metallic material goes from 155 to 255, which mean 0.33-1.0 in linear space which overlap the range 0.5-1 of common metallic material.
For both range we show with red line the value for common material. A “U” shape red line mean that the range of values inside the “U” can represent the material. The right values depends on its properties.
On the right we provided some common sample with exact values, or a range of values (indicate by the “<->”).
Note that even if your eyes don’t make the difference, there is different values in a range.
Glossiness
We use the alpha channel of the normal map DXT5 to store the grey level value of glossiness (roughness on the image). All values displayed are in linear RGB. To be clear: artist color pick values, create texture, save texture as usual and at runtime the shader use the value directly.
The gradient display glossiness from 0 for rough (left) material to 1 for smooth material (right).
The grey gradient are from 0 to 255 and red segments are displayed every 1/10 with a sphere below to show the in-game result of the designated value.
The first row of real world image above represent no metallic object, the second row represent metallic object. Goal is to give artist a better feeling of what is glossiness.
The top blank highligh on the top of the sphere is generated by an analytic point light in order to show the matching between analytic highligh and blurred cubemap.
Note : The glossiness chart is strongly coupled with the glossiness range chose in your game engine. These values are for our game engine glossiness range of 2-2048.
File has pdf extension, but it’s a tga inside a zip file! Other than that, nice!
Yes, this is what i write above the image, but maybe it is not clear, I will rewrite the sentence 🙂
Hallo sebastien good work,
it seems compatible with our shader too, which is not really a surprise since it is PBR
Great post! Any sample of what a glossmap should look like compare to a spec. As you said there’s no tutorial on the web … I’ve search a lot for it but no luck.
cheers
Thanks. I should have add sample of gloss/spec map, but as this is the work of the artists and not mine it is a different thing, need to check with my team. However, here is a sample provide by Alexis Dumas (Artist at Dontnod) showing a texture use for a wall with a metallic part for a gutter. In order: diffuse, normal, gloss (note the highly detailed map) and specular (note the low resolution and the flat color. Dielectric value is low, metallic part are colored and high), the background neutral grey is not a part of the texture : https://seblagarde.files.wordpress.com/2012/04/sampleglossspec1.png
little necroposting here, but hope it would be read,
image in last message: https://seblagarde.files.wordpress.com/2012/04/sampleglossspec1.png is broken, is there any chance to get complete image?
Broken ? you mean you can’t see the image ?
I suppose you said broken because the left part of the image seems weird, with a grey and white regiion. But in fact this is the specular color texture (in grey top left) which is smaller than the other texture. Is it ok ?
Cheers
Pingback: Confluence: WoT Development
Pingback: Confluence: Art
Pingback: Confluence: Art
Pingback: Readings on Physically Based Rendering | Interplay of Light
Pingback: Färgpalett och ljusproblem | aijomebe
Pingback: Physically Based Shading, Metallic and Specular workflows | Alexandre Pestana
Hi,
You speak about Glossiness but in your image it’s write Roughness. Is it normal ? Does we have to invert your values ?
Thx/merci
Hey, the naming convention on this chart was not rigorous. It should have been call smoothness as 1 is smooth (for roughness, 1 is rough), but at the time I wasn’t able to change it as my artists adopted the term roughness.
In the description I talk about glossiness to avoid to name either roughness or smoothness because of this naming mistake.
So in this chart, the parameter is Smoothness! 🙂
Better to check the new chart with roughness parameter for UE4: https://seblagarde.wordpress.com/2014/04/14/dontnod-physically-based-rendering-chart-for-unreal-engine-4/
Hi
I have one question about your image. Please give me some pointers when you have some free cycles.
AFAIK, there are four new parameters in PBR rendering, at least for UE4. They are BaseColor, Metallic, Specular (Not useful at all for pure metallic objects) and Roughness.
The glossiness value should correspond to roughness in UE4, maybe needs to be inverted. What is the SpecularColor? Is it BaseColor in UE4? or something else.
Thanks
Hi,
I already post a UE4 chart a while ago here:
https://seblagarde.wordpress.com/2014/04/14/dontnod-physically-based-rendering-chart-for-unreal-engine-4/
🙂
Also note it is not “new parameters” in PBR rendering it is just a different parametrization. Disney style: Metal/BaseColor/reflectance and two-color: Diffuse/specular are two valids parametrization with various pros and cons.
Actually I came from this new blog, 🙂
After reviewing it again, I think I got an important line:
Previous specular value for metalic can be reuse for Unreal engine 4 reflectance parameter.
Basically specular in this image should correspond to “Specular” in UE4 Material editor, the only difference is that thier specular is from 0 to 1 and the engine will convert it to (0-0.08). Your specular is already in the right range, no need to transform.
Hope I’m right, 🙂
Vocabulary, I will use :
two color parametrization is diffuse/specular
disney parametrization is baseColor/metal/reflectance
both parametrizations are valid and actually the two-color span a larger gamut than the Disney so allow more material expressivity but is a bit more complex to understand by the artists.
>Previous specular value for metalic can be reuse for UE4 reflectance parameter.
No,
specular value for metalic material is baseColor in UE4
> specular in this image should correspond to “Specular”
Almost,
Specular for dieletric material is reflectance * 0.08 in UE4
i.e reflectance = specular / 0.08
Can’t load that PDF ;(
Should have read it first. Problem is solved. Thanks for sharing!
Pingback: Confluence: CHD