0% found this document useful (0 votes)
19 views

Ray Tracing

The document discusses the basics of ray tracing. It begins by describing forward and backward ray tracing approaches. It then covers the pinhole camera model and how it relates to a simplified pinhole camera. The basic ray tracing algorithm is outlined, which involves casting rays from the eye through each pixel and finding the closest intersection. Details are provided on constructing the eye coordinate system and image plane setup. The document also describes how to calculate the intersection of a ray with a sphere and how to determine the closest intersecting object to compute the final pixel color.
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
19 views

Ray Tracing

The document discusses the basics of ray tracing. It begins by describing forward and backward ray tracing approaches. It then covers the pinhole camera model and how it relates to a simplified pinhole camera. The basic ray tracing algorithm is outlined, which involves casting rays from the eye through each pixel and finding the closest intersection. Details are provided on constructing the eye coordinate system and image plane setup. The document also describes how to calculate the intersection of a ray with a sphere and how to determine the closest intersecting object to compute the final pixel color.
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 55

Ray Tracing Basics

CSE 681 Autumn 11


Han-Wei Shen
Forward Ray Tracing
• We shoot a large number of photons

Problem?
Backward Tracing
For every pixel
Construct a ray from the eye
For every object in the scene
Find intersection with the ray
Keep if closest
The Viewing Model
• Based on a simple Pinhole Camera model
 Simplest lens model  Perfect image if hole
 Inverted image infinitely small
 Similar triangles  Pure geometric optics
 No blurry

pin-hole camera simplified pin-hole camera


Simplified Pinhole Camera
 Eye = pinhole, Image plane = box face (re-arrange)
 Eye-image pyramid (frustum)
 Note that the distance/size of image are arbitrary
Basic Ray Tracing Algorithm
for every pixel {
cast a ray from the eye
for every object in the scene
find intersections with the ray
keep it if closest
}
compute color at the intersection point
}
Construct a Ray
3D parametric line
eye
p(t) = eye + t (s-eye) r(t)
p
t=0
r(t): ray equation
eye: eye (camera) position
s: pixel position
t: ray parameter

Question: How to calculate the pixel position P?


Constructing a Ray
• 3D parametric line
p(t) = e + t (s-e) s
s-e e
*(boldface means vector)

• So we need to know e and s

• What are given (specified by the user or scene


file)?
✓ camera position
✓ camera direction or center of interest
✓ camera orientation or
view up vector
✓ distance to image plane
✓ field of view + aspect ratio
✓ pixel resolution
Given Camera Information
• Camera
• Eye
• Look at
• Orientation (up vector)
v
• Image plane n
yres
• Distance to plane, N e
• Field of view in Y u
• Aspect ration (X/Y)

xres
• Screen
• Pixel resolution N
Construct Eye Coordinate System
• We can calculate the pixel positions much
more easily if we construct an eye
coordinate system (eye space) first
 Known: eye position, center of interest, view-up
vector
 To find out: new origin and three basis vectors

center of interest (COI)


Assumption: the direction of view is
eye orthogonal to the view plane (the plane
that objects will be projected onto)
Eye Coordinate System
 Origin: eye position
 Three basis vectors: one is the normal vector (n) of
the viewing plane, the other two are the ones (u and
v) that span the viewing plane

v
u
Center of interest (COI)
eye
n

(u,v,n should be orthogonal to each other)


Eye Coordinate System
 Origin: eye position
 Three basis vectors: one is the normal vector (n) of
the viewing plane, the other two are the ones (u and
v) that span the viewing plane
n is pointing away from the
v
u world because we use right
hand coordinate system
Center of interest (COI)
eye N = eye – COI
n n= N / |N|

Remember u,v,n should


be all unit vectors

(u,v,n should be orthogonal to each other)


Eye Coordinate System
 What about u and v?

We can get u first -


v
V_up u
u is a vector that is perpendicular
to the plane spanned by
COI N and view up vector (V_up)
eye
n
Eye Coordinate System
 What about u and v?

We can get u first -


v
V_up u
u is a vector that is perpendicular
to the plane spanned by
COI N and view up vector (V_up)
eye
n

U = V_up x n

u = U / |U|
Eye Coordinate System
 What about v?
Knowing n and u, getting v is
easy
v
V_up u

COI
eye
n
Eye Coordinate System
 What about v?
Knowing n and u, getting v is
easy
v
V_up u

COI
eye v = n xu
n

v is already normalized
Eye Coordinate System
 Put it all together

v Eye space origin: (Eye.x , Eye.y, Eye.z)


V_up u
Basis vectors:

COI n = (eye – COI) / | eye – COI|


eye
n u = (V_up x n) / | V_up x n |
v = n x u
Next Step?
• Determine the size of the image plane
• This can be derived from
✓ distance from the camera to the center of
the image plane
✓ Vertical field of view angle
✓ Aspect ratio of the image plane
★ Aspect ratio being Width/Height
Image Plane Setup
W
• Tan(θv /2) = H / 2d
e
C
• W = H * aspect_ratio H θv

L
• C’s position = e - n * d

• L’s position = C - u * W/2 - v * H/2 d

• Assuming the image resolution is X (horizontal) by Y


(vertical), then each pixel has a width of W/X and a height
of H/Y

• Then for a pixel s at the image pixel (i,j) , it’s location is at

L + u * i * W/X + v * j * H/Y
Put it all together
• We can represent the ray as a 3D parametric line
p(t) = e + t (s-e)
(now you know how to get s and e)
s
s-e e
• Typically we offset the ray by half
of the pixel width and height, i.e, cast the ray from the pixel
center

incrementing
(i,j)
(0,0)
Put it all together
• We can represent the ray as a 3D parametric line
p(t) = e + t (s-e)
(now you know how to get s and e)
s
s-e e
• Typically we offset the ray by half
of the pixel width and height, i.e, cast the ray from the pixel
center

incrementing
(i,j)
(0,0)
Ray-Sphere Intersection
• Problem: Intersect a line with a sphere
✓ A sphere with center c = (xc,yc,zc) and radius R can be
represented as:
2 2 2 2
(x-x + (y-yc) + (z-zc) - R = 0
c)

✓ For a point p on the sphere, we can write the above in


vector form:
2
(p-c).(p-c) - R = 0 (note ‘.’ is a dot product)
✓ We can plug the point on the ray p(t) = e + t d
2
(e+td-c).(e+td-c) - R = 0 and yield
2 2
(d.d) t + 2d.(e-c)t + (e-c).(e-c) - R = 0
Ray-Sphere Intersection
• When solving a quadratic equation
2
at + bt + c = 0
We have
• Discriminant
• and Solution
Ray-Sphere Intersection
b2 – 4ac < 0 ⇒ No intersection
b2 – 4ac > 0 ⇒ Two solutions (enter and exit)
b2 – 4ac = 0 ⇒ One solution (ray grazes sphere)

 Should we use the larger or smaller t value?


Ray-Sphere Intersection
b2 – 4ac < 0 ⇒ No intersection
b2 – 4ac > 0 ⇒ Two solutions (enter and exit)
b2 – 4ac = 0 ⇒ One solution (ray grazes sphere)

 Should we use the larger or smaller t value?


Calculate Normal
• Needed for computing lighting
Q = P(t) – C … and remember Q/||Q||

C
t
Q
Calculate Normal
• Needed for computing lighting
Q = P(t) – C … and remember Q/||Q||

C
t
Q
normal
Choose the closet sphere
• Minimum search problem
For each pixel {
form ray from eye through the pixel center
tmin = ∞
For each object {
if (t = intersect(ray, object)) {
if (t < tmin) {
closestObject = object
tmin = t
}
}
}
}
Final Pixel Color
if (tmin == ∞)
pixelColor = background color
else
pixelColor = color of object at d along ray

eye ray object


CSE 681
Ray-Object Intersections:
Axis-aligned Box
Ray-Box Intersection Test

Y = y2

Z = z2

X = x1 X = x2
Z = z1

Y = y1
Ray-Box Intersection Test

Y = y2

Z = z2

X = x1 X = x2
Z = z1

Y = y1
Ray-Box Intersection Test
• Intersect ray with each plane
– Box is the union of 6 planes
x = x1, x = x2 Y = y2

y = y1, y = y2
z = z1, z = z2 Z = z2

X = x1 X = x2
Z = z1

Y = y1
Ray-Box Intersection Test
• Intersect ray with each plane
– Box is the union of 6 planes
x = x1, x = x2 Y = y2

y = y1, y = y2
z = z1, z = z2 Z = z2

X = x1 X = x2
Z = z1
• Ray/axis-aligned plane
is easy: Y = y1
Ray-Box Intersection Test
• Intersect ray with each plane
– Box is the union of 6 planes
x = x1, x = x2 Y = y2

y = y1, y = y2
z = z1, z = z2 Z = z2

X = x1 X = x2
Z = z1
• Ray/axis-aligned plane
is easy: Y = y1
Ray-Box Intersection Test
• Intersect ray with each plane
– Box is the union of 6 planes
x = x1, x = x2 Y = y2

y = y1, y = y2
z = z1, z = z2 Z = z2

X = x1 X = x2
Z = z1
• Ray/axis-aligned plane
is easy: Y = y1

E.g., solve x component: ex + tDx = x1


Ray-Box Intersection Test

Y = y2

Z = z2

X = x1 X = x2
Z = z1

Y = y1
Ray-Box Intersection Test

Y = y2

Z = z2

X = x1 X = x2
Z = z1

Y = y1
Ray-Box Intersection Test
1. Intersect the ray with each plane
2. Sort the intersections
Y = y2

Z = z2

X = x1 X = x2
Z = z1

Y = y1
Ray-Box Intersection Test
1. Intersect the ray with each plane
2. Sort the intersections
3. Choose intersection Y = y2

Z = z2

X = x1 X = x2
Z = z1

Y = y1
Ray-Box Intersection Test
1. Intersect the ray with each plane
2. Sort the intersections
3. Choose intersection Y = y2

with the smallest t > 0


Z = z2

X = x1 X = x2
Z = z1

Y = y1
Ray-Box Intersection Test
1. Intersect the ray with each plane
2. Sort the intersections
3. Choose intersection Y = y2

with the smallest t > 0


that is within the range Z = z2

X = x1 X = x2
Z = z1

Y = y1
Ray-Box Intersection Test
1. Intersect the ray with each plane
2. Sort the intersections
3. Choose intersection Y = y2

with the smallest t > 0


that is within the range Z = z2

X = x1 X = x2
of the box Z = z1

Y = y1
Ray-Box Intersection Test
1. Intersect the ray with each plane
2. Sort the intersections
3. Choose intersection Y = y2

with the smallest t > 0


that is within the range Z = z2

X = x1 X = x2
of the box Z = z1

Y = y1
Ray-Box Intersection Test
1. Intersect the ray with each plane
2. Sort the intersections
3. Choose intersection Y = y2

with the smallest t > 0


that is within the range Z = z2

X = x1 X = x2
of the box Z = z1

• We can do more Y = y1
Ray-Box Intersection Test
1. Intersect the ray with each plane
2. Sort the intersections
3. Choose intersection Y = y2

with the smallest t > 0


that is within the range Z = z2

X = x1 X = x2
of the box Z = z1

• We can do more Y = y1

efficiently
Only Consider 2D for Now
• if a point (x,y) is in the box, then (x,y) in
[x1 , x2] x [y1, y2]

y = y1

y = y1

x = x1 x = x2
The Principle
• Assuming the ray hits the box boundary lines at
intervals [txmin,txmax], [tymin,tymax], the ray
hits the box if and only if the intersection of the
two intervals is not empty
txmax

tymax txmin txmax

txmin
tymin tymax

tymin
28
Pseudo Code
txmin =(x1 - ex )/Dx
//assume Dx >0
txmax =(x2 - ex )/Dx
tymin = (y1 - ey )/Dy
tymax = (y2 - ey )/Dy //assume Dy >0
if (txmin > tymax) or (tymin > txmax)
return false
else
return true

29
Pseudo Code

txmin =(x2 - ex )/Dx //if Dx < 0


txmax =(x1 - ex )/Dx
tymin = (y2 - ey )/Dy
//if Dy < 0
tymax = (y1 - ey )/Dy
if (txmin > tymax) or (tymin > txmax)
return false
else
return true

30
6
Now Consider All Axis
• We will calculate t1 and t2 for each axis (x,
y, and z)
• Update the intersection interval as we
compute t1 and t2 for each axis t2
• remember: t1
t1=(x1- px)/Dx
t2=(x2- px)/Dx
D x = x1 x = x2

p
Update [tnear, tfar]
• Set tnear = -∞ and tfar = +∞
• For each axis, compute t1 and t2
– make sure t1 < t2
– if t1 > tnear, tnear =t1
t2
– if t2 < tfar, tfar = t2
t1

• If tnear > tfar, box is missed

D x = x1 x = x2

p
Algorithm
Set tnear = - ∞, tfar = ∞
R(t) = p + t * D
For each pair of planes P associated with X, Y, and Z do: (example uses X
planes)
if direction Dx = 0 then
if (px < x1 or px > x2)
return FALSE
else
begin
t1 = (xl - px) / Dx
t2 = (xh - px) / Dx
if t1 > t2 then swap (t1, t2)
if t1 > tnear then tnear = t1
if t2 < tfar then tfar = t2
if tnear > tfar return FALSE
if tfar < 0 return FALSE
end

Return tnear
Special Case
• Ray is parallel to an axis
– If Dx = 0 or Dy = 0 or Dz = 0

• px < x1 or px > x2 then miss


y =y2

y=Y1

D x=X1 x=X2
p
Special Case
• Box is behind the eye
– If tfar < 0, box is behind
D
p

x = x1 x = x2

You might also like