Ray Tracing CS 465 Lecture 3 Cornell CS

  • Slides: 44
Download presentation
Ray Tracing CS 465 Lecture 3 Cornell CS 465 Fall 2004 • Lecture 3

Ray Tracing CS 465 Lecture 3 Cornell CS 465 Fall 2004 • Lecture 3 © 2004 Steve Marschner • 1

Ray tracing idea Cornell CS 465 Fall 2004 • Lecture 3 © 2004 Steve

Ray tracing idea Cornell CS 465 Fall 2004 • Lecture 3 © 2004 Steve Marschner • 2

Ray tracing algorithm for each pixel { compute viewing ray intersect ray with scene

Ray tracing algorithm for each pixel { compute viewing ray intersect ray with scene compute illumination at visible point put result into image } Cornell CS 465 Fall 2004 • Lecture 3 © 2004 Steve Marschner • 3

Pinhole camera • Box with a tiny hole • Image is inverted Cornell CS

Pinhole camera • Box with a tiny hole • Image is inverted Cornell CS 465 Fall 2004 • Lecture 3 • Perfect image if hole infinitely small • Pure geometric optics based on similar triangles • No depth of field issue © 2004 Steve Marschner • 4

Camera Obscura Cornell CS 465 Fall 2004 • Lecture 3 © 2004 Steve Marschner

Camera Obscura Cornell CS 465 Fall 2004 • Lecture 3 © 2004 Steve Marschner • 5

Abelardo Morell • Photographer who turns hotel room into a camera obscura (pinhole optics)

Abelardo Morell • Photographer who turns hotel room into a camera obscura (pinhole optics) Cornell CS 465 Fall 2004 • Lecture 3 © 2004 Steve Marschner • 6

Durer’s Ray casting machine • Albrecht Durer, 16 th century Cornell CS 465 Fall

Durer’s Ray casting machine • Albrecht Durer, 16 th century Cornell CS 465 Fall 2004 • Lecture 3 © 2004 Steve Marschner • 7

Durer’s Ray casting machine • Albrecht Durer, 16 th century Cornell CS 465 Fall

Durer’s Ray casting machine • Albrecht Durer, 16 th century Cornell CS 465 Fall 2004 • Lecture 3 © 2004 Steve Marschner • 8

Durer’s Ray casting machine • Albrecht Durer, 16 th century Cornell CS 465 Fall

Durer’s Ray casting machine • Albrecht Durer, 16 th century Cornell CS 465 Fall 2004 • Lecture 3 © 2004 Steve Marschner • 9

[CS 417 Spring 2002] Plane projection in drawing Cornell CS 465 Fall 2004 •

[CS 417 Spring 2002] Plane projection in drawing Cornell CS 465 Fall 2004 • Lecture 3 © 2004 Steve Marschner • 10

Plane projection in photography • This is another model for what we are doing

Plane projection in photography • This is another model for what we are doing [CS 417 Spring 2002] – applies more directly in realistic rendering Cornell CS 465 Fall 2004 • Lecture 3 © 2004 Steve Marschner • 11

Simplified pinhole camera • Eye-image pyramid (frustum) • Note that the distance/size of image

Simplified pinhole camera • Eye-image pyramid (frustum) • Note that the distance/size of image arbitrary Cornell CS 465 Fall 2004 • Lecture 3 © 2004 Steve Marschner • 12

Generating eye rays • Use window analogy directly Cornell CS 465 Fall 2004 •

Generating eye rays • Use window analogy directly Cornell CS 465 Fall 2004 • Lecture 3 © 2004 Steve Marschner • 13

Vector math review • Vectors and points • Vector operations – addition – scalar

Vector math review • Vectors and points • Vector operations – addition – scalar product • More products – dot product – cross product Cornell CS 465 Fall 2004 • Lecture 3 © 2004 Steve Marschner • 14

Ray: a half line • Standard representation: point p and direction d – –

Ray: a half line • Standard representation: point p and direction d – – this is a parametric equation for the line lets us directly generate the points on the line if we restrict to t > 0 then we have a ray note replacing d with ad doesn’t change ray (a > 0) Cornell CS 465 Fall 2004 • Lecture 3 © 2004 Steve Marschner • 15

Generating eye rays • Just need to compute the view plane point q: –

Generating eye rays • Just need to compute the view plane point q: – we won’t worry about the details for now Cornell CS 465 Fall 2004 • Lecture 3 © 2004 Steve Marschner • 16

Sphere equation • Sphere equation (implicit): • Assume unit dimensions, centered at origin Cornell

Sphere equation • Sphere equation (implicit): • Assume unit dimensions, centered at origin Cornell CS 465 Fall 2004 • Lecture 3 © 2004 Steve Marschner • 17

Explicit vs. implicit? • Sphere equation is implicit – Solution of an equation –

Explicit vs. implicit? • Sphere equation is implicit – Solution of an equation – Does not tell us how to generate a point on the sphere – Tells us how to check that a point is on the sphere • Ray equation is explicit – Parametric – How to generate points – Harder to verify that a point is on the ray Cornell CS 465 Fall 2004 • Lecture 3 © 2004 Steve Marschner • 18

Ray-sphere intersection: algebraic • Condition 1: point is on ray • Condition 2: point

Ray-sphere intersection: algebraic • Condition 1: point is on ray • Condition 2: point is on sphere – assume unit sphere • Substitute: – this is a quadratic equation in t Cornell CS 465 Fall 2004 • Lecture 3 © 2004 Steve Marschner • 19

Ray-sphere intersection: algebraic • Solution for t by quadratic formula: – simpler form holds

Ray-sphere intersection: algebraic • Solution for t by quadratic formula: – simpler form holds when d is a unit vector but we won’t assume this in practice (reason later) – I’ll use the unit-vector form to make the geometric interpretation Cornell CS 465 Fall 2004 • Lecture 3 © 2004 Steve Marschner • 20

Ray-sphere intersection: algebraic Cornell CS 465 Fall 2004 • Lecture 3 © 2004 Steve

Ray-sphere intersection: algebraic Cornell CS 465 Fall 2004 • Lecture 3 © 2004 Steve Marschner • 21

Ray-sphere intersection: geometric • What geometric information is important? – Inside/outside – Closest point

Ray-sphere intersection: geometric • What geometric information is important? – Inside/outside – Closest point – Direction • Geometric considerations can help shortcut calculations – easy reject O r D Cornell CS 465 Fall 2004 • Lecture 3 R © 2004 Steve Marschner • 22

Ray-sphere intersection: geometric • Find if the ray’s origin is outside the sphere –

Ray-sphere intersection: geometric • Find if the ray’s origin is outside the sphere – R 2>r 2 – If inside, it intersects – If on the sphere, it does not intersect (avoid degeneracy) O r D Cornell CS 465 Fall 2004 • Lecture 3 R © 2004 Steve Marschner • 23

Ray-sphere intersection: geometric • Find if the ray’s origin is outside the sphere •

Ray-sphere intersection: geometric • Find if the ray’s origin is outside the sphere • Find the closest point to the sphere center – t. P=RO. D – If t. P<0, no hit O r P Cornell CS 465 Fall 2004 • Lecture 3 t. P D R © 2004 Steve Marschner • 24

Ray-sphere intersection: geometric • • Find if the ray’s origin is outside the sphere

Ray-sphere intersection: geometric • • Find if the ray’s origin is outside the sphere Find the closest point to the sphere center – If t. P<0, no hit • Else find squared distance d 2 – Pythagoras: d 2=R 2 -t. P 2 – … if d 2> r 2 no hit O d r P Cornell CS 465 Fall 2004 • Lecture 3 t. P D R © 2004 Steve Marschner • 25

Ray-sphere intersection: geometric • • • Find if the ray’s origin is outside the

Ray-sphere intersection: geometric • • • Find if the ray’s origin is outside the sphere Find the closest point to the sphere center – If t. P<0, no hit Else find squared distance d 2 – if d 2 > r 2 no hit O P Cornell CS 465 Fall 2004 • Lecture 3 – t’ 2+d 2=r 2 • If inside t = t. P+t’ t r d • If outside t = t. P-t’ t’ t. P D R © 2004 Steve Marschner • 26

Ray-sphere intersection: geometric Cornell CS 465 Fall 2004 • Lecture 3 © 2004 Steve

Ray-sphere intersection: geometric Cornell CS 465 Fall 2004 • Lecture 3 © 2004 Steve Marschner • 27

Geometric vs. algebraic • Algebraic was more simple (and more generic) • Geometric is

Geometric vs. algebraic • Algebraic was more simple (and more generic) • Geometric is more efficient – Timely tests – In particular for outside and pointing away Cornell CS 465 Fall 2004 • Lecture 3 © 2004 Steve Marschner • 28

Image so far • With eye ray generation and sphere intersection Surface s =

Image so far • With eye ray generation and sphere intersection Surface s = new Sphere((0. 0, 0. 0), 1. 0); for 0 <= iy < ny for 0 <= ix < nx { ray = camera. get. Ray(ix, iy); if (s. intersect(ray, 0, +inf) < +inf) image. set(ix, iy, white); } Cornell CS 465 Fall 2004 • Lecture 3 © 2004 Steve Marschner • 29

Ray-box intersection • Could intersect with 6 faces individually • If axis-aligned, box is

Ray-box intersection • Could intersect with 6 faces individually • If axis-aligned, box is the intersection of 3 slabs Cornell CS 465 Fall 2004 • Lecture 3 © 2003 Steve Marschner • 30

Ray-slab intersection • 2 D example • 3 D is the same Cornell CS

Ray-slab intersection • 2 D example • 3 D is the same Cornell CS 465 Fall 2004 • Lecture 3 © 2003 Steve Marschner • 31

Intersection ranges • Each intersection is an interval • Want last entry point and

Intersection ranges • Each intersection is an interval • Want last entry point and first exit point Cornell CS 465 Fall 2004 • Lecture 3 © 2003 Steve Marschner • 32

General Ray-plane intersection • Condition 1: point is on ray • Condition 2: point

General Ray-plane intersection • Condition 1: point is on ray • Condition 2: point is on plane • Condition 3: point is on the inside of all edges • First solve 1&2 (ray–plane intersection) – substitute and solve for t: Cornell CS 417 Spring 2003 • Lecture 33 © 2003 Steve Marschner • 33

Ray-triangle intersection • In plane, triangle is the intersection of 3 half spaces Cornell

Ray-triangle intersection • In plane, triangle is the intersection of 3 half spaces Cornell CS 417 Spring 2003 • Lecture 33 © 2003 Steve Marschner • 34

Inside-edge test • Need outside vs. inside • Reduce to clockwise vs. counterclockwise –

Inside-edge test • Need outside vs. inside • Reduce to clockwise vs. counterclockwise – vector of edge to vector to x • Use cross product to decide Cornell CS 417 Spring 2003 • Lecture 33 © 2003 Steve Marschner • 35

Ray-triangle intersection Cornell CS 417 Spring 2003 • Lecture 33 © 2003 Steve Marschner

Ray-triangle intersection Cornell CS 417 Spring 2003 • Lecture 33 © 2003 Steve Marschner • 36

Intersection against many shapes • The basic idea is: hit (ray, t. Min, t.

Intersection against many shapes • The basic idea is: hit (ray, t. Min, t. Max) { t. Best = +inf; hit. Surface = null; for surface in surface. List { t = surface. intersect(ray, t. Min, t. Max); if t < t. Best { t. Best = t; hit. Surface = surface; } } return hit. Surface, t; } – this is linear in the number of shapes but there are sublinear methods (acceleration structures) Cornell CS 465 Fall 2004 • Lecture 3 © 2004 Steve Marschner • 37

Image so far • With eye ray generation and scene intersection Geometry g =

Image so far • With eye ray generation and scene intersection Geometry g = new Sphere((0. 0, 0. 0), 1. 0); for 0 <= iy < ny for 0 <= ix < nx { ray = camera. get. Ray(ix, iy); c = scene. trace(ray, 0, +inf); image. set(ix, iy, c); } … trace(ray, t. Min, t. Max) { surface, t = hit(ray, t. Min, t. Max); if (surface != null) return surface. color(); else return black; } Cornell CS 465 Fall 2004 • Lecture 3 © 2004 Steve Marschner • 38

Shading • Compute light reflected toward camera • Inputs: – eye direction – light

Shading • Compute light reflected toward camera • Inputs: – eye direction – light direction (for each of many lights) – surface normal – surface parameters (color, shininess, …) • More on this in the next lecture Cornell CS 465 Fall 2004 • Lecture 3 © 2004 Steve Marschner • 39

Image so far trace(Ray ray, t. Min, t. Max) { surface, t = hit(ray,

Image so far trace(Ray ray, t. Min, t. Max) { surface, t = hit(ray, t. Min, t. Max); if (surface != null) { point = ray. evaluate(t); normal = surface. get. Normal(point); return surface. shade(ray, point, normal, light); } else return black; } … shade(ray, point, normal, light) { v_E = –normalize(ray. direction); v_L = normalize(light. pos - point); // compute shading } Cornell CS 465 Fall 2004 • Lecture 3 © 2004 Steve Marschner • 40

Shadows • Surface is only illuminated if nothing blocks its view of the light.

Shadows • Surface is only illuminated if nothing blocks its view of the light. • With ray tracing it’s easy to check – just intersect a ray with the scene! Cornell CS 465 Fall 2004 • Lecture 3 © 2004 Steve Marschner • 41

Image so far shade(ray, point, normal, light) { shad. Ray = (point, light. pos

Image so far shade(ray, point, normal, light) { shad. Ray = (point, light. pos - point); if (shad. Ray not blocked) { v_E = –normalize(ray. direction); v_L = normalize(light. pos - point); // compute shading } return black; } Cornell CS 465 Fall 2004 • Lecture 3 © 2004 Steve Marschner • 42

Multiple lights • Important to fill in black shadows • Just loop over lights,

Multiple lights • Important to fill in black shadows • Just loop over lights, add contributions • Ambient shading – black shadows are not really right – one solution: dim light at camera – alternative: all surface receive a bit more light • just add a constant “ambient” color to the shading… Cornell CS 465 Fall 2004 • Lecture 3 © 2004 Steve Marschner • 43

Image so far shade(ray, point, normal, lights) { result = ambient; for light in

Image so far shade(ray, point, normal, lights) { result = ambient; for light in lights { if (shadow ray not blocked) { result += shading contribution; } } return result; } Cornell CS 465 Fall 2004 • Lecture 3 © 2004 Steve Marschner • 44