Today Finishing Up Reflections More MultiPass Algorithms Shadows

  • Slides: 22
Download presentation
Today • Finishing Up Reflections • More Multi-Pass Algorithms • Shadows 9/20/2001 CS 638,

Today • Finishing Up Reflections • More Multi-Pass Algorithms • Shadows 9/20/2001 CS 638, Fall 2001

Reflection Review • Recall from last lecture: – Rendering reflections requires rendering what is

Reflection Review • Recall from last lecture: – Rendering reflections requires rendering what is seen in the mirror, and what is seen around the mirror – The stencil buffer is used to avoid writing over the reflection when rendering the regular view, or vice versa • Last time we saw how to render the reflected view first: – – 9/20/2001 Render the reflected view Render the mirror, setting the stencil Clear the color buffer to clear around the mirror Render the stuff around the mirror, ignoring the stencil CS 638, Fall 2001

Rendering Normal View First • First pass: – Render the scene without the mirror

Rendering Normal View First • First pass: – Render the scene without the 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 9/20/2001 CS 638, Fall 2001

Normal First Addendum • Same problem with objects behind mirror – Same solution •

Normal First Addendum • Same problem with objects behind mirror – Same solution • Can manage multiple mirrors – Render normal view, then do other passes for each mirror – Only works for non-overlapping mirrors (in view) – But, could be extended with more tests and passes • A recursive formulation exists for mirrors that see other mirrors 9/20/2001 CS 638, Fall 2001

Frame Buffer Blending • When a fragment gets to the frame buffer, it is

Frame Buffer Blending • When a fragment gets to the frame buffer, it is blended with the existing pixel, and the result goes in the buffer • Blending is of the form: – s=source fragment, d = destination buffer, RGBA color – In words: You get to specify how much of the fragment to take, and how much of the destination, and you add the pieces together • All done per-channel 9/20/2001 CS 638, Fall 2001

Blending Factors • The default is: Srgba=(1, 1, 1, 1), Drgba=(0, 0, 0, 0)

Blending Factors • The default is: Srgba=(1, 1, 1, 1), Drgba=(0, 0, 0, 0) – Overwrite buffer contents with incoming fragment • You can use the colors themselves as blending functions: eg Srgba=(Rd, Rg, Rb, Ra), Drgba=(0, 0, 0, 0) – What use is this? – Hint: What if there is an image in the buffer and the source is a constant gray image? A light map? • Common is to use the source alpha: – Srgba=(As, As, As), Drgba=(1 -As, 1 -As) – What does this achieve? When might you use it? • Note that blending can simulate multi-texturing with multi-pass 9/20/2001 CS 638, Fall 2001

Accumulation Buffer • The accumulation buffer is not available for writing directly • It

Accumulation Buffer • The accumulation buffer is not available for writing directly • It is more like a place to hold and compute on pixel data • Operations: – Load the contents of a color buffer into the accumulation buffer – Accumulate the contents of a color buffer, which means multiply them by a value then add them into the buffer – Return the buffer contents to a color buffer (scaled by a constant) – Add or multiply all pixel values by a given constant • It would appear that it is too slow for games – That is, I don’t know of games that use it 9/20/2001 CS 638, Fall 2001

Accum. Buffer Algorithms • Anti-aliasing: Render multiple frames with the image plane jittered slightly,

Accum. Buffer Algorithms • Anti-aliasing: Render multiple frames with the image plane jittered slightly, and add them together – Hardware now does this for you, but this would be higher quality • Motion blur: Render multiple frames representing samples in time, and add them together – More like strobing the object • Depth of field: Render multiple frames moving both the viewpoint and the image plane in concert – Keep a point – the focal point – fixed in the image plane while things in front and behind appear to shift 9/20/2001 CS 638, Fall 2001

Why Shadows? • Shadows tell us about the relative locations and motions of objects

Why Shadows? • Shadows tell us about the relative locations and motions of objects 9/20/2001 CS 638, Fall 2001

Shadows and Motion Example movies came from: http: //vision. psych. umn. edu/www/kersten-lab/demos/shadows. html 9/20/2001

Shadows and Motion Example movies came from: http: //vision. psych. umn. edu/www/kersten-lab/demos/shadows. html 9/20/2001 CS 638, Fall 2001

Facts about Shadows • Shadows can be considered as areas hidden from the light

Facts about Shadows • Shadows can be considered as areas hidden from the light source – Suggests the use of hidden surface algorithms • 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 • For scenes with static lights and geometry, the shadows are fixed – Can pre-process such cases – Cost is in moving lights or objects • Point lights have hard edges, and area lights have soft edges 9/20/2001 CS 638, Fall 2001

Ground Plane Shadows • Shadows cast by point light sources onto planes are an

Ground Plane Shadows • Shadows cast by point light sources onto planes are an important case that is relatively easy to compute L(directional light) (xp, yp, zp) – Shadows cast by objects (cars, players) onto the ground • Accurate if shadows don’t overlap – Can be fixed, but not well 9/20/2001 CS 638, Fall 2001 (xsw, ysw, zsw)

Ground Shadow Math • The shadow point lies on the line from the light

Ground Shadow Math • The shadow point lies on the line from the light through the vertex: • The shadow is on the ground, zsw=0, so =zp/zl, giving: • Matrix form: 9/20/2001 CS 638, Fall 2001

Drawing the Shadow • We now have a matrix that transforms an object into

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 gray 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) – Works for other planes by transforming into plane space, then shadow, then back again – Take care with vertex ordering for the shadow (it reverses) 9/20/2001 CS 638, Fall 2001

Point Light Shadows • Blinn ’ 88 gives a matrix that works for local

Point Light Shadows • Blinn ’ 88 gives a matrix that works for local point light sources – Takes advantage of perspective transformation (and homogeneous coordinates) • Book has an approximation that does not use perspective matrices, Chapter 5. 7 9/20/2001 CS 638, Fall 2001

Shadows in Light Maps • Static shadows can be incorporated into light maps –

Shadows in Light Maps • Static shadows can be incorporated into light maps – When creating the map, test for shadows by ray-casting to the light source - quite efficient • Area light sources should cast soft shadows – Interpolating the texture will give soft shadows, but not good ones, and you loose hard shadows – Sampling the light will give better results: Cast multiply rays to different points on the area light, and average the results – Should still filter for best results 9/20/2001 CS 638, Fall 2001

Soft Shadow Example From Watt and Policarpo 9/20/2001 CS 638, Fall 2001

Soft Shadow Example From Watt and Policarpo 9/20/2001 CS 638, Fall 2001

Shadow Shape Perception Movie with incorrect shadows from http: //www. cs. wisc. edu/~schenney/research/mcmc/dice. mov

Shadow Shape Perception Movie with incorrect shadows from http: //www. cs. wisc. edu/~schenney/research/mcmc/dice. mov • Perceptual studies (or anecdotal evidence) suggests that the shape of a shadow is not important – In other words, people correctly associate shadows with the objects that cast them even if the shapes don’t correspond 9/20/2001 CS 638, Fall 2001

Quick Dirty Shadows • Blend a dark polygon into the frame-buffer in the place

Quick Dirty Shadows • Blend a dark polygon into the frame-buffer in the place where the shadow should be – Cast a ray from light source, through object center, and see where it hits something – Blend a fixed shape polygon in at that location (with depth) • Why dirty? – Use a fixed shape - shadow won’t match object – Use a single ray-cast to determine shadow location - no partial shadow and wrong parts of shadow may be drawn • Good for things like car games for under-car shadow – Fast action and near planar receiving surfaces 9/20/2001 CS 638, Fall 2001

Drawing Quick Dirty Shadows Light Viewer Z equal with hit polygon Z-buffer quantization errors

Drawing Quick Dirty Shadows Light Viewer Z equal with hit polygon Z-buffer quantization errors 9/20/2001 Z above hit polygon Apparent shadow too big CS 638, Fall 2001

Drawing Quick Dirty Shadows • No depth test – Check that shadow can be

Drawing Quick Dirty Shadows • No depth test – Check that shadow can be seen by viewer (cast ray) – Just blend polygon in • Again, shadow is too large and may be in wrong place – Test corners of shadow for visibility? – OK if polygons are flatter 9/20/2001 CS 638, Fall 2001

Projective Shadows • Create a texture that is the shape of the shadowing object

Projective Shadows • Create a texture that is the shape of the shadowing object as seen by the light • Project this texture onto the other objects – That is, find texture coordinates on the other objects that pull the right shadow/non-shadow pixel out of the texture • Read Chapter 5. 8 of “Game Programming Gems” – I expect you to know how it works, but not the formulas – Note, it doesn’t mention the texture matrix, which can avoid the need to explicitly compute texture coordinates for objects • Problem: Texture appears in places it shouldn’t, and it’s hard to avoid it 9/20/2001 CS 638, Fall 2001