610 likes | 767 Views
CS 551 / 645: Introductory Computer Graphics. Ray Tracing. Administrivia. Assignment 5: Intel okay. Realism. What is not realistic about the following images?. Realism?. Realism?. Realism?. Realism?. Realism?. Crude light-surface interaction model. Strictly local illumination model.
E N D
CS 551 / 645: Introductory Computer Graphics Ray Tracing David Luebke 7/30/2014
Administrivia • Assignment 5: Intel okay David Luebke 7/30/2014
Realism • What is not realistic about the following images? David Luebke 7/30/2014
Realism? David Luebke 7/30/2014
Realism? David Luebke 7/30/2014
Realism? David Luebke 7/30/2014
Realism? David Luebke 7/30/2014
Realism? David Luebke 7/30/2014
Crude light-surface interaction model Strictly local illumination model Realism… • A big part of realism is realistic lighting • Is Phong’s lighting model realistic? • Empirical specular term • “Ambient” term • No shadows • No surface interreflection David Luebke 7/30/2014
Global Illumination • Realistic lighting is global, not local • Surfaces shadow each other • Surfaces illuminate each other • Two long-time approaches • Ray-tracing: simulate light-ray optics • Radiosity: simulate physics of light transfer David Luebke 7/30/2014
Ray Tracing Overview • To determine visible surfaces at each pixel: • Cast a ray from the eyepoint through the center of the pixel • Intersect the ray with all objects in the scene • Whatever it hits first is the visible object • This is called ray casting David Luebke 7/30/2014
Ray Casting • An example: Eyepoint Screen Scene David Luebke 7/30/2014
Recursive Ray Tracing • Obvious extension: • Spawn additional rays off reflective surfaces • Spawn transmitted rays through transparent surfaces • Leads to recursive ray tracing Secondary Rays Primary Ray David Luebke 7/30/2014
Recursive Ray Tracing • Slightly less obvious extension: • Trace a ray from point of intersection to light source • If ray hits anything before light source, object is in shadow • These are called shadow rays David Luebke 7/30/2014
Ray Tracing Overview • Ray tracing is simple • No clipping, perspective projection matrices, scan conversion of polygons • Ray tracing is powerful • Hidden surface problem • Shadow computation • Reflection/refraction • Ray tracing is slow • Complexity proportional to # of pixels • Typical screen ~ 1,000,000 pixels • Typical scene « 1,000,000 polygons David Luebke 7/30/2014
Recursive Ray Tracing David Luebke 7/30/2014
Recursive Ray Tracing Pixel ImagePlane David Luebke 7/30/2014
Recursive Ray Tracing “Direct” Ray To Eye David Luebke 7/30/2014
Recursive Ray Tracing “Indirect” Ray To Eye David Luebke 7/30/2014
Recursive Ray Tracing • Physically, we’re interested in path of light rays from light source to eye. • In practice, we trace rays backwards from eye to source (Why?) David Luebke 7/30/2014
Recursive Ray Tracing • Physically, we’re interested in path of light rays from light source to eye. • In practice, we trace rays backwards from eye to source (Why?) • Computational efficiency: we want the finite subset of rays that leave source, bounce around, and pass through eye • Can’t predict where a ray will go, so start with rays we know reach eye David Luebke 7/30/2014
Basic Algorithm • Function TraceRay()Recursively trace ray Rand return resulting color C • ifRintersects any objects then • Find nearest object O • Find local color contribution • Spawn reflected and transmitted rays, using TraceRay() to find resulting colors • Combine colors; return result • else • return background color David Luebke 7/30/2014
Basic Algorithm: Code Object allObs[]; Color image[]; RayTraceScene() allObs = initObjects(); for (Yall rows in image) for (X all pixels in row) Ray R = calcPrimaryRay(X,Y); image[X,Y] = TraceRay(R);display(image); David Luebke 7/30/2014
Basic Algorithm: Code Color TraceRay(Ray R) ifrayHitsObjects(R) then Color localC, reflectC, refractC; Object O = findNearestObject(R); localC = shade(O,R); Ray reflectedRay = calcReflect(O,R) Ray refractedRay = calcRefract(O,R) reflectC = TraceRay(reflectedRay); refractC = TraceRay(refractedRay); return localC reflectC refractC else returnbackgroundColor David Luebke 7/30/2014
Refining theBasic Algorithm Color TraceRay(Ray R) ifrayHitsObjects(R) then Color localC, reflectC, refractC; Object O = findNearestObject(R); localC = shade(O,R); Ray reflectedRay = calcReflect(O,R) Ray refractedRay = calcRefract(O,R) reflectC = TraceRay(reflectedRay); refractC = TraceRay(refractedRay); return localC reflectC refractC else returnbackgroundColor David Luebke 7/30/2014
Ray-Object Intersection • Given a ray and a list of objects, what objects (if any) intersect the ray? • Query: Does ray R intersect object O? • How to represent ray? • What kind of object? • Sphere • Polygon • Box • General quadric David Luebke 7/30/2014
Representing Rays • How might we represent rays? • We represent a ray parametrically: • A starting point O • A direction vector D • A scalar t R = O+ tD O t < 0 t = 1 t > 1 D David Luebke 7/30/2014
Ray-Sphere Intersection • Ray R = O + tD x = Ox + t Dx y = Oy + t Dy z = Oz + t Dz • Sphere at (l, m, n) of radius r is: (x - l)2 + (y - m)2 + (z - n)2 = r 2 • Substitute for x,y,z and solve for t… David Luebke 7/30/2014
Ray-Sphere Intersection • Works out as a quadratic equation: at2 + bt + c = 0 where a = Dx2 + Dy2 + Dz2 b =2Dx(Ox - l) + 2Dy(Oy - m) + 2Dz(Oz - n) c = l2 + m2 + n2 + Ox2 + Oy2 + Oz2 - 2(l Ox + m Oy + n Oz + r2) David Luebke 7/30/2014
Ray-Sphere Intersection • If solving for t gives no real roots: ray does not intersect sphere • If solving gives 1 real root r, ray grazes sphere where t = r • If solving gives 2 real roots (r1, r2), ray intersects sphere at t = r1& t = r2 • Ignore negative values • Smallest value is first intersection David Luebke 7/30/2014
Ray-Sphere Intersection • Find intersection point Pi = (xi, yi, zi) by plugging t back into ray equation • Find normal at intersection point by subtracting sphere center from Pi and normalizing: • When will we need the normal? When not? David Luebke 7/30/2014
Ray-Polygon Intersection • Polygons are the most common model representation • Can render in hardware • Lowest common denominator • Basic approach: • Find plane equation of polygon • Find point of intersection between ray and plane • Does polygon contain intersection point? David Luebke 7/30/2014
d Ray-Polygon Intersection • Find plane equation of polygon:ax + by + cz + d = 0 • Remember how? N = [a, b, c] d = N P1 y N P2 P1 x David Luebke 7/30/2014
Ray-Polygon Intersection • Find intersection of ray and plane: t = -(aOx + bOy + cOz + d) / (aDx + bDy + cDz) • Does polygon contain intersection point Pi ? • One simple algorithm: • Draw line from Pi to each polygon vertex • Measure angles between lines (how?) • If sum of angles between lines is 360°, polygon contains Pi • Slow — better algorithms available David Luebke 7/30/2014
Ray-Box Intersection • Often want to find whether a ray hits an axis-aligned box (Why?) • One way: • Intersect ray with pairs of parallel planes that form box • If intervals of intersection overlap, the ray intersects the volume. David Luebke 7/30/2014
Shadow Rays • Simple idea: • Where a ray intersects a surface, send a shadow ray to each light source • If the shadow ray hits any surface before the light source, ignore light • Q: how much extra work is involved? • A: each ray-surface intersection now spawns n + 2 rays, n = # light sources • Remember: intersections 95% of work David Luebke 7/30/2014
Shadow Rays • Some problems with using shadow rays as described: • Lots of computation • Infinitely sharp shadows • No semitransparent object shadows David Luebke 7/30/2014
Shadow Rays • Some problems with using shadow rays as described: • Lots of computation • Infinitely sharp shadows • No semitransparent object shadows David Luebke 7/30/2014
Light Buffer Shadow Ray Problems:Too Much Computation • Light buffer (Haines/Greenberg, 86) • Precompute lists of polygons surrounding light source in all directions • Sort each list by distance to light source • Now shadow ray need only be intersected with appropriate list! ShadowRay Occluding Polys Current Intersection Point David Luebke 7/30/2014
Shadow Rays • Some problems with using shadow rays as described: • Lots of computation • Infinitely sharp shadows • No semitransparent object shadows David Luebke 7/30/2014
Shadow Ray Problems:Sharp Shadows • Why are the shadows sharp? • A: Infinitely small point light sources • What can we do about it? • A: Implement area light sources • How? David Luebke 7/30/2014
Shadow Ray Problems: Area Light Sources • Could trace a conical beam from point of intersection to light source: • Track portion of beam blocked by occluding polygons: 30% blockage David Luebke 7/30/2014
Shadow Ray Problems:Area Light Sources • Too hard! Approximate instead: • Sample the light source over its area and take weighted average: 50% blockage David Luebke 7/30/2014
Shadow Ray Problems:Area Light Sources • Disadvantages: • Less accurate (50% vs. 30% blockage) • Oops! Just quadrupled (at least) number of shadow rays • Moral of the story: • Soft shadows are very expensive in ray tracing David Luebke 7/30/2014
Shadow Rays • Some problems with using shadow rays as described: • Lots of computation • Infinitely sharp shadows • No semitransparent object shadows David Luebke 7/30/2014
Shadow Ray Problems:Semitransparent Objects • In principle: • Translucent colored objects should cast colored shadows • Translucent curved objects should create refractive caustics • In practice: • Can fake colored shadows by attenuating color with distance • Caustics need backward ray tracing David Luebke 7/30/2014
Speedup Techniques • Intersect rays faster • Shoot fewer rays • Shoot “smarter” rays David Luebke 7/30/2014
Speedup Techniques • Intersect rays faster • Shoot fewer rays • Shoot “smarter” rays David Luebke 7/30/2014
Intersect Rays Faster • Bounding volumes • Spatial partitions • Reordering ray intersection tests • Optimizing intersection tests David Luebke 7/30/2014
Bounding Volumes • Bounding volumes • Idea: before intersecting a ray with a collection of objects, test it against one simple object that bounds the collection 7 7 5 5 3 3 1 1 8 8 6 6 0 0 9 9 2 2 4 4 David Luebke 7/30/2014