Multi-Hit Ray Traversal Christiaan Gribble Alexis Naveros Ethan Kerzner ACM SIGGRAPH Symposium on...
-
Upload
josephine-sullivan -
Category
Documents
-
view
215 -
download
0
Transcript of Multi-Hit Ray Traversal Christiaan Gribble Alexis Naveros Ethan Kerzner ACM SIGGRAPH Symposium on...
Multi-Hit Ray Traversal
Christiaan GribbleAlexis NaverosEthan Kerzner
ACM SIGGRAPH Symposium on Interactive 3D Graphics & Games15 March 2014
• Raise awareness of JCGT paper– Overview– Algorithm– Performance– Examples– Wrap-up
• Generate interest
Why present at i3D?
Gribble et al., Multi-Hit Ray Traversal 2
• Raise awareness of JCGT paper• Generate interest
– Applying algorithm– Improving algorithm– Exploring non-optical rendering
Looking to collaborate on interesting problems in rendering
Why present at i3D?
Gribble et al., Multi-Hit Ray Traversal 3
Overview
Optical rendering Non-optical rendering
Interval computation
5Gribble et al., Multi-Hit Ray Traversal
Non-optical rendering Interval computation
Interval computation
6Gribble et al., Multi-Hit Ray Traversal
• Difficult or impossible– Epsilon hacks– Missed/repeated intersections
• Performance impacts
7
Interval computation
Gribble et al., Multi-Hit Ray Traversal
• Difficult or impossible• Performance impacts
– Traversal restart– Operational overhead
Are overlapping coplanar facets actually a problem?
8
Interval computation
Gribble et al., Multi-Hit Ray Traversal
Overlapping coplanar facets
Interval computation
9Gribble et al., Multi-Hit Ray Traversal
Algorithm
• 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
11
Multi-hit ray traversal
Gribble et al., 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
12
Multi-hit ray traversal
Gribble et al., 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
13
Multi-hit ray traversal
Gribble et al., Multi-Hit Ray Traversal
• Which primitives are intersected?• Core operation in ray engine• Critical to interval generation• Applications
– Ballistic simulation– Transparent rendering– …
14
Multi-hit ray traversal
Gribble et al., Multi-Hit Ray Traversal
Buffered multi-hit with early exit
15Gribble et al., Multi-Hit Ray Traversal
hitMask
repeatNode
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 for triangle in node do10 if !Contains(hitMask, tID) then11 if Intersect(triangle, ray) then12 hitData <- (t, u, v, tID, ...)13 if Full(hitList) then14 repeatNode <- TRUE15 Insert(hitList, hitData)16 for hitData in hitList do17 if !UserHit(ray, hitData) then18 return19 if repeatNode then20 Add(hitMask, hitData.tID)21 until !repeatNode22 node <- Next(node)
Buffered multi-hit ray traversal
hitList
Initialization
16Gribble et al., Multi-Hit Ray Traversal
hitMask
repeatNode
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 for triangle in node do10 if !Contains(hitMask, tID) then11 if Intersect(triangle, ray) then12 hitData <- (t, u, v, tID, ...)13 if Full(hitList) then14 repeatNode <- TRUE15 Insert(hitList, hitData)16 for hitData in hitList do17 if !UserHit(ray, hitData) then18 return19 if repeatNode then20 Add(hitMask, hitData.tID)21 until !repeatNode22 node <- Next(node)
Buffered multi-hit ray traversal
hitList
ray
Initialization
17Gribble et al., Multi-Hit Ray Traversal
hitMask
repeatNode
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 for triangle in node do10 if !Contains(hitMask, tID) then11 if Intersect(triangle, ray) then12 hitData <- (t, u, v, tID, ...)13 if Full(hitList) then14 repeatNode <- TRUE15 Insert(hitList, hitData)16 for hitData in hitList do17 if !UserHit(ray, hitData) then18 return19 if repeatNode then20 Add(hitMask, hitData.tID)21 until !repeatNode22 node <- Next(node)
Buffered multi-hit ray traversal
hitList
ray
- - -
Traverse nodes
18Gribble et al., Multi-Hit Ray Traversal
hitMask
repeatNode
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 for triangle in node do10 if !Contains(hitMask, tID) then11 if Intersect(triangle, ray) then12 hitData <- (t, u, v, tID, ...)13 if Full(hitList) then14 repeatNode <- TRUE15 Insert(hitList, hitData)16 for hitData in hitList do17 if !UserHit(ray, hitData) then18 return19 if repeatNode then20 Add(hitMask, hitData.tID)21 until !repeatNode22 node <- Next(node)
Buffered multi-hit ray traversal
hitList
ray
- - -
Traverse nodes
19Gribble et al., Multi-Hit Ray Traversal
hitMask
repeatNode
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 for triangle in node do10 if !Contains(hitMask, tID) then11 if Intersect(triangle, ray) then12 hitData <- (t, u, v, tID, ...)13 if Full(hitList) then14 repeatNode <- TRUE15 Insert(hitList, hitData)16 for hitData in hitList do17 if !UserHit(ray, hitData) then18 return19 if repeatNode then20 Add(hitMask, hitData.tID)21 until !repeatNode22 node <- Next(node)
Buffered multi-hit ray traversal
hitList
ray
- - -
- - - - - -
node
Find some hits
20Gribble et al., Multi-Hit Ray Traversal
hitMask
repeatNode
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 for triangle in node do10 if !Contains(hitMask, tID) then11 if Intersect(triangle, ray) then12 hitData <- (t, u, v, tID, ...)13 if Full(hitList) then14 repeatNode <- TRUE15 Insert(hitList, hitData)16 for hitData in hitList do17 if !UserHit(ray, hitData) then18 return19 if repeatNode then20 Add(hitMask, hitData.tID)21 until !repeatNode22 node <- Next(node)
Buffered multi-hit ray traversal
hitList
node
ray
- - -
- - - - - -
F
Find some hits
21Gribble et al., Multi-Hit Ray Traversal
hitMask
repeatNode
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 for triangle in node do10 if !Contains(hitMask, tID) then11 if Intersect(triangle, ray) then12 hitData <- (t, u, v, tID, ...)13 if Full(hitList) then14 repeatNode <- TRUE15 Insert(hitList, hitData)16 for hitData in hitList do17 if !UserHit(ray, hitData) then18 return19 if repeatNode then20 Add(hitMask, hitData.tID)21 until !repeatNode22 node <- Next(node)
Buffered multi-hit ray traversal
hitList
node
ray
- - -
- - - - - -
F
hitData
Find some hits
22Gribble et al., Multi-Hit Ray Traversal
hitMask
repeatNode
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 for triangle in node do10 if !Contains(hitMask, tID) then11 if Intersect(triangle, ray) then12 hitData <- (t, u, v, tID, ...)13 if Full(hitList) then14 repeatNode <- TRUE15 Insert(hitList, hitData)16 for hitData in hitList do17 if !UserHit(ray, hitData) then18 return19 if repeatNode then20 Add(hitMask, hitData.tID)21 until !repeatNode22 node <- Next(node)
Buffered multi-hit ray traversal
hitList
node
ray
- -
- - - - - -
F
Find some hits
23Gribble et al., Multi-Hit Ray Traversal
hitMask
repeatNode
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 for triangle in node do10 if !Contains(hitMask, tID) then11 if Intersect(triangle, ray) then12 hitData <- (t, u, v, tID, ...)13 if Full(hitList) then14 repeatNode <- TRUE15 Insert(hitList, hitData)16 for hitData in hitList do17 if !UserHit(ray, hitData) then18 return19 if repeatNode then20 Add(hitMask, hitData.tID)21 until !repeatNode22 node <- Next(node)
Buffered multi-hit ray traversal
hitList
node
ray
- - -
- - - - - -
F
hitData
Find some hits
24Gribble et al., Multi-Hit Ray Traversal
hitMask
repeatNode
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 for triangle in node do10 if !Contains(hitMask, tID) then11 if Intersect(triangle, ray) then12 hitData <- (t, u, v, tID, ...)13 if Full(hitList) then14 repeatNode <- TRUE15 Insert(hitList, hitData)16 for hitData in hitList do17 if !UserHit(ray, hitData) then18 return19 if repeatNode then20 Add(hitMask, hitData.tID)21 until !repeatNode22 node <- Next(node)
Buffered multi-hit ray traversal
hitList
node
ray
- - -
- - - - - -
F
hitData
Find some hits
25Gribble et al., Multi-Hit Ray Traversal
hitMask
repeatNode
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 for triangle in node do10 if !Contains(hitMask, tID) then11 if Intersect(triangle, ray) then12 hitData <- (t, u, v, tID, ...)13 if Full(hitList) then14 repeatNode <- TRUE15 Insert(hitList, hitData)16 for hitData in hitList do17 if !UserHit(ray, hitData) then18 return19 if repeatNode then20 Add(hitMask, hitData.tID)21 until !repeatNode22 node <- Next(node)
Buffered multi-hit ray traversal
hitList
node
ray
- - - - - -
F
Find some hits
26Gribble et al., Multi-Hit Ray Traversal
hitMask
repeatNode
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 for triangle in node do10 if !Contains(hitMask, tID) then11 if Intersect(triangle, ray) then12 hitData <- (t, u, v, tID, ...)13 if Full(hitList) then14 repeatNode <- TRUE15 Insert(hitList, hitData)16 for hitData in hitList do17 if !UserHit(ray, hitData) then18 return19 if repeatNode then20 Add(hitMask, hitData.tID)21 until !repeatNode22 node <- Next(node)
Buffered multi-hit ray traversal
hitList
node
ray
- - - - - -
F
hitData
T
Process some hits
27Gribble et al., Multi-Hit Ray Traversal
hitMask
repeatNode
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 for triangle in node do10 if !Contains(hitMask, tID) then11 if Intersect(triangle, ray) then12 hitData <- (t, u, v, tID, ...)13 if Full(hitList) then14 repeatNode <- TRUE15 Insert(hitList, hitData)16 for hitData in hitList do17 if !UserHit(ray, hitData) then18 return19 if repeatNode then20 Add(hitMask, hitData.tID)21 until !repeatNode22 node <- Next(node)
Buffered multi-hit ray traversal
hitList
node
ray
- - - - - -
T
-
Process some hits
28Gribble et al., Multi-Hit Ray Traversal
hitMask
repeatNode
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 for triangle in node do10 if !Contains(hitMask, tID) then11 if Intersect(triangle, ray) then12 hitData <- (t, u, v, tID, ...)13 if Full(hitList) then14 repeatNode <- TRUE15 Insert(hitList, hitData)16 for hitData in hitList do17 if !UserHit(ray, hitData) then18 return19 if repeatNode then20 Add(hitMask, hitData.tID)21 until !repeatNode22 node <- Next(node)
Buffered multi-hit ray traversal
hitList
node
ray
- - - - -
T
- -
Process some hits
29Gribble et al., Multi-Hit Ray Traversal
hitMask
repeatNode
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 for triangle in node do10 if !Contains(hitMask, tID) then11 if Intersect(triangle, ray) then12 hitData <- (t, u, v, tID, ...)13 if Full(hitList) then14 repeatNode <- TRUE15 Insert(hitList, hitData)16 for hitData in hitList do17 if !UserHit(ray, hitData) then18 return19 if repeatNode then20 Add(hitMask, hitData.tID)21 until !repeatNode22 node <- Next(node)
Buffered multi-hit ray traversal
hitList
node
ray
- - - -
T
- - -
Find some (more) hits
30Gribble et al., Multi-Hit Ray Traversal
hitMask
repeatNode T
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 for triangle in node do10 if !Contains(hitMask, tID) then11 if Intersect(triangle, ray) then12 hitData <- (t, u, v, tID, ...)13 if Full(hitList) then14 repeatNode <- TRUE15 Insert(hitList, hitData)16 for hitData in hitList do17 if !UserHit(ray, hitData) then18 return19 if repeatNode then20 Add(hitMask, hitData.tID)21 until !repeatNode22 node <- Next(node)
Buffered multi-hit ray traversal
hitList
node
ray
F
- - -
- - -
Find some (more) hits
31Gribble et al., Multi-Hit Ray Traversal
hitMask
repeatNode
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 for triangle in node do10 if !Contains(hitMask, tID) then11 if Intersect(triangle, ray) then12 hitData <- (t, u, v, tID, ...)13 if Full(hitList) then14 repeatNode <- TRUE15 Insert(hitList, hitData)16 for hitData in hitList do17 if !UserHit(ray, hitData) then18 return19 if repeatNode then20 Add(hitMask, hitData.tID)21 until !repeatNode22 node <- Next(node)
Buffered multi-hit ray traversal
hitList
node
ray
F
- - -
- - -
Find some (more) hits
32Gribble et al., Multi-Hit Ray Traversal
hitMask
repeatNode
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 for triangle in node do10 if !Contains(hitMask, tID) then11 if Intersect(triangle, ray) then12 hitData <- (t, u, v, tID, ...)13 if Full(hitList) then14 repeatNode <- TRUE15 Insert(hitList, hitData)16 for hitData in hitList do17 if !UserHit(ray, hitData) then18 return19 if repeatNode then20 Add(hitMask, hitData.tID)21 until !repeatNode22 node <- Next(node)
Buffered multi-hit ray traversal
hitList
node
ray
F
- - -
- - -
Find some (more) hits
33Gribble et al., Multi-Hit Ray Traversal
hitMask
repeatNode
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 for triangle in node do10 if !Contains(hitMask, tID) then11 if Intersect(triangle, ray) then12 hitData <- (t, u, v, tID, ...)13 if Full(hitList) then14 repeatNode <- TRUE15 Insert(hitList, hitData)16 for hitData in hitList do17 if !UserHit(ray, hitData) then18 return19 if repeatNode then20 Add(hitMask, hitData.tID)21 until !repeatNode22 node <- Next(node)
Buffered multi-hit ray traversal
hitList
node
ray
F
hitData
- - -
- - -
Find some (more) hits
34Gribble et al., Multi-Hit Ray Traversal
hitMask
repeatNode
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 for triangle in node do10 if !Contains(hitMask, tID) then11 if Intersect(triangle, ray) then12 hitData <- (t, u, v, tID, ...)13 if Full(hitList) then14 repeatNode <- TRUE15 Insert(hitList, hitData)16 for hitData in hitList do17 if !UserHit(ray, hitData) then18 return19 if repeatNode then20 Add(hitMask, hitData.tID)21 until !repeatNode22 node <- Next(node)
Buffered multi-hit ray traversal
hitList
node
ray
- -
F
- - -
Find some (more) hits
35Gribble et al., Multi-Hit Ray Traversal
hitMask
repeatNode
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 for triangle in node do10 if !Contains(hitMask, tID) then11 if Intersect(triangle, ray) then12 hitData <- (t, u, v, tID, ...)13 if Full(hitList) then14 repeatNode <- TRUE15 Insert(hitList, hitData)16 for hitData in hitList do17 if !UserHit(ray, hitData) then18 return19 if repeatNode then20 Add(hitMask, hitData.tID)21 until !repeatNode22 node <- Next(node)
Buffered multi-hit ray traversal
hitList
node
ray
F
- -
- - -
Find some (more) hits
36Gribble et al., Multi-Hit Ray Traversal
hitMask
repeatNode
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 for triangle in node do10 if !Contains(hitMask, tID) then11 if Intersect(triangle, ray) then12 hitData <- (t, u, v, tID, ...)13 if Full(hitList) then14 repeatNode <- TRUE15 Insert(hitList, hitData)16 for hitData in hitList do17 if !UserHit(ray, hitData) then18 return19 if repeatNode then20 Add(hitMask, hitData.tID)21 until !repeatNode22 node <- Next(node)
Buffered multi-hit ray traversal
hitList
node
ray
- -
F
- - -
Process some (more) hits
37Gribble et al., Multi-Hit Ray Traversal
hitMask
repeatNode
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 for triangle in node do10 if !Contains(hitMask, tID) then11 if Intersect(triangle, ray) then12 hitData <- (t, u, v, tID, ...)13 if Full(hitList) then14 repeatNode <- TRUE15 Insert(hitList, hitData)16 for hitData in hitList do17 if !UserHit(ray, hitData) then18 return19 if repeatNode then20 Add(hitMask, hitData.tID)21 until !repeatNode22 node <- Next(node)
Buffered multi-hit ray traversal
hitList
node
ray
F
- -
- --
-
Traverse (more) nodes
38Gribble et al., Multi-Hit Ray Traversal
hitMask
repeatNode
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 for triangle in node do10 if !Contains(hitMask, tID) then11 if Intersect(triangle, ray) then12 hitData <- (t, u, v, tID, ...)13 if Full(hitList) then14 repeatNode <- TRUE15 Insert(hitList, hitData)16 for hitData in hitList do17 if !UserHit(ray, hitData) then18 return19 if repeatNode then20 Add(hitMask, hitData.tID)21 until !repeatNode22 node <- Next(node)
Buffered multi-hit ray traversal
hitList
node
ray
F
- -
- --
-
Results
• Find-first-intersection– First-hit v. buffered multi-hit– Isolates multi-hit overhead
• Find-all-intersections• Find-some-intersections
40
Performance – tests
Gribble et al., Multi-Hit Ray Traversal
• Find-first-intersection• Find-all-intersections
– Naive v. buffered multi-hit– Bounds performance expectations
• Find-some-intersections
41
Performance – tests
Gribble et al., Multi-Hit Ray Traversal
• Find-first-intersection• Find-all-intersections• Find-some-intersections
– Naive v. buffered multi-hit– Demonstrates in situ performance
42
Performance – tests
Gribble et al., Multi-Hit Ray Traversal
Performance – scenes
43Gribble et al., Multi-Hit Ray Traversal
• 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
sanm10M tris
tank1M tris
conf282K tris
fair174K tris
sibe80K tris
Find-first-intersection
44Gribble et al., Multi-Hit Ray Traversal
sibe fair conf tank sanm0
100200300400500600700800
first-hit
buffered multi-hit
Mips
-31.69%
-30.75%
-29.08%
-31.76% -30.44%
Find-all-intersections
45Gribble et al., Multi-Hit Ray Traversal
sibe fair conf tank sanm0
100
200
300
400
500
600naive multi-hit
buffered multi-hit
Mips
+8.07%
+12.30%+11.80%
+9.74%
+7.42%
Find-some-intersections
46Gribble et al., Multi-Hit Ray Traversal
sibe fair conf tank sanm0
100
200
300
400
500
600naive multi-hit
buffered multi-hit
Mips
+100.52% +80.97%
+14.95%+8.38%
+15.40% Scenes of highest complexity
Transparent rendering Ballistic simulation
Example applications
47Gribble et al., Multi-Hit Ray Traversal
Other (possible) applications
49
• Alpha textures• Thin fibers• Constructive solid geometry
Gribble et al., Multi-Hit Ray Traversal
[Wald et al. 2007]
Other (possible) applications
50
• Alpha textures• Thin fibers• Constructive solid geometry
Gribble et al., Multi-Hit Ray Traversal
[Sintorn & Assarson 2008]
Other (possible) applications
51
• Alpha textures• Thin fibers• Constructive solid geometry
Gribble et al., Multi-Hit Ray Traversal
Image source: Wikipedia
Wrap-up
• Multi-hit ray traversal– Generalizes first-hit & all-hit traversal– Handles overlapping, coplanar facets– Useful in CG & simulation
• Buffered multi-hit algorithm• Future work
Conclusions
Gribble et al., Multi-Hit Ray Traversal 53
• Multi-hit ray traversal• Buffered multi-hit algorithm
– Imposes only modest overhead– Outperforms naive algorithm– Makes all-hit unnecessary
• Future work
Conclusions
Gribble et al., Multi-Hit Ray Traversal 54
• Multi-hit ray traversal• Buffered multi-hit algorithm• Future work
– Add multi-hit + object-partitioning– Explore multi-hit + direction change– Apply to new problems
Conclusions
Gribble et al., Multi-Hit Ray Traversal 55
SURVICE EngineeringJeff AmstutzMark ButkiewiczScott Shaw
Intel LabsCarsten BenthinIngo WaldSven Woop
US Army Research LaboratoryLee Butler
JCGTMorgan McGuireMatt PharrAnonymous reviewers
Ethan Kerzner is funded in part by the US Army Research Laboratory Cooperative Agreement: Applying GPU Computing & Computer
Graphics to Engineering Analysis & Military Applications
Acknowledgements
56Gribble et al., Multi-Hit Ray Traversal
Contact information
57
AddressApplied Technology OperationSURVICE Engineering6014 Penn AvenuePittsburgh, PA 15206
Webhttp://www.rtvtk.org/~cgribble/
Gribble et al., Multi-Hit Ray Traversal