2024 | SPRING REGISTRATION NOW OPEN! 

Only One Week Left to Register, Enroll Today!

All articles

Recreating Uncharted's Environments with UE4 and Substance

Yury Vorobiev did a breakdown of his amazing fan art environment based on Treasury Courtyard from Uncharted 4.

Introduction

Hi, my name is Yury Vorobiev and I currently live in Saint-Petersburg, Russia. I received my master’s degree in mathematics and applied informatics, after that dive into 3d art. Before graduation, I had a job as a 3d designer, where I model hi poly ship equipment and create training videos for them. For a start, it was an interesting job, but I felt that I was closer to gamedev. So after this job, I went to an art bootcamp, where we created game-ready character within 6 weeks. There I learned the basics of sculpting, proper hi poly and low poly creating, baking and texturing. And now almost a year I work as a 3d artist.

About the Project

I have long wanted to try myself in the environment art and also I felt I needed a stronger portfolio piece to replace older works, so I started looking for some cool concepts and ideas on the internet. I wanted to create a not too big scene, but with a lot of vegetation and also man-made stuff. So what can be better for this idea than not Uncharted, and I dwelled on the idea of recreating treasury courtyard in UE4.

The main goals were to learn more about modularity and environment creation, substance designer for creating tileable materials. And also learn how to make great vegetation, because it is very important in modern games.

I started by gathering a lot of references to have a clear view of all the details and proportions. At this stage, my friend Alexandr (many thanks to him) helped a lot, by lending me his ps so I can make all the necessary screenshots. For vegetation, I found many references of a tropical forest.

For the planning stage, I created Trello boards and calculated the approximate time for each stage. Architecture planning took about  1 month; 1.5-2 months for vegetation; about 1 month for statues; 1.5-2 months for props and texture them; 1 month for Substance Designer; and 1 month for all Unreal stuff.

When the planning phase was over I began blockштп out main architectural elements inside 3ds Max. I started with side columns and built the remaining proportions. I’ve imported everything in Unreal to feel proportions in the game in relation to the character.

Workflow With the Assets

My blockout was quite detailed, so I only had to decide what geometry will be baked and what will be left for the tile textures. I made high poly and then baked them. And for the tiled assets, I just added support edges where needed. In light green color I marked all architecture that uses tiling textures.

I wanted to achieve the feeling of a long-abandoned placed. And also to show that there was a fight. And for this, I destroy some of my architectural elements.

For this stage, CGMA class Vegetation and Plants for Games by Jeremy Huxley was super helpful and amazing. I started with sculpting simple grass leaf inside Zbrush. Than polypaint it and made several more. After that, I tweak every leaf a little and bring more variation to the color. And finally with grabdoc get albedo, normal and opacity textures resolution 2k. I also generate AO inside Substance Designer and roughness map from albedo with little tweaks. And finally, inside 3ds Max I joined leaves to form different grass shapes.

Next step was to create some flowers. The technique was pretty much the same.

After that, I started making trees and tree roots. First is a tree trunk. I made them inside 3ds Max using splines crossing each other. And when trunks are finished I started to create canopy same as grass. When making meshes in 3d max I tried to minimize unused texture space on geometry for optimization purpose.

Also, I made several ferns, lianas, ivy, bushes, and more flowers.

For vegetation, I create simple master material in which I can control subsurface color and color variation. Be careful with Speedtree Color Variation, because too high values will cause bizarre variation.

All grass, flowers, and canopy in the scene where placed with unreal foliage painting tool. I use a small hack to paint easier: I made invisible help planes, they only have a collision. And I paint ivy and grass on them.

Props

For the props, I set a deadline for myself about 2- 2.5 months. So I will not be stuck too long on one asset. My modeling approach is based on a low poly workflow. First, i make low poly asset in 3ds Max, then from by adding support loops, I get hi poly mesh. And after that unwrap with UVLayout. For texturing and baking assets in this environment, I used Substance Painter.

For some assets I use parts from my previous works, with them I made Avery sign and capital.

Other assets built from scratch. I started with unbroken meshes.

When these props were ready I just broke them. Noise modificator was super helpful for this.

For statues, I had a slightly different pipeline. I sculpt them inside Zbrush without diving into the details, i need only what affects the silhouette. Then i use Zremesher, unwrap resulting mesh in 3ds Max.

After that import mesh inside unreal and adjust plaster material with moss blend. That was a lot faster and economical for resources than sculpting everything super detail, bake and manually paint all assets.

I made a fairly simple master material in which I can tweak brightness, saturation, contrast and change color.

Lighting

Lighting has always been a difficult topic for me, so I wanted to improve my skills in it. Luckily I discovered super helpful tutorials on youtube called Unreal 4 Lighting Academy. It helps me a lot in understanding more about light, different lighting techniques and post processes. First of all, I turn off auto exposure for better viewing light.

I decided to use baked lighting. Started with directional light and set up the right angle for it. Also, I added SkyLight, LightmassImportanceVolume, ExponentialHeightFog and default unreal sky.

There is a useful function Lightmap density. With it help you can figure out lightmap resolution for each asset. Blue colors – low resolution, green – higher and red is extremely high. With its help I set up all my lightmaps. For all assets, in the shade and in the distance I don’t need too high resolution, so I set them lower, and others I keep in green color. Since I do not need too much light data on every leaf I also keep them pretty low on lightmaps.

Next I setup SkyLight. Nothing too complicated here, just added hdri from epic courtyard, add some color to the light and change lower hemisphere color.

Because I was working on version 4.17 multiple light bounces where calculate not so correct (in 4.18 epic’s fix it) and objects in the shadows where too dark, but this does not happen in real life. So to fix it I downloaded multi-bounced sky lighting by Luoshuang ( https://forums.unrealengine.com/development-discussion/rendering/112827-lightmass-multi-bounced-sky-lighting?140006-Lightmass-multi-bounced-sky-lighting= ) Comparison on RealisticRendering demo. Left – old one, right – with downloaded fix 10 bounces

When I had approximate light settings I setup auto exposure in post process volume. Proper light setup is very repetitive, and so I returned many times to the directional and skylight to tweak some settings. And when I go for work, I left my light to build up. I ended up with this lightmass settings.

After all light setup was finished I proceeded to post process volume and started with color grading. First I try to make LUT’s, but I realized that for me it is not very convenient and I use built-in color grading wheels.

When I was done with color grading I add some more effects.

And as a cherry on the cake, I placed sphere reflection capture where it needed. Not so optimal, but works for me.

Materials

All tileable textures I made in Substance Designer. Creating them was a great challenge for me. For the scene, I created cobblestone, marble. plaster, moss, bark, and few different types of ground.

Every texture I start with normalmap. For the bark, I created 3 small barks and arranged them with tile sampler.

When I satisfied with normalmap, I move to albedo and roughness. Trying to keep my albedo not too contrasty and not very dark for the proper lighting reason. Later I can also tweak my textures inside unreal with the master material.

I didn’t use trims a lot, only for a few elements. Instead of them I set up 2 blending materials inside unreal for ground and plaster. So I can add some variation to my architectural elements and ground

Technical Aspects

When I started making this scene I knew, that I don’t need good real-time performance, so I don’t care a lot about LOD’s and optimization. For example, my pc not super good and I have 12 fps in the scene at 1920×1080 resolution, which is quite good for not optimized scene. And there are almost 6 million triangles. To increase fps I would definitely create 2-3 LOD’s for my assets, especially for the grass and statues, they will benefit most from this. Because of the static lighting light don’t affect performance too much. However lower and optimize some lightmap resolution can help. And too much unnecessary reflection captures will cause fps loss. Also, disable some effects in post process like Depth of Field, Screen Space Reflections will have a positive impact. Setup draw distance for some meshes also would be a good idea.

I hope you enjoyed this breakdown. Thanks for reading and good luck!