Ray Tracing Outline For each pixel Shoot ray

  • Slides: 9
Download presentation
Ray Tracing Outline For each pixel { Shoot ray r from eye to center

Ray Tracing Outline For each pixel { Shoot ray r from eye to center of pixel with trace( r ) } function trace( r ) For each object { Find object with closest intersection, x. } If x exists { For each light source { For all other objects { Check for intersection of ray from light to x. } If no intersection { Calculate direct illumination with Phong model. } Accumulate calculated color. } Calculate reflection ray r’, and recurse calling trace( r’ ) Accumulate reflected colors, and return. } }

Leverage C++ • Using C++ will make complicated code very simple. Take advantage of

Leverage C++ • Using C++ will make complicated code very simple. Take advantage of it! • Abstract base class “Object”. Subclasses for spheres, triangles, etc. Store objects as array of pointers, and iterate with virtual “Intersect” function. – Common information (Kd, Ks, Ka) • Each actual object type will have its own intersection function.

Data Structures • Sphere: center, radius • Ellipsoid: Just sphere with 4 x 4

Data Structures • Sphere: center, radius • Ellipsoid: Just sphere with 4 x 4 tranformation applied to it. • Triangle: vertices, normal • Ray: start, direction • Input files: – Can use parser from As 3 – Need: camera information, object information • Objects should at least have Ks, Kd, color, location, but the assignment is open-ended. E. g. , can have Ka if you want, or not. Can have texture map information.

Intersections • Parametric ray equation: r(t)=p+td – t>=0 • Implicit sphere equation: f(p)=||p-c||-r=0 –

Intersections • Parametric ray equation: r(t)=p+td – t>=0 • Implicit sphere equation: f(p)=||p-c||-r=0 – p is any point on sphere’s surface, c is the center, r is the radius. – Intersection (with an implicit equation) is just root finding. • Explicit triangle equation: t(u, v)=(1 -u-v)v 0+uv 1+vv 2 – Barycentric – Solve linear system of equations.

Intersections (More) • Ellipsoids (from wwwcourses. cs. uiuc. edu/~cs 419/ray-intersection. ppt) These eqns should

Intersections (More) • Ellipsoids (from wwwcourses. cs. uiuc. edu/~cs 419/ray-intersection. ppt) These eqns should be flipped

Local Illumination (a quick reminder) • Phong illumination model (not to be confused with

Local Illumination (a quick reminder) • Phong illumination model (not to be confused with Phong shading) – For each light:

Speeding things up • BSP trees with bounding boxes – Intersections take up most

Speeding things up • BSP trees with bounding boxes – Intersections take up most of the time. – If create BSP structure, then can check for intersection from front to back from a given starting ray location. • Octrees – Figure out which cells it intersects, and check for intersections only with objects inside those cells

More features • Here are some suggestions: – – – – Transparency with refraction

More features • Here are some suggestions: – – – – Transparency with refraction Anti-aliasing Lens effects / depth of field Super quadrics Programmable shading Texture, bump, and/or displacement mapping Spot lights and/or area lights Other interesting features

Tips • Make sure you test your code early and often. Ray tracers are

Tips • Make sure you test your code early and often. Ray tracers are hard to debug. – Don’t try to implement everything at once. E. g. , start with only spheres, 1 light source, and a constant local illumination value to test your intersection code. – Take advantage of the newsgroup. • This assignment is open-ended. However, we strongly suggest using C++. Very strongly. • Start now! You don’t know what silly problems you’ll encounter. Plus, you’ll get really into it and want to add lots of extra features.