Growing, Branching, and Scaling Pattern – Example 10.6


Before leaving the topic of growing and branching structures, I wanted to show one more possible variation to the concept which was introduced in Example 10.4 and further explored in Example 10.5. This example at its core is very similar, with one significant exception. I tried to incorporate the logic of an L-system which I discussed in Example 9.4 to make the branching structure gradually scale down into smaller and smaller “self-similar units”

Step One – Setup


i will not show here the exact Grasshopper script I used to set up this example. Hopefully by now you can set up your own variations. The key concept here is that the “boundary” does not need to be the same as where the lines start, as shown in the previous two examples. Here I drew two straight lines on two ends of my field, divided the curves, and then used random reduce to get rid of many of them.

Step Two – Putting in the factor to scale the Pattern

Using the script from the previous examples, besides changing the starting conditions, I am also making one other significant change to the scripts functionality.


You will remember that the lines, before they could branch, had to pass a “Sufficient Length Test” to see if they would divide or not. This length was fixed as a constant (a proportion of the Average Initial Length, to be exact) and remained the same throughout the whole script. You will remember from the Example 9.4 on fractal trees, however, that to get the tree form, each successive generation of branching was a scaled down version (60-70% usually) of the previous generation. I tried to get this logic to gradually scale down the threshold at which branching could occur. I developed a formula, using the Average Initial Length, the round count, and a “Reduction rate” that achieves this effect. The rate needs to be a very low number (.030 to .050 for example) otherwise the geometry will scale down much too fast and you will be too much branching too soon. In any case, once the branching gets too excessive, the script slows down a lot, so you might want to put a control in that will stop the script if you get too much branching, but in this example, I don’t have this. I’m talking my chances 😉

Let it Run


So once everything is setup, push play! Like always, you should test it with a few maximum rounds at first, and if it appears to be doing what you expect, you can increase this number. With the start conditions described above, the stems start growing, then branch once they have crossed the minimum branching threshold, which is getting slightly lower with each subsequent round. By round 80 you will notice some stems have already branched 4 times. If you take only half the pattern, it looks very close to a forest section, which you could theoretically use this script for, or a variation of it. In this case, however, there is another “forest” growing from the top, and the two eventually intertwine.


I did quite a few variations of this. I did six studies with angles between 45° and 180°, at four different rates of branching (I’ll just call them Low, Medium, High, and Very High). Angles less than 45° don’t work in this particular script because of the way it is set up. The end points of the branches are too close to each other after the branching. You could fix this problem by giving the branches more of a “head start” after the branching occurs.

Anyways, notice that the larger the angle, the longer it takes for the script to develop. Also, at the highest rates the pattern will get increasingly dense and complex towards the middle. if the rate is too high, the two “forests” would never meet. So you have to find the right balance.