Rendering Shadows

From David's Wiki
\( \newcommand{\P}[]{\unicode{xB6}} \newcommand{\AA}[]{\unicode{x212B}} \newcommand{\empty}[]{\emptyset} \newcommand{\O}[]{\emptyset} \newcommand{\Alpha}[]{Α} \newcommand{\Beta}[]{Β} \newcommand{\Epsilon}[]{Ε} \newcommand{\Iota}[]{Ι} \newcommand{\Kappa}[]{Κ} \newcommand{\Rho}[]{Ρ} \newcommand{\Tau}[]{Τ} \newcommand{\Zeta}[]{Ζ} \newcommand{\Mu}[]{\unicode{x039C}} \newcommand{\Chi}[]{Χ} \newcommand{\Eta}[]{\unicode{x0397}} \newcommand{\Nu}[]{\unicode{x039D}} \newcommand{\Omicron}[]{\unicode{x039F}} \DeclareMathOperator{\sgn}{sgn} \def\oiint{\mathop{\vcenter{\mathchoice{\huge\unicode{x222F}\,}{\unicode{x222F}}{\unicode{x222F}}{\unicode{x222F}}}\,}\nolimits} \def\oiiint{\mathop{\vcenter{\mathchoice{\huge\unicode{x2230}\,}{\unicode{x2230}}{\unicode{x2230}}{\unicode{x2230}}}\,}\nolimits} \)

Hard Shadows

Hard shadows typically come from small (i.e. point) light sources.

Shadow mapping

For each light source, compute what the light hits by using the slight source as a camera and doing a render pass. This is typically only done for the primary light in the scene.

At render time, each object can sample into the shadow map to determine if it is occluded or not.

Shadow Volume

Soft Shadows

Soft shadows appear from large light sources such as the environment lighting.

Precomputed Radiance Transfer (PRT)

Spherical Harmonics

https://www.cs.columbia.edu/~bosun/images/research/sig06/download/shexp.pdf

The idea here is to approximate each blocker object as a set of spheres. For any receiver point and each spherical blocker, we can compute a SH approximation of the light blocked. Then the SH coefficients can be added together to get compute the non-occluded light.

Ambient Occulusion

References