Lee Borrer talked to us about the Council House Material project, discussing setting the material parameters and visualizing decay, damage, and paint color with Substance 3D Designer.
Introduction
Hey! My name is Lee Borrer. I am an Environment and Material Artist in the UK. Since my previous 80 Level article, things have taken off, and I was able to leap from working on mobile games to working in AAA. For the past 3.5 years, I have been working at Sharkmob London. First, I supported the Malmo Studio on their title Exoborne, and for the last 2 years, I have been working on the unannounced AAA project that London was developing. At Sharkmob London, I was responsible for authoring materials and terrain texturing on the project. I was lucky enough to work with some very talented and experienced environment artists and learned a lot from them.
As of writing this breakdown, the London project has been canceled, and we're all getting laid off. On the plus side, I found myself with some free time to finish this Council House Material project.
Choosing Substance 3D Designer
I've always enjoyed the texturing side of 3D art way more than modeling, so when I found other artists using Substance 3D Designer in innovative ways to create geometry through Height Map displacement, I wanted in. I get that this stuff is not what you call "game-ready," but sometimes it's nice to use the tools to make art because you enjoy it, not to get you a job. We are artists, right?
The first projects I came across and got inspired by were Cem Tezcan's Procedural Military Radio Tutorial and Daniel Thiger's Substance 3D Designer Watch. These guys are infamous for their use of Substance 3D Designer and have done even more similar cool projects since.
So you're telling me I can author 3D art without caring about polygons, UVs, and baking and not leave Substance 3D Designer? I knew one day you would come!
Using these artists as inspiration, I set out to work on my own modeling with heightmap projects. My first one was a battered BT Phone Box created using Substance 3D Designer.
After I made this, Daniel Thiger and LevelUp Digital contacted me to create a tutorial on the project for the platform. I couldn't believe it – how mad that was!
My next project was the Synthwave Material, where I created a car in Substance 3D Designer and a rolling road for it to cruise down.
This got the 4th place in that year's Adobe Substance 3D Designer Insanity Awards!
This Council House Material project is a continuation of these types of projects and seeing what I can do through displacement and simple geometry using Substance 3D Designer and the challenges of working within these constraints.
Inspiration & References
Inspiration for choosing the theme of a council house comes from a personally nostalgic place for me as I lived in a few council housing estates as a kid growing up. There are a lot of fond memories from my (somewhat misspent!) youth where this was the backdrop. I find there is also a kind of somber beauty to them that I was trying to capture. I think if you can, when it comes to personal projects, like the Mark Twain quote, you should try and “write what you know”.
It's not just about what you have lived and experienced first-hand. It can be things you find beauty in or care about. When working with subjects you are more passionate about, I find the piece develops more quickly and fluidly and hopefully gets perceived as more authentic and believable.
Even if you are familiar with the subject, reference is always key. This project had a reference folder with around 160 images. This is more understandable if you break the house down into elements and material types, such as windows, doors, guttering, meter box, tiles, pebble dash, bricks, chipboard, etc. Getting started, though, I was looking for references with interesting council house features that would displace nicely on one material.
Material's Properties
Height Modeling
The first step is setting up your 3D preview window in Designer to show your geometry displacement. I set the material to be Default/ Metallic Roughness/ Tessellation+Displacement
This opens the properties tab, where you want to increase the tessellation factor to 16 (you can go higher, but it impacts performance). Then, I set the scale to something relative to the maximum amount of extrusion I wanted for the house, I set it to 30.
Similar to traditional polygon modeling, I started by blocking out the macro shapes of the house, working on the main silhouette. For height modeling in Designer, the Curve node is your best mate!
Using a Gradient Liner 1 plumbed into a Curve node gives you some user-friendly control over the 0-1 range. The curve window acts as a side profile of your geometry.
Add and edit the tangents to extrude shapes and create bevels.
Using the Gradient to Curve technique, I expanded on it and created the windows and doors. Starting with a square shape, I plug that into a Distance node to give me the size of the gradient I want to manipulate with the Curve node. I use the Curve node to create the UPVC window frame profile.
As with the procedural and non-destructive beauty of Substance 3D Designer, editing the dimensions of the original square shape node gives me the other windows as it keeps the gradient size set in the distance node.
The UPVC door was created using the same technique and composed with the other door elements, letterbox, number, and lock.
A graph like this will easily become unmanageable and difficult to navigate, so I create Sub-Graphs from individual features where I can. In some cases I still need access to certain masks later to help with authoring the other maps. You could have these set as other outputs of the subgraph, but that may cause issues or break the procedural cascade if you plan on using any transforms down the line. So, to counter this, I use an RGBA Combine node and put the outputs into the channels. I can then scale, move, rotate, and use an RGBA Split node to have all the outputs relative to when composing into the house.
Once all my house feature sub-graphs are created, I start weaving them into the main house blockout. Using the Transform node, I scale and position the elements. I wanted the windows and door to be recessed, as seen in some of the references, so isolating and combining their individual masks, I created the master mask to drive this. To add some natural unevenness to the construction, I added a little bit of Perlin noise slope blur. This mask is then blended onto the main house shape using the subtract blend mode, giving me the desired recess.
I can blend in the windows and door on top using screen blend mode.
I continue to build out and blend the other elements into the house.
Now that the house and features formed, I want to start working on the wall surface and roof tiles, but I need some masks to help me out and identify those areas. Using the Histogram Select node with high contrast and playing with range and position sliders gives me a good base mask to work with.
Using this and subtracting and multiplying the other generated masks, I can isolate areas to start assigning and creating surfaces.
So far, I am working on height, normal, and AO information with a mid-grey value plugged into the base color and roughness. I want to ensure this is all sweet and reads well before working on those other maps.
I then begin working on each surface type, using broad brush strokes, assigning flat colors, and working the base color up on the house as a whole before moving on to the roughness.
Damage Parameters
I wanted my key shot of the Council House material to look properly rundown and dilapidated. However, I wanted to start with a new build and be able to control the age and decay through exposing parameters.
The node setup is a few paraboloid shapes, scattered and combined with a blurred version of the windows and door mask that I showed earlier. This gave me a base of some random damage and the curated damage I wanted around the recesses. I then warp and slope blur it to give me more irregular and natural-looking shapes to help drive the wall damage.
Using the previous mask, I ran it through a Quantize node set to 4. This is needed to drive the four layers of surface damage going from painted pebble dash down to bare brick.
With this chain of nodes set in place, I have a Levels node placed here in the flow to control the amount of damage. In this Levels node, I expose the Levels In and Levels Out parameters.
Faking It
When I started this, I knew the windows would be an issue, and I would need to tackle them at some point as there are no internals to the house. I thought having them highly reflective would be good enough, but I wanted to try other solutions and see what works.
In one early iteration, I played around with using metal panels over the windows that I found used in some of the references, but I didn't like it as they fully covered up my nice UPVC windows.
Along the way, I also tried smashing the windows as this would be something you would expect. Again, as the house had no interior, it exposed this, so I combined that with boarding up behind the glass. I wasn't happy with it either. The shatter wasn't convincing enough and gave me some undesirable results.
In the end, for the dilapidated version, I opted for having them boarded. It seemed to work, and I had a reference to back it up.
For the less rundown versions of the house, I wanted some of those tatty old net curtains. As it would be just a 2D image, I had to do some fakery here to give an illusion of depth. I used a mixture of Gradient and Ambient Occlusion nodes to fake inner shadows.
A big issue when using heavy displacement is working around noticeable pixel stretching. Any steep 90-degree extrusions will stretch the pixels.
There is a visible stretching of the pixels on the recesses of the council house if you look hard enough. Where these issues arise, there are a few tricks to try to hide them and fake them. Instead of a steep 90-degree angle, soften it with a Blur node or use a small fall-off with a Distance node. Applying any micro surface to these angles will also highlight the stretch, so try to squash or warp that micro surface information in these areas to give you the relative amount you would expect to see. Another thing to do is to increase the roughness in these areas, too, so you avoid any lighting picking up the stretch and highlighting it further. Another tip is when creating your renders, try to hide them with shadows.
Final Material Parameters
In this image, you can see the final list of parameters I created and exposed. These allowed for the transition from newly built to fully dilapidated. These parameters, along with adjusting the Random Seed, gave me multiple versions of the council house to create a street.
Towards the end, even with optimizations, the graph became very heavy and slow on my 32GB RAM system. To get around this, I reduced the parent size of the graph to 2048 or 1024 when authoring. I then exported a .sbsar file that I can load in Substance 3D Player. It handles the material better and allows me to adjust the parameters and presets and export maps at higher resolution faster.
Rendering
Marmoset Toolbag
Marmoset is a very artist-friendly renderer. It can make the simplest of assets look properly sick! I'm not doing anything special in Marmoset for this, which most artists don't already do when creating renders of their materials. I'll go over the settings, as a few people asked about this after I published the project. By the way, I'm still using Toolbag 3 (Cheapskate).
The Scene
For the beauty shots, there are four tessellated planes for the houses and a few more for the pavement.
Settings
Playing around with the settings in Marmoset is a very enjoyable experience. I recommend everyone to do it and have some fun. I regularly make mistakes and break stuff, but that's all part of learning. I always try to start with a fresh scene each time I create a piece to see what new results I get. Here are the settings I used on the main beauty shots:
When adding lights. I like to click within the skybox preview window. It adds your directional light and you can move it around freely to try and get some nice roughness response. Then, select it in the hierarchy to tweak the direction and settings further.
Displacement in Marmoset
When using displacement in Marmoset, you want to make sure your plane or other geometry has a proper amount of tesselation to start with. In your material, you need to assign your Height Map in the Displacement Field. In the material settings, you also need to set Subdivision to PN Triangles and increase the Tessellation and Smoothing sliders.
Another thing you might find is that your Height Map file type can have different compression or wrong format, giving you some undesirable artifacts. Exporting the Height Map in a .png file type resolves this for me. See the example below where I get these jagged edges around the window frame when using .tga:
Conclusion
It's hard to say how long this project took, but looking at the dates on the incremental files, I see that about 90% of it was carried out over the space of six months. I grabbed a couple of hours a week between work, parenting my mini humans, and the rest of my life to work on it, which is not a very productive way to work with stopping and starting. Then, this project sat on my hard drive idle for two years, until recently, I wrapped it up over a couple of days to get it finally published.
My favorite elements of the project were working on the dilapidated version and creating the parameters. There is always something shamefully satisfying for me about taking something clean and complete, destroying it, and graffing it up!
In an attempt to avoid sharing bad practices, I want to highlight some points about materials like these to aspiring material artists. These types of projects are fun, help you learn, and demonstrate your knowledge of the software and your ability to creatively solve problems. They're also good at helping you stand out and get some extra exposure. However, these alone won't get you a job. You will need to show traditional and production-ready material work in your portfolio, as that's what gets you hired.
I would like to thank 80 Level for this opportunity and thank you for taking the time to read this. If you have any questions, feel free to reach out to me on ArtStation, and I'll try my best to help. I hope you get something from it to take away or, better yet, get inspired to make something of your own and have some fun!