
Trees are uniquely suited to being simulated using computer graphics. Indeed, since the 1970s, methods to algorithmically render trees have been developed and refined to the point at which trees seen in high-quality scenes are very nearly photorealistic.
For this project, rather than concentrating on realistic renderings, I was instead interested in how simple forms could capture the inherent 'treeness' of the real thing.
In pursuit of this goal, I developed a customized software engine which produced vector renderings of imaginary tree species. By adjusting parameters in the program, trees could be rendered with various leaf shapes and colours, with flowers or shedding leaves, and in virtually any shape from small shrubs to towering birches.
The software uses a modified version of Lindenmayer Systems, a variant of formal grammar used to model growth. L-Systems were developed by the Hungarian theoretical biologist Aristid Lindenmayer.
This project was originally exhibited at the ArtPool Art Research Centre in Budapest as part of the fifth workshop of the EvoNET working group on Evolutionary Music and Art.
In 2006, tree.growth was featured as part of the "Into the Woods" collection at the Digital Well Being Labs in London.
Prints from the tree.growth project are available through the blprnt Etsty store.
tree.growth was built in Processing. Source code is available for this project. Please contact me for details.




















4 Comments
Amazing work (both in Flash and Processing.) You mentioned offering the source code for this project. I would be deeply appreciative to be able to play around with the source code and see how you implemented an L-System.
Best Regards,
- Tom Gonzalez
hello there
I really like the work you have done here, the abstract tree forms you have created are stunning. I am new to the concept of generating L Systems based visuals and was wondering if you could give me some pointers? A peek at the source code for this project would be of a huge help!
Jon Davis
Hi Jon,
The concept behind L-Systems is really straight-forward. You start with a string, then you successively apply a string replacement rule. So, let’s say we have a string:
A
And we apply this rule: Every time you see an ‘A’, change it to ‘AB’. Every time you see a ‘B’, change it to ‘A’. The first time through, we get:
AB
Then:
ABA
Then:
ABAAB
Then:
ABAABABA
That’s the root of it (pun intended). Once you have a long enough string, you can then run it through an engine to translate it into some result. In our easy example, maybe A draws a line forward, and B turns 90 degrees to the left. Or maybe A plays the next note up on a piano scale, and B plays the next note down.
In my system the symbol set is different. My strings look something like this:
FF-[-F+F+F-]+[+F-F-F+]
In which F moves one unit forward, – rotates to the left, + rotates to the right, and the brackets start and return to ‘branch points’.
If you send me an e-mail, I’ll send you the source. My system is very portable – the Lsystem objects, rulesets, and engines are separated so that the structure can be easily adapted to different purposes.
I spent a long time with this stuff a few years ago – I’m sure it is something that I will return to in the future.
Cheers,
-Jer
Fabulous work here. One note: one of the hyperlinks on the tree growth page actually sends the user to the darwin instruments page.
Jacob