Jeff Horal presented his amazing Stylized Tile Generator that allows artists to easily create new stylized textures in Substance Designer.
My name is Jeff Horal. I’m currently working as a Senior Environment Artist at Bungie on the title Destiny. I started working there before Destiny was officially announced, and since then I’ve worked on nearly every Destiny release. Most of my time at Bungie has been on the Crucible team, designing and building various maps for Destiny’s PVP experience.
At Bungie, every environment artist gets to work on a little bit of everything, such as massing out spaces, modeling assets, placing props, and making textures and shaders. I enjoy doing all those things, but I’ve always had a special interest in shaders and textures, and so I sort of became “the shader guy” in my team.
First Encounter with Substance Designer
Back in the day, I used to make all my textures in Photoshop by combining various images from texture resources like textures.com. This method has some serious drawbacks, mainly that standard photo textures don’t provide any consistent way to extract good normal and height information, and good normal and height maps are probably the most important aspects of a successful texture or shader. So when Substance Designer came along, it gave environment artists the ability to create original high-quality height maps from scratch without having to do high-poly sculpts or tedious photo-bashing, and everyone rushed to learn it – myself included.
How did the Stylized Tile Generator appear?
Since I started working with Substance, it became quite obvious that it would be the ideal tool to create stylized textures. Most of the Substance community has been focused on realistic textures, but there are actually a lot of ways to get realistic textures through photogrammetry and 3D scanning resources like Megascans.
Meanwhile, most artists working on stylized projects have resorted to doing unique ZBrush sculpts for each texture, which is time consuming and difficult to iterate on. So I gathered a bunch of references of good stylized textures sculpted by very talented artists, and broke them down into their essential components. I noticed that even though every ZBrush sculpt of a texture was unique, they usually always incorporated the same techniques to make them look finished. Edge chipping, little pock-marks and pits, faceted corners and edges, large fractures and small subtle cracks, maybe some pebbles or rocks or grass – I realized that all of these on their own are easily recreated within a Substance network. I had actually already made most of those elements for other Substances, so I could just use all the same basic techniques I already learned.
The tricky part came when I decided to combine them all together into one extensive tool. What I came up with in the end became the Stylized Tile Generator. Even though it will never quite match an expertly sculpted ZBrush model, I feel like it gets pretty close. So my hope is that artists who are working on the stylized projects will be able to take this tool and make professional-quality tiling wall, brick, and floor textures without having to spend a bunch of time in ZBrush. And of course, the beauty of Substance is that once a texture is complete, the artist can just swap the input maps, or raise the grass/sand/dirt level, or just raise the amount sliders on cracks or rocks, and make as many variations as they need.
Working with Templates
The templates are included to give artists a starting point. I tried to include every basic type of the tile or brick texture that would be needed, like a castle wall with grass growing in the cracks, desert tiles with sand and pebbles, soft weathered stones covered in moss, etc. Stylized Tile Generator allows for a lot of custom control, so often the templates will provide an example of how to use a custom color gradient, or a custom height map to add embelishments on a trim, or a custom mask to control where sand collects.
The templates also shows how to provide multiple pattern inputs that can be easily switched between, allowing an artist to control all variations of a certain texture under a single Substance. The most important element of the templates are the greyscale inputs that control the basic pattern of the tiles. Once a good greyscale pattern is created, any of the components can be easily adjusted to tune in the exact desired effect. If an artist wants to start off with desertTiles_a, but wants to change the color, all they have to do is to adjust the color controls or input their own color gradient. If they want the tiles to be more cracked and destroyed, all they have to do is to adjust sliders for the amount of cracks. If they want more sand, they only need to raise the depth slider, etc.
Many of the templates also include a height map to generate some of the designs that are seen on such templates as egyptianStone_a (in the image above) or castleWall_a. However, most of the time a custom height map isn’t necessary, and artists will only need a basic greyscale input that is responsible for the main shapes.
There are a few important things to understand about the greyscale input:
- First, it requires tiles to be different of values. Where different values intersect is where the tiles get their shape, so if there is no value variation, nothing will show up. Those values also control many of the other features, and changing the range or value can have a big impact. It’s recommended that the greyscale input maintain a consistent value range.
- Second, the Stylized Tile Generator uses an Edge Detect node to generate the source of many of the effects, and if the input pattern includes really small shapes, sometimes the Edge Detect node will sort of combine them into a single shape or cause them to drop out completely. So for that reason, it is also recommended to not use super-small shapes in the basic greyscale input.
Key Parameters of the Stylized Textures
The best stylized textures have just enough information to convey what the material is, while not overloading the viewer with too many details. In Overwatch, for example, the vast majority of the textures are super simplified, almost to the point of just being flat colors in some instances, yet they are still read as sandstone, brick, or marble.
The viewer needs to be able to determine that a wall is made of stone rather than brick, and it’s the job of a good stylized texture to convey all the information necessary to make that distinction, without adding unnecessary noisy details or distracting complexities. So with that philosophy in mind, all of the components were designed to strip out a lot of the high-frequency detail and distill them to their simplest form. For example, the default settings under the Edges tab (that control how the basic edges of the tiles look) is designed to make the tiles appear chipped and warped, but still maintain clean, crisp shapes.
The Rocks tab creates very simple rocks, with just a few clean planes sculpted from their original shape.
There are also a few specifically sytlized effects that reside under the Diffuse tab that would either not be used in a realistic setting. Features such as Edge Highlights, Polish, and Brush Strokes are specifically designed to emulate the effects of a real hand-painted texture.
The proportions of the basic input pattern in relation to the scale of all the components also play a huge role in making a texture appear stylized. If the proportions of the input pattern are too realistic, and the relative size of the components are too small and make the texture feel noisy, then the texture can easily lose its clean and simplified look.
There’s no magic “make-it-look-stylized” button. It still requires an artist’s judgment to make sure the scale, proportions, colors, and components are all combined to read the texture as cleanly as possible, while still being distinct and interesting.
Stylized Tile Gen Structure
The basic structure of the Stylized Tile Gen moves from large to small. The network starts with the basic luminance input pattern, then it moves to the Height tab where a custom height map and/or sloping effects get added to the network. After that, it moves on to the Edges section, where controls and switches are provided to control the look of the edges, and continues down the chain adding surface detail, cavity material, rocks, grass, etc. until the final height is constructed. Everything is then piped into the Diffuse tab where there are controls for all the separate components, color masks, hand-painting effects, color gradients, hue/saturation, etc., and then the combination of all those things gets sent to the main outputs.
Finally, Stylized Tile Gen includes the full .sbs file that’s cleanly organized and fully annotated, so if an artist ever needs to know exactly what’s going on or how an effect is achieved, they are totally welcome to dig into the source file and have a look! Or to make their own changes or improvements! There is also a full documentation page with images and further annotations included in the download.
Stylized Tile Gen Utility
When creating the templates, I challenged myself to make any type of texture that came to mind, and I’ve found that it’s remarkably easy to create any texture that I could think of. Between the Grass, Rocks, and Cavity Material tab, an artist can add pretty much any combination of elements to their textures. And all of them have the ability to use custom inputs as well. So for example, an artist could input a leaf pattern into the Grass shape inputs, and scatter leaves across their texture. A bolt or washer could be input into the Rocks shapes to scatter junk around on a tile floor. There’s really endless possibilities as far as repeating wall and floor textures go.
The templates are good examples of what can be achieved, but artists should in no way feel limited to have to start with one of them. When creating a brand new texture, there is a blank_template that’s also included in the templates.sbs file. It has pre-made custom gradients for diffuse colors, a pattern switcher, and a few other things an artist might need when creating a totally new texture.
Although there are definitely a lot of features in Stylized Tile Gen that may feel intimidating, everything is laid out in clear linear sections and every single slider has a detailed tooltip. All an artist needs to do is move down the tabs one-by-one, setting the shape of their tiles, adding surface details, adding sand or dirt, adding rocks or grass, tweaking diffuse colors, and setting the roughness values – it’s quite easy to create something brand new.
Advice for SD Learners
Substance Designer can feel very abstract at first, so it’s very helpful to have other Substances for a reference. I often referenced Daniel Thiger‘s .sbs files (he mostly releases the .sbsar files, which cannot be opened in Substance Designer, but all the Signature Series materials he did for Allegorithmic include the full .sbs files). If I ever got stuck on how to achieve a certain effect, or just wanted to see exactly what went into making a rock, or sand, or leaves, I could dig into his network and see how it was done.
After doing that for long enough, you will start to find your own preferred ways of doing things and it will become just another tool in your kit. Substance is kind of a puzzle, and you’re always trying to find the most procedural, efficient, and simplest way of achieving things. There are a few videos on YouTube that I found helpful (mostly those done by Daniel Thiger), but ultimately the best way to really learn (as opposed to just copying a video step-by-step) is to set a project for yourself, find good reference images (also super important – you should constantly be comparing your work to your reference images), and then just do your best until completion.
The first few probably won’t be all that great, but through hands-on problem solving, eventually you’ll start understanding what goes into making a material and the techniques you can employ to get there, and then you’ll be making your own tools like this one!
Jeff Horal, Senior Environment Artist at Bungie
Interview conducted by Kirill Tokarev