Real-Time Global Illumination
standing rhinork

Global illumination takes into account light reflecting off all surfaces in the world (indirect illumination) in addition to light coming directly from light sources (direct illumination). The images created using global illumination are more photorealistic and natural-looking than images lit with direct light only. Special effects companies and animation studios have known this for a long time. They have been using techniques to approximate global illumination, like hand placing dozens of area lights, for years. Recently, global illumination has started to replace the approximation techniques in films. For example, Shrek 2 was rendered with one bounce of indirect light, and newer films like Monster House are being rendered with full global illumination.

Global illumination looks great, but traditional techniques for calculating it are far too slow for real-time applications. Render times for global illuminated scenes are often measured in hours per frame. Render times for a frame in real-time applications are measured in milliseconds. This situation has lead many to pursue ways of pre-computing global illumination information and using the results in real-time rendering. Unfortunately, such techniques do not work satisfactorily with deformable geometry in dynamic environments. Just as bad, they often force the user to separate objects being rendered from the environment that provides the light, which is often impossible.

For simplicity and flexibility we use a new technique in the Fantasy Engine that allows us to compute global illumination on the fly. The system is simple to use since any surface in a scene can be a light source for, reflect light onto, or shadow any surface in the scene, including itself. It avoids the complexity and limitations of having to treat objects and environment separately. The technique does not involve spherical harmonics, ambient occlusion, image-based lighting (including reflection mapping), or pre-computed radiance transfer. Deformable surfaces in dynamic environments are automatically supported. They are not a problematic special case.

indirect light example
The image on the left was rendered with direct illumination only. The one on the right was rendered with indirect illumination too, which makes quite a difference.

Our global illumination technique supports specular material properties for rendering shiny and glossy surfaces. While the specular results are not as accurate as those acheived with ray tracing, they look quite convincing and allow for rendering all sorts of materials. An approximation to subsurface scattering is also supported, allowing for translucent materials too.

A very important feature of our global illumination method is that it supports displacement-mapped, subdivision surfaces. It allows us to render complex geometry that deforms correctly when animated. There is more information on displacement mapping of subdivision surfaces here.

no sun clip  sun clip  turn clip  glowing club clip
These QuickTime video clips were captured from a real-time (> 30 fps at 1280x1024) Fantasy Engine demo. All the direct light in the first clip on the left comes from the glowing sky geometry. Sunlight is added for the second clip. The next clip  shows 360° view of the model rendered with and without materials. In the final clip the glowing club supplies most of the light.

Performance

An NVIDIA® GeForce™ Go 7900 GTX calculates the global illumination solution (light bouncing to convergence) for the scene in these clips above in about 3.3 milliseconds (300 frames per second) per frame treating all surfaces as dynamic. Static geometry can be handled much faster.

Rhinork design © Wizards of the Coast. Used with permission

TM & © 2005 - 2006 Fantasy Lab, Inc. All Rights Reserved.