James Braley shares the workflow behind the Nodevember 2021's Black project, talks about participation in challenges, and explains why Marmoset Toolbag 4 was chosen as the rendering tool.
Hello, my name is James Braley and I’m an Environment Artist from the United States. I’ve been in the games industry for just about 4 years now. I started my journey in the games industry at Spiderling Studios while attending the New England Institute of Technology. I graduated from NEIT with my Bachelor’s in Video Game Design and was hired at Vicarious Visions as a Quality Assurance Specialist on Destiny 2 shortly after. After finishing work on Destiny 2 I was moved to the Diablo 2: Resurrected Team as the World Art Feature Owner for QA.
In October of 2020, I started at Manticore Games as an Environment Artist working on Core, which is a free-to-use development and publishing platform with an endless library of user-created games to play and worlds to explore. It's been especially popular with artists interested in trying their hands at game creation. In my free time the last few months, I’ve also been helping on the Final Fantasy IX: Memoria Project which is a non-playable, proof of concept project showcasing what Final Fantasy IX could look like if remade with modern technology being created by a team of professional developers and artists.
Becoming a Material Artist
I’m always looking for new software and techniques that can be used to optimize my workflow and help to accomplish whatever task I’m currently pursuing. When I heard about Substance 3D Designer, I was drawn in by the idea of procedural texture creation. Creators like 3DEX and Kalyson, who put out countless free tutorials for creating stylized assets and materials, really helped to showcase the potential of Substance 3D Designer in a stylized workflow and inspired me to start learning how to use it.
My journey learning Substance 3D Designer started in 2019 and while I didn’t really know what I was doing at the time, I managed to piece together a few basic materials for a personal environment I was working on. Later that year I participated in Nodevember for the first time. The unique daily prompts inspired me to create materials I would have never come up with on my own and learning techniques I had never used before.
In April 2020 Sasha Bernert, the mod team for our Discord Community (The Club), and I created our own month-long material creation challenge called Mayterials. Since then, I’ve been participating in every Nodevember and Mayterials and creating personal materials whenever I’ve found the time as well as creating materials for the catalog in Core while at Manticore Games.
When participating in challenges like Nodevember, I try to create materials that I haven’t attempted before. I keep a list of materials that I’d like to create when I have the time and that list is constantly growing. Inspiration for these materials usually comes from images that I find on Pinterest, Twitter, or from materials other creators have shared on ArtStation.
The timeframe of the challenge also influences what I decide to make for each prompt. While deciding on which material to approach, I need to ensure that it is realistic to complete it within the given timeframe each day, which is usually only a few hours.
With these requirements in mind and the list of prompts, I decided on pencils, clay tiles, jade, a tarp, obsidian, and the moon before the challenge even began. For the days where I didn’t have a material in mind, I used my usual reference gathering sources to search for inspiration.
The Black Project
Obsidian has been on my list of materials I’ve wanted to attempt since I first saw the “Weird Obsidian” material created by Juan Carlos Nuno and it seemed like it would be easy enough to accomplish within the constraints of the challenge.
Before jumping into Substance 3D Designer, I always prepare by gathering references first. For each material I attempt, I gather a few photo references, usually from different angles, in different lighting conditions, and different levels of zoom or visible detail to provide as much context as possible. I also gather references from other artists as well since it’s sometimes helpful for me to see how they have approached the material. For the Obsidian material, I ended up with 10 photo references and 4 material references from Juan Carlos Nuno, Daniel Thiger, Ali Ghadimi, and Enrico Tammekand.
I import these images into PureRef and organize them by material type, artist, reference type, or however else I need to for the project I’m currently working on. For those who haven’t used it, PureRef is a simple and lightweight program that displays and manages your reference images. It’s designed to be as clean and minimalistic as possible, and it is the best tool that I’ve found to use for organizing your references for a project.
To help streamline the material creation process, I have a template file set aside already organized to my liking with the outputs already connected. I also have multiple sets of nodes that I use frequently when creating stylized materials in this template graph. These include setups for cuts, cracks, surface variation, damage, and wood grain. I also have a few custom-made nodes that I use for rock surfaces, stylized edge highlights, and moss generation. By default, I have the albedo set to a neutral-gray gradient, a mid-value gray plugged into the roughness.
When creating a material, I start by creating the Height Map then move on to the Normal, Metallic (if applicable), Roughness, and finally Albedo, in that order. Once the first pass on each map is complete, I typically go back and do final tweaks to height, albedo and roughness at the same time. I like to view my material on a high-res plane using displacement with the tessellation cranked to the maximum value. While some people may not like to work with displacement enabled, I prefer it as it helps me to visualize exactly how the light is going to interact with the material.
While working on the Height Map, I always start with my largest shapes and work my way down to the smallest details. For the obsidian, my large forms were created using Tile Sampler with a paraboloid shape and a Perlin Noise as a Scale Map input. This Scale Map input really helped to break up the repetition of the Tile Sampler and get the large forms closer to where I wanted them. I then used Swirl nodes to add a bit more interest and then warped the large forms with a Crystal 2 node to add some sharper break-up. Once I was satisfied with the pattern, I inverted it, adjusted the values with a Curve node and Gradient Map, and then softened it a bit with a Uniform Blur Grayscale.
With the large forms complete, I began to think about medium-scale details. Referring back to my references, I noticed that most of the obsidian chips and damage within each of the larger forms. This was the perfect opportunity to use one of my premade setups for surface variation. I grabbed this setup (which is just a tile sampler with a paraboloid shape that has its values adjusted via a level and then slope blurred with some fractal sum base noise) and plugged it into a Directional Warp input with the previously created large forms used as the intensity input. This Directional Warp adjusted the shape of the surface variation to better follow the shapes of the large forms I had just created. I then multiplied this medium-scale surface damage into the larger forms at a low value.
After completing the medium details, I referred to the references and noticed that almost all of them had striations and a few of them had some cracking occurring so I decided to add both to my material. For the cracks, I once again grabbed an existing node setup that I had included as part of my template (created using a tile sampler with paraboloid shapes, edge detect, warping, slope blur, and bevel) and tweaked it until I hit a result that I liked for the obsidian. I blended this in with a low value as well as I wanted it to be a subtle detail. Next, I moved on to the striations, which I didn’t have an existing setup for. For this, I used a Directional Noise Slope Blurred which was then plugged into a Directional Warp with a high value once again using the previously created large forms as an intensity input. I multiplied the resulting noise into the large forms with a low value. When creating stylized materials, I avoid micro details as much as possible as it can make the materials feel too noisy for my taste; and these striations felt too noisy as they were. After a bit of tweaking, I settled on using Directional Scratches with Anisotropic Noise blended into it using the add blending mode. This helped to reduce the striations in areas and reduce that noisy feel that I was trying to avoid. I then added a Non-Uniform Blur Grayscale after the Directional Warp to soften the striations a bit to wrap up the smaller-scale details.
With the Height Map complete, I started working on the Normal Map next. While sometimes I do plug the final Height Map directly into the Normal Node and then into the Normal Output, I wanted to have a bit more control of the normal for this material. I opted for separate Normal Nodes for the large forms and the small forms with different values which I then blended and normalized. This allowed me to use the Normal Map to emphasize the larger forms without having the smaller noise be overly noticeable or busy.
The Roughness Map is an area that I like to give some extra attention to because it can really help to make the material feel more believable. When making the roughness, I like to think about the material that I’m making and what would make sense. Damage, dirt, wear and tear, and other factors all affect how the Roughness Map should look. Xolotl Studios on Youtube has a great video with tips on how to take your roughness maps to the next level.
For the roughness, I typically start with the Height Map as a base. I adjust the values using a Level Node to get a solid foundation to work from and then blend in some Warped Noise for some variation. For the final step on this initial roughness pass, I inverted the AO and added it to the roughness to ensure any area where light wouldn’t hit won’t be reflective.
Once the first pass on the roughness is complete, it’s finally time to move on to the albedo. My usual workflow for the Albedo Map is as follows: color foundation using the Height Map plugged into a Gradient Map (for this material I color sampled from my reference images for the base Gradient Map), color variation, AO adjusted with Gradient Map, and multiplied to emphasize smaller details, edge highlights created using curvature (multiply AO over edge highlights to prevent them from appearing in areas where light wouldn’t hit), dirt/dust layer (dirt/dust node plugged into a gradient map and blended with a lower value over the albedo). This is the basic workflow that I use but each material has additional nodes added and tweaks made on a case-by-case basis. For the obsidian, I paid a bit of extra attention to the cracks, opting to add an extra layer of dust within the cracks to emphasize them.
For the final touch, I like to go back and do a round of final tweaks to the height and albedo to ensure they’re looking good. The adjustment I make to the Roughness Map is to add the dust mask I had generated for the base color as well as subtract the edge highlights to ensure they’re a little more reflective than the rest of the material.
For rendering, I’ve been using Marmoset Toolbag 4 almost exclusively lately. I started using Marmoset Toolbag with version 3 after hearing glowing recommendations about how easy it was to get great results when baking models. After trying it myself, I quickly implemented it into my workflow and began using it for rendering as well.
I would not consider myself an expert when it comes to lighting and rendering. Everything I know has come from watching tutorials such as Daniel Thiger’s Creating Portfolio Renders in Marmoset Toolbag, personal experimentation, or feedback/advice from other artists.
As with Substance 3D Designer, I like to start each render from a template file that contains a tessellated sphere and three directional lights: a Key Light above, a Fill Light below, and a Rim Light behind. When starting to light a material, I like to start by thinking about what kind of environment that material might naturally be found in. I wanted the Key Light to give the feeling that the obsidian is in an active caldera, so I used a warmer reddish-orange color value. While it may not be a realistic lighting setup, I usually like to use the Fill Light to contrast the Key Light. Since I opted for a warmer key light, I used a cooler light blue color for the Fill Light. I do this to add a bit of interest to the final render and to help to showcase how the material would look in different lighting. I typically set the color value for the Rim Light to a similar value as the Fill Light but slightly less saturated.
After the first pass on color values and intensities for each of the lights is when I adjust the Sky Light. There’s no exact science to this step for me personally; I usually just search through the preset catalog until I find one that I feel is working for the material.
Since I am far from an expert when it comes to lighting and rendering, I’m often experimenting with settings to see how they affect the final render. First I increased the exposure which prevented the smaller details from being lost in the shadows and slightly increased the saturation to help the colors pop a little more. I also played with both SubSurface and Volumetric Scattering at low values and opted to leave Volumetric Scattering enabled as I liked the results. Raytracing is another setting that I often toy with to see how it looks for each material I’m rendering. For the obsidian, I liked the way it affected the lighting, so I ended up leaving it enabled.
To me, Substance 3D Designer is one of those tools that is very easy to learn but can be difficult to master. While I’ve been using it for a few years now already, there are still countless nodes that I’ve never used yet or that I’m not using to their full potential. Nodes such as Pixel Processor or FX Map can produce some incredible results but have a much higher learning curve than the more basic nodes.
When first learning Substance 3D Designer without experience from other node-based programs, it can be a very jarring experience. Working procedurally is a very different approach from directly authoring textures or materials in Photoshop or Substance 3D Painter, and it can take some time to begin to wrap your head around the process. The best advice that I can give is to just experiment with nodes to see what they do and how they interact with each other and don’t worry about how the results look. As with learning any new program or skill, there’s a solid chance that what you make as you’re learning won’t look good but that’s okay. As you continue to learn and develop your skills, your materials will look better and better.
I think participating in challenges such as Nodevember and Mayterials, where you must make many different materials in short timeframes is a great way to quickly level up your skills. Having set timeframes forces you to think critically about what you’re making, and the set prompts provide a framework to start narrowing down what material to make. These challenges were what helped me to develop my knowledge in Substance 3D Designer as fast as I did.
Don’t be afraid to check out graphs from other artists as well. I have a large library of materials from many different artists that I frequently open and study to see how they approached a given material. Doing this, you’ll often find combinations of nodes that you had never thought to use before. There are many techniques that I’ve found used to create realistic materials that I can adjust and adapt to create stylized materials instead.
There are also many online communities out there created to help 3D artists learn and develop their skills together. These include The Club, Experience Points, Beyond Extent, Stylized Station, The Handpainter’s Guild, and more.
If you’re interested in learning Substance 3D Designer, here are a few resources I’ve compiled since I started learning it myself:
James Braley, 3D Environment Artist
Interview conducted by Theodore Nikitin
You may find these articles interesting