Delaunay Triangulation on the GPU

51
Delaunay Triangulation on the GPU Dan Maljovec

description

Delaunay Triangulation on the GPU. Dan Maljovec. CPU Delaunay Triangulation. Randomized Incremental Algorithm Construct Bounding triangle Choose point to insert randomly Locate triangle containing point - PowerPoint PPT Presentation

Transcript of Delaunay Triangulation on the GPU

Page 1: Delaunay Triangulation on the GPU

Delaunay Triangulation on the GPU

Dan Maljovec

Page 2: Delaunay Triangulation on the GPU

CPU Delaunay Triangulation

Randomized Incremental Algorithm1. Construct Bounding triangle2. Choose point to insert randomly3. Locate triangle containing point4. Construct new children triangles by connecting

new point to each point of containing triangle5. Test edges and flip if necessary• If flipped, test edges and recursively flip if necessary

6. Repeat 2-5 until all points have been inserted

Page 3: Delaunay Triangulation on the GPU

GPU Implementation

Use the dual: Voronoi Diagram• Construct a discrete Voronoi Diagram (Jump

Flooding Algorithm)

• Obtain a triangulation from the Voronoi

• Fix the estimations we made and perform edge flipping

Page 4: Delaunay Triangulation on the GPU

Jump Flooding Algorithm

• Write the sites into a square texture• Map each pixel in the texture (a point

in discrete space) to a thread• Initialize the step size to be half of the

width/height of the texture• Each pixel will look in 8 directions of

size step to find closest site to it• Divide the step size by 2 and Repeat

Page 5: Delaunay Triangulation on the GPU

1+JFA

• Write the sites into a square texture

• Map each pixel in the texture (a point in discrete space) to a thread

• Each pixel will look in eight directions of size step to find closest site to it

• Divide the step size by 2 and Repeat

First do one round of step = 1, then step = textureDimension / 2

Page 6: Delaunay Triangulation on the GPU

1+JFA (write sites)

Page 7: Delaunay Triangulation on the GPU

1+JFA (step size = 1)

Page 8: Delaunay Triangulation on the GPU

1+JFA (step size = 1)

Page 9: Delaunay Triangulation on the GPU

1+JFA (step size = 8)

Page 10: Delaunay Triangulation on the GPU

1+JFA (step size = 8)

Page 11: Delaunay Triangulation on the GPU

1+JFA (step size = 4)

Page 12: Delaunay Triangulation on the GPU

1+JFA (step size = 4)

Page 13: Delaunay Triangulation on the GPU

1+JFA (step size = 2)

Page 14: Delaunay Triangulation on the GPU

1+JFA (step size = 2)

Page 15: Delaunay Triangulation on the GPU

1+JFA (step size = 1)

Page 16: Delaunay Triangulation on the GPU

Errors from JFA• JFA can introduce errors in the Voronoi

diagram, which would lead to crossing triangles. These errors are manifested in “island” pixels as shown below:

Page 17: Delaunay Triangulation on the GPU

Detect and Remove Islands• Map pixels to threads• Knowing where a site is with respect to a pixel,

we can look in that direction and see if this pixel is stranded

• Iterate this process until no more islands are found

Page 18: Delaunay Triangulation on the GPU

Detect and Remove Islands• Map pixels to threads• Knowing where a site is with respect to a pixel,

we can look in that direction and see if this pixel is stranded

• Iterate this process until no more islands are found

This pixel’s site is up and to the right, so we will check neighbors in those directions to see if this is an island.

Page 19: Delaunay Triangulation on the GPU

Detect and Remove Islands• Map pixels to threads• Knowing where a site is with respect to a pixel,

we can look in that direction and see if this pixel is stranded

• Iterate this process until no more islands are found

Update it to the closest site of the colors we find at the neighboring pixels

Page 20: Delaunay Triangulation on the GPU

Find Voronoi VerticesVertices in the discrete Voronoi diagram, lie at junctions of

3 or 4 different colored pixels.

Map pixels to threads, and look right, down, and diagonally down and to the right to test if there exists a vertex at this pixel.

3-Color Cases(generates 1 Δ):

4-Color Case(generates 2 Δ):

Pixels will be marked as Voronoi vertices

Page 21: Delaunay Triangulation on the GPU

Chain Up Voronoi Vertices

• Parallel Prefix operation:– Map rows to threads, and for each pixel store the

closest vertex in the row, to its right.

– Allows us to apriori know how many triangles we are about to create, and allows us to be output sensitive in the next step.

Page 22: Delaunay Triangulation on the GPU

Chain up Vertices-1

-1

-1

-1

-1

-1

-1

-1

10

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

3

-1

-1

-1

10

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

10

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

10

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

5

-1

-1

-1

10

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

10

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

10

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

10

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

10

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

0000020001000000

0000020002000000

#Vertices Row

Δ to GenerateRow

-1

-1

-1

-1 -1

10

-1

-1

3 3 5

Page 23: Delaunay Triangulation on the GPU

Triangle Generation

• Map thread to each row

• Create a triangle at each 3-Color vertex by connecting the 3 sites that contribute to the vertex

• Create 2 triangles at each 4-Color vertex by connecting sites of pixels 1, 2, & 3, then sites of pixels 2,4, & 3

1

3

2

4

Page 24: Delaunay Triangulation on the GPU

Generate Triangles

Page 25: Delaunay Triangulation on the GPU

Generate Triangles

Page 26: Delaunay Triangulation on the GPU

Generate Triangles

Page 27: Delaunay Triangulation on the GPU

Generate Triangles

Page 28: Delaunay Triangulation on the GPU

Generate Triangles

Page 29: Delaunay Triangulation on the GPU

Generate Triangles

Page 30: Delaunay Triangulation on the GPU

Generate Triangles

Page 31: Delaunay Triangulation on the GPU

Fix Convex HullWhat’s wrong here?

Vertex will not be captured in texture, but it does exist.

Page 32: Delaunay Triangulation on the GPU

Fix Convex HullWhat’s wrong here?

Vertex will not be captured in texture, but it does exist.

Is there a specific case where this occurs?Moving clockwise around cells who touch the border, sites that form a left turn will have a vertex outside the texture

Page 33: Delaunay Triangulation on the GPU

Shift SitesWe shifted all the sites into

discrete space, now we have to put them back without causing any intersecting triangles

Page 34: Delaunay Triangulation on the GPU

Shift Sites

Page 35: Delaunay Triangulation on the GPU

Shift Sites1st case, we relocate to the

inside of a triangle that lies within the fan without crossing any edges

Page 36: Delaunay Triangulation on the GPU

Shift Sites2nd case, we relocate to the

inside of a triangle that lies within the fan but we cause edges to cross

Page 37: Delaunay Triangulation on the GPU

Shift Sites3rd case, we relocate to the

inside of a triangle outside of the triangle fan connected to the site

Page 38: Delaunay Triangulation on the GPU

Shift Sites4th case, we relocate

outside of the mesh

Page 39: Delaunay Triangulation on the GPU

Shift Sites

Page 40: Delaunay Triangulation on the GPU

Insert Missing Sites• Similar to what we did with the incremental

approach, point locate a site in a triangle and subdivide it, but since we know who took the missing site’s position, we can start with the triangle fan of that point.

Page 41: Delaunay Triangulation on the GPU

Insert Missing Sites• 1st case, point lies in the interior of a triangle

Page 42: Delaunay Triangulation on the GPU

Insert Missing Sites• 2nd case, point lies on an edge

Page 43: Delaunay Triangulation on the GPU

Insert Missing Sites• 3rd case, point lies outside of the mesh

Page 44: Delaunay Triangulation on the GPU

Insert Missing Sites

Page 45: Delaunay Triangulation on the GPU

Flip Edges

• We have seen this beforeEmpty Circumcircle test

Page 46: Delaunay Triangulation on the GPU

Flip Edges

• We have seen this beforeEmpty Circumcircle test

Page 47: Delaunay Triangulation on the GPU

Flip Edges

• We have seen this beforeEmpty Circumcircle test

Page 48: Delaunay Triangulation on the GPU

Flip Edges

• We have seen this beforeEmpty Circumcircle test

Page 49: Delaunay Triangulation on the GPU

Flip Edges

• We have seen this beforeEmpty Circumcircle test

Page 50: Delaunay Triangulation on the GPU

Summary

• 1+JFA

• Island removal• Find vertices

• Generate Δs• Fix convex hull• Shift sites• Insert missing sites

• Flip edges

Page 51: Delaunay Triangulation on the GPU

ReferencesHoff, K. E., Keyser, J., Lin, M., Manocha, D., Culver, T. 1999. Fast Computation of Generalized

Voronoi Diagrams Using Graphics Hardware. In Proceedings of ACM SIGGRAPH 1999, ACM Press / ACM SIGGRAPH, New York. Computer Graphics Proceedings, Annual Conference Series, ACM, 277-286.

Denny, M. O. 2003. Algorithmic geometry via graphics hardware. PhD thesis, Universität des Saarlandes.

Rong, G., Tan, T.-S. 2006. Jump flooding in GPU with applications to Voronoi diagram and distance transform. In Proceedings of the Symposium on Interactive 3D Graphics and Games, ACM Press, 109–116.

Rong, G., Tan, T.-S. 2007. Variants of jump flooding algorithm for computing discrete Voronoi diagrams. In Proceedings of the 4th International Symposium on Voronoi Diagrams in Science and Engineering (ISVD’07), 176–181.

Rong, G., Tan, T.-S., and Cao, T.-T. and Stephanus. 2008. Computing Two dimensional Delaunay Triangulation Using Graphics Hardware. In Proceedings of the Symposium on Interactive 3D Graphics and Games, ACM Press, 89–97.