Building Rocky Ground with Substance

Tom Jacobs shows how he builds and shapes amazing 3d materials with Substance Designer.

Tom Jacobs shows how he builds and shapes amazing 3d materials with Substance Designer.


Hi there! My name is Tom Jacobs and I am living in the Netherlands. I am self-employed, operating under the name and have worked on various projects for broadcast, film, interactive media and games. I did a multimedia design study at the GLR in Rotterdam and afterwards an animation study at the HKU Hilversum. I was hooked to 3d since we got to work with 3ds Max 2.5. So, since then, 3d is my core technique to produce and animate projects. I have worked at a big VR studio in Amsterdam on various VR projects as well as on game projects and interactive media and animations for studios and clients in the Netherlands. Software-wise, I mainly use Maya, the Adobe Suite, Fusion, Substance Designer, Unreal Engine, World Machine and Unity.

I got into Substance Designer after a research where somehow all these incredible materials came from. I was searching for reference and textures for our Mars related project. That toolset proved to be Substance Designer. Since then, I was inspired with the endless possibilities and really wanted to nail the creation of believable landscapes and scenery that will make you want to visit. The way SD works and can create complex textures is incredible and lot of fun. Something that would completely difficult with traditional 2d software. Now I am exploring ways and workflows to use SD as a landscape and terrain editor next to World Machine. Beside the natural filters, they both are node based software that share the most common nodes. Since then, I am constantly looking and developing workflows to make sure every single pixel contributes to a realistic look and feel. The realtime feedback gives me complete artistic freedom.

Figure 1: Mars in UE4 with SD textures

1 of 3

Producing rocks   Currently, I am focused on rocks, stones, rubbles, soil, different desert type of landscapes, cliffs etc. For the different textures, visible on my Artstation channel, I use and combine several techniques such as using the tilesampler to scatter rocks or using the a tilesampler to generate cells and go from there with the new flood fill tools from SD. The latter, is currently a workflow I am more exploring, because it allows me to generate quickly unique shapes and shapes that come in difference sizes depending on a black white mask. It allows me to instantly have a dense field filled with rocks. To get to the rocks for both techniques I am blending gradients and perlin noises. I would say this is the basic of everything. The gradients define the overall look of the rocks and define if they are flat, sharp and so. The perlin noise will cutout holes and create some more interesting shapes and breakup the uniformness. These are blended using the darken mode. The darkenmode will let me keep sharp edges. Some rocks that can be used for the tilesampler are currently free for download on my gumroad channel. Also important is to make sure all the time, that even with warping, deforming etc the rocks must remain rocks and not become kind of jelly weird things and blobs. Secondly, I really prefer to be able to point a certain area of a texture and can tell exactly what it should be. In other words, I want to see clear shapes and forms. (also rocks covered in sand still should be visible as rocks in sand) The third important thing for me is the actual placement of these rocks and layout in general. I try to look carefully at reference and incorporate gravity and nature circumstances to come up with an organic looking behavior and placement of the objects. Meaning: stones that will fall from a slope and bigger ones do behave different then smaller ones, stones are clustered, big stones are broken etc. Basically, trying to see an overall picture and figure out what nature did to the terrain. I am currently working on a terrain that shows of some flows and terracing effect that you can tell just by looking at the stones:

Figure 2: Work in progress, Greenland in summer inspired terrain with the cell based workflow.

Figure 3: Rock intended to be used with the tilesampler, the base of this one is a 3d cube and a polygon shape.

Figure 4: Rock shelter.

Figure 5: setup of the first rock. This one and others are freely available on my gumroad page.

Figure 6: Using the tilesampler to scatter rocks. Each layer is based upon the parent.


Everything in this project is SD. This rock field is based upon a self-made cell node. The trick here is that the position of the cells is driven by a map.

This will result in various sizes. The idea is, that the more points you got in a certain area, the more smaller stones you get. One single point with a lot of space with result in a large rock. This workflow is kind of hard to control but it really let me shrink the size of rocks in a very organic way and keep unique shapes. I use the same technique to add some more layers of rocks on top of it. And then several custom-made nodes to randomly offset cells a tiny bit. The floodfill tools let you generate a random mask and a bounding box based mask. Those two maps are important to add variation and do things based upon size and random colors. The sand is based upon a non-uniform blur which is great to add some mud and sand and using a slope blur to simulate falling grain. Then I used a tile sampler with ready-made rocks as a pattern input to break it all up. So, I try to not rely too much on one workflow but see if I can combine ideas to add finishing touches.

Figure 7 Examples of cells driven by maps. Intended to move forward with floodfill nodes.

Figure 8: Simple render result

Example of a basic setup: 1. Cell based node, 2. Add floodfills. 3. A few floodfill gradients with variation and levelled. 4. Blending using darken. 5. Multiply with a bbox floodfill node.

Breakdown the stacked rocks example from my Artstation

Structure of the rock

Basically, the surface of a rock is defined by working with a cell 1 node, some grunge maps, BNW spots and slope blur them a tiny bit. Using a tiny blurred version of the rocks as a slope blur map will let you create structures that follow the shape of the rocks. I also use the add/sub blending mode for this, after I highpass the result, because it allows me to keep control of the overall shape of the rocks. I am carefully using the slope blur, it tends to destroy the hardness of the rock very easily. Sometimes I take a curvature mask to regain the sharp edges when I feel they got lost with all the FX nodes. I use the previously generated random and bbox mask from the flood fill tools to add variation. Making some effects stronger or just completely different. All these are packed into reusable instances. I also do a lot of experimenting, try out some different noises, slope blur them, warp them, direction warp them and just see what happens. Most of the times, SD for me is like jamming on my synthesizer and just listen when I come up with some cool tune that has some potential.

Scalability and a feel of ‘organic changing’ like in real nature is important to me. I try to mix noise maps always based upon overall shape of the terrain and / or the size of the rocks. (the flood fills tools are handy for this) As previously mentioned, I keep track of mainly three maps: the height itself, a random mask and a bounding box based mask.

So, to sum up: the first pass is a texture that renders the rocks and will look very stylized. The second part if where I add all FX and the last part is where I add colors, roughness and so on.

What way can you make the material feel organic and blend so well? What is the nature of the way SD helps us blend these materials so well and organically?

Having an organic feel to a nature type of texture is very important to me. Scalability is key here I think. Create a lot of variation of sizes and position. Create clusters and let the clusters spread out. Add different type of noises to everything. For example, combine more noises with the slope blur already can give a more non uniform look. And then break the rules. For example: have sharp rocks and then introduce some flat stones. Or have a lot of greyish rocks and suddenly add some pure white pieces. Break the uniformness. And if it was me, I would love to have every single parameter in SD map driven. ?

Generally, I love a node based solution. SD has one, WM has one, UE4 has one. Speaking of SD, I also think being able to directly see the texture in 3d world makes another difference, too. Otherwise it just would be sailing without a compass. SD comes with a lot of premade nodes to streamline the workflow to create PBR materials much more easily. For example, generate a normalmap, have some PBR ready nodes, ability to create instances and going advanced with the pixel processor and FX nodes. For the blending inside one material with different type of nature elements such as sand, dust, rocks, I use the heightblending node and the lighten / darken mode a lot.


That indeed can be a tricky job. First, reference is key here. I think it is important to see the overall picture and analyze what exactly is erosion, wind, water, rain, gravity, dust, snow and sand doing. Technically, as previously mentioned, I keep track of the random masks to add variation. If I am using the floodfills, it is easy to obtain a random mask, because SD comes with a default floodfill random mask. If I am on a tilesampler workflow with scattered rocks, I duplicate the tilesampler and set the color randomness to 100%. Then the input patters must be masks of the rocks. Then, for the diffuse / roughness, I mainly use three key components: curvature node to highlight edges, an AO / normal node to add dust or dirt, distortion warp with grunge maps with extreme values. I try to keep colors bounded to the shape and then break the rules. Next thing is just experimenting what works. Trying out different colors and play with the blending mode will results in some surprising effects. Also, not being afraid of colors is helping me a lot. I try to dare to use abstract colors sometimes such as pink or green and then blend those and just see what comes out of it. The ground textures are always some mixes between noises and I add the rocks on top of it. Most of the times the overall look and feel will benefit from it. Even a very plane gravel field can benefit from having a cell noisy based floor. A good tip is to look at flat surfaces in real life while the sun is at a very low altitude. The shadows become long and will reveal much more how flat an area (not) really is. You can start seeing patterns. Ground textures are also a combination of noises. I also use a lot of the non uniform blur node which is very great to create mud, sand and so. Or use the previously generated stone field and let it shrink in to the ground and start adding new layers on top of it.

Figure 9: summary of the basecolor of the Mountain Rubble Material

Some textures are better suitable for games than others, while these others are more intended to work as a terrain / landscape. Basically, I am experimenting with using SD as a landscape editor next to SD as my default texture creator. I am also analyzing in SD in what step I could use the same setup in game engines and produce more procedurally landscapes, rather than really adding finished cliff textures for example. For our Mars project, I used mainly three different textures to create organic looking cliffs that follow the flow of hills. One crack texture, one horizontal lines and the strata textures. By combing these and use several projection methods I feel I can get much more realistic organic looking shape. Obviously, this workflow is not really game performance friendly but then again, my focus currently is also more on the highend quality that I can squeeze out from a game engine. I recommend checking out some examples on my lab page where I explain a bit more in depth what I am doing.

How do you think is the most interesting way to present these projects? Do you work with Toolbag? Do you test them in the game engine? How does it function?

Figure 10: Render in UE4.

I currently use Toolbag to render and present the materials. Also, showing the breakdowns of diffuse, roughness and so on is important. I hit every single hires feature to boost quality, so it might not be as accurate if you compare to current games. It is properly just a matter of time until we can get high quality with all features such as global illumination and true AO with great performance. But I love the real-time game technology and want to see that I can use it to create realistic setups for more CGI related content. Interactive and non-interactive. I test a lot of textures in-game as well, to see how they look combined with other textures, mainly in Unreal. There are already a few artists that try to boost and squeeze every single quality out of game engines. They inspired me to jump into the gap between game and film world. I think there is so much potential here and I adore the flexibility that comes with game engines.

Love to end this interview with giving some links to my work to check out some examples.

It was an honor to have this interview and I had a lot of fun talking and sharing knowledge! Hopefully, it will inspire others and improve or build on top of these ideas.

Tom Jacobs, Freelance 3d artist.

Interview conducted by Kirill Tokarev.

Join discussion

Comments 1

  • arran

    I've been trying too figure out what you've done. I've made a custom cells graph, that takes noise, through a tile sampler, distance, edge detect and flood fill. but I cant figure out how you use the position data from the flood fill too position, too drive the placement and scale of rocks. am I on the right track ?  do you even use the flood fill too position node ? Thanks for the inspiring work !



    ·5 years ago·

You might also like

We need your consent

We use cookies on this website to make your browsing experience better. By using the site you agree to our use of cookies.Learn more