Presentation is loading. Please wait.

Presentation is loading. Please wait.

Multi-Hit Ray Traversal Christiaan Gribble Alexis Naveros Ethan Kerzner ACM SIGGRAPH Symposium on Interactive 3D Graphics & Games 15 March 2014.

Similar presentations


Presentation on theme: "Multi-Hit Ray Traversal Christiaan Gribble Alexis Naveros Ethan Kerzner ACM SIGGRAPH Symposium on Interactive 3D Graphics & Games 15 March 2014."— Presentation transcript:

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

48

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


Download ppt "Multi-Hit Ray Traversal Christiaan Gribble Alexis Naveros Ethan Kerzner ACM SIGGRAPH Symposium on Interactive 3D Graphics & Games 15 March 2014."

Similar presentations


Ads by Google