VEX in Houdini: Space Colonization

comments 14
Free Tutorials

Branching growth is fascinating as it has a lot of hidden structure to it and is very intricate. Many methods have been proposed over the years to model branching structures, like trees. One algorithm that is particularly beautiful and simple is the “Space Colonization” algorithm, that Adam Runions proposed in 2007. It models branches by looking at their competition for space. The space that contains the branches is filled with points that serve as attractors for the growing parts.

In todays tutorial, Manuel implements the algorithm by Runions in VEX inside of Houdini. By utilizing Houdinis high level VEX functions to find closest points it’s astonishingly easy to make this work. Follow Manuel while he creates a SOP solver that simulates this branching beahaviour.

Download the scene file

Have a look at Adam Runions original paper

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

14 Comments

  1. Mohammed Al Abri

    I can’t thank you enough for all the efforts & true dedications that you guys have invested to help us out growing with a high standard of beautiful design & problem-solving mindset. Yes, we’ll definitely continue to support you, because you deserve it & much more ;D

  2. This is a great example for understanding volume manipulation, solver, loops, looking up neighbor points, storing data in arrays and more importantly implementing a complex algorithm which is hard to interpret most of the time, all simply done within few wrangles. Thank you guys.

  3. kunal tiwari

    nice job man
    can you favor me
    plz solve animated knit effect like Simon holmedal Nike shoes ad fly knite

  4. Ben Colenso

    You Guys are Amazing!
    I cant express enough gratitude for the time, the genius, the efforts, the dedication given to sharing your knowledge and passion for the craft.
    The thought streams here shared are of immeasurable worth to the growth of the computational arts community.
    Respect.

  5. Thanks for the great tutorials. Really appreciated! I noticed one small problem with this algorithm: branches often seem to end up with nodes almost exactly between two attractors, with new links being put in every frame going backwards and forwards.

    I added a small modification to the algorithm that seem to work: whenever you create a new node, check if the direction you’re going in is in almost exactly the opposite direction to the direction from the previous node. If that’s the case, you’re doubling back on yourself, which isn’t a good idea, so simply create a node in the direction of the nearest ‘associate’. That seems to sort things out nicely.

    • How could I miss this for over two weeks… Sorry for being slow. Great idea indeed! And feeling very honored – huge fan of your work!

      Cheers, Mo

  6. Bradon Webb

    Great job guys. I’m curious when I first learned how to do space colonization I built it with a pc lookup function. and now I see that more and more I see examples of this type of thing using “neighbors” or “nearpoint” which kind of seem to do similar things. Is there a speed advantage of “nearpoint” over “pc”?

  7. Vanessa Clem

    Hi!

    Thank you for such a detailed and well-structured tutorial apart from all the great work that you’ ve been publishing.
    I have one question, I’ ve been trying to run the simulation on a geometry of my own (closed mesh), I set the seed points within the geometry. However, when I run the simulation I see no results. I would appreciate if anyone has an idea of what I could do wrong.

    Thanks a lot!

  8. Abhigyan

    Hi!

    I did the exact same thing as you said however when i run the simulation nothing happens, the object remains as it is. I know its late but I hope you can help me.

    Thanks

    • Hi Abhigyan,

      did you have a look at the provided scene file? Maybe that’ll give you some insight into what’s causing your issues.

      Cheers, Mo

  9. Luis Gutierrez

    Thank you so much for this tutorial!. Just one question, in the render of the intro, how do you make the thickness of the lines go thinner with time? I’m starting with Houdini and I cant find a solution for that!

    Thanks!!!

Leave a Reply