- 115 Views
- Uploaded on

Download Presentation
## PowerPoint Slideshow about ' CS 551 / 645: Introductory Computer Graphics' - maxine

**An Image/Link below is provided (as is) to download presentation**

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.

- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript

Shadow Rays

Realism?

David Luebke 7/30/2014

Realism?

David Luebke 7/30/2014

Realism?

David Luebke 7/30/2014

Realism?

David Luebke 7/30/2014

Realism?

David Luebke 7/30/2014

Crude light-surface interaction model

Strictly local illumination model

Realism…- A big part of realism is realistic lighting
- Is Phong’s lighting model realistic?
- Empirical specular term
- “Ambient” term
- No shadows
- No surface interreflection

David Luebke 7/30/2014

Global Illumination

- Realistic lighting is global, not local
- Surfaces shadow each other
- Surfaces illuminate each other
- Two long-time approaches
- Ray-tracing: simulate light-ray optics
- Radiosity: simulate physics of light transfer

David Luebke 7/30/2014

Ray Tracing Overview

- To determine visible surfaces at each pixel:
- Cast a ray from the eyepoint through the center of the pixel
- Intersect the ray with all objects in the scene
- Whatever it hits first is the visible object
- This is called ray casting

David Luebke 7/30/2014

Recursive Ray Tracing

- Obvious extension:
- Spawn additional rays off reflective surfaces
- Spawn transmitted rays through transparent surfaces
- Leads to recursive ray tracing

Secondary Rays

Primary Ray

David Luebke 7/30/2014

Recursive Ray Tracing

- Slightly less obvious extension:
- Trace a ray from point of intersection to light source
- If ray hits anything before light source, object is in shadow
- These are called shadow rays

David Luebke 7/30/2014

Ray Tracing Overview

- Ray tracing is simple
- No clipping, perspective projection matrices, scan conversion of polygons
- Ray tracing is powerful
- Hidden surface problem
- Shadow computation
- Reflection/refraction
- Ray tracing is slow
- Complexity proportional to # of pixels
- Typical screen ~ 1,000,000 pixels
- Typical scene « 1,000,000 polygons

David Luebke 7/30/2014

Recursive Ray Tracing

David Luebke 7/30/2014

Recursive Ray Tracing

- Physically, we’re interested in path of light rays from light source to eye.
- In practice, we trace rays backwards from eye to source (Why?)

David Luebke 7/30/2014

Recursive Ray Tracing

- Physically, we’re interested in path of light rays from light source to eye.
- In practice, we trace rays backwards from eye to source (Why?)
- Computational efficiency: we want the finite subset of rays that leave source, bounce around, and pass through eye
- Can’t predict where a ray will go, so start with rays we know reach eye

David Luebke 7/30/2014

Basic Algorithm

- Function TraceRay()Recursively trace ray Rand return resulting color C
- ifRintersects any objects then
- Find nearest object O
- Find local color contribution
- Spawn reflected and transmitted rays, using TraceRay() to find resulting colors
- Combine colors; return result
- else
- return background color

David Luebke 7/30/2014

Basic Algorithm: Code

Object allObs[];

Color image[];

RayTraceScene()

allObs = initObjects();

for (Yall rows in image)

for (X all pixels in row)

Ray R = calcPrimaryRay(X,Y);

image[X,Y] = TraceRay(R);display(image);

David Luebke 7/30/2014

Basic Algorithm: Code

Color TraceRay(Ray R)

ifrayHitsObjects(R) then

Color localC, reflectC, refractC;

Object O = findNearestObject(R);

localC = shade(O,R);

Ray reflectedRay = calcReflect(O,R)

Ray refractedRay = calcRefract(O,R)

reflectC = TraceRay(reflectedRay);

refractC = TraceRay(refractedRay);

return localC reflectC refractC

else returnbackgroundColor

David Luebke 7/30/2014

Refining theBasic Algorithm

Color TraceRay(Ray R)

ifrayHitsObjects(R) then

Color localC, reflectC, refractC;

Object O = findNearestObject(R);

localC = shade(O,R);

Ray reflectedRay = calcReflect(O,R)

Ray refractedRay = calcRefract(O,R)

reflectC = TraceRay(reflectedRay);

refractC = TraceRay(refractedRay);

return localC reflectC refractC

else returnbackgroundColor

David Luebke 7/30/2014

Ray-Object Intersection

- Given a ray and a list of objects, what objects (if any) intersect the ray?
- Query: Does ray R intersect object O?
- How to represent ray?
- What kind of object?
- Sphere
- Polygon
- Box
- General quadric

David Luebke 7/30/2014

Representing Rays

- How might we represent rays?
- We represent a ray parametrically:
- A starting point O
- A direction vector D
- A scalar t

R = O+ tD

O

t < 0

t = 1

t > 1

D

David Luebke 7/30/2014

Ray-Sphere Intersection

- Ray R = O + tD

x = Ox + t Dx

y = Oy + t Dy

z = Oz + t Dz

- Sphere at (l, m, n) of radius r is:

(x - l)2 + (y - m)2 + (z - n)2 = r 2

- Substitute for x,y,z and solve for t…

David Luebke 7/30/2014

Ray-Sphere Intersection

- Works out as a quadratic equation:

at2 + bt + c = 0

where

a = Dx2 + Dy2 + Dz2

b =2Dx(Ox - l) + 2Dy(Oy - m) + 2Dz(Oz - n)

c = l2 + m2 + n2 + Ox2 + Oy2 + Oz2 - 2(l Ox + m Oy + n Oz + r2)

David Luebke 7/30/2014

Ray-Sphere Intersection

- If solving for t gives no real roots: ray does not intersect sphere
- If solving gives 1 real root r, ray grazes sphere where t = r
- If solving gives 2 real roots (r1, r2), ray intersects sphere at t = r1& t = r2
- Ignore negative values
- Smallest value is first intersection

David Luebke 7/30/2014

Ray-Sphere Intersection

- Find intersection point Pi = (xi, yi, zi) by plugging t back into ray equation
- Find normal at intersection point by subtracting sphere center from Pi and normalizing:
- When will we need the normal? When not?

David Luebke 7/30/2014

Ray-Polygon Intersection

- Polygons are the most common model representation
- Can render in hardware
- Lowest common denominator
- Basic approach:
- Find plane equation of polygon
- Find point of intersection between ray and plane
- Does polygon contain intersection point?

David Luebke 7/30/2014

Ray-Polygon Intersection

- Find plane equation of polygon:ax + by + cz + d = 0
- Remember how?

N = [a, b, c]

d = N P1

y

N

P2

P1

x

David Luebke 7/30/2014

Ray-Polygon Intersection

- Find intersection of ray and plane:

t = -(aOx + bOy + cOz + d) / (aDx + bDy + cDz)

- Does polygon contain intersection point Pi ?
- One simple algorithm:
- Draw line from Pi to each polygon vertex
- Measure angles between lines (how?)
- If sum of angles between lines is 360°, polygon contains Pi
- Slow — better algorithms available

David Luebke 7/30/2014

Ray-Box Intersection

- Often want to find whether a ray hits an axis-aligned box (Why?)
- One way:
- Intersect ray with pairs of parallel planes that form box
- If intervals of intersection overlap, the ray intersects the volume.

David Luebke 7/30/2014

Shadow Rays

- Simple idea:
- Where a ray intersects a surface, send a shadow ray to each light source
- If the shadow ray hits any surface before the light source, ignore light
- Q: how much extra work is involved?
- A: each ray-surface intersection now spawns n + 2 rays, n = # light sources
- Remember: intersections 95% of work

David Luebke 7/30/2014

Shadow Rays

- Some problems with using shadow rays as described:
- Lots of computation
- Infinitely sharp shadows
- No semitransparent object shadows

David Luebke 7/30/2014

Shadow Rays

- Some problems with using shadow rays as described:
- Lots of computation
- Infinitely sharp shadows
- No semitransparent object shadows

David Luebke 7/30/2014

Shadow Ray Problems:Too Much Computation

- Light buffer (Haines/Greenberg, 86)
- Precompute lists of polygons surrounding light source in all directions
- Sort each list by distance to light source
- Now shadow ray need only be intersected with appropriate list!

ShadowRay

Occluding Polys

Current Intersection Point

David Luebke 7/30/2014

Shadow Rays

- Some problems with using shadow rays as described:
- Lots of computation
- Infinitely sharp shadows
- No semitransparent object shadows

David Luebke 7/30/2014

Shadow Ray Problems:Sharp Shadows

- Why are the shadows sharp?
- A: Infinitely small point light sources
- What can we do about it?
- A: Implement area light sources
- How?

David Luebke 7/30/2014

Shadow Ray Problems: Area Light Sources

- Could trace a conical beam from point of intersection to light source:
- Track portion of beam blocked by occluding polygons:

30% blockage

David Luebke 7/30/2014

Shadow Ray Problems:Area Light Sources

- Too hard! Approximate instead:
- Sample the light source over its area and take weighted average:

50% blockage

David Luebke 7/30/2014

Shadow Ray Problems:Area Light Sources

- Disadvantages:
- Less accurate (50% vs. 30% blockage)
- Oops! Just quadrupled (at least) number of shadow rays
- Moral of the story:
- Soft shadows are very expensive in ray tracing

David Luebke 7/30/2014

- Some problems with using shadow rays as described:
- Lots of computation
- Infinitely sharp shadows
- No semitransparent object shadows

David Luebke 7/30/2014

Shadow Ray Problems:Semitransparent Objects

- In principle:
- Translucent colored objects should cast colored shadows
- Translucent curved objects should create refractive caustics
- In practice:
- Can fake colored shadows by attenuating color with distance
- Caustics need backward ray tracing

David Luebke 7/30/2014

Intersect Rays Faster

- Bounding volumes
- Spatial partitions
- Reordering ray intersection tests
- Optimizing intersection tests

David Luebke 7/30/2014

Bounding Volumes

- Bounding volumes
- Idea: before intersecting a ray with a collection of objects, test it against one simple object that bounds the collection

7

7

5

5

3

3

1

1

8

8

6

6

0

0

9

9

2

2

4

4

David Luebke 7/30/2014

Bounding Volumes

- Hierarchical bounding volumes
- Group nearby volumes hierarchically
- Test rays against hierarchy top-down

David Luebke 7/30/2014

Bounding Volumes

- Different bounding volumes
- Spheres
- Cheap intersection test
- Poor fit
- Tough to calculate optimal clustering
- Axis-aligned bounding boxes (AABBs)
- Relatively cheap intersection test
- Usually better fit
- Trivial to calculate clustering

David Luebke 7/30/2014

Bounding Volumes

- More bounding volumes
- Oriented bounding boxes (OBBs)
- Medium-expensive intersection test
- Very good fit (asymptotically better)
- Medium-difficult to calculate clustering
- Slabs (parallel planes)
- Comparatively expensive
- Very good fit
- Difficult to calculate good clustering

David Luebke 7/30/2014

Spatial Partitioning

- Hierarchical bounding volumes surround objects in the scene with (possibly overlapping) volumes
- Spatialpartitioning techniques classify all space into non-overlapping portions

David Luebke 7/30/2014

Spatial Partitioning

- Example spatial partitions:
- Uniform grid (2-D or 3-D)
- Octree
- k-D tree
- BSP-tree

David Luebke 7/30/2014

Uniform Grid

- Uniform grid pros:
- Very simple and fast to generate
- Very simple and fast to trace rays across (How?)
- Uniform grid cons:
- Not adaptive
- Wastes storage on empty space
- Assumes uniform spread of data

David Luebke 7/30/2014

Octree

- Octree pros:
- Simple to generate
- Adaptive
- Octree cons:
- Nontrivial to trace rays across
- Adaptive only in scale

David Luebke 7/30/2014

k-D Trees

- k-D tree pros:
- Moderately simple to generate
- More adaptive than octrees
- k-D tree cons:
- Less efficient to trace rays across
- Moderately complex data structure

David Luebke 7/30/2014

BSP Trees

- BSP tree pros:
- Extremely adaptive
- Simple & elegant data structure
- BSP tree cons:
- Very hard to create optimum BSP
- Splitting planes can explode storage
- Simple but slow to trace rays across

David Luebke 7/30/2014

Reordering RayIntersection Tests

- Caching ray hits (esp. shadow rays)
- Memory-coherent ray tracing

David Luebke 7/30/2014

Optimizing Ray Intersection Tests

- Fine-tune the math!
- Share subexpressions
- Precompute everything possible
- Code with care
- Even use assembly, if necessary

David Luebke 7/30/2014

Download Presentation

Connecting to Server..