
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.














12 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
Hi Jer, amazing work, im aware of LSystems from doing some work in Houdini but having just been involved in a more interactive project for uni im starting to look into Processing and im trying to understand how I can build environments/landscapes. Do you have any pointers/good resources for that? Please could you send me your code so I can try and pick it apart to learn a little more?
thanks, and great work.
G
I built this (L-System) in Flash a while ago:
http://www.my-mot.co.uk/automata/AutomataTubularL…
Duncan
Really nice Jer! When I was a teenager I got obsessed with Dawkin's biomorph programs and started trying to write my own versions — I couldn't guess all the same genes that he was using so mine never looked quite as cool! Turns out the trick he was using were L-systems. Actually a friend of mine wrote a little live L-systems explorer http://james-saunders.blogspot.com/2010/09/explor… which one day I'd love to turn into a full blown genetic algorithm that people can breed in their browsers..
Hi Jer,
Your images are exceptional. I had developed a similar system, but not quite as polished as yours. I hadn't yet discovered L-Systems, so instead I developed a stochastic node rewriting procedure. In many ways, however, it is isomorphic with an L-System. If you're curious, I've got some images up here: http://personalttd.blogspot.com/ (it is just a hobby site, strictly for fun, so hopefully this won't seem spammy
The images were created with software that I wrote in MSWLogo. Many of the images received some degree of postproduction processing, usually with Google's Picasa. I am now learning Processing and porting my production system…of course, I am wondering if you would be willing to share your code. If so, I would be indebted to you. Either way, I would be glad to swap ideas. Again, kudos on the great work!
Hey,
I dig the trees!
The tree.growth source is available here: http://blog.blprnt.com/source-code-tutorial
-Jer
Ah, nevermind – noob problem. Just had to comment out the main() function and all is well. thanks!
hi jer!
this is very interesting, and i feel i can apply it to a architectural project im working on.
i would be very pleased to discuss it with you over mail.
if you feel like it, contact me.
thank you!
HI!! how do you people do this stuff.. just begun processing!! do you think i can make them too? T__T i so envy you!!
One Trackback
[...] project tree.growth (http://blog.blprnt.com/blog/blprnt/project-tree-growth). This project uses some established algorithms (surprisingly simple ones) to generate trees. It [...]