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"
In anticipation of the 2.79 release, which will include the "Disney" Principled BSDF shader, I did some testing comparing my PBR Uber-Shader versus the new Principled Solution. I did a lengthy write-up for /r/Blender about my findings, but the short answer is that the Principled BSDF is actually a really great universal shading solution now built into Blender. It will accept PBR Metal/Roughness maps, so it means that my solution is now somewhat obsolescent for standard dielectric and metallic shading. However, I also found that the solution's glass shading was very lacking, just like Blender's old Glass BSDF, and that my solution provided arguably more detailed roughness information, direct IOR control instead of ambiguous "specular" control, as well as a few other minor features... as such, I'm now offering a variant of my product for a serious discount which only includes the PBR Glass Shader (which is much better than the Principled or Glass BSDF solutions inside Blender), as well as my utility graphs for things like Inverting your normal maps to convert between DirectX and OpenGL, creating glass dispersion, creating glass absorption, getting more accurate Fresnel, etc... This variant is also included in the full price purchase for old and new customers alike.
I want to thank everyone who has purchased by PBR Uber-Shader for supporting me, and I will continue to work on new add-ons and solutions for Blender, and continue to create content on my Channel to educate new digital artists. I'm glad that Blender is finally going to have a good PBR solution out-of-the-box, and I hope they continue to develop it into something even more robust. For now, I'll continue to offer the utility variant of my product, and probably add more little utilities to that over the coming months. Thank you all, and have a great day.
- 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)
- Removed SSS Version. I found myself most of the time just adding a Translucent shader on top of my shader using the Add-Shader mix, SSS is an overly heavy effect used for very specific instances. If you're trying to create Skin you'll want a multi-layer SSS shader anyway, which simulates the layers of skin, fat, and muscle under the surface of your skin.
- Improved Glass Fresnel effect
- Added Glass Absorption effect, this allows you to create a colour for the internal glass separate from the base colour you'd find on thin edges- a tint for thick glass. Controls are exposed for scale and absorption colour.
- Added an optimisation to render times for Bump mapping; when using height maps you should see a fairly significant increase in Render times, up to 30% faster.
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!
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.
That said, OpenGL is recommended. It is subjectively easier to read by eye, and I believe OpenGL is Blender's native normal map format.
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.
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.
Purchase this item to leave a review!