Skip to main content

Worm locomotion with FEM

I have always wanted to do a dynamic locomotion setup, I have tried in the past with wire and sop solver with .... interesting results ;)

With FEM in Houdini 13, the rest attribute is stored on vertices which allows a tetra to change its rest state independently of the surrounding tetras. With this, parts can be expanded and shrunk to get a muscle type action.

I have started with a worm since it is quite simple, the contractions and expansions move back along the worm in a wave, opposing the travel direction. It took quite a bit of tweaking to get him moving at all. One major element of a real worm's action that's missing is the little hairs that grip the ground. I couldn't find a way to change the friction per point so I have gone a bit hacky and multed down v wherever I didn't want the worm to move. I would love to hear if there is a per point friction control!

Here is the video

Houdini 13 FEM Worm locomotion from Sam Hancock on Vimeo.

...and the .hip is here

H15 .hip here, for some reason, setting the rest attribute in the SOP solver no longer worked, I just turned on the rest geo option on the object and bypassed it in the SOP solver ... ?


  1. This comment has been removed by the author.

  2. This comment has been removed by the author.

  3. Hi, Sam!
    Can I setup dynamic locomotion in Houdini 12.5?

  4. this is amazing, nice work , Are you going to do a worm form dune next ? :)

  5. A sand solver sounds like a can of worms ;)

  6. your .hip files are awesome!! thanks for sharing!!

  7. Oh my god The hip file , It's awesome, thanks for sharing ♥

  8. Hi Sam, this is really good! And thanks for the super hip, really usefull. Just one question ... can you (or sombody) confirm it wors on H14? I cached the geo, but simply it doesn't works as it's supposed to do.


    1. Sorry this is so late ... not sure what changed but I updated the file for H15, link above...

  9. Hi Sam! This is fantastic. Was wondering if there's a better way to do this for Houdini 17+
    I can't seem to get any movement with the H15 hip file.


Post a Comment

Popular posts from this blog

Cloth tear geometry and shading detail

Been adding geo detail to the torn cloth and shading the additional geo. Shading sure is fun! :)

The second extrusion is done twice, once for the U direction, and once for the V direction. Polyframe is used to get the UV gradient to extrude along, vopsops are used to move the extrudeFront points after extrusion as you can't control the extrusion per point with just a polyExtrude node...

The extrusion is done twice so that the two different surfaces represent the opposing thread directions. since my geometry (and therefore tears) are in line with the U and V direction, the effect is not obvious in this case.
The .hip file below has a slightly newer shader than in the video and the image above, I removed the part of the shader that created the soft ramp for the alpha edge and used just the thread noise instead; it now looks more like:

The UV space can be transformed after the sim to change the thread direction, the following has the UV space rotated 90º, you can see threads running …

Drawing with a wacom in Houdini

It's been ages since I posted last, I haven't been doing much Houdini at home in the last few years. I got an Indie licence to make some content for other things I am doing, so I will be doing more in Houdini now -- and whenever I find something that is a bit interesting or might be useful for someone I will try to post it.

Recently I was looking for a solution for drawing curves with a wacom, and retain the pressure data  and curves so that it can be procedurally animated after it has been drawn. I was trying to find ways to recreate/trace consteallation drawings from the 1661 book Uranometria (

The goal was to get clean curves that could be procedurally animated after they had been drawn, and also to get an image that is not obscured by the stars that you can see in the above snap.

I was trying to use inkscape, which is great for drawing with but I had no idea how I could get any data out of it, and it seemed to make solid shapes instead of c…