Chunck Trafagander told us about working on the latest project called Glass Blocks, shared the Substance Designer workflow, and explained how to render glass properly.
Hey there, I’m Chunck Trafagander. You might recognize me from my YouTube channel, Get Learnt, where I create tutorials primarily for Substance Designer. What you might not know about me is that I have been working in the games industry since 2017, initially as a 3D Generalist at a small Canadian studio called PixelNAUTS.
At the time, I was also attending Brock University and Niagara College for a joint program in Game Development. During my time with PixelNAUTS I was able to work on a couple projects, being LOST ORBIT: Terminal Velocity and their upcoming title, Rocket Rumble. Currently I am working in AAA as a Foliage and Material Artist.
Beyond working in games, I have also had the opportunity of developing courses and education for people looking to get into the industry. I have created several of these courses with FlippedNormals, as well as moonlighting as a creator and host for the “Let’s Build It In Blender” show over on the CGCookie YouTube channel. I’ve also been able to create a couple tutorials for Adobe Substance 3D.
Getting Into Material Art
The idea of materials and the texturing process for models was actually something I originally dreaded having to do when I first became interested in game art and would avoid it where I could. Unfortunately, that meant a lot of my early models went un-textured.
Due to my aversion to texturing, I ended up using Blender’s shader editor to procedurally create materials from tiling images I would find online. This ended up being my first experience with procedural node-based systems, at which I was ultimately hooked. I consumed hours upon hours of YouTube tutorials, really anything I could get my hands on that was remotely close to game art. At some point, I discovered a YouTuber named stym that blew me out of the water, particularly their mini-series on creating a Modular Dungeon (sadly we still haven’t gotten a part 3). This expanded my horizons to what could be done with textures alone, and that I could actually create my own textures from baking 3D models, instead of relying on whatever was online.
Fast forward a couple of years to when I was in university and had access to a computer that was powerful enough to run Substance Designer. At the time, Substance Painter was only becoming popular outside of the large studios, so Substance Designer was pretty much unheard of from what I could see. The fact that I could almost skip baking 3D models entirely and just create textures procedurally was the final incentive for me to jump into this application with both feet. Unfortunately, I wasn’t being taught the software in school, so I had to find alternative means of educating myself. The only resource available at the time was a few official tutorials on the Substance YouTube channel. There just wasn’t anyone teaching it, and at times it felt like you needed a Computer Science degree to operate it since it is a very programmatic way of texture creation.
Since there were very few resources at the time, I decided it would be a good exercise for me to start recording myself as I was learning and put it out on my own YouTube channel so others could learn with me. What I didn’t realize is that I would end up learning a lot from the people that watched my videos through their comments and that it would become a prime motivator for me to get better in order to answer any questions they had. Once you fall down the Substance Designer rabbit hole, you begin to understand just how much it can actually do and you realize you just want to go deeper and deeper.
Working in Substance Designer is one of the biggest reasons I now love material art. It is at an intersection of artistic and technical streams that allow me to exercise both parts of my brain. With materials, I am able to receive the artistic satisfaction of a completed piece that may evoke emotion or complete an environment, as well as being able to proceduralize a workflow or establish systems that will let me take my art further if desired, and streamline its development if required.
Creating the Glass Blocks Material
The Glass Blocks material has been something I’ve been thinking about for a couple of years, actually, and was something I had prototyped before on another project. I have always been interested in lights and refraction and can remember as a kid looking into the sides of my parents’ glass tables to see how the light was bent as if I were peering into some type of alternate dimension. I think this weird nostalgia for these childhood memories was really a subconscious motivator for me to tackle this material. The dark green tint that is common in a lot of refracted light with glass is also another key topic I wanted to explore, which fits perfectly with the glass blocks I had been searching up online.
Old diner project with a simpler glass blocks prototype:
For my reference, I only used a handful of images because I like to keep my reference board concise. My one real goal for this project was to develop a better understanding of how to make textures for glass since it’s not as straightforward as creating materials for most other surfaces. What I ended up figuring out later is that since these glass blocks lie anywhere between transparent to translucent, most of the work ultimately falls onto the shader in Marmoset Toolbag. So it was not as much about the textures as I had thought, but still a great learning experience nonetheless.
The Production Process
In my opinion, the biggest advantage for material creation is being able to identify shapes and patterns. It will save you a ton of time trying to recreate information you may already have. Fundamentally, all of these shapes have exactly the same foundation. Looking only at the block itself and not the pattern on its face, each one is exactly the same dimensions with the same spacing of grout in between the blocks. With that, I was able to create one glass block template shape which drives the entire material, literally.
Block template shape repeated:
Something I did pay special attention to when creating this template shape is providing the outward face of the block its own grayscale value range within the Curve node. With a Histogram Select node, I could easily grab any pixels at this value without accidentally selecting a different region, which let me create a mask to blend in these unique patterns. With the mask defined, you can get super creative with your block face patterns and they should be able to blend nicely with your shape. Most of these designs are very simple gradient nodes that I have tiled.
Once I had a couple of unique block patterns, I used a Tile Generator node to randomly stamp down all of the patterns. To further add variation, I used the Rotation Random slider under the Pattern header to have the tiles rotate randomly at 90-degree intervals so it wasn’t the same orientation for each pattern. This was exceptionally useful for the wavy patterns.
Roughness and Opacity
Determining where to start with your Roughness Map is always tough. I normally tend to start by defining the glossy/shiny areas first by laying down a solid dark gray and slowly begin adding only Roughness onto it. I’ve found that trying to add Roughness and Glossiness together on one pass can become very confusing and makes the direction much harder to navigate. I think about it as tackling the glossy areas first and slowly layering in rougher and rougher details. I know that I am only going to need to focus on the brighter values of the grunges and noises that I am placing further along with my node structure. For the glass blocks, I started with a Dirt mask generator. This creates rougher values for the areas dirt would start to build up, however, it will simultaneously create glossy values for the glass as well.
With this as my starting point, I’ll simply add random swiping grunge, a little bit of dust, add any cracks into the mix and then use another Dirt mask generator specifically targeting the grout sections to make that area far rougher than the glass.
The Opacity Map was far easier to develop. After I had tiled all of the blocks together, I used a Histogram Select node to grab only the blocks to create a binary mask. This is another area where defining early on those different grayscale regions for the template shape was so critical. I was then able to use this mask in a blend between two Uniform Color nodes so that I could test the Opacity amounts very easily later on by making the blocks' color darker. I only used solid colors to determine Opacity, however, if I wanted to make this a far dirtier material I would have considered introducing some of that grunge back into the Opacity so that some of the dirt wasn’t transparent. For the look I wanted, it was not vital. I also exported directly the Block Mask to be used for my Transmission once inside Marmoset.
One challenge I found that pertains to glass is working with color. During my time with this material, what I have found is that the color we are able to see is less about diffuse or specular surface color, and instead is light that is refracted below the surface of the glass itself, mixed with external environmental lights. This made it pretty difficult to determine what the color of glass actually was. For the base color, this ultimately means that we shouldn’t be trying to provide it with saturated colors, but instead, we need to gently “guide” those refracted colors through subtle tints which we will be able to visualize when we get to rendering. I initially provided the glass with a darker blue/green color, which ended up looking pretty bad once I got to Marmoset. At this point it became a back and forth between Substance Designer and Marmoset, testing certain values and different color hues to see what worked.
I used some of the grunge masks from my roughness, dirt and other cracks I developed to layer in some extra surface color. I ended up keeping the same blockout colors I had originally used, however later in my network adding an HSL node to desaturate and brighten the final base color outputs. I always make sure to use a Sharpen node as well to subtly enhance the smaller details of my base color.
I have been joking that this was the first and last glass material that I will create. To say it provided ample challenge would be putting it kindly. It offered me questions such as “How transparent is enough transparency? What type of Transmission model should I be using? What’s a Fuzz Map (for which I still don’t know)?” I started the material like I would any other, testing out a few environment lights that come with Marmoset. I’ll quickly add some lights and move them around to see if the colors look good and if I can capture a couple of reflections in the glass. Regardless, everything still looked pretty flat and certainly not glass-like.
I started to realize I had no idea how to render glass. Having looked online, I had seen a couple of people saying to use the Refraction Transmission model. With a bit of trial and error, I decided it just wasn’t going to cut the look I was going for as it still felt a little too flat. After a bit of exploration with the other models, I ended up using Volumetric Scattering. With this model, I was able to solve the color issue I was having earlier by being able to tint the light scatter as it entered the material.
Here I was also introduced to the idea of a Fuzz Map. While the description mentions something about it “approximating the appearance of fine hairs”, I’ve found that it also works well for glass blocks! The effect is incredibly subtle, but I found it boosted the light around the edges of the blocks to make it appear as though the light was being refracted at all angles, giving each glass block a greater sense of depth. I’m not sure about the physical correctness of this effect, however, my artistic eye told me to go with it.
I later found a water caustics image online to be used as a Gel Map for one of the Directional Lights in my scene. We don’t often think about it for material renders, but lights and shadows play a large part in how surfaces are perceived. Gel Maps will let you use black and white images to hone in where the light will shine, letting you get some pretty cool effects when they hit your material. I would highly recommend looking at using Gel Maps for some lights, as they add a whole other dimension to your renders.
Finally, I added my Opacity Map into my Transparency socket, with the transparent areas only dipping to a value of 153 sRGB (a 0.6 linear value). I’ve found that the transparency should be far subtler than I had initially thought, as the material can appear to “ghost” if your transparency value dips too far.
I didn’t do anything special for the camera and post-effects, since most of the work is being handled by scattering and transparency. For this material, I found a field of view of 55 degrees worked well for the camera to maintain a solid viewing of the center of the sphere, while still getting a good side angle as it wraps around. I used a standard gentle S-curve for the tonemapping, a bit of strength for the sharpen and bloom and that’s really it for the post-effects.
Something I wish I knew a lot sooner is what all of the blending modes do, at the very least from an anecdotal viewpoint. Blending modes are the unsung heroes of material art because they are what allow you to glue together all of the various components of your material. When starting out, I relied far more on making these complicated, elaborate masks to produce a poorer version of what I could get if I had simply used a blending mode other than “Copy”. Take the time to read the official documentation and watch the official tutorials on what these various blending modes offer because it will offer such invaluable insight into how you can begin constructing your materials.
Now, regardless of whether you choose to create materials procedurally with software like Substance Designer or you want to sculpt it all by hand in ZBrush and bake it out, you are going to have to hone your ability to identify patterns and shapes. That sounds far easier than it is, as I cannot tell you how many times I’ve tried to tackle too much at once and had to further break down the material into its core building blocks.
As I’ve gotten further into material art, I have found myself sitting in the reference stage longer and longer as I try to really understand how a material may be built in real life.
This understanding of how a material may be constructed in our real world helps me to identify what shapes or patterns are essential, how those smaller pieces are built, and how they could be used to create more complex shapes later. For the glass blocks, instead of laying down a grid of five by five blocks first and then trying to give each one a different design, we can realize that each block is fundamentally the same with only slightly different face paint. At the core of this material, it really only is one shape that is tiled repeatedly. Once we create a block template, we can derive virtually any kind of variation off of it that we wish to give the appearance of greater complexity than there truly is.
Thank you for checking out this article and for the opportunity to be able to share my experiences working through this material! If there are any questions or you just want to talk about material/game art, I’m always available at my ArtStation and Twitter. Also, make sure to check out my YouTube channel to learn more about Substance Designer and material art as a whole.
You may find these articles interesting