Lecture 3
Lecture 3
Group 1
Ray Casting
n
<latexit sha1_base64="(null)">(null)</latexit>
<latexit
Light and Surfaces
n
<latexit sha1_base64="(null)">(null)</latexit>
<latexit
Light and Surfaces
n
<latexit sha1_base64="(null)">(null)</latexit>
<latexit
Lights
Two types of lights:
Directional Light:
Direction of light does not depend on the position of
the object. Light is very far away
Point Light
Direction of light depends on position of object relative
to light.
Directional Light
n
<latexit sha1_base64="(null)">(null)</latexit>
<latexit
n
<latexit sha1_base64="(null)">(null)</latexit>
<latexit
l
<latexit sha1_base64="(null)">(null)</latexit>
<latexit
l
<latexit sha1_base64="(null)">(null)</latexit>
<latexit
Point Light
n
<latexit sha1_base64="(null)">(null)</latexit>
<latexit
n
<latexit sha1_base64="(null)">(null)</latexit>
<latexit
l
l
<latexit sha1_base64="(null)">(null)</latexit>
<latexit
<latexit sha1_base64="(null)">(null)</latexit>
<latexit
Ray Casting
n
<latexit sha1_base64="(null)">(null)</latexit>
<latexit
l
<latexit sha1_base64="(null)">(null)</latexit>
<latexit
WARNING: Numerical Precision
n
<latexit sha1_base64="(null)">(null)</latexit>
<latexit
Light and Surfaces
n
<latexit sha1_base64="(null)">(null)</latexit>
<latexit
v<latexit sha1_base64="(null)">(null)</latexit>
<latexit
l
<latexit sha1_base64="(null)">(null)</latexit>
<latexit
Lambertian (Diffuse) Shading
Lambertian (Diffuse) Shading
T
L = kd max 0, n l
<latexit sha1_base64="(null)">(null)</latexit>
Self Shadowing
n
<latexit sha1_base64="(null)">(null)</latexit>
<latexit
v
<latexit sha1_base64="(null)">(null)</latexit>
<latexit
l
<latexit sha1_base64="(null)">(null)</latexit>
<latexit
Lambertian (Diffuse) Shading
n
<latexit sha1_base64="(null)">(null)</latexit>
<latexit
✓
v <latexit sha1_base64="(null)">(null)</latexit>
<latexit
l
<latexit sha1_base64="(null)">(null)</latexit>
<latexit
<latexit sha1_base64="(null)">(null)</latexit>
<latexit
T
L = kd max 0, n l
<latexit sha1_base64="(null)">(null)</latexit>
Specular Reflection
Blinn-Phong Shading Model
h n
<latexit sha1_base64="(null)">(null)</latexit>
<latexit
<latexit sha1_base64="(null)">(null)</latexit>
<latexit
v ✓ ✓
<latexit sha1_base64="(null)">(null)</latexit>
<latexit
l
<latexit sha1_base64="(null)">(null)</latexit>
<latexit
<latexit sha1_base64="(null)">(null)</latexit>
<latexit
<latexit sha1_base64="(null)">(null)</latexit>
<latexit
The Half Vector
v+l
h=
kv + lk
<latexit sha1_base64="(null)">(null)</latexit>
The Half Vector
v+l
h=
kv + lk
<latexit sha1_base64="(null)">(null)</latexit>
n
L/
<latexit sha1_base64="(null)">(null)</latexit>
✓h
Measuring the Angle
n
L = ks max (0,
<latexit sha1_base64="(null)">(null)</latexit>
(✓h ))
Measuring the Angle
n
L=
<latexit sha1_base64="(null)">(null)</latexit>
ks max (0, cos(✓h ))
Measuring the Angle
1
p = 1
p = 10
0.8 p = 100
p = 1000
n p
L=
<latexit sha1_base64="(null)">(null)</latexit>
ks max (0, cos(✓h )) 0.6
0.4
0.2
0
-2 -1 0 1 2
Measuring the Angle
1
p = 1
p = 10
0.8 p = 100
p p = 1000
T
L = ks max 0, n h)
<latexit sha1_base64="(null)">(null)</latexit>
0.6
0.4
0.2
0
-2 -1 0 1 2
Increasing p
L = Lambertian + Specular
<latexit sha1_base64="(null)">(null)</latexit>
Putting it All Together: The Full Blinn-Phong Model
Light obeys the superposition principle
T n p
L = kd max 0, n l +
<latexit sha1_base64="(null)">(null)</latexit>
ks max (0, cos(✓h ))
No Global Effects
Putting it All Together: The Full Blinn-Phong Model
Light obeys the superposition principle
T n p
L = ka + kd max 0, n l +
<latexit sha1_base64="(null)">(null)</latexit>
ks max (0, cos(✓h ))
Ambient Diffuse Specular Final
Mirror Mirror
Mirror
Recursive Ray Tracing
Recursive Ray Tracing
Light and Surfaces
n
<latexit sha1_base64="(null)">(null)</latexit>
<latexit
Light and Surfaces
n
<latexit sha1_base64="(null)">(null)</latexit>
<latexit
✓r
<latexit sha1_base64="(null)">(null)</latexit>
✓i
<latexit sha1_base64="(null)">(null)</latexit>
l
<latexit sha1_base64="(null)">(null)</latexit>
<latexit
Light and Surfaces
n
<latexit sha1_base64="(null)">(null)</latexit>
<latexit
?
l
<latexit sha1_base64="(null)">(null)</latexit>
<latexit
<latexit sha1_base64="(null)">(null)</latexit>
l
Light and Surfaces
n
<latexit sha1_base64="(null)">(null)</latexit>
<latexit
T
n l
l
<latexit sha1_base64="(null)">(null)</latexit>
<latexit sha1_base64="(null)">(null)</latexit>
<latexit
<latexit sha1_base64="(null)">(null)</latexit>
l
Light and Surfaces
n
<latexit sha1_base64="(null)">(null)</latexit>
<latexit
T
<latexit sha1_base64="(null)">(null)</latexit>
l + nn l
Light and Surfaces
n
<latexit sha1_base64="(null)">(null)</latexit>
<latexit
T
<latexit sha1_base64="(null)">(null)</latexit>
l + 2nn l
Light and Surfaces
n
<latexit sha1_base64="(null)">(null)</latexit>
<latexit
T
<latexit sha1_base64="(null)">(null)</latexit>
I + 2nn ( l)
for each
each object
pixel in the scene
image{{
pixeleach
for pixel=inrayTrace(
colour the imageviewRay,
{ 0)
} if (object affects pixel) {
colour rayTrace(Ray, depth) {
for each object in the scene {
if(Intersect ray with object) {
colour = shading model
if(depth < maxDepth)
colour += rayTrace(reflectedRay,depth+1)
}
}
return colour
}
Ray Spawning
https://www.scratchapixel.com/lessons/3d-
basic-rendering/ray-tracing-overview/light-
transport-ray-tracing-whitted
Transparency and Refraction
Transparency and Refraction
n
<latexit sha1_base64="(null)">(null)</latexit>
<latexit
Transparency and Refraction
n
<latexit sha1_base64="(null)">(null)</latexit>
<latexit
✓l
<latexit sha1_base64="(null)">(null)</latexit>
l
<latexit sha1_base64="(null)">(null)</latexit>
<latexit
t
<latexit sha1_base64="(null)">(null)</latexit>
<latexit
✓t
<latexit sha1_base64="(null)">(null)</latexit>
Snell’s Law
n
<latexit sha1_base64="(null)">(null)</latexit>
<latexit
cl sin ✓l = ct sin ✓t
<latexit sha1_base64="(null)">(null)</latexit>
✓l
<latexit sha1_base64="(null)">(null)</latexit>
Indices of Refraction l
<latexit sha1_base64="(null)">(null)</latexit>
<latexit
t
<latexit sha1_base64="(null)">(null)</latexit>
<latexit
✓t
<latexit sha1_base64="(null)">(null)</latexit>
Computing the Refracted Ray
n
<latexit sha1_base64="(null)">(null)</latexit>
<latexit
t = tk + t?
<latexit sha1_base64="(null)">(null)</latexit>
✓l
<latexit sha1_base64="(null)">(null)</latexit>
|t| = 1 l
tk
<latexit sha1_base64="(null)">(null)</latexit>
<latexit sha1_base64="(null)">(null)</latexit>
<latexit
<latexit sha1_base64="(null)">(null)</latexit>
t
<latexit sha1_base64="(null)">(null)</latexit>
<latexit
t?
<latexit sha1_base64="(null)">(null)</latexit>
✓t
<latexit sha1_base64="(null)">(null)</latexit>
Computing the Refracted Ray ✓l
<latexit sha1_base64="(null)">(null)</latexit>
tk = sin ✓t
<latexit sha1_base64="(null)">(null)</latexit>
cl
l
tk
<latexit sha1_base64="(null)">(null)</latexit>
<latexit
tk = sin ✓l
ct
<latexit sha1_base64="(null)">(null)</latexit>
<latexit sha1_base64="(null)">(null)</latexit>
t
<latexit sha1_base64="(null)">(null)</latexit>
<latexit
t?
<latexit sha1_base64="(null)">(null)</latexit>
✓t
<latexit sha1_base64="(null)">(null)</latexit>
Computing the Refracted Ray ✓l
<latexit sha1_base64="(null)">(null)</latexit>
tk = sin ✓t
<latexit sha1_base64="(null)">(null)</latexit>
cl
l
tk
<latexit sha1_base64="(null)">(null)</latexit>
<latexit
tk = sin ✓l lk
ct
<latexit sha1_base64="(null)">(null)</latexit>
<latexit sha1_base64="(null)">(null)</latexit>
<latexit sha1_base64="(null)">(null)</latexit>
cl
tk =
ct
lk t
<latexit sha1_base64="(null)">(null)</latexit>
<latexit
t?
<latexit sha1_base64="(null)">(null)</latexit>
<latexit sha1_base64="(null)">(null)</latexit>
cl
tk = lk ✓t
ct
<latexit sha1_base64="(null)">(null)</latexit>
<latexit sha1_base64="(null)">(null)</latexit>
Computing the Refracted Ray ✓l
<latexit sha1_base64="(null)">(null)</latexit>
cl
tk = lk
ct l
tk
<latexit sha1_base64="(null)">(null)</latexit>
<latexit
<latexit sha1_base64="(null)">(null)</latexit>
cl T lk
tk = l nn l <latexit sha1_base64="(null)">(null)</latexit>
<latexit sha1_base64="(null)">(null)</latexit>
<latexit sha1_base64="(null)">(null)</latexit>
ct
cl t
tk = (l cos ✓l n) <latexit sha1_base64="(null)">(null)</latexit>
<latexit
t?
ct
<latexit sha1_base64="(null)">(null)</latexit>
<latexit sha1_base64="(null)">(null)</latexit>
✓t
<latexit sha1_base64="(null)">(null)</latexit>
Computing the Refracted Ray ✓l
<latexit sha1_base64="(null)">(null)</latexit>
t = tk + t?
tk =
cl cl
<latexit sha1_base64="(null)">(null)</latexit>
l + cos ✓l n + t?
l
<latexit sha1_base64="(null)">(null)</latexit>
<latexit
ct ct <latexit sha1_base64="(null)">(null)</latexit>
t
<latexit sha1_base64="(null)">(null)</latexit>
<latexit
t?
<latexit sha1_base64="(null)">(null)</latexit>
✓t
<latexit sha1_base64="(null)">(null)</latexit>
Computing the Refracted Ray ✓l
<latexit sha1_base64="(null)">(null)</latexit>
t = tk + t?
tk =
cl cl
<latexit sha1_base64="(null)">(null)</latexit>
l + cos ✓l n + t?
l
<latexit sha1_base64="(null)">(null)</latexit>
<latexit
ct ct <latexit sha1_base64="(null)">(null)</latexit>
t? = ↵n t
<latexit sha1_base64="(null)">(null)</latexit>
q <latexit sha1_base64="(null)">(null)</latexit>
<latexit
t?
<latexit sha1_base64="(null)">(null)</latexit>
2
t? = 1 sin ✓t n
<latexit sha1_base64="(null)">(null)</latexit>
✓t
<latexit sha1_base64="(null)">(null)</latexit>
Computing the Refracted Ray
cl cl
✓l
<latexit sha1_base64="(null)">(null)</latexit>
tk = l + cos ✓l n + t?
ct ct l
cl cl
<latexit sha1_base64="(null)">(null)</latexit>
<latexit sha1_base64="(null)">(null)</latexit>
<latexit
t= l + cos ✓l n cos ✓t n
ct ct
q
<latexit sha1_base64="(null)">(null)</latexit>
2
t? =
<latexit sha1_base64="(null)">(null)</latexit>
p
1 sin ✓t n t <latexit sha1_base64="(null)">(null)</latexit>
<latexit
t?
<latexit sha1_base64="(null)">(null)</latexit>
t? = 2
cos ✓t n
✓
<latexit sha1_base64="(null)">(null)</latexit>
t? = <latexit sha1_base64="(null)">(null)</latexit>
cos ✓t n t <latexit sha1_base64="(null)">(null)</latexit>
Computing the Refracted Ray ✓l
<latexit sha1_base64="(null)">(null)</latexit>
✓ ◆
cl cl
t=
<latexit sha1_base64="(null)">(null)</latexit>
ct
l+
ct
cos ✓1 cos ✓t n l
<latexit sha1_base64="(null)">(null)</latexit>
<latexit
t
<latexit sha1_base64="(null)">(null)</latexit>
<latexit
t?
<latexit sha1_base64="(null)">(null)</latexit>
✓t
<latexit sha1_base64="(null)">(null)</latexit>
colour rayTrace(Ray, depth) {
for each object in the scene {
if(Intersect ray with object) {
colour = shading model
if(depth < maxDepth) {
colour += rayTrace(reflectedRay,depth+1)
colour += rayTrace(refractedRay,depth+1)
}
}
}
return colour
}
Ray Spawning
https://www.scratchapixel.com/lessons/3d-
basic-rendering/ray-tracing-overview/light-
transport-ray-tracing-whitted
Done for Today
Office hours are now BA5268
Assignment 2 due this Friday
Assignment 3 available now