User Tools

Site Tools


Advanced Wind

This section covers SpeedTree's approach to wind animation and editing.

Wind is woven throughout the SpeedTree modeling process (turn wind on by pressing its toolbar icon or “8”). Each node either has or inherits wind parameters that govern its unique motion as well as a shared group of wind parameters associated with the fan object. All wind parameters are saved in the model and remain intact when compiled for use in real-time environments. Wind animation can be captured in a point cache file when exporting tree models as '.FBX' files.

The wind algorithm is based on vertex weighting and does not utilize the bone structure within the tree. Instead, wind animation is broken down into Global Motion, Branch Motion, Leaf Motion, and Frond Motion as described below. Each of these groups has its own set of parameters that control the motion of one or more parts of the tree. The vertex weights themselves are assigned on the generators and nodes, not by using the fan object. Each generator and node type that utilizes wind has a wind group. Use the properties in these groups to distribute wind weights and control other aspects of the wind that are specific to the model geometry.

Best Practice: It is typically a good practice to leave the wind weights on each generator at or near 1.0 and control how much the components move using the wind properties on the fan object. This makes it easier to use the options in the “Wind Commands” group to transfer wind from one tree to another. It is almost always easier to copy wind from a library tree to your tree model than it is to tune a tree from scratch.
Real-time Wind Tuning: When tuning wind on tree model being used in real-time applications it is important to choose wind styles appropriately. Branch styles closer to the end of the combo box list are more expensive to compute. Each leaf motion style that is enabled also increases the amount of time it takes to compute. Choose styles that best match what you need in your application and disable any effects you consider unnecessary for best performance.

The sections below describe wind editing at a conceptual level.


Fan Object

The fan object located below the light object in the Tree Window provides access to wind functionality and parameters. If the fan is not visible, turn it on via the pulldown menu associated with the Tree Window Properties button on the tool bar. Click on the fan to edit the properties in the groups presented below.

The fan can be rotated using the rotation handles. A shortcut for fan manipulation is to hold down “F”, left click, and drag the pointer in the tree window to point the fan in a different direction. Doing the same with the middle mouse button is a shortcut for changing the strength.

Wind Visualization and Quick Editing

When wind is enabled, a graph that visualizes wind data appears below the fan. The blue bar represents the base wind strength. Click and drag the blue triangle to set the desired base strength. When gusting is enabled, the green bar added to the blue bar represents how hard the current gust is blowing. The bracket indicated by the green triangle on the left represents the range in which each new gust will fall. Raise and lower this range by clicking and dragging the green triangle on the left. Click and drag within the bracket to increase and decrease the range of gusting.

The green triangle to the right of the graph represents gust frequency. Click and drag this triangle to go from no gusting (min) to nearly constant gusting (max). Double clicking on the gust area of the wind visualization will cause a gust to be forced. Right click in the area of the fan and graph for more wind options.

In addition to the graph, a cyan dot appears in the scene with the tree model to indicate the position of the “wind anchor” used in palm frond style wind. This point moves around based on user settings, wind direction, and wind strength.

Common Properties

Many of the wind motion properties in each group share the same name. The list below describes what each of these properties mean each time they are used.

Distance
These properties control how far, in world units, a vertex with a wind weight of 1.0 moves during oscillation. Because these properties are in world units, they may need to be adjusted when copying wind from one tree model to another.

Frequency
These properties control how fast the associated motion oscillates. Higher numbers make the motion oscillate quicker and affect all tree models in the same manner.

Direction Adherence
These properties control how much the associated motion moves according to wind direction. For global and branch motion this controls how much the geometry shifts in the direction of the wind. For leaves that are tumbling, this value defines how much the leaves line up with the wind direction.

Curves
Many of the wind properties have curves associated with them. These curves control how much of the wind effect is applied at low wind (left side of the curve) and high wind (right side of the curve). Use these curves to control how tree models make the transition from low to high wind strengths.


Wind Commands

The properties in this group are used to transfer wind settings between tree models. It is important to note that only the properties on the fan are modified when importing or pasting wind settings. The wind values on each generator are unchanged. This means that wind from one tree may not behave the same way on another tree until the wind values on each generator are changed. Use the “Reset wind weights” button to set the wind values on each generator back to their default settings.


Presets

The “Style” property provides a quick way to set all of the options that affect wind behavior and shader length. Use this property primarily when tuning wind for real-time applications. For models intended to be exported and rendered offline, “Custom” is typically the most appropriate preset to use.

Use the “Wind wizard…” button to launch the Wind Wizard. After answering a few questions about the model the wind options and parameters will be computed automatically, including the “Preset” setting.


Settings

The properties in this group set the wind properties shared by all wind motion groups. Use the two “Response time” properties to control how quickly the tree responds to changes in wind strength and speed. These times control the amount of time it takes for the tree model to respond to a change of 100%. So, a value of 5.0 in “Strength response time” means it takes 5.0 seconds for a tree to go from no wind to maximum wind.

Wind Anchor
The wind anchor is used only for branches and/or fronds that utilize “Directional (palm frond style)” branch motion. The wind anchor is a point in space that moves around based on strength, direction, shape of the tree, and the values of the properties in this group. Branches and fronds that use the wind anchor will bend toward this point when the wind blows. The wind anchor is indicated by a cyan dot near the tree.

Scalars
The properties in this group scale each of the similarly named properties in each wind motion group. Edit these scalars to quickly do things like make the tree oscillate more quickly or move further during oscillations. These parameters are often all that needs to change when copying wind from one tree model to another.


Global Motion

Global motion is motion that is applied uniformly to the entire tree model, regardless of geometry type. The amount each vertex in the tree model moves for this part of the wind animation is based solely on its height above the ground. Higher vertices move more than lower vertices. Use the properties in this group to make the entire tree sway back and forth in the wind.


Branch Motion

Branch motion describes how branches (and fronds) move and oscillate in the wind. The final movement is a combination of the chosen style (described below), the parameters in the “Level 1” and “Level 2” groups, and the wind weights and oscillation vectors computed for each branch/frond based on the settings in the generator's “Wind” group. There are two levels of branch motion possible in each tree model. Each branch/frond determines its wind level by following the links from their generator back to the “Tree” generator at the root. If a branch/frond is the first generator in that chain of links to have “Apply” checked in its “Wind” group it uses level 1 wind. If there is exactly one generator between the branch/frond and the “Tree” generator it uses level 2 wind. Otherwise, a branch/frond will inherit wind motion from its parents and will not have unique wind motion. It is important to decide which generators are assigned which wind level. For a typical broadleaf tree global motion is used to make the trunk sway, branches growing off of the trunk get level 1 wind and those branch's children receive level 2 wind.

Styles

The following list describes the three styles of branch motion that are available when the Wind Presets are set at Custom. Exactly one of these styles may be selected for each level.

Simple
This style of branch motion simply has the branches oscillate back and forth independent of wind direction. It is the simplest to compute for real-time applications.

Directional
This style adds a directional component to the osciallation. Branches still oscillate back and forth but also move in the direction of the wind based on the “Direction adherence” property.

Directional (palm frond style)
This style adds a directional component to the standard oscillation designed to mimic the behavior of palm fronds. A point called the “wind anchor” is computed based on the tree geometry, wind strength, wind direction, and the properties in the “Settings” group. All branches/fronds using this style bend towards this point based on the “Direction adherence” property. Combine this style with “Whip” and “Turbulence” to create the whipping oscillation associated wih large fronds like those of Date Palm trees.

Rolling

A rolling wind effect can be applied to either, both, or neither branch wind levels. The rolling effect enables the wind motion to be amplified and reduced in a rolling manner that affects nearby branches in a natural manner.


Leaf Motion

Leaf motion describes how leaves (and fronds treated as leaf meshes) move and oscillate in the wind. The final movement is a combination of the parameters in the “Group 1” and “Group 2” groups, the wind weights and group assignments computed for each leaf based on the settings in the generator's “Wind” group, and the wind direction parameters associated with each leaf mesh. There are two distinct wind groups to allow for two different types of leaf wind on a tree. Tree models that only have leaves on them typically use a single wind group; however, tree models with leaves and fruit (or anything else modeled with leaf generators that isn't really a leaf) would use both wind groups to have different wind animation on the different geometry types.

Styles

The following list describes the three styles of leaf motion. Each of these styles can be enabled individually. Combine all three for the most realistic (but expensive to render in real-time) wind effects.

Ripple
This style of leaf motion causes the leaf vertices to oscillate back and forth. This is often enough in real-time tree models and adds fluidity to the motion of high detail leaf models. Use the mesh property “Wind direction→Ripple” to specify which axis of the leaf mesh model each vertex moves in when the “Style” property is set to “Computed”.

Tumble
This style causes each leaf node to sway about its pivot point. The “Flip” and “Twist” parameters control how much the leaf can rotate (in degrees). “Direction adherence” controls how much the leaf aligns with the wind direction. Use the mesh property “Wind direction→Growth” to specify which axis of the leaf mesh model aligns with the wind (this is critical to make models like Spanish moss behave correctly).

Leaves with this style enabled can also apply twitching. Twitching models the chaotic motion often seen by leaves under windy (and sometimes not windy) conditions.

Leaves with this style enabled can also apply rolling. The rolling effect enables the wind motion to be amplified and reduced in a rolling manner that affects nearby leaves in a natural manner.

Occlusion
Enable this style to allow leaves on the leeward side (the side not facing into the wind) to have less leaf motion.


Frond Motion

Frond motion describes how fronds ripple in the wind (broad frond movements are covered in by branch motion). The final movement is a combination of the parameters in this group and the “Ripple scale” setting in each frond generator's “Wind” group.


Gusting

Gusting provides a mechanism to have the wind strength periodically rise and fall simulating gusty conditions. The “Strength” and associated variance control how much the strength will increase when a gust happens. “Frequency” controls how often they will happen. “Duration” controls how long gusts will remain in effect before returning to the base wind strength.

When a gust happens, the wind strength gradually raises from the base value to the new, stronger value (indicated by the sum of the blue and green bars on the wind graph in the Tree Window). The amount of time this takes can be scaled using the “Rise” scalar (lower values reduce the time, thus making the tree react to a gust more quickly). Once the peak is reached, the wind strength remains there for the specified duration. Then the strength gradually returns to the base value. Scale this time with the “Fall” scalar. The “Rise” scalar is typically less than the “Fall” scalar to simulate the effect of gusts coming on quickly then gradually dying off.

The “Set conditions” menu option on the fan and wind toolbar menu provide shortcuts for setting common conditions like breezy and stormy. These choices set the nominal wind strength and gusting parameters to best match the named conditions. Use these settings to help guide wind tuning for models that will be in the same scene or game level. The Wind Wizard will attempt to set all wind properties such that the model behaves appropriately under all of the preset conditions.

Forcing a gust

By double clicking on the gust area of the wind visualization, a gust will be forced to happen.

“Duration” values of 0.0 still have an effect on gusting since the time to rise to the value and fall from it are not counted against the duration. Use 0.0 and low scalars to simulate turbulent conditions.



Exporting Wind Animation

For real-time applications using the SpeedTree SDK, wind data is saved with the tree and preserved all the way through the tree rendering process. All you need to do is save the tree and compile it using the SpeedTree Compiler – no exporting is required.

Wind animation can also be exported as a point cache file. To do so, export a mesh version of the tree via the menu item “File → Export mesh…”. On the Export Settings dialog, enable wind animation and set the variables as desired:

Length
The length, in seconds, of the animation. The number of frames of animation is equal to this value multiplied by the frame rate value.

Frame Rate (FPS)
Number of frames to export for every second of animation specified. If exporting a lower FPS than your animation uses, each frame is stored as a keyframe, and the animation is interpolated between the keyframes.

Pre-Roll
For looping animations or animations that should be at full wind strength from the beginning, “pre-rolling” the animation by a few seconds will make the output more suitable. No pre-rolling will result in the tree animating out of the default static position, which is less conducive to looping.

Strength
Sets the base strength of the wind.

Allow Gusting
Toggles gusting in the exported wind animation.

Alternatively, meshes can be manually animated in your target app via bone data. To aid in manual animation, the skeletal structure of the tree can be exported as well.