Pic 1: Time-lapse of a full cycle achieved in CRYENGINE
In this tutorial we will be going over the process of creating a day-night cycle using the Environment Editor inside CRYENGINE, which will serve as a good basis for most Earth like lighting scenarios. This will cover setting up a few different times of day as well as the transitions between them, while also staying within the boundaries of physically accurate lighting.
Before we get into the details please keep in mind that all of the parameters in the Environment Editor contribute to the final look of your level and they are all affecting each other. The influence of some of them only becomes apparent when certain conditions are met so creating a polished lighting scenario requires quite a lot of back and forward between different elements. This tutorial is not a step by step workflow, it’s aimed at giving you a better understanding of the system and the things you can achieve by controlling the parameters made available by it.
It is important to note that CRYENGINE uses two distinct fog models to create atmospheric effects. For high quality results we are using a voxel-based volumetric fog model designed to accurately interact with all entities in your level. Keep in mind that this has a noticeable impact on performance, so as an alternative for the lower end we provide the option to use regular fog. In a nutshell, Volumetric Fog allows lights, cubemaps, and shadow to interact with the global/local atmosphere, whereas regular fog does not. We will be covering both of these options in this tutorial.
As mentioned in the beginning it is important to stay within physically accurate illuminance values when setting up any lighting scenario in order to get the most out of our PBS pipeline, so depending on the result you are trying to achieve, some research might be in order as to what your illuminance values should be. At the same time getting the desired look for your environment is always the highest priority so it takes some fine tuning to achieve something that looks good but still follows real world values.
To open the Environment Editor go to Tools on the main toolbar and select the Environment Editor from the list. The layout of this tool incorporates a number of different elements. On the left side we have the Presets list, under it there are the Sun orientation/angle settings and next to these there’s the list of customizable parameters. On the right side you can find the curve editing tools, the timeline at the top, a visual representation of the selected property under it and at the bottom we have the Start/Current/End time values as well as controls for playing the cycle.
Pic 2: Environment Editor Layout
To change the time of day simply drag the triangle in the timeline to either side. You cannot go beyond the 0 and 1 values since they represent a full 24 hour cycle.
The Environment Editor contains a wide number of advanced parameters that would allow you to fully customize the lighting in your level as well as the appearance of the sky. These parameters are split into logical groups that each control different aspects of your environment.
The curve editor is used to control the transition between different values of the same parameter throughout the day. It will automatically create a key for you at the current time once you change the value.
We won’t be going over all of these parameters as some of them don’t require any changes for the generic earth like scenario we’re aiming for. We will however cover the sections that we are changing to get a better idea of what they control. We will also go through the process of creating smooth transitions as the time of day changes by using the curve editor.
In this example our goal is to achieve a generic day-night cycle at 45° latitude.
We will begin by opening up our example level day-night_cycle.cry. As you probably noticed the scene is already set up with the cycle, to start from scratch we will have to create a new environment preset. To do that right click on the left side under Presets/File view - > Add -> New and save it as day-night_cycle.xml. To open up an existing preset you will have to select Add -> Existing. Presets are saved in the \gamesdk\libs\environmentpresets folder.
Next we need to set up the Sun direction and the latitude. These values are located under the preset list on the left side of the editor. Set the Sun Direction to 180° so it rises in front of the camera. For the latitude we have to change the NortPole..Equator..Southpole value to 45. These two values are not stored in the environment preset file so you can use the same preset with different settings for orientation and latitude.
The first thing that we need to do before we start setting up our cycle is change the Film Curve Whitepoint to 4 ( default is 1 ). This can be found under the HDR group in the Environment Editor. We will also be using the new and improved Eye Adaptation mode, to do this open up the console and simply type in r_HDREyeAdaptationMode 1. These 2 values dramatically change the sensitivity to light so they need to be set up properly before changing any of the other parameters.
Pic 3: Location of the Film Curve Whitepoint setting.
Now we are ready to start creating our day-night cycle.
The Sun category contains the settings that affect the color and the intensity of the direct sun light.
We start off by setting the current time to 12:00 and giving it a slightly yellow tint ( 240, 225, 210 ). This will create a key at that time and update the preview to represent the change we just made. Select the newly created key and set the In/Out tangent to linear.
This value needs to remain constant throughout the day so we will create another key at 09:00 and assign it the same color. For this one set the In tangent to Zero and the Out to linear. Mirror the result at 15:00.
As it nears Dusk/Dawn the sun color transitions into a saturated orange, to set this up change the current time to 06:00 and assign it the appropriate color ( 170, 84, 0 ) and set both In/out tangents to Zero. Mirror this newly created key at the 18:00 time.
At this point it is worth noting that the Sun parameters are also used to control the Color/Intensity of the light coming from the moon, although the moon doesn’t move throughout the night.
To set this up we create a key at 05:56 and give it a blue tint ( 140, 160, 176 ). To keep this constant over the whole night we need additional keys with the same value at 00:00, 18:04 and 23:59 respectively. Change the In/Out tangents for all of these keys to linear.
If you set this up correctly your preview and curves should look like this:
Pic 4: Screenshot of the Sun Color gradient preview and curves.
This property controls the illuminance of the sun and as mentioned previously it is important to keep this close to the physically based value. A quick search on the internet comes up with an average illuminance value of 100000 lux for bright sunlight.
Pic 5: Screenshot from the Wikipedia page containing the Illuminance values chart.
Change the current time to 12:00 and create a key with the value set to 120000. The reason why this is higher than real world values is some of the light gets absorbed by the materials giving them a final lux value that’s considerably smaller than the source. We will get back to this once we set up our Sky Light later on.
Now that we have the basis for our Sun Intensity laid out we can go ahead and set up the rest of the keys for this value.
The intensity of the sun diminishes as it gets closer to the horizon so to achieve that we need to set up a few more keys. Change the time to 08:00 and set the intensity down to 110000, do the same on the opposite side at 16:00.
As we get closer to sunset/sunrise the intensity drops very low. We will now create a key at 06:00 with the value set to 5 and mirror the value at 18:00.
Real world measurements read <1 lux values for moonlight, this number is way too small for the engine to still accurately render shadows coming from the moon, so we will stick with the same constant value of 5 for night time. For that we need to set up keys at 00:00 and 23:59.
Making sure the transitions between your keys are smooth your gradient and curves should look like this:
Pic 6: Screenshot of the Sun Intensity (lux) gradient preview and curves.
As you might have guessed this controls the specular contribution of the sunlight. For any realistic lighting scenario this value should always be kept at 1.
You’re probably wondering why we skipped all the way to sky light. The reason is a lot of the settings in the environment editor affect each other. It’s good practice to get the sun/sky settings nailed down before you go into setting up your fog.
Parameters in this section are solely used to compute the sun light scattering through the atmosphere effectively controlling the appearance of the sun disk as well as the hue of your sky. They do not directly affect the rendering of objects in the world (for example, lighting colors and intensities). They do however affect the overall illuminance of your scene through the use of Environment Probes as mentioned earlier.
Change the time to 12:00 and set the intensity to 50. At 05:45 and 18:15 drop this value to 1. Create two more keys at 00:00 and 23:59 and set the value to 0. The transition from 0 to 1 gives us the effect of the sky brightening in the area where the sun is just about to set.
Pic 7: Sun Intensity Multiplier curve setup.
Pic 8: Screenshot taken at 05:30. Notice the slight brightening of the horizon around the area where the sun is about to rise.
To get an accurate reading of the illuminance in your level you need to measure it on a surface that’s perpendicular to the sun. We already have a couple of planes set up for this purpose so all you need to do is set r_HDRdebug 1 in the console and simply look at the surface. Keep in mind that turning this on brightens the whole scene so don’t forget to turn it off once you’re done measuring your illuminance.
Pic 8: Planes facing the sun used for measuring full sunlight/shadow illuminance.
By looking directly at the surface we’re getting a reading of approximately 80000 lux. At this point the only source for our illuminance is the sun light so to refine this further we will have to enable the sky light to contribute to it as well.
In order to do that we will need to set up an Environment Probe. This handles indirect lighting effectively acting as ambient lighting that you would normally get from the sky. We won’t get into specifics about Environment Probes ( for that check the dedicated page Environment Probes ) but for now go to your Create Objects tab and under Misc there’s the Environment probe entity. Drag that into your scene, change its size to encompass your whole terrain, make it active and generate cubemap. Keep in mind that any changes that you do to your time of day will require regenerating the cubemap ( It’s recommended to do that with the entity turned off so it doesn’t pick up any lighting information from a previously generated cubemap ).
By doing this we are now getting blue tinted shadows as opposed to pure black and our lux value also jumped up to about 100000 while keeping the shadow illuminance at around 20000. A 1/5 ratio between fully lit/shadow areas is close to real world values.
Pic 9: Top - Fully lit area lux reading, Bottom - Shadow area lux reading
This controls how much the sun light is scattered by the atmosphere. Set this to 1 for the whole timeline.
The parameters that control the hue of the atmosphere are the Wavelength (R/G/B) values. We only need to set these once for the whole cycle.
Taken from the Wikipedia page on Diffuse Sky Radiation ( also known as Skylight ) we set these values at 650 (R), 550 (G), 450 (B).
Pic 10: Screenshot from the Wikipedia page detailing Diffuse sky radiation.
Now that we have a smooth transition in the light intensity and color throughout the day we can continue to refine the appearance of the sky in relation to the time of day. For that we will be using fog.
Fog is used to enhance the depth of our scene and it’s also responsible for creating the haze at the horizon as well as the glow around the sun.
There are two different components that contribute to the fog:
Inside the Fog group there are also settings that control the overall impact fog has over the level. The Final Density Clamp parameter controls the maximum density for the fog. This can be used in extremely foggy environments to avoid the background completely fading into the fog.
Global Density controls the overall fogginess of the scene so it multiplies on top of the top/bottom density values as well as the radial fog.
Here we also have the option to remove the fog around the camera and make it fade in at a specified distance. This can be achieved by using the Ramp Start/End/Influence parameters.
Lastly we have the Shadow Darkening settings that are only used to control the appearance of the fog in shadow areas. In order to enable the effect of these values VolFogShadows needs to be enabled in the Environment Panel. This is not to be confused with the Volumetric Fog in the Environment Editor which has a global influence.
Pic 11: The Fog parameters section inside the Environment Editor.
Now that we have a better understanding of what the different settings for fog control we can continue setting up our day-night cycle.
We start by setting the current time to 12:00 and assigning a light blue color ( 185, 251, 251 ). This value needs to stay consistent throughout the day and will start fading to almost black once we get close to sunset/sunrise. Create two more keys at 07:00 and 17:00 and assign the same color. After we’ve done that create a key at 06:00 and 18:00 and assign them a very dark grey color ( 13, 13, 13 ). Copy the same value to 00:00 and 23:59 to keep it constant for night time. We will be using this to create the illusion of light pollution on the horizon at night time.
Pic 12: Color ( bottom ) curves setup.
Set this value to 3 for mid day and gradually drop it to 0.02 towards dusk/dawn. The reason for that is as the sun descends we need to allow the radial color to kick in so it creates the localized orange bloom around the sun. So we need a key at 12:00 with the value set to 3 and 4 more keys at 00:00, 06:00, 18:00 and 23:59 with the value set to 0.02.
If you are wondering why this is set so low for night time it is because of the way eye adaptation works making the fog way too strong in low light conditions.
Pic 13: Color ( bottom ) multiplier curves setup.
We only need to set this once for the whole timeline so let’s set two keys at 00:00 and 23:59 with the same value of 70. We only have to do this because the Ocean height for our test level is set to 70 and we want the gradient to start at that height.
We want the amount of fog to ramp up at sunset/sunrise. To achieve this set some keys at 06:00, 07:00, 17:00 and 18:00 wih a value of 0.3 then set 3 more keys at 00:00, 12:00 and 23:59 with a value of 0.2. As always make sure you have a smooth transition from one key to another by using editing their tangents.
This value will be very subtle as we will be setting our top density quite low. For midday assign a light blue color , slightly darker than the bottom one, let’s say 131, 183, 231. At 07:00 and 17:00 change the value to a darker blue like 51, 72, 90. With the low density we will be using this color has no impact at night time. I have created more keys at 00:00, 06:00, 18:00 and 23:59 and set the value to black, but this is entirely optional.
The only key we need to create for this parameter is at 12:00 so change your current time accordingly and set the value to 1. Set the tangent to auto so it gradually transitions to 0 towards the ends of the timeline.
We don’t need to change this value for this particular scenario.
As mentioned before this value can be used to offset the height of the transition between our top and bottom colors which is not necessary for our level.
Between 08:00 and 16:00 set this color to a light yellow like 193, 158, 100. As we get closer to the ends of our timeline this should transition into a gradually darker orange. To get this result set two keys at 07:00 and 17:00 and assign them a dark yellow color like 192, 126, 49 and leave the 00:00 and 23:59 times to their default value of black. Provided you’ve set up the curves properly this should give you the orange color when the sun is right above the horizon.
To start with set this to 16 for mid day. The impact of the radial fog becomes more obvious as the light intensity drops so we will have to decrease the multiplier as we go towards the ends of the timeline. Create two keys at 07:00 and 17:00 set the value to 10.
It’s probably a good time to mention that the radial fog also gets applied to the moon during night time so if we keep our multiplier at 10, as soon as the sun goes under the horizon we will get a huge orange glow for the moon. To fix this create some keys at 05:55 and 18:05 and set the value to 0. It’s possible to set this up to control the bloom for the moon but there is a dedicated section for night sky. We will go over that later on.
We only need to change this slightly to get a more pronounced effect. Set two keys with a value of 0.8 at the 07:00 and 17:00 times.
Same as the Radial size, set this to 0.8 at 07:00 and 17:00 respectively.
As mentioned previously we want our fog to be denser in the morning/evening and fade out as the sun gets higher in the sky. Set a key at 12:00 and put in a value of 0.05. To handle the smooth transition add a few more keys at 00:00, 06:00, 18:00 and 23:59 with the value of 0.1.
These are all the parameters we need to change in the Fog section for our day-night cycle. By now you should have a fully working transition from dawn to dusk.
Next we will be setting up the values for night time in order to get a complete 24 hours cycle.