Making of The Last Stop
For some time ago I had an idea about this medium sized environment that would mix interior and exterior environments and has a lot of different nature elements mixed in there too. Previously I only made scenes that were either small interior or exterior environments so this was very interesting challenge. UE4 also turned better so I wanted to make this scene and learn how to use the engine. I thought that it would only take few months of my free time (I only do my personal works on weekends) and it would be done. It turned out that I was dead wrong and ended up using almost full year for it. I wrote this “small” making of when I was doing my bakes and compiling shaders so the language can be a bit rough.
NOTE! You can download the whole UE4 project so it´s easier to keep in track with the article. Project can be downloaded here.
I usually start everything by thinking the back story. It´s much easier to do rest of the actual work when you have a solid story where to model. I usually try to think what year it is, what place, what was happened and what is going on now. I really like to tie it into reality because that will make it more believable.
I decided that the year is 2008 and the place is West Virginia type of environment. The story is about first fusion reactor that started it´s operation and soon after that exploded. Radiation made the whole area uninhabitable so the nature started to overgrow. There could be some hints about the evacuation and looting that happened after the accident.
This time I wanted to make a medium sized environment that would focus on few buildings and a forest around them.
I decided to draw a top-down blueprint of the whole scene. It took like an hour to sketch very basic elements into A4 paper. It´s still a good idea to use real-life pen & paper because I personally feel that then I don´t have any distractions. After that it was all about converting that into 3d block out in 3ds max. I needed to change some parts of my original design because the scale was wrong in my sketch. It was very good idea to use enough time for doing a block out because then it was very straightforward to start making the final assets.
What I ended up doing In the block out was separating different areas. There were three main section: diner, outside area and the shop/garage section. When I got these parts blocked out then it was time to start thinking different modular pieces and where I needed to model unique stuff. I also used simple colors in models to visualize main model layers like walls/ground, props/vehicles and nature elements. I usually use this technique for all of my projects to keep things organized. Trees were just a simple primitive models to get an idea about the overall scale and the feel.
I really like to keep my stuff organized from the start so when I got the final block out done I made some layers in 3ds max. This helps a lot because then I can give good names for models that are in the same layer and hide different parts of the scene if I want. I used very poor pc with 8gig of ram so I ended up separating the scene into smaller scenes to make sure that I don´t run out of memory. Then it was pretty straightforward to model final assets.
One important step when making block outs is to export them into the engine. It doesn´t matter how bad it looks at this stage but it really helps to make sure that the scale is right and it feels good. There are always some things like different camera settings or lighting models that makes a huge difference and something that looked awesome in 3d modeling package can now look very bad in engine. I tested it in UE4 FPS mode and found some parts I didn´t like. It was pretty fast to change things and try it again until I was happy with it.
I also collected huge amounts of reference photos. There are awesome looking abandoned places in the world but what I used the most were photos from Chernobyl. One cool tool for reference stuff is RefBoard. It helps a lot to lay down all the reference you need, save those board for later use and it will always stay on top of everything else so you can use it with different tools. This really saved my life because I only have one monitor.
Lighting was something that I struggled a lot with In this project. The main issue was my lack of knowledge about UE4. I had a lot of experience with Unity lighting system and I have also used UDK for some of my personal project but UE4 had so much stuff that I didn´t even know how they will affect to the lighting. Fortunately Epic has made very good documentation so I found some answers there.
When I got the exterior lighting part looking right then my interior lighting looked wrong. I also started playing with the post-process volume and started baking lightmaps. I tweaked almost every setting in the directional light and sky light. Results were not what I wanted. At some point it almost looked like a bad sci-fi movie. I wasn´t sure where I wanted to go from there so I took a little break from the whole lighting task.
Then I realized that I was trying to make a lighting setup that was much more complicated than it needed to be. I needed a sun and a skylight. My system didn´t support DX11 so I couldn´t use all the lighting feature like DFAO, lighting volumes etc… I used mixed solution with baked and dynamic lighting. I ended up using the system that Epic´s Kite Demo has. It´s a blueprint that has everything I needed with only the important settings visible.
Last part of the lighting was to get more shadows. Naturally these came from tall trees that I placed next to the buildings.
Remember that post process effects affects a lot for the lighting colors and mood so it´s best to disable those when working with lighting. Once you got the lighting look good then it´s safe to unhide those effects.
The art of breaking things
No matter how old you are it´s always nice to break things. It´s actually not that easy to do that in virtual space because you have to think about different forces, materials and how everything affects the end results. Also this time nature was the one that caused the destruction and damage.
I never really done anything like this so I took some time to think what are the main things that cause things to rust and break.
First thing that I needed to decide was the time between the point when people used to live there and when buildings and stuff were at pretty good shape and this stage when things are starting to break. My reference images showed that 15-30 years could work here so I went with 20. I also decided that the buildings and cars could look something like now days since the accident happened in 2008. This was the base that I needed.
Then I started to think how different materials behave. Metals would rust or become oxidized. Tiles and similar parts could fall down and break. Fabric materials would collect moisture and become heavy and fall. Sunlight is making things to get really dry, damage different surfaces and desaturate some colors. Rain water would find it´s way into concave parts and cause different effects depending on the material like rust, moss… I also found out that one key aspect for this formula is that outside things are usually more exposed with water and other nature forces. Also interior parts have a lot of dirt because wind is moving dry ground and usually it gets inside the houses if the windows and doors are open.
The final ingredient for this formula is gravity. I´m sure there are some cool math stuff that simulates this but I really enjoy thinking it inside my head. Okay so the inner roof is made of some sort of fabric plates that worked well with air cooling when they were new but now they are filled with moisture and are getting very heavy. Heavy stuff * gravity * 20 years = roof is collapsing.
I used this formula with all the stuff I made for the scene. I also made my materials to work with this concept and added functions like the baked ao mask that I could use for adding dirt for inside objects like floors and the damage material blend that I could add on top of the materials to simulate moss or similar effect.
Foliage was something I really wanted to learn with this project so once again I took some time to study different ways to make grass, trees, ivy, hay etc.. I ended up modeling everything and then baking maps like normal, base color, ao. 3ds max was perfect for this. Thanks to the awesome graphite tools I could model and paint models in a very organic way. Remember to use instances because then you are able to make fine tuning later on for all of the leaves, needles etc. Also remember to have variations in leaves, grass blades and so on. It takes some time to do different versions but really pays off in the end.
Then I made simple materials in max using basic noises with fast uvs and rendered things into textures. Mental ray is enough for this and remember to save different render elements like shadows, colors etc.. These will help a lot when making the final textures. Once that part was done then I simply modeled the final cards and exported them into UE4. I tried to make things as optimized as possible but still tried to keep things look good. I also rendered backdrop trees into cards to save tris count and overdraw.
One trick that I used with tree trunks was a bended uvs. This breaks the looping feeling and it really makes a huge difference with pine type trees. Just don´t go too extreme with it because it will start looking too stretched pretty fast.
UE4 has really good foliage painting tools and it´s a powerful feeling to paint grass and trees. Since outside area has dynamic lighting I could instantly see end results and then paint trees in a way that gave me the most interesting shadows. I really liked making foliage because it really affects how the scene looks.
I made tree trunk textures with Substance Designer. It was a real time saver because I only needed to make a pine trunk graph and then rest of the trunks were just a tweaked versions of this. This way end results matched perfectly together and I could just vertex paint and blend these together.
Set Dressing the scene
I knew that this scene needed a lot of different props. These will add more believability into the scene and make things look deserted. I didn´t want to use too much time for making these because they will be just a small part of the environment but I still wanted to make them right so I modeled hi-poly versions first and then low-poly models. I made broken bottles, cans, cardboard, boxes, canisters.. Texturing was done in Photoshop and I made a huge texture atlas that had all of the props so this way I could pile them and it would still use just a one material and this helps with lowering draw calls.
I also made different paintings inside the diner. Since this is a personal project I could put anything I wanted there. This time I added a poster from the game I was making at work and some sort of menu where you can order nuclear waste coffee or energy milk. This way there are some easter eggs that will reward viewers for their careful observations.
Then there are cars. Naturally people have left different type of vehicles there. I made few different type of cars to add variations, pick up and hatchback types. Texturing these were pretty easy because I could use the same Substance Designer graph. Only thing I needed to tweak was the base values.
One thing that will make your life much easier is to use blueprints. They work similar how prefabs in Unity. Basic idea is that if you are planning to use the same object multiple times in the scene then it´s a good idea to convert that into Blueprint. This way if you need to make changes like change lightmap resolution or similar then it´s going to update all of the same Blueprints.
Another thing that I wanted to add was different logos for the diner and the gas station. I just simply made test in Photoshop with shapes and when I was happy the results I just used that as a base for modeling. Another thing that made scene a little more interesting.
This was 100% personal project where I wanted to learn new engine and new workflows but I still wanted/needed to optimize it because my poor system and I think it´s part of the challenge when working with real-time stuff. Sure polycount and texture resolutions are getting higher and lighting getting more complex with better hardware but there are a lot of small things that you can do clever and still get away with it. I work in a mobile game industry so I have these bad habits to avoid transparent stuff or trying to make very tight cutouts to make sure I use as few transparent pixels as possible. I Try to make texture atlases so I can combine models and batch them to save draw calls and so on. I didn´t wanted to start making LODs because I already used way too long time with this project and the scene wasn´t that big. After all this is just a personal project where I have a little more freedom in terms of optimization.
Texturing is very important and I didn´t want to make things to look generic damage stuff. I also wanted to have the most optimal tool for different things. Photoshop is still a valid tool for texturing but I also wanted to use Substance Designer because of it´s procedural capabilities. I ended up using Substance Designer for all the key assets and looping textures and Photoshop for secondary stuff that was very fast to make. I also used a lot of texture atlases to combine meshes together.
If you are using Photoshop for PBR texturing then you should use a good workflow. My workflow usually goes like this:
1. Add baked maps into the document; this document will be the albedo/base color.
2. Render UV wireframe and add that on top of everything and lock it so you have better idea where different uv islands are.
3. Make base colors and give that layer a good name.
4. Use AO and normal map channels as a mask to add details. Normal map red and green channels are good with Photoshop filters and level
5. Start adding detail passes with hand painting or with photo source textures.
6. Name everything and put them into different groups so it´s easier to find the right layers and keep this workflow consistent with all of the textures you are making.
7. Duplicate content into different document and make Roughness/Smoothness, Metal/Specular maps. Now it should be easier because you have all of the
information so just delete/add details and play with levels, invert channels etc..
8. Keep testing textures as you go with a PBR renderer like Marmoset Toolbag 2.
9. Be happy with the results! You can also record some of these steps and automate the process but it´s optional.
I used base color, normal textures and I also baked roughness, metallic and ao textures into r, g and b channels and use that as a mask in UE4. I also used mask alpha when I needed to store heightmap for parallax or texture blending.
One thing that I used a lot of time was the materials. I ended making few master materials like ground, foliage, prop, structure and glass and then made material instances from those. At first I had only one master material with insane amount of switches but it ended up being too complex and hard to work with so I broke it into smaller ones. I used a lot of generic looping detail textures. This way I could have more details when camera was close to surfaces by simply tiling detail textures. This function was implemented into all of the master materials except foliage. I also used a dirt layer that used mask to blend rust or moss on top of the materials. This was really useful for the outside models. I also used a lot of switches because then it was easy to select features that I needed in material instances.
Ground material was the most complex one. It was able to blend three different materials using vertex colors, had parallax mapping supported for all of them and vertex alpha blended water with Fresnel reflections.
Note to all of you who are still using dual core cpu, DON´T USE THEM! I think 30% of the whole time went into compiling shaders and baking stuff. It´s still possible to use old hw but you just have to be patient and clever or just stupid like me.
For baking I used
xNormal because I really like to use it. I also baked some maps in Substance Designer too like position maps, curvature etc.. because it´s super fast! Foliage was rendered in 3ds max.
Cinematic or not?
A good amount of time went into testing different post processing effects and lighting. First idea was to go with the Order 1886 cinematic style but that was too dark for this scene. Then I tried to aim Rage style but that didn´t turned out the way I wanted. I came up with this style pretty end of the project. I wanted to have a warm summer feeling. My post processing volume was pretty simple and easy to work with. I also used atmospheric and exponential height fogs to add a nice layer that separated trees that were far off the distance.
I felt that the fog elements wasn´t enough so I modeled a separate models that would flow over different areas. I also made a material that fade out when player gets into the threshold distance. This added a lot of soul into the scene and was pretty fast to make. It has a lot of transparent pixels but that´s okay for this case. I also used the same material for faked god ray effect that I used inside the buildings to fake the light coming in from windows. Nice way to illustrate that the air inside has a lot of dust and particles in it.
When doing something long enough you are starting to become blind for all the mistakes. You can also loose the grip and feel lost. When this happens then it´s time to start asking feedback. Polycount is a great place but Facebook also have a lot of useful groups where you can get valuable critique that will make your work even better.
Don´t use this long with personal projects! Almost a full year for one scene is way too long. Sure this kind of projects takes a long time for one artist to finish but try to aim for smaller scenes especially when you are still learning the engine. However this scene was perfect for learning all aspects of UE4 because I needed to use a lot of different systems together since the scene has man-made objects, nature, exterior/interior, dynamic and baked lighting, pretty complex materials and so on.
There were times when nothing worked the way I wanted. Softwares crashed and then a lot of Finnish swear words filled the room. There were times when I just wanted to delete all the files that has anything to do with this project and start something new but I always found inspiration somewhere and that kept me working. I´m happy to look at the project now and it really reminds me of the hard work and sleepless nights that went into the project.
The main lesson that I learned was that whatever you do try to split it into smaller parts until you have a solid list of things you need to do and then start working on it and JUST DO IT! This kind of environment is taking a lot of time for one artist to make so focus hard on what you are doing. Don´t open Facebook or watch funny cat videos. Evaluate what you did and if that´s good then move on to the next task. Try to see the big picture and keep the detail level in balance.
Deadlines are important also for personal projects because I found out that it´s very easy to spent time on useless things. There needs to be a moment when you can say that it´s done and move to next project.
Links I used and found useful
This thread helped me a lot with the foliage stuff and materials. Huangshan Mountains by Fozwroth -Polycount
I found this useful for anyone that want to learn how to make good master materials. Scifi Bunk – Material Instancing
Awesome shots from Chernobyl. Bionerd Flickr Album
If you want to get good feedback fast then this FB group is perfect for you. Level Up Facebook group