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