A great look at the production of complicated natural 3d environments with bright lighting.
Libertalia is one the most gorgeous parts of Uncharted 4. Sander Vander Meiren, 3d artist from Belgium, recreated a small part of this hidden land in Unreal Engine 4.
Intro
I was born and raised on the beautiful rural west side of Belgium. Since I was little I was fascinated by nature and architecture. That fascination grew into a love for environments in games. Later, I decided to study Digital Arts and entertainment in Kortrijk to achieve my goal to become an environment artist.
Currently, I’m in my senior year at college and looking for an internship to finalize my education.
Uncharted Scene
Since environment art is my passion I needed to up my portfolio, so I decided to create an environment inspired by the amazing work in Uncharted 4 (Libertalia to be more specific).
With this project, I wanted to tests my skills and learn software that is widely used and speed up my workflow.
Next to improving my skill set, I wanted to see how far I could push the Unreal Engine. So I tried different approaches to see which is the fastest and gives the best result.
Production
I started drawing some small designs in Photoshop and on my good old trusty sketchbook, but I quickly realized that these designs didn’t really work out. My drawing skills didn’t translate what I had in my mind so I chose to approach it in a different way.
I started blocking out my idea in Unreal with the handy additive and subtractive BSP brushes, which allow me to create a cool looking concept without having the trouble of matching everything as in the 2d image. Of course the main design is heavily inspired on the Uncharted environments.
The main workflow for the other assets was creating a block out in 3ds max, sculpting details in Zbrush, unwrapping in 3ds max or Zbrush, baking and texturing in Substance Painter. Eg. Modular rock:
Foliage
Actually the foliage was one of the easier assets I created. As always, finding reference is one of the most important parts of the creation process. When I found the perfect ref, I started looking for textures for the leaves of the foliage I wanted to create.
Then I started off by modelling a few planes in 3ds max and positioning them until it had the main shapes I was looking for.
For the texture process I used Substance B2M to get the normal info from my textures, and Substance Painter to add colour variation, damage, etc. For the banana plant stem I created the textures from scratch using multiple layers of colours and generators to mask them, then I added “dead detail” with a simple paint brush on an empty layer.
Next, I exported the graypacked textures and imported them in Unreal. To simulate the subsurface scattering on my foliage I created a shader using the “masked” blend mode and “2 sided shading” model. Then I multiplied my base colour with a parameter (Subsurface amount) and plugged it into the subsurface colour input. This parameter allows me to change the subsurface amount on the go.
Materials
For these materials I wanted to get my hands on Substance Designer, it was quite a challenge to learn it, but within a few days I was able to understand the core of the program and create my own procedural materials. To tackle such a material, I began by creating the masks for my material. Layering is key in this process, know how the real world material is produced/built up. For example, to create my raw plaster I wanted to add the streaks of the application to the plaster. With just a few nodes I was able to create a convincing looking base layer.
Using these mask you can easily create the normal, roughness and base colour.
Using the Unreal Substance plugin, I was able to easily import the textures and tweak them in engine, so no need to go back in designer or Photoshop to tweak the values. This saved me a lot of time. To finish the materials, I blended them in unreal using vertex paint which allowed me to have unique looking materials without having to create unique textures.
Quixel Megascans came in very handy to create the smaller foliage that needed to be made hastily. I just skimmed through the massive Quixel library and downloaded the, to me, best looking textures. One of the great advantages of this library is that all scans come with additional maps (roughness, AO, SSS, etc.) + some images are up to 8K! some 3d assets even come with great brush alphas to toy around with in Zbrush or Photoshop. But I didn’t just download the materials.
I still processed them in Substance Painter to add more damage, colour variation, etc.
Post-production
No external programs were used during the post-production. Colour grading, bloom effects, exposure and contrast were all done in engine using the post process volume.
Recently I found out about the distance field AO and shadows, which creates soft shadows and better AO. This feature is kind of hidden and not very well known. You can enable distance fields in the project settings in the render section.
To setup the main directional light I wanted to emphasize the pathway through my scene. I basically wanted to guide the player along the road.
This lighting setup also gave a nice contrast between the road and structures.
The directional light alone was not enough. I wanted to simulate some bounce lights by just adding simple point lights with the “cast shadow” option turned off and “inverse scaled falloff” turned on. This set the light intensity scale to lumens, useful to create fill lights.
I also added some point lights to force some subsurface scattering to happen since some foliage is not directly in the light.
Lessons Learnt
One of the more notable things that I have learned is that when creating materials, you really need to understand what process it goes through to create it, what happened to it.
This way your materials will be way more believable. I also learned that investing time in creating designer materials and modular assets is really worth it. It will save a lot of time in the long run when editing the level itself.
I also learned that Unreal is filled with hidden gem features. Eg the distance fields, it’s handy to know that they exist and how to use them.