Most shadow techniques create a very ``hard'' shadow edge; surfaces in shadow, and surfaces being lit are separated by a sharp, distinct boundary, with a large change in surface brightness. This is an accurate representation for distant point light sources, but is unrealistic for many lighting environments.
A brute force way to approximate the appearance of soft shadows is to use one of the shadow techniques described above to model an area light source as a collection of point light sources. Brotman and Badler [14] used this approach with shadow volumes to generate their soft shadows.
With an accumulation buffer, you can combine the shadowed illumination from multiple point light sources. With enough point light source samples, the summed result is softer shadows, with a more gradual transition from lit to unlit areas. These soft shadows are a more realistic representation of area light sources, which create shadows consisting of an umbra (where none of the light is visible) and penumbra (where part of the light is visible).
Consider a light source that is a volume instead of merely a point. Soft shadows are created by rendering the shadowed scene multiple times, and accumulating into the accumulation buffer. Each rendering of the scene differs in that the OpenGL point position of the light source is moved slightly within the volume where the physical light being modeled would be emitting energy. To reduce aliasing artifacts, it is best to reposition the light in an irregular pattern.
Shadows from multiple, separate light sources can also be accumulated. This allows the creation of scenes containing shadows with non-trivial patterns of light and dark, resulting from the light contributions of all the lights in the scene.