1
Ray-tracing
2
Overview
Recursive Ray Tracing Shadow Feelers Snell’s Law for Refraction When to stop!
3
Recap: Light Transport
4
Recap: Local Illumination
Ambient, diffuse & specular components The sum is over the specular and diffuse
components for each light
M
j
m
jsjdjiar nhklnkIkI1 ,Ia
5
Recap: Result of Ray Casting
6
Correcting for Non-Visible Lights
EN H
L
surface
7
Where Sj is the result of intersecting the ray L with the scene objects
Note consider your intersection points along the ray L carefully• Hint – they might be beyond the light!
M
j
mjsjdjijaar nhklnkISIkI
1 ,
8
Result of Shadow Feeler
9
Recursive Ray-Tracing
We can simulate specular-specular transmission elegantly by recursing and casting secondary rays from the intersection points
We must obviously chose a termination depth to cope with multiple reflections
10
Introducing Reflection
Where
EN H
L
surface
R
NENER 2
11
Computing the reflection direction
Ideal reflection = • R same plane as V and N
R = aE + bN
• E.N = N.R = a(N.E)+b• If a = -1, b = 2N.E
R = -E + 2(N.E)N
N
R
E
12
Computing Reflectance
'rrlocalr IkII Where Ilocal is computed as before Ray r' is formed from intersection point
and the direction R and is cast into the scene as before
13
Recursive Ray Tracing
L1
L2
p
p’
p’’
R1R2
14
Pseudo Code
Color RayTrace(Point p, Vector direction, int depth) {
Point pd /* Intersection point */
Boolean intersection
if (depth > MAX) return Black
intersect(p,direction, &pd, &intersection)
if (!intersection) return Background
Ilocal = kaIa + Ip.v.(kd(n.l) + ks.(h.n)m)
return Ilocal + kr*RayTrace(pd, R, depth+1)
}
Normally kr = ks
15
Result of Recursion
16
Perfect Specular Transmission
N H
L
E
T
R
Snell’s Law
1
2
sin
sin
is index ofrefraction
1
2ß
17
Using Snell’s Law
Using this law it is possible to show that:
Note that if the root is negative then total internal reflection has occurred and you just reflect the vector as normal
211
2
sin
sin
1cos1cos 22121212 NET
18
Recursive Ray Tracing Including Transparent Objects
L1
L2
p
p’
p’’
R1R2
T2
T1
19
New Pseudo Code
Color RayTrace(Point p, Vector D, int depth) { Point pd /* Intersection point */ Boolean intersection if (depth > MAX) return Black intersect(p,direction, &pd, &intersection) if (!intersection) return Background
Ilocal = kaIa + Ip.v.(kd(n.l) + ks.(h.n)m)
return Ilocal + kr*RayTrace(pd, R, depth+1) + kt*RayTrace(pd, T, depth+1)
}
20
Direct Specular Transmission
A transparent surface can be illuminated from behind and this should be calculated in Ilocal
NH'
L
E
21
Calculating H'
Use H‘ instead of H in specular term
1'
1
2
1
2
LE
H
22
Putting Everything Together
23
Discussion – What Can’t We Simulate?
24
Remark
Specular and transmission only• What should be added to consider diffuse reflection?
Why it’s expensive• Intersection of rays with polygons (90%)
How to reduce the cost?• Reduce the number of rays• Reduce the cost on each ray
– First check with bounding box of the object– Methods to sort the scene and make it faster
25
Summary
Recursive ray tracing is a good simulation of specular reflections
We’ve seen how the ray-casting can be extended to include shadows, reflections and transparent surfaces
However this is a very slow process and still misses some types of effect!