Physarum Slime Mold

comments 8
Free Tutorials

While Manu and I have been on season break, my twitter stream washed up these mesmerizing, beautiful videos.

Turns out they are created by Sage Jenson, a genius digital artists.

But not only do they create these fantastic pieces of art, they also go to great lengths to describe and share the process! This is a somewhat rare thing in procedural art which I find truly generous. Hats off for that!

His algorithm is based on this paper, which imho belongs to a whole class of algorithms called neighbour sensing models.

In this three part tutorial we’ll go over the process of implementing this algorithm in Houdini using VEX and a few built in nodes. Also we’ll talk about why rotation matrices come in handy and how to modify this algorithm to work in 3D sapce.

Download Project File

Liked it? Take a second to support Moritz on Patreon!
Become a patron at Patreon!


  1. thanks Moritz, in three hours I have reached part II. Part III is confusing its changes even though it is short.

  2. Hey Moritz, great tutorial, thanks, I tried this myself this time last year without using volumes, and got some interesting but odd results, learnt a lot of vex though. Your solution is great, wondering if there’s an easy way to use an image as the base ‘map’ rather than noise?

    Can’t seem to write the density from an image colour into the Houdini volume. Managed using VDB’s but it’s weirdly very slow, and doesn’t work very well.



    • Hey Kieran,

      sure, just use a volume from attribute sop to copy over any point attributes to a volume. In this case using a high res grid with an attrib from map SOP to load in a texture. Set it’s color channel to float et voila! 🙂

      Cheers, Mo

      volume from attribute SOP

      • thanks Mo, apologies, didn’t see your reply! thanks for taking the time to post this, that’s awesome. Im an idiot and was trying to use an attribtransfer rather than volume from attribute. cheers! K

  3. Prantar Tamuli

    Hey Moritz,

    This is a brilliant tutorial. I can’t tell you how grateful I am for this. I am currently researching a Cyanobacteria species called Oscilaltoria and it exhibits its neighbor sensing phenomenon. I am trying to simulate its behavior computationally and I tweaked some parameters to get it to look like its real growth. However, there are two questions I had –

    In this tutorial, the resulting pattern starts out very intricate/compact in the beginning and gradually becomes less intricate with more voids (empty spaces). Oscilaltoria behaves in the exact reverse manner. It starts out less intricate and becomes dense and intricate over time. How can I get the process to occur in reverse i.e the particles move forward but they form smaller voids, more compact/ intricate patterns.

    • Prantar Tamuli

      There is another thing I am struggling with. In Oscillatoria, there seems to be a limiting value for the radius of the voids formed i.e the circular voids formed do not collapse on to themselves and stops at a certain radius and the pattern remains constant when it is achieved. How can I introduce this constraint?

      I am not from the coding background so I hope I am being legible. I could send you time-lapses of the real growth if it helps.

  4. Izabella

    Hello, I was wondering if it was possible to make the particles, in a 2D system, spread out from a single or multiple starting positions.

Leave a Reply