Easy PBR right inside Cycles!
With the rise of PBR in the AAA game industry and Allegorithmic's wildly popular Substance toolset, it's about time someone created a simple solution for implementing PBR textures inside of Blender. Finally, no more fiddling for hours with material nodes trying to vaguely make something that looks good. Now there's one solution that gets it right every time and in every lighting condition! Liberate yourself as an artist to focus on your art!
This shader is the culmination of months of working with Blender, playing with materials in Cycles, trying out
other rendering solutions like Renderman, and taking the best elements of what I’ve learned and combining it into a single Uber-Shader. The benefit of an Uber-Shader of course being that it simplifies your Blender workflow, giving you a single set of controls to get the objects in your scene to look exactly as you want them, which you can re-use in all your projects instead of having to constantly recreate the same node-trees over and over. Since the release of this product, I've used this setup in every single one of my projects.
My solution takes things one step further, providing controls which are intuitive and should be very familiar to anyone with experience in the industry standard PBR Metal/Roughness workflow, such as can be found in Unreal Engine or Unity 5. My solution is specifically aimed towards letting Blender users take advantage of these intuitive controls which the game industry has been enjoying, and allows you to work with texture maps generated from dedicated material design software, such as Substance, 3D Coat, or Quixel. Any software that can output base colour, roughness, metallness, and normal/height maps will work with this solution. This setup combines dielectric, metallic, and refractive shading into a single shader- something no other solution I've come across has done.
Plug and Done!
Based on a PBR Metal/Rough workflow, all you have to do is import your textures, plug them in, and you're ready to go! This node group supports maps for:
- Base Colour (Albedo, Diffuse...)
- Ambient Occlusion
- Height (Bump)
From Product Owners:
- "... the process is much simpler than I had imagined. This is a great plug-in for easily bringing PBR materials into Blender!"
- "After evaluating a number of free Cycles PBR shaders, this turned out to be the most complete all-in-one PBR solution to boost your Cycles materials with physically based properties, complemented by good looking caustics and dispersion."
- "Best PBR nodes I found, recommended!"
- "I really like how he listens to the community and puts in features accordingly."
- "I’ve been trying to reconcile Substance Painter and Cycles for my studio to create some pre-rendered 2d assets for a good amount of time. Your node is going to be invaluable to me. I just wish I had found it sooner, and I would have payed thrice the price."
- "Thanks a lot for updating this PBR Material ! very appreciated ! It can sometimes been challenging with blender to get a PBR texture set working nicely… keep it up"
Now with Subsurface Scattering!
In anticipation of the upcoming 2.77 release which will include GPU accelerated Subsurface Scattering in Blender Cycles, this PBR node has been updated to include SSS!
This update includes a separate SubstancePBRSSS Shader, which takes a thickness map either baked out of your PBR software such as Substance Painter, or hand painted, and includes controls for SSS Amount, SSS Scale, SSS Fresnel, SSS Hue, and SSS Saturation.
- Improved Fresnel Accuracy
- Replaced 'Dielectric Reflectivity' with 'IOR' control
- Added use of Height Maps (Bump Maps)*
- Slight tweaks to Improve Default Accuracy of Roughness Maps
- Added 'Roughness Strength' slider below the Roughness map input; affects sharpness of the map exponentially
*Addition of height maps (bump mapping) for better texture depth results. Previously was not included because of a bug in previous versions of Blender which affected light wrapping, particularly with mirrored objects (For Example). Be aware that 8 bit BW height maps can produce banding, RGB normal maps preferred.
- General Tweaks
- Improved Default Parameter Values; better previews when first adding material, doesn't start with .5 metalness, etc...
- Introduced "Opacity" maps with a custom emulated glass shader
- Separate controls for Opacity (ability to create translucent materials), opacity map strength, and Refraction IOR
- Added faked caustics* to opacity shader (emulated glass)- better looking results with reduced fireflies, caustics also take tint from base colour
- Added "Caustic Strength" control slider to increase or decrease the strength of the faked caustic effect
- Added ray-depth culling for opacity shader - better looking results, reduces dark refractive artifacts without having to increase transmission bounces
- Added "Anisotropy" and "Anisotropy Rotation" inputs for metallic shading; allows you to make anisotropic metals, such as brushed steel like pots, pans, etc.. defaults to 0 for regular metallic shading
- Added metallic rim shading, secondary effect which lightens the colour of the metallic shader edge specular. "Metallic Rim" slider controls the size of this effect
- Normal maps now fully integrated; issues previously noticed resolved
- Normal maps corrected from Substance Painter (DirectX) for Blender Tangent Space
- Removed "displacement" output as it is no longer applicable; once the feature stops being 'experimental' usage will once again be investigated
- Fixed issues with Glass Refraction IOR not working as expected
- Quick fix for a known bug with normal maps making refraction/glass shading in Cycles opaque (issue fix credit to Jim Morren)
In anticipation of the upcoming 2.78 release, including fixes to normal map handling and micro-displacement...
- Added AO Strength Slider
- Added Slider to Toggle Normal Map Inverting On/Off (DirectX or OpenGL)
- Removed Glass Shader Normal Quick-Fix; bug was resolved in 2.78 (see above), making the solution no longer necessary.
- Added new version of Shader: "Substance_PBR_MicroDisp". Use this is cases where you want to use the Micro-Displacement feature. Normal Maps/ Height mapping removed for this, replaced with a Displacement input and strength control for true surface displacement.
- Updated gloss algorithm to Multi-Scatter GGX (new to 2.78); reduced shader darkening when increasing roughness
- Added faked refractive dispersion to the emulated glass shader*; effect controlled with new "Dispersion Strength" slider**
- Tweaked caustic ramp to help with the look of dispersion
- Removed separate refraction IOR for clarity
- Fixed faked caustics not respecting normal mapped surface tangents
* Recommended at least 50 samples for correct results, lower samples can create colour distortion.
** (strength values should be 0-5 max)
Included Starship model to preview the node group in action. Node group named "Substance PBR"
This node group supports maps for:
- Base Colour (Albedo, Diffuse...)
- Ambient Occlusion
--- Appending into a Scene ---
1 Open the .blend file of your scene
2 press Shift F1 or File -> Append
3 find this .blend and select it
4 go into Node Tree
5 select Substance_PBR
6 press "Link/Append from Library"
HDRI Environment Maps by Greg Zaal
*If you plan to distribute products using my PBR material node, please remove the node before re-distribution and link back to my product page here. Profits from these sales help pay for the software and hardware I need to continue making products for the market. You can always contact me with questions/inquiries. Thank you so much, and have a great day!
If the texturing suite you plan to use outputs the 3 basic industry standard Metal/Roughness maps (Base Colour, Metalness, Roughness), then it should work absolutely fine. All the major texture suites should work as intended: Substance, Quixel, and 3D Coat.
Both! In the shader controls, below your Normal Maps input you'll notice a slider labelled "Invert ON/OFF". This is a toggle to switch between OpenGL and DirectX tangent space. If your surface seems to have parts going in that should be out, or out that should be in, try changing this slider from 0 to 1, or vice versa.
Check to make sure that the texture you've input has been set to 'non-colour data' mode. All your texture inputs, besides Base Colour, and Emission, should be set to 'non-colour data'.
The reason is a little bit technical, but it has something to do with the way Blender interprets colour. Just keep this in mind if you want to know if your texture is colour data, or non-colour data: "Does my texture directly 'colour' the surface? (e.g. base colour)". If it does change the colour of the surface, it's colour data. If it doesn't, it's non-colour data that simply affects surface properties.
Purchase this item to leave a review!