Marek Zaranski provided a breakdown of the Weather Station project, discussing creating a real-time weather system with five types of weather and various moods inspired by old-school sci-fi visuals using Unreal Engine 5.
Introduction
Hi everyone, let me quickly introduce myself before diving into the project. My name is Marek Zaranski. I am a Technical Artist and the leader of the Environment Art team at Drago Entertainment, based in Cracow, Poland.
As long as I remember, I had a strong inclination towards the arts in general – music, books, paintings, etc. My winding journey to game art led through a few foreign countries and art forms. After graduating from university in Cracow (with a completely non-art related major), my then-girlfriend (now wife) and I had a chance to live, work, and study in both London, UK, and Chicago, US. In London, I attended a couple of furniture design courses, which was my first ever exposure to 3D software – a CAD tool SOLIDWORKS.
I believe this first experience of a non-destructive, modular, parametrized workflow strongly influenced my approach to creating art to this day. This is the reason why technical art resonated with me so much. It goes without saying that it took years and a lot of hard work on my portfolio to get my first gig.
Once I entered the industry, the path became much clearer. I was lucky enough to join a company that let me expand my knowledge and passions. Eventually, I became an Environment Art Leader and Tech Artist at the same time. Creating pipelines, creative and technical planning/problem solving, and feedback loops – now occupy much of my professional time, and I love it.
Weather Station Project
The reason why I wanted to do this project was to solve the issue I’ve had every time I created personal artwork. I usually picture it in a few mood settings, lighting scenarios, and weather conditions at the same time. I had always lacked an easy-to-use system capable of working both in the editor and in real-time, in-game conditions, essentially, a “save system” for current work progress, allowing me to go back to the previous state of the scene without a hustle.
Other Considerations & Objectives
- One-person-manageable pipeline for rocks, foliage, and other props – creating such a pipeline was critical due to the large scope of the project. I had to focus only on the things I wanted to show while setting up a realistic quality bar for myself.
- Creating a collection of reliable smaller tools that will let me integrate local lights, VFX, Primitives (meshes), decals, etc., to work with the weather system.
- Modularity – the system had to be easily transferable to my other, future projects, without the need of taking per-project assets for a ride.
- Creating a retro sci-fi scene that is not strangled by realism to let me test how far I can push the system.
I assumed that I was creating a system that takes into consideration some actual gaming-level issues like reasonable optimizations of CPU and GPU, interaction with the character, etc. I knew that this bit would require much effort, forcing me to do the work that would not be actually presentable in still shots. I was however, not interested in creating anything for the sake of still shots.
I planned it out very carefully but gave myself no particular deadline as I also decided to use this scene as a case study for mentoring. The project benefited a lot from the insights and guidance that I got throughout the mentorship, allowing me to look at my scene from a different angle. I learned a lot.
How Weather System Works
In this paragraph, I will dive deep into the inner workings of the system. It might get a bit techy for some but I will try to simplify it by visualising important parts with a mind map.
I took my time with research and reference gathering, eventually landing on a concept of five weathers, which are loosely inspired by some specific cinematic shots, book covers, or game art, all rooted in the sci-fi genre (with a strong Star Wars influence). I named them:
- Clear Sky
- Overcast
- BR2049
- Rise Of Jedha
- Out Of Space
Later in the publication, I will refer to these names.
Possible Weathers/Moods:
The heart of the weather system is, of course, the manager. It controls how long the weather lasts and when and how it changes.
I called the component that provides a transition between the weathers Smooth Operator. It lets me load, unload and blend between parameters, variables and settings that are unique to each weather and are stored in the children of abstract class of generic weather.
The Smooth Operator component consists of six modules that control the changes of particular pieces of the scene like sky, clouds, post-procession, etc.
To run the system from editor level, I use one master Editor Utility Widget:
While eventually all of the modules (functionalities) are being used in all weathers/moods, from a project development perspective, it looked a bit different.
The artistic needs of each individual mood forced me to add more and more modules (functionalities). More modules = More unique variables for unique weathers.
To put it simply, artistic needs were the primary drivers for technical solutions, not the other way around.
Clear Sky Daylight & Late Evening – Baseline Moods & Color Calibration
This is probably the most default weather of them all, as there is very little color grading involved. The goal was to achieve a vintage, almost cold, old-school look of a faded photo.
It was the first one of weathers/moods and it provided the baseline for texture balancing. While creating it, the sun was set at noon for better color visibility. I was also adjusting albedo values to its proper PBR range. The same goes for the clouds, sky, shadows and other critical parts of the scene.
The texture PBR calibration was, of course, done mostly in Base Color, Buffer visualization window.
There are many articles on the color adjustment procedure. At the bottom of the page, I enclosed some links that I found very comprehensive and helpful. It was very important to do PBR adjustment before I even touched any other, sometimes more complex, moods.
While “golden hours” usually provide “heart-melting” visuals, they also tend to obscure the true values of textures. Once the values of the texture and other channels were closer to their final forms, I proceeded to Clear Sky Late Evening mood.
Some references for all shots of Clear Sky weather:
The most important for the late evening mood was the distinctive gradient of the sky caused by Height Fog. Return of the Jedi was the main inspiration for it. The noticeable difference in values is a result of many iterations on the project as a whole. Averaging saturation and brightness between these supposedly unconnected light setups was something to take into consideration.
Overcast Weather & The Scene’s Elements Assigned to Appear Only in Particular Weathers
One of the functionalities of my weather system is “showing” and “hiding” elements of the scene (custom actors) depending on the weather/mood that they are assigned to.
A good example of this functionality is Overcast weather (my 7-year-old son’s favorite).
By its nature, it is very monochromatic. Late in production of the project, this was pointed out to me by one of the artists on the Discord community server – DiNusty’s Empire.
I decided to add custom craters filled with lava. The goal was to provide some details that contrasted with the general tone of the picture. I created eroded meshes in Gaea and assigned them to Overcast weather.
The mesh was exported from Gaea, with several masks needed for custom master material:
Overcast Late Evening mood:
RB2049 Weather – Unique Post-Processing for Each Weather
For a long time, I wanted to do my take on the Iconic Las Vegas mood from the latest Blade Runner movie by Denis Vilneuve, where Mitch Paulson was the colorist. I’m a huge fan of many movies he contributed to, probably being subconsciously drawn into them by his art.
BR2049 weather:
From an artistic perspective, the most challenging part of the BR2049 mood was color grading and balancing the fog values. To me, this mood is supposed to be produced by some extreme MIA scattering of the light photons. Bits of sand, and possibly post-radioactive clouds are scattering the white light, leaving mostly its red spectrum in directly illuminated areas. This process was hard to replicate using the scattering method only, and I had to turn to some extreme post-processing.
Tech Art-wise, this mood forced me to add a post-process module to my Weather System. I tried a few ideas for real-time blending. Eventually, I settled on using two independent (unbound) Post-Process Volumes and blending the weight between them when the weather changes. It was the only reliable method that I could produce that did not generate any visual bugs.
The graph below illustrates the procedure in six simple steps:
Rise of Jedha weather:
Global Coloration Module – Tinting Large Groups of Textures Uniquely for Each Weather
The last bit of the weather system that I want to talk about is the Global Coloration Module. It provides real-time adjustment of saturation and tint of a particular group of textures for a given weather. Each asset (material instance) is set to be in one of 4 groups:
1. Flats
2. Verticals
3. Flats Foliage
4. Verticals Foliage
It may sound a bit abstract, but generally, it is a very simple concept. For example, the sand layer in landscape material is in the Flats group, and the weather station is in Verticals. All grasses and small bushes are in the Flats Foliage group, and trees and large bushes are in the Verticals Foliage group.
Base Color and Saturation values for every group are controlled individually by the Parameter collection. Then, the Parameter Collection itself is controlled by the Weather System.
A simple Material Function enables me to connect materials to the Parameter Collection and pick the right group for the particular asset.
The result lets me quickly control the vast amounts of assets for each weather separately.
Base Color of assets in Overcast weather:
Base Color in Rise of Jedha weather (note that most of the values stay the same, except for the slight tinting of the sand):
The base color of Out Of Space weather:
Rise of the Jedha weather, Late Evening:
Out of Space establishing shot, Daylight:
Some other tools/assets I created in the process:
- Landscape material with all its features
- An in-game widget that displays the loading weather state
- Various functions providing RVT functions connecting the weather system with elements of the scene
- Various master materials, i.e., spaceship master material, displaced macro landscape details master material, etc.
- Self-made Local Fog Actors, with an option of fake god rays responding to sun direction.
- The Spaceship and Ancient Weather Station itself
Third-party Tools/Assets Used
I utilized Ultra Dynamic Sky Plugin, one set of textures from the Minerva project, two sets of textures from Megascans, a few albedos of planets from NASA and Turbosquid, and one font from DaFont.com.
Conclusion & Tips
I want to take this opportunity to reach out to people who are still looking for their own path, as I used to.
Two years after my first experience with 3D software (in London), I worked in a small custom furniture shop in Chicago. I had a chance to practice my manual skills by working with wood and my 3D design skills on all sorts of 3D software needed to finish the job. One of these was Autodesk MAYA. That was the rabbit hole that eventually led me to a career in game development. So, if you are an enthusiast thinking about a game dev career, or you’ve already made up your mind and have started working on a portfolio, I have some tips that worked for me.
Pay for stuff. In my experience, paid courses are likely to be of much higher quality. People who made them know what they are talking about. They also likely put much more effort into preparing the information they share in a meaningful way. On the other hand, there are tons of free materials that you can find on streaming platforms. The information there is often fragmented, very conditional, and sometimes of poor quality. There are many exceptions, sure. All I am saying is that you have a better chance of succeeding if you invest your time and hard work into courses that are better.
Do mentorship. Paying for mentorship worked for me more than once. There are some options out there. For me, The Mentor Coalition and DiNusty’s Empire are super good. Invest in yourself; it pays off.
Lastly, I want to give credit to those who supported me along the way: mentors who let me see the art with their eyes. One of these mentors is amazing Chris Radsby who helped me early in my career to put all my various experiences together, and my loving wife – Karolina, for putting up with me working on my project late into the night.
Links:
Albedo values for PBR:
PBR, Color space conversion, and Albedo chart
PBR Albedo guide for Lighting Artists (but not only)
Mentorships:
The Mentor Coalition
DiNusty’s Empire