The Lighthouse – Real-Time UE4 Breakdown – Daniil Osipov
Hello! My name is Daniil Osipov.
I’m a self-taught 3D Environment Artist from Dzerzhinsk, Russia. Currently, I’m in my final year at Nizhny Novgorod State Technical University studying Information Technology in Design.
My interest in 3D began in 2015 under the impression of Mike “Beeple” Winkelman’s works, and two years later, my focus shifted to real-time 3D graphics. After participating in the Artstation’s Beyond Human challenge, I fell in love with creating game environments.
Most of all I’m attracted to the synergy of technical and artistic aspects. Making cool scenes, gives you the feeling of being a technical genius, and allows you to tell a story or evoke an emotional response from the viewer.
In this breakdown, I’ll walk you through my process of creating my real-time scene.
Before starting a new project, I always set a main goal, that is then broken down into many smaller tasks. This way, I can predict in advance the time it will take to accomplish the scene. It’s important because this method allows you to detect the different stages where there may need to be additional research.
For this specific project, my main goal was to create a scene using Megascans Ecosystem. To maximize its possibilities, I needed to learn more about the material editor and get a basic understanding of working with lighting inside Unreal Engine 4.
I then chose a great concept by Jacub Сervenka (https://www.artstation.com/jakubcervenka) to experiment with.
Though I got already solved composition, lighting scenario and general mood, I still had to find references to bring more believability in my art. It was also worth to define the level of quality to aim for. Environments from game titles with a similar mood are more than good for this purpose. As the main source of photos and screenshots I prefer to use Pinterest, most useful references I try to keep organized in Pureref.
I started blocking the scene out right away in Unreal Engine. The first thing I added to the project was a mannequin for height and proportion measures. Then I set up the camera to get an image with the same aspect ratio as the original artwork. Using Landscape brushes and primitives, I got a rough representation of the scene.
At this stage, it is crucial to define the sizes and placement of objects. Otherwise, it may leed to significant changes in the following iterations.
After this step, I exported all the meshes into Blender, where I polished the ground with sculpting tools and made the first pass on the lighthouse.
Since I mainly used Megascans, I had already added some assets into to the scene, to get a more defined look and set basic lighting. That way, even at an early stage I already had a general mood and was able to work more artistically with colors and light contrast.
Most materials in the scene are based on basic materials, which are created automatically when the asset is exported from Quixel Bridge to the engine.
For the ground master material, I implemented Vertex Painting in Red, Green, Blue and Alpha channels, Displacement and Dithering. It may look complex, but the whole material was made up mostly from multiply and power nodes.
To minimize that spaghetti feel, I highly recommend you to use material functions for operations like changing the brightness and contrast of textures.
The only major change I’ve made to the Quixel Blend Material is the setting of consecutive mixing of materials through HeightLerp nodes. This node allows you to control the contrast of mixing boundaries.
Alpha channel was used for the Liquid Layer that is painted on top of all other materials.
With that material, I could blend up to five materials. This works well in hiding textures tiling and adds variation to material.
After that, I decided to add waves to the scene. I used a texture atlas with alpha, which was generated in Photoshop from Base color with black and white filter and added curves.
From that setup, I also made less contrast Height texture for using it in Bump offset inside the engine. That texture is then mapped onto a curved plane in Blender.
The next big step is to adjust the lighting. Initially, I planned to have a more dramatic lighting setup following the concept, but in 3D it looked too flat and didn’t sell enough depth because of the same brightness in lights. That’s why I decided to draw more attention to the lighthouse itself, making the middle ground less bright.
All lights in the scene are dynamic, this is because it would take a long time to bake lighting in such an open location. I used a ray-traced global illumination that helped to fill shadows with some light. The scene was lit mostly by spotlights with a small inner cone radius, it created a much softer and natural final look. Sky Atmosphere with the sun just above the horizon defined the general direction of warm light.
To add cool tones I placed a HDRI Backdrop with a cloudy sunset texture. I tried to accentuate the lighthouse with light even more to show its rounded shape with the help of shadows and highlights from metal parts. In other words, guide the viewer’s eyes directly to the lighthouse and eliminate significant distraction from the middle ground.
For this purpose, I also added volumetric clouds that framed the lighthouse.
As you can see above, the composition of the scene has changed a lot.
The original composition was too easy to read, the lighthouse was the only point of interest and the foreground felt boring. In order to keep the viewer’s attention a little longer and to give some space to explore, I decided to rotate the camera and create movement in the frame by adding the road that led to the lighthouse.
Adding the road direction creates some tension in composition, following which we get to the next points of interest. Each fence with its repetition in the silhouette keeps the eyes from leaving the picture.
By drawing guiding lines, you will notice that I tried to keep the viewer’s attention moving around the central part of the image as long as possible. Since the lighthouse is the brightest part of the composition, the image starts reading from that very point.
Red lines describe guiding lines, Blue shapes – points of interest.
Based on the Gestalt principles, our brain tends to group objects by their proximity to each other. An isolated group of objects immediately calls attention to itself, so that’s why I placed the broken boat and rearranged stones at the foreground. To balance the composition on the left side and add more depth to the scene I added a mountain to the background.
I paid a lot of attention to the different types of contrast as I felt this was one of my weak points. The ability to use this artistic tool will certainly have a positive impact on the perception of your artwork.
For simplicity, I stick to a ratio of 70/30 – 70% of medium and dark tones and 30% of highlights, and so on.
For checking tonal contrast, I used a grayscale filter in Windows. Posterize filter in Photoshop is also a great way to visualize shapes in different tones.
At this step, I first, locked the exposure in the lens settings by adjusting the Maximum and Minimum Brightness to 1. For color correction, I lowered the overall contrast in the Film section, just to get rid of the extreme clipping in shadows. Then I tweaked the sliders to compensate the green shade and stopped at the result that satisfied me.
Final touches I made in Photoshop using the Camera Raw Filter. Be sure to work with smart objects to make the process of using filters nondestructive.
Heres what the final result looks like:
This project was super fun and challenging at the same time. I learned a lot on how to manage such scenes including how to iterate more efficiently on composition and lighting.
As a small bonus, I wanted to share some must-read resources for learning:
CG Cinematography book by Chris Brejon
Alex Senechal’s Intro to Design tutorial
More images and videos from this project can be found on my Artstation page:
Thanks for reading and I hope you found this breakdown useful!
Huge thanks to Ilya Ivanov for providing feedback and GamesArtist.co.uk for the great opportunity!