Another substance PBR shader

I’ve tried a few and none of them quite seemed to work ok in all situations.

I’ve waded my way through the https://www.allegorithmic.com/system/files/software/download/build/PBR_Guide_Vol.2.pdf and come up with the following that seems to be working quite well, would be good to get some feedback and tweak it some more.

It should be obvious from the node names what to plug where and examples packed in file, when I had finished going through the detail actually the node group was really simple, I’ve included 2 Fresnel controls one for the non metal (dielectric in the guide) and one for the Metal. The guide says the BSDF shader should be set at around 4% for the dielectic fresnal, I couldn’t find an exact conversion, 1.040 seems to work well with 1 being no Fresnel. For flat objects like the base you may have to tweak it or turn it off if it’s to shiny depending on the angle you are looking at. For the metal on I’ve set it at 1.5 by default which is mid range again can be tweaked.

This if for metal roughness workflow. The way I read the guide the height map is more for displacement, if I included the height and normal map it over cooked it. Just using the normal map at 1 looks ok to me.

For the dialectic material I just set up a simple diffuse / glossy mixer, the metal is just a glossy shader, all the other information comes from the maps.

Other notes from the guide I took into consideration below pictures, excuse spelling etc. were just rough notes but might be helpful. Used same environment map in substance and blender to get good compare.

File (sorry its a bit large, the node group is tiny, I just packed all the textures and the environment map so it rendered as picture)

Substance view port


Cycles Render


Rough working notes

Reflectance value for metal placed in the base color map
Reflectance value for dielectrics is placed in the base color map
The reflective angle at grazing in handled by the shader (fresnel)

0 black == non metal 1 white == metal, can be grey scale in between for oxidization, dirt etc.

the metallic map is a mask to specify metal or dielectric material
black in the metallic map the base color there is dielectric with should be interpreted by the shader as as 4% reflectance value (0.04) which covers most common dielectric materials.
the 4% can be overridden by the specular level output if used (wont use this will allow IOR adjustment in shader) (fresnal 1.5)

Base color map is RGB and contains 2 type of data, reflected color for dielectrics and reflectance values for metals.
the color that represents dielectrics represents reflected wavelengths
reflectance values are present if an area is denoted as metal in the metalic map.
the values in the map that indicate reflectance values for metal are going to be around 70-100% specular which is mapped to rgb range 180-255
Separate fresnal for metals ?

general guide gray scale range for raw metals is 235-255 rgb in the metal map the need to have 70-100% reflecting in the base color map.
so feed the shader with refletance value from the metal map and the colour from the base colour map if over 235 ? (tried that didnt give a good result) (base colour map should be between 180 - 255 rgb for metals)

if the metalic map is lower than 235 then need to lower the raw metal reflectivity (check if handled in the base colour map) (didn’t need to just mixing it with diffuse and using the metallic map as a mask worked ok)

roughness
0 smooth (black) 1 rough (white)

AO optional but only blend with diffuse (didn’t do AO maps)

Height map used for displacement (left Height map out did try adding it to normal map, was to much)

Normal map to simulate small details, can be beneficial to have surface details from the normal map also affect roughness as well, didn’t look at this, perhaps blend height map with roughness as both grey scale but looked ok to me as it was.