Using a Space Colonizatio Algorithm, space can be defined through a point cloud and 3D models can be "grown" by colonizing that space. This technique is well suited for models of trees, because it matches the growing process of real life trees.
For my Bachelors Thesis I implemented a Space Colonization algorithm based on a paper by Adam Runions and added the recognition of environmental factors like sunlight and shadows being cast by nearby objects.
The pointcloud can be defined through arbitrary curves, which are then rotated around a central axis. This pointcloud determines the general shape and height of a tree. Additional parameters allow finer control over the growing process and the density of branches and smaller twigs within the tree.
In addition to the underlying algorithm, here the incoming sunlight is taken into account when simulation the tree growth. The incoming sunlight is accumulated over a day with the path of the sun being calulated dependend on the local coordinates and time of the year. When there is no obstacle in the way to block the sunlight, that results in a tree that is tilted towards the south (on northern hemisphere). The degree of influence the light has on tree growth can be set through a parameter.
Implemented in Java3D