Emiel Sleegers shared the workflow behind the Abandoned Tunnel project, talked about the asset-creation process, and explained why Unreal Engine 5 was chosen for this project.
In case you missed it
You may find these articles interesting
Hi there! My name is Emiel Sleegers, I am a Senior 3D Environment Artist and the owner of FastTrackTutorials. I have been working in the game industry for a little over 7 years. During this time, I have worked for Playground Games (Forza Horizon 3) and Ubisoft (The Division + DLC, Unannounced project). I currently work as a freelance artist for my own company which is named FastTrackTutorials. We focus on creating high-quality, real-time tutorial courses on how to create 3D art for games.
Now for some shameless self-promotion, if you want to learn how to create environments like this and much more, then make sure to follow our Discord to stay updated on our tutorial releases.
The Abandoned Tunnel Project
Due to my limited free time, I only get to make a large personal project around once a year. I am personally a huge fan of The Last Of Us and Naughty Dog in general. So, with this environment, I wanted to see if I can get close to Naughty Dog's quality while still learning a bunch of new things and of course having fun.
When I decided I wanted to do a post-apocalyptic environment I turned on my PS4, loaded up The Last Of Us, and looked at all their amazing concept art that is included in the game. After a while, I found the following concept and decided that it would become my main reference image.
I really liked the contrast between light and darkness, and I felt that creating all this destruction would be a nice challenge for me. Especially to do it with the limited time I had.
After I found my main reference image, I simply went through the classic reference gathering process. Finding lots of reference images on tunnels, collapsed buildings, and ceilings, finding individual object references, and finding material references. Pro tip: have a look at artreference.org if you need material and object reference.
When starting this environment there were a few key focus points that I had to keep in mind. The first one was that I simply did not have the time to create a huge environment, therefore I had to put clear priorities, and this is what I did. For example, this environment is highly modular (except for the collapsed hole) meaning I had to create fewer pieces.
The second one is that I made the environment work only for my camera angles. As soon as you would change the angle of the camera you will see that the environment simply ends.
For example, here is a different angle of the environment:
And the third one was that I made sure to save some time by spending less time on objects the camera never gets close to, like the bus, cars, and the smaller ceiling hole in the back.
Doing these things gave me a perfect balance between being able to finish this environment without getting a burnout and still getting a nice result that shows off my workflows and skill level.
For this environment I used the following tools:
- Maya+ZBrush for all the modeling
- SpeedTree for all the foliage creation
- Unreal Engine 5 to set up the environment
- Substance Painter+Designer for all textures and materials
Let’s go over the environment construction and split it up into 3 parts.
- The structural pieces
- The destroyed pieces
- The additional assets
For the structural pieces, I created modular walls, pillars, and ceiling pieces. These are nothing special and simply have a tillable material on them.
I then used decals on the walls and pillars to enhance them a lot more and have full control of the storytelling. These are decals like leaks, moss, and ivy vines.
Because the environment has a lot of dark parts, this was actually a big timesaver as I did not have to bother making them perfect and adding decals.
The collapsed ceiling. This is a big one and took the most skill and effort to create. The collapsed ceiling is made up out of 2 parts, the collapsed ceiling part and the rubble on the floor. These are the only 2 assets that are not modular although I still managed to also use them for the small hole in the back.
Here you can see the ceiling model as a standalone:
I am currently creating a tutorial course on how to create destruction like this, but here is a quick overview. First, I created a rough blockout so that I was sure the composition looked good.
I split the ceiling up into 3 parts and then I used a Maya plugin called PullDownIt to fracture my mesh into more realistic pieces. Splitting it up into 3 pieces just makes it more manageable for the next steps.
The next step was to take it to ZBrush, throw on DynaMesh, and then sculpt the edges to make them look more organic. After this, I used a combo of the Surface tool and Masking to give the edges an extra broken-up feel.
Now at this point, I was a bit lazy and just used Decimation Master to optimize my models because if I had to retopo them by hand it would have taken multiple full-time days. Finally, once you have your high poly version and low poly version all you must do is give the low poly some UV's and bake the mesh. I did the baking in Marmoset Toolbag 4.
Now comes the interesting part, I created a shader in Unreal that allows me to choose where I want to have my clean concrete texture, my broken concrete texture, a texture variation with cracks, and even where I want to have dirt. These masks are simply painted in Substance Painter and thrown in the RGBA channels of a texture.
I could show you what it looks like, but it would look a bit silly:
As you can see the image makes no sense but basically red means clean concrete, pink means cracked concrete, and the rest is a world space UV damaged concrete.
Then it is just a matter of adding some planes that have a rebar texture on them with a mask.
And once you put it all together you will get this as the end result:
The floor part has been created the same way only it then has moss decals added on top to give it that mossy feel. And it has some extra debris clumps and a thin tarmac layer.
Additional assets. I will keep this one short and sweet. The unique assets mostly have been baked from high poly to low poly and then simply textured in Substance Painter. I have almost no experience in creating cars, so I treated them as distant objects meaning that the quality is a little bit less.
For the foliage, I used mostly SpeedTree, except for some of the water lilies, which are simple planes with a texture on them.
Because I was going for a very specific look, I made part of the ivy plants bespoke based on the collapsed roof and the rest is more generic.
Here is an example of one of the bespoke ivy plants. I used a workflow that I developed myself where I first create a trunk and along with that some branches. I then rotate the trunk 90 degrees and place it in the location I want. Finally, I add some smaller branches and with both the bigger and smaller branches I add a magnet force along with gravity to pull them down.
Here you can see what it is supposed to look like:
After this is done, I add some basic leaves that use a leaf texture. You will learn how to do this in most introduction tutorials to SpeedTree. And I activated high-quality collision on the leaves to not make them intersect.
Here is another example where I did it for a more generic ivy plant:
So, as you can see place your trunk and big branches, add Magnet and smaller branches. Play with the settings and gravity, add some leaves with collision turned on, and then before export, hide your trunk and the first level of branches.
Once this is done, I export it to Unreal Engine. In this case, I kept the smaller branches as actual geometry to save time however if you would be making this for a game I recommend baking down the smaller branches into planes with a mask as it is much more optimized.
For the grass and other plants, they all use basic SpeedTree workflows where you throw a leaves node right away on your core tree and then along with a texture manipulate it to get the result you want:
Of course, it is easy for me to say all this but SpeedTree is a program with a huge amount of settings, Although FastTrackTutorials does not yet have a dedicated foliage tutorial I do have a tutorial where I explain how to use SpeedTree to create grass, bushes, trees, and other ground plants.
All the tillable textures are created using Substance Designer. I am using these materials mostly on the larger assets like the walls, debris, and roads.
However, although these materials work fine for the environment, I am not happy with them yet as a Material Artist, so I will revisit them later and improve them, stay tuned for that.
To be honest I did nothing special in Substance Designer for these so all I can do here is another shameless self-promotion and tell you that if you follow this tutorial you will learn every single technique I used to create these types of materials at the same quality level.
The traffic cones, traffic signs, and cars are all using unique textures that I have textured inside of Substance Painter. I shall only cover one of them as the process is pretty much the same for all the other models. Let’s have a look at our traffic sign, as you can see I had both high poly and low poly versions of this sign that I baked down in Marmoset Toolbag.
After this was done, I went straight into Substance Painter and started to define my base materials.
Once I did that, I simply used some fill layers to paint in dirt and add extra roughness information and I polished the material based on my scene.
This is how the material has been built up:
Assembling the Scene
Building the scene inside of Unreal Engine was not too difficult. I started with a blockout as always and after that, it was a simple matter of slowly placing the props. In terms of composition, it really helped that I was following a concept art image which gave me the chance to know right away what type of composition I needed to hit.
For the foliage I placed it all by hand except for the grass, I used the foliage paint feature inside of Unreal for the grass. The reason I placed so much by hand is that I wanted to have 100% control over all the placement.
The water itself is a blueprint that I got from the Unreal Marketplace. But I pretty much turned off every setting except for the base water and the wavey Normal Map details. The decals are placed using the built-in decal system and the roads use vertex painting to paint between clean and broken tarmac materials.
As you can see there is not all that much going on. Once you have your final models and decide on an angle it is just a simple matter of placement. There is a lot going on with the lighting however that makes this environment work, but I will go over that a bit later.
Luckily, I saved many images of my progress giving me the ability to create this gif that exactly shows you how the environment came together:
Rendering and Lighting
I love the new Unreal Engine 5! I mostly decided to use Unreal Engine 5 because of the new Lumen System. It makes the lighting so quick and easy, and also just in general I did not want to bother with lightmaps, so it felt only natural to create this environment in UE5 with the new improved real-time lighting systems.
As for the lighting, because I wanted to go for a very specific look, I have quite a few lights in my scene. First of all, we have a normal Directional Light, this will control most of the lighting in my scene.
Unfortunately, the new virtual shadows in UE5 do not yet support subsurface scattering which was something I really wanted to use for my foliage, because of this I used the old shadow method, which was a bit of a shame, but it still looked good. I then used area lightings to tweak the brightness in some spots, especially around the ivy.
On top of these lights, I used an Unreal Marketplace plugin for the godrays which makes it as simple as placing a plane and it will add the godrays.
For the post effects, in UE5 you will need to do a lot less tweaking on the post effects to get something looking good because Lumen takes care of most things. Sure, I added some vignette and grain and boosted up my GI settings, but the thing that made the biggest impact was the color grading. I used DaVinci Resolve for the first time to create a LUT and it was amazing.
To give you an idea, here is the scene without and with color grading:
Settings in DaVinci Resolve:
I highly recommend looking into DaVinci Resolve, as it is much easier to get the result you want there than, for example, Photoshop.
I worked on this environment on and off for around 2 months. Because I did not work on it full-time, it is hard for me to guess how long it truly took me, but if I had to have a guess, I would say between 100-150+ hours.
In general, I learned how to better deal with lighting in UE5, how to use DaVinci Resolve and I developed some new techniques on creating destruction and ivy which were better than what I had before.
The biggest challenge was probably how to create such detailed destruction within a reasonable time. And ironically enough creating the truck and the bus. I personally do not like making cars, so creating those were a bit of a pain but still good practice.
Unreal Engine 5 Is amazing, and it is much more stable than I expected, I only had maybe 3 crashes, 2 of which were during screenshot creation, and the last one was a big one where it did not allow me to save so I lost around 15min of work. But this is totally worth it when getting Lumen in return. UE5 also has the new Nanite systems which I did not use but I can see it being very useful.
UE5 feels very similar to UE4, sure the UI has changed and the lighting but for the rest, it is pretty much the same and even easier to use. All I would say is remember that it is still in early access, so expect some strangeness. Often relating to lighting, especially virtual shadows are a bit buggy so if you have shadow problems that are the first place to look.
I really enjoyed creating this project, now it is time for me to focus on creating tutorials again in which I will surely relay everything I have learned from this project. And of course, I will be doing some smaller personal projects like material and prop creation.
You may find these articles interesting