Karim Yasser has told us about the Gljúfur project made with Unreal Engine, explaining its composition and lighting in detail.
Hello, I'm Karim Yasser, a Lighting Artist currently working at People Can Fly. I began my career in 2019 as a Level/Lighting Artist and later specialized in technical lighting. My job involves setting up lighting for levels, creating tools to streamline production workflow, and fixing technical issues.
In July, I became an Unreal Authorized Instructor partner for Epic Games and that helped me to use my skills in lighting, environment creation, shading, and color grading to bring the "Gljúfur" project to life.
In this article, I'll go through my workflow and take a closer look at the "Gljúfur" project.
Initially, my inspiration for this project stemmed from Sergey Vasnev's work on "Dry Lake." I admired the meticulous attention to detail and the mood he established within his project. This prompted me to explore Icelandic canyons for inspiration, drawn by Iceland's breathtaking natural landscapes. I gathered various images from Pinterest to immerse myself in the mood and essence of Icelandic scenery.
To structure my mood board effectively, I divided it into key elements: background, foreground, house, riverbed, and tone/mood/atmospherics. Among these, creating the background and the house were the most significant challenges, particularly because I aimed to craft them utilizing Megascan assets.
A valuable tip I’ve learned is that while drawing inspiration from 2D/3D concepts is valid, real-world references, especially from nature, enhance artwork significantly. Constructing believable virtual environments requires studying natural references as they add authenticity and realism.
Recognizing the strength of the triangle as a compelling geometric shape, I aimed to create an engaging composition that would captivate the viewer's attention. You can notice that especially in the background where these large canyons were added together.
Here's a breakdown of the steps I undertook in the process:
This video demonstrates the progression from these initial steps towards a more refined and polished appearance, showcasing the evolution of the composition and detailing the iterative process used to construct the scene.
By following these steps and incorporating various elements and adjustments, the house construction within the scene aimed for a harmonious integration with the overall composition.
Now, we will start with the most interesting part of the environment creation, which is lighting!
Lumen is a fully dynamic global illumination and reflection system that is designed for next-generation consoles. Lumen renders diffuse interreflection with infinite bounces and indirect specular reflections in large, detailed environments at scales ranging from millimeters to kilometers.
Here are the required project settings for Lumen:
Why do I use Lumen? Well, it is a new solution for calculating dynamic global illumination, and in my personal projects, I use dynamic lighting and I don’t use any precomputed lighting as I don’t need to save performance for these projects, and I want to see what is going to be in the final render without waiting for hours baking the lights.
So, Lumen is a perfect solution for me to use. Instead of adding many fake bounce lights that simulate indirect light, Lumen will calculate the global illumination much faster and more accurately.
Before starting to add lighting actors, I adjust the base color values of the meshes to the proper PBR values for both metals and non-metals. I do this by using a custom viewmode I created before. Simply, it is a post-process material that has some mathematical operations to calculate whether the material’s base color is in a specific sRGB range.
There are many articles and videos that explain that in detail, and why it’s 0.18, you can just search, and a ton of resources will pop up.
The sky is very important to deliver the mood. I started with an HDR texture from the Skies LA pack but then I used another sky that had more detail and contrast, which made the lighting look more interesting.
With an HDR sky, I add a sky light component to capture the lighting data from the HDR texture. I set it to movable to get soft shadows from Distance Field Ambient Occlusion that uses Mesh Distance Field to be calculated.
Tip: I usually adjust the HDR texture brightness in its material instance to get a brighter sky and thus a brighter indirect light. I do this instead of increasing the sky light intensity to high values to get proper and consistent reflections over the environment. Adjusting the sky light intensity is not bad but sometimes the reflections will look inappropriate.
It’s used as a sun. I used it mainly in this project as a large fill light that has a very soft shadow because I use many spot lights then as highlights.
As I was not working using manual exposure, I turned off the eye adaptation by setting the minimum and maximum Exposure Values to 1 and started initially with an Exposure Compensation value of 1.
At this time, the grey ball will be used, I place it anywhere in the scene, but I make sure it is way too far from the ground just to make sure no indirect light hits the sphere and I can then visualize the numbers correctly.
Using the Eye Adaptation (HDR) visualization mode, the difference between Exposure Value in both light and shadow was around 1.5-2, which represents a contrast ratio of 2:1 that is most likely for overcast mood. I eyeballed this value even before using the grey ball, but I used this grey ball as a calibrator to make sure I was heading to the right track and my light setup was consistent.
I always use these large spot lights in my projects to add more highlights to the environment, make some shadowed areas brighter, and push the overall lighting greyscale values even further.
When I start adding these spot lights, I convert the image into greyscale first by setting the saturation to 0 in the post-process volume settings. This is a faster approach to get better results in less time.
If the greyscale values are good, the final image look will be good as well. In greyscale mode, it is easier to detect if the lighting looks flat or not.
After adding these lights, I go back to the default saturation and then start adjusting these lights' colors to match the tone I need or the color palette of the lighting.
I may need to delete or adjust some lights' location/direction after that, it depends on what I see.
Using fog cards adds a lot of depth to the scene. I decided to use EasyFog, which was created and designed by William Faucher. It has a lot of texture variations which is perfect for many environments. It is also easy to use to get a specific desired look. Here is the scene before and after adding the fog cards:
This is the final step in the lighting process in which I start adjusting the overall colors a bit. I didn’t use any LUTs, I tried to boost unreal color grading tools to achieve the desired look. Here are my post-process settings:
Usually, the lighting workflow has these repeated steps all over almost every environment and it may change a bit. This doesn’t necessarily mean that these steps are mandatory, you are free to test what fits your scene to achieve the desired result.
I spent around 2 days to finish this project. It didn’t take a lot of time as I already have the assets ready, and it has been a very long time since I created an environment, so I was so excited to finish it and I enjoyed working on such a project.
At the end of this interview, I would like to recommend some resources for artists who are willing to study and learn more about lighting in depth.
These resources are very helpful and helped me a lot throughout my journey in lighting:
This article also discusses the lighting workflow in detail as well as the exposure and contrast ratio.