PROJECT: tree.growth

Project Title: tree.growth
Date: Fall, 2006
Project Link: http://www.blprnt.com/treegrowth

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.


Bookmark the permalink. Follow any comments here with the RSS feed for this post. Post a comment or leave a trackback: Trackback URL.

12 Comments

  1. Posted March 3, 2009 at 3:52 pm | Permalink

    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

  2. Jon Davis
    Posted March 23, 2009 at 1:44 pm | Permalink

    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

  3. Jer
    Posted March 23, 2009 at 2:05 pm | Permalink

    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

  4. Posted May 12, 2009 at 9:56 pm | Permalink

    Fabulous work here. One note: one of the hyperlinks on the tree growth page actually sends the user to the darwin instruments page.

    Jacob

  5. Grey
    Posted May 6, 2010 at 4:48 am | Permalink

    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

  6. Duncan
    Posted May 14, 2010 at 7:29 am | Permalink

    I built this (L-System) in Flash a while ago:
    http://www.my-mot.co.uk/automata/AutomataTubularL…

    Duncan

  7. Posted October 22, 2010 at 4:46 pm | Permalink

    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..

  8. Posted November 10, 2010 at 6:30 pm | Permalink

    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!

  9. blprnt
    Posted November 11, 2010 at 6:18 pm | Permalink

    Hey,

    I dig the trees!

    The tree.growth source is available here: http://blog.blprnt.com/source-code-tutorial

    -Jer

  10. Posted February 24, 2011 at 2:10 pm | Permalink

    Ah, nevermind – noob problem. Just had to comment out the main() function and all is well. thanks!

  11. carlos
    Posted March 11, 2011 at 2:23 pm | Permalink

    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!

  12. fara
    Posted April 24, 2011 at 11:09 pm | Permalink

    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

  1. By Headphone Mode - all manner of geek distraction on February 24, 2011 at 6:17 pm

    [...] 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 [...]

Post a Comment

Your email is never published nor shared. Required fields are marked *

*
*