Colored light from the red green and
unseen blue wall reflected onto the
gray boxes
This was a graphics project that implements dynamic global illumination at real time speeds. The scene is lit by a single point light represented by a circle in the ceiling. The ceiling, floor and two boxes in the middle are gray while the four walls are red, yellow, green and blue. The light bounces off of the colored walls and lights up nearby surfaces with the reflected color giving the scene or more natural and ambient look.
Direct light from the point light source uses a traditional shadow map to decide which pixels are in shadow. The ambient light comes from an array of virtual point lights (VPL's) projected from the light onto the scene.
Different camera and light position
Using the traditional Phong lighting model the VPL's calculate the amount of light that should be reflected from the surface that it is projected onto taking into account the light's original color, the surface's color and the surfaces normal. Then the VPL's light is added to the rest of the scene. With all of the light from the VPL's added onto each other, it results into a nice looking scene that efficiently simulates global illumination.
All of the 16X16 imperfect shadow maps
In order to simulate ambient occlusion the each of the VPL's have their own shadow maps in order to not cast light they do not have direct line of sight of. This is implemented using imperfect shadow maps that represent the scene as a series of splats rather than direct geometry. This allows the ability to render all of the shadow maps in one draw call making sure this can be done at real time. All though the shadow maps do not perfectly represent the scene, all of the VPL's contribute a small amount of light and the addition of all the VPL's makes the inaccuracies unnoticeable.
This was built upon a simple frame work that could render a simple scene. I implemented a differed shading pipeline in C++ using OpenGL and wrote all of the shaders in GLSL.