The Suburbs: UE4 Environment Breakdown

Tom Turner prepared a detailed breakdown of his UE4 scene The Suburbs: modeling techniques, texturing with Substance tools and vertex painting, lighting, post-process, and more.

Introduction

Hi, everyone! I’m Tom Turner and I am an environment artist from Cardiff, Wales. I have just recently graduated from Staffordshire University here in the UK, where I studied Computer Games Design, but my focus was always environment art there. 

Prior to university, I didn’t know which career path to follow and always found myself doing a little bit of everything. I tried my hand at graphic design, photo/video editing, selling vintage clothing and shoes, and acting, amongst other things. Although I enjoyed those and had mild success in some of them, even managing to blag my way into the background of a couple of Netflix shows, I didn’t see myself doing any of them long term. 

I always felt as though I should go to university, although I’m not sure why. I was the first in a family of five to go, so thankfully there was no pressure from my parents to enroll. Games are the only hobby I have that lasted from my childhood up to now, so I thought it’d make sense to study something related to that. In my first year, I found it really difficult and I had no prior experience or knowledge of any of the software that was used. It did feel quite demotivating, but as my time there progressed I was able to specialize in environment art and haven’t felt like doing anything else with my time since. 

1 of 2

The Suburbs: Concepts, Inspiration, and References 

I look at concepts on Artstation nearly every day, so when I find one I like I make sure I save it for later! When I’m working on a scene, I want a bunch of awesome concepts ready for my next piece so that I’m spoilt for choice. This one piqued my interest as it reminded me of a somewhat rundown area in my home city that I used to deliver newspapers to when I was about 13.

Some of the added storytelling elements and changes made to the concept were inspired by that area. I had removed a previous exterior environment from my portfolio, so this was a great opportunity to add one back in and show the improvements that I’ve made since I started 3D. This was my first piece since graduating, so it was time to put everything I’d learnt to work.

I made good use of PureRef throughout the duration of the project. Getting multiple references of assets before you start modeling is a great habit to get into. You often pick up on subtle things that you may not have noticed before that can make a world of difference.

Planning the Scene, and Composition

I started production in 3ds Max, importing the Unreal Engine mannequin for scale reference. I then blocked out the main structures using super basic primitive shapes. This was so I could get something into UE4 quickly, to work on composition early on, which is something I’ve been guilty of not doing sometimes in previous projects. I’ve learnt that nailing this down at the start of the project saves a lot of headaches later down the line. I can then begin to iterate on these shapes, constantly reimporting into the engine and altering the composition until I’m satisfied with it. I can then start to think about smaller props, and where they can fit into the scene without disturbing the balance that I aimed for at the start

It’s worth noting that after each final model is completed, I like to unwrap immediately before importing into the engine and moving onto the next asset. I quite like unwrapping generally, but unwrapping a large number of assets one after another and doing nothing else in between can feel quite taxing, so it’s good to break it up into chunks. This also allows me to work on early lighting passes, as my lightmaps are correct as soon as my final models are imported.

Modeling Considerations and Techniques

The House

Each part of the house was modeled as a separate mesh to achieve appropriate lightmaps, helping to avoid annoyingly long bake times.

My initial plan was for each face of the house to be pretty much flat, and to let my wooden plank material do the job in terms of faking depth, whether that be purely from the normal map or utilising a height map for some displacement. I later realised that I wasn’t getting the desired effect, so I modeled in the angular notches of the walls instead. After modeling these in, I simply marked out with edge loops the areas where the windows would be placed and removed them.

I didn’t bake these notches down to a flat low poly as it wouldn’t have given a convincing enough effect due to the angle of some of the camera shots, and it still kept the poly count of each side of the house pretty low, considering it was the focal point of the scene. I kept the internal faces of the house to avoid any light bleeding from my interior lights later on down the line.

Dumpster

Planning for the dumpster model, I didn’t see too much of an advantage of baking instead of mid-poly modeling. The model is more or less made up of flat surfaces other than on the back handles and wheels, which are not in full view in any of the shots. Additionally, any finer surface details were all achievable directly within Painter. That considered, I decided I would just mid-poly model and use face weighted normals for smoother chamfers.

Overall the poly count is just over 10k, with the vast majority of those coming from the cylindrical parts of the mesh. As this was for a portfolio piece, I was happy to sacrifice poly count to avoid any visible faceting.

I simply modeled a quarter of the main body and lid of the dumpster, with a wheel attached to the bottom, and used the symmetry modifier twice to complete the main shape. The rest was just cleanup - removing the lid handle on the back, optimising the topology, and fixing the smoothing.

1 of 4

Trash Bags 

The trash bags were fun to make and used a pretty cool workflow! I found this technique on Pixel Fondue’s Youtube channel, here's the video for a closer look:

I made a basic cube roughly the size of a trash bag, using the mannequin as scale reference. I subdivided this a few times with the turbosmooth modifier to give it enough topology to deform.

I mainly used the ‘noise’ and ‘FFD 4x4x4’ modifiers to then shape the cube into a similar shape as to how trash would pile up in a bag. I also added some floating primitive shapes such as cubes as cylinders, to make it look as though everyday objects would be poking against the inside of the bag. These shapes will also need to be subdivided to give them enough vertices to ensure they simulate properly with cloth in Marvelous.

1 of 2

Once this was finished, I imported the mesh into Marvelous Designer and simply simulated stitching two pieces of cloth together around it. I added internal lines near the top of each piece of cloth, which acted as the knot when the bag is tied up. I was able to get a good result by playing with the elastic properties of the internal lines, making them pull towards each other and leaving excess cloth above. I used the steam brush, which is a really great tool to use to add wrinkles to the cloth. Here’s the really basic setup in Marvelous’ 3D viewport, and the corresponding edges that get stitched together in the 2D viewport. Notice how the internal lines don’t need to be stitched together if you set the elastic ratio to a really low number.

This is a great technique as Marvelous does a lot of the work for you. You can easily retop from tris to quads if you want, using the Quadrangulate feature, and can also increase or decrease the tri count procedurally by changing the ‘particle distance’ of each piece of cloth, making it really easy to make a high and low poly for baking. The mesh is also unwrapped flat for you already which is great. The process of having the model ready for baking and texturing took me about 25 minutes 

Texturing

With most things I make, I start by gathering plenty of references. Particularly when it comes to texturing, it’s important to understand the surface definition and how different materials build up on the surface under different circumstances and conditions. I’m by no means an expert on this and have so much to learn, but I feel more comfortable when comparing my work to clear reference.

1 of 2
1 of 2

Substance Painter

The first thing I like to do when starting a new project is to make folders for each base material I’ll be making. For example, for my mailbox, I have a folder for wood, metal, and two different plastics for the mailbox flag and flag base. 

I don’t have a folder for rust, as that is applied on top of the metal, so I can use the same folder. I will then typically add one fill layer to each folder, and apply a base colour, roughness, normal, and metallic values (if applicable) to each base material. This means I can view each channel independently to ensure that those values are realistic in correspondence with one another. Here, you can see that the metal of the mailbox is of course less rough than the wooden pole, giving a good base to move on and go crazy with details and variation. 

I like to work on the largest parts of the mesh first, working down to the smallest. Doing it this way feels more progressive to me personally, and you can always go back and make little changes later on.

Generators and smart masks are great for pretty much anything you want to achieve in Painter. Colour variation and discolouration are present in most everyday objects to some degree, so it’s important to also put this in your textures. This can be easily achieved in many ways. I like to duplicate the layer with the colour I want to add variation to, alter it slightly, add a black mask, and use one of the smart masks to apply it to the mesh (Surface Worn and Dust Subtle are some personal favourites). If I need a really specific result I’ll typically use the ‘Mask Editor’ generator to create my own. It sometimes helps to make the colour really bright to see exactly where it’s being applied, and then dialing it back down.

1 of 2

It’s equally as important to add variation to the roughness, especially on smoother surfaces, as the effect is a lot more noticeable and catches the eye of the player. This can be done using the same technique.

Here’s a build-up of the roughness on the mailbox. 

Substance Designer

Substance Designer was used fairly heavily for this project to create the main materials featured throughout the scene. Some of these were corrugated metal sheeting, asphalt, rust, metal fencing, and the wooden planks for the house. Here are a couple of quick and easy techniques that I used for some of them.

1 of 4

For the roof, I would be laying meshes on top of the corrugated metal material and it wouldn’t be very visible, so I mainly worked on getting a good result with the normal and roughness maps for the gaps where it was. To start I just needed to make one of the corrugated sheets. I simply blended a square shape with a tiled Gradient Linear 3 for the ridges. I warped this result with the same gradient node to further fake the depth when viewing the sheets from a flatter angle.

This was fed into a few different Tile Generator nodes, with each one using a different Random Seed value for a mask. Each of these was controlled with a different Levels node, which were all blended together, so I could establish a bottom layer, middle layer, and top layer of corrugated metal for the normal map. This was a quick and easy way for me to achieve suitable results for the scenario it was used. 

I also used Designer to create the metal fence opacity and normal map. This technique gave a pretty good result, and once you’ve made one chain link fence you’ve pretty much made them all!

Starting with a Waveform 1 node, I rotated it 90 degrees with Transformation 2D twice, and offset one of them slightly. Blending these together with the Subtract blend mode gave half of what I wanted, so duplicating this process for the other side gave me the other half. Before blending them together, I used Transformation 2D again to move both sides closer to the center, so they overlap when blended. After blurring to make it a curved surface, plugging this pattern into a Tile Generator nearly gave me exactly what I wanted.

As you can see, they seem to be travelling through each other when they overlap, so that needed some improvement. I blended each half with a Gradient Linear 1 node, which was altered with a Levels until I got the desired result. 

You can find a tutorial on this method on Get Learnt’s Youtube channel:

Vertex Painting

I utilised height blending a couple of times for this scene, on the wood material of the house and on the corrugated metal roof/sheets. The roof had a simple 2-way blend for rust, whereas I added a third material in for the house as it was the focal point. This consisted of a wooden plank material with no paint chipping, one with moderate chipping, and one that was pretty much bare wood. 

To make a two-way blend, the clean wood textures are all plugged into the ‘A’ input of a set of HeightLerp nodes, and the moderately damaged textures into the ‘B’ input. The red channel of a Vertex Colour node plugs into the ‘Transition Phase’ input of the HeightLerp, and a scalar parameter into the ‘Contrast’ input to control the contrast of the blend. To make your material blend occur in a particular way or pattern, you plug a height map into the ‘Height Texture’ input. This is super useful to, for example, make a material blend start in deep crevices before then affecting a flat surface. 

To add a third material to the blend using a different vertex channel, feed the results of those HeightLerps into the ‘A’ input of another set of HeightLerp nodes, and another set of textures into the ‘B’ input of those nodes too. The rest you can set up the same way as before, except for the ‘Transition Phase’, you plug in the green channel from the Vertex Colour node instead of the red channel. Now to bring it all together, your first set of HeightLerp results go into the ‘A’ of a Lerp, and the results of the second set go into the ‘B’. Green channel of the Vertex Colour plugs into the ‘Alpha’, and the results of the Lerp nodes go into the corresponding material output.

P.S. sorry for the spaghetti graph!

I went back into Max and added a lot more vertices to the walls that are visible so I had more control over where I could paint and how it blended together. Looking at reference, this type of damage tends to occur heavily around windows and other wall features and happens less where it’s covered, such as just under the roof.

1 of 2

I can alter the contrast of the two different types of damage through the scalar parameters that were set up in the material. 

Mask-Based texturing

I was originally shown this workflow by my old university lecturer and it is really useful for texturing large objects with tiling textures. Texturing large meshes in Substance Painter can give really low res results, so this is a really great method to avoid that. It also helps to avoid material draw calls that you would get by texturing a large asset using multiple material IDs. It started in Substance Painter, where I created custom masks that I applied later on in the engine. I used this method on the utility pole in the scene, so I’ll use that as an example. 

I created 4 custom masks for:

  • Metal
  • Rust
  • Wood damage/discolouration/variation
  • Metal roughness
1 of 3

These were exported as a channel packed texture for further optimisation.

In the engine, I imported the channel packed masks and lerped all of the tiling textures I was using together, with each corresponding mask as the alpha. Setting the texture maps up as parameters allows me to create instances of this material to use it on other objects, rather than building it again from scratch. This shows how it works for one set of maps - the albedos - and the method is repeated for the others. 

Note how the fourth albedo is just a darker version of the base wood, so that was controlled with a scalar parameter. Also, the alpha channel of the mask isn’t used because that was made purely for roughness variation.

This GIF shows the process of each set of maps being added in order of albedo - normal - roughness - metallic.

Trees

My final trees were made using Speedtree. Initially, I made some using the free program TreeIt, but there seemed to be a limitation as to how many leaves you could add. There wasn’t much going on in the background of the scene, so it was important that I could make them as dense as possible. Because of this, I had to bite the bullet and grab Speedtree, which is definitely worth it!

I decided to make Maple trees, as I really like their shape when they’re covered in leaves. I like to save optimisation until the end, as Speedtree makes it really easy to decrease tri count using the optimisation slider for each geometry node. Here’s a GIF showing how I built them up. I was constantly comparing to reference during the process to get the silhouette of the branch forms right.

And here’s a comparison of the new and old trees both in the scene.

The leaf material set up is nothing special, but I was really happy with the results it gave me. I use the SpeedTreeColorVariation node for a tiny amount of colour variation, and the subsurface is a multiplication of the base colour. I intended on modifying the tree normals in 3DS Max, but after importing them into the engine straight from Speedtree, they already looked the way I wanted them to. I made sure to make the material two-sided so they looked even denser than they did in SpeedTree. 

Lighting

I didn’t want to change much when it came to the time of day/lighting direction of the concept. The lighting is just made up of a stationary skylight and directional light, with the first thing I did being matching the position of the directional lights so I could get the shadows on the house. I couldn’t settle on an indirect lighting result throughout the production, because I really liked the contrast of the front of the house and the shadows, but also wanted it to make sense. I feel as though I struck a good balance in the end. 

For the four trees next to the house, I saved on baking times by forcing them to use volumetric lightmaps, rather than setting them to Moveable. After setting the volumetric lightmap detail cell size down to 30 in the Lightmass settings, I was still able to get some decent shadows in the tree canopies. The rest of the trees in the background were set to moveable and used mesh distance field indirect shadowing. The rest of the Lightmass settings looked like this.

Using the Detail Lighting viewport, I was easily able to identify the areas that were being directly lit the most. These were the front of the house/roof, the road, the bins, the utility pole, and the mailbox. I was particularly interested in these areas because I knew I could play with the roughness to catch the eye. 

For the front of the house, the material blend helped with this, as the bare wood beneath the paint was a lot rougher. As it was the focal point, I wanted to add something else, which is where I decided to add the broken pipe. Although straying from the concept, it enabled me to push the narrative of this being a poorly maintained house further. I was able to add some nice roughness and specular highlights to this. This was also textured using the mask based texturing process mentioned previously. For the road, I had to change the skylight from static to stationary to be able to see the roughness variation I had given it in Substance Designer via specular highlights. This also really benefited the bins. Damage decals were used across the entire scene for further contrast.

Post-Processing

The post-processing settings that I used in the engine all had minimal values, as I like to get as much done independently as possible. Some of the settings used were:

  • Bloom
  • Slope
  • SSAO
  • SSR

I also clamped the min and max exposure values to have consistent lighting when working

However, I made some significant changes using a colour LUT. I took a screenshot of the scene and took it into DaVinci Resolve to edit it. I prefer using this over Photoshop as I feel you get more accurate control.

Compared to the concept, the scene had a lot of red in the highlights, particularly on the front of the house, and the midtones, so I mainly altered the Gain and Gamma settings, as well as a bit of editing to the shadows. This a before and after editing in DaVinci.

Before vs after colour grading:

After applying the colour LUT in the engine, I was able to get the same changes on all of my shots.

Challenges

Overall this scene took just under 3 months to complete. As with all of the work I’ve done, this scene had its fair share of barriers that needed overcoming. As previously mentioned, there were many aspects of the scene that I ended up redoing multiple times, and the scene was definitely far better off for it. As always, the more you practice the better you’ll get, and remaking something from scratch is doing exactly that. It may not make the biggest difference on its own, but when you do it multiple times across the scene you can see huge changes. Sometimes, after spending hours focusing on one area, it can be hard to identify where to make improvements. This brings me to my last point.

Importance of Feedback

I got into the habit of posting WIP shots regularly in different art communities and forums. I can’t express how much of a difference this has had on the outcome of my work. As long as you’re comfortable with artists pointing out areas of improvement, which is a great habit to get into in itself, it will help to improve the quality of your work a lot - and you learn a great deal in the process! Others so often point out things that I would never notice, allowing me to learn frequently, and ultimately grow as an artist. There’re so many forums and Discord servers now where it costs nothing to get valuable feedback from people in the industry. For environment art in particular, I highly recommend the Experience Points Discord, the DiNusty Empire Discord, and the Polycount forums/Slack. 

Afterword

If you made it this far, thank you so much for reading! I’m by no means an industry professional and I'm learning every day, but I hope you could take something valuable away from this article. I’d like to thank 80 Level for giving me the opportunity to give a break down of the scene, and hopefully, I’ll be back in the future to do another. Feel free to follow me on ArtStation and connect with me on LinkedIn. I’m also open to any questions about the scene or anything else, so don’t hesitate to get in touch.

Until then - be kind, wear what you want, and always ask for feedback.

Tom Turner, 3D Environment Artist

Interview conducted by Arti Sergeev

Keep reading

You may find this article interesting

Join discussion

Comments 0

    You might also like

    We need your consent

    We use cookies on this website to make your browsing experience better. By using the site you agree to our use of cookies.Learn more