Advertisement

Procedural tree generation

Started by August 19, 2009 10:41 PM
19 comments, last by emberintherain 13 years, 3 months ago
Quote: _swx_
http://www.cs.duke.edu/courses/fall02/cps124/resources/p119-weber.pdf

Their system is actually limited to trees, flowers and other flora supported by l-systems are not possible as is. Further: How do their trees interact with the environment? L-Systems have been extended to let them interact with the rest of the world (see also Illumination Driven Plant Growth):



The good thing, yes those trees are easier to construct for end users, once the system is implemented, but compared to L-Systems, they have only a fraction of their powerfulness.

Quote: Original post by _swx_
Generates trees that actually look real, which L-systems etc doesn't.

Then below images are gimped or photoshopped?




And a real world scene (showing terragen+xfrog plants, image from xfrog):


[Edited by - phresnel on August 21, 2009 3:20:35 AM]
Quote: Original post by gpu_fem
[html]http://blendernewbies.blogspot.com/2007/08/tree-making-tool-gen3.html[\html]


Small nitpick: Even if the html tag would be enabled here, that wouldn't be valid html, in case you want a link be emitted. It would look like that:

[html]<a href="http://blendernewbies.blogspot.com/2007/08/tree-making-tool-gen3.html">link-text</a>[/html]


Luckily, gd.net allows you to use the a-tag directly:
http://blendernewbies.blogspot.com/2007/08/tree-making-tool-gen3.html
Advertisement
I used the Weber paper for my trees and it works well, you can see a small video of some of the results
">Here
. I've since added pruning volumes and obstructions to growth as well as grow along splines.




Maybe also check out GroIMP/XL:
https://sourceforge.net/projects/groimp/

It's an open source tool that allows to model trees and more. XL is a programming language that combines Java and L-systems and allows global interaction as well.

Quote: Original post by spookycat
I used the Weber paper for my trees and it works well, you can see a small video of some of the results
">Here
. I've since added pruning volumes and obstructions to growth as well as grow along splines.


Mighty results. You write on that youtube page that it's for your game engine. Which one would that be?

Thankyou :) It's for our own in house game engine that is still being worked on. There is still a bit of work to do on the tree front better blending of branches to the trunk for example, working on the wind and deforming stuff at the moment. Some pics of the growing along a path and growing around objects. Still got some way to go to match SpeedTree 5.0 but cant afford that one, mind you price has come down a little but still more fun doing it oneself :)


Advertisement
Incredible!

Okay, just a single simple question.

In the paper, he says "a random rotation of magnitude (nCurveV/nCurveRes)". I am just wondering whether he means what he said (then its not random), or he means a random rotation of magnitude *up to* (nCurveV/nCurveRes).

I'll go with the second, but maybe I'm misunderstanding something.
In my version I have it as RandomValueBetween(-nCurveV, nCurveV) / nCurveRes
Quote: Original post by spookycat
In my version I have it as RandomValueBetween(-nCurveV, nCurveV) / nCurveRes


Okay, thats what I thought. I think it's an error in the paper.
I have a question regardin Weber's paper (http://www.cs.duke.edu/courses/fall02/cps124/resources/p119-weber.pdf) as well. In section 4.2, there is a passage which says: "If there are any clonsed, then the z-axis of the stem and its clones rotate away from the z-axis of the previous segment by angleSplit=(nSplitAngle+-nSplitAngleV)-declination, limited to a minimum of 0, where the "declination" angle ... can be found by taking the inverse cosine of the z component of a unit z vector passed through the current matrix tansformation of the relative coordinate system."

Here is what I do not get: suppose we got a two-way split after the first segment, so that the current transformation is a simple translation upwards, then the z component of a unit z vector passed through it would be 1, right? acos(1)=90, thus angleSplit will be negative except from exteme cases of nSplitAngle and nSplitAngleV which leads to angleSplit = 0 very often and the clones wont rotate away from the main branch.

If you look at the top center image, there is a tree which has a split right after the first segment, but here the angle seems to be 45 degrees from the segments z-axis, so why is that?

Where am I taking the wrong turn?

This topic is closed to new replies.

Advertisement