Download presentation
Presentation is loading. Please wait.
Published byJosephine Sullivan Modified over 9 years ago
1
Multi-Hit Ray Traversal Christiaan Gribble Alexis Naveros Ethan Kerzner ACM SIGGRAPH Symposium on Interactive 3D Graphics & Games 15 March 2014
2
Raise awareness of JCGT paper – Overview – Algorithm – Performance – Examples – Wrap-up Generate interest Why present at i3D? Gribble et al., Multi-Hit Ray Traversal2
3
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 Traversal3
4
Overview
5
Optical renderingNon-optical rendering Interval computation 5Gribble et al., Multi-Hit Ray Traversal
6
Non-optical renderingInterval computation 6Gribble et al., Multi-Hit Ray Traversal
7
Difficult or impossible – Epsilon hacks – Missed/repeated intersections Performance impacts 7 Interval computation Gribble et al., Multi-Hit Ray Traversal
8
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
9
Overlapping coplanar facets Interval computation 9Gribble et al., Multi-Hit Ray Traversal
10
Algorithm
11
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
12
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
13
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
14
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
15
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 do 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 if repeatNode then 20 Add(hitMask, hitData.tID) 21 until !repeatNode 22 node <- Next(node) Buffered multi-hit ray traversal hitList
16
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 do 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 if repeatNode then 20 Add(hitMask, hitData.tID) 21 until !repeatNode 22 node <- Next(node) Buffered multi-hit ray traversal hitList ray
17
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 do 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 if repeatNode then 20 Add(hitMask, hitData.tID) 21 until !repeatNode 22 node <- Next(node) Buffered multi-hit ray traversal hitList ray - - - - - -
18
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 do 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 if repeatNode then 20 Add(hitMask, hitData.tID) 21 until !repeatNode 22 node <- Next(node) Buffered multi-hit ray traversal hitList ray - - - - - -
19
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 do 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 if repeatNode then 20 Add(hitMask, hitData.tID) 21 until !repeatNode 22 node <- Next(node) Buffered multi-hit ray traversal hitList ray - - - - - - - - - - - - - - - - - - node
20
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 do 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 if repeatNode then 20 Add(hitMask, hitData.tID) 21 until !repeatNode 22 node <- Next(node) Buffered multi-hit ray traversal hitList node ray - - - - - - - - - - - - - - - - - - F F
21
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 do 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 if repeatNode then 20 Add(hitMask, hitData.tID) 21 until !repeatNode 22 node <- Next(node) Buffered multi-hit ray traversal hitList node ray - - - - - - - - - - - - - - - - - - F F hitData
22
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 do 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 if repeatNode then 20 Add(hitMask, hitData.tID) 21 until !repeatNode 22 node <- Next(node) Buffered multi-hit ray traversal hitList node ray - - - - - - - - - - - - - - - - F F
23
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 do 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 if repeatNode then 20 Add(hitMask, hitData.tID) 21 until !repeatNode 22 node <- Next(node) Buffered multi-hit ray traversal hitList node ray - - - - - - - - - - - - - - - - - - F F hitData
24
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 do 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 if repeatNode then 20 Add(hitMask, hitData.tID) 21 until !repeatNode 22 node <- Next(node) Buffered multi-hit ray traversal hitList node ray - - - - - - - - - - - - - - - - - - F F hitData
25
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 do 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 if repeatNode then 20 Add(hitMask, hitData.tID) 21 until !repeatNode 22 node <- Next(node) Buffered multi-hit ray traversal hitList node ray - - - - - - - - - - - - F F
26
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 do 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 if repeatNode then 20 Add(hitMask, hitData.tID) 21 until !repeatNode 22 node <- Next(node) Buffered multi-hit ray traversal hitList node ray - - - - - - - - - - - - F F hitData T T
27
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 do 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 if repeatNode then 20 Add(hitMask, hitData.tID) 21 until !repeatNode 22 node <- Next(node) Buffered multi-hit ray traversal hitList node ray - - - - - - - - - - - - T T - -
28
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 do 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 if repeatNode then 20 Add(hitMask, hitData.tID) 21 until !repeatNode 22 node <- Next(node) Buffered multi-hit ray traversal hitList node ray - - - - - - - - - - T T - - - -
29
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 do 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 if repeatNode then 20 Add(hitMask, hitData.tID) 21 until !repeatNode 22 node <- Next(node) Buffered multi-hit ray traversal hitList node ray - - - - - - - - T T - - - - - -
30
Find some (more) hits 30Gribble et al., Multi-Hit Ray Traversal hitMask repeatNode T 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 do 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 if repeatNode then 20 Add(hitMask, hitData.tID) 21 until !repeatNode 22 node <- Next(node) Buffered multi-hit ray traversal hitList node ray F F - - - - - - - - - - - -
31
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 do 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 if repeatNode then 20 Add(hitMask, hitData.tID) 21 until !repeatNode 22 node <- Next(node) Buffered multi-hit ray traversal hitList node ray F F - - - - - - - - - - - -
32
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 do 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 if repeatNode then 20 Add(hitMask, hitData.tID) 21 until !repeatNode 22 node <- Next(node) Buffered multi-hit ray traversal hitList node ray F F - - - - - - - - - - - -
33
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 do 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 if repeatNode then 20 Add(hitMask, hitData.tID) 21 until !repeatNode 22 node <- Next(node) Buffered multi-hit ray traversal hitList node ray F F hitData - - - - - - - - - - - -
34
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 do 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 if repeatNode then 20 Add(hitMask, hitData.tID) 21 until !repeatNode 22 node <- Next(node) Buffered multi-hit ray traversal hitList node ray - - - - F F - - - - - -
35
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 do 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 if repeatNode then 20 Add(hitMask, hitData.tID) 21 until !repeatNode 22 node <- Next(node) Buffered multi-hit ray traversal hitList node ray F F - - - - - - - - - -
36
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 do 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 if repeatNode then 20 Add(hitMask, hitData.tID) 21 until !repeatNode 22 node <- Next(node) Buffered multi-hit ray traversal hitList node ray - - - - F F - - - - - -
37
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 do 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 if repeatNode then 20 Add(hitMask, hitData.tID) 21 until !repeatNode 22 node <- Next(node) Buffered multi-hit ray traversal hitList node ray F F - - - - - - - - - - - -
38
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 do 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 if repeatNode then 20 Add(hitMask, hitData.tID) 21 until !repeatNode 22 node <- Next(node) Buffered multi-hit ray traversal hitList node ray F F - - - - - - - - - - - -
39
Results
40
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
41
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
42
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
43
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 sanm 10M tris tank 1M tris conf 282K tris fair 174K tris sibe 80K tris
44
Find-first-intersection 44Gribble et al., Multi-Hit Ray Traversalfirst-hit buffered multi-hit Mips -31.69% -30.75% -29.08% -31.76% -30.44%
45
Find-all-intersections 45Gribble et al., Multi-Hit Ray Traversal naive multi-hit buffered multi-hit Mips +8.07% +12.30% +11.80% +9.74% +7.42%
46
Find-some-intersections 46Gribble et al., Multi-Hit Ray Traversal naive multi-hit buffered multi-hit Mips +100.52% +80.97% +14.95% +8.38% +15.40% Scenes of highest complexity
47
Transparent renderingBallistic simulation Example applications 47Gribble et al., Multi-Hit Ray Traversal
49
Other (possible) applications 49 Alpha textures Thin fibers Constructive solid geometry Gribble et al., Multi-Hit Ray Traversal [Wald et al. 2007]
50
Other (possible) applications 50 Alpha textures Thin fibers Constructive solid geometry Gribble et al., Multi-Hit Ray Traversal [Sintorn & Assarson 2008]
51
Other (possible) applications 51 Alpha textures Thin fibers Constructive solid geometry Gribble et al., Multi-Hit Ray Traversal Image source: Wikipedia
52
Wrap-up
53
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 Traversal53
54
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 Traversal54
55
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 Traversal55
56
SURVICE Engineering Jeff Amstutz Mark Butkiewicz Scott Shaw Intel Labs Carsten Benthin Ingo Wald Sven Woop US Army Research Laboratory Lee Butler JCGT Morgan McGuire Matt Pharr Anonymous 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
57
Contact information 57 Address Applied Technology Operation SURVICE Engineering 6014 Penn Avenue Pittsburgh, PA 15206 E-mail christiaan.gribble@survice.com Web http://www.rtvtk.org/~cgribble/ Gribble et al., Multi-Hit Ray Traversal
Similar presentations
© 2024 SlidePlayer.com. Inc.
All rights reserved.