Subtractive Shadows: A Flexible Framework for Shadow Level-of-Detail
We explore the implications of reversing the process of shadow computation for real-time applications that include complex lighting (such as that specified by an environment map). Instead of adding illumination contributions at each pixel across various lights, we compute the complete, unshadowed local illumination at each pixel using fast approximation algorithms, then subtract the lighting contribution from each light for which the pixel is in shadow. This provides flexible level-of-detail for shadow computation in ways that standard additive shadows do not, such as permitting the use of fast medhods for accurate direct illumination combined with a small number of shadow-casting lights, and allowing for down-sampled shadow buffers to reduce fill cost. This technique preserves that portion of the scene with the greatest visual importance -- the direct illumination -- and allows shadows to be presented with lower fidelity in exchange for improvements in rendering time. With subtractive shadows, we can render complex scenes with arbitrary BRDFs, environment map illumination, and shadows, achieving in real time effects that previously required offline preprocessing.