multi-hit ray traversal

Post on 20-Feb-2016

31 Views

Category:

Documents

1 Downloads

Preview:

Click to see full reader

DESCRIPTION

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. - PowerPoint PPT Presentation

TRANSCRIPT

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

E-mailchristiaan.gribble@survice.com

Webhttp://www.rtvtk.org/~cgribble/

Gribble et al., Multi-Hit Ray Traversal

top related