10. Ray Tracing - Computer Science Departmentcheng/cs535/Notes/CS535-Ray.pdf · 1 CS Dept, UK 10....

Preview:

Citation preview

CS Dept, UK 1

10. Ray Tracing

Generate a ray for each pixel and trace the

ray backwards to its origin

CS Dept, UK 2

Sample Result: back side and right side of the room are both mirrors. So you would see reflections of the room on both sides

CS Dept, UK 3

10.1 Basic Ray Tracing Algorithm

• Trace each ray to FIRST object hit by ray

• Structure of basic ray tracing program:

------------------------------------------------------------- Compute u, v, w basis vectors

for each pixel do

compute viewing ray

find first object hit by ray and its surface normal n

use material, light, and n to compute pixel color

-------------------------------------------------------------

CS Dept, UK 4

10.2 Computing Viewing Rays

Parametric representation of a ray:

where e is eye point and s is a point on the screen

),-t((t) eseP

(r,t,n)

(l,b,n)

CS Dept, UK 5

10.2 Computing Viewing Rays

Computation of s:

if resolution of the screen is and coordinates of the

3D window on the view plan (w = n) are (l, b, n) and (r, t, n)

defined in the uvw coordinate system, then

yx nn

where

and (i,j) are pixel indices satisfying

CS Dept, UK 6

10.2 Computing Viewing Rays

Why?

(i, j)

(l, b, n)

(r, t, n)

CS Dept, UK 7

10.2 Computing Viewing Rays

CS Dept, UK 8

10.3 Ray-Object Intersection: ray-sphere intersection

CS Dept, UK 9

10.3 Ray-Object Intersection: ray- triangle intersection

c

b

a

CS Dept, UK 10

10.3 Ray-Object Intersection: ray- triangle intersection

c

b

a

CS Dept, UK 11

10.3 Ray-Object Intersection: ray- polygon intersection

First, compute the intersection poin between

the ray and the plane containing the polygon

Use this t we can compute p . Then determine if p is inside the

polygon.

CS Dept, UK 12

10.3 Ray-Object Intersection: ray- polygon intersection

How do you tell if a point P

is inside a 2D polygon???

Assuming P is in the same

plane as the polygon

Question:

P

CS Dept, UK 13

10.4 A Ray-Tracing Program

Using ray-tracing technique to produce images

similar to the z-buffer or BSP-tree codes

CS Dept, UK 14

If ray hits an object …

The statement “if ray hits an object” can be implemented

as a (boolean) function that tests for hits in the interval

[t0, t1] as follows:

CS Dept, UK 15

If ray hits an object …

In actual implementation, we should return a reference to

the object that is hit. This can be done by passing a

record/structure such as

hit-record rec

Should define a super class “surface” with sub- classes

such as sphere, cone, cube, … to cover all the objects

that could be intersected by a ray

Anything that a ray can intersect would be under that

class

CS Dept, UK 16

Object-Oriented Design for a Ray Tracer

Develop a class hierarchy:

that not only include everything that can be hit by a ray, but also

efficiency structures, such as bounding volume hierarchies

Definition of the class surface:

class surface

virtual bool hit(ray e + td , real t0, real t1, hit-record rec)

virtual box bounding-box()

….

(t0, t1) is the interval on the ray where hits will be returned.

CS Dept, UK 17

Object-Oriented Design for a Ray Tracer

CS Dept, UK 18

10.5 How to Generate Shadows?

Use shadow rays (different from viewing rays) to

determine if a point is in shadow

Viewing ray

P Light Shadow ray

e

d

l

CS Dept, UK 19

implement shadow rays for Phong lighting:

CS Dept, UK 20

10.6 Specular Reflection

l

n

r

d

a

h

q q

h = (-d + l ) / || -d+l ||

Two approaches:

use or

Add specular reflection to ray tracing

a

CS Dept, UK 21

Add specular reflection to ray tracing

r

n

q q

r = d + 2 ( -d h n ) n

d

For the view direction d, compute its specular reflection r

Use r to recursively compute

contribution from specular

reflection (see next page)

To avoid an infinite loop in the

above recursive call, set up a

maximum recursive depth

CS Dept, UK 22

Add specular reflection to ray tracing:

Use r to recursively compute contribution

from specular reflection

color I = I + k raycolor ( p + sr , e , infinity) s

Where k is the specular RGB color

reflection coefficient. s

CS Dept, UK 23

Include specular reflection in "raycolor" (making it a real ray-tracing process):

CS Dept, UK 24

Illustration:

CS Dept, UK 25

10.7 Refraction

Add refraction to ray tracing

Light is refracted when it enters a dielectric

(transparent material that refracts light). The

refraction follows Snell’s law

q sinsin tnn

where and are the refractive indices of

the objects

n tn

CS Dept, UK 26

10.7 Refraction

q q

t

d

h ( = d )

-n

n

b q

q

n tn

CS Dept, UK 27

10.7 Refraction q

q

2222 cos1cos1

sinsin

t

t

nn

nn

q

cosn

ng

cossin

sing

cossin

t

n

n

nbt

CS Dept, UK 28

10.7 Refraction

b

d

q

n

g g = d + n (-d hn )

= d – n ( d hn )

b = g / sin q

qq sinsin bdg

CS Dept, UK 29

10.7 Refraction

CS Dept, UK 30

Illustration:

CS Dept, UK 31

Include refraction in "raycolor" (making it a 100% raytracing process):

CS Dept, UK 32

10.8 Instancing

• How should we ray trace an instance of an object

transformed by a matrix M?

• The matrix could be the

accumulation of several

transformations

• Ray tracing the

transformed object

can be done in the

space of the

untransformed object

CS Dept, UK 33

10.8 Instancing

• One needs to transform the ray to the space of the untransformed

object, do the tracing there, then transform the results to the space

where the transformed object is in

• If we define an instance class of type surface, we need to create a hit

function:

CS Dept, UK 34

10.9 Sub-Linear Ray-Object Intersection

• Three techniques to speed up ray-tracing:

- bounding volume hierarchies

- uniform spatial subdivision

- binary space partitioning

CS Dept, UK 35

10.9.1 Bounding Boxes

• Only need to know if the ray hits the box; do not need

to know where

• Bounding box: [xmin, xmax] × [ymin, ymax]

• Ray: e + td

• Compute the ray parameters:

where the ray hits the line

respectively. The ray hits the box iff the intervals

[txmin, txmax] and [tymin, tymax] overlap.

CS Dept, UK 36

10.9.2 Hierarchical Bounding Boxes

• Bounding boxes can be nested by creating boxes around

subsets of the nodel

• Use top-down ray-box testing and bottom-up parameter-

merging

CS Dept, UK 37

End of 10.9

Recommended