Trying to steal Vray's thunder.
I'm gonna wait for Steam version
We’ve talked with Kimmo Kaunela about his amazing new Unreal Engine 4 environment, inspired by the amazing work of Naughty Dog. Kimmo is a master of PBR workflow and he showed incredible quality of materials (Substance Designer) and amazing lighting. This is an amazing example of high-quality environment design.
I like to learn new things and after my personal environment projects I wanted to make something small and useful. This time that meant studying different ways to make textures. I love Naughty Dog´s style to do textures so that was something I tried aiming for. I wanted to put those textures in use so I decided to finally get UE4 and start learning. I also had pretty good idea what kind of environment I wanted to build. I wanted to mix indoor/outdoor areas and buildings with overgrown foliage. First it started like a fast test but it ended up being a huge project taking almost a year.
For the last 4 years I have been using Unity at work for mobile games. I’m a person with no experience about programming so I feel kind of lost with Unity. If I need to make cool looking shader then I need to know how to write one or if I want to create a door that opens when I press a key then I need to write a code for that. I´m happy to be part of a team that has awesome coders that knows these things but I still want to be able to make cool and functional art by my own. UE4 is perfect solution for this.
First time when I opened UE4 I felt like I was in the candy shop. Features that I wanted Unity to have were there plus many more and the UI felt easy to use. This is the thing I love about UE4. Tools that help artist to get his/her idea up and running with node based editors. It´s a very powerful feeling when you have a vision and a tool to make it happen. It’s amazing to see all those amazing projects that people are doing with Unreal Engine 4 and really shows that Epic made a right choice for making it free and full of visual tools to work with.
Right now I have a pretty good overall picture about the graphics side of things but I really would like to learn more about the blueprint system. I have been testing it for different small things and I really like it. It´s very well integrated into the engine and blueprints works similar how prefabs in Unity.
Another nice thing about UE4 is the fact that it’s getting better and better with every update. I also like how Epic shares their assets that they use for different demos. A good example is the Kite demo or different shaders that they used for Paragon and now people can use them and learn more.
When I start any project I want to make some sort of story and blockout first. This project was no different. It’s a good idea to test ideas on paper first because then it´s easy to see problems and plan things to avoid most of the issues later on. This time I made a fast top down sketch to see how things would look like and to get a rough idea about the scale. Once that was done I converted it into 3d with 3ds max and put everything into right scale. One thing that I did a lot was exporting the scene into UE4 and test it with fps controller to see how it felt. This way I was making sure that the blockout was going to right direction.
Then I started to separate that blockout into smaller layers. Like with my previous projects I used the three layer system with “Structure, Medium and Prop” layers. I also organized them into three bigger groups like “Diner, Shop and Outdoor” Then I also wanted to make sure that my 8 years old pc could handle all of this so I broke things into smaller scenes. I could also use these layers for naming like “Diner_Strucure_Roof_Panel”.
Then I started collecting reference/inspiration shots from web and set up different boards with RefBoards. One big inspiration source was ghost town Pripyat. It was very interesting to use Google Maps and travel there to see how buildings behave when nature is overgrowing. Perfect way to get the right mood going. Then it was just modeling the final models and replacing placeholder meshes.
Next part was the lighting. It was the hardest part because it´s a little different than what I was used to play with in Unity. Also UE4 has a lot of settings that makes it possible to create different looking setups and make beginners feels confused. Luckily Epic has awesome documentation and forums so I was able to get it looking right. I ended up using baked lighting for indoor areas and dynamic lighting for rest of the environment. I added light portals for windows and tweaked a lot of Lightmass settings to get the indirect lighting looking right. Kite demo had a pretty good light blueprint that was perfect for my needs. Then I rotated the sun light to get interesting looking shadows and added hdr texture to the skylight for better ambient lighting. My system was too old to use any DX11 features like distance fields ambient occlusion, LVP etc… One thing that I want to point out when you are working with the lighting is that make sure your post process volume do not affect the lighting at that moment. When you have the lighting working then you can start playing with different post process effects.
Once the lighting looked good and the structure models were in then it was time to start set dressing. I modeled huge set of different props and elements that was easy drag & drop and create things look more believable.
Diner was the first place that I made to its final look. It was my second attempt to create a diner scene. Last time I made one in Unity 3.5. This time I wanted to make it feel like a real american diner that was abandoned some time ago and now things are starting to break. I tried to find the most interesting looking diner reference shots and combined them into one.
For me environments are like characters. They can have stories and especially abandoned places can hold a lot of mysteries. This was something I wanted to add in the diner. There are different posters on the wall that are showing how things looked before it was abandoned. Broken glass and coffee cups are telling that something was definitely happened there and now someone had even put the old jukebox back in action with a car battery.
Contrast Between the Interior and the Open Environment
The transition between interior parts and outdoor environment is very noticeable. It was coincidence at first but then I started to like it because it create this nice mood change from bright outdoor to dark and dusty looking indoor.. Whole scene is using the same post process volume but interior places are using baked lighting and that makes this contrast.
Modeling was pretty basic. Example for cars I first made the hi poly with sub-d modeling and quad chamfer with smoothing group as a mask in 3ds max. Then I used ZBrush for breaking things like adding dents and scratches. Low poly was done using 3ds max graphite tools. Last thing before texturing was to make uvs and bake maps. I used xNormal and Substance Designer for this.
For texturing I used Substance Designer because I knew that the scene needed more cars so I could use the same graph for all of them. I really like using Substance Designer because it’s very modular tool and flexible. That’s why I fully used it to make tree trunks and asphalts because then I could create variation easily just by tweaking the starting values to get interesting height information and software did the rest.
From the start I knew that there would be a lot of foliage modeling. I took some time to find out how other artists are handling that and then tried to find optimal way. I ended up modeling everything and then baking down maps like normal, base colors, ao and sss masks.
I found a pretty fast way to texture hi-poly versions of the foliage. 3ds Max has different noise maps and when combining those with basic UVs I got pretty good results fast. Cool thing about them is that they all fully editable in max so I could create different maps easily just by changing colors. I did all the modeling in 3ds max and used Mental Ray for rendering final textures.
That was the first step and then I needed to model low-poly cards/planes. I tried to cut all the useless transparent areas off to keep it more optimized and avoiding unnecessary overdrawing in engine. Then I made different sets of them. I added interesting looking grass cards together and made around 8 different sets that I then exported into UE4. I also did ivy and beard moss this way.
Then I started adding them into the scene. UE4 has very nice foliage painting tool that helped to paint grass and flowers. For the ivy and beard moss this was not the optimal way so I just simply modeled and placed them by hand in 3ds max. Trees were also added with foliage painting tool.
No matter how old you are, it’s always nice to break things. It´s actually not that trivial to do that in virtual space because you have to think about different forces, materials and how everything affects the end results.
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 down. Sunlight is making things to get really dry, damage different surfaces and desaturate some colors. Rain water would find it’s way into tight spaces and causes different effects depending on the material like rust and moss. I also found out that one key aspect was that outside things are usually more contact with water and other nature forces. Interior parts on the other hand have a lot of dirt and sand because wind is moving dry ground and usually it gets inside the buildings if the windows and doors are open. This was my base idea what I wanted to achieve with UE4 materials and my textures.
For texturing I used Substance Designer a lot. I also tried to re-use the same graph and it was pretty easy to do so thanks to material ID map. I used Photoshop for basic models because it’s fast and I have a lot of experience with it. With every tool I wanted to keep the PBR workflow clean and didn’t want to add too much damage details like moss because my UE4 materials could handle that. I also made few generic looping textures that I could use with different masks and to make generic materials.
I ended up making few master materials that had everything I wanted for that specific material. I also tried to think my materials with same way like I organized the level so there is structure, medium and prop materials. All of them had some parts common like the different texture inputs: base color, normal and metallic, ao, roughness that I packed into different RGB channels. I also added a lot of switches because not every material instance needed all of the features.
For foliage and fabric materials I used the UE4 “two sided foliage” shading model. Then I wanted to have a control how thick the material is so the subsurface scattering effect would look good. I created SSS mask texture for controlling this effect. I want to give a big shout-out to Simon Barle for sharing his awesome Huangshan Mountain foliage shader in his Polycount thread because that helped a lot! I also wanted for my trees to have small color variations depending on the position and did that with “Object Position” node so it will break the repetition a bit. Last thing I needed was a simple vertex offset animation that I could tweak with vertex colors.
Structure master material was the most used one since it was able to add damage material on top of the base one. I ended up using the “world_aligned_blend” node and then I basically chose between dirt, rust or moss depending where the object was. I could rotate models and the dirt would stay on top of them. I also used detail maps that made things look better when camera gets close. Generic textures are really handy for this detail level. Structure material had three different layers so I added different tweakable tiling parameters for all of them.
Soil master material was the heaviest one because it was able to blend three different materials + water with fresnel reflections. This was used for floors and ground surfaces. Blending was controlled with vertex colors and height maps helped to make transitions look more natural. My 8 years old system didn’t handle DX11 so it was a big no for tessellation. Since I already had height maps for the different materials I decided to add parallax mapping for all of them.
I also had master material for glass, decals and particles but those were very basic ones.
Post-production and Skyboxes
Last thing I wanted to tweak was the atmosphere. This consist of different fogs, post process effects etc.. I added “AtmosphericFog” that helped to add more depth for things that were far away and “ExpotentialHeightFog” for overall fog. It felt still a little too flat so I decided to model few planes and made a material that used “CameraDepthFade” node to hide/show simple smoke texture depending how close the camera is. These were awesome for turning the scene look more abandoned and contaminated. Not very optimized because the huge overdrawn but really makes a huge difference. I also used that same material for faking the god ray effect coming from windows inside the buildings. Simple panner node made it possible to animate this smoke texture so it looked like the polluted air was moving there. God ray effect also needed a simple particle system with bright dots to illustrate the flowing dust particles.
I didn’t want to go too crazy with post processing effects. Most important one was chromatic aberration and small tweaks to color grading. Instead of adding strong values in post process volume I tried to play with light colors and angles to create the mood that I wanted.
Project is still work in progress and I´m going to post the final shots to my ArtStation page.