We have developed a new physically-based technique for computing soft shadows from a shadow map for spherical lights. Shadow-map samples unprojected into world-space (micro-patches) are culled against a shadow cone wrapping all the possible shadow rays from the light to the surface location. Because of this volumetric test, the algorithm handles self-shadowing more robustly than traditional shadow mapping. The amount of shadowing contributed by each culled micro-patch is approximated by the solid angle subtended by the bounding sphere of the micro-patch over the solid angle of the light source. We describe a real-time implementation running entirely on a GPU. For each image pixel to shadow, the algorithm projects the pixel onto the near plane of the light frustum, and looks up occluding micro-patches in a dynamic disk kernel. To guarantee constant frame rates, the kernel is sampled using a fixed number of samples per pixel. Our results compare favorably to ray-tracing for images with no overlapping shadows.