Marble, one of the most commonly used materials in architectural renders. Marble can add instant flare and class to your scene, giving more depth to the picture. But finding marble textures that work and are PBR can be hard, so in this article we are going to be showing you how to make a good procedural marble shader in Blender.
Note that I will be using Blender 2.79 as well as Cycles rendering engine. Download Blender 2.79 here.
Before making a procedural shader, make sure that you have a good scene setup. I like to use a grassy field HDRI, because it captures lots of different colours while giving good light. You can see our tips on finding good HDRIs here.
Next you will need a surface to make the material on. I like to use spheres, because they reflect the light well and generally look cool. So add in a sphere and open a subsurf modifier with one subdivision (Shortcut CTRL + 1). Then go into the material tab and add a new material, so we can get started.
Coloring The Marble
Marble has an awesome coloring that contributes to why it has populated the houses of the rich throughout the centuries. To start coloring our marble, add in a principled shader and replace the normal diffuse with it. Then to get those inky black waves, we can use the procedural wave texture included in cycles. Plug that into the diffuse and then you can start to edit some of the parameters. I have found that ‘Rings’ mode works best, coupled with a distortion of around 74 and a detail scale of 12. Adjust the scale however you would like, I have mine at 7. (Fg. 1)
No real-world marble is perfectly smooth so ours can’t be either. Add in a noise texture and a bump map and attach them to the ‘Normal’ input of the Principled shader. I found that a scale of 100, a detail of 3 and a distortion of 0.450 looks the best. That will make it so the bump is a little too strong, so dial the strength back to around 0.050 and up the distance to 1. (Fg. 2)
Next we can make the height more detailed by using another noise texture, this one with a scale of 80, a detail of 3 and a distortion value of 0.450. Plug that into the ‘Displacement’ input of the Material Output. This is good, but it is just a repeat of the effect we have with the bump map, to fix that you can add a RGB Curves node and attach it between the noise texture and the material output. Drag up the center point on this, as well as left, then add another point and drag it a little upwards. (Fg. 3)
Now you should have a bumpy, marbled surface on your material, but it is still missing one key aspect. Gloss. This is pretty easy, but can make or break your material. For the specular input, I just set the value to 0.465, but for the roughness I did something a little different.
To get a slightly varied glossiness across the material, I used another noise texture. The patches should match the ones shown on the bump map, so you can just duplicate the first noise texture (the one plugged into the bump). Then plug that into the roughness. This will produce a little more dramatic effect than we want, so add in another RGB Curve and add it in between the two nodes. You can adjust this to look like the last RGB Curve, but make the two points a little closer together. This will do a little too much, so set the factor value at the bottom to 0.400. (Fg. 4)
Lastly we need to be able to control how glossy it is and its best to have something a little simpler than the RGB curves. Add in a Hue/Saturation node and attach it after the RGB Curves. Set the Value slider to 0.200 and the Saturation to 0.600. This should produce a pretty good result. (Fg. 5)
All this should make for a pretty good procedural marble shader in Blender! Since it’s procedural you will be able to size it infinitaly without texture degrading and you will not need to UV unwrap your objects.