Blender Cycles: Simple PBR shader


You should use the Principled BSDF shader instead of the method described here. See for more information.


There are a lot of ubershaders out there for Cycles. Node groups that promise to cover every possible use you might have, mimicking the ubershader in Blender Internal, and some similar shaders in other renderers, like Arnold’s aiStandard.

This isn’t one of those node groups. The problem with those things is that they end up being a 700 pixels tall node with 27 buttons and sliders on it that doesn’t make any sense at all. I’ve never bothered with those things, because I don’t want to sort through all that crap. Ubershaders like this work for BI or Maya/Arnold because they have UI things like checkboxes and tabs and rollouts. Node groups don’t have those. Even then, they aren’t perfect. Occasionally you find yourself trying to outsmart the ubershader because you need some specific effect it isn’t set up for. For those tricky shaders, Cycles’ bare-metal node design works great, you can have things just the way you want.

All this is a rambling way of establishing that all that crap is useless 90% of the time. Handling tricky shaders is great, and Cycles has a way to do that. But most shaders AREN’T tricky. Look around you. I’m betting most of the items in your room right now could be described with a simple metal/coated-glossy shader, and most of the ones that aren’t are made of glass. A lot of the time in Cycles, you’ll find yourself dragging the same set of nodes together, especially for environment trinkets. This grind is why I made Simple PBR. A minimalistic physically-based shader for all those times you DON’T need over 9000 sliders. Say hello:



Simple PBR makes things like wood, plastic, ceramic, and metal easy. All the bits you need are pre-wired and packaged, you just need to supply values and textures. Simple PBR has just 6 inputs:

-Albedo aka Diffuse Color
-Specular Color, controls brightness of non-metal reflections
-Fresnel IOR, controls fresnel effect on non-metal reflections
-Roughness: the input for gloss/roughness/microfacet/whatever-we’re-calling-it-this-month
-Metalness: blends between metallic and non-metallic reflections
-Normal: bump/normal maps plug in here.

You can download it here:

Currently, metal reflection color is controlled by the albedo input. I’m a bit indecisive on whether they should be controlled from this input or specular color, or its own color. That might change in a future version. Also note that as a result currently spec color is not actually a color, it’s a 0-1 spec intensity value pretending to be a color. Any color isn’t actually used. (this might change in future versions of Simple PBR, if they exist).

After some thought, I decided to attach the spec map by using it to scale the fresnel mix factor used to mix diffuse/glossy reflections. In my opinion, this produces the best combination of physical accuracy and ease of artist control.

The roughness value is shared by diffuse, glossy, and metal components. It’s just Cycles’ usual 0-1 roughness value. Remember that in your gloss maps white is rough, black is shiny. Don’t forget to invert your map if needed, like when your gloss map is slightly modified version of your spec map.

The metalness input is there because metals are weird. They DO have colored reflections, and they don’t have fresnel. This input controls the blending of a second glossy shader that handles this department.

Some other example renders:

Brown albedo


Metalness increased to 50%:


Metalness at 100%


With textures


5 thoughts on “Blender Cycles: Simple PBR shader

  1. That is a coincidence. I just tested a few things for a simple PBR shader…
    I didn’t manage the mix of fresnel and specmap the same way you did because it gives some really low values… and no reflections. Try it with a sample scene from quixel for example.
    If you mix the sepc with some white color using the fresnel as the factor, it will scale the fresnel, making the front reflection the value of the specmap and the side at 100% reflective. Same as in UE4 engine for example (and so IOR = 1.05 or blending factor for fresnel layer = 0.04)

    • My goal splitting it like this is assuming the spec map represents a loss of shine overall. So reflection at the edge is 100%*spec map. That said, I don’t know if that is truly right. I decided to do it that way because I find it easy to work with when using hand-made spec maps. I’ve seen it said more than once that basically everything is completely reflective at the edge, meaning what you said (100% reflection at 90º, spec map reflection at 0º) is more correct. Do you have an example node setup?

      I should also note I don’t have access to Quixel to test (y u no Mac version, Quixel??!). From the example textures from it I’ve seen, this shader is also wrong in getting metal color from albedo, IIRC Quixel stores that in the spec map.

      I should note this shader isn’t designed to line up with any particular PBR/game package like Quixel, Marmoset, UE4, etc. At least not atm, I’m not opposed to reworking it to do so. I made it initially for myself working in Cycles directly using hand-painted textures. So right now it’s designed for that.

  2. Hi,
    After setting up a material, what do we do?
    Bake textures using some settings?

    What settings to I do to create alberdo, AO, reflectivity, normal, gloss map.


Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s