1 / 57

Multi-Hit Ray Traversal

Multi-Hit Ray Traversal. Christiaan Gribble Alexis Naveros Ethan Kerzner ACM SIGGRAPH Symposium on Interactive 3D Graphics & Games 15 March 2014. Why present at i3D?. Raise awareness of JCGT paper Overview Algorithm Performance Examples Wrap-up Generate interest.

shaun
Download Presentation

Multi-Hit Ray Traversal

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. Multi-Hit Ray Traversal Christiaan GribbleAlexis NaverosEthan Kerzner • ACM SIGGRAPH Symposium on Interactive 3D Graphics & Games15 March 2014

  2. Why present at i3D? • Raise awareness of JCGT paper • Overview • Algorithm • Performance • Examples • Wrap-up • Generate interest Gribble et al., Multi-Hit Ray Traversal 2

  3. Why present at i3D? • Raise awareness of JCGT paper • Generate interest • Applying algorithm • Improving algorithm • Exploring non-optical rendering Looking to collaborate on interesting problems in rendering Gribble et al., Multi-Hit Ray Traversal 3

  4. Overview

  5. Interval computation Non-optical rendering Optical rendering Gribble et al., Multi-Hit Ray Traversal 5

  6. Interval computation Interval computation Non-optical rendering Gribble et al., Multi-Hit Ray Traversal 6

  7. Interval computation • Difficult or impossible • Epsilon hacks • Missed/repeated intersections • Performance impacts Gribble et al., Multi-Hit Ray Traversal 7

  8. Interval computation • Difficult or impossible • Performance impacts • Traversal restart • Operational overhead Are overlapping coplanar facets actually a problem? Gribble et al., Multi-Hit Ray Traversal 8

  9. Interval computation Overlapping coplanar facets Gribble et al., Multi-Hit Ray Traversal 9

  10. Algorithm

  11. Multi-hit ray traversal • Which primitives are intersected? • One or more, & possibly all • Ordered by t-value along ray • Core operation in ray engine • Critical to interval generation • Applications Gribble et al., Multi-Hit Ray Traversal 11

  12. Multi-hit ray traversal • Which primitives are intersected? • Core operation in ray engine • Avoids negative epsilon hacks • Alleviates traversal restart • Critical to interval generation • Applications Gribble et al., Multi-Hit Ray Traversal 12

  13. Multi-hit ray traversal • Which primitives are intersected? • Core operation in ray engine • Critical to interval generation • Handles bad geometry gracefully • Enables early exit • Applications Gribble et al., Multi-Hit Ray Traversal 13

  14. Multi-hit ray traversal • Which primitives are intersected? • Core operation in ray engine • Critical to interval generation • Applications • Ballistic simulation • Transparent rendering • … Gribble et al., Multi-Hit Ray Traversal 14

  15. Buffered multi-hit with early exit 1 function Traverse(root, ray) 2 Initialize(hitList) 3 node <- root 4 while Valid(node) do 5 if !Empty(node) then 6 Initialize(hitMask) 7 repeat 8 repeatNode <- FALSE 9 fortriangleinnodedo 10 if !Contains(hitMask, tID) then 11 if Intersect(triangle, ray) then 12 hitData <- (t, u, v, tID, ...) 13 if Full(hitList) then 14 repeatNode <- TRUE 15 Insert(hitList, hitData) 16 for hitData in hitList do 17 if !UserHit(ray, hitData) then 18 return 19 ifrepeatNodethen 20 Add(hitMask, hitData.tID) 21 until !repeatNode 22 node <- Next(node) hitList hitMask repeatNode Buffered multi-hit ray traversal Gribble et al., Multi-Hit Ray Traversal 15

  16. Initialization 1 function Traverse(root, ray) 2 Initialize(hitList) 3 node <- root 4 while Valid(node) do 5 if !Empty(node) then 6 Initialize(hitMask) 7 repeat 8 repeatNode <- FALSE 9 fortriangleinnodedo 10 if !Contains(hitMask, tID) then 11 if Intersect(triangle, ray) then 12 hitData <- (t, u, v, tID, ...) 13 if Full(hitList) then 14 repeatNode <- TRUE 15 Insert(hitList, hitData) 16 for hitData in hitList do 17 if !UserHit(ray, hitData) then 18 return 19 ifrepeatNodethen 20 Add(hitMask, hitData.tID) 21 until !repeatNode 22 node <- Next(node) ray hitList hitMask repeatNode Buffered multi-hit ray traversal Gribble et al., Multi-Hit Ray Traversal 16

  17. Initialization 1 function Traverse(root, ray) 2 Initialize(hitList) 3 node <- root 4 while Valid(node) do 5 if !Empty(node) then 6 Initialize(hitMask) 7 repeat 8 repeatNode <- FALSE 9 fortriangleinnodedo 10 if !Contains(hitMask, tID) then 11 if Intersect(triangle, ray) then 12 hitData <- (t, u, v, tID, ...) 13 if Full(hitList) then 14 repeatNode <- TRUE 15 Insert(hitList, hitData) 16 for hitData in hitList do 17 if !UserHit(ray, hitData) then 18 return 19 ifrepeatNodethen 20 Add(hitMask, hitData.tID) 21 until !repeatNode 22 node <- Next(node) ray hitList - - - hitMask repeatNode Buffered multi-hit ray traversal Gribble et al., Multi-Hit Ray Traversal 17

  18. Traverse nodes 1 function Traverse(root, ray) 2 Initialize(hitList) 3 node <- root 4 while Valid(node) do 5 if !Empty(node) then 6 Initialize(hitMask) 7 repeat 8 repeatNode <- FALSE 9 fortriangleinnodedo 10 if !Contains(hitMask, tID) then 11 if Intersect(triangle, ray) then 12 hitData <- (t, u, v, tID, ...) 13 if Full(hitList) then 14 repeatNode <- TRUE 15 Insert(hitList, hitData) 16 for hitData in hitList do 17 if !UserHit(ray, hitData) then 18 return 19 ifrepeatNodethen 20 Add(hitMask, hitData.tID) 21 until !repeatNode 22 node <- Next(node) ray hitList - - - hitMask repeatNode Buffered multi-hit ray traversal Gribble et al., Multi-Hit Ray Traversal 18

  19. Traverse nodes 1 function Traverse(root, ray) 2 Initialize(hitList) 3 node <- root 4 while Valid(node) do 5 if !Empty(node) then 6 Initialize(hitMask) 7 repeat 8 repeatNode <- FALSE 9 fortriangleinnodedo 10 if !Contains(hitMask, tID) then 11 if Intersect(triangle, ray) then 12 hitData <- (t, u, v, tID, ...) 13 if Full(hitList) then 14 repeatNode <- TRUE 15 Insert(hitList, hitData) 16 for hitData in hitList do 17 if !UserHit(ray, hitData) then 18 return 19 ifrepeatNodethen 20 Add(hitMask, hitData.tID) 21 until !repeatNode 22 node <- Next(node) node ray hitList - - - hitMask - - - - - - repeatNode Buffered multi-hit ray traversal Gribble et al., Multi-Hit Ray Traversal 19

  20. Find some hits 1 function Traverse(root, ray) 2 Initialize(hitList) 3 node <- root 4 while Valid(node) do 5 if !Empty(node) then 6 Initialize(hitMask) 7 repeat 8 repeatNode <- FALSE 9 fortriangleinnodedo 10 if !Contains(hitMask, tID) then 11 if Intersect(triangle, ray) then 12 hitData <- (t, u, v, tID, ...) 13 if Full(hitList) then 14 repeatNode <- TRUE 15 Insert(hitList, hitData) 16 for hitData in hitList do 17 if !UserHit(ray, hitData) then 18 return 19 ifrepeatNodethen 20 Add(hitMask, hitData.tID) 21 until !repeatNode 22 node <- Next(node) node ray hitList - - - hitMask - - - - - - repeatNode F Buffered multi-hit ray traversal Gribble et al., Multi-Hit Ray Traversal 20

  21. Find some hits 1 function Traverse(root, ray) 2 Initialize(hitList) 3 node <- root 4 while Valid(node) do 5 if !Empty(node) then 6 Initialize(hitMask) 7 repeat 8 repeatNode <- FALSE 9 fortriangleinnodedo 10 if !Contains(hitMask, tID) then 11 if Intersect(triangle, ray) then 12 hitData <- (t, u, v, tID, ...) 13 if Full(hitList) then 14 repeatNode <- TRUE 15 Insert(hitList, hitData) 16 for hitData in hitList do 17 if !UserHit(ray, hitData) then 18 return 19 ifrepeatNodethen 20 Add(hitMask, hitData.tID) 21 until !repeatNode 22 node <- Next(node) node ray hitData hitList - - - hitMask - - - - - - repeatNode F Buffered multi-hit ray traversal Gribble et al., Multi-Hit Ray Traversal 21

  22. Find some hits 1 function Traverse(root, ray) 2 Initialize(hitList) 3 node <- root 4 while Valid(node) do 5 if !Empty(node) then 6 Initialize(hitMask) 7 repeat 8 repeatNode <- FALSE 9 fortriangleinnodedo 10 if !Contains(hitMask, tID) then 11 if Intersect(triangle, ray) then 12 hitData <- (t, u, v, tID, ...) 13 if Full(hitList) then 14 repeatNode <- TRUE 15 Insert(hitList, hitData) 16 for hitData in hitList do 17 if !UserHit(ray, hitData) then 18 return 19 ifrepeatNodethen 20 Add(hitMask, hitData.tID) 21 until !repeatNode 22 node <- Next(node) node ray hitList - - hitMask - - - - - - repeatNode F Buffered multi-hit ray traversal Gribble et al., Multi-Hit Ray Traversal 22

  23. Find some hits 1 function Traverse(root, ray) 2 Initialize(hitList) 3 node <- root 4 while Valid(node) do 5 if !Empty(node) then 6 Initialize(hitMask) 7 repeat 8 repeatNode <- FALSE 9 fortriangleinnodedo 10 if !Contains(hitMask, tID) then 11 if Intersect(triangle, ray) then 12 hitData <- (t, u, v, tID, ...) 13 if Full(hitList) then 14 repeatNode <- TRUE 15 Insert(hitList, hitData) 16 for hitData in hitList do 17 if !UserHit(ray, hitData) then 18 return 19 ifrepeatNodethen 20 Add(hitMask, hitData.tID) 21 until !repeatNode 22 node <- Next(node) node ray hitData hitList - - - hitMask - - - - - - repeatNode F Buffered multi-hit ray traversal Gribble et al., Multi-Hit Ray Traversal 23

  24. Find some hits 1 function Traverse(root, ray) 2 Initialize(hitList) 3 node <- root 4 while Valid(node) do 5 if !Empty(node) then 6 Initialize(hitMask) 7 repeat 8 repeatNode <- FALSE 9 fortriangleinnodedo 10 if !Contains(hitMask, tID) then 11 if Intersect(triangle, ray) then 12 hitData <- (t, u, v, tID, ...) 13 if Full(hitList) then 14 repeatNode <- TRUE 15 Insert(hitList, hitData) 16 for hitData in hitList do 17 if !UserHit(ray, hitData) then 18 return 19 ifrepeatNodethen 20 Add(hitMask, hitData.tID) 21 until !repeatNode 22 node <- Next(node) node ray hitData hitList - - - hitMask - - - - - - repeatNode F Buffered multi-hit ray traversal Gribble et al., Multi-Hit Ray Traversal 24

  25. Find some hits 1 function Traverse(root, ray) 2 Initialize(hitList) 3 node <- root 4 while Valid(node) do 5 if !Empty(node) then 6 Initialize(hitMask) 7 repeat 8 repeatNode <- FALSE 9 fortriangleinnodedo 10 if !Contains(hitMask, tID) then 11 if Intersect(triangle, ray) then 12 hitData <- (t, u, v, tID, ...) 13 if Full(hitList) then 14 repeatNode <- TRUE 15 Insert(hitList, hitData) 16 for hitData in hitList do 17 if !UserHit(ray, hitData) then 18 return 19 ifrepeatNodethen 20 Add(hitMask, hitData.tID) 21 until !repeatNode 22 node <- Next(node) node ray hitList hitMask - - - - - - repeatNode F Buffered multi-hit ray traversal Gribble et al., Multi-Hit Ray Traversal 25

  26. Find some hits 1 function Traverse(root, ray) 2 Initialize(hitList) 3 node <- root 4 while Valid(node) do 5 if !Empty(node) then 6 Initialize(hitMask) 7 repeat 8 repeatNode <- FALSE 9 fortriangleinnodedo 10 if !Contains(hitMask, tID) then 11 if Intersect(triangle, ray) then 12 hitData <- (t, u, v, tID, ...) 13 if Full(hitList) then 14 repeatNode <- TRUE 15 Insert(hitList, hitData) 16 for hitData in hitList do 17 if !UserHit(ray, hitData) then 18 return 19 ifrepeatNodethen 20 Add(hitMask, hitData.tID) 21 until !repeatNode 22 node <- Next(node) node ray hitData hitList hitMask - - - - - - repeatNode F T Buffered multi-hit ray traversal Gribble et al., Multi-Hit Ray Traversal 26

  27. Process some hits 1 function Traverse(root, ray) 2 Initialize(hitList) 3 node <- root 4 while Valid(node) do 5 if !Empty(node) then 6 Initialize(hitMask) 7 repeat 8 repeatNode <- FALSE 9 fortriangleinnodedo 10 if !Contains(hitMask, tID) then 11 if Intersect(triangle, ray) then 12 hitData <- (t, u, v, tID, ...) 13 if Full(hitList) then 14 repeatNode <- TRUE 15 Insert(hitList, hitData) 16 for hitData in hitList do 17 if !UserHit(ray, hitData) then 18 return 19 ifrepeatNodethen 20 Add(hitMask, hitData.tID) 21 until !repeatNode 22 node <- Next(node) node ray hitList - hitMask - - - - - - repeatNode T Buffered multi-hit ray traversal Gribble et al., Multi-Hit Ray Traversal 27

  28. Process some hits 1 function Traverse(root, ray) 2 Initialize(hitList) 3 node <- root 4 while Valid(node) do 5 if !Empty(node) then 6 Initialize(hitMask) 7 repeat 8 repeatNode <- FALSE 9 fortriangleinnodedo 10 if !Contains(hitMask, tID) then 11 if Intersect(triangle, ray) then 12 hitData <- (t, u, v, tID, ...) 13 if Full(hitList) then 14 repeatNode <- TRUE 15 Insert(hitList, hitData) 16 for hitData in hitList do 17 if !UserHit(ray, hitData) then 18 return 19 ifrepeatNodethen 20 Add(hitMask, hitData.tID) 21 until !repeatNode 22 node <- Next(node) node ray hitList - - hitMask - - - - - repeatNode T Buffered multi-hit ray traversal Gribble et al., Multi-Hit Ray Traversal 28

  29. Process some hits 1 function Traverse(root, ray) 2 Initialize(hitList) 3 node <- root 4 while Valid(node) do 5 if !Empty(node) then 6 Initialize(hitMask) 7 repeat 8 repeatNode <- FALSE 9 fortriangleinnodedo 10 if !Contains(hitMask, tID) then 11 if Intersect(triangle, ray) then 12 hitData <- (t, u, v, tID, ...) 13 if Full(hitList) then 14 repeatNode <- TRUE 15 Insert(hitList, hitData) 16 for hitData in hitList do 17 if !UserHit(ray, hitData) then 18 return 19 ifrepeatNodethen 20 Add(hitMask, hitData.tID) 21 until !repeatNode 22 node <- Next(node) node ray hitList - - - hitMask - - - - repeatNode T Buffered multi-hit ray traversal Gribble et al., Multi-Hit Ray Traversal 29

  30. Find some (more) hits 1 function Traverse(root, ray) 2 Initialize(hitList) 3 node <- root 4 while Valid(node) do 5 if !Empty(node) then 6 Initialize(hitMask) 7 repeat 8 repeatNode <- FALSE 9 fortriangleinnodedo 10 if !Contains(hitMask, tID) then 11 if Intersect(triangle, ray) then 12 hitData <- (t, u, v, tID, ...) 13 if Full(hitList) then 14 repeatNode <- TRUE 15 Insert(hitList, hitData) 16 for hitData in hitList do 17 if !UserHit(ray, hitData) then 18 return 19 ifrepeatNodethen 20 Add(hitMask, hitData.tID) 21 until !repeatNode 22 node <- Next(node) node ray hitList - - - hitMask - - - repeatNode T F Buffered multi-hit ray traversal Gribble et al., Multi-Hit Ray Traversal 30

  31. Find some (more) hits 1 function Traverse(root, ray) 2 Initialize(hitList) 3 node <- root 4 while Valid(node) do 5 if !Empty(node) then 6 Initialize(hitMask) 7 repeat 8 repeatNode <- FALSE 9 fortriangleinnodedo 10 if !Contains(hitMask, tID) then 11 if Intersect(triangle, ray) then 12 hitData <- (t, u, v, tID, ...) 13 if Full(hitList) then 14 repeatNode <- TRUE 15 Insert(hitList, hitData) 16 for hitData in hitList do 17 if !UserHit(ray, hitData) then 18 return 19 ifrepeatNodethen 20 Add(hitMask, hitData.tID) 21 until !repeatNode 22 node <- Next(node) node ray hitList - - - hitMask - - - repeatNode F Buffered multi-hit ray traversal Gribble et al., Multi-Hit Ray Traversal 31

  32. Find some (more) hits 1 function Traverse(root, ray) 2 Initialize(hitList) 3 node <- root 4 while Valid(node) do 5 if !Empty(node) then 6 Initialize(hitMask) 7 repeat 8 repeatNode <- FALSE 9 fortriangleinnodedo 10 if !Contains(hitMask, tID) then 11 if Intersect(triangle, ray) then 12 hitData <- (t, u, v, tID, ...) 13 if Full(hitList) then 14 repeatNode <- TRUE 15 Insert(hitList, hitData) 16 for hitData in hitList do 17 if !UserHit(ray, hitData) then 18 return 19 ifrepeatNodethen 20 Add(hitMask, hitData.tID) 21 until !repeatNode 22 node <- Next(node) node ray hitList - - - hitMask - - - repeatNode F Buffered multi-hit ray traversal Gribble et al., Multi-Hit Ray Traversal 32

  33. Find some (more) hits 1 function Traverse(root, ray) 2 Initialize(hitList) 3 node <- root 4 while Valid(node) do 5 if !Empty(node) then 6 Initialize(hitMask) 7 repeat 8 repeatNode <- FALSE 9 fortriangleinnodedo 10 if !Contains(hitMask, tID) then 11 if Intersect(triangle, ray) then 12 hitData <- (t, u, v, tID, ...) 13 if Full(hitList) then 14 repeatNode <- TRUE 15 Insert(hitList, hitData) 16 for hitData in hitList do 17 if !UserHit(ray, hitData) then 18 return 19 ifrepeatNodethen 20 Add(hitMask, hitData.tID) 21 until !repeatNode 22 node <- Next(node) node ray hitData hitList - - - hitMask - - - repeatNode F Buffered multi-hit ray traversal Gribble et al., Multi-Hit Ray Traversal 33

  34. Find some (more) hits 1 function Traverse(root, ray) 2 Initialize(hitList) 3 node <- root 4 while Valid(node) do 5 if !Empty(node) then 6 Initialize(hitMask) 7 repeat 8 repeatNode <- FALSE 9 fortriangleinnodedo 10 if !Contains(hitMask, tID) then 11 if Intersect(triangle, ray) then 12 hitData <- (t, u, v, tID, ...) 13 if Full(hitList) then 14 repeatNode <- TRUE 15 Insert(hitList, hitData) 16 for hitData in hitList do 17 if !UserHit(ray, hitData) then 18 return 19 ifrepeatNodethen 20 Add(hitMask, hitData.tID) 21 until !repeatNode 22 node <- Next(node) node ray hitList - - hitMask - - - repeatNode F Buffered multi-hit ray traversal Gribble et al., Multi-Hit Ray Traversal 34

  35. Find some (more) hits 1 function Traverse(root, ray) 2 Initialize(hitList) 3 node <- root 4 while Valid(node) do 5 if !Empty(node) then 6 Initialize(hitMask) 7 repeat 8 repeatNode <- FALSE 9 fortriangleinnodedo 10 if !Contains(hitMask, tID) then 11 if Intersect(triangle, ray) then 12 hitData <- (t, u, v, tID, ...) 13 if Full(hitList) then 14 repeatNode <- TRUE 15 Insert(hitList, hitData) 16 for hitData in hitList do 17 if !UserHit(ray, hitData) then 18 return 19 ifrepeatNodethen 20 Add(hitMask, hitData.tID) 21 until !repeatNode 22 node <- Next(node) node ray hitList - - hitMask - - - repeatNode F Buffered multi-hit ray traversal Gribble et al., Multi-Hit Ray Traversal 35

  36. Find some (more) hits 1 function Traverse(root, ray) 2 Initialize(hitList) 3 node <- root 4 while Valid(node) do 5 if !Empty(node) then 6 Initialize(hitMask) 7 repeat 8 repeatNode <- FALSE 9 fortriangleinnodedo 10 if !Contains(hitMask, tID) then 11 if Intersect(triangle, ray) then 12 hitData <- (t, u, v, tID, ...) 13 if Full(hitList) then 14 repeatNode <- TRUE 15 Insert(hitList, hitData) 16 for hitData in hitList do 17 if !UserHit(ray, hitData) then 18 return 19 ifrepeatNodethen 20 Add(hitMask, hitData.tID) 21 until !repeatNode 22 node <- Next(node) node ray hitList - - hitMask - - - repeatNode F Buffered multi-hit ray traversal Gribble et al., Multi-Hit Ray Traversal 36

  37. Process some (more) hits 1 function Traverse(root, ray) 2 Initialize(hitList) 3 node <- root 4 while Valid(node) do 5 if !Empty(node) then 6 Initialize(hitMask) 7 repeat 8 repeatNode <- FALSE 9 fortriangleinnodedo 10 if !Contains(hitMask, tID) then 11 if Intersect(triangle, ray) then 12 hitData <- (t, u, v, tID, ...) 13 if Full(hitList) then 14 repeatNode <- TRUE 15 Insert(hitList, hitData) 16 for hitData in hitList do 17 if !UserHit(ray, hitData) then 18 return 19 ifrepeatNodethen 20 Add(hitMask, hitData.tID) 21 until !repeatNode 22 node <- Next(node) node ray hitList - - - hitMask - - - repeatNode F Buffered multi-hit ray traversal Gribble et al., Multi-Hit Ray Traversal 37

  38. Traverse (more) nodes 1 function Traverse(root, ray) 2 Initialize(hitList) 3 node <- root 4 while Valid(node) do 5 if !Empty(node) then 6 Initialize(hitMask) 7 repeat 8 repeatNode <- FALSE 9 fortriangleinnodedo 10 if !Contains(hitMask, tID) then 11 if Intersect(triangle, ray) then 12 hitData <- (t, u, v, tID, ...) 13 if Full(hitList) then 14 repeatNode <- TRUE 15 Insert(hitList, hitData) 16 for hitData in hitList do 17 if !UserHit(ray, hitData) then 18 return 19 ifrepeatNodethen 20 Add(hitMask, hitData.tID) 21 until !repeatNode 22 node <- Next(node) node ray hitList - - - hitMask - - - repeatNode F Buffered multi-hit ray traversal Gribble et al., Multi-Hit Ray Traversal 38

  39. Results

  40. Performance – tests • Find-first-intersection • First-hit v. buffered multi-hit • Isolates multi-hit overhead • Find-all-intersections • Find-some-intersections Gribble et al., Multi-Hit Ray Traversal 40

  41. Performance – tests • Find-first-intersection • Find-all-intersections • Naive v. buffered multi-hit • Bounds performance expectations • Find-some-intersections Gribble et al., Multi-Hit Ray Traversal 41

  42. Performance – tests • Find-first-intersection • Find-all-intersections • Find-some-intersections • Naive v. buffered multi-hit • Demonstrates in situ performance Gribble et al., Multi-Hit Ray Traversal 42

  43. Performance – scenes • First-hit, naive & buffered multi-hit traversal implemented in Rayforce • First-hit performance is in range of 200-800 Mrps • Images rendered at 1024x768 pixels on an NVIDIA GeForce GTX 690 sibe 80K tris fair 174K tris conf 282K tris tank 1M tris sanm10M tris Gribble et al., Multi-Hit Ray Traversal 43

  44. Find-first-intersection first-hit -29.08% buffered multi-hit -31.69% -30.44% -31.76% -30.75% Mips Gribble et al., Multi-Hit Ray Traversal 44

  45. Find-all-intersections +9.74% naive multi-hit +8.07% buffered multi-hit +7.42% +12.30% +11.80% Mips Gribble et al., Multi-Hit Ray Traversal 45

  46. Find-some-intersections +8.38% naive multi-hit +14.95% buffered multi-hit +15.40% Scenes of highest complexity +100.52% +80.97% Mips Gribble et al., Multi-Hit Ray Traversal 46

  47. Example applications Ballistic simulation Transparent rendering Gribble et al., Multi-Hit Ray Traversal 47

  48. Other (possible) applications • Alpha textures • Thin fibers • Constructive solid geometry [Wald et al. 2007] Gribble et al., Multi-Hit Ray Traversal 49

  49. Other (possible) applications • Alpha textures • Thin fibers • Constructive solid geometry [Sintorn & Assarson 2008] Gribble et al., Multi-Hit Ray Traversal 50

More Related