Computing curve skeletons of 3D shapes is an important tool in computer graphics with many different applications for shape analysis, shape matching, character skeleton construction, rigging and many more. It’s an active field of research and over the years, numerous algorithms have been developed. Most of these algorithms are based on mesh contraction using smoothing or thinning. Another popular approach is to use the voronoi diagram generated by the points of the mesh. Quite an interesting alternative, however, is to rely on spectral analysis for computing the skeleton. The idea is fairly simple and works as follows:

  • Compute the first non-zero eigenvector of the Laplace-Beltrami operator, namely the Fiedler vector.
  • Compute contour lines based on the Fiedler vector
  • Find the center point for every contour
  • Fit curves to the points



  1. Is it possible to generate the countour/isolines from Houdini’s built-in tools, or is that also custom-made? Thanks!


  2. Amazing!
    I have wanted to solve this problem for such a long time, of creating an automated “skeleton”, but never understood how to implement it.

    “Compute the first non-zero eigenvector of the Laplace-Beltrami operator, namely the Fiedler vector”

    Would you need special libraries for this step or is it possible to use houdini vex/volume combinations to create the Fiedler vector field?
    As I understand Laplace-Beltrami operations is just computing the Laplacian of the geometry. Would it be possible to use the Laplacian field from the VDB analysis and later use it to get the first non-zero eigenvector ?
    My math knowledge is limited, I have looked at the eigenvalues and eigenvectors, but I find it difficult to understand how to use them practically, on actual geometry.

    Any help is greatly appreciated!


    1. Sorry for the late reply, but I didn’t check the blog for a long time.
      Well, in theory you could do the eigendecomposition with VEX and standard SOPs but it would be cumbersome and probably tremendously slow. However, you won’t need external libraries if you have access to the HDK.
      Generally it’s not really common practice to use the Fiedler vector for skeleton extraction. It’s a nice idea but in practise this might lead to a number of problems because computing the Laplacian is very sensitive to irregular geometries. Most probably you might be better off by using a mesh contraction algorithm. This could be done directly on the mesh but it’s easier to use a VDB volume instead and simply relying on its gradient. I think there is a file somewhere on OdForce or the SideFx forum which is using this method.
      Alternatively you could also search for the points at which the magnitude of the gradient vanishes instead of iteratively contracting the mesh. These points lie on the medial axis and could be used afterwards to compute the skeleton.

      Liked by 1 person

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )


Connecting to %s