Algorithm Steps

  1. Generate point cloud from mesh
  2. Use Qhull to generate the Delaunay triangulation of the points
  3. Voronoi diagram derived from Delaunay triangulation (dual graph)
  4. Each vertex of the surface now has a voronoi cell associated with it.
  5. For each vertex, remove any voronoi vertices which are outside the bounding box of the mesh or lay on the positive side of the plane defined by the vertex and its normal.
  6. Average the remaining voronoi vertices to obtain a single vertex approximating the point on the medial axis.
  7. Connectivity between points on the approximate medial axis remain to the same as the surface vertices they are associated with

Accuracy

The current medial axis approximation is a decent estimation, however requires additional fine-tuning to achieve a more consistent and accurate medial axis. Voronoi diagrams tend to produce an erratic medial axis when noise is present in the mesh. This can be seen in the bunny10k mesh above.

Additionally, the medial axis approximation becomes less accurate as the density of the point cloud decreases. To combat this, faces can be subdivided a number of times prior to being sent to Qhull.

References

Yoshizawa, Shin. Manifold Approximation of 3D Medial Axis
Qhull
C. Bradford Barber, David P. Dobkin, and Hannu Huhdanpaa. 1996. The quickhull algorithm for convex hulls. ACM Trans. Math. Softw. 22, 4 (December 1996), 469-483.