Download presentation source
Download
Report
Transcript Download presentation source
CS 551 / 645:
Introductory Computer Graphics
Ray Tracing
David Luebke
7/27/2016
Administrivia
Assignment 5: Intel okay
David Luebke
7/27/2016
Realism
What is not realistic about the following
images?
David Luebke
7/27/2016
Realism?
David Luebke
7/27/2016
Realism?
David Luebke
7/27/2016
Realism?
David Luebke
7/27/2016
Realism?
David Luebke
7/27/2016
Realism?
David Luebke
7/27/2016
Realism…
A big part of realism is realistic lighting
Is Phong’s lighting model realistic?
–
–
–
–
David Luebke
Empirical specular term
“Ambient” term
No shadows
No surface interreflection
Crude light-surface
interaction model
Strictly local
illumination model
7/27/2016
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/27/2016
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/27/2016
Ray Casting
An example:
Eyepoint
David Luebke
Screen
Scene
7/27/2016
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/27/2016
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/27/2016
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/27/2016
Recursive Ray Tracing
David Luebke
7/27/2016
Recursive Ray Tracing
Pixel
Image
Plane
David Luebke
7/27/2016
Recursive Ray Tracing
“Direct” Ray To Eye
David Luebke
7/27/2016
Recursive Ray Tracing
“Indirect” Ray To Eye
David Luebke
7/27/2016
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/27/2016
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/27/2016
Basic Algorithm
Function TraceRay()
Recursively trace ray R and return resulting color C
– if R intersects 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
David Luebke
return background color
7/27/2016
Basic Algorithm: Code
Object allObs[];
Color image[];
RayTraceScene()
allObs = initObjects();
for (Y all rows in image)
for (X all pixels in row)
Ray R = calcPrimaryRay(X,Y);
image[X,Y] = TraceRay(R);
display(image);
David Luebke
7/27/2016
Basic Algorithm: Code
Color TraceRay(Ray R)
if rayHitsObjects(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 return backgroundColor
David Luebke
7/27/2016
Refining the
Basic Algorithm
Color TraceRay(Ray R)
if rayHitsObjects(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 return backgroundColor
David Luebke
7/27/2016
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?
David Luebke
Sphere
Polygon
Box
General quadric
7/27/2016
Representing Rays
How might we represent rays?
We represent a ray parametrically:
– A starting point O
– A direction vector D
– A scalar t
t<0
R = O + tD
O
t=1
t>1
D
David Luebke
7/27/2016
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/27/2016
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/27/2016
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/27/2016
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:
xi l yi m zi n
N
,
,
r
r
r
When will we need the normal? When not?
David Luebke
7/27/2016
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/27/2016
Ray-Polygon Intersection
Find plane equation of polygon:
ax + by + cz + d = 0
y
Remember how?
N
N = [a, b, c]
d = N P1
P1
d
David Luebke
P2
x
7/27/2016
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/27/2016
Ray-Box Intersection
Often want to find whether a ray hits an axisaligned 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/27/2016
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/27/2016
Shadow Rays
Some problems with using shadow rays as
described:
– Lots of computation
– Infinitely sharp shadows
– No semitransparent object shadows
David Luebke
7/27/2016
Shadow Rays
Some problems with using shadow rays as
described:
– Lots of computation
– Infinitely sharp shadows
– No semitransparent object shadows
David Luebke
7/27/2016
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!
Shadow
Ray
Light Buffer
Occluding Polys
Current Intersection Point
David Luebke
7/27/2016
Shadow Rays
Some problems with using shadow rays as
described:
– Lots of computation
– Infinitely sharp shadows
– No semitransparent object shadows
David Luebke
7/27/2016
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/27/2016
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/27/2016
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/27/2016
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/27/2016
Shadow Rays
Some problems with using shadow rays as
described:
– Lots of computation
– Infinitely sharp shadows
– No semitransparent object shadows
David Luebke
7/27/2016
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/27/2016
Speedup Techniques
Intersect rays faster
Shoot fewer rays
Shoot “smarter” rays
David Luebke
7/27/2016
Speedup Techniques
Intersect rays faster
Shoot fewer rays
Shoot “smarter” rays
David Luebke
7/27/2016
Intersect Rays Faster
Bounding volumes
Spatial partitions
Reordering ray intersection tests
Optimizing intersection tests
David Luebke
7/27/2016
Bounding Volumes
Bounding volumes
– Idea: before intersecting a ray with a collection of
objects, test it against one simple object that
bounds the collection
3
1
6
0
2
David Luebke
7
5
4
8
9
3
1
6
0
2
7
5
4
8
9
7/27/2016
Bounding Volumes
Hierarchical bounding volumes
– Group nearby volumes hierarchically
– Test rays against hierarchy top-down
David Luebke
7/27/2016
Bounding Volumes
Different bounding volumes
– Spheres
Cheap intersection test
Poor fit
Tough to calculate optimal clustering
– Axis-aligned bounding boxes (AABBs)
David Luebke
Relatively cheap intersection test
Usually better fit
Trivial to calculate clustering
7/27/2016
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)
David Luebke
Comparatively expensive
Very good fit
Difficult to calculate good clustering
7/27/2016
Spatial Partitioning
Hierarchical bounding volumes surround
objects in the scene with (possibly
overlapping) volumes
Spatial partitioning techniques classify all
space into non-overlapping portions
David Luebke
7/27/2016
Spatial Partitioning
Example spatial partitions:
–
–
–
–
David Luebke
Uniform grid (2-D or 3-D)
Octree
k-D tree
BSP-tree
7/27/2016
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
David Luebke
Wastes storage on empty space
Assumes uniform spread of data
7/27/2016
Octree
Octree pros:
– Simple to generate
– Adaptive
Octree cons:
– Nontrivial to trace rays across
– Adaptive only in scale
David Luebke
7/27/2016
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/27/2016
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/27/2016
Reordering Ray
Intersection Tests
Caching ray hits (esp. shadow rays)
Memory-coherent ray tracing
David Luebke
7/27/2016
Optimizing Ray Intersection
Tests
Fine-tune the math!
– Share subexpressions
– Precompute everything possible
Code with care
– Even use assembly, if necessary
David Luebke
7/27/2016