Lighting Cinematics Tutorial

Overview

Here will be a short tutorial as well as information regarding the lighting team's workflow for creating high quality cinematic lighting.

Lighting the cinematics uses a very different process to lighting a level for single/multiplayer.

There are even different considerations that need to be taken when lighting for a real-time cinematic, and a pre-rendered one.

Following is the general workflow for creating cinematic lighting, and a few key tricks that the lighting department uses to get the best results.

Also included are a few case studies from cinematics in Ryse.

Layer Setup

It is important to follow correct layer naming/structure requirements. It keeps things organized, and easier to work with for you or other people who may need to work on your cinematic.

Example Cinematic Layer Setup:

Trackview Workflow

Sequence Nesting

For Ryse, we unfortunately needed to use a rather convoluted sequence nesting system in Trackview so that multiple people could easily work on the same cinematic simultaneously.

The very base sequences, would be called something like "CIN_Cin2_Shot1" and would be created by the Cinematic Designer and contains basics like camera animations, character animations, and any props that need to appear/animate in a given shot.

Above these "shot" sequences, would be a master camera sequence called "CIN_Cin2_MASTER" which only contains a reference to all the shots, putting them in correct sequence.

Above that is typically the Effects sequence, which contains a reference to the master sequence, and adds particle effect triggers.

Finally, the top sequence in the nest, called "CIN_Cin2_Lighting", contains a reference to the Effects sequence (if it exists, alternatively the MASTER sequence). On top of that it adds all lighting related information which will be explained below.

Note that final renders need to be done using the "_Lighting" sequence, otherwise the render will be missing lighting/fx information.

Trackview Structure

This is generally a matter of personal preference, but here is how I like to set up each of my sequences so that everything is manageable and allows for easy iteration. Refer to the image above for how it all looks together.

_NOTES

This is an "Event" track which acts as an empty node where I can add keyframes with comments that I can snap to later. I add a keyframe wherever there is a jump cut in the camera. The comment that I add usually just denotes what the shot number is , eg "Part1, Shot03".
The name _NOTES is used so that it stays always at the top of the stack.

It's also important to get the keyframes perfectly on the camera cut. Most of the time, the camera cuts fall on the frame, so if you turn on frame snapping, you can get it exact. When the cut falls between frames, I turn off snapping, and zoom in like crazy until I can place the keyframe between ticks in the scrubber.

EnviroStuff

I use this folder to contain a lot of general lighting parameters, such as:

  • e_timeofday cvar track to trigger/force the correct time of day.
    Note that this can only be used on pre-rendered cinematics. For real-time cinematics, use a Track Event node.
  • colorgrade track event node to trigger (when AI/Physics is on) any colorgrade LUT switches, or forcing on the default LUT for the level.
    Unfortunately as there's no way to force this using a CVar track because the string is usually too long for trackview, so this needs to be a track event.
  • ShadowsSetup is used to enable the High Quality shadows mode.
  • Note that this can only be used on pre-rendered cinematics.
  • Environment node is used to force the correct sun/moon positions.
  • Skydome is a folder i use to contain all the skydome geometry used in the level. If there are multiple skydomes, I can force hide/unhide the ones needed for this cinematic.
env_lights

I use this folder to contain and control any lights that already exist in the environment. For example if a gameplay light or cubemap is interfering with a specific shot, I can disable it, or move it out of the way temporarily.

I also use this sometimes to contain any environment-specific lights that are not shot specific but can only be turned on for the cinematic.

Shot01, Shot02, etc

These folders are used to contain/control shot-specific lights. I enable the lights for the shot, and disable them when the camera cuts.

If you have a _NOTES sequence as outlined above, you can use the magnet snapping tool to ensure the keyframes match up to the camera cuts.

It's important to name the folders something completely different to any entities you add, and also any tracks you add. I personally encountered several bugs when trying to use a folder that's named the same as a track node that you can add.

For example, if you create a folder called "Environment", you will be unable to add an "Environment" track to the sequence.

Basic Workflow

The basic workflow for how I do a cinematic in trackview is as follows:

  1. Create the sequence on the "Cin#_Lighting" layer, called "CIN_Cin#_Lighting"
  2. Create a Director node and in the sequence track, reference the _FX or _MASTER sequence.
  3. Create the _NOTES track, and add keyframes to split the sequence into shots
  4. Create the basic folder structure including folders for all shots in the sequence. If it is a particularly long cinematic, or features several locations, I split it up into parts as well as shots.
  5. Add general lighting tracks to the "EnviroStuff" folder to set up constants like Time of Day, sun position, skydome position, HQ shadows.
  6. Start creating lights using the tips outlined below.
  7. Add the lights to the sequence under the correct shot folder.
  8. Give the lights an "Active" track, or sometimes a "Color/DiffuseMultiplier" if necessary, and I tend to hide any tracks I'm not using to keep everything clean.
  9. Add keyframes on the active track to ensure that the light is only shown on the shot I need it.
  10. Repeat until done

Cinematic Lighting Guide

Setting up lights specifically for cinematics

Probably the most important thing for cinematic lights (apart from putting it in the right layer) is the naming convention. Again I refer to the CRYENGINE 3 Manual documentation on how to set this up.

For Cinematics, I name my lights by shot. As an example: "l_CIN_Cin2_shot07_mrus_rim_light_1"

  • "l" for anything from the lighting department.
  • "CIN" for anything specific to a cinematic.
  • "Cin2" denotes the name of the cinematic.
  • "shot07" refers to the shot number. If the cinematic has multiple parts, I would prefix this "part1_shot07".
  • "mrus" refers to the subject that the light is focused on, in this case Marius, abbreviated.
  • "rim" refers to the type of light, such as key, fill, bounce, rim, fire, sun, amb, etc.
  • "light_1" is used as an index.

The main difference between cinematic lights and gameplay lights are that for pre-rendered cinematics, since performance isn't an issue, you can use as many shadow-casting lights as you want. In fact, unless there is a specific reason, it's best to always enable shadow casting.

SpecularMultiplier should (as in gameplay lights) always be left at 1. However there are edge cases in cinematics and it can be tweaked in the name of getting a better looking shot, but it should be regarded as a last resort, as we should always try to keep consistency in lighting/shading whenever possible.

Projector Textures should be used as much as possible for spotlights. Shadowmap quality from point lights is greatly improved when the ProjectorFOV is as low as possible while still hitting the area you want. Likewise, if you want to soften your shadows a bit, you can increase the ProjectorFOV. Keep in mind though that this will also decrease the accuracy of the shadowmap.

I find that for cinematics, you don't need to use Ambient lights. They tend to weaken contrast and illuminate areas they shouldn't. Instead, I use my cubemap for the shot to be as dark as the deepest shadows that I want, and then add lights to bring up the overall illumination.

Whenever you add a light, and you are editing it (properties, or position), it's good to keep the "active" flag enabled. However once you are done editing the light for the time being, it's good practice to disable the active flag.

This is because the light should be turned on/off in trackview. If lights are off by default, then they won't accidentally render in game, or accidentally interfere with a shot when you thought it was turned off.

Case Studies

Here are two shots from Ryse cinematics with a breakdown of the lighting elements that make up the shots.

Case 1: Colosseum - Cin3

Cubemap Only

Cubemap + Environment Light

Cubemap + Fill Light

Cubemap + Key Light

Final Image


Case 2: Oswald Cin1

No lights

Cubemap

Sun Light

Environment Lights

Key Lights

Rim Lights

Bounce / Fill Lights

Effects / Final Image