1 10/24/2015 13:01 uml graphics ii 91.547 shadows session 4
Post on 20-Jan-2016
215 Views
Preview:
TRANSCRIPT
104/21/23 16:48
UML
Graphics II 91.547
Shadows
Session 4
204/21/23 16:48
UML
The General Lighting Situation
Proj. Plane
COP
Light Source
Objects
304/21/23 16:48
UML
The Simplified OpenGL Model
Proj. Plane
COP
Light Source
Objects
For each object (or primitive) For each light source enabled Compute color at pixel based on:
Source properties Angle, distance to source
Angle to observer (COP) Material properties
404/21/23 16:48
UML
Vectors Used byPhong Lighting Model
n
l r
v
p is an arbitrary point on a surface.n is the unit normal to the surface at p.l is a unit vector in the direction of the light source.r is a unit vector in the direction of a perfectly (specular) reflectionv is a unit vector in the direction of the viewer.
p
COP
504/21/23 16:48
UML
The Complete Phong Model
I 1
a bd cd 2(kdLd (l n) ksLs (r v) ) kaLa
Distance term Ambient term
Diffuse termSpecular term
604/21/23 16:48
UML
Rendered with Phong Model
704/21/23 16:48
UML
Rendered with Ray Tracing
804/21/23 16:48
UML
Information provided by shadows:Where are the balls?
904/21/23 16:48
UML
Where are the balls?Shadows show relative position.
1004/21/23 16:48
UML
Shadows: How do we get them?*
1. Integration of shadow calculation with scan-line hiddensurface removal
2. Projection and clipping
3. Shadow volumes
4. Shadow z-buffer
5. Recursive ray tracing
6. Radiosity
*Classification due to Bergeron, 1986, quoted in Watt & Watt
1104/21/23 16:48
UML
Projecting shadows
Light Source
ShadowingObject (polygon)
Plane of projection
1204/21/23 16:48
UML
Why is this model a simplification?
Finite sizelight source
Shadowingobject
Umbra
Penumbra
1304/21/23 16:48
UML
Projecting shadows
Light Source
ShadowingObject (polygon)
Plane of projection:
x
y
z
L
L
L
1
x
y
z
S
S
S
1
ax by cz d 0
Projected point.
1404/21/23 16:48
UML
Calculating the projection matrix
a x x b y y c z z dL L L( ) ( ) ( ) 0
x
y
z
L
L
L
1
0
0
0
1
Light source moved to origin.
p p S
pS
1504/21/23 16:48
UML
Calculating the projection matrix
a x x b y y c z z d
ax by cz ax by cz d
ax by cz dax by cz
dotax by cz
S L S L S L
S S S L L L
L L L
S S S S S S
( ) ( ) ( )
( ) ( )
0
0
Substituting parametric expression for projection line into plane equation:
dot
dot
dot
a b c
0 0 0
0 0 0
0 0 0
0
Substituting back into line equation gives the following transformation:
1604/21/23 16:48
UML
Calculating the projection matrix:
1 0 0
0 1 0
0 0 1
0 0 0 1
0 0 0
0 0 0
0 0 0
0
1 0 0
0 1 0
0 0 1
0 0 0 1
x
y
z
dot
dot
dot
a b c
x
y
z
L
L
L
L
L
L
dot ax bx cx dx
ay dot by cy dy
az bz dot cz dz
a b c dot d
L L L L
L L L L
L L L L
Performing the matrix multiplication gives:
Transform to frame where light is at origin, then transform back:
1704/21/23 16:48
UML
Projection shadow algorithm
1. Render all objects
2. For each light sourceFor each shadowing object
For each shadowed planeProject shadowing object onto planeClip to dimension of shadowed polygonRender the shadow
1804/21/23 16:48
UML
The Clipping Issue
Light
Shadow clipped at this boundary
Plane 1
Plane 2
1904/21/23 16:48
UML
Using the stencil buffer
Color Planes Z-bufferPlanes
StencilPlanes
glEnable(GL_STENCIL_TEST);
Fragments will be drawn only if the stencil test passes.
2004/21/23 16:48
UML
Using the stencil buffer, contd.
void glStencilFunct(Glenum func, Glint ref, Gluint mask);
func is one of:
GL_NEVER, GL_ALWAYS, GL_LESS, GL_LEQUAL, GL_EQUAL, GL_GEQUAL, GL_GREATER, GL_NOTEQUAL
compares the stencil buffer value with the reference value.
Void glStencilOp(Glenum fail, Glenum zfail,Glenum zpass);
specifies the action to take when a fragment passes or fails the stencil test. Arguments are:
GL_KEEP, G_ZERO, GL_REPLACE,GL_INCR, GL_DECR, GL_INVERT
2104/21/23 16:48
UML
Projection ShadowsCode example.
120 goto 240
2204/21/23 16:48
UML
Issues with projection shadows
0 N x N problem0 Difficult to shadow onto anything other than flat surfaces
- Polygonal objects ok, but have to project onto the plane of each polygon and clip to its edges.
0 Difficult to show shadow’s color- Shadow is a “squashed” version of object doing the
shadowing, not the object being shadowed.
2304/21/23 16:48
UML
Shadow Volumes
Light Source
Shadow volume
2404/21/23 16:48
UML
Determining whether a fragment is from an object in a shadow volume.
COP
ShadowVolume
ShadowVolume
2504/21/23 16:48
UML
Determining whether a fragment is from an object in a shadow volume.
COP
ShadowVolume
ShadowVolume
For each fragment: Number of front facing shadow volume polygons minusnumber of back facing shadow volume polygons (that pass depth test)= zero if object is not in shadow.
2604/21/23 16:48
UML
Shadow Volumes:The algorithm (for a single light source)
1. Enable color buffer and depth buffer for writing. Enabledepth testing
2. Set attributes for drawing in shadow. Turn off light source.
3. Render the entire scene.
4. Compute the polygons enclosing the shadow volume.
5. Disable color and depth buffer for writing. Leave depth test.
6. Clear the stencil buffer to zero.
7. Set the stencil function to always pass
2704/21/23 16:48
UML
Shadow Volumes:The algorithm (for a single light source)
8. Set the stencil operation to increment if depth passes
9. Turn on back face culling
10. Render the shadow volumes
11. Set the stencil operation to decrement if depth passes
12. Turn on front face culling
13. Render the shadow volumes
14. Set the stencil function to test for zero and the stencil operation to do nothing.
15. Enable the color and depth buffer for writing.
16. Turn on the light and render the entire scene.
2804/21/23 16:48
UML
Shadow volume issues:
0 Difficult if the shadowing object is a complex shape. - Can project a separate shadow volume from each polygon
but this is very inefficient- Ideally, shadow volume should be generated from
vertices forming silhouette of the object. This is a non-trivial computation (see Watt & Watt for one algorithm).
0 If polygon renderer does not handle adjacent polygons correctly, the stencil count can get mixed up resulting in grossly incorrect shadows.
2904/21/23 16:48
UML
Shadow Volume code example.
120 goto 240240 goto 120
Let’s see ifthey are
still awake
top related