I really like how you've articulated your entire process. This was a very enriching read. A Well deserved feature!
Great article! Thanks for the awesome read.
Wow, this is so cool! Nice job!
Abel Dopazo discussed his approach to the production of high-quality procedural materials with Substance Designer.
Hi there! I am Abel Dopazo, a 22 year old Spanish Environment Artist currently living in Sheffield, UK. I moved abroad to improve my skills at University, network with other game artists and get into the games industry.
I am currently looking to engage in the industry by joining a studio as at the moment I am not working, but strengthening my skills and portfolio. I come from a background of local art school in Spain where I studied 3D, animation and concept art, and studied games design at university in the UK.
Working with Substance Designer
It feels a bit funny for me to share my work at this level with Substance Designer, the reason being that at the time of writing this I have exactly 2 weeks of experience with this program.
As I said I am working on my portfolio, which includes a scene I have to make materials for, so I thought it would be a good occasion to explore the workflow that seems to be becoming the standard for material creation in games. As many of you I have seen beautiful procedural materials being showcased online and even though I had never touched it I was dead set on learning it.
I want to briefly mention that the work of Rogelio Olguin and Ben Wilson had always fascinated me. Incredibly talented and hard working artists Kyle Horwood and Nathan Mackenzie were not only a source of inspiration but a huge help through their breakdowns, advice and support. I look up to them and if you haven’t checked up their work yet you definitely should. Also, the great community created by Jeremy Estrellado is a tremendous helpful group, and we all push each other to become the best we can. If you are interested in environment art you should join us. If I am here right now is greatly due to all the awesome people in there. Credit where credit is due.
As per the software itself, I was very interested in the way the Designer to Painter workflow would provide me with a solid infrastructure in which I could go back and forth making the appropriate changes on the fly, and build a library of procedural, tiled and easily customizable materials for my projects. The non-destructive workflow of these programs is incredibly powerful and important to me.
In a game studio, I would like to provide my art lead and art director with near instant iterations based on their feedback so that I am able to convey the most accurate feeling to the texture, according to the set visual style that the game would have.Also it allows artists to create variations of a same material based on certain guidelines, which effectively speeds up their creative process.
Melting snow on mud
So this melting snow on mud was my first ever substance and it will be part of a little scene that is on the works right now. Being from Spain I barely have any real life experience with this type of material. When I work on textures I like to not only work from internet reference pictures, but actually go out with my camera and take very specific pictures that I can analyze later, and most importantly, touch and feel what I am trying to recreate, so this was a challenge.
My main inspiration for this material was the awesome snow material setup that the amazing artists at Ubisoft Massive did for The Division, and also the Monaco rally stages that the guys from Codemasters put together for DiRT Rally. As I always try to do, those were an inspiration more than anything, and I put my twist on it. I wanted to make something not very generic and that I haven’t seen done a lot before to challenge myself.
As many artists do, I started working on the heightmap first, especially important here since I really wanted to get the snow lumpiness right. It is actually a very simple setup which was very convenient since that way making changes and variations is extremely easy.
I am essentially making some value adjusting over a Clouds 2 node variation, so that the value range was right and the slopes formed resulting from the height was not too extreme, not too noisy or too flat. The lumpy effect is mainly thanks to warping the base height on itself ever so slightly after a tiny bit of blur. If you look at the node thumbnails you might think that some of them are not doing much if at all and in fact their contribution is indeed subtle, however that is the combination I found it really gave me the exact look I wanted. It took attention to detail and some trial and error but I am satisfied with it.
There is nothing special about the dirt, the wetness or the transition between them, other than the fact that I learned only afterwards that a water level and also snow nodes are available to use! Since it was my first time in the program I though at least I learned something new and how to do it on my own so not a loss, really!
I want to point out however, that I used a blurred variation of edge detect on the lowest points of the snow pattern to add hue variation and create that SSS look, so the albedo is actually blue in those parts. There is a mask for those parts so you can easily change its saturation in case a shader was built for in-game use based on lighting conditions, to further control the way it behaves. Also, I complemented the macro and medium shapes and colors with some micro detail in the shape of little leaves, twigs and pebbles. I wanted to complement the blueish color of the wet snow and the brown with some greens so this was the perfect excuse for it.
The last addition I made to it was a sparkly looking effect on the snow consisting of noise transformed into normal fed into a mask, and also another mask that shows the highest parts of the snow used to show SSS in Marmoset.
My industrial windows substance was my third one and done as an entry for the substance challenge at polycount.com. I wanted to take a break from my main environment project and give it a try with something more urban and artificial shapes-based material.
From the beginning, by looking at the reference images I already knew how people would tackle the idea, and I wanted to do something different, something that I had never seen before be done with Substance. So I decided to include the trims and columns in it, planning it all beforehand so that I could set everything up step by step, in an organized manner so that it was very easy to iterate on the design. The big idea here is that because it is based off simple shapes and no images at all, everything is procedural and completely customizable with a couple of clicks.
I believe this to be highly valuable in a real game production because I could provide the team with multiple variations of this material and even archieve very different looks. Viability wise, in most games this type of asset would simply be modeled but I was curious on how would I tackle super fast concepting for a level, or even assets that would be far from the camera inside the game, and even buildings in racing games, since not as much detail is needed and geometry budget is more limited. In general, I wanted to push myself and Designer, and to experiment and just have fun.
The way I organised this substance basically consists in levels of detail going from big to smaller shapes:
-Window frames (with size and proportion control, curve node-driven profile customization of the frames shapes, ornate shapes, window normal pattern, cracks and rust)
-Big columns (again controls for size and separation and several subtle others like bevel profile and mask to swipe materials between stone, concrete, bricks and whatever my Art Lead would need) This one proved interesting because is the shape that stands out the most height wise, obviously this being substance designer that would mean I can’t texture the sides of them, the way I went around this is by adding a subtle bevel and blur to the edges, just about enough to get a minimum of texture information in there.
-Top trim (controlling the overall shape by overlaying a linear gradient on top of the base shape and using a curve node to exaggerate some of the shapes, then added the semi spherical shapes on top)
-Middle trim (and smaller separation line to break a bit the vertical symmetry)
-You can see the heightmap here and how it looks very simple, ideal for anyone in a studio to pick it up and quickly understand what’s happening, and iterate on it. It is obvious that the height variation between windows is not physically accurate, however it is different enough that it gives the illusion of it being imperfect and interesting as the light plays rolls on top of the surface.
As per the cracked windows, first of all I am using a randomize mask node you can find online for free so I can select random windows and quickly change how many are cracked, then using a combination of Crystal and Cells 3 to not only give me primary and secondary cracks, but also to give me that slope you can see in the image, which I am later using to give the normal map a different color value in those particular areas: This is the key to make the cracked parts look like they are tilted since the normal makes the surface react to the light as if they weren’t in the same plane. This effect was slightly enhanced with a bit of Ambient Occlusion and accumulated dirt on some of the cracks on the Diffuse and Roughness.
Regarding the reflectivity of the windows and heir depth, what I did was start with simple dark values on the Roughness map (and almost white on the Metalness) then start breaking uniformity in a layer-based setup:
-Overall dirt mask, per window, with macro (mask of the overall dirt) and micro (noisy little detail) to achieve variation in the roughness breakup
– Localised dirt on edges of windows and cracks using edge detect nodes in combination with noises
-Top-down gradient (that also affects trims and columns) and down to up gradient, this ties everything together as a whole a bit better since it makes the albedo values not as contrasty and the overall roughness to have an interesting variety.
For the depth effect on the windows I am using a combination of very subtle beveled square patterns to make reflections play on the surface, along with a mask based on the inverse Roughness dirt parts and using that as a faint tinted emissive, which gives the illusion of different types of lights being on the inside and only showing up where the windows are not as dirty. This in combination with a nice lighting setup that has several colored lights ended up giving me the feel you can see on the final images.
Thanks to the power of Substance Designer I am able to switch between resolutions and always check how my materials would look with the limitations of a real time game engine. I never go above 4K to make sure I am making the lower resolutions look as nice as possible, in fact the real time renders you can see are all using 2k textures. It looks almost as good at 1K and if I were to optimize this further what I would do is depending on the importance of the asset that would wear this material I would export at 512×512 or 1K, but using a 2k heightmap to ensure there are no artifacts when displacing the mesh, since some of the areas are very tight.
Because I can create instant variations I would also export several of these and Blend them using masks in the game engine shaders, I could create several styles of ornates and windows and essentially have a library of building textures to use for quickly putting together a city level, for instance.
It usually takes me a couple of afternoons to build my materials from scratch to a point where I am satisfied with them, Although the industrial windows one took one extra day due to the amount of experimentation with shapes and fine tune of the height and glass depth effect within Designer and Marmoset. If I had a very specific reference to work from then I would for sure cut down production time by a little chunk still. I recommend spending a little bit looking at pictures and drawing over them pre-planning how would you do all the shapes, macro and micro information, using what nodes, and be very organised with your node structure, frames and tags from the very beginning, it can save you time in the end, and most importantly a lot of frustration.