John Enderle shared the workflow behind the Procedural Sci-Fi Material Generator project, explained why Substance 3D Designer was chosen for material creation, and showed how the customizable material was set up.
Hello! My name is John Enderle, I’m a 3D Environment Artist in the United States. My introduction to 3D art was essentially just my overwhelming curiosity and urge to know how games are made! Being an artist and a gamer, I had always been curious about how these amazing worlds that I immerse myself in are created. Back in 2017, after some searching, I realized how feasible it was to gain the creative knowledge I wanted, and my 3D journey began! Starting off, I dabbled in most areas of 3D, from prop and character art to animation and environment art. Eventually, I found my passion for environment art and lately material creation almost exclusively.
As for how I got the skills I have, with all the learning resources out there today, such as YouTube, 80 Level, ArtStation, Gumroad, as well as the dedicated software sites with helpful forums and discord servers, there’s always been little in the way of learning whatever it is I’ve set my mind to.
Becoming a Material Artist
Before I started putting most of my creative focus into material creation, I was always blown away and inspired by the materials I would see shared on social media. Artists such as Daniel Thiger, Chris Hodgson, and Abderrezak Bouhedda putting out seemingly unimaginable materials was a huge inspiration and a big factor in my deciding to push myself into this field of 3D art more and discovering my passion for it.
As for what tools I use, at the moment it's only Substance 3D Designer for material creation. In my opinion and to my knowledge, there’s nothing that quite compares. Getting accustomed to it can be challenging, but like any program, practice, tutorials, and repetition are paramount. For rendering, I tend to use either Marmoset Toolbag or Unreal Engine. Marmoset's speed and ease of use are great for material rendering, in my experience. The rendering options, lighting, post-processing, and quality of output are fantastic. Unreal Engine, on the other hand, is amazing for larger scenes and displaying materials in full environments in real-time.
The Sci-Fi Material Generator Project
The Sci-Fi Material Generator was somewhat of an extension to the previous sci-fi material I had done. The idea was to essentially recreate that style of sci-fi paneling but with more functionality. The Procedural Sci-Fi Material Generator, as the name implies, has that functionality with over 80 exposed parameters to customize and generate endless results. I took a lot of inspiration from the previous material as well as Marcel Deneuve and Paul Chadeisson, who do fantastic sci-fi-themed work, and a cyberpunk-themed game called The Ascent by Neon Digital. Something that has always appealed to me is that greebly, noisy, micro detail style in regards to sci-fi art, which was one of many things I wanted to feature in the material while also having the ability to scale things back and have a more clean and tidy sci-fi aesthetic using the parameters of the material.
Substance 3D Designer
The first step with this material was deciding on the basic structure. I knew I wanted to have a chain effect or hierarchy of sorts where if I changed something at the beginning of the material, it would determine how the following parts reacted with the next and so on. Once I determined what the first link of the chain would be, the following links were much easier to place. For this material, the chain links are the “Panels”. Primary Panels, Secondary Panels, Panels 1, 2, 3. Each is determined by the previous in a very linear path, which helps loads with the organization as well.
Following that, I start adding to my reference board in PureRef, create a new graph using a custom template that I picked up from Daniel Thiger, and add an ORMH output as well.
Once most of the planning was figured out, it was onto the Height map. This is what I always tend to start with as it gives a clear path through your graph to branch off of and do the Base Color, Roughness, etc. To me, it’s the core of most materials I do and typically what I spend the most time on.
One of the first challenges I faced was visually understanding where the various panels were on the material. To help with this, at the beginning of the height process, I added a Material ID option so I could clearly see where each panel was by color and text. Originally just to help create the material, it ended up staying as it makes the initial setup of the panels much clearer.
Normally after the Height map, I would just move onto the base color, but I’ve found with metallic materials the colors can change quite a bit depending on Roughness and Metallic maps. So, to get a better idea of how the color will translate once finished, I make everything full metallic and add a temporary dirt generator node using info I get from the finished Height map for the Roughness one as well as a color and blend node for a base.
Once that was set up and I had the color and blend node down as a base, I just moved along the height section of the graph, masking each layer of color as I went and adding to the base, which, as I mentioned before, was pretty straightforward with the Height map already laid out. I tried to keep the color palette pretty simple, using basic shades of metals, such as grays and browns for the panels with spots of copper for details, but later adding the option to change the luminosity and contrast of the panels because of how drastic metallics can change depending on environments. I also added an option to remove all color from the metal and use strictly shades of gray, and of course, the paint can be any color you want!
After getting a rough idea down as far as color goes for each panel, I moved on to the finer details such as paint, dirt, leaks, rust, edge wear, etc. For this material, I ended up using a few of the default generators that come with Substance 3D Designer. Using a Linear Gradient 1 for the position and the obvious inputs for the rest, they were perfect in this case.
The biggest challenge involving each of those generators was masking and having them work regardless of how the custom parameters were set up and having to call back to earlier parts of the graph. It can get confusing, but between framing, cable rerouting, and keeping your graph organized and linear as you go, it can make a world of difference in how readable your graph is.
The Roughness and Metallic maps were fairly straightforward to set up. Metallic being strictly white or black, it was as simple as subtracting the paint, emissive lights, and anything else that wasn’t metal. As for the Roughness, again it fell on masking specific areas and blending in as I made my way through the graph.
Similar to the Roughness and Metallic maps, the Normal, Ambient Occlusion, and Emissive maps were pretty simple. All of the Normal and AO detail is from the final Height map. There are some instances where you don’t want Height data to show up in the Normal or vice versa, but in this case, the Height map had all the detail I needed. As for the Emissive, all the lights were already worked into the Base Color, so adding them in was as simple as branching off the Base Color and blending and masking them all together.
Setting Up the Generator
Setting up the generator was definitely a learning experience as this was the first time I tried my hand at a fully customizable material. My working process was basically just building the material as normal but exposing parameters as I went. A better method may have been to complete the material with no functionality and then go back over it, exposing certain parameters and adding features where you want.
A challenge that I didn’t anticipate was exposing too many parameters. I’d say having realistic expectations of what one material can do is definitely something to keep in mind. I didn’t think too much functionality could be a problem, but it is! Over-exposing can lead to clutter and confusion and be basically endless if you don’t know when to call it done. As mentioned before, I decided to call it with around 80 parameters exposed, depending on what features are enabled. In addition to adding too many parameters, knowing when to stop adding details is just as important. Setting limits early on in the material generator creation process is a must.
Getting feedback through the creation process is super helpful in that regard, not just aesthetically but functionality as well. Since I planned on other people using this generator, I made sure to share the .sbsar file periodically and get feedback on ease of use and in general how easy it was to understand. The Substance 3D Designer feature that helped massively with that was the “visible if” option, which will hide certain parameters, depending on if other parameters are in use.
Once all 20 of the presets were made in the generator, I exported them out of Substance Player to be used in the various renders. To try and save on memory, I only used the Base Color, Normal, Emissive, and a packed ORMH (Occlusion, Roughness, Metallic, Height). I settled on breaking it up into 4 scenes: spheres, cubes, panels, and animation.
Spheres and Cubes
For the spheres and cubes renders, as well as most of the others, I wanted to have a warm/cold aesthetic which was done with one or two directional lights and an HDRI. Given the reflective properties of metallic materials, the HDRI was essential as I found most of the materials show up nearly black without one.
The panel renders were definitely the most fun and satisfying to set up. I quickly made a random panel mesh in Blender and tested out multiple presets that I had exported previously, eventually settling on 6 to use between the two different lighting setups. Rather than directional or point lights that I normally use, I opted for omni lights using the square shape option and playing with the size, and they really helped accentuate the finer details and add some interesting highlights. I wanted to have quite a bit of contrast in terms of lighting, so I had some fun with both variations.
The animation render started in Blender, having 3 rows of offset cubes, each cut roughly in half to save on poly count once in Marmoset Toolbag and tessellated. I used 19 of the presets from the generator, 6 on the top and middle rows and 7 on the bottom to have a speed variation as they would each be going in a different direction. With the cubes textured and keyframed in Toolbag, I started playing with lighting, and once again omni lights were used.
Post-processing and Choosing Marmoset Toolbag
I tried to keep post-processing minimal to not take too much away from what the materials naturally look like. Across all renders, I pretty much only adjusted sharpness, vignetting, and very little bloom. Marmosets lighting, post-processing, render speed, tessellation abilities, animation tools, and general ease of use are the main reasons I chose it. It allows me to work efficiently and see results quickly, which I love.
Mastering Substance 3D Designer
Mastering, or rather being the best you can be at Substance 3D Designer comes down to a few major factors for me: learning, organization, memorizing nodes and how they react with each other, and experimenting.
For learning, there are so many great resources out there now to get you started if you have never used Substance 3D Designer before as well as if you’re experienced and you just want to improve your knowledge. The Adobe Substance 3D YouTube channel, ArtStation, and 80 Level are some fantastic places to begin your journey into Substance 3D Designer without spending any money.
As for paid, I can’t speak highly enough about Daniel Thiger's fundamental series and his courses in general. LevelUp Digital also has some great beginner and intermediate courses to buy. Not so much tutorials, but if you have access to the Adobe Substance 3D Assets Library, downloading .SBS files and poking around in them is another way to learn new methods and pick up some tricks from some of the most talented material artists out there.
Organization is crucial. Graphs can get messy fast and the harder they are to read, the less efficient you’ll be. Keeping it organized as you go is a good habit to get into early. As I mentioned previously, I like to work in a linear fashion, which, from my experience, doesn’t really put a cap on the graph. Massive or tiny, it tends to stay readable and clean.
Lastly, attempting to create your first nice-looking material can be overwhelming, and I definitely struggled starting out, but with patience, you’ll get familiar with more nodes and as you memorize them, it’ll become second nature. As for experimenting, I’d encourage that from the start. So many of the patterns and reactions I’ve used in materials have been by just messing around, plus it’s fun!
To see additional renders, be sure to check out my ArtStation, and if you’d like to purchase the Procedural Sci-if Material Generator, the Substance 3D Designer .SBS file, .SBSAR, and Marmoset Toolbag scenes are available in my ArtStation store.
I’d also like to thank 80 Level for the opportunity to share my work and answer some questions. It was a pleasure, much appreciated!