Tree Blowing in the Wind

CSE557

March 17, 2005

Beltran Ibarra Davila-Armero and Jonas Lindberg

Introduction

Creating realistic animations of plants and trees is important both for scientific purposes and for edge-cutting video games. The increasing hardware capabilites makes it possible to create natural animations in reasonable time, and maybe even in real-time. Our goal has not been to create a physically correct animation model, but rather to create a system that efficiently produces nice looking animations. The project can roughly be divided into two major components: creating a realistic tree model, and constructing an animation engine.

Approach

Framework

We chose to use the "animator" (that was used for the third project) as a framework for our project. This allowed us to focus on the actual problem, and not so much on creating a user interface.

Building the Tree

Building tree structures can be done in many ways. One way to build trees is by using L-systems. Simple trees can easily be created by giving setting up a few trivial axioms. However, creating naturalistic looking trees is hard and there have been a number of research papers on this subject. Finding out good heuristics for these systems is a hard task, and both manual approaches and semi-automatic ones, such as trying to cross different spieces of hand-crafted tree models, have been explored in previous research.

In this project, we have, with simple heuristics and a recursive branch building method, created nice looking trees. Our method was to build up the tree out of small conic stem segments. The leaves were represented by small green ovals. We started with creating a simlpe tree onto which we gradually added more and more heuristics and randomness to acheive reasonably realistic trees.

One of the major difficulties was to differentiate between trunk and different levels of branches with respect to the specific heuristic needed at each level to achieve an appropriate behavior.

Animation model

The animation model was aimed, as mentioned above, to create realistic movements within reasonable time. In order to achieve low computational time, some physics have to be neglected or approximated. The main forces in our model are wind and "flexing". Flexing corresponds to the oposing force that occurs when a branch is bent. The magnitude and direction of the wind is controlled by curves in the animator's UI. The flexing force's direction for each segment is opposite to its bending angle. More over, we have added a rigidity factor that simulates the stiffness in every segment in the tree. A segment with rigidity zero will align to the winds directin and a segment with ridigity equal to one will not bend at all. Segments that are close to a parent branch or the root will be less prone to bend than further away segments.

Inertia is simulated by letting a segment's movement depend not only on the forces acting on the segment, but also on its speed in previous time steps. This allows a segment that has been bent by the wind to ocsillate for a while when flexing back to its original possition.

For efficiency reasons, the tree is animated from root to top. Hence, when bending the lower parts of the trunk or a branch, we do not take into account how much wind the rest of the branch catches, but only the winds effect on the actual segment. This method will therefore only produce accurate animations for the case where the effective wind on a branch sais something about the effective wind on the rest of branch. This means that we want to uses trees with branches that are relatively straigh to get nive looking animations.

Results

For a movie ...

Possible optimizations

References