Game Development Reference
Figure 5.5. Forward+ render passes and GPU buffers in the AMD Leo Demo.
One-Bounce Indirect Illumination
As a unique extension of the light-culling system, lights can be used as what we
call an indirect light to generate one-bounce indirect illumination in the scene.
If a given light is tagged to be an indirect light, the following will occur for that
light before any rendering passes at runtime:
Generate a reflective shadow map (RSM) of the scene from the point of
view of the light [Dachsbacher and Stamminger 05]. Normal buffer, color
buffer, and world-space buffers are generated.
A compute shader is executed to create spotlights at the location captured
in the RSM. The generated spotlights are appended to the main light list.
The direction of the spotlight will be the reflection of the vector from the
world position to the original indirect light around the normal. Set other
parameters for the new spotlight that conforms to the settings for the indi-
rect light. We added art-driven parameters to control the effect of indirect
This new “indirect” light type is used by artists to spawn virtual spotlights that
represent one-bounce lighting from the environment. This method seems to give
artists good control over all aspects of lighting without requiring them to hand-
place thousands or millions of lights or prebake lightmaps. Each indirect light
can spawn N
N virtual spotlights, so it takes only a handful to create a nice
indirect lighting effect. Once virtual lights are spawned in the compute shader,
they go through the same light-culling process as all the other lights in the system.
Thus, we could keep the entire rendering pipeline simple. Figure 5.5 illustrates
the rendering pipeline used in the AMD Leo demo.