Performance

SpeedTree wind effect can scale widely. That is, they can be off, simple, or very complex (as in 400+ instruction vertex shaders). As such, users should take great care about when to scale up and by how much.

Note: This page focuses largely on shader/GPU performance tuning as there is little to be done to impact CPU performance because almost the entire wind computation load is in the vertex shaders. CWind::Advance() (often invoked through CForest::WindAdvance()) is the only function that uses any reasonable amount of measure CPU time.

Tuning in the Compiler Application

For each tree in the Compiler application, users can tune the wind LOD. As long as smooth LOD is enabled (the Effect LOD dialog option per tree), the Compiler will generate shaders that smoothly transition between wind effects so there will be no noticeable pop. There are four options:

For wind LOD, go to global or no wind as soon as possible. We have found that for trees will full wind, going from full in the highest LOD to global in the next works very well in terms of performance and perception. For smaller models like shrubs and bushes, going to no wind as soon as possible is also recommended since when rendered very small, wind effects are difficult to perceive.

Note: If a tree model has any wind effect other than “None” in the last discrete LOD, the billboard shader will be compiled with global wind enabled.

To A/B test the overall impact wind computations are having on your scene, you easily disable all wind effects my unchecking “Enable wind” in the Compiler→Effects options.


Tuning in the Modeler Application

Within the Modeler application, there are several controls that can be used to enable or disable particular wind effects. Each of these options may represent a significant jump in the vertex shader instruction counts, so they should be carefully tuned. Access them by clicking on the 3D fan icon in the Modeler. These options appear throughout the property bar: