90 likes | 172 Views
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 {
E N D
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 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 4x4 tranformation applied to it. • Triangle: vertices, normal • Ray: start, direction • Input files: • Can use parser from As3 • 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 • 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)v0+uv1+vv2 • Barycentric • Solve linear system of equations.
Intersections (More) • Ellipsoids (from www-courses.cs.uiuc.edu/~cs419/ray-intersection.ppt) These eqns should be flipped
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 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 • 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 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.