VEX in Houdini: Diffusion Limited Aggregation (Plus Rendering in Mantra & Redshift)

comments 10
Tutorials
Featured Video Play Icon

When we saw Andy Lomas’ “Aggregation” series a few years back we were struck. How could you generate those intricate particle sculptures? The series’ title hinted at one possible solution: Diffusion limited aggregation or DLA. In this tutorial we’ll build a basic DLA setup using VEX and volumes. Also we’ll talk a bit about rendering our result in Mantra and Redshift.

DLA simulated particles wandering freely in a solution until they stick to a seed and grow into bigger branching structures. One real life example can be seen in this image from Wikipedia:


A DLA cluster grown from a copper sulfate solution in an electrodeposition cell. Photo yy Kevin R Johnson

A DLA cluster. Copper aggregate formed from a copper sulfate solution in an electrode position cell.
Photo By Kevin R Johnson. (Wikimedia Commons)

While the algorithm’s speed is reasonable in 2D, it can get quite slow in 3D. If anyone has hints on how to speed up the whole simulation – please let us know!

Paul Bourke has a more detailed introduction to the principles behind DLA and the actual algorithm.

Have fun with it!

Download Project Files (.hipnc)

Share on FacebookTweet about this on TwitterPin on PinterestEmail this to someoneShare on LinkedInShare on Google+

10 Comments

  1. Kevin Sutherland says

    Another gem! I cant tell you how much I look forward to these releases. Long may you have the time, creativity and patience to continue. I’m sure I speak for everyone when I say we’re all very grateful for the inspiration and learnings.

  2. Maurits laanbroek says

    Hey
    Love the video, I think you can increase the speed a bit by letting the pointwrangle2 only run over points in the move group. This reduces the number of points being processed.

  3. Simple silly question: Why is your Materials tab icon more exciting than mine? I have the cardboard box with stuff in it icon. Other than that, great stuff!

  4. Great tutorial, Moritz! I think one of your main reasons for the increasing slowdown at later frames is that your number of moving points is essentially unbounded. With your updated targetnum calculation you already have >209,000 points to update / frame once the bounding sphere radius >= 1. I’d at least wrap this all in a min(targetnum, 10000) to keep a lid on runtime per frame. So I will try to re-implement an alternative approach (which I also used back in the day for toxiclibs): Use a single/fixed number of moving points and don’t spawn them in a single global bounding sphere, but each one in a much smaller search sphere around a randomly chosen static point. Additionally, use another attrib, to keep track of search iters per moving point. If no static point has been found after N frames, respawn that search point… You can find more details (and various additional options to control growth behavior) here: http://toxiclibs.org/2010/02/new-package-simutils/

Leave a Reply

Your email address will not be published. Required fields are marked *