![Page 1: Shadows - University of Utah College of Engineeringcs5610/lectures/Shadows 2010.pdf · completely dark shadows – Avoid multiple “darkening” on one spot by using ordinary z-buffer](https://reader033.vdocuments.us/reader033/viewer/2022043008/5f96ff7e4b79d512ea3a6aab/html5/thumbnails/1.jpg)
1
1
Shadows
Thanks to:
Frédo Durand and Seth Teller MIT
2
Shadows
• Realism
• Depth cue
![Page 2: Shadows - University of Utah College of Engineeringcs5610/lectures/Shadows 2010.pdf · completely dark shadows – Avoid multiple “darkening” on one spot by using ordinary z-buffer](https://reader033.vdocuments.us/reader033/viewer/2022043008/5f96ff7e4b79d512ea3a6aab/html5/thumbnails/2.jpg)
2
3
Shadows as depth cue
4
Spatial relationship between objects
Michael McCoolUniv of Waterloo
![Page 3: Shadows - University of Utah College of Engineeringcs5610/lectures/Shadows 2010.pdf · completely dark shadows – Avoid multiple “darkening” on one spot by using ordinary z-buffer](https://reader033.vdocuments.us/reader033/viewer/2022043008/5f96ff7e4b79d512ea3a6aab/html5/thumbnails/3.jpg)
3
5
Spatial relationship between objects
Michael McCoolUniv of Waterloo
6
Spatial relationship between objects
Michael McCoolUniv of Waterloo
![Page 4: Shadows - University of Utah College of Engineeringcs5610/lectures/Shadows 2010.pdf · completely dark shadows – Avoid multiple “darkening” on one spot by using ordinary z-buffer](https://reader033.vdocuments.us/reader033/viewer/2022043008/5f96ff7e4b79d512ea3a6aab/html5/thumbnails/4.jpg)
4
7
Spatial relationship between objects
Michael McCoolUniv of Waterloo
8
Spatial relationship between objects
Michael McCoolUniv of Waterloo
![Page 5: Shadows - University of Utah College of Engineeringcs5610/lectures/Shadows 2010.pdf · completely dark shadows – Avoid multiple “darkening” on one spot by using ordinary z-buffer](https://reader033.vdocuments.us/reader033/viewer/2022043008/5f96ff7e4b79d512ea3a6aab/html5/thumbnails/5.jpg)
5
9without with
Shadows add visual acuity
10
Shadows and art
• Only in Western pictures (here Caravaggio)
![Page 6: Shadows - University of Utah College of Engineeringcs5610/lectures/Shadows 2010.pdf · completely dark shadows – Avoid multiple “darkening” on one spot by using ordinary z-buffer](https://reader033.vdocuments.us/reader033/viewer/2022043008/5f96ff7e4b79d512ea3a6aab/html5/thumbnails/6.jpg)
6
11
Shadows and art
• Shadows as the origin of painting
12
Duality shadow-view
• A point is lit if it is visible from the light source
• Shadow computation very similar to view computation
![Page 7: Shadows - University of Utah College of Engineeringcs5610/lectures/Shadows 2010.pdf · completely dark shadows – Avoid multiple “darkening” on one spot by using ordinary z-buffer](https://reader033.vdocuments.us/reader033/viewer/2022043008/5f96ff7e4b79d512ea3a6aab/html5/thumbnails/7.jpg)
7
13
Shadow ray
• Ray from visible point to light source
• If blocked, discard light contribution
• One shadow ray per light
• Optimization?– Stop after first intersection
(don’t worry about tmin)
– Test latest obstacle first
14
Ray-casting shadows
![Page 8: Shadows - University of Utah College of Engineeringcs5610/lectures/Shadows 2010.pdf · completely dark shadows – Avoid multiple “darkening” on one spot by using ordinary z-buffer](https://reader033.vdocuments.us/reader033/viewer/2022043008/5f96ff7e4b79d512ea3a6aab/html5/thumbnails/8.jpg)
8
15
Local vs. Global Illumination
• Core OpenGL uses local illumination model– Light sources used: distant, point, spot
– Pros:• Fast calculation of pixel color using Phong, only needs
– Position & direction of light source
– Material properties (diffuse, specular, ambient coeff)
– Light settings (intensity, fall-off, color)
– …but no info about other objects in the scene !
• Each primitive can be processed independently of others
– Cons:• Good looking images need global effects
– Reflected light (e.g. environment mapping)
– Shadows
16
Global: Shadows
• A point is in shadow if the light got blocked between the light source and point
Light Source
Viewer
Point is in shadow
Occluder
Point is lit
• Need mask that contains information about blocked / non blocked pixels
![Page 9: Shadows - University of Utah College of Engineeringcs5610/lectures/Shadows 2010.pdf · completely dark shadows – Avoid multiple “darkening” on one spot by using ordinary z-buffer](https://reader033.vdocuments.us/reader033/viewer/2022043008/5f96ff7e4b79d512ea3a6aab/html5/thumbnails/9.jpg)
9
17
Fake methods
• Still commonly used in games
• Shadows are simple, hand-drawn polygons
• No global effect …but better than no shadow at all
Images from TombRaider. ©Eidos Interactive.
18
Shadow Quality: “Blobs”
![Page 10: Shadows - University of Utah College of Engineeringcs5610/lectures/Shadows 2010.pdf · completely dark shadows – Avoid multiple “darkening” on one spot by using ordinary z-buffer](https://reader033.vdocuments.us/reader033/viewer/2022043008/5f96ff7e4b79d512ea3a6aab/html5/thumbnails/10.jpg)
10
19
Overview
• Projected Shadows
• Shadow map– Image-precision, texture mapping
• Shadow volume– Object space
• Soft shadows
20
Planar Projection
• Render a ground-plane
• Render an object
• Then render the object again, but this time– Projected onto the plane
– Without light, so that the shadow is black
– Half transparent (using blending), to avoid completely dark shadows
– Avoid multiple “darkening” on one spot by using ordinary z-buffer checks
![Page 11: Shadows - University of Utah College of Engineeringcs5610/lectures/Shadows 2010.pdf · completely dark shadows – Avoid multiple “darkening” on one spot by using ordinary z-buffer](https://reader033.vdocuments.us/reader033/viewer/2022043008/5f96ff7e4b79d512ea3a6aab/html5/thumbnails/11.jpg)
11
21
Projected Geometry
• [Blinn88] Me and my fake shadow– Shadows for selected large receiver polygons
• Ground plane
• Walls
22
Projected Geometry
• Example: xz plane at y=0
yy
yzzyz
yy
yxxyx
vl
vlvlp
vl
vlvlp
![Page 12: Shadows - University of Utah College of Engineeringcs5610/lectures/Shadows 2010.pdf · completely dark shadows – Avoid multiple “darkening” on one spot by using ordinary z-buffer](https://reader033.vdocuments.us/reader033/viewer/2022043008/5f96ff7e4b79d512ea3a6aab/html5/thumbnails/12.jpg)
12
23
Projected Geometry
• Transformation as 4 by 4 matrix
1010
00
0000
00
z
y
x
y
yz
xy
v
v
v
l
ll
ll
p
24
Projected Geometry
• General case: receiver polygon in plane E
• 4x4 matrix (see Blinn)
)(
0:
lvlvn
lndlp
dxnE
![Page 13: Shadows - University of Utah College of Engineeringcs5610/lectures/Shadows 2010.pdf · completely dark shadows – Avoid multiple “darkening” on one spot by using ordinary z-buffer](https://reader033.vdocuments.us/reader033/viewer/2022043008/5f96ff7e4b79d512ea3a6aab/html5/thumbnails/13.jpg)
13
25
Projected Geometry
• Basic algorithm– Render scene (full lighting)
– For each receiver polygon• Compute projection matrix M
• Mult with actual transformation (modelview)
• Render selected (occluder) geometry– Darken/Black
26
Planar Shadows
Shadow is projected into the plane of the floor.
![Page 14: Shadows - University of Utah College of Engineeringcs5610/lectures/Shadows 2010.pdf · completely dark shadows – Avoid multiple “darkening” on one spot by using ordinary z-buffer](https://reader033.vdocuments.us/reader033/viewer/2022043008/5f96ff7e4b79d512ea3a6aab/html5/thumbnails/14.jpg)
14
27
Constructing a Shadow Matrix
void shadowMatrix(GLfloat shadowMat[4][4], GLfloat groundplane[4], GLfloat lightpos[4]){
GLfloat dot;/* Find dot product between light position vector and ground plane normal. */dot = groundplane[X] * lightpos[X] +groundplane[Y] * lightpos[Y] +groundplane[Z] * lightpos[Z] +groundplane[W] * lightpos[W];shadowMat[0][0] = dot - lightpos[X] * groundplane[X];shadowMat[1][0] = 0.f - lightpos[X] * groundplane[Y];shadowMat[2][0] = 0.f - lightpos[X] * groundplane[Z];shadowMat[3][0] = 0.f - lightpos[X] * groundplane[W];shadowMat[X][1] = 0.f - lightpos[Y] * groundplane[X];shadowMat[1][1] = dot - lightpos[Y] * groundplane[Y];shadowMat[2][1] = 0.f - lightpos[Y] * groundplane[Z];shadowMat[3][1] = 0.f - lightpos[Y] * groundplane[W];shadowMat[X][2] = 0.f - lightpos[Z] * groundplane[X];shadowMat[1][2] = 0.f - lightpos[Z] * groundplane[Y];shadowMat[2][2] = dot - lightpos[Z] * groundplane[Z];shadowMat[3][2] = 0.f - lightpos[Z] * groundplane[W];shadowMat[X][3] = 0.f - lightpos[W] * groundplane[X];shadowMat[1][3] = 0.f - lightpos[W] * groundplane[Y];shadowMat[2][3] = 0.f - lightpos[W] * groundplane[Z];shadowMat[3][3] = dot - lightpos[W] * groundplane[W];
}
28
How to add shadows ?
• Can be done in two ways:– 1st method: Full illumination + darkening
FB = DiffuseTex0 * ( Light0 + Light1 + Light2… )if pixel is in shadow (with respect to Light0)FB = FB * 0.5
This is wrong since the contribution of Light1,2 etc.is also affected !
![Page 15: Shadows - University of Utah College of Engineeringcs5610/lectures/Shadows 2010.pdf · completely dark shadows – Avoid multiple “darkening” on one spot by using ordinary z-buffer](https://reader033.vdocuments.us/reader033/viewer/2022043008/5f96ff7e4b79d512ea3a6aab/html5/thumbnails/15.jpg)
15
29
How to add shadows ?
– 2nd & correct method: Use mask for each light
FB = DiffuseTex0 * ( Light0 * Mask0 + Light1 * Mask1 + Light2 * Mask2… )
Mask values• 0 if pixel is in shadow (with respect to Light X)
• 1 if pixel is lit by Light X
• 0…1 for pixels on shadow edge (soft shadow edge)
Accumulation of (Light0 * Mask0) + … can be doneusing additive blending
30
How to add shadows ?
• Algorithm– Render scene with ambient illumination only
– For each light source• Render scene with illumination from this light only
• Scale illumination by shadow mask
• Add up contribution to frame buffer
• Expensive but nearly correct !
• Speed-Up– Use more lights & masks in one pass
• Masks stored as textures
• Apply masks & sum up using e.g. register combiners
![Page 16: Shadows - University of Utah College of Engineeringcs5610/lectures/Shadows 2010.pdf · completely dark shadows – Avoid multiple “darkening” on one spot by using ordinary z-buffer](https://reader033.vdocuments.us/reader033/viewer/2022043008/5f96ff7e4b79d512ea3a6aab/html5/thumbnails/16.jpg)
16
31
How to Render the Shadow
/* Render 50% black shadow color on top of whateverthe floor appearance is. */
glEnable(GL_BLEND);glBlendFunc(GL_SRC_ALPHA,
GL_ONE_MINUS_SRC_ALPHA);glDisable(GL_LIGHTING); /* Force the 50% black. */glColor4f(0.0, 0.0, 0.0, 0.5);
glPushMatrix();
/* Project the shadow. */glMultMatrixf((GLfloat *) floorShadow);drawDinosaur();glPopMatrix();
32
Not Quite So Easy (1)
Without stencil to avoid double blendingof the shadow pixels:
Notice darks spotson the planar shadow.
Solution: Clear stencil to zero. Draw floor with stencilof one. Draw shadow if stencil is one. If shadow’sstencil test passes, set stencil to two. No double blending.
![Page 17: Shadows - University of Utah College of Engineeringcs5610/lectures/Shadows 2010.pdf · completely dark shadows – Avoid multiple “darkening” on one spot by using ordinary z-buffer](https://reader033.vdocuments.us/reader033/viewer/2022043008/5f96ff7e4b79d512ea3a6aab/html5/thumbnails/17.jpg)
17
33
Not Quite So Easy (2)
There’s still another problem even if usingstencil to avoid double blending.
depth buffer Zfighting artifacts
Shadow fights with depth values from thefloor plane. Use polygon offset to raise shadowpolygons slightly in Z.
34
Not Quite so Easy (3)
Good. Bad.Notice right image’s reflection falls off the floor!
Same problem with Shadows!
![Page 18: Shadows - University of Utah College of Engineeringcs5610/lectures/Shadows 2010.pdf · completely dark shadows – Avoid multiple “darkening” on one spot by using ordinary z-buffer](https://reader033.vdocuments.us/reader033/viewer/2022043008/5f96ff7e4b79d512ea3a6aab/html5/thumbnails/18.jpg)
18
35
Planar Projection
• Fast– Can be done with a matrix operation
• Easy– Just use the Modelview transform
• Very unrealistic– Just planar shadows
36
Projected Geometry
• Problems– Z-Fighting
• Use bias when rendering shadow polygons
• Use stencil buffer (no depth test)
– Bounded receiver polygon ?• Use stencil buffer (restrict drawing to receiver area)
– Shadow polygon overlap ?• Use stencil count (only the first pixel gets through)
![Page 19: Shadows - University of Utah College of Engineeringcs5610/lectures/Shadows 2010.pdf · completely dark shadows – Avoid multiple “darkening” on one spot by using ordinary z-buffer](https://reader033.vdocuments.us/reader033/viewer/2022043008/5f96ff7e4b79d512ea3a6aab/html5/thumbnails/19.jpg)
19
37
Fake shadows using textures
• Separate obstacle and receiver
• Compute b/w image of obstacle from light
• Use projective textures
Image from light source BW image of obstacle Final imageFigure from Moller & haines “Real Time Rendering”
38
Fake shadows using textures
• Limitations?
Image from light source BW image of obstacle Final imageFigure from Moller & haines “Real Time Rendering”
![Page 20: Shadows - University of Utah College of Engineeringcs5610/lectures/Shadows 2010.pdf · completely dark shadows – Avoid multiple “darkening” on one spot by using ordinary z-buffer](https://reader033.vdocuments.us/reader033/viewer/2022043008/5f96ff7e4b79d512ea3a6aab/html5/thumbnails/20.jpg)
20
39
Shadow maps
• Use texture mapping but using depth• 2 passes (at least)
– Compute shadow map from light source
• Store depth buffer(shadow map)
– Compute final image• Look up the
shadow map to know if points are in shadow
Figure from Foley et al. “Computer Graphics Principles and Practice”
40
Shadow map look up
• We have a 3D point x,y,z
• How do we look up the shadow map?
Figure from Foley et al. “Computer Graphics Principles and Practice”
(x,y,z)
![Page 21: Shadows - University of Utah College of Engineeringcs5610/lectures/Shadows 2010.pdf · completely dark shadows – Avoid multiple “darkening” on one spot by using ordinary z-buffer](https://reader033.vdocuments.us/reader033/viewer/2022043008/5f96ff7e4b79d512ea3a6aab/html5/thumbnails/21.jpg)
21
41
Shadow map look up
• We have a 3D point x,y,z
• How do we look up the shadow map?
• Use the 4x4 camera matrix from the light source
• We get (x’,y’,z’)
• Test: ShadowMap(x’,y’)<z’
Figure from Foley et al. “Computer Graphics Principles and Practice”
(x,y,z)(x’,y’,z’)
42
Shadow maps
• In Renderman– (High-end production software)
![Page 22: Shadows - University of Utah College of Engineeringcs5610/lectures/Shadows 2010.pdf · completely dark shadows – Avoid multiple “darkening” on one spot by using ordinary z-buffer](https://reader033.vdocuments.us/reader033/viewer/2022043008/5f96ff7e4b79d512ea3a6aab/html5/thumbnails/22.jpg)
22
43
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 values
44
Introducing Another Technique: Shadow Mapping
• Image-space shadow determination– Lance Williams published the basic idea in 1978
• By coincidence, same year Jim Blinn invented bump mapping (a great vintage year for graphics)
– Completely image-space algorithm
• means no knowledge of scene’s geometry is required
• must deal with aliasing artifacts
– Well known software rendering technique
• Pixar’s RenderMan uses the algorithm
• Basic shadowing technique for Toy Story, etc.
![Page 23: Shadows - University of Utah College of Engineeringcs5610/lectures/Shadows 2010.pdf · completely dark shadows – Avoid multiple “darkening” on one spot by using ordinary z-buffer](https://reader033.vdocuments.us/reader033/viewer/2022043008/5f96ff7e4b79d512ea3a6aab/html5/thumbnails/23.jpg)
23
45
Shadow Mapping References
• Important SIGGRAPH papers– Lance Williams, “Casting Curved Shadows on
Curved Surfaces,” SIGGRAPH 78
– William Reeves, David Salesin, and Robert Cook (Pixar), “Rendering antialiased shadows with depth maps,” SIGGRAPH 87
– Mark Segal, et. al. (SGI), “Fast Shadows and Lighting Effects Using Texture Mapping,”SIGGRAPH 92
46
The Shadow Mapping Concept (1)
• Depth testing from the light’s point-of-view– Two pass algorithm
– First, render depth buffer from the light’s point-of-view
• the result is a “depth map” or “shadow map”
• essentially a 2D function indicating the depth of the closest pixels to the light
– This depth map is used in the second pass
![Page 24: Shadows - University of Utah College of Engineeringcs5610/lectures/Shadows 2010.pdf · completely dark shadows – Avoid multiple “darkening” on one spot by using ordinary z-buffer](https://reader033.vdocuments.us/reader033/viewer/2022043008/5f96ff7e4b79d512ea3a6aab/html5/thumbnails/24.jpg)
24
47
The Shadow Mapping Concept (2)
• Shadow determination with the depth map– Second, render scene from the eye’s point-of-view
– For each rasterized fragment• determine fragment’s XYZ position relative to the light
• this light position should be setup to match the frustum used to create the depth map
• compare the depth value at light position XY in the depth map to fragment’s light position Z
48
The Shadow Mapping Concept (3)
• The Shadow Map Comparison– Two values
• A = Z value from depth map at fragment’s light XY position
• B = Z value of fragment’s XYZ light position
– If B is greater than A, then there must be something closer to the light than the fragment
• then the fragment is shadowed
– If A and B are approximately equal, the fragment is lit
![Page 25: Shadows - University of Utah College of Engineeringcs5610/lectures/Shadows 2010.pdf · completely dark shadows – Avoid multiple “darkening” on one spot by using ordinary z-buffer](https://reader033.vdocuments.us/reader033/viewer/2022043008/5f96ff7e4b79d512ea3a6aab/html5/thumbnails/25.jpg)
25
49
Shadow Mapping with a Picture in 2D (1)
lightsource
eyeposition
depth map Z = A
fragment’slight Z = B
depth map image plane
eye view image plane,a.k.a. the frame buffer
The A < B shadowed fragment case
50
Shadow Mapping with a Picture in 2D (2)
lightsource
eyeposition
depth map Z = A
fragment’slight Z = B
depth map image plane
eye view image plane,a.k.a. the frame buffer
The A B unshadowed fragment caseThe A B unshadowed fragment case
![Page 26: Shadows - University of Utah College of Engineeringcs5610/lectures/Shadows 2010.pdf · completely dark shadows – Avoid multiple “darkening” on one spot by using ordinary z-buffer](https://reader033.vdocuments.us/reader033/viewer/2022043008/5f96ff7e4b79d512ea3a6aab/html5/thumbnails/26.jpg)
26
51
Note image precision mismatch!Note image precision mismatch!
The depth mapThe depth mapcould be at acould be at adifferent resolutiondifferent resolutionfrom the framebufferfrom the framebuffer
This mismatch canThis mismatch canlead to artifactslead to artifacts
Shadow Mapping with a Picture in 2D (3)
52
Visualizing the ShadowMapping Technique (1)
• A fairly complex scene with shadows
the pointthe pointlight sourcelight source
![Page 27: Shadows - University of Utah College of Engineeringcs5610/lectures/Shadows 2010.pdf · completely dark shadows – Avoid multiple “darkening” on one spot by using ordinary z-buffer](https://reader033.vdocuments.us/reader033/viewer/2022043008/5f96ff7e4b79d512ea3a6aab/html5/thumbnails/27.jpg)
27
53
Visualizing the ShadowMapping Technique (2)
• Compare with and without shadows
with shadowswith shadows without shadowswithout shadows
54
Visualizing the ShadowMapping Technique (3)
• The scene from the light’s point-of-view
FYI: from theFYI: from theeyeeye’’s points point--ofof--viewviewagainagain
![Page 28: Shadows - University of Utah College of Engineeringcs5610/lectures/Shadows 2010.pdf · completely dark shadows – Avoid multiple “darkening” on one spot by using ordinary z-buffer](https://reader033.vdocuments.us/reader033/viewer/2022043008/5f96ff7e4b79d512ea3a6aab/html5/thumbnails/28.jpg)
28
55
Visualizing the ShadowMapping Technique (4)
• The depth buffer from the light’s point-of-view
FYI: from theFYI: from thelightlight’’s points point--ofof--viewviewagainagain
56
Visualizing the ShadowMapping Technique (5)
• Projecting the depth map onto the eye’s view
FYI: depth map forFYI: depth map forlightlight’’s points point--ofof--viewviewagainagain
![Page 29: Shadows - University of Utah College of Engineeringcs5610/lectures/Shadows 2010.pdf · completely dark shadows – Avoid multiple “darkening” on one spot by using ordinary z-buffer](https://reader033.vdocuments.us/reader033/viewer/2022043008/5f96ff7e4b79d512ea3a6aab/html5/thumbnails/29.jpg)
29
57
Visualizing the ShadowMapping Technique (6)
• Projecting light’s planar distance onto eye’s view
58
Visualizing the ShadowMapping Technique (6)
• Comparing light distance to light depth map
Green is Green is where the where the
light planar light planar distance and distance and
the light the light depth map depth map
are are approximatelapproximatel
y equaly equal
NonNon--green is green is where where shadows shadows should beshould be
![Page 30: Shadows - University of Utah College of Engineeringcs5610/lectures/Shadows 2010.pdf · completely dark shadows – Avoid multiple “darkening” on one spot by using ordinary z-buffer](https://reader033.vdocuments.us/reader033/viewer/2022043008/5f96ff7e4b79d512ea3a6aab/html5/thumbnails/30.jpg)
30
59
Visualizing the ShadowMapping Technique (7)
• Scene with shadows
Notice how Notice how specular specular
highlights highlights never appear never appear
in shadowsin shadows
Notice how Notice how curved curved surfaces cast surfaces cast shadows on shadows on each othereach other
60
Shadow Quality: Shadow Maps
![Page 31: Shadows - University of Utah College of Engineeringcs5610/lectures/Shadows 2010.pdf · completely dark shadows – Avoid multiple “darkening” on one spot by using ordinary z-buffer](https://reader033.vdocuments.us/reader033/viewer/2022043008/5f96ff7e4b79d512ea3a6aab/html5/thumbnails/31.jpg)
31
61
Problems with shadow maps?
• Field of view
• Bias
• Aliasing
62
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!
![Page 32: Shadows - University of Utah College of Engineeringcs5610/lectures/Shadows 2010.pdf · completely dark shadows – Avoid multiple “darkening” on one spot by using ordinary z-buffer](https://reader033.vdocuments.us/reader033/viewer/2022043008/5f96ff7e4b79d512ea3a6aab/html5/thumbnails/32.jpg)
32
63
Problems with shadow maps?
• Field of view
• Bias
• Aliasing
64
The bias nightmare
• For a point visible from the light source
ShadowMap(x’,y’)z’
• Avoid erroneous self shadowing
![Page 33: Shadows - University of Utah College of Engineeringcs5610/lectures/Shadows 2010.pdf · completely dark shadows – Avoid multiple “darkening” on one spot by using ordinary z-buffer](https://reader033.vdocuments.us/reader033/viewer/2022043008/5f96ff7e4b79d512ea3a6aab/html5/thumbnails/33.jpg)
33
65
The bias nightmare
hithit+epsilon*light
• Shadow ray casting– Start the ray at
hit+light*epsilon
– Add bias to avoid degeneracy
– Yet another instance of geometric robustness
66
Bias for shadow maps
ShadowMap(x’,y’)+bias < z’
Choosing the good bias value can be very tricky
![Page 34: Shadows - University of Utah College of Engineeringcs5610/lectures/Shadows 2010.pdf · completely dark shadows – Avoid multiple “darkening” on one spot by using ordinary z-buffer](https://reader033.vdocuments.us/reader033/viewer/2022043008/5f96ff7e4b79d512ea3a6aab/html5/thumbnails/34.jpg)
34
67
Construct Light View Depth Map
• Realizing the theory in practice– Constructing the depth map
• use existing hardware depth buffer
• use glPolygonOffset to bias depth value
• read back the depth buffer contents
– Depth map can be copied to a 2D texture• unfortunately, depth values tend to require more
precision than 8-bit typical for textures
• Fortunately, we have floating-point textures
• depth precision typically 16-bit or 24-bit
68
Justification for glPolygonOffsetWhen Constructing Shadow Maps
• Depth buffer contains “window space” depth values– Post-perspective divide means non-linear distribution
– glPolygonOffset is guaranteed to be a window space offset
• Doing a “clip space” glTranslatef is not sufficient– Common shadow mapping implementation mistake
– Actual bias in depth buffer units will vary over the frustum
– No way to account for slope of polygon
![Page 35: Shadows - University of Utah College of Engineeringcs5610/lectures/Shadows 2010.pdf · completely dark shadows – Avoid multiple “darkening” on one spot by using ordinary z-buffer](https://reader033.vdocuments.us/reader033/viewer/2022043008/5f96ff7e4b79d512ea3a6aab/html5/thumbnails/35.jpg)
35
69
Sampling a Polygon’s Depth at Pixel Centers (1)
• Consider a polygon covering pixels in 2D
X
Z
Pixel centers
Polygon
70
Sampling a Polygon’s Depthat Pixel Centers (2)
X
Z
X
Z
• Consider a 2nd grid for the polygon covering pixels in 2D
![Page 36: Shadows - University of Utah College of Engineeringcs5610/lectures/Shadows 2010.pdf · completely dark shadows – Avoid multiple “darkening” on one spot by using ordinary z-buffer](https://reader033.vdocuments.us/reader033/viewer/2022043008/5f96ff7e4b79d512ea3a6aab/html5/thumbnails/36.jpg)
36
71
Sampling a Polygon’s Depthat Pixel Centers (3)
• How Z changes with respect to X
X
Z
z/x
72
Why You NeedglPolygonOffset’s Slope
• Say pixel center is re-sampled to another grid– For example, the shadow map texture’s grid!
• The re-sampled depth could be off by+/-0.5 z/x and +/-0.5 z/y
• The maximum absolute error would be| 0.5 z/x | + | 0.5 z/y | max( | z/x | , | z/y | )
– This assumes the two grids have pixel footprint area ratios of 1.0
– Otherwise, we might need to scale by the ratio
• Exactly what polygon offset’s “slope” depth bias does
![Page 37: Shadows - University of Utah College of Engineeringcs5610/lectures/Shadows 2010.pdf · completely dark shadows – Avoid multiple “darkening” on one spot by using ordinary z-buffer](https://reader033.vdocuments.us/reader033/viewer/2022043008/5f96ff7e4b79d512ea3a6aab/html5/thumbnails/37.jpg)
37
73
Depth Map Bias Issues
• How much polygon offset bias depends
Too little bias,Too little bias,everything begins toeverything begins toshadowshadow
Too much bias, shadowToo much bias, shadowstarts too far backstarts too far back
Just rightJust right
74
Selecting the Depth Map Bias
• Not that hard– Usually the following works well
• glPolygonOffset(scale = 1.1, bias = 4.0)
– Usually better to error on the side of too much bias• adjust to suit the shadow issues in your scene
– Depends somewhat on shadow map precision• more precision requires less of a bias
– When the shadow map is being magnified, a larger scale is often required
![Page 38: Shadows - University of Utah College of Engineeringcs5610/lectures/Shadows 2010.pdf · completely dark shadows – Avoid multiple “darkening” on one spot by using ordinary z-buffer](https://reader033.vdocuments.us/reader033/viewer/2022043008/5f96ff7e4b79d512ea3a6aab/html5/thumbnails/38.jpg)
38
75
Problems with shadow maps?
• Field of view
• Bias
• Aliasing
76
Shadow map aliasing
• Undersampling of shadow map
• Reprojection aliasing
![Page 39: Shadows - University of Utah College of Engineeringcs5610/lectures/Shadows 2010.pdf · completely dark shadows – Avoid multiple “darkening” on one spot by using ordinary z-buffer](https://reader033.vdocuments.us/reader033/viewer/2022043008/5f96ff7e4b79d512ea3a6aab/html5/thumbnails/39.jpg)
39
77
Alaising
• Finite shadow map resolution
• Result: pixelizedshadows
78
Shadow map filtering
• Does not work!
• Filtering depth is not meaningful
![Page 40: Shadows - University of Utah College of Engineeringcs5610/lectures/Shadows 2010.pdf · completely dark shadows – Avoid multiple “darkening” on one spot by using ordinary z-buffer](https://reader033.vdocuments.us/reader033/viewer/2022043008/5f96ff7e4b79d512ea3a6aab/html5/thumbnails/40.jpg)
40
79
Percentage closer filtering
• Filter the result of the test
• But makes the bias issue more tricky
80
Percentage closer filtering
• 5x5 samples
• Nice antialiasedshadow
• Using a bigger filter produces fake soft shadows
• But makes the bias issue more tricky
![Page 41: Shadows - University of Utah College of Engineeringcs5610/lectures/Shadows 2010.pdf · completely dark shadows – Avoid multiple “darkening” on one spot by using ordinary z-buffer](https://reader033.vdocuments.us/reader033/viewer/2022043008/5f96ff7e4b79d512ea3a6aab/html5/thumbnails/41.jpg)
41
81
Shadows in production
• Often use shadow maps
• Ray casting as fallback in case of robustness issues
82
Movie Time!
![Page 42: Shadows - University of Utah College of Engineeringcs5610/lectures/Shadows 2010.pdf · completely dark shadows – Avoid multiple “darkening” on one spot by using ordinary z-buffer](https://reader033.vdocuments.us/reader033/viewer/2022043008/5f96ff7e4b79d512ea3a6aab/html5/thumbnails/42.jpg)
42
83
Alaising
• Bad aliasing cases:– Large Scenes
• High resolution shadow map required
– Close-ups to shadow boundaries • Zoom in
– Shadow stretches along the receiver
84
Aliasing
• Duelling frusta– Light shines opposite to viewing direction
![Page 43: Shadows - University of Utah College of Engineeringcs5610/lectures/Shadows 2010.pdf · completely dark shadows – Avoid multiple “darkening” on one spot by using ordinary z-buffer](https://reader033.vdocuments.us/reader033/viewer/2022043008/5f96ff7e4b79d512ea3a6aab/html5/thumbnails/43.jpg)
43
85
Aliasing
• Duelling frusta– Resolution mismatch
86
Aliasing
• Miner’s headlamp– Similar frusta
– Similar sampling
– One shadowmap pixel for image pixel
![Page 44: Shadows - University of Utah College of Engineeringcs5610/lectures/Shadows 2010.pdf · completely dark shadows – Avoid multiple “darkening” on one spot by using ordinary z-buffer](https://reader033.vdocuments.us/reader033/viewer/2022043008/5f96ff7e4b79d512ea3a6aab/html5/thumbnails/44.jpg)
44
87
Hardware Support
• OpenGL 1.4– GL_ARB_DEPTH_TEXTURE
internal texture format to store depth values
– glTexGengeneration of light space coordinates as texture coordinates
– GL_ARB_SHADOW special texture mode: return texture(s,t) < r ? Black : White;
88
Hardware Support
• P-Buffers– offscreen rendering of shadow map– large shadow maps sizes
• GL_ARB_RENDER_TEXTURE and WGL_NV_RENDER_TEXTURE– bind P-Buffer depth buffer as depth texture– no copy needed
![Page 45: Shadows - University of Utah College of Engineeringcs5610/lectures/Shadows 2010.pdf · completely dark shadows – Avoid multiple “darkening” on one spot by using ordinary z-buffer](https://reader033.vdocuments.us/reader033/viewer/2022043008/5f96ff7e4b79d512ea3a6aab/html5/thumbnails/45.jpg)
45
89
Hardware Support
• Register Combiners / Fragment Programs– for shadow application
– if point is in shadow:• leave ambient light unchanged
– ambient light has no origin, thus cannot be shadowed
• dim diffuse light– some shading remains to show surface orientation
• remove specular light– no highlights in shadow
90
Pros and Cons
+ general– everything that can be rendered can cast and receive a shadow
– works together with vertex programs
+ fast– full hardware support
– (almost) no overhead for static scenes
– two passes needed for dynamic scenes
+ robust
+ easy to implement
- aliasing
![Page 46: Shadows - University of Utah College of Engineeringcs5610/lectures/Shadows 2010.pdf · completely dark shadows – Avoid multiple “darkening” on one spot by using ordinary z-buffer](https://reader033.vdocuments.us/reader033/viewer/2022043008/5f96ff7e4b79d512ea3a6aab/html5/thumbnails/46.jpg)
46
91
Questions?
92
Questions?
![Page 47: Shadows - University of Utah College of Engineeringcs5610/lectures/Shadows 2010.pdf · completely dark shadows – Avoid multiple “darkening” on one spot by using ordinary z-buffer](https://reader033.vdocuments.us/reader033/viewer/2022043008/5f96ff7e4b79d512ea3a6aab/html5/thumbnails/47.jpg)
47
93
Overview
• Shadow map– Image-precision, texture mapping
• Shadow volume– Object space
• Soft shadows
94
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 clipping
![Page 48: Shadows - University of Utah College of Engineeringcs5610/lectures/Shadows 2010.pdf · completely dark shadows – Avoid multiple “darkening” on one spot by using ordinary z-buffer](https://reader033.vdocuments.us/reader033/viewer/2022043008/5f96ff7e4b79d512ea3a6aab/html5/thumbnails/48.jpg)
48
95
Shadow volumes naïve rendering
• Pick your favorite rendering algorithm
• For each visible point– For each light
• For each shadow volume– If point inside volume
» Point is in shadow
Great but costly(#poly * #light tests for each visible point)
96
Shadow volumes smarter rendering
• New way to define inside/outside
• Consider ray from eye to visible point
• Increment or decrement a counter each time we intersect a shadow volume polygon
• Points lit: counter =0
+1-1
![Page 49: Shadows - University of Utah College of Engineeringcs5610/lectures/Shadows 2010.pdf · completely dark shadows – Avoid multiple “darkening” on one spot by using ordinary z-buffer](https://reader033.vdocuments.us/reader033/viewer/2022043008/5f96ff7e4b79d512ea3a6aab/html5/thumbnails/49.jpg)
49
97
Hardware shadow volumes • Add counter buffer• Draw scene with no shading• Turn off buffer update• Draw frontfacing
shadow polygons– If z-pass– Increment counter
• Draw backfacingshadow polygons– If z-pass– Decrement counter
• Compute shading– Lit Points have
counter=0
+1
+1-1
98
Optimizing shadow volumes
• Use silhouette edges only
L
A
![Page 50: Shadows - University of Utah College of Engineeringcs5610/lectures/Shadows 2010.pdf · completely dark shadows – Avoid multiple “darkening” on one spot by using ordinary z-buffer](https://reader033.vdocuments.us/reader033/viewer/2022043008/5f96ff7e4b79d512ea3a6aab/html5/thumbnails/50.jpg)
50
99
Problem if eye inside shadow
• Then a counter of 0 does not necessarily mean lit
• Three solutions– Explicitly test eye point
wrt all volumes
– Clip the shadow volumes and include these new polygons
– Z-fail shadow volumes
-1
100
Problem if eye inside shadow
– Clip the shadow volumes and include these new polygons
![Page 51: Shadows - University of Utah College of Engineeringcs5610/lectures/Shadows 2010.pdf · completely dark shadows – Avoid multiple “darkening” on one spot by using ordinary z-buffer](https://reader033.vdocuments.us/reader033/viewer/2022043008/5f96ff7e4b79d512ea3a6aab/html5/thumbnails/51.jpg)
51
101
Z-fail shadow volume• Count from infinity• Draw scene with no shading• Turn off buffer update• Draw frontfacing shadow polygons
– If z-fail– Decrement counter
• Draw backfacing shadow polygons– If z-fail– Increment counter
• Compute shading– Lit points have counter=0
+1
102
Z-fail shadow volume
• Count from infinity• Then we can have
problems with far clipping plane
• Can be solved with new hardware trick– Depth clamp at clipping
stage– Instead of clipping a
polygon, it can be rendered with maximum depth
+1
![Page 52: Shadows - University of Utah College of Engineeringcs5610/lectures/Shadows 2010.pdf · completely dark shadows – Avoid multiple “darkening” on one spot by using ordinary z-buffer](https://reader033.vdocuments.us/reader033/viewer/2022043008/5f96ff7e4b79d512ea3a6aab/html5/thumbnails/52.jpg)
52
103
Questions?