1 / 24

Ray Intersections

Ray Intersections. CS 319 Advanced Topics in Computer Graphics John C. Hart. Intersection Computation. Parametric ray: r ( t ) = o + t d t  0 Since || d || = 1, t is distance along ray Implicit object: f ( x ) = 0 f ( x ) > 0 outside, f ( x ) < 0 inside

kynan
Télécharger la présentation

Ray Intersections

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Ray Intersections CS 319 Advanced Topics inComputer Graphics John C. Hart

  2. Intersection Computation • Parametric ray: r(t) = o + t d • t 0 • Since ||d|| = 1, t is distance along ray • Implicit object: f(x) = 0 • f(x) > 0 outside, f(x) < 0 inside • Or vice-verse, doesn’t matter • Intersection occurs when f(r(t)) = 0 • Let F(t) = f(r(t)) • Real function of one real variable • Intersection  root finding f(x) > 0 f(x) = 0 f(x) < 0 F(t) > 0 F(t) < 0 F(t) > 0 F(t) < 0

  3. Sphere Intersection c r f(x)=(x - c)(x - c) - r2 f(r(t)) = (o + td - c)(o + td - c) - r2 = ddt2 + 2 (o-c)dt + (o-c)(o-c) - r2 D > 0 D = 0 D < 0 D = B*B - 4*AC; if (D < 0.0) return NULL; rootD = sqrt(D); t0 = 0.5*(-B - rootD)/A; t1 = 0.5*(-B + rootD)/A; if (t0 >= 0) hit->t = t0, return hit; if (t1 >= 0) hit->t = t1, return hit; return NULL; A = dd (= 1 if d unit length) B = 2 (o-c)d C = (o-c)(o-c) - r2 Hit position x = o + td Hit normal n = (x – c)/||x – c||

  4. d o x T-1x Ellipsoid Intersection f(T-1x)=0 • Let T be a 4x4 transformation that distorts a sphere into the ellipsoid • Ellipsoid is implicit surface of f(T-1x) f(T-1r(t)) = f(T-1(o + td)) = f(T-1o + tT-1d) • Hit point needs to be in world coords • t same in both coordinates x = o + td T T-1 Ellipsoid::Intersect(Ray r) { Ray Tir = (Ti * r.o, Ti * r.d); return Sphere::Intersect(Tir); } T-1d f(x) = 0 T-1o

  5. n n’ x Tx What about the normal? f(T-1x)=0 • Let n = [abcd] be a tangent plane • Let x = [xyz 1]Tbe a point • Plane-point duality • Planes are row vectors • Points are column vectors • Point x in plane nnx = 0 • Need to find n’ such that n’ Tx = 0 • Notice nT-1T x = 0 • New normal n’ = n T-1 = (T-1)T nT • Could also use the adjoint n’ = nT* • n’ not necessarily unit length even if n is • But we’ll need the inverse anyway T f(x) = 0

  6. Matrix Inverse S-1 = [minors of S]T Don’t need 1/|S| if just need directionof transformed normal. Will have torenormalize anyway is S not special unitary.

  7. Scene Graph • Hierarchical representation of all objects in scene • Transformation nodes • Intersect kids by T-1r • Returned normal (T-1)Tn • Maintain T-1 (not T) Scale 2,2,2Xlate 2,0,0 Xlate 2,2,0Scale .5,1,.5 Xlate -2,0,0 Xlate 2,0,0

  8. Instancing Scale 2,2,2Xlate 2,0,0 Xlate 2,2,0 • Scene graph is a hierarchy • Not necessarily a tree • Directed acyclic graph (DAG) • Nodes may have multiple parents • Instance: Appearance of each node’s geometry in scene Xlate -1,0,0 Xlate 1,0,0 Scale .5,1,.5

  9. Fun with Instancing ImagecourtesyJohnAmanatides

  10. z x y z z z z x x x x y y y y Quadrics Ray: x(t) = ox + tdx, y(t) = oy + tdy z(t) = oz + tdz z r x y Paraboloid:x2 + y2 – z Sphere:x2 + y2 + z2 – r2 Cylinder:x2 + y2 – r2 Variations? Use the transformation trick Hyperboloid:x2 + y2– z2r2 Cone:x2 + y2 – z2

  11. Torus z r x R • Product of two implicit circles (x – R)2 + z2 – r2 = 0 (x + R)2 + z2 – r2 = 0 ((x – R)2 + z2 – r2)((x + R)2 + z2 – r2) = (x2 – 2Rx + R2 + z2 – r2) (x2 + 2Rx + R2 + z2 – r2) = x4 + 2x2z2 + z4 – 2x2r2 – 2z2r2 + r4 – 2x2R2 + 2z2R2 – 2r2R2 + R4 = (x2 + z2 – r2 – R2)2 + 4z2R2 – 4r2R2 • Surface of rotation: replace x2 with x2 + y2 f(x,y,z) = (x2 + y2 + z2 – r2 – R2)2 + 4R2(z2 – r2) • Quartic!!! • Up to four ray torus intersections

  12. Finding Roots • How do we find roots for degree > 2? • Newton’s Method • Converges fast • Might converge to wrong root • Root Isolation • Guarantees single root • Sturm Sequences

  13. Newton’s Method

  14. Sturm Sequences • f(t) is a polynomial • Create a sequence f1 = f f2 = f’ fk+1 = – rem fk-1 /fk • # of roots in [a,b] = difference in # of sign changes between fk(a) and fk(b) f1(t) = t3 + 3t2 – 1 f2(t) = 3t2 + 6t f3(t) = 2t + 1 f4(t) = 9/4 t f1 f2 f3 f4 # - - + - + 3 -3 - + - + 3 -2 + 0 - + 2 -1 + - - + 2 0 - 0 + + 1 1 + + + + 0 2 + + + + 0

  15. Ray-Object Intersection in out • Returns intersection in a hit record • “Next” field enables hit record to hold a list of intersections • List only non-negative intersection parameters • Ray always originates outside • If first t = 0 then ray originated inside • Parity classifies ray segments • Odd segments “in” • Even segments “out” in out in in out out

  16. Constructive Solid Geometry B • Construct shapes from primitives using boolean set operations • Union: AB, A + B, A or B • Intersection: AB, A*B, A and B • Difference: A\B, A–B, A and not B A B–A AB AB A–B

  17. A B CSG Intersections A.t0 B.t0 A.t1 B.t1 • List of t-values for A, B w/in-out classification A.t_list = {0.9, 3.1} = {0.9in, 3.1out} B.t_list = {2.5, 4.5} = {2.5in, 4.5out} • Use dot(r.d,n) to determine in,out • Merge both lists into a single t-ordered list { 0.9 Ain Bout, 2.5 Ain Bin, 3.1 Aout Bin, 4.5 Aout Bout } • Keep track of A and B in/out classification • Use Roth table to classify t-values A+B = {0.9in, 2.5in, 3.1in, 4.5out} = {0.9, 4.5} A*B = {0.9out, 2.5in, 3.1out, 4.5out} = {2.5, 3.1} A-B = {0.9in, 2.5out,3.1out, 4.5out} = {0.9, 2.5} • Remove redundant t-values 0.9 2.5 3.1 4.5 Roth Table Op A B Res + in in in in out in out in in out out out * in in in in out out out in out out out out – in in out in out in out in out out out out

  18. Accelerating Ray Intersections • Q: Why is basic ray tracing so slow? • A: It intersects every ray with every primitive in every object • Q: How can we make ray tracing faster? • A: Coherence Image coherence – neighboring pixels probably display same object Spatial coherence – neighboring points probably exhibit same appearance Temporal coherence– Pixels in neighboring frames probably display same object Stanford Bunny~70K triangles Do we need 70K ray-triangleintersections for each ray?

  19. Shadow Caching s • Any interloper between surface point x and the light source s will cast a shadow • Doesn’t matter how many • Doesn’t matter which is closest • Stop ray intersections once any intersection found • Neighboring shadowed surface points x and x’ probably shadowed by the same object • Start shadow ray intersection search with object intersected in last shadow search C A B x’ x

  20. Bounding Volume • Ray-bunny intersection takes 70K ray-triangle intersections even if ray misses the bunny • Place a sphere around bunny • Ray A misses sphere so ray A misses bunny without checking 70K ray-triangle intersections • Ray B intersects sphere but still misses bunny after checking 70K intersections • Ray C intersects sphere and intersects bunny • Can also use axis-aligned bounding box • Easier to create for triangle mesh A B C

  21. A Bounding Volume Hierarchy B C • Associate bounding volume with each node of scene graph • If ray misses a node’s bounding volume, then no need to check any node beneath it • If ray hits a node’s BV, then replace it with its children’s BV’s (or geometry) • Breadth first search of tree • Maintain heap ordered by ray-BV intersection t-values • Explore children of nodew/least pos. ray-BV t-value Bunny BV Head BV Body BV Face BV L.Ear BV R.Ear BV

  22. Grids • Encase object in a 3-D array of cubic cells • Each cell contains list of all triangles it contains or intersects • Rasterize ray to find which cells it intersects • 3D Bresenham algorithm • All cells that contain any part of ray • Working from first ray-cell to last… • Find least positive intersect of ray with triangles in cell’s list • If no intersection, move on to next cell

  23. Tagging • Ray-object intersection test valid for ray with entire object • not just portion of object inside current cell • Need only intersect object once for each ray • In cell A – list = {#1} • Intersect r with #1? Yes • Miss  Tag #1 with no-intersection • In cell B – list = {#2} • Intersect r with #2? Yes • ray r hits object #2 but later in cell C • Tag object #2 with intersection-at-C • In cell C – list = {#1,#2} • Intersect r with #1? No (no-intersection) • Intersect r with #2? No (intersection-at-D) • In cell D – list = {#2} • Intersect r with #2? No (intersection-at-D) A B #2 C D #1 r

  24. Other Partitioning Structures • Octree • Ray can parse through large empty areas • Requires less space than grid • Subdivision takes time • Binary Space Partition (BSP) Tree • Planes can divide models nearly in half • Trees better balanced, shallower • Added ray-plane intersections

More Related