CS 445 / 645 Introduction to Computer Graphics Lecture 16 Lighting Review We have a model for determining the brightness (radiance) of a ray rooted.

Download Report

Transcript CS 445 / 645 Introduction to Computer Graphics Lecture 16 Lighting Review We have a model for determining the brightness (radiance) of a ray rooted.

CS 445 / 645
Introduction to Computer Graphics
Lecture 16
Lighting
Review
We have a model for determining the brightness
(radiance) of a ray rooted at a point on a surface
and oriented towards the cameraDirect
illumination only
– Ambient term
– Diffuse term
– Specular term
Combining Everything
Simple analytic model:
• diffuse reflection +
• specular reflection +
• emission +
• “ambient”
Surface
The Final Combined Equation
Single light source:
N
Viewer
R
a
q
q
L
V
I  I E  K A I AL  KD ( N  L) I L  KS (V  R) I L
n
What influences these terms?
Influencing factors
• Light position
• Sample point position
• Camera position
• Surface angle with respect to light vector
• Surface angle with respect to camera vector
Direct illumination questions
• Camera moves from one position to another
– Angle between light and surface unchanged
– Angle between camera and surface changes
• A tracking camera follows object as it moves in scene
– Angle between light and surface changes
– Angle between camera and surface unchanged
• An object moves from on position to another
– Both angles have changed
Direct Illumination
Provides a way to measure radiance at a point in
a specific direction
• What points?
– Vertices
 What do you do for points between vertices?
This becomes a problem of “shading”
and we’ll discuss it later
Direct Illumination
Provides a way to measure radiance at a point in
a specific direction
• What points?
– Other points to sample?
This is a form of ray casting.
We’ll talk about it next
Direct Illumination
Provides a way to measure radiance at a point in
a specific direction
• What points?
• What directions?
– Towards the camera
– No secondary effects
Overview
Direct (Local) Illumination
• Emission at light sources
• Scattering at surfaces
Global illumination
• Shadows
• Refractions
• Inter-object reflections
Direct Illumination
Global Illumination
We’ve glossed over how light really works
And we will continue to do so…
One step better
Global Illumination
• The notion that a point is illuminated by more than light from local
lights; it is illuminated by all the emitters and reflectors in the
global scene
The ‘Rendering Equation’
Jim Kajiya (Current head of Microsoft Research) developed this in
1986


I  x, x'  g  x, x'e  x, x'   r  x, x' , x' 'I  x' , x' 'dx' '
S


I(x, x’)
= total intensity from point x’ to x
g(x, x’)
= 0 when x/x’ are occluded
= 1/d2 otherwise (d = distance between x and x’)
e(x, x’)
= intensity emitted by x’ to x
r(x, x’,x’’)
= intensity of light reflected from x’’ to x through x’
S
= all points on all surfaces


I  x, x'  g  x, x'e  x, x'   r  x, x' , x' 'I  x' , x' 'dx' '
S


x
g(x, x')
x'
1 or 1/d2
depending on visibility


I  x, x'  g  x, x'e  x, x'   r  x, x' , x' 'I  x' , x' 'dx' '
S


x
e(x, x')
emissivity
x'


I  x, x'  g  x, x'e  x, x'   r  x, x' , x' 'I  x' , x' 'dx' '
S


I(x', x'')
x
I(x', x'')
r(x, x', x'')
I(x', x'') I(x', x'')
x'
The ‘Rendering Equation’
The light that hits x from x’ is the direct
illumination from x’ and all the light reflected by
x’ from all x’’
To implement:
• Must handle recursion effectively
• Must support diffuse and specular light
• Must model object shadowing
The ‘Rendering Equation’
What’s really hard about computing this?


I  x, x'  g  x, x'e  x, x'   r  x, x' , x' 'I  x' , x' 'dx' '
S


The integral…
• How can one compute I(x, x') for all points x and x'?
• Approximate!!!
Approximating the Rendering Equation
Don’t integrate over all points,
just a subset
• Ray Tracing
– Considered a Monte Carlo
approximation
 Monte Carlo == Random
“sampling” of real answer
Consider pulling colored balls
from an urn to approximate the
ratio of its contents
by Gilles Tran
Approximating the Rendering Equation
Group “all points” into sets and consider all sets
• Radiosity
– Considered a finiteelement approximation
 What are the models
that approximate light
transfer from one finite
element to another?
Consider electing the
President from the sum
of the states rather than
the sum of all people
Ray Casting
A simple form of Ray Tracing
Rays
through
view plane
Simplest method
is ray casting
View plane
Eye position
Ray Casting
To create each sample …
• Construct ray from eye position through view plane
• Find first surface intersected by ray through pixel
• Compute color sample based on surface radiance
Ray Casting
For each sample …
• Construct ray from eye
position through view plane
• Find first surface
intersected by ray through
pixel
Rays
through
view plane
• Compute color sample
based on surface radiance
Eye position
Samples on
view plane
Ray Casting
Simple implementation:
Image RayCast(Camera camera, Scene scene, int width, int height)
{
Image image = new Image(width, height);
for (int i = 0; i < width; i++) {
for (int j = 0; j < height; j++) {
Ray ray = ConstructRayThroughPixel(camera, i, j);
Intersection hit = FindIntersection(ray, scene);
image[i][j] = GetColor(hit);
}
}
return image;
}
Ray Casting
Simple implementation:
Image RayCast(Camera camera, Scene scene, int width, int height)
{
Image image = new Image(width, height);
for (int i = 0; i < width; i++) {
for (int j = 0; j < height; j++) {
Ray ray = ConstructRayThroughPixel(camera, i, j);
Intersection hit = FindIntersection(ray, scene);
image[i][j] = GetColor(hit);
}
}
return image;
}
Constructing Ray Through a Pixel
Up direction
View
Plane
back
P0
V
right
P
Ray: P = P0 + tV
Constructing Ray Through a Pixel
2D Example
P1
right = towards x up
Q
P0
2*d*tan(Q
Q = frustum half-angle
d = distance to view plane
towards
V
d
right
P
P1 = P0 + d*towards – d*tan(Q)*right
P2 = P0 + d*towards + d*tan(Q)*right
P = P1 + (i/width + 0.5) * (P2 - P1)
= P1 + (i/width + 0.5) * 2*d*tan (Q)*right
V = (P - P0) / ||P - P0 ||
P2
Ray: P = P0 + tV
Ray Casting
Simple implementation:
Image RayCast(Camera camera, Scene scene, int width, int height)
{
Image image = new Image(width, height);
for (int i = 0; i < width; i++) {
for (int j = 0; j < height; j++) {
Ray ray = ConstructRayThroughPixel(camera, i, j);
Intersection hit = FindIntersection(ray, scene);
image[i][j] = GetColor(hit);
}
}
return image;
}
Ray-Scene Intersection
Intersections with geometric primitives
• Sphere
• Triangle
• Groups of primitives (scene)
Ray-Sphere Intersection
Ray: P = P0 + tV
Sphere: |P - C|2 - r 2 = 0
P’
P
V
P0
r
C
Ray-Sphere Intersection
Ray: P = P0 + tV
Sphere: |P - C|2 - r 2 = 0
P’
P
Substituting for P, we get:
|P0 + tV - C|2 - r 2 = 0
Solve quadratic equation:
at2 + bt + c = 0
where:
a = |V|2 = 1
b = 2 V • (P0 - C)
c = |P0 - C|2 - r 2
P = P0 + tV
V
P0
If ray direction
is normalized!
r
C
Ray-Sphere Intersection
Need normal vector at intersection
for lighting calculations
N = (P - C) / ||P - C||
N
V
P0
P
r
C
Ray-Scene Intersection
Intersections with geometric primitives
• Sphere
» Triangle
• Groups of primitives (scene)
Ray-Triangle Intersection
First, intersect ray with plane
Then, check if point is inside triangle
P
V
P0
Ray-Plane Intersection
Ray: P = P0 + tV
Plane: P • N + d = 0
Substituting for P, we get:
(P0 + tV) • N + d = 0
P
Solution:
t = -(P0 • N + d) / (V • N)
N
P = P0 + tV
V
P0
Ray-Triangle Intersectio
Check if point is inside triangle parametrically
T
3
Compute a, b:
P = a (T2-T1) + b (T3-T1)
Check if point inside triangle.
0  a  1 and 0  b  1
ab1
T1
P
b
a
V
P0
T2
Other Ray-Primitive Intersections
Cone, cylinder, ellipsoid:
• Similar to sphere
Box
• Intersect 3 front-facing planes, return closest
Convex polygon
• Same as triangle (check point-in-polygon algebraically)
Concave polygon
• Same plane intersection
• More complex point-in-polygon test
Ray Casting – direct illumination
Trace primary rays from camera
• Direct illumination from
unblocked lights only
I  I E  K A I A  L ( K D ( N  L)  K S (V  R) n )S L I L
Shadows
Shadow term tells if light sources are blocked
• Cast ray towards each light
source Li
• Si = 0 if ray is blocked,
Si = 1 otherwise
• 0 < Si < 1  soft shadows (hack)
I  I E  K A I A  L ( K D ( N  L)  K S (V  R) n )S L I L
Recursive Ray Tracing –
second-order effects
Also trace secondary rays from hit surfaces
• Global illumination from mirror reflection and transparency
I  I E  K A I A  L (KD ( N  L)  KS (V  R)n )SL I L  KR I R  KT IT
Mirror reflections
Trace secondary ray in
mirror direction
• Evaluate radiance along
secondary ray and
include it into illumination
model
Radiance
for mirror
reflection ray
I  I E  K A I A  L (KD ( N  L)  KS (V  R)n )SL I L  KRIRR  KT IT
Transparency
Trace secondary ray in
direction of refraction
• Evaluate radiance along
secondary ray and
include it into illumination
model
Radiance for
refraction ray
I  I E  K A I A  L (KD ( N  L)  KS (V  R)n )SL I L  KR I R  KT IT
Transparency
Transparency coefficient is
fraction transmitted
• KT = 1 for translucent object,
KT = 0 for opaque
• 0 < KT < 1 for object that is
semi-translucent
Transparency
Coefficient
KTT IT
I  I E  K A I A  L (KD ( N  L)  KS (V  R)n )SL I L  KR I R  K
Refractive Transparency
For thin surfaces, can ignore change in direction
• Assume light travels straight through surface
N
Qi
L
hi
hr
T
Qr
Qi
T
T  L
Refractive Tranparency
For solid objects, apply Snell’s law:
hr sin Qr  hi sin Qi
hi
hr
N
Qi
L
T
Qr
hi
hi
T  ( cosQi  cosQr ) N 
L
hr
hr
Summary
Ray casting (direct Illumination)
• Usually use simple analytic approximations for
light source emission and surface reflectance
Recursive ray tracing (global illumination)
• Incorporate shadows, mirror reflections,
and pure refractions
All of this is an approximation
so that it is practical to compute
More on global illumination later!