Rating -
Votes: 11

Sign in to vote

  • Engine
  • Cycles
  • Category
  • Metals
  • Added
  • 27 jul 2016
  • Downloads
  • 33103

Physically Based Rendering: Metallics

Pretty much what it implies: objects made of metal.


I know this isn't a specific material, but it is a great help for users that want to create a good looking scene.


I recently watched Andrew Price's tutorial on Physically Based Shading over on his YouTube channel (wich I highly recommend, it's very informative!) and decided to put the resulting shader up here in Blendermada, since this is a do-it-once-never-worry-about-it-again type of shader. Andrew Price said in his video that he is applying the CC0 license to this shader, but I'm still giving him credit for spending all that time and effort of making a great tutorial. I've uploaded this shader so that you don't have to go through the trouble of setting it up yourself. (lol copypasta).


Generally speaking using a single Glossy shader is completely fine for a metal, but that's not quite how real world metal behaves. Just like the dielectric, a metal has a fresnel, too. It just doesn't control the mix between a glossy and a diffuse, it merely controls how much light is completely reflected before the metal can tint the light in its characteristic color. Here's what I mean with an example: I have a knife that's made from a metal that's more or less gray in color. When I hold that knife at a very flat angle the metal becomes almost as reflective as a mirror.

This shader has no diffuse! Anything like rust, dirt, grime, etc. must be overlayed as a dielectric!


These are the inputs of the shader:

Base Color - The color of the metal

Rim Color - The color shift toward grazing angles (I'll get to that later)

Rim Effect - The control value for the Rim Color


Less/More - The control value for the roughness



The shader also includes Anisotropy, Lat./Lon. Shift, Rotation, Adjust (deg) and Tangent, which I'll get into later as well.


That the two color inputs are a color input is clear, but why the roughness input? That is because a real world object generally doesn't have a uniform roughness, so an image texture should be used there. The control value for the roughness is only useful for adjusting image textures since it mixes the roughness from completely black (-1) to the original image (0) to completely white (1). Generally speaking you should make sure to set all the non-color image textures to 'non-color data'. This is because blender Gamma-corrects textures and RGB's for use as colors, which may distort the amount of roughness and the normal texture.

The normal input is quite obvious; set the normal texture to 'non-color data'.

The IOR is for controlling the fresnel and rim effect of the metal shader and generally speaking, is just a useless slider, since no one could tell the difference.

The rim effect is an interesting property of metals. Generally speaking the rim effect isn't observable in the real world since it is just a brightened version of the base color(so you can set the slider to 0), but it can be used for an artistic effect. (Or for a metal where it's super obvious like the artificial element unobtainium)

And now for the anisotropy values. If you've ever played around with the anisotropy value of the anisotropy shader, then you might already know how it works. Essentially, this value mixes between parallel and perpendicular to the tangent. Use this value to mix between anisotropic and normal glossy areas of your object, NOT a mix shader between a glossy and an anisotropic (because it is physically correct and the mix shader is not). I would explain but that would make this description too long, so, in a nutshell, it represents how deep the grooves of the "brushed" surface are. I've also just stated why the Anisotropy value is a color input because you can have different patches of different amounts of anisotropy with an image texture.

The 'Lat./Lon. Shift' is used as follows:
At a value of -1, the image texture input will be shifted from 0 - 1 to -1 - 0, so a value of 0 will produce complete anisotropy perpendicular to the tangent and a value of 1 will make a non-anisotropic surface.
At a value of 0, it shifts from 0 - 1 to -1 - 1. This means that a value of 0.5 will produce no anisotropy, values smaller than 0.5 produce the perpendicular anisotropy and values larger than 0.5 the parallel anisotropy.
At a value of 1, it doesn't change the image values, so a value of 0 is no anisotropy and a value of 1 is complete anisotropy parallel to the tangent.
If you couldn't follow this, just play around with the settings yourself.

The Rotation input will, just like it sais, change the direction of the Anisotropy, basically in which direction the surface was "brushed". You can use this to make curved anisotropy, or wave-like, or make the surface look like it was scrubbed with steel wool (circular). Note that the color value rotates the anisotropy up to 90 degrees each way. To exceed 90 degrees, start at the opposite end again.
Use the 'Adjust (deg)' to modify the image color by up to 90 degrees each direction. Good for tweaking the rotation of the image.
You could put a noise texture into the rotation to create the effect that the "brushing" is done more or less precise. The math would be as follows: (Image - 0.5) / 180 * amount of variation in degrees + 0.5 and put that into the 'Rotation' input.

The tangent input is for telling the anisotropy which way to show up relative to the object. You could go for a radial X, Y or Z, or for a UV tangent (The "brushedness" goes from left to right on the UV).


I hope you have fun using this Physically Based Rendering Material for your 3d creations! I've even included a list of the colors of the most common metals.