Making light work of dynamic large worlds

Thanks Dom. Amazing.
This section of the talk has two parts:
1) My lighting ethos for this project
2) Efficient lighting – how we enable the lighting to scale up
and how Enlighten works
Enlighten is a global illumination software developed by
Geomerics, the company acquired by ARM in 2014
It is available as a stand alone SDK or integrated into Unity or
UE4
It is mature and production proven in top selling AAA titles
such as Star Wars Battlefront
It scales across all gaming platforms.
In Enlighten 3.04 we improved support for dynamic lighting in
open worlds
So we can add features such as dynamic time of day and
weather without compromising on lighting believability.
1
Can I introduce you to Seastack Bay.
It is built in Ureal Engine 4 with Enlighten
Made for PS4 and PC
Collaborative project with Ninja Theory who provided
environment and character assets and audio
I did the lighting and that’s what I am excited to talk with you
about today.
VIDEO
2
Seastack Bay
5x5km world, all direct and indirect lighting fully dynamic
Visible distance of 1 km across the beach
Vertical structures over 100m – significantly extending surface
area of level
We need to light all this surface area in real-time with full
global illumination
3
Seastack bay main challenges:
Want to avoid flat, non graduated shadows
Performant current gen consoles and scalable to a
fully roaming game
Use changing lighting and weather to add variation
to the world
4
What outdoor scenarios shows good, large scale global
illumination?
Large flat vistas are mainly lit directly by the sun or sky.
The lighting isn’t visibly reflected much and we wanted to
place emphasis on the bounced lighting for this showcase but
maintain an outdoor scenario.
We need vertical structures – gorges, canyons, cliffs… and
seastacks!
5
The main challenges of creating Seastack Bay were:
No resource to build a fully bespoke world.
Very small main art team (one environment artist and one
lighting / tech artist ) utilizing kit part geometry.
Good and efficient lighting workflow an absolute requirement.
6
The ethos I followed when lighting Seastack bay
Take control of all aspects of the lighting pipeline.
If I don’t have a tool or control I will build it myself so that I
can work in the way I want.
Challenge the rules of what we thing is correct and allowed.
We are communicating an experience, not reproducing reality.
This is true even for photography
Question process
Just because it’s always been done that way doesn’t mean it’s
good or helpful in achieving what we want.
7
I am not an illustrator! This might be apparent…
Let’s talk about taking control of the diffuse bounce.
When light hits a surface it will reflect and if it’s strong it will
bounce between the elements of the scene until its energy is
spent.
Our eye is very sensitive to graduation across the big
surfaces.
But as long as we get good graduation we can take control of
the energy.
8
In this shot we see the sunlight hitting the sand and bouncing
back up around the cave’s interior multiple times.
The soft graduated diffuse bounce shapes the rocks.
We are tasked with making the interior brighter without
affecting the exterior.
So we take control of the bounced light from the sun
9
So to light up the interior we control the indirect bounce
separately to the direct bounce – here we see the effect of
increasing just this float in the level.
10
Here are a few variations including moving the sun. With
Enlighten we see the global illumination updating instantly.
The generic light types and their parameters didn’t fit well
with how I wanted to light the scene.
So I built my own ‘Time Of Day’ tool which is a set of
functions, classes and datatypes which define states such as
day or afternoon stored in an array.
Very quick iteration on parameters across multiple actors are
possible with Enlighten.
11
We continue to iterate till we hit our desired lighting scenario.
This iteration is very quick as we have taken control of the
lighting via our custom tool
12
Challenging the rules of how light is reflected.
Humans are bad at detecting continuity in the reflection.
As lighting artists we can use this to communicate aspects of
our worlds to the viewer
Even a simplified view on specular positioning has three
variables – lighting angle, surface normal and viewing
direction.
This is way too much math for our eye and brain to figure out.
13
On the rock in the middle we can see white highlights which
brings our granite sea stacks to life.
14
Granite has up to 20% quartz which is a crystal structure
mineral and a semi-precious stone
It’s shiny!
As a lighting artist I want to communicate this
15
We take the reflection away and we still get nice shadowing.
16
Here are the reflections authored by the lighting artist applied
to the rocks in the shader
17
Result– we notice the highlighting across the top of the cliff
face
It’s 100 meters up - so far away from the viewer. But visible
even at this distance
18
Reflection playing across the beach – the middle one catches
our eye and communicates wet sand
19
We paint in high intensity blobs in top level of hemisphere of
the reflection map.
‘Reflection cards in the sky’
They exist off-screen to imply reflection. In this scene it could
be clouds.
64x64 pixels per face
This is used for the sky reflection and combined with a colour.
It appears very white – we paint in hdr.
Use this to obtain a consistent reflection when the surface
sees the sky.
20
So we’ve challenged the rule of how our eye perceives
reflections
We can relatively safely add in small spots of brightness to
bring the surface to life
Adds movement and shape for geometry that sees the sky
This makes the rocks look the way we feel they should.
Emotional rendering is very important point for me – idea
from Journey – look at their talk in the GDC Vault.
21
Question the process:
Just because the asset pipeline is concept -> modelling ->
texturing -> layout -> lighting doesn’t mean we work on
elements such as textures to achieve our shot.
Micro facet theory is the principle of what we are authoring in
the roughness channel.
“Microfacet Models for Refraction through Rough Surfaces”
B. Walter et al.
The microfacets are a lie – there are no very small groves and
scatches in the geometry.
A bit of math running on the GPU will try and come up with
the correct answer for this based on the roughness texture.
This math and the roughness texture controls how reflective a
surface appears.
We benefit from control over this late in production to
22
communicate about the worlds we are lighting.
22
For a shot like this we really want to communicate that the
cave is damp with moisture and lead the viewers eye across
the pools and drips of water towards the bright exit.
We get a light on dark –> dark on light contrast due to the
bright reflections in the shadows and the vegetation
silhouetted against the exterior.
We do this by pushing the materials so that we communicate
a strong reflection.
23
The rock assets that make up the cave have been authored as
individual set pieces by an asset artist – with the roughness
channel displayed on the right.
As this happens earlier in production they don’t always know
what the final desired lighting environment will be.
If we’re using a standard PBR shader, the roughness channel
rules the reflection. It’s a very important map to get right to
achieve a good reflection.
24
We need precise control of the roughness channel in engine.
We use vertex paint to add the wet patches of moisture where
they work for the lighting.
We are using temporal AA which helps get rid of high
frequency highlights but at times blurs important detail – so
we’re pushing the roughness down a lot to get highlights.
For more control we’ve exposed a roughness value in the
material instance to set the overall level.
Having a consistent roughness level between assets is really
important for consistency.
25
Challenging the art production process by tweaking texturing
late can help achieve the desired look much faster.
If you’re interested in learning more about PBR, attend “An
end to end approach to physically based rendering”
Geomerics and Allegorithmic talk
2020 West Hall
Friday
10-11am
26
In summary
Take control of how the engine exposed lights to me, create
my own bespoke tool
Challenge the rules of physics and how we think we see the
world
Question how we go about creating stuff.
27
Next up I’ll talk about how we achieve scalability in the
indirect lighting
Enlighten runs on the CPU independently of the main
rendering and game update
So when discussing how fast enlighten is we tend to talk
about Enlighten update time
Which is how fast we want the indirect lighting to update – but
this happens asynchronously to the main rendering.
To maintain smooth updates in the GI we need to strike a
balance between lighting quality and the Enlighten update
rate.
Enlighten produces three outputs to be used by the game
rendering.
Lightmap data for the large environment architecture
Light probes for sampling dynamic objects
Reflection captures for updating the reflection of the lighting in
real-time
28
Here is a scene lit without the lighting being reflected between
the surfaces,
With dynamic lights as we want to change the time of day.
29
Let us start preparing this scene for Enlighten. This debug
visualisation shows all Enlighten lightmapped geometry in
orange and smaller details in the scene in green.
This is user defined
30
This mean that we only perform the full computation on the
relevant parts of the level.
This is key to achieving good performance for a full level
running on console.
31
Now we do an offline computation on the geometry to the left.
For the Seastack Bay showcase which is 5x5 km this process
takes 30 mins distributed over 20 nodes for all the Enlighten
contributing geometry in the scene.
Now we can instantly see the fully lit result and change any
parameter or transform of all dynamic light types, tweak
material colours or add details such as foliage or even larger
probe lit objects
32
So we’ve gone from this
33
To the fully lit frame
34
Enlighten also produces light probes used for dynamic
geometry or as an optimization on static geometry
35
Reflections:
The final output is a set of reflection capture cubemaps
important for achieving a correct material response.
To keep the reflection looking consistent we need to update it
with the changing lighting conditions. Enlighten will capture
the lighting information from the precomputed geometry in
real-time and reapply them to the scene’s materials according
to their settings.
These are only 32*32 pixels as this is performant and good
enough quality for the Seastack Bay showcase.
This allows us to produce dramatic lighting changes on-screen
as well as off-screen and maintain a believable lighting
response from the material reflections.
36
Emissive area lights
To achieve the lava I’ve added in a few planes which gives
good control of the positioning of the lighting effect. They are
then precomputed with the rest of the static geometry in the
scene.
We can now use a dynamic material instance updated the
intensity or colour at runtime to produce a pulsating effect –
additionally we can achieve precise control when lighting in
the editor by exposing these properties via the construction
script.
This lighting is comes at an extremely low cost and gives
localized control.
37
To summarize, Enlighten gives you:
Direct control of all aspects of the global illumination
Independently of the direct lighting
Non programmers can precisely control and optimize
performance
Box of tools the artist can use to author both lighting quality
and performance
38
39