MIT EECS 6.837, Durand and Cutler Real-Time ShadowsMIT EECS 6.837, Durand and Cutler Last Time?•The graphics pipeline•Clipping & rasterizationof polygons•Visibility —the depth buffer (z-buffer)MIT EECS 6.837, Durand and Cutler Schedule•Quiz 2: Thursday November 20th, in class(two weeks from Thursday)•Project Presentations (to staff): December 1st-5th(~ 4 weeks) •Project Report due: Tuesday December 9th(5 weeks from today) MIT EECS 6.837, Durand and Cutler Questions?MIT EECS 6.837, Durand and Cutler Today•Why are Shadows Important?•Shadows & Soft Shadows in Ray Tracing•Planar Shadows•Shadow Maps•Shadow VolumesMIT EECS 6.837, Durand and Cutler Why are Shadows Important?•Depth cue•SceneLighting•Realism•Contact points Image removed due to copyright considerations.MIT EECS 6.837, Durand and Cutler Shadows as a Depth CueMIT EECS 6.837, Durand and Cutler For Intuition about Scene Lighting•Position of the light (e.g. sundial)•Hard shadows vs. soft shadows•Colored lights•Directional light vs. point lightMIT EECS 6.837, Durand and Cutler Today•Why are Shadows Important?•Shadows & Soft Shadows in Ray Tracing•Planar Shadows•Shadow Maps•Shadow VolumesMIT EECS 6.837, Durand and Cutler Shadows•One shadow ray per intersection per point light sourceno shadow raysone shadow rayMIT EECS 6.837, Durand and Cutler Soft Shadows•Caused by extended light sources•Umbra –source completely occluded•Penumbra –Source partially occluded•Fully lit Image removed due to copyright considerations.MIT EECS 6.837, Durand and Cutler Soft Shadows•Multiple shadow rays to sample area light sourceone shadow raylots of shadow raysMIT EECS 6.837, Durand and Cutler Shadows in Ray Tracing•Shoot ray from visible point to light source•If blocked, discard light contribution•Optimization?–Stop after first intersection (don’t worry about tmin)–Coherence:remember the previous occluder,and test that object firstMIT EECS 6.837, Durand and Cutler Traditional Ray TracingMIT EECS 6.837, Durand and Cutler Ray Tracing + Soft ShadowsMIT EECS 6.837, Durand and Cutler Today•Why are Shadows Important?•Shadows & Soft Shadows in Ray Tracing•Planar Shadows•Shadow Maps•Shadow VolumesMIT EECS 6.837, Durand and Cutler Cast Shadows on Planar Surfaces•Draw the object primitives a second time, projected to the ground planeMIT EECS 6.837, Durand and Cutler Limitations of Planar Shadows•Does not produce self-shadows, shadows cast on other objects, shadows on curved surfaces, etc.MIT EECS 6.837, Durand and Cutler Today•Why are Shadows Important?•Shadows & Soft Shadows in Ray Tracing•Planar Shadows•Shadow Maps–Texture Mapping–Shadow View Duality•Shadow VolumesMIT EECS 6.837, Durand and Cutler Texture Mapping•Don't have to represent everything with geometryMIT EECS 6.837, Durand and Cutler Texture Mapping•Like wallpapering or gift-wrapping with stretchy paper•Curved surfaces require extrastretching or cutting•More on this in a couple weeks...MIT EECS 6.837, Durand and Cutler Shadow/View Duality•A point is lit if it is visible from the light source•Shadow computation similar to view computationFake Shadows using Projective Textures MIT EECS 6.837, Durand and Cutler •Separate obstacle and receiver•Compute b/w image of obstacle from light•Use image as projective texture for each receiverFigure fromMoller& Haines “Real Time Rendering” (Images removed due to copyright considerations.)MIT EECS 6.837, Durand and Cutler Shadow Mapping•Texture mapping with depth information•≥2 passes through the pipeline–Compute shadow map (depth from light source) –Render final image(check shadow map to see if points are in shadow)Figure from Foley et al. “Computer Graphics Principles and Practice”MIT EECS 6.837, Durand and Cutler Shadow Map Look Up•We have a 3D point (x,y,z)WS•How do we look up the depth from the shadow map?•Use the 4x4 perspective projection matrix from the light source to get (x',y',z')LS•ShadowMap(x',y') < z'?Foley et al. “Computer Graphics Principles and Practice”(x,y,z)WS(x',y',z')LSMIT EECS 6.837, Durand and Cutler Shadow Maps•Can be done in hardware•Using hardware texture mapping–Texture coordinates u,v,w generated using 4x4 matrix–Modern hardware permits tests on texture valuesMIT EECS 6.837, Durand and Cutler Limitations of Shadow Maps1.Field of View2.Bias (Epsilon)3.AliasingMIT EECS 6.837, Durand and Cutler 1. Field of View Problem•What if point to shadow is outside field of view of shadow map?–Use cubical shadow map–Use only spot lights!MIT EECS 6.837, Durand and Cutler 2. The Bias (Epsilon) Nightmare•For a point visible from the light sourceShadowMap(x’,y’) ≈z’•How can we avoid erroneous self-shadowing?–Add bias (epsilon) MIT EECS 6.837, Durand and Cutler 2. Bias (Epsilon) for Shadow MapsShadowMap(x’,y’) + bias < z’Choosing a good bias value can be very trickyCorrect imageNot enough biasWay too much biasMIT EECS 6.837, Durand and Cutler 3. Shadow Map Aliasing•Under-sampling of the shadow map•Reprojectionaliasing –especially bad when the camera & light are pointing towards each otherMIT EECS 6.837, Durand and Cutler Shadow Map Filtering•Should we filter the depth? (weighted average of neighboring depth values)•No... filtering depth is not meaningful 50.2 50 50 50.1 1.2 1.1 1.3 1.4 1.2 Ordinary texture map filtering. Does not work for depth maps. Surface at z = 49.822.9 1 <49.8? x filter compare 50.2 50 50 50.1 1.2 1.1 1.3 1.4 1.2 22.9 1 <49.8? x FILTER COMPARE Surface at z = 49.8 Ordinary Texture Map Filtering. Does Not Work For Depth Maps.MIT EECS 6.837, Durand and Cutler Percentage Closer Filtering•Instead filter the result of the test(weighted average of comparison results)•But makes the bias issue more tricky 50.2 50.0 50.0 00 0 0 1 1 1 1 1 50.1 1.2 1.1 1.3 1.4 1.2 Sample Transform Step Surface at z = 49.8 .55 <49.8? x filter compare 50.2 50.0 50.0 50.1 1.2 1.1 1.3 1.4 1.2 .55 <49.8? x FILTER COMPARE Surface at z = 49.8 Sample Transform Step 00 0 0 1 1 1 1 1MIT EECS 6.837, Durand and Cutler Percentage Closer Filtering•5x5 samples•Nice antialiasedshadow•Using a bigger filter produces fake soft shadows•Setting bias is trickyMIT EECS 6.837, Durand and Cutler Projective Texturing + Shadow MapEye’s ViewLight’s ViewDepth/Shadow MapImages from Cass Everittet al., “Hardware Shadow Mapping”NVIDIA SDK White Paper Courtesy of Cass Everitt. Used with permission.MIT EECS 6.837, Durand and Cutler Shadows in Production•Often use shadow maps•Ray casting as fallback in case of robustness issues Images removed due to copyright considerations.MIT EECS 6.837, Durand and Cutler Today•Why are Shadows Important?•Shadows & Soft Shadows in Ray Tracing•Planar Shadows•Shadow Maps•Shadow Volumes–The Stencil BufferMIT EECS 6.837, Durand and Cutler Shadow Volumes•Explicitly represent the volume of space in shadow•For each polygon–Pyramid with point light as apex–Include polygon to cap•Shadow test similar to clippingMIT EECS 6.837, Durand and Cutler Shadow Volumes•If a point is inside a shadow volume cast by a particular light, the point does not receive any illumination from that light•Naive implementation:#polygons * #lightsMIT EECS 6.837, Durand and Cutler Shadow Volumes•Shoot a ray from the eye to the visible point•Increment/decrement a counter each time we intersect a shadow volume polygon (check z buffer)•If the counter ≠0,the point is in shadow+1-1+1MIT EECS 6.837, Durand and Cutler Stencil Buffer•Tag pixels in one rendering pass to control their update in subsequent rendering passes•"For all pixels in the frame buffer" →"For all taggedpixels in the frame buffer"•Used for real-time mirrors (& other reflective surfaces),shadows & more!MIT EECS 6.837, Durand and Cutler Stencil Buffer•Can specify different rendering operationsfor each of the following stencil tests:–stencil test fails–stencil test passes & depth test fails–stencil test passes & depth test passesShadow Volumes w/the Stencil Buffer MIT EECS 6.837, Durand and Cutler Initialize stencil buffer to 0Draw scene with ambient light onlyTurn off frame buffer & z-buffer updatesDraw front-facing shadow polygonsIf z-pass →increment counterDraw back-facing shadow polygonsIf z-pass →decrement counterTurn on frame buffer updatesTurn on lighting and redraw pixels with counter = 00+2+1MIT EECS 6.837, Durand and Cutler If the Eye is in Shadow...•... then a counter of 0 does not necessarily mean lit•3 Possible Solutions:1. Explicitly test eye point with respect to all shadow volumes2. Clip the shadow volumes to the view frustum3. "Z-Fail" shadow volumes-10-1MIT EECS 6.837, Durand and Cutler 1. Test Eye with Respect to Volumes•Adjust initial counter valueExpensive0+10+1MIT EECS 6.837, Durand and Cutler 2. Clip the Shadow Volumes•Clip the shadow volumes to the view frustum and include these new polygons •Messy CSGMIT EECS 6.837, Durand and Cutler 3. "Z-Fail" Shadow VolumesStart at infinity...Draw front-facing shadow polygonsIf z-fail, decrement counterDraw back-facing shadow polygonsIf z-fail, increment counter...0+10MIT EECS 6.837, Durand and Cutler 3. "Z-Fail" Shadow Volumes0+10•Introduces problems with far clipping plane•Solved by clamping the depth during clippingMIT EECS 6.837, Durand and Cutler Optimizing Shadow Volumes•Use silhouette edges only (edge where a back-facing & front-facing polygon meet)LAMIT EECS 6.837, Durand and Cutler Limitations of Shadow Volumes•Introduces a lot of new geometry•Expensive to rasterizelong skinny triangles•Limited precision of stencil buffer (counters) –for a really complex scene/object, the counter can overflow•Objects must be watertight to use silhouette trick•Rasterizationof polygons sharing an edge must not overlap & must not have gapMIT EECS 6.837, Durand and Cutler Next Time:Global Illumination: Radiosity