This is the documentation for Enlighten.

Understanding Global Illumination


Overview

Enlighten creates 'indirect' lighting effects. To get the most from Enlighten, it's a good idea to understand a few key concepts:

  • The terms 'Global Illumination' and 'Radiosity'.
  • The difference between direct and indirect light.
  • The difference between diffuse and specular reflection.
  • The difference between static and dynamic geometry.

This topic provides a gentle introduction to these concepts.

Global illumination

Light's interaction with matter is complicated. To simulate it in realtime, you must make approximations. A helpful simplification is to assume that light striking a surface can do one of two things:

  • The light may be absorbed and removed from the calculation.
  • The light may be re-emitted back into the world.

The direction of re-emission depends on the direction of the incoming light, and also on the properties of the surface. Often, the light can be bounced back in any direction, and will then strike another surface, where another portion of it may be bounced. This bouncing process continues until all light has been fully absorbed. (Some may have "escaped" out into the surrounding environment.)

When you compute how light bounces around a world, you are simulating 'global illumination'. This is a catch-all term for all aspects of light interaction, including caustics, mirrors, glossy surfaces and radiosity.

Diffuse and specular reflection

Unfortunately, realtime GI is beyond today's hardware. To obtain realtime effects, you must make further approximations by breaking the problem into two pieces.

The essential separation is between 'specular' and 'diffuse' bouncing of the incident light. Surfaces that mostly reflect light (that is, act like a mirror) appear shiny and we say they are highly specular. Surfaces that absorb and re-emit light appear matte and look the same regardless of what angle you look at them from. This is because they re-emit the light away from them in all directions, whereas specular surfaces tend to reflect light in one main direction. Mostly matte surfaces, such as chalk or paper, are said to be highly diffuse.

In global illumination specular and diffuse bounces are combined into a single function known as the bidirectional reflectance distribution function, or BRDF. In Enlighten we maintain a separation between these two processes and compute them using different approaches. We allow the diffuse light to bounce around off of all surfaces. We call this process of bouncing diffuse light 'radiosity', and Enlighten updates this in real time.

Direct and indirect illumination

Enlighten takes as input a general description of the direct lighting in a scene and computes textures and light probes describing the indirect lighting environment. The Enlighten output textures store the colour and intensity of the indirect lighting, as well a representation of how the colour and intensity change depending on direction. This information can be used in your shaders to compute indirect specular reflections and light normal mapped surfaces. The light probes record similar information and allow you to relight entire objects at any point in space.

The separation of lighting into direct and indirect lighting is as essential to Enlighten as the split between specular and diffuse lighting and should be kept in mind at all times. In particular, direct lights can be used to cast shadows on dynamic objects, whereas indirect light computed by Enlighten will only cast indirect soft shadows off the static geometry.

Static and dynamic objects

The final key concept behind Enlighten is the separation of the world into static geometry and dynamic objects. This is necessary because Enlighten requires static geometry to be precomputed to generate data for use at runtime. This precompute only involves geometry, not surface properties, so your world can be re-lit, re-textured and re-coloured dynamically.

As the precompute is only applied to static geometry, this is the only part of the world that fully contributes to the radiosity. Dynamic objects respond to the local radiosity conditions and are lit in a consistent manner, but do not affect the indirect lighting. This means that Enlighten only casts indirect soft shadows off the static geometry.