Cairo Goodbrand talks about the working process behind the Gallery – a collection of nature-inspired materials, describes the rock generator that needed to be created for the project, and explains why ACES was chosen for tone mapping.
Hey there! My name is Cairo, and I’m an Environment Artist originally from South Africa, recently moved to the UK. I graduated as a Civil Engineer at the end of 2019 but pivoted into games shortly after. 3D art was something that I was interested in during university, and I’m really glad that I made the switch. I’ve met so many incredible artists over the past two years and learned so much.
I’ve worked for Next-Gen Dreams, which is a worldwide outsource studio, on a number of awesome projects in 2020 and this year. I was part of the Age of Darkness team as well as some exciting unannounced stuff! At the beginning of 2022, I will be joining Cloud Imperium Games to work on Star Citizen as part of the Environment team.
At Next-Gen, I was lucky enough to be working on a AAA project where we had a dedicated Material Artist. As such, I didn’t get to do much texture or material creation of my own besides the odd trim or edge decal here and there. I thought it might be a good exercise to do a few of the Nodevember prompts and stretch some of those Designer muscles in my spare time.
Plus, it’s always fun to see how much you can do fully procedurally. In production, time management is so often the deciding factor on the method of asset creation that it’s not often that we go full procedural. Unless the Substance Generator is going to be used over and over in various forms throughout the project, we often use other software (like ZBrush) to supplement those procedural bases to get the best result as quickly as possible, without worrying whether it was “100% Designer.”
I find that I often rely on the nodes that I am used to in Substance 3D Designer, so this was also a challenge for me to break out of my comfort zone and find different ways to achieve good-looking results.
As for Substance 3D Designer’s new procedural modeling, I haven’t had the chance to test it out yet! Hopefully, I will get to do so sometime in the future. Add it to the long list of stuff I still need to try. Exposing Substance parameters has always been a powerful and greatly iterative workflow for textures, though, so I can imagine that procedural modeling would be a great tool for creating variation in shape and size of multiple assets – similar to Houdini.
This was my first time giving Nodevember a go, and I was glad to see they reduced the number of prompts to 15 instead of 30. As a working professional, trying to get a finished product done every day after a full eight hours of work can be quite draining. Even so, I decided to just do the prompts that inspired me, instead of trying to finish all of them and sacrifice a bit of quality. I also set myself a time limit for each material of about 5 hours. This meant that I needed to have my idea and rendering and lighting setup nailed down from near the start.
For my color prompts, I was inspired by nature and organic objects. I’m not sure what it says about me that I found those prompts the easiest to come up with ideas for! I drew inspiration from a few starting references but also freestyled if I had a good idea to work off. For the colors, I was specifically inspired by cracked red earth, natural ivy vines, and the ocean.
For other materials, I was inspired by traditional painting and contemporary art.
For each prompt, I was also thinking about how I would incorporate it into a framed "gallery exhibit art piece" which was my presentation idea for Nodevember. I find consistency in presentation to be an important factor that I quite often overlook, so I wanted to improve in that area.
Generally, I follow a pretty standard procedure for creating materials. I start working with a flat, grey-colored base and begin with the Height and Normal. Then I use the created Height, Curvature, AO, and other useful Maps to start building the base for the Albedo. I like to sample albedo values with scanned textures from Megascans instead of trying to guess or pick color values from reference pictures, they have a lot of lighting information. I normally create Roughness and Metalness Maps with a number of masks, noises, and generators derived from the other maps at this stage.
Like anything, materials go through a lot of tweaking and iteration to get them looking right, especially in-engine. This is particularly true for games where we need to minimize the amount of obvious tiling over large surfaces. That being said, sometimes rules are meant to be broken, and with the time constraints I set for myself with Nodevember, I normally worked on different textures out of order to get a result in Marmoset as soon as possible!
This was probably one of the simpler materials to create if a little bit more time-consuming. I wanted to recreate the painting “The Pink Cloud” by Henri-Edmond Cross in a pointillism style. This involved creating a number of masks which I could then feed into the Tile Sampler to fill that space with small “paintbrush dots”, with a generous number of random strokes and warping for that slightly splattered look. I worked from back to front (in terms of the depth of the scene in the painting) to create the masks, as I imagine the painter might’ve done as well.
The Blue material was a really interesting one to work on; there’s a lot of colour information as opposed to height information because the majority of the rock structures are underwater. I first created the rocks Height Map and created the Base Color for those, before pushing most of them underwater. From there, it was a matter of playing around with darker blue gradients which represented the depth of the water. The colours underwater also gradually become blurrier, to fake some of that depth.
I used a couple of simple techniques for the rocks, also taking the time to manually transform and place them as I wasn’t concerned about this material being tileable. Firstly, I created a rock generator which I believe is similar to the one made by Wes McDermott a few years back. I exposed a few parameters which would make creating a variety of rock shapes possible and then blended the different individual rocks together using Max Lighten.
To complete the underwater rock foundation, I used the Tile Generator with a shape extrude to create some interesting, ridged shapes which I overlayed over the initial rocks. It helped to unify to overall formation a bit more.
On the right, you can see my final Base Color Map for the material. You might notice that there is more lighting information than is normally seen or required by a PBR texture. I used the Shadow node quite a bit, which was useful for creating an extra sense of depth on the rocks under the water. I also included some specular highlights from the wavelets and from the trail the speedboat creates. There was very little Normal information besides adding some extra detail on the rocks and on the water.
The Red prompt was an appealing challenge in terms of balancing large, medium, and small shapes. This is exactly the type of material that I would prefer to do in ZBrush normally – to create a less procedural, more individual look – so I tried to break up the pieces as much as possible in Substance 3D Designer. I tried a few different techniques to break up the ‘procedural cells’ look of the fragmented pieces. As I said earlier, I was inspired by cracked red earth for this material, but eventually, this morphed into something similar to Himalayan salt rock.
The process for creating the cracked pieces was repeated for all sizes, from large to small. I used a simple Cells 4, warped it to create some irregularity, and then used a Non-Uniform Edge Detect node made by Maxime Guyard-Morin to create the initial binary mask for the pieces. This would work just as well with an ordinary Edge Detect as I didn’t end up using a large amount of randomness anyway, just to keep the segments tightly packed.
From there, I used a Flood Fill for multiple masks. Flood Fill to Random Gradient was used for the Height Map, tweaking the angle variety to make the pieces appear to tilt inwards, as they would from impact damage. Additionally, I used the same Flood Fill to create a Random Greyscale map (Step 3 below). This was used in conjunction with the Histogram Scan to determine which pieces would crack further into medium and small pieces. It was very easy to change the percentage of secondary and tertiary cracks formed by exposing the Balance value as a parameter. The below image is the setup I copied for the finer details as well, only changing the scale of the cells each time. From looking at references, I found that the likelihood of a certain piece of rock/ground further cracking is decreased as the cracks get smaller. So, it was a bit of a balancing act to achieve the correct ratios between large, medium, and small.
Another node I really like to use for detail (whether that be height, roughness, or color) is a Vector Warp Greyscale. It’s extremely useful for offsetting grunge or noise by different amounts based on the Gradient Map you feed into it. For example, if you have cracks and you don’t want them to cross over different tiles or areas of the texture. Here you can see how I used it to offset grunge based on the cracks of the salt rock.
I used Marmoset Toolbag 4 for rendering, with a pretty simple lighting setup. I’m a big fan of the PBR Render node in Substance 3D Designer, and I usually use it for all of my material renders. However, it is still a bit limited in terms of the meshes you can use with it and other features like Subsurface Scattering, which I used quite a bit for Red and Green. For that reason, and for all the fancy new ray tracing features in MT4, I decided to go with it for this project.
As mentioned previously, I wanted to evoke the feeling of being inside a modern art gallery and viewing a framed piece hung on the wall. These types of places are nearly always brightly lit, with special emphasis on frontal lighting to highlight the art. That being said, I did angle the main light slightly to either the left or the right to create some interesting shadows.
My lighting setup in Toolbag reflected this. It consisted of one Front and one weaker Side Light, as shown above. The secondary light served to catch some interesting edges and add some slight highlights. I set the radius of the lights quite high (around 8-12) to get nice soft shadows.
The only other settings I played around with were the camera settings. I sharpened the image slightly and changed the tone mapping to ACES as opposed to the default Linear setting.
ACES is a filmic curve that’s become more widely used in the games industry. It does make the image somewhat darker, but it increases the exposure range as well, as you can see in the comparison image above. It also reduces the saturation of brighter areas. You can see that with the same settings, ACES looks a lot better than the clipped values of Linear. However, with some playing around with Linear, you can get a similar result – it does come down to personal preference.
For the most part with these gallery shots, I tried to create complementary colors between the material itself, the picture frame, and the wall to create a unified, pleasing image.
I couldn’t say how difficult it is to master Substance 3D Designer. I’m so far away from mastering anything, that it seems a foreign concept. Ask Josh Lynch, Daniel Thiger, Jonathan Benainous, or other artists who are the real masters in their field.
However, I will say that it’s fairly easy to make huge improvements in Substance 3D Designer very quickly. There are so many great courses and tutorials out there (from the artists I mentioned above as well), plus the software is rather intuitive itself, with its nodal approach. You can go from knowing nothing about making procedural materials, to your first good-looking material with a spare hour and a well-made Youtube tutorial. I would say, at the very minimum, it requires a basic understanding of the different texture outputs and their contribution to the final material, PBR or otherwise. I think that what takes longer is learning how to mix and match the endless nodes for yourself. I’d say time, repetition, and practice, like with anything else.
Learning what combination of nodes is going to give you the result that you need is vital – and make a subgraph of it if you need to! Building up a graph library of common functions that you use frequently is extremely useful, especially when you have a deadline coming up and you can’t remember how exactly you did those nice cracks you made 2 years ago, for example. Also, always helpful to have some nice utility nodes that can be shared with your team and speed up production.
At the end of the day, Substance 3D Designer is an extremely powerful tool and a fun one at that. If you’re thinking about diving into procedural materials, I can highly recommend it. I had a blast creating these materials for Nodevember, so I hope this article was helpful in some way to someone! Thanks to 80 Level for having me, and best of luck to everyone fighting the node spaghetti.
Cairo Goodbrand, Environment Artist
Interview conducted by Theodore Nikitin
You may find these articles interesting