Shadow volume

advertisement
Computer Graphics
Mirror and Shadows
Taku Komura
Lecture 16
Today
• Mirrors
– How to render the scene
– Using the stencil buffer
• Shadows
–
–
–
–
–
Overview
Projective shadows
Shadow texture
Shadow volume
Shadow map
Lecture 16
Planar Reflections (Flat Mirrors)
• Basic idea: Drawing a scene with mirrors!
– We need to draw all the stuff around the mirror
– We need to draw the stuff in the mirror, reflected,
without drawing over the things around the mirror
• Key point: You can reflect the viewpoint about
the mirror to see what is seen in the mirror, or
you can reflect the world about the mirror
Lecture 16
Reflecting Objects
Wall Mirror
• If the mirror passes
through the origin, and is
aligned with a coordinate
axis, then just negate
appropriate coordinate
• Otherwise, transform into
mirror space, reflect,
transform back
Lecture 16
We need to use the “Stencil Buffer”
• The stencil buffer acts like a
paint stencil - it lets some
fragments through but not others
• It stores multi-bit values
• You specify two things:
– The test that controls which
fragments get through
– The operations to perform on the
buffer when the test passes or fails
Lecture 16
Stencil Tests
• You give an operation, a
reference value, and a mask
• Operations:
– Always let the fragment through
– Never let the fragment through
– Logical operations between the
reference value and the value in
the buffer: <, <=, =, !=, >, >=
Lecture 16
Color Buffer, Z-Buffer
• Color Buffer (frame buffer)
– The buffer in which the RGB
data is saved
• Z-Buffer (depth buffer)
– The depth to the object is saved
– Depth test can be conducted;
check whether the new object is
farther or closer than the depth
in the buffer
– Only update the color buffer
when the depth is smaller
Lecture 16
Stencil Operations
• Specify three different operations
– If the stencil test fails
– If the stencil passes but the depth test fails
– If the stencil passes and the depth test passes
• Operations are:
–
–
–
–
–
–
Keep the current stencil value
Zero the stencil
Replace the stencil with the reference value
Increment the stencil
Decrement the stencil
Invert the stencil (bitwise)
Lecture 16
Reflection Example
mirror
Lecture 16
Normal first, reflected area next
• First pass:
– Render the scene without the mirror
• For each mirror
– Second pass:
• Clear the stencil, render the mirror, setting
the stencil if the depth test passes
– Third pass:
• Clear the depth buffer with the stencil
active, passing things inside the mirror
only
• Reflect the world and draw using the
stencil test. Only things seen in the mirror
will be drawn
• Combine it with the scene made during the
first pass
The
Lecture 16
The stencil buffer after the second pass
color buffer after the second pass
– the reflected scene cleared outside the stencil
Multiple mirrors
• Can manage multiple mirrors
– Render normal view, then do other
passes for each mirror
• A recursive formulation exists for
mirrors that see other mirrors
– After rendering the reflected area
inside the mirror surface, render the
mirrors inside the mirror surface, and
so on
Lecture 16
Today
• Mirrors
– How to render the scene
– Using the stencil buffer
• Shadows
–
–
–
–
–
Overview
Projective shadows
Shadow texture
Shadow volume
Shadow map
Lecture 16
Why Shadows?
• Shadows tell us about the relative locations and motions of
objects
Lecture 16
Shadows and Motion
Humans conceive the motion of objects using
shadows
Demo movie
http://gandalf.psych.umn.edu/users/kersten/kersten-lab/images/ball-in-a-box.mov
Lecture 16
Facts about Shadows
• Shadows can be considered as areas hidden from the
light source
• A shadow on A due to B can be found by projecting B
onto A with the light as the center of projection
– Suggests the use of projection transformations
• Point lights have hard edges, and area lights have soft
edges
Lecture 16
Soft and hard shadows
Soft shadows
Hard shadows
Lecture 16
Today
• Mirrors
– How to render the scene
– Using the stencil buffer
• Shadows
–
–
–
–
Overview
Projective shadows
Shadow texture
Shadow volume
Lecture 16
Ground Plane Shadows
• Shadows cast by point light
sources onto planes are an
important case that is
relatively easy to compute
L(light position)
(xl,yl,zl)
(xp,yp,zp)
– Shadows cast by objects
(cars, players) onto the
ground
(xsw,ysw,zsw)
Lecture 16
Point Light Shadows
Light source
Object
Floor
Lecture 16
Point Light Shadows
• Blinn ’88 gives a matrix that works for local point
light sources
– Takes advantage of perspective transformation (and
homogeneous coordinates)
xsw
 zl
y  0
 sw

0 0
  
1 0
0 x
0xp
l

zl yl 0yp
 
0 0 0zp
 
0 
1 zl1
Lecture 16
Drawing the Shadow
• We now have a matrix that transforms an object into
its shadow
• Drawing the shadow:
– Draw the polygon
– Multiply the shadow matrix into the model transformation
– Redraw the object in grey with blending on
• Tricks:
– Lift the shadow a little off the plane to avoid z-buffer
quantization errors (can be done with extra term in matrix)
Lecture 16
Lifting the shadow above the surface
Light
Viewer
Z equal with hit polygon
Z-buffer quantization errors
Z above hit polygon
Apparent shadow too big
Lecture 16
Point Light Shadows : problem
• shadows can only be cast onto planes
and not on arbitrary objects.
• the resulting shadows generated have
hard edges
• If there is a texture on the floor, grey
shadows look bad
– If we use blending, the shadow part with
multiple polygons overlapping will look
darker
Lecture 16
Improving Planar Projected Shadows
with Stencil
• Only pixels tagged with the ground plane’s unique stencil
value will be updated when the shadow is rendered.
• When a shadow is rendered, the stencil value is set to zero
– subsequent pixel updates will fail
• Lifting the shadows above the floor not necessary,
– stencil buffer used to avoid rendering the floor over the shadow
region
Lecture 16
Shadow Texture
• Use a shadow image as a
projective texture
• Generate an image of the
occluder from the light’s view
and color it grey
• Project this image onto the
background and render it using
texture mapping
• Can render shadows over curved
surfaces
Lecture 16
Shadow Texture : Drawbacks
Drawbacks
• The occluder and receiver
must be specified
• Occluding objects cannot
shadow themselves
• Magnification of textures
– Resolution must be adapted
Lecture 16
Adaptive Shadow Mapping
• The resolution of the shadow maps is lower than that
of the rendered image
– Many box shape artifacts
• Need to use shadow map of higher resolutions
• Changing the resolution the shadow map according to
the viewpoint
• [Fernando et al. 2001]
Lecture 16
Today
• Mirrors
– How to render the scene
– Using the stencil buffer
• Shadows
–
–
–
–
–
Overview
Projective shadows
Shadow texture
Shadow volume
Shadow map
Lecture 16
Shadow Volume
• In the real world, the shadow
cast by an object blocking a
light is a volume, not merely
some two-dimensional portion
of a plane.
• An algorithm that models
shadow regions as volumes.
Lecture 16
Using Shadow Volumes to Render
Shadows
Two stages
• Compute the shadow volume formed by a light
source and a set of shadowing objects.
• Check whether the point is inside / outside the
shadow volume
•
•
inside  shadowed
Outside  illuminated by light source
Lecture 16
Lecture 16
How to decide inside or out
• Get the polygonal boundary representation for the shadow
volume
• Render the scene with the lights enabled
• Clear the stencil buffer, and render the shadow volume
– Whenever a rendered fragment of the shadow volume is closer
than the depth of the other objects, invert a bit in the stencil
value for that pixel
• After rendering, if the bit is on, then it means the fragment
is inside the shadow volume, so must be shadowed
• Otherwise outside the shadow
Lecture 16
Advantage / Disadvantages of Shadow
Volume
• Advantage
– It can be used on general-purpose graphics hardware
• Only using the stencil buffer
• Disadvantage
– Bottle neck at the rasterizer
– Many shadow volumes covering many pixels
Lecture 16
Shadow Mapping
• A method using the Z-buffer
• Render the scene from the light source using the Zbuffer algorithm
– The Z-buffer contains the distance to the object
– shadow depth map / shadow buffer
• Render the scene from the view point
– If the rendered vertex is farther away from the value in
the Z-buffer, it is in the shadow
Lecture 16
Shadow Map
• Checking whether Va,Vb is closer to the light
Lecture 16
Shadow Map
Preparation
• Prepare a depth buffer for each light
• Render the scene from the light position
• Save the depth information in the depth buffer
Rendering the scene
1. Render the objects; when ever rendering an object, check if it
is shadowed or not by transforming its coordinate into the
light space
2. After the transformation, if the depth value is larger than that
in the light’s depth buffer it should be shadowed
Lecture 16
Shadow Map
Advantage
• Don’t need a stencil buffer
• When there are many shadows, it is faster then
shadow volume
Disadvantage
1. Less accurate than the shadow volume – why?
Lecture 16
Soft shadowing by multiple point light
sources
• Model an area light source as a collection of point
light sources
• Can be used with both planar projected shadows
approach or shadow volume approach
• Additive blending is used to accumulate the
contribution of each light.
• The softness of the shadow depends on an adequate
number of samples.
• The time to render the scene increases linearly with
the number of samples used to approximate an area
light source.
• Artifacts are introduced if not enough samples are
used
Lecture 16
Other techniques to generate soft
shadow
• Using convolutions - Creating a hard edged shadow
texture and render it a number of times by jittering
the location, and finally filtering it
Lecture 16
Summary
• Mirrors
– How to render the scene
– Using the stencil buffer
• Shadows
–
–
–
–
–
Overview
Projective shadows
Shadow texture
Shadow volume
Shadow map
Lecture 16
Download