Raytracing Image synthesis using classical optics Raytracing Create an image by following the paths of rays through a scene “Backward raytracing": traces rays out of.
Download
Report
Transcript Raytracing Image synthesis using classical optics Raytracing Create an image by following the paths of rays through a scene “Backward raytracing": traces rays out of.
Raytracing
Image synthesis using classical
optics
Raytracing
Create
an image by following the paths
of rays through a scene
“Backward raytracing": traces rays out
of the light sources out into the world
“Forward raytracing": traces rays out
from the eye (camera) and out into the
world and eventually back to the light
sources
Forward Raytracing
Simplest
for
form (raycasting):
each pixel on the screen, send a ray out
into the world
determine the first surface hit by the ray
perform a lighting calculation at that
surface point
set the color of the pixel according to the
result of the lighting calculation
Raytracing
screen
rays from eye
Rays
ray is a half-line – it has only one end
It can be written
A
p = o + t*d, t in (0,∞)
p is position (vector)
o is the origin (vector)
d is direction (vector)
t is the parameter
Ray Intersection
Key computation: intersection of ray with
objects
Typically produced by solving an equation:
p = f(t)
Say the object is defined by an implicit surface,
g(x,y,z) = 0
Then g(f(t)) = 0
Smallest value of t means first intersection
Ray Intersection
Ray-Sphere Intersection
Implicit
equation of sphere:
+ (y-yc)2 + (z-zc)2 – R2 = 0
Or, (p-pc)•(p-pc) – R2 = 0
(x-xc)2
Say
ray is given by
p(t) = e + t*d
Then
(d • d)t2 + 2d•(e - c)t + (e – c)•(e – c) – R2 = 0
Other Quadrics
Cylinders,
ellipsoids, paraboloids,
hyperboloids: all have the property that
they are algebraic surfaces of degree 2,
aka quadrics
The intersection calculation can be
done analytically using the quadratic
equation
Lighting Calculation
So…
we know where the ray hits the
surface
But what does the surface look like?
Need to compute lighting at the point of
intersection
Local Lighting Calculation
Can
use 3-term lighting calculation
local
illumination
Raytracing
allows us to do global
illumination
shadows
reflected
and refracted light
Shadow Rays
Decide
based
Cast
if a point is in shadow or not
on new ray intersection test
ray from intersection point towards
light source
If intersection found, point is in shadow
Otherwise, not in shadow
Raytracing Tree
Resolving a ray intersection can result in
multiple additional rays
Ray intersection
Shadow
ray
Reflected
rays
Transmitted
rays
Reflected Rays
Recursive
call to raycast:
ray’s
color is (1-c) times the color computed at
the surface, plus c times the color computed
by a new ray heading out of the surface in the
reflected direction
May
cast multiple reflected rays at slightly
different directions
Need to terminate the recursion:
maximum
depth
minimum energy carried by the ray
Accelerating Intersections
Majority
of work in raytracer in
computing intersections
Simple-minded method: compute
intersections with every object in scene,
take smallest parameter
Need to speed this up
bounding
geometry
spatial partitioning
Raytracing vs Z-Buffer
Initial
intersection test is the hard part
Z-buffer
But,
still supreme
all kinds of effects with same code
transparency,
reflection, shadows, caustics
in Z-buffer, bizarre stack of methods
"Embarrassingly
parallel": well suited to
GPU from process viewpoint – but,
recursion not possible on cards