top of page

Substance Designer

A package intended for the design and creation of 2D textures, materials, filters and 3D models; controlled through a node based (procedural) interface, with a heavy focus on procedural generation, parametrisation and non-destructive workflows.


Substance Designer is an extremely technical, advanced texturing application. Textures can be created for any use case scenario, extending to; brush alphas, generators, filters, VFX, etc. Below is an example of fire VFX I developed using Substance Designer, my first ever interaction with said software:


I planned to assist in the texturing side of the project; hand-painted textures are not an area I have much practice in though. To combat this, I planned to texture procedurally and aimed to mimic a stylised look, similar to the style of our game.


Beginning this I worked within a "Substance Graph"; allowing the generation of 2D image data, which can be outputted to one or more texture outputs. In this case I outputted to: Albedo, Roughness, Ambient Occlusion, Normal and Height (Displacement), 4 of 5 maps which were not used - or needed. This is due to our lack of pre-production, at the time of creation - we ended up only needing Albedo.


Below is a 2D example of what would potentially be expected of the finalised 2D material, AO (Multiply) and Roughness (Overlay) is layered atop the Albedo.


Using tessellation within Substance Designer, a height map can be used to displace the surface, according to the surface of the texture. This could be later baked down to a more optimised mesh, if need be.


Simplifying the full node graph: Green; masks and defines the shape of individual rocks, through the application of blurring and blending noise. Until the desired look is met. Light Blue; the rocks are input through a "Tile Sampler", a node specialising in generating tiling patterns. Various parameters can be controlled, such as; scale, position, size, colour, rotation and masking -- which can be driven internally by the node itself, or by external inputs. All while retaining a tiling pattern. Using said node, allows for a seemingly random arrangement of rocks. Three other "Tile Samplers", create tiled patterns internally, for future use in the Red section. Red: focuses on the blending of various inputs, with the focus of breaking up the rocks and adding a level of variation. This is achieved through adding; cracks, small cut-outs and creating harsher edges along rock faces. All accomplished through various application of noise: Cells, Crystal, Perlin and Clouds. Throughout this process, I am sure to work only in greyscale, as handling a value between 0-255 alone, is much easier than 3 channels ranging between 0-255 (integer values are much easier to manipulate than vectors). Pink: Stemming from "Plasma" noise, sand can quickly be morphed into existence using "Transformation 2D", various blurs (powered by Perlin noise) and warps in only 12 nodes. "Clouds" is used to add a slight grainy surface texture.


Purple: A loose bundle of nodes, aimed to tie the sand and rocks together. By treating both as height maps, "Height Blend" allows the combination of two heightmaps, based on their height information. Sand is inputted into the "Height Bottom", rocks into "Height Top" -- using "Height Offset" the depth between both layers can be pushed and pulled. From here the normal map is defined, which breaks off into a curvature map, which is later used in the Dark Blue section. Dark Blue: similar to stylised texturing with Substance Painter, curvature maps, blurs and various gradients are used to quickly fill the albedo map. Yellow: the final accumulation of Purple and Dark Blue, all outputs are defined here, ready for export.


If I were to redo this, I would place much more focus into node organisation. As seen here, my nodes are much more readable in these newer projects, and clearly labelled. For further detail on how graphs are expected to be organised, see Substance Designers Graph Design Etiquette.


This organisation is important when returning back to previous projects for edits and readability, also when passing project files to other group members.


Unfortunately, this sand texture never made it to game. As we relied more on Harrison and Abbie's hand painted textures.


I also had other plans with Substance Designer/ Painter, to help streamline our pipeline on the texturing side. As hand painting every asset is a tedious task. However, these ideas never progressed as our artists tackled the task with no issue.


I was hoping to develop a quick and easy method to developing stylised textures. Similar to "Sea of Thieves", using baked normal info, various generators can be used to transfer such detail to the albedo map. Usually achieved through the application of baking light, curvature, position and ambient occlusion to said albedo map. However, even this process can be tedious each time. Through Substance Designer, you can compile a huge generator, which boils down each complication to simple sliders. However, this was never needed, but I still would like to develop such a generator. Here's an example of said generator.


Additionally, our game's style is dependent on the inclusion of various shaders; Toon and Cell. Meaning artists can only see how their textures look, when finalised, once they are within engine. Obviously, jumping back and forth between Unreal Engine and Substance Painter is suboptimal. Substance Painter supports custom shaders, so I looked in developing custom HLSL shaders -- using substance's shader API. However, my GLSL/ HLSL is lacking, the extent I can code is simple vertex shaders. For an amazing example of what's possible -- look below:


References


bottom of page