Shadows are important elements in three-dimensional computer graphics. They enhance the level
of realism and provide visual cues that help determine spatial relationships. Point light sources
generate only fully shadowed regions, i.e., there is an abrupt transition from no shadow to full
shadow. These shadows are often referred to as hard shadows. Soft shadows on the contrary, are
produced when area or volumetric light sources are present in a scene. Each shadow can have a
fully shadowed region, called the umbra, and a partially shadowed region, called the penumbra.
Soft shadows are generally preferable, because they let the viewer know that the shadow is
indeed a shadow and not actual geometrical features. Soft shadows are also more realistic, and
they further help in understanding distances in a scene.
This thesis focuses on an OpenGL implementation of the soft shadow volume algorithm
presented by Assarsson and Akenine-Möller [1, 2]. The algorithm extends the well-known
shadow volume algorithm for hard shadows presented in 1977 by Crow , and consists of two
passes. The first pass uses the classic shadow volume algorithm to generate hard shadows as an
approximation of the umbra region; the second pass provides the softness of the shadow, the
penumbra region. This is achieved by generating penumbra wedges and rasterizing them using a
fragment program that computes the light intensity for each pixel from the uncovered area of the
The result of this thesis is an OpenGL implementation capable of real-time soft shadow volumes.