Working on a Modular Lighthouse Environment in UE4

Working on a Modular Lighthouse Environment in UE4

Craig Richards did a detailed breakdown of his latest UE4 scene The Lighthouse inspired by Dear Esther: modeling in 3ds Max, texturing workflow in Substance Suite, work with Megascans, and more.

Introduction

My name is Craig Richards and I am an Environment Artist from the United Kingdom. From as early as I can remember I have always been very passionate about art. But realistically the very first time I delved into the world of art for video games was all the way back in 2005-2006 when a great deal of my spare time was spent creating custom multiplayer levels for Warhammer Dawn of War – which was a very popular RTS back in the day. It was a simple crude level editor but contained some amazing tools in there for the time – I remember how enjoyable the process of putting together an environment was and how rewarding it was to see people enjoy the content I created. I think this was the initial moment that sparked my interest in environment art.

From an educational perspective, I enrolled in an Illustration course at Plymouth College of Art, to pursue my interest in traditional art. At the time I merely saw art for video games as a cool hobby of mine and not a subject I could seriously consider studying or even pursuing as a career.

After freelancing for a number of years on small projects as a 2D artist, I decided to further develop and focus on a 3D art orientated portfolio. I felt this is where my main passion lay and it would be a dream come true if I could turn my hobby into a career path. I spent a year or so on this endeavour and eventually applied for a position as a 3D artist at Rebellion Developments. After being hired and landing my first job in the industry I began my work on titles such as Sniper 4 and Zombie Army 4 as a Vehicle and Environment Artist. It was a fantastic experience to finally be able to work on bigger titles and in one of the prominent UK game studios, and I am still going strong at Rebellion today.

1 of 3

The Lighthouse: Start of the Project

The initial inspiration for The Lighthouse certainly came from a fantastic indie game Dear Esther released in 2009 by The Chinese Room, the setting of which was a desolate island in the Outer Hebrides. I remember being blown away by the atmosphere that artist Rob Briscoe created and the way he formed the environment to illustrate the narration throughout the game. Since playing the game I've always wanted to work on an environment of that same style and setting, and finally found an opportunity to do so this year.

Early on, I decided that I wanted to create a scene where I could have a camera fly through and make a complete circuit of an environment rather than a fixed camera position scene. Naturally, this meant a larger environment and much more time needed to be devoted to the project.

The environment is separated into three different points of interest, – the boathouse, the cottage, and the lighthouse tower – each one leading the eye to the next increasing in height each time. In a way, these also helped break the project up into three smaller bitesize chunks to work on semi-independently of each other. This also influenced and helped me organize my main references for this project:

A great deal of reference was even taken from youtube videos – there's a lot of fantastic exploration channels who investigate abandoned structures and travel to remote parts of the world such as this.

Modeling

In terms of the structures in the environment, I wanted to modularise as much of this as I possibly could. I decided to split the lighthouse pieces up into multiple modular objects. I thought it wise to split these up into quarter and half partitions when in Unreal Engine I could simply duplicate and rotate each section 90 or 180 degrees to build the circumference of the tower.

The main walls were created as one chunk of low poly mesh and I used three tileable height blended materials from the Megascans library.

Creating modular assets

I always begin by modeling the basic shapes in 3ds Max. Before taking this further I usually bring the mesh into Unreal Engine for testing, to ensure the object is of the correct scale and shape and whether it performs in a modular way as intended. If this all looks good then I take the mesh into ZBrush for sculpting. I start by performing a dynamesh operation on the mesh and generating my polygoups. These polygroups allow me to isolate individual stones if I need to during sculpting; my workflow from here on out is fairly concise.

I began chipping away at the mesh with the trim smooth border brush, mostly at areas that would likely see heavy damage and deterioration, like the edges and corners. Next, I made use of some of the fantastic alphas available on textures.com to imprint cracks and stone damage onto the sculpt in areas that seem the most logical. Atop all of this, using a standard brush I imprinted a broad stone surface height map over the entire model to unify the look of the sculpt. This also provides some useful micro detail in the normal and curvature that Substance Painter can make use of in the texturing process.

I wanted the cottage to have a much less uniform look to it, it needed to look distinctly different at each angle it was viewed from. I also wanted a large chunk of the house to look as though it was decaying away through time, perhaps showing evidence of strong wind and storm damage. This meant for the most part modularity wasn't particularly suitable for this part of the environment. Of course, there was still a good deal of re-use of assets here such as the window frames, doors, chimney, etc.

The base model of the house was built as one chunk of mesh that had been sculpted in ZBrush and decimated down to game resolution. Atop this was placed a tileable base material of rough plaster along with a second and third height blended material to break up the repetitive pattern. Assets were then placed atop this base mesh such as the roof, window frames, doors, chimney, etc.

UVs and Preparing Models for Texturing

I have always unwrapped my UV maps in 3ds Max for the most part making use of the box mapping function. However, in the past I have even brought more complex meshes back into ZBrush to unwrap the UVs there, ensuring the 'use polygroups' function was enabled.

Once my UVs are where I want them to be, the next stage is organising my smoothing groups – I use a fantastic script for 3ds Max that creates custom smoothings groups based on the existing UV shells of the model (link).

Next, I prepare the cage for baking. The first port of call for me here is to ensure the low poly is triangulated and there are no overlapping vertices anywhere on the mesh. This is just good housekeeping for later in the workflow, xNormal requires the low poly and cage to have an identical number of vertices and triangles. I've seen a multitude of techniques for creating the cage, but I simply duplicate my low poly, add a push modifier to the stack, and try to cover as much of the high poly as I can. Areas where the high poly reference model is still sticking out are simply fixed by dragging out individual vertices and faces on the cage.

I still use the old tried and tested approach of utilizing xNormal to bake out my base texture maps – Substance Painter has come a long way in its baking workflow but I personally feel xNormal is able to handle the baking of high poly models more efficiently.

Texturing

Substance Designer and Substance Painter were the prominent tools I used for the texturing process. Occasionally Photoshop was used for preparation and additional post-processing of textures.

For a lot of the structures in the scene, I started by making a base albedo and roughness texture in Designer. The aim of this was to create some larger shapes and tonal variation for the stone, plaster, and metal surfaces. For example, in the case of the rusted metal atop the lighthouse, I created this graph to produce my base albedo and roughness. This material requires an input of a baked ao/curvature and normal map to produce natural locations for the rust to accumulate – the Designer file was saved as an .sbsar file and brought in as a base layer for the texturing process in Painter.

In Substance Painter on top of these base albedo and roughness maps, I used scanned texture data from Megascans and textures.com to add that much needed realistic surface texture. Atop that further finer highlights were added with custom Painter masks – it's important to not go overboard with highlights, however, particularly if you are trying to go for a realistic art style. Too much and you will lose that realistic aesthetic that you're going for and end up with a more cartoon-like painterly style.

It's also important to highlight the coolest parts of your sculpt – why put all the effort into sculpting things like cracks and chipped edges if they get lost in translation through the texturing process? This is why I try as much as possible to bring out these details using the albedo and roughness channels.

For example on the stone trims here I coloured the chipped and cracked areas of the stone at a lighter shade than the rest of the mesh to signify them as less exposed to the elements due to those parts of the stone having recently fallen and chipped away.

At the end of my painting workflow, I see what I can add with stencils – for example, on the stone and metal, I added leakage stains and set the layer style to 'overlay'.

Substance Designer was also used in some cases to create tileable textures for the scene, predominantly around the harbour section of the environment. I had a good deal of the first-hand reference to draw inspiration from when building the materials here, in particular the stone wall and cobblestone that made up this section of harbour wall I had photographed earlier in the year. I drew on a good deal of techniques I had learned from Daniel Thiger's Substance Designer Fundamentals series here.

Scene Assembly

The first step in creating the scene for Unreal 4 was creating a whitebox proof of concept model. I started out in World Machine to try and produce interesting island shapes that I could use, it certainly took a few attempts but I settled on this jagged triangular-shaped design. Atop this, I modeled basic building shapes to represent my focal points of the scene.

The whitebox mesh was brought into Unreal Engine 4 – this helped me judge whether the scale and composition were working, and allowed for some early lighting tests. I had a rough idea of the assets required for the scene but seeing the whitebox in-engine really helped me fine-tune just what I needed.

I knew that the first asset pack I needed was a rock pack; although they are not the focal point of the scene, the terrain formations would still make up 60-70% of the scenes mass so it was a logical place to start with. I decided on creating five distinct rock formations from scratch using ZBrush and Substance Painter.

Sculpting from scratch obviously has the advantage of being able to conform exactly to what you have in mind – potentially making the assets more versatile and usable in an environment compared to scanned data. But this was also a personal decision I made because I had never set about sculpting an asset pack of rocks before so I wanted to explore that direction to get that useful experience.

I also ensured that each rock had a material layer blend setup to allow for moss and barnacles to accumulate on the top facing surfaces of the rocks where needed.

Megascans

For the most part, Megascans were used to fill in gaps in the terrain and architectural asset packs that I had made. I was missing objects such as the smaller rock and stone debris that accumulates in the crevices between two opposing surfaces. The foliage atlas maps and foliage meshes also proved very useful – along with the general tileable surface textures available there.

Obviously the quality of the scans available is top-notch and the variety of assets in their library makes it a must-have for any artist embarking on an environment project.

I also really like how Megascans provide separately baked normal maps for each LOD – it gives a lot of flexibility in being able to choose the mesh resolution you want. In this case, even though it was for portfolio purposes, I always like to work with plausible game resolution meshes, so I usually opted to use the provided LOD 1 to act as the render mesh for my objects.

There were certain gaps in what I was able to obtain in Megascans, however, for example, the seaweed. Quixel has some beautiful seaweed scans but it seems as though those scans are meant to be used in mostly underwater scenes. I wanted mounds of accumulated seaweed that had been washed up against the harbour walls and rocks at the base of the island.

Last year, I happened to be on the south coast of England exploring beaches and sightseeing and I stumbled upon a beach with a great variety of seaweed that had been washed up along the beach and rock faces. I grabbed as many different variants of seaweed as I could, and placed them in a carrier bag to be taken home and photoscanned. Naturally, these smelled terrible but I was undeterred!

I was light on any sort of studio class scanning equipment – I had no access to a ring flash or lens diffuser to remove the reflection from the photographs, only my trusted Nikon D3300 DSLR camera. But I did the best with what I had and took the photographs in an area roughly covered by shadow.

The advantage of scanning this myself was being able to form the seaweed exactly how I wanted, creating large piles of weed and thin sparse clusters. I even draped some pieces of seaweed over a box (to represent the seaweed being draped over the wall of the harbour in my UE4 scene).

These images were brought into Reality Capture for processing. They certainly weren't the cleanest scans for reasons stated above, but usable – with a bit of post-processing in Photoshop, on the normal and the albedo in particular.

Using Megascans with assets built from scratch

If you are mixing scanned assets with assets you have made yourself then you may see an obvious disparity in quality and believability between the scanned data and your own work. Realistically, this issue will always be there to an extent, but you can diminish the effects of it with good sculpting and texturing work.

I used a few techniques to ensure the rocks were as realistic looking as I could make them. The number one thing, naturally, was to use as much reference as I could during the sculpting process.

1 of 2

Working with references

During the texturing process, the easiest thing that can be done to ensure compatibility between scanned and handmade assets is to ensure both types of textures are colour matched – which is a quick and easy operation that can be performed in Photoshop.

I also used scanned tileable rock textures as base textures while painting my rock and stone assets in Substance Painter. I studied a good deal of granite rock albedo textures with a fine-tooth comb – I looked out for where the dark and light shapes appear, where highlights and edge damage naturally occur, what gathers in amongst the deep recesses of rocks, etc. This really helped determine how I went about the texturing process.

Lighting the Scene

I purchased a great asset pack from the Unreal store called Realistic Dynamic Sky System. It includes access to volumetric clouds and some excellent HDR skybox textures. These can all be set up to create a dynamic time of day system.

Initially, I was keen on moving forward with a foggy night-time atmosphere and wanted to go for that dour atmosphere I was so inspired by earlier in Dear Esther.

But upon testing the various skyboxes and cloud settings I immediately fell in love with the early to mid-morning setup that could be created with this asset pack.

Due to the nature of the setting being completely abandoned I had no pretext to position additional lights in the form of electric lights or candles. I tried to rely on the sun and the skylight as much as possible. Positioning the sun angled behind the island helped a good deal in creating some interesting backlighting and light piercing through the height fog.

Much was accomplished with the lightsource and height fog alone, but further changes were made using the post-processing toolset to bring out certain colours and add a little extra contrast.

Cameras for Showcasing Your Work

I wanted renders with a cinematic look and a video of the environment, so I made use of the cameras available in Unreal.

When using cameras, it is of critical importance that you understand where your focal point is. Even in a screenshot or render it's wise to ensure the camera is ranged correctly to capture the focal point, with the foreground or background potentially being out of focus. A lot can be done through the environment composition and lighting to lead the eye but camera focus can make a big difference too.

This is the first project in which I used a moving camera, but in the space of a weekend or two, I learned as much as I could about the cinematic sequencer and how to position camera rig rails for the camera to navigate around the level. I ensured the focus range dynamically changed based upon what I wanted the viewer to see here. For example, at the start of the video, the camera is focused on the harbour wall in the foreground but as soon as the camera starts to move I transition that range to the next focus point of the boathouse.

Craig Richards, Environment Artist

Interview conducted by Arti Sergeev

Keep reading

You may find this article interesting

Join discussion

Comments 0

    You might also like

    We need your consent

    We use cookies on this website to make your browsing experience better. By using the site you agree to our use of cookies.Learn more

    Working on a Modular Lighthouse Environment in UE4