SpeedTree is a procedural vegetation modeling toolchain developed by Interactive Data Visualization (IDV). Its core idea is not “hand-sculpt a tree” but rather describe in rules how a tree grows: you tell the software “the trunk puts out a side branch every 0.5 meters, the angle between side branch and trunk is randomly between 45° and 70°, and the side branch is 40% of the trunk's length,” and the software generates the tree from those rules.
That approach pays off in three ways:
Endless variation — the same rule set with a different random seed is a different tree, so producing an entire forest in bulk takes no repeated labor.
Controllable polygon count — every step from rules to mesh has controllable precision, so the same tree can output tens of thousands of triangles for a game and millions for film.
Native engine support — Unreal Engine and Unity both ship the SpeedTree runtime, so wind animation, LOD switching and billboards are supported directly by the engine.
The SpeedTree product line breaks down into roughly three parts:
Product
Role
SpeedTree Modeler
The modeling tool, and the star of this tutorial. Used to author individual plants, tree clusters and grass, then export to an engine or renderer.
SpeedTree SDK / Runtime
The engine-side runtime library that handles real-time wind animation, LOD and billboards. Already built into UE and Unity.
SpeedTree Store / asset library
Libraries of finished vegetation models sold by IDV and third parties. Buy them ready to use, or buy them to take apart and learn from.
On versions: v10 unified everything
Early SpeedTree split the product into a Cinema edition for film and a Games edition for games, with different features and export capabilities.
As of SpeedTree 10 that split is gone — a single Modeler now covers both the film and the game workflow, and you simply pick a Games or VFX target at export time.
That does not mean the two workflows are technically identical: the game path uses dynamic LOD, the film path uses Resolution. That distinction runs through this whole tutorial; see section 2.15.
The version this tutorial is based on
Every parameter name, node name, render mode and export preset in this tutorial comes from the copy of SpeedTree Modeler v10.2.0 installed on this machine. That version is backward compatible with v8/v9 .spm files; when you open an old file the software prompts “Upgrade legacy generator(s)”.
What SpeedTree is good at, and what it is not
Good at
Not good at
Trees, shrubs, grass, vines, palms and other plants that follow growth rules
One-off sculptural plants with a highly distinctive silhouette (better modeled by hand)
Generating many variations of the same species in bulk
Fully photoreal close-up bark detail (needs photogrammetry or displacement maps)
Vegetation that needs wind and LOD in games and film
Non-plant natural objects (rocks, terrain and water need other tools)
The SpeedTree Modeler interface is a typical Qt docked-panel layout. Below is the actual interface of v10.2.0 on this machine with the official sample Broadleaf_Field.spm open:
The SpeedTree Modeler v10.2.0 main interface (official sample Broadleaf_Field.spm, 3,032,522 triangles total)
The interface divides into five areas:
Area
Location
Purpose
Menu bar
Top
Five menus: File / Edit / Tools / Window / Help. Almost every feature can be found here, and it is the fallback when you are learning shortcuts.
Generation panel
Upper left
Shows the tree's node tree. Every generator's parent/child hierarchy lives here, which makes it the most-used panel. The top has three buttons: Add, Actions and Randomize.
Properties panel
Lower left
Shows every adjustable parameter of the currently selected node. The top has a Search properties.. box, and parameters are shown in collapsible groups (Generation, Spine, Wind…).
3D viewport
Center
Real-time preview. The left side shows model statistics (triangle count, bone count), and you can toggle perspective/orthographic.
Toolbar
Above the viewport
Mode and display controls; see the table below.
Below are actual crops of the Generation and Properties panels (taken from the main interface above and enlarged):
The Generation panel: the Add / Actions / Randomize buttons on top, the node tree below. Select a node and all of its parameters appear in the Properties panelThe Properties panel: the name of the selected node on top, the Search properties.. box below it, then the grouped, collapsible parameter list
Toolbar buttons, one by one
These names come from the actual toolbar text in v10.2.0:
The actual toolbar layout: Mode (Generator / Node), View, Edit (Add / Post), Freehand, Render, Show, Zoom, Visibility, Collision, Season, Shade, LOD, Scene Objects
Button
Function
Mode Generator / Node
Switches what you are operating on. In Generator mode, clicking in the viewport selects a generator (a whole branch); in Node mode you can select an individual control point or vertex for fine adjustments.
View
Viewport display options: perspective/orthographic toggle, grid, reference images and so on.
Edit Add / Post
Add is for adding geometry; Post is for post-processing display (such as a wireframe overlay).
Freehand
Toggles freehand mode. With it on you can drag out branch paths as if drawing.
Render
Render mode selection (lighting model, material channels, vertex color, wind weights…), covered in the “render modes” section.
Show
Display toggles: whether to show leaves, whether to show the skeleton, statistics and so on.
Zoom
Marquee zoom and zoom to fit the whole model.
Visibility
Visibility control, used together with LOD and culling.
Collision
Toggles display and generation of collision bodies.
Season
Season switching (spring/summer/autumn/winter) for previewing seasonal textures and leaf fall.
Shade
Shading control.
LOD
LOD preview and level switching.
Scene / Scene Objects
Scene object management; you can place reference models, lights and cameras.
Viewport statistics
The top-left of the viewport shows live model statistics — your first-hand data for judging whether a model is too heavy. Using the sample above:
The polygon statistics overlay in the viewport. branches / caps / leaf meshes are counted separately, so you can see at a glance which kind of geometry the polygons are concentrated in
POLYGONS - MODEL
branches: 670,083 tris
caps: 437 tris
leaf meshes: 2,362,002 tris
TOTAL: 3,032,522
bones: 9
Leaves account for the overwhelming majority of the polygons (about 78%). This is exactly where SpeedTree optimization is fought: controlling leaf count and leaf mesh precision pays off far more than controlling branch segment counts.
Everything in SpeedTree is organized as a node tree. Understanding that tree is the key to mastering the software.
The three node roles
Root node (Tree) — there is exactly one, at the very top, holding global settings. It cannot be deleted or moved.
Generator — the nodes that actually produce geometry, such as Branch, Frond, Leaf Mesh and Cap. Each generator hangs under some parent and grows according to that parent's shape.
Helper nodes — nodes that do not directly produce the main geometry but provide reference or conversion capability, such as Target, Zone and Conversion-Tools.
Parent/child relationships and levels
The hierarchy of the node tree determines who grows on whom:
Level 0 is always the Tree root node.
Level 1 is usually the trunk.
Level 2 is the primary branches, Level 3 the secondary branches, and so on.
Leaves and fronds usually hang on twigs at Level 4 and beyond.
Measured data backs this structure up. Across the 77 official sample files on this machine, the level distribution for each generator is:
Generator
Levels observed
Notes
Tree
0
the single root node
Branch
1 – 7
from the trunk all the way down to 7th-order twigs
Cap
1 – 8
follows branch tips
Frond
1 – 8
palms and ferns can carry fronds at several levels
Leaf Mesh
1 – 11
the deepest level, because leaves hang on the tips
BatchedLeaf
1 – 8
batched leaves
Knot / Decal
1 – 6
surface decoration, follows the trunk and primary branches
MeshDetail
1 – 3
detail meshes, usually near the main trunk
The deeper the level, the more nodes, and the higher the cost. A typical broadleaf tree uses 4–6 levels of branches. Each added level can multiply the node count several times over. For game assets you usually switch to leaves or fronds after Level 4 to “fake” the remaining twigs.
The three node states
State
Appearance
How to switch
Normal
displayed and generated normally
—
Hidden
the node icon dims and no geometry is generated
context menu → Toggle visibility, or press H
Collapsed
all child nodes of this node are collapsed and no longer generated
the triangle arrow in front of the node
The node Actions menu
Select a node and click the Actions button, or just right-click, to see the full set of node operations. The actual menu items in v10.2.0 are:
Menu item
Shortcut
Purpose
Copy / Cut / Paste
Ctrl+C / Ctrl+X / Ctrl+V
copy, cut and paste nodes
Paste into
Ctrl+Shift+V
paste the clipboard node as a child of the current node
Duplicate
Ctrl+D
duplicate in place
Delete
Del
delete the node
Rename
—
rename (essential on complex models, or node names become impossible to tell apart)
All like selected
Shift+L
select all “same kind” nodes (instances of the same template)
All descendants
Shift+D
select all descendant nodes
All like selected at this level
—
select same-kind nodes at the same level
All like selected, same color
—
filter same-kind nodes by node color
Save selected as template...
—
save the current node and its subtree as a template (.stt) for reuse in other trees
Add geometry to selected
—
attach geometry to the selected node
Clear node edits
—
clear the manual edits on that node and return to a purely procedural state
Clear freehand edits
—
clear freehand strokes
Clear variances
—
clear all variance settings
All gaussian / uniform / blended / cohesive
—
batch-change variance types to gaussian/uniform/blended/cohesive
Randomize selected
—
randomize the selected node (or the whole tree if nothing is selected)
Toggle visibility
—
show/hide
Select and reveal hidden nodes
—
find and select all hidden nodes
Select nodes with edits
—
find all nodes that have been manually edited
Layout generators
—
auto-arrange the node tree layout
Make all generator names unique
—
batch-rename duplicate node names to unique ones
Upgrade legacy generator(s)...
—
upgrade nodes from older versions to the current version
Icon colors
—
set colors for node icons so they are easy to pick out in a complex tree
A SpeedTree parameter is not just “a number.” The same parameter can be a fixed value, a curve, or a range with a random distribution. Understanding this is what makes it clear why SpeedTree trees never look repetitive.
The four parameter forms
Form
Appearance
Purpose
Scalar Value
a single number field
Every instance uses the same value, for example “branch length = 1.2”.
Curve
a small graph with draggable control points
Makes a parameter vary along the parent position or the node's length. See the next section.
Variance
a second input field next to the value
Adds a random range to the parameter. The variance algorithm can be Gaussian (concentrated at the center), Uniform (even), Blended, or Cohesive (neighboring nodes stay consistent).
Random Seed
an integer
Determines the entire random sequence. Changing one number gives a completely different tree — the master switch for “one tree, many variations”.
A key insight about curves
The official documentation likens a curve to a parameter's “volume knob”: the parameter's static value is the maximum volume, the vertical position on the curve says what percentage of that maximum to take, and the horizontal position determines which part of the tree that value applies to. So before you touch the curve, set the static value to a sensible upper bound.
The six kinds of curve
SpeedTree distinguishes curve types by color. This is the most easily confused set of concepts, and the one most worth getting straight early on.
Curve
Color
Scope
Notes
Parent curve
green
a whole group of nodes
Distributes values by where the child nodes sit on the parent. Used to make different parts of the tree behave differently — for example, making branches at the bottom of the crown longer than those at the top. Evaluation can be set to Relative (relative to boundaries) or Absolute (relative to the parent's absolute length).
Profile curve
light blue
a single node
Acts along the length of a single node, and every node in the same generator is affected identically. The classic example is trunk taper: the left end corresponds to the branch base and the right end to the branch tip, so the branch tapers from thick to thin.
Distribution curve
orange
a whole group of nodes
Controls the density distribution of a fixed number of nodes — it does not change the total, only where they cluster. For example, concentrating most first-order branches at the base and the top of the trunk and leaving the middle sparse.
Pruning curve
—
a whole group of nodes
Each generator has only one. Removes nodes in bulk based on their position in the tree. Where the curve value is below 0.5, the nodes there are removed.
Resolution curve
—
VFX only
Changes parameter values along the curve when switching Resolution (High / Medium / Low / Draft). For example, automatically reducing branch segment counts at lower resolution.
LOD curve
dark blue
LOD property group only
Appears only in the LOD property group, controlling how each LOD property changes across the whole LOD transition. The left end always corresponds to the highest LOD (1.0) and the right end to the lowest (0.0). Linear is fine in most cases, so that each level simplifies by a similar amount.
Advanced parent curve usage: Parent Level
By default a parent curve evaluates against the immediate parent. Suppose a tree has four levels: Tree → Trunk → Big Branches → Little Branches.
To make the little branches smaller at the tip of a big branch → leave the parent level alone and edit the length curve directly (the default behavior).
To make the little branches smaller toward the top of the whole tree rather than at the tip of their big branch → change the curve's Parent Level from Big Branches to Trunk. This setting is in the drop-down at the top left of the curve editor.
To satisfy both conditions at once → use compound curves (supported since SpeedTree 8) and set a curve for each parent level in the curve editor.
Using the curve editor
The X axis is always parent position (0 = base of the parent, 1 = tip of the parent), never world coordinates.
Click on the curve to add a control point, right-click to delete one.
Drag the handles on either side of a control point to adjust tangents and make smooth transitions; hold Shift to break the handles for a hard corner.
By default a curve is the straight line between its two endpoints, that is, a constant value. To get “dense in the middle, sparse at both ends,” pull the midpoint upward.
Curves can be saved as presets and reused. The official samples ship curve presets such as Uniform.png, Variance.png and Parent_Curve.png.
How random seeds are split up
SpeedTree splits the random seed into several independent channels, so you can “change only branch positions and leave everything else alone”:
Seed
What it controls
Random Seeds:Generation
The random sequence for node generation position, count and orientation. Most used.
Random Seeds:Branch
Randomness of branch form (spine, curvature).
Random Seeds:Spine
Randomness of spine shape.
Random Seeds:Forces
Randomness of force application.
Random Seeds:LOD
Randomness of the LOD simplification process.
Random Seeds:Vertex colors
Randomness of vertex color noise.
Random Seeds:Welding
Randomness of vertex welding.
Practical technique: batch-producing variants
When you are making a forest, do not copy files and edit parameters. Instead: get the tree looking right → change only Random Seeds:Generation → save as a new file. The resulting set of trees shares exactly the same style and parameters and differs only in form, which is what makes them read as one species.
Searching parameters
The Search properties.. box at the top of the Properties panel filters parameters by name. Select a Branch and type wind and only the wind-related entries remain. On parameter-heavy nodes (a Branch has nearly 600 parameter entries) this is the only practical way to find anything.
Generation is the largest and most important parameter group on any generator. It answers one core question: how many child nodes are generated, where on the parent they sit, and which way they point. In measured data a Branch has 230 Generation parameters, a Leaf Mesh 215 and a Frond 169.
Generation parameters fall into two parts: the parameters unique to the selected mode, and the parameters shared by every mode.
2.1.1 Mode: ten distribution modes
Mode
Plain meaning
Official description
Typical use
Classic
classic
Exists only for compatibility with older models; new models should avoid it.
old files only
Proportional
by proportion
Creates nodes based on the parent's size; good for distributing nodes randomly over a parent.
Let long branches naturally grow more side branches
Proportional steps
proportional steps
Creates a series of steps, each containing several nodes. This style is common on pines.
Whorled branches on conifers
Absolute
absolute count
Creates an exact number of nodes, independent of parent size; use it sparingly. Typical uses are specifying a single trunk, or periodically reducing the node count.
A fixed 5 primary branches on a trunk
Absolute steps
absolute steps
Creates an exact number of steps, each with several nodes. It likewise does not adapt to parent size and should be used sparingly.
—
Phyllotaxy
leaf arrangement
Provides several common leaf growth patterns (alternate / opposite / whorled and so on).
Creates nodes at a fixed spacing along the parent, and applies very broadly.
Palm fronds evenly spaced along the trunk
Bifurcation
forking
Places nodes at the points where the parent turns, simulating how branches split. In the words of the documentation: “Bifurcation is often the simplest way to make a model look organically natural.”
Side branches landing exactly on fork points
Flood
flood
Creates an exact number of nodes and places them randomly along the parent.
Fast coverage
Parent
inherit from parent
Creates an exact number of nodes at the parent's origin.
Align children with the parent
2.1.2 Shared parameters: boundaries and distribution
Parameter
Purpose
Generation:First
The lowest position on the parent where nodes may be generated.
Generation:Last
The highest position on the parent where nodes may be generated.
Generation:Shared:Boundaries:Clip
Removes nodes pushed outside the First–Last range by Spread or Position variance. Only with this enabled are the boundaries “hard”.
Generation:Frequency
A parent curve controlling the distribution weight along the parent's length. Constant 1 by default.
Generation:Pruning
Pruning curve. Where the curve value is below 0.5, the nodes there are removed in bulk.
Generation:Knockout:Amount
Knockout amount. Randomly removes a portion after the mode has produced the nodes but before evaluation. It can be positioned by tree structure using a parent curve.
Generation:Knockout:+Resolution
Makes the knockout amount increase or decrease with Resolution.
Generation:Size scalar
Scales the size of a node and all of its children.
Generation:Masks
Specifies mask assets to restrict where nodes may appear.
2.1.3 Shared parameters: overall transforms
Parameter
Purpose
Generation:Rotation
Rotates all of the generator's nodes as a group around the parent spine. Add variance to scramble the orientation.
Generation:Position
Translates all nodes up or down along the parent.
Generation:Sink
Adjusts node origins as a group so that they sink into or pull away from the parent's surface. Commonly used to push the trunk slightly below ground level for easier scene placement.
2.1.4 Shared parameters: Extend parent
This group generates extra nodes at the tip of the parent branch, independently of the selected mode. If a Branch extends another Branch, the transition between them is seamless — you can extend level by level from the trunk all the way out to the twigs with no seams. This is how Cap generators are produced.
The feature requires that the parent is a Branch generator and the child is only a Branch, Cap, Leaf mesh or Batched leaf.
Type value
Meaning
None
No extension node is generated.
Any
Generates one node at each open end of the parent (a branch can split into two openings).
Split 1
Generates from the parent's first split (or its only opening).
Split 2
Generates from the parent's second split, if it exists.
Skinny
Generates from the thinner of the parent's two splits.
Fat
Generates from the thicker of the parent's two splits.
Breaks only
Generates only when the parent is broken.
Bottom
Generates a node extending the bottom of the parent.
Count controls how many extension nodes can hang on a single parent; it is usually set to 1. Several generators can extend the same parent — together with the split-related values (Split 1/2, Skinny/Fat) you can address each part of a split separately.
2.1.5 Shared parameters: force containers and mesh alignment
Parameter group
Purpose
Force containers: Include
Only nodes that fall inside the specified geometry force are created.
Force containers: Exclude
Nodes that fall inside the specified geometry force are not created.
Mesh alignment
Aligns the mesh to a specified direction. Only effective for Leaf mesh / Batched leaf and for nodes produced by click placement, and the parent must be a mesh. The options are None / Tangent / Binormal / Parent X,Y,Z / World X,Y,Z.
Click place
Controls how the generator responds to click placement in freehand mode: Ready (accepts any), None (accepts none), Any (takes priority), Number (only accepts the matching ID).
2.1.6 Active linked to Resolution
Generation:Shared:Active is a curve that switches a generator on and off by resolution: when the curve value is above 0.5 the generator is enabled, and below 0.5 it is disabled.
You can use it to swap whole generators at different resolutions. The official example is a good one:
Make one leaf texture and enable a single leaf at Draft and Low resolution;
enable the five-leaf version at Medium and High resolution.
That way a single model automatically adapts to different quality tiers without maintaining several files.
Suggested tuning order
When you face a new node, this order is the most efficient: ① Mode (which algorithm) → ② count (order of magnitude) → ③ Frequency curve (density distribution) → ④ Rotation / Sweep (direction) → ⑤ Jumble variance (break the regularity) → and only then touch mesh parameters like Segments.
Many beginners go straight for segment counts and still do not get the form right — because the form is decided by Generation; segments only decide how smoothly that form is represented.
打开工具栏的 Freehand 后,可以直接在视图里拖出枝条走向,SpeedTree 会把它转成脊线。相关参数是 Hand Drawn:New(新建)与 Hand Drawn:Resample(重采样,让手绘曲线更平滑)。手绘适合做主角树的关键枝条,但不要全树手绘——会失去程序化生成的最大优势。
Every Branch has a spine inside it — the centerline of the branch. The geometry is swept along that line, so the spine's shape determines the branch's shape. A Branch node has 70 Spine parameters, making it the second-largest group after Generation.
Core parameters
Parameter
Purpose
Range and experience
Spine:Length
Branch length as a proportion of the parent's length.
Between 0 and 1 means shorter than the parent; >1 means longer. Primary branches usually 0.3–0.6.
Spine:Style
Spine form style.
Different styles correspond to different curvature templates.
Spine:Shape
Shape curve. X = 0–1 along the spine, Y = lateral offset.
The most-used parameter. Pull the curve into an arc and the branch bends naturally. A straight line always looks fake; real branches have curvature.
Spine:Droop
Droop. Simulates gravity pulling the branch tip down.
Willows and palms need a large droop value; pines need almost none.
Spine:Jink
Jink. Creates irregular hard corners.
A small value (0.05–0.15) effectively breaks the “too smooth” fake look.
Spine:Noise
Noise. Adds random perturbation to the spine.
Makes the branch direction wobble slightly, which reads better up close.
Spine:Orientation
Spine orientation.
Controls which side the curvature bends toward.
Spine:Path
Path. A custom path in freehand mode.
For vines, roots and other free-form structures.
Spine:Prune
Spine pruning.
—
Spine:Break
Break. Simulates a snapped branch.
For dead wood and broken branches.
Spine:Match parent
Match parent.
Makes a child branch's curvature continue the parent's trend.
How Spine and Forces divide the work
Both groups can bend a branch, but the mechanism differs:
Spine:Shape is intrinsic — it directly defines the shape this branch grows into.
Forces is extrinsic — it simulates outside influences (gravity, wind, obstacles) on the branch, and its reach can cross levels.
Practical advice: use Spine:Shape first to set the basic arc, then use Forces for overall coherence. Spine alone makes every branch look like it grew in isolation; Forces alone makes it hard to precisely control any single branch.
Hand Drawn spines
With Freehand on the toolbar enabled, you can drag branch paths directly in the viewport and SpeedTree converts them into spines. The relevant parameters are Hand Drawn:New and Hand Drawn:Resample (resampling to smooth the hand-drawn curve). Hand drawing suits the hero tree's key branches, but do not hand-draw the whole tree — you would lose the biggest advantage of procedural generation.
Generation and Spine decide the form; Segments decides at what precision that form is expressed. This group maps directly to polygon count and is the main battleground for performance optimization.
Parameter
Purpose
Rule of thumb
Segments:Length
Number of segments along the branch's length.
Trunk 8–16; primary branches 4–8; twigs 2–4. Too few segments turns curvature into visible facets.
Segments:Radial
Number of segments around the cross-section.
Trunk 8–12; primary branches 6–8; twigs 3–4. Below 5 you clearly see polygonal edges.
Segments:Resolution
Overall mesh resolution — the master control over Length and Radial.
Faster to adjust than the two above separately.
Segments:Scalar
Segment scale factor.
—
Segments:Accuracy
Geometry accuracy.
Higher makes curved surfaces more precise at the cost of polygons.
Segments:Features
Feature preservation.
Which geometric features to keep when simplifying.
For example, a branch with Length=10 and Radial=8 is ≈ 10 × 8 × 2 = 160 triangles. If the tree has 200 such branches, that is 32,000 triangles — already close to the entire budget of a mid-range game tree.
Where do the polygons go?
Back to the real statistics from Broadleaf_Field.spm:
branches 670,083 tris / caps 437 tris / leaf meshes 2,362,002 tris / TOTAL 3,032,522
Leaves account for 78% of the polygons; branches only 22%. So the optimization order should be: reduce leaf count and leaf mesh precision first, and only then worry about branch segments. Many beginners grind away at trunk segments for negligible gain.
Segments change with LOD too
Branches and fronds can change their segment counts with LOD — even when the branch itself is kept in the tree, its geometric complexity can be reduced. You can set length segments and radial segments explicitly, or adjust the Optimization property to let the Modeler decide intelligently where to drop segments while preserving the overall shape as far as possible.
Note: reducing segments too aggressively (length segments in particular) causes visible popping. Switch the LOD preview to check before finalizing.
Forces is what makes SpeedTree trees look real. The biggest problem with procedural generation is that it is too regular: branches evenly spaced, growing perfectly straight, never intersecting. Forces break that regularity by simulating outside influences.
In measured data a Branch has 56 Forces parameters — more than any other generator. These are the force types actually present in v10.2.0:
Force
Plain meaning
Purpose
Forces:Gnarl
gnarl
The most important one. Gives branches irregular twisting. Real trees are almost never straight, thanks to growth competition, pests and prevailing wind. Start around 0.1–0.3.
Forces:Twist
twist
Rotates along the branch's own axis so the surface texture twists with it, adding a sense of movement.
Forces:Direction
directional force
Pushes branches in one fixed direction. Used for the “flag-shaped crown” caused by constant one-way wind.
Forces:Gravity
gravity
Pulls branches down. Unlike Spine:Droop, it acts on the whole subtree.
Forces:Curl
curl
Curls branch tips. Common on ferns and tendrils.
Forces:Repel
repulsion
A great anti-intersection tool. Pushes nodes apart. Intersecting foliage is a common procedural tree problem and this greatly reduces it.
Forces:Repulse
repulse
A variant of repulsion.
Forces:Attraction
attraction
Pulls branches toward a point.
Forces:Magnet
magnet
Snaps branches onto a specified object.
Forces:Mesh / Mesh 2 / Mesh 3
mesh force
Makes branches grow along the surface of an external model. Essential for vines crawling up walls or roots clinging to rocks. The official sample samples/Learning/Forces/Mesh_Crawling_on_Tree.spm demonstrates this.
Forces:Obstruction
obstruction
Makes branches grow around collision bodies, simulating being blocked by buildings or rocks.
Forces:Planar
planar
Flattens branches toward a plane, for vines that “hug a wall”.
Forces:Return
return
Pulls branches that have strayed too far back in, so the other forces do not fling them away.
Forces:Vine / Small Vines / Big Vine / Vines
vine forces
A force group dedicated to vines.
Forces:Roots / BigRoots
root forces
Dedicated to root growth.
Forces:Trunk
trunk force
—
Forces:Flooring
flooring
Keeps branches from passing below the ground plane.
Forces:Align
align
Makes branches converge on a common direction.
Forces:General Direction
general direction
Global direction control.
Forces:Bounce on me!
bounce
When on, the node bounces off collisions with other nodes. The name is casual, but it really is the official parameter name.
Forces:Allow forces
allow forces
The master switch. When off, the node is completely unaffected by any force. Check here first when wondering “why does my force do nothing”.
Three steps to make a tree stop looking fake
Add Gnarl: 0.1–0.3 immediately kills the straight-line look.
Turn on Repel: fixes foliage intersection and gives the crown room to breathe.
Give Jumble a non-zero value: in Generation, so child node positions are not perfectly regular.
After these three steps the “plastic” feel of a procedural tree is usually mostly gone, and the polygon count has not increased at all.
The reach of a force
A force affects the node it sits on plus all of that node's descendants. So:
To affect the whole tree, put it on the trunk.
To roughen only the tip twigs, put it on the last Branch level.
Multiple forces stack, and their effects add together.
Official force samples
The install directory samples/Learning/Forces/ contains complete force demo files; open them one by one and study them:
File
What it demonstrates
Attenuation.spm
force attenuation
Bounce.spm
bounce collisions
Geometry_Force.spm
geometry force
Mesh_Crawling_on_Mesh.spm
a mesh crawling on a mesh
Mesh_Crawling_on_Tree.spm
a mesh crawling on a tree
These samples come with reference models such as box.obj, sphere.obj, torus.obj, dica.obj and rook.FBX, so you can see exactly how a force “pushes” branches onto a model's surface.
SpeedTree's wind is not “an animation added to the model” — it bakes wind parameters into the vertex data, and after export the engine's SpeedTree runtime computes the swaying in real time. The payoff is small files, controllable results and low engine cost.
Wind parameters
Parameter
Purpose
Wind:Apply
Master switch. When off, the node takes no part in wind motion.
Wind:Weight
Wind weight, the core parameter. 0 = completely still, 1 = fully swaying with the wind.
Wind:Inherited weight scale
Multiplier for the weight a child inherits from its parent. Used to make tips sway harder than their parents.
Wind:Offset
Phase offset. Makes different branches sway out of sync; otherwise the whole tree rocks like a single board.
Wind:Level offset
Level offset. Automatically staggers phase by node level.
Wind:Rotation
Rotation response — the twist response of a branch about its own axis.
How to distribute weight
A real tree in wind: the trunk barely moves, primary branches sway slightly, twigs and leaves shake violently. So weight should increase with level:
Node
Suggested Wind:Weight
Trunk (Level 1)
0.02 – 0.08
Primary branches (Level 2)
0.10 – 0.20
Secondary branches (Level 3)
0.25 – 0.45
Tip twigs (Level 4+)
0.5 – 0.7
Leaves / fronds
0.7 – 1.0
Green vertex color channel = wind weight
SpeedTree's convention is to store wind weight in the green channel of vertex color (red holds AO, blue holds hidden information). So the noise you paint into Vertex Color:Green is literally what drives the wind motion. That is also why you switch to the Wind Weights render mode to debug wind.
Run the Wind wizard first
When the official documentation discusses wind, the one recommendation it repeats is: run the Wind wizard from the Tools menu first, then fine-tune by hand. The wizard assigns sensible weights by level automatically, which is much faster than hand-tuning from scratch and more likely to look natural.
Only one or two levels sway independently
This is the most misunderstood part of the wind system, and the most common reason wind “does not work”:
Whether motion is “independent” depends on the first generator with Wind:Apply enabled that you meet walking down from the Tree along any path. That generator determines what owns the independent motion — not the last one you edited.
The system gives independent motion to only one or two branch levels. So assign it to the thick primary branches coming off the trunk, and almost never to the trunk itself.
Pick the wrong level and you get either “I tuned it for ages and nothing happens” or “the whole tree rocks as one piece”.
How to confirm that wind is actually taking effect
With wind enabled, the Generation Editor shows a numeric overlay with each node's wind weight. The _Wind Weights/Level 1~4.fx render modes show it too. If you see no numbers, the Wind:Apply chain is broken somewhere.
The level relationship of motion speeds
Shared Motion (whole tree) < Branch Motion (branches) < Leaf Motion (leaves)
slow, large amplitude medium fast, small amplitude
Only the three layered together feel real. Also, the typical range for Wind:Independence is greater than 1.0 and less than 10.0.
The Fan object and anatomical weights
All wind properties live on a scene object called Fan rather than being scattered across the individual generators. The Fan's Actions menu contains Set anatomical weights, which assigns sensible weights for the plant's anatomy in one go — the fastest option short of hand-tuning.
In v10.2.0 wind is split into several independent algorithm groups by target engine, because their implementations differ and the parameters are not interchangeable — see the next section.
Wind does not loop
Wind animation is not inherently looping. If you need a seamless loop, enable AnimationWindLoop at export (already on by default in v10.2.0's export_presets/VFX/Wind.ini, with AnimationLength=5). If the wind speed differs much between the start and the end, the loop seam will be visible.
Wind when exporting to UE
When importing into UE with the .st9 format, wind is computed on the GPU inside the material, and the material has no strength parameter. So wind strength must be dialed in inside SpeedTree Modeler before export.
If a tree has multiple material instances, all of them must use the same set of values, or different parts of the same tree sway by different amounts and visibly “come apart”.
Engine-specific wind parameter groups
In v10.2.0 the wind parameters are split into groups by target engine, because the runtimes differ:
Parameter group
Target
Wind:Games
generic game-engine wind parameters
Wind:VFX
film-grade wind parameters (finer, bakeable)
Wind:Legacy UE4/Unity
compatibility parameters for older UE4 / Unity
Wind:Lumberyard
compatibility parameters for Amazon Lumberyard
The two wind systems: Shared Motion and Ripple Motion
The parameter tables also show these groups (they appear in export and runtime configuration):
Games Shared Motion / SDK Shared Motion / Global Motion — shared motion. The whole tree is moved as one by the wind: large amplitude, low frequency.
Games Ripple Motion / SDK Ripple Motion — ripple motion. High-frequency shaking at the leaf level: small amplitude, high frequency.
Only together do they feel real: the whole tree sways slowly while the leaves shake quickly. The _Wind Weights/Level 1.fx … Level 4.fx and Ripple.fx render modes exist to inspect these two weight sets separately.
Wind-related export presets
export_presets/VFX/Wind.ini is the preset dedicated to baking wind animation. It outputs wind data that a renderer can consume directly, rather than the vertex attributes a game runtime uses.
Standard_Grass(草):4 个属性,其中 blend_and_ao_packed 把混合与 AO 压进同一个字节。草的数量极大,所以压缩更激进。
混合遮罩(Blend Masks)
安装目录 blend_masks/standard/ 提供了官方混合遮罩,用于两张贴图之间的过渡:
遮罩
适用
Default_1 / Default_2
通用
Blend_1 / Blend_2
平滑过渡
Chunky_1 / Chunky_2
块状过渡,适合树皮的斑驳
Mottled_1 / Mottled_2
斑点状,适合苔藓
Palm_1 / Palm_2
棕榈专用
Pine_1
松树专用
也可以把自己做的遮罩放进 blend_masks/custom/ 目录。
A SpeedTree material is a collection of texture channels. Understanding what each channel stores is a prerequisite for good vegetation.
Texture channels at a glance
Channel
Parameter name
Content
Notes
Color
Material:Color
base color / albedo
the intrinsic color of bark and leaves.
Normal
Material:Normal
normal
surface bump detail. Bark relies almost entirely on this.
Height
Material:Height
height
used for parallax mapping to create a sense of depth.
AO
Material:AO
ambient occlusion
deepens shadow in crevices so bark cracks read more strongly.
Opacity
Material:Opacity
opacity
required for leaves. It is what cuts a leaf shape out of a square card.
Gloss
Material:Gloss
glossiness
how sharp the specular highlight is. Young leaves are glossier than old ones.
Specular
Material:Specular
specular intensity
—
Metallic
Material:Metallic
metallic
usually 0 for plants, but usable for special effects.
Subsurface
Material:Subsurface
subsurface color
the color transmitted through a backlit leaf, usually a warm yellow-green.
Subsurface Amount
Material:Subsurface Amount
subsurface strength
the key to translucent leaves. Without it leaves look like plastic sheets.
Custom / Custom2
Material:Custom / Custom2
custom channels
for storing extra masks, variation maps and so on.
Vertex Displacement
Material:Vertex Displacement
vertex displacement
actually moves mesh vertices for physical bark relief, as opposed to a normal map, which only affects lighting.
Texture packing
At export, SpeedTree merges several channels into the RGBA channels of a single texture to reduce texture count. v10.2.0 ships these packing schemes:
Scheme
Texture0
Texture1
Texture2
Standard
_Color
_Normal
_SS (subsurface)
UnrealEngine
_Color (alpha channel holds opacity)
_Normal
_Subsurface
Unity
Unity-specific packing
Lumberyard
Lumberyard-specific packing
Unpacked
no packing; each channel gets its own map (handy for post-processing)
The UE scheme's MipGenerationFlag="AlphaIsOpacity" means: when generating mipmaps, the alpha channel must be treated as opacity (so leaf edges do not darken at distance). This is a classic UE vegetation pitfall, and SpeedTree already handles it in the packing configuration.
Vertex packing
Vertex data is compressed at export too. These are the real vertex layouts in v10.2.0:
As you can see: normal, binormal, tangent and AO each take 1 byte; wind weight, direction, phase offset and ripple each take 1 byte. The wind data for the whole tree uses only two 32-bit words — this is why SpeedTree is so efficient.
Standard_Billboard: only 2 attributes, with the normals folded into the spare bits of position and UV — extremely compressed.
Standard_Grass: 4 attributes, where blend_and_ao_packed squeezes blend and AO into the same byte. Grass appears in enormous quantities, so the compression is more aggressive.
Blend masks
The install directory blend_masks/standard/ provides official blend masks for transitions between two textures:
Mask
Use
Default_1 / Default_2
general purpose
Blend_1 / Blend_2
smooth transitions
Chunky_1 / Chunky_2
chunky transitions, good for mottled bark
Mottled_1 / Mottled_2
speckled, good for moss
Palm_1 / Palm_2
palm-specific
Pine_1
pine-specific
You can also drop your own masks into blend_masks/custom/.
A normal map only changes lighting calculations; the silhouette stays smooth and the trick falls apart when seen from the side. Displacement really moves vertices, so the silhouette changes too — but it needs enough mesh density (Segments:Length and Radial must be high enough) or the effect will not show. Use displacement for close-ups and normal maps for distance.
UV Mapping
Parameter
Purpose
UV Mapping:Style
UV unwrap method. Different methods determine how bark texture wraps around a branch.
UV Mapping:U / V
Tiling count in U/V. U controls how many times the texture repeats around the circumference, V how many times along the length.
UV Mapping:Tiling
Master control for tiling.
UV Mapping:Create seams
Whether to create UV seams. Seams are needed to unwrap for texture painting.
UV Mapping:Seams seed
Random seed for seam placement.
Checking UVs and texel density
Two render modes exist specifically for checking UVs:
Texcoord.fx — displays UV coordinates directly (red/green gradient), so flipped or stretched UVs are obvious at a glance.
Texcoord_Seams.fx — highlights UV seam positions.
Texel_Density.fx — texel density check. Shows by color whether texture precision is consistent across regions. If the trunk and the twigs differ too much in texel density, the same texture will look blurry on the twigs. This check is mandatory for game assets.
2.8 Leaves 叶片参数
2.8 Leaves Parameters
叶片决定了树冠的观感,也占了绝大多数面数。SpeedTree 里做叶片有三个节点可选:
节点
形态
面数
适用
Leaf Mesh
平面卡片或真实网格
中
主流选择,可做出卷曲、翻折等立体感
Batched Leaf
批量打包的叶片
低(渲染开销小)
密集树冠、移动端
Leaf
最简卡片
最低
远景、大规模植被
Frond
一整片羽状复叶
低(效率最高)
棕榈、蕨类、苏铁
Leaves 参数组
参数
作用
Leaves:Type
叶片类型(卡片 / 网格)
Leaves:Size X / Size Y
叶片的宽与长。这两个值要和贴图里叶子的长宽比匹配,否则会拉伸。
Leaves:Scale
整体缩放。
Leaves:Rotation
叶片旋转。配合方差让每片叶子朝向不同。
Leaves:Bend
弯曲。让叶片沿叶脉弯折。
Leaves:Fold
对折角度。让平面卡片沿中轴对折成"V"形,是让卡片叶子有立体感最省事的方法。
Leaves:Twist
扭转。叶片绕自身长轴旋转。
Leaves:Flutter
颤动。叶片在风中的额外抖动。
Leaves:Align
朝向对齐。
Leaves:Spread
散布。叶片离枝条轴线的距离。
Leaves:Distribution
分布曲线。控制叶片沿枝条的疏密。
Leaves:Start angle
起始角。
Leaves:Orientation
朝向控制。
相关参数组
参数组
作用
Local Orientation
局部朝向。让叶片相对父级的朝向偏移。
Deformation
形变。让叶片在风中发生形变。
Sensitivity
敏感度。对光照/风的响应敏感度。
Final Adjustments
最终调整。导出前的最后微调。
Shade Pruning
着色修剪。按受光情况剔除叶片。
Lighting:Translucency
叶片透光。让阳光透过叶子。
叶片调参口诀
尺寸先对:Size X/Y 与贴图长宽比一致,不然怎么调都别扭。
给点 Fold:0.1~0.3 的对折让卡片立刻有立体感。
Rotation 加方差:没有两片叶子朝向完全相同。
开 Subsurface Amount:这是叶片“活”起来的关键,别省。
用 Frequency 曲线做疏密:枝条根部留空、中上部密。
Leaves define how the crown reads and account for the vast majority of the polygons. SpeedTree offers three node types for leaves:
Node
Form
Polygons
Use
Leaf Mesh
flat card or real mesh
medium
the mainstream choice; can be curled and folded for a 3D feel
Batched Leaf
batched, packed leaves
low (cheap to render)
dense crowns, mobile
Leaf
the simplest card
lowest
distance, large-scale vegetation
Frond
a whole pinnate compound leaf
low (most efficient)
palms, ferns, cycads
The Leaves parameter group
Parameter
Purpose
Leaves:Type
Leaf type (card / mesh)
Leaves:Size X / Size Y
Leaf width and length. These must match the leaf's aspect ratio in the texture, or it will stretch.
Leaves:Scale
Overall scale.
Leaves:Rotation
Leaf rotation. Pair it with variance so every leaf faces differently.
Leaves:Bend
Bend. Bends the leaf along its midrib.
Leaves:Fold
Fold angle. Folds a flat card along its center axis into a “V” — the cheapest way to give card leaves a 3D feel.
Leaves:Twist
Twist. Rotates the leaf about its own long axis.
Leaves:Flutter
Flutter. Extra leaf shake in the wind.
Leaves:Align
Orientation alignment.
Leaves:Spread
Spread. Distance of leaves from the branch axis.
Leaves:Distribution
Distribution curve. Controls leaf density along the branch.
Leaves:Start angle
Start angle.
Leaves:Orientation
Orientation control.
Related parameter groups
Parameter group
Purpose
Local Orientation
Local orientation. Offsets leaf orientation relative to the parent.
Deformation
Deformation. Lets leaves deform in the wind.
Sensitivity
Sensitivity. Response sensitivity to light and wind.
Final Adjustments
Final adjustments. The last tweaks before export.
Shade Pruning
Shade pruning. Removes leaves based on how lit they are.
Lighting:Translucency
Leaf translucency. Lets sunlight pass through the leaves.
The leaf tuning checklist
Get the size right first: Size X/Y matching the texture's aspect ratio, or nothing else will feel right.
Add some Fold: 0.1–0.3 of fold instantly gives cards a 3D read.
Add variance to Rotation: no two leaves face exactly the same way.
Turn on Subsurface Amount: this is what brings leaves to life — do not skimp on it.
Use the Frequency curve for density: bare at the branch base, dense toward the top.
SpeedTree uses vertex color channels to carry extra information — that is how it packs “shape data” and “runtime data” together. Each of the three channels has a convention:
Channel
Parameter
Stores
Use
Red (R)
Vertex Color:Red
ambient occlusion (AO)
Darkens branch bases and the inside of the crown; the main source of volume.
Green (G)
Vertex Color:Green
wind weight
Directly determines wind amplitude. Works together with Wind:Weight.
Blue (B)
Vertex Color:Blue
hidden / culling information
Controls which parts hide under particular conditions.
Hidden Green
Vertex Color:Hidden Green
green channel value in the hidden state
—
How to view it
Use the _Vertex Colors group of render modes:
___Color.fx — shows the full RGB vertex color.
__Red.fx — red channel only, that is, AO.
_Green.fx — green channel only, that is, wind weight.
Blue.fx — blue channel only.
Why AO matters so much
Without any occlusion information, a procedurally generated tree is as bright inside the crown as outside, and it looks like “a pile of floating paper”. Bake AO into the red channel of vertex color and:
branch junctions darken naturally.
the inside of the crown darkens, creating volume.
the whole tree gains a sense of weight.
SpeedTree computes this AO automatically and you generally do not paint it by hand, but make sure vertex color is enabled at render time.
Painting vertex color by hand
The toolbar provides vertex color brushes. The relevant icons (in app_data/Property Bar/) are:
Tool
File
Purpose
vertex color brush
vertexcolor_brush_icon.png
paint vertex color directly on the model
vertex edit
vertex_edit_icon.png
edit individual vertices
vertex brush
vertex_brush_icon.png
affect vertices in bulk
displacement brush
displacement_brush_icon.png
push vertices by hand to deform the mesh
bend brush
bend_brush_icon.png
bend branches by hand
Manual edits are reversible
All manual edits are recorded on the node and can be cleared in one step with Actions → Clear node edits, returning to a purely procedural state. So there is no risk of “painting yourself into a corner”. This is also SpeedTree's advantage over pure modeling tools: procedural is the foundation, manual work is the decoration, and you can switch between them at any time.
SpeedTree ships a large set of “debug render modes” for inspecting the model's various data channels. This is the fastest way to diagnose problems — when something is wrong, switch render modes and look at the data; it beats tuning parameters blindly.
Below are all the modes that actually exist in the v10.2.0 install directory render_modes/, listed by official group:
Lighting modes (_Lighting)
Mode
Purpose
____Untextured.fx
no texture; geometry and lighting only
__Diffuse.fx
diffuse contribution only
__Specular.fx
specular contribution only
__Subsurface.fx
subsurface scattering contribution only
_Direct.fx
direct light only
Ambient.fx
ambient light only
Shadow.fx
shadows only
Material channel modes (_Material)
Mode
What it checks
____Color.fx
color map
____Opacity.fx
opacity. Checks whether leaf alpha is clean.
___Normal.fx
normal map
___Gloss.fx
glossiness
___Specular.fx
specular
__Metallic.fx
metallic
__Subsurface.fx
subsurface color
_Subsurface Amount.fx
subsurface amount
Custom.fx / Custom2.fx
custom channels
Height.fx
height map
Vertex color modes (_Vertex Colors)
Mode
What it checks
___Color.fx
full vertex color
__Red.fx
red channel = AO
_Green.fx
green channel = wind weight
Blue.fx
blue channel = hidden information
Wind weight modes (_Wind Weights)
Mode
What it checks
Level 1.fx ~ Level 4.fx
shared wind weight distribution per level
Ripple.fx
ripple (high-frequency leaf shake) weight
Other modes
Mode
Purpose
____Phong.fx
Phong lighting model
___Blinn-Phong.fx
Blinn-Phong lighting model
___Oren-Nayar.fx
Oren-Nayar diffuse model, good for rough surfaces
__Lambert.fx
Lambert diffuse
_Flat.fx
flat shading; the best way to read a silhouette
_Snow.fx
snow accumulation preview
Billboard_Subsurface_Amount.fx
billboard subsurface amount
Depth.fx
depth map
Face_Normal_Check.fx
face normal check, for finding flipped faces
Matcap.fx
Matcap preview; great for reading form
Overdraw.fx
overdraw check. Brighter color means that area is drawn over more times — an important basis for optimizing leaf layout.
Texcoord.fx
UV coordinate display
Texcoord_Seams.fx
UV seam display
Texel_Density.fx
texel density check, for consistent texture precision
Common top-level modes
Mode
Purpose
_____Standard.fx
standard render (default)
____Scribed.fx
scribed/outline render
___AO.fx
AO only
__Albedo_Check.fx
albedo check
__Saturation_Check.fx
saturation check, for colors outside a sensible range
__Subsurface_Check.fx
subsurface check
_Lightmap.fx
lightmap preview
The three checks worth making a habit
Overdraw — a bright patch inside the crown means heavy leaf stacking there; it will flicker in wind and cost a great deal of performance.
Texel_Density — abrupt color changes mean inconsistent texture precision between trunk and twigs, so the bark on the twigs will look blurry.
Face_Normal_Check — black faces in the engine after export are usually flipped normals, and this shows them directly.
Vegetation needs collision in games: players bump into trunks, bullets get blocked, and physics objects have to be able to hang on trees. SpeedTree provides several levels of collision.
Parameter group
Purpose
Collision:Type
Collision body type.
Collision:Collision
Whether to generate collision for this node.
Collision:Radius
Collision radius. Usually slightly larger than the actual geometry so characters do not end up right against the trunk.
Leaf Collision:Type
Leaf collision type. Leaves generally do not generate collision, but it can be needed when walking through shrubs.
Leaf Collision:Radius
Leaf collision radius.
Proxy Collision
On the Tree root node, generates a simplified collision proxy for the whole tree.
Collision strategy by level
Do not generate collision for every branch — the polygon count would explode. A sensible approach:
Level
Collision strategy
Trunk (Level 1)
Generate cylindrical collision with a radius of 1.0–1.1× the trunk's actual radius
Primary branches (Level 2)
Generate only for the thick primary branches, or ignore them entirely
Twigs / leaves
Do not generate. Use the Proxy on the Tree root node to wrap the whole tree
There are two dedicated collision nodes: Proxy (collision proxy) generates a low-poly collision body that hugs the trunk, and Cage (collision cage) generates a simplified shell enclosing the whole tree. Their icons are generator_proxy.tga and generator_cage.tga respectively.
Exporting collision bodies
Collision bodies do not appear in the engine automatically. You must tick the corresponding option at export, or enable “generate collision” in the UE/Unity import settings. UE's SpeedTree importer reads the collision geometry tagged inside the model.
SpeedTree lets you define all four seasons inside a single tree and switch between them with material offset. The official samples samples/Learning/Seasons/Seasons.spm and samples/Learning/Material_Offset_Seasons/Material_Offset_Seasons.spm demonstrate the whole workflow.
Season parameters
Parameter
Purpose
Season:Time scale
Season time scale. Controls how quickly this node changes with the season.
Season:Start offset
Start offset. Makes different nodes start changing color at different times.
Season:Descendant offset
Descendant offset. Makes the subtree change slightly later than its parent, producing the natural “color spreading from the outside inward” transition.
The seasonal texture naming convention
In the official sample directory Material_Offset_Seasons/Leaves/ you can see the texture set actually used:
EasternRedbud_front_1.png base (summer)
EasternRedbud_front_1_spring.png spring
EasternRedbud_front_1_summer.png summer
EasternRedbud_front_1_fall.png fall
EasternRedbud_front_1_winter.png winter
EasternRedbud_front_1_Opacity.png opacity
EasternRedbud_front_1_Normal.png normal
EasternRedbud_front_1_Subsurface.png subsurface
The same naming convention is used in samples/Games/Palm/Clusters/Whole_Frond_Cluster/ (Palm_Cluster_2_Summer, _Winter and so on).
Three ways to do material offset
The sample directory ships three diagram images, one for each way the change can vary:
File
Meaning
Uniform.png
The whole tree changes color uniformly
Variance.png
Color change with random variation (more natural)
Parent_Curve.png
Color change rhythm driven by a parent curve
The Variance approach is recommended: real autumn does not turn every leaf yellow at the same moment — some go first and some follow later.
Key points for autumn color
Start with a clean summer leaf texture as the base.
Prepare autumn/winter versions of the Color map, keeping exactly the same alpha channel.
Use Season:Descendant offset so the outer crown changes color first.
For winter you can lower Opacity or simply hide the leaf nodes to reveal the branches.
Growth makes a plant “grow out”. It is not a simple scale-up: it unfolds level by level in branch growth order, producing an animation that really reads as a plant growing.
Parameter
Purpose
Growth:Timing
Growth timing. Controls at what point in the overall animation this node starts growing.
Growth:Speed scale
Growth speed. Different nodes can grow at different speeds.
Growth:Radius
Growth radius. Branches thicken from thin to thick as they grow.
Growth:Unfurl
Unfurl animation. The process of a leaf opening out from a curled state.
Growth:Noise
Growth noise. Makes growth non-uniform, which looks more natural.
Growth:Smoothing
Smoothing. Softens the growth transition.
Growth:Mapping
Growth mapping. Controls how the growth animation data is distributed.
Growth:Allow extension control
Allow extension control.
Official growth samples
File
What it demonstrates
samples/Learning/Growth/Sapling_Growth.spm
sapling growth
samples/Learning/Growth/Trellis_Growth.spm
growth along a trellis (with trellis.fbx and trellis_ao.png)
Exporting growth animation
export_presets/VFX/Growth.ini is the export preset dedicated to growth animation. Growth animation is usually exported as Alembic (.abc) for downstream rendering in Houdini, Maya or Blender. Note that growth animation is baked frame by frame, so the files are fairly large — use it only for close-up shots.
Skin solves the geometry problem at branch junctions. When two branches meet, simply pushing two cylinders into each other produces intersections, broken faces or an obvious hard edge at the seam. Skin is responsible for making the junction transition smoothly.
Parameter
Purpose
Skin:Type
Skin type. Different algorithms suit branches of different thickness.
Skin:Radius
Skin influence radius. The larger the radius, the wider the transition region.
Skin:Smooth
Degree of smoothing.
Skin:Welding
Welding. Merges vertices at the junction to eliminate cracks.
Skin:Splits
Split handling. Controls how geometry is generated at a fork.
Skin:Squash
Squash. Flattens the junction slightly, which better matches real trunk form.
Skin:Subdivision
Subdivision. Adds geometry density at the junction.
Skin:Roll
Roll.
Skin:Visibility
Visibility control.
Skin:Intersection
Intersection handling. Controls the result when geometry passes through itself.
Skin:Light seam reduction
Light seam reduction. Removes lighting discontinuity at the seam so you do not get a bright or dark line.
Skin is a heavy parameter group unique to Branch
In measured data a Branch has 48 Skin parameters, while leaf-type nodes such as Frond and Leaf Mesh have no such group at all — because only woody structures have branch junction problems.
2.15 Resolution 与 LOD
2.15 Resolution and LOD
这是两组用途完全不同的机制,官方文档有一句关键提示:
自动 LOD 用于实时(游戏);VFX 请改用 Resolution。
2.15.1 两套机制的分工
Resolution 分辨率
Level of Detail(动态 LOD)
面向
VFX / 影视
实时 / 游戏
形态
同一模型的几个固定质量档位
随距离平滑连续地简化
档位
High / Medium / Low / Draft
连续过渡,无离散级别跳变
控制方式
Resolution 曲线(每个参数一条)
LOD 曲线(在 LOD 属性组里)
导出
VFX 导出按选定分辨率输出
Games 导出烘焙出多个 LOD
2.15.2 Resolution 分辨率(VFX)
Resolution 让同一个模型拥有四个质量状态。大多数与面数相关的属性都带有一条 Resolution 曲线——例如某属性在 High 下是 60 段,在 Medium 下曲线取值 0.75,就变成 45 段。
These are two mechanisms with completely different purposes, and the official documentation has one key note about them:
Automatic LOD is for real time (games); for VFX use Resolution instead.
2.15.1 How the two mechanisms divide the work
Resolution
Level of Detail (dynamic LOD)
Aimed at
VFX / film
Real time / games
Form
A few fixed quality tiers of the same model
Simplification that is smooth and continuous with distance
Tiers
High / Medium / Low / Draft
Continuous transition, with no discrete level popping
Control
Resolution curves (one per parameter)
LOD curves (inside the LOD property group)
Export
VFX export outputs the selected resolution
Games export bakes out several LODs
2.15.2 Resolution (VFX)
Resolution gives a single model four quality states. Most polygon-related properties carry a Resolution curve — for example, if a property is 60 segments at High and the curve reads 0.75 at Medium, it becomes 45 segments.
There are two more thorough uses:
Generation:Shared:Active — enables or disables generators in bulk by resolution. A curve value >0.5 enables them, <0.5 disables them.
Generation:Knockout:+Resolution — increases or decreases the node knockout amount by resolution.
A suggested working habit: model at High, save the model as Medium, and switch to Draft for heavy editing.
2.15.3 Dynamic LOD (games)
SpeedTree's LOD is dynamic — it changes smoothly with distance rather than hard-switching between a few discrete levels. This is precisely its greatest advantage over conventional LOD: you do not see obvious popping.
Two ways to enable it (either one will do):
Tree Window toolbar → LOD → tick Dynamic LOD;
Tree generator properties → Dynamic LOD group → tick Enable.
Once enabled the LOD indicator becomes editable. The default is Manual mode, where dragging the arrow changes the LOD by hand so you can watch the polygon count change; switch to Screen Area mode and the further the camera moves away, the simpler the tree becomes automatically.
What happens during a transition
This is the key to understanding SpeedTree LOD. During a transition, parts of the tree are intelligently removed to reduce complexity while keeping the transition seamless. It does this by analyzing the tree and finding the parts that are hidden inside. A part that is about to be removed first shrinks until it is invisible, and only then is it deleted entirely in the next stage.
Geometry type
Transition behavior
Branches
First shrink into their own spine, then disappear.
Leaves
Some leaves shrink away, while the leaves that remain grow larger, to preserve the crown silhouette.
This leads to a very important corollary: a branch hidden by LOD is only “invisible”; the leaves on it are still kept. So reducing the branch count is not the same as reducing the leaf count. Conversely, if you want a low LOD to genuinely save polygons, you must handle the leaves as well.
Two levels of LOD control
Global level — the Tree generator's Dynamic LOD group contains a set of LOD curves that control how much each kind of geometry is reduced across the whole LOD transition (one curve each for branches, leaves, decorations and so on).
Individual generator level — every generator has its own LOD-related parameters:
Parameter
Purpose
Dynamic LOD:Weight
Important. Affects what gets removed. Branch removal is based on its size and on how well it is “hidden” in the tree; Weight influences that calculation — a branch with a higher weight wins over one with a lower weight and stays in the tree.
Grow Scale
Controls how much the surviving leaves grow.
Jumble
Adds noise to the removal of interior leaves.
Optimization
Lets the Modeler decide intelligently where to drop segments while preserving shape.
Mesh Index
Mesh LOD: as that LOD curve descends, progressively switches to lower-quality mesh versions.
Grow Scale and Jumble are the key to preserving the silhouette
Leaves do not merely “shrink and vanish” during an LOD transition; the ones that remain also grow. Without tuning Grow Scale the tree visibly thins out at distance. Jumble, meanwhile, avoids a common problem: leaves inside the crown tend to be flagged for removal first, which can hollow out the interior and leave only a shell. A little Jumble noise softens that “empty shell” feel.
The mesh LOD and Mesh Anchors trap
Where meshes can be used (leaves, fronds and so on), you can switch to a lower-quality mesh version as the LOD changes. Mesh LOD levels are set in the Mesh Asset Bar, and as the LOD curve on the Mesh Index property descends, progressively lower mesh levels are selected.
Trap: like reducing segments, mesh LOD also causes visible popping and needs to be avoided carefully. If you use mesh anchors to place child nodes, the problem is worse — if the mesh anchors move with the LOD, the whole tree's appearance can change dramatically.
Billboard
Enabling billboards appends one level at the end of the LOD sequence: photographs of the tree taken from several viewpoints are assembled into a billboard atlas, and at render time only the views facing the camera are shown. This is the key to vegetation performance — a distant tree may occupy only a few dozen triangles.
Related controls: Billboard start (from which level billboards begin), Billboard end, Screen area scale. At export there are also Faces, Top down, Top down height % and other options.
For reference, the measured defaults: the Unity preset has BillboardCount=8, BillboardTopDown=true, BillboardTopDownHeight=0.5; the SpeedTree Runtime SDK preset has BillboardCount=12.
The SpeedTree Modeler model file. Essentially gzip-compressed XML, recording the complete node tree and all parameter values.
.stt
SpeedTree Template. Also compressed XML, but it stores “a set of nodes” rather than a complete model.
.stmat
Material file.
.xml
SpeedTree XML format, an uncompressed interchange format that is convenient for procedural processing and version comparison.
A useful trick: read a .spm as text
Because .spm is gzip-compressed XML, you can decompress it and read it directly in a text editor. Every parameter name and value is plain to see. This is extremely useful when investigating “why do these two files behave differently” — just diff the two XML files to find the parameter that differs. Every parameter name in this tutorial was extracted and verified from the official samples this way.
Built-in templates (tree_templates/)
The templates in the install directory are the fastest way to get started. The real template list in v10.2.0:
Games templates (game-oriented, with polygon counts and LOD already optimized):
Template
Use
Blank.spm
An empty file containing only a Tree root node. Use this to start completely from scratch.
Broadleaf.spm
Broadleaf tree. The most general starting point.
Conifer.spm
Conifer (pine, fir).
Palm.spm
Palm.
Cluster.spm
Leaf cluster, for assembling complex crowns.
Grass.spm
Grass.
Plant.spm
Small plants.
Stump.spm
Tree stump.
Vine.spm
Vine.
VFX templates (film-oriented, finer geometry, with hand-drawn and shape controls):
Template
Use
__Broadleaf.spm
broadleaf tree (VFX version)
_Conifer.spm / Pine.spm
conifer / pine
Palm.spm
palm
__Bush.spm
shrub
_Grass.spm / Grass Weeds.spm
grass / weeds
_Flower.spm
flower
_Plant.spm
small plant
_Stump.spm
stump
_Vine.spm
vine
Sapling.spm
sapling
Base_Split.spm
split root base
Base_Umbrella.spm
umbrella root base
Base_Weathered.spm
weathered root base
Hand_Drawn_Subd.spm
hand drawn + subdivision
Shape_Controlled.spm
shape controlled
Built-in combined templates (templates/combined/)
These are node-level “part templates” that can be dragged straight into the node tree. The leading underscores in the file names indicate their indentation level in the menu:
UV:调 UV Mapping:U / V 让树皮纹理比例正确,用 Texel_Density.fx 检查。
置换:加 Displacement:Amount,近景才开。
装饰:加 Knot(节疤)、Decal(苔藓)增加故事性。
阶段七:风与 LOD
按层级递增设置 Wind:Weight,用 _Wind Weights 模式检查。
在 Tree 根节点设置 Level of Detail:Count,逐级降面。
设置 Billboard start,让远处用公告板。
加碰撞(Collision:Radius 或 Proxy)。
阶段八:导出与验证
选对应引擎的导出预设。
导出后在引擎里实际观察:LOD 切换是否跳变、风动是否自然、贴图有没有丢。
用引擎的性能分析工具确认 draw call 与面数符合预期。
A fairly finished SpeedTree model as it appears in the viewport (the viewport portion of the official sample Broadleaf_Field.spm). Note the variation in crown density, the natural curvature of the branches, and the bare trunk at the base
A complete vegetation production workflow has roughly eight stages. Whether you are making a tree, a shrub or grass, the same skeleton applies.
Stage 1: Set the goal
Before you start, be clear about three things; they determine the direction of every parameter that follows:
Question
Impact
Use: game or film?
Games need LOD, collision and a strict polygon budget; film can go to millions of polygons and output Alembic.
Viewing distance: close-up hero shot, or distant filler?
Close-ups need displacement and leaf meshes; distance is fine with card leaves and billboards.
Polygon budget: how many polygons per tree?
Mobile 2k–10k per tree; PC games 15k–60k; film unlimited. Keep to that number from the moment you start modeling.
Stage 2: Choose a starting point
Starting point
When to use it
tree_templates/Games/Blank.spm
Completely from scratch. You learn the principles best, but it is the slowest route.
The template for your species (Broadleaf / Conifer / Palm…)
Recommended. It already has a sensible node structure, so you just change parameters — by far the most efficient.
Open an official finished sample and save it under a new name
For learning. You can see how a mature project is configured.
Stage 3: Fix the scale
In SpeedTree 1 unit = 1 meter (adjustable in the Units settings). Decide the tree's real height first, or every parameter afterward is guesswork and the export will be the wrong size in the engine.
Plant
Real height reference
Grass
0.1 – 0.6 m
Shrub
0.8 – 3 m
Small tree / sapling
3 – 6 m
Broadleaf tree
10 – 25 m
Conifer
15 – 40 m
Palm
5 – 20 m
SpeedTree has a human-height indicator in the viewport for checking scale quickly. The equivalent values given in the official documentation are:
Unit
Value for the human figure indicator
Meters (m)
1.8
Centimeters (cm)
182
Feet
6
Inches
72
Yards
2
Set the indicator to the matching value above and it represents a person 1.8 m tall. Comparing tree height against it is far more reliable than eyeballing.
Stage 4: Build the skeleton
Work on branches only at first, with leaves turned off. The goal of this stage is to make the bare tree look plausible on its own:
Adjust the trunk Branch's Spine:Length and Spine:Shape so it has natural taper and curvature.
Adjust Generation:Mode and the count so the primary branches are distributed sensibly.
Add Forces:Gnarl to break the regularity.
Add child Branches level by level, confirming each level looks right before adding the next.
Key habit: check the silhouette first
Switch to the Other/_Flat.fx flat-lighting render mode and the model becomes a solid-color silhouette. If the silhouette already reads as that tree, the skeleton is right; if the silhouette looks wrong, no amount of leaves will save it.
Stage 5: Add leaves
Add a Leaf Mesh / Frond under the tip twigs.
Place just one leaf first and get its size, orientation and fold angle right.
Then adjust the count and the distribution curve to turn it into a cluster.
Use the Overdraw render mode to check for serious stacking.
Stage 6: Surface detail
Material: assign the Color / Normal / Opacity / Subsurface maps and so on.
UV: adjust UV Mapping:U / V so the bark texture scale is correct, and check it with Texel_Density.fx.
Displacement: add Displacement:Amount, enabled only for close-ups.
Decoration: add Knots (knots) and Decals (moss) to give the tree a story.
Stage 7: Wind and LOD
Set Wind:Weight increasing with level, and check it with the _Wind Weights modes.
Set Level of Detail:Count on the Tree root node and reduce polygons level by level.
Set Billboard start so distance uses billboards.
Add collision (Collision:Radius or a Proxy).
Stage 8: Export and verify
Choose the export preset for your engine.
After export, look at it in the engine: does the LOD switch pop, does the wind look natural, are any textures missing.
Use the engine's profiling tools to confirm the draw calls and polygon counts match expectations.
Importing with these scripts preserves the wind and LOD information, which works better than importing the FBX directly.
Pre-export checklist
Check
How to check it
Are the polygons within budget
read the TOTAL number in the viewport statistics
Is there serious leaf stacking
the Overdraw.fx render mode
Is texture precision consistent
the Texel_Density.fx render mode
Are there any flipped faces
the Face_Normal_Check.fx render mode
Is the leaf alpha clean
the _Material/____Opacity.fx render mode
Are the wind weights sensible
_Wind Weights/Level 1~4.fx
Does the LOD switch pop
step through the levels with the LOD button
Are the material texture paths correct
confirm there are no missing-texture warnings
Polygon budget reference
Important note: the official documentation gives no polygon budget at all.
SpeedTree's official documentation contains no recommended values for triangle budgets, atlas sizes or LOD level counts. The table below comes from publicly shared experience of third-party practitioners and is only an order-of-magnitude reference, not a standard. The actual budget must be decided by your project type, target platform, number of vegetation instances on screen and art style together.
Asset type
LOD0 polygons
LOD levels
Hero tree (close-up protagonist)
8,000 – 15,000
4 levels, last level about 200 polygons + billboard
Background tree
3,000 – 6,000
3 levels
Shrub
500 – 2,000
2 levels + billboard
Grass (per clump)
30 – 80
single level (see the hard constraint in the grass case)
The same third-party sources also give order-of-magnitude culling distances: roughly 8,000–15,000 units for large trees, 3,000–5,000 for shrubs and 1,500–3,000 for grass; and they suggest setting the culling start distance at about 80% of the end distance, together with the engine's Dithered LOD Transition, to remove popping.
For comparison, the official sample Broadleaf_Field.spm on this machine has a total of 3,032,522 polygons — film-grade density, not directly usable in a game.
Number of billboards
The official documentation states that a tree typically generates 6 to 10 billboards. This matches the measured presets — the Unity preset uses 8 and the SpeedTree Runtime SDK preset uses 12. The more billboards, the more complete the tree looks from every angle, but the larger the atlas.
The relationship between LOD and Billboard
The last one or two LOD levels are usually billboards — the whole tree rendered into a few intersecting planes, with textures standing in for geometry. This is the key to vegetation performance: a distant tree may occupy only a few dozen triangles. Level of Detail:Billboard start determines from which level billboards begin; set it too early and the tree visibly “flattens” at medium distance, set it too late and performance suffers.
3.4 手绘与摄影测量工作流
3.4 Hand-Drawn and Photogrammetry Workflows
手绘工作流
程序化生成适合做“整体合理”的树,但主角树的关键枝条往往需要更强的造型控制。这时用手绘模式:
打开工具栏的 Freehand。
添加一个 Spine 节点,在视图里拖出枝条走向。
用 Hand Drawn:Resample 重采样,让手绘曲线平滑。
把 Branch 或 Leaf Mesh 挂到 Spine 下,沿手绘路径生长。
用 Convert generator to hand drawn 也可以把已有的程序化枝条转成手绘,再做修改。
Procedural generation is good at trees that are “plausible overall”, but the key branches of a hero tree often need stronger shape control. That is when you use freehand mode:
Turn on Freehand on the toolbar.
Add a Spine node and drag the branch path in the viewport.
Use Hand Drawn:Resample to resample and smooth the hand-drawn curve.
Attach a Branch or Leaf Mesh under the Spine so it grows along the hand-drawn path.
Convert generator to hand drawn also lets you convert an existing procedural branch into a hand-drawn one and then edit it.
Related templates: internal_templates/hand_drawn_trunk.stt, hand_drawn_branch.stt, hand_drawn_subd_branch.stt, hand_drawn_target.stt.
Hand-drawn parts are no longer controlled by parameters, so you lose the ability to “change one seed and get a different tree”. Hand drawing should therefore be reserved for key branches (usually no more than 10%–20% of the tree), with the rest left procedural. Hand-drawn edits are recorded on the node and can be cleared at any time with Clear freehand edits.
Photogrammetry workflow
Photogrammetry is the technique of scanning a real tree from photographs to obtain a high-precision model. SpeedTree's value here is bringing the scan into the procedural system, so that a scanned tree can also have LOD, wind and unlimited variants.
The official installation provides three complete examples under samples/Learning/Photogrammetry/:
1. Oak_Photogrammetry/ — bringing a scanned oak into the procedural system
File
Step
Target.spm
Step one: use a Target to mark the attachment point
Convert_To_Trunk.spm
Step two: convert the scanned mesh into a trunk structure
Oak_Photogrammetry_Convert_In_Place.spm
convert in place, preserving the original mesh position
Stitch.spm
Step three: stitch the scanned section to procedural branches
The accompanying Mesh/ directory holds the scanned meshes (Sample_Photogrammetry_Trunk.obj and .fbx), the Converted/ directory holds the full set of converted textures (AO, Color, Gloss, Height, Metallic, Normal, Specular, Subsurface, VertexDisplacement and so on), and the Stitch/ directory holds the textures for the stitched section.
2. Decal_MeshDetail/ — supplementing a surface with decals and mesh detail
It ships three texture sets — Knot_01, Knot_02 (knots) and LongDetail_01 (long detail) — demonstrating how to layer detail onto a scan with Decal and Mesh Detail.
3. All_Mesh_Tree_Example/ — an example of an all-mesh tree
SpeedTree supports Lua scripts for controlling generation rules. The install directory has two relevant resources:
app_data/RuleScriptCommon.lua — the common function library for rule scripts, providing utility functions such as math.clamp, math.saturate, math.lerp and math.round.
samples/Learning/Rules/ — two examples: Conifer_Simple_Rules.spm (simple conifer rules) and Oak_Complex_Rules.spm (complex oak rules).
Rule scripts are good for linking parameters to one another: for example, making branch thickness follow its length automatically instead of setting two separate parameters. Not essential for casual users, but on complex species they greatly reduce manual tuning.
Projector
samples/Learning/Projector/Projector.spm demonstrates the projector. A projector can project a texture onto the model's surface from a given direction, which is useful for:
Projecting pre-painted bark detail (such as a texture covering the whole tree) to avoid UV seams.
Projecting lighting information or masks.
Quick concept validation.
Reference images (References)
samples/Learning/References/References.spm demonstrates the use of reference images. The approach is:
Import a photograph of the tree you want to imitate as a reference object.
Scale the reference image so that it matches the scene units.
Adjust parameters while comparing against the silhouette.
This is one of the most effective ways to improve realism — do not let the tree in the software drift away from the real photograph.
Subdivision Surface
samples/Learning/Subdivision_Surface/Subdivision_Surface.spm demonstrates subdivision. Together with the Subdivision node or the Skin:Subdivision parameter, you can smooth a low-poly mesh into a high-poly one. Note that each level of subdivision roughly quadruples the polygon count.
摄影测量工作流的核心。需要手工用 gizmo 在节点模式下放置。先用 Target 定位对接点,再用 Stitch 生成过渡段,用 Region / Band Region / Blend Region 组控制缝合区域与过渡曲线。官方示例:samples/Learning/Photogrammetry/Oak_Photogrammetry/Stitch.spm。
只在打开旧模型时遇到。碰撞现在用 Tree 生成器上的碰撞设置,或独立的 Collision object 场景对象来生成。
主要参数 (3 项)
Collision:Type碰撞体类型。
Collision:Collision是否为该节点生成碰撞。
Collision:Radius碰撞半径。通常比实际几何体略大,避免角色贴脸。
没有匹配的节点。试试更短的关键词,或点「全部」清除筛选。
25 generators, grouped the way the official documentation groups them: main generators, decorators, photogrammetry generators and legacy generators. Node names and parameter names come from the official SpeedTree Modeler 10 manual and were cross-checked against the real v10.2.0 files on this machine.
Exact matching on node names and aliases, plus fuzzy matching on purpose, function and parameter names. Results are ranked by relevance.
Category guide
Main generators The generators that make up the plant's main body. Every model must have exactly one Tree.
Decorators Generators that layer appearance features onto existing geometry (officially called Decorators).
Photogrammetry generators Bring scanned 3D assets into the model and convert them into procedural geometry.
Legacy generators Generators from SpeedTree 5–7. Old models can still be loaded and upgraded, but they are not guaranteed to survive future versions — do not use them in new models.
TreeTree (root generator)
Also known as: root node, root generator, Tree Generator, master node, root, master
Main generators
Purpose
The root container and global settings hub for the whole model; every model has exactly one
Function
The Tree generator is the top level of the node tree and cannot be deleted or moved. It produces no geometry itself; instead it holds the model-wide settings: LOD levels, leaf collision, collision proxies, subdivision, vertex color computation flags, random seeds, and export and compile options.
How to use
Created automatically with a new file. For game assets, the LOD count, the collision proxy and the vertex color flags are all set at this level. Note: vertex colors are only computed once the Vertex Colors computation flag is enabled on the Tree.
Key parameters (15 items)
Level of Detail:CountNumber of LOD levels. Games usually use 3–5.
Level of Detail:EnabledWhether this LOD level is enabled.
Level of Detail:Length segmentsLength segment count for this level.
Level of Detail:Radial segmentsRadial segment count for this level.
Level of Detail:Billboard startWhich level the billboard starts at.
Level of Detail:Branch volume thresholdBranch volume threshold. Branches with less volume than this are culled at low LOD — the most effective polygon-reduction parameter.
Collision:RadiusCollision radius. Usually slightly larger than the actual geometry so characters don't clip into it.
Vertex Color:RedVertex color red channel. By SpeedTree convention it stores ambient occlusion (AO).
Vertex Color:GreenVertex color green channel. By SpeedTree convention it stores wind weights.
Vertex Color:BlueVertex color blue channel. By SpeedTree convention it stores hidden / culling information.
Wind:ApplyWhether wind is applied.
Random Seeds:GenerationGeneration random seed. Changing this value gives a completely different tree — the master switch for producing variants in bulk.
BranchBranch generator
Also known as: branch, branches, trunk, limb, bough, twig, root system, roots
Main generators
Purpose
Generates trunks, main branches, side branches, twigs and root systems — every woody structure; the most frequently used generator
Function
Branch generates trunks, branches and root systems, and can also be used for hand-drawn branches. It recursively builds the whole tree's skeleton from a parent plus generation rules, and it bundles every parameter group a woody structure needs: spine, segments, skin, forces, displacement and wind.
How to use
1) Select the parent → Add → Branch; 2) choose a distribution mode in Generation:Mode; 3) use the Generation:Frequency curve to control density along the parent; 4) use Spine:Length and Spine:Shape to control length and curvature; 5) use Forces:Gnarl to break up the regularity; 6) use Segments:Length / Radial to control polygon count. For a trunk, raise Spine:Length and keep the child count low; for terminal twigs, use many children and short lengths.
Key parameters (34 items)
Generation:ModeGeneration mode. Determines which distribution algorithm the children use: Classic (legacy, do not use), Proportional, Proportional steps, Absolute, Absolute steps, Phyllotaxy, Interval, Bifurcation, Flood, Parent.
Generation:FrequencyParent curve. Controls the distribution of child probability along the parent's length; X = parent position 0–1, Y = weight. Defaults to a constant 1, i.e. uniform over the whole length.
Generation:FirstStart boundary. The lowest position on the parent where nodes may be generated.
Generation:LastEnd boundary. The highest position on the parent where nodes may be generated.
Generation:Proportional:NumberNumber of children generated per parent, proportional to the parent's size.
Generation:Absolute:NumberExact number of children generated per parent. Does not scale with parent size — use with care.
Generation:Phyllotaxy:Nodes:SpiralSpiral angle. Classic phyllotaxy uses the golden angle of 137.5°.
Generation:Bifurcation:ThresholdBifurcation threshold. Controls where along the parent a turn is treated as a fork point.
Generation:Interval:CountNumber of nodes generated in Interval mode.
Generation:SinkSink. Shifts the nodes' origin as a group so they sink into or lift off the parent's surface. Commonly used to push the trunk slightly below ground for easier scene placement.
Generation:PruningPruning curve. One per generator. Where the curve value is below 0.5, the nodes there are removed entirely.
Generation:Size scalarSize scalar. Scales the size of the node and all of its descendants.
Generation:Extend parent:TypeExtend parent type. Generates extra nodes at the tip of the parent branch; options are None / Any / Split 1 / Split 2 / Skinny / Fat / Breaks only / Bottom. The parent must be a Branch, and the child can only be a Branch, Cap, Leaf mesh or Batched leaf.
Spine:LengthSpine length. As a proportion of the parent's length.
Spine:ShapeShape curve. X = position along the spine 0–1, Y = lateral offset. The key parameter for making branches bend naturally.
Spine:DroopDroop. Simulates gravity pulling the branch tip downward.
Spine:JinkJink. Creates irregular hard turns that break up the too-smooth, fake look.
Spine:NoiseNoise. Adds random perturbation to the spine.
Segments:LengthNumber of segments along the length. Too few and bends turn into straight kinks.
Segments:RadialNumber of segments around the cross-section circumference. Below 5 the polygonal facets become obvious.
Forces:AllowMaster switch. When enabled, all checked force fields act on this generator.
Forces:GnarlGnarl force. Makes branches twist irregularly — the single most effective parameter for removing the “fake” look.
Forces:TwistTwist force. Rotates around the branch's own axis.
Forces:DirectionDirection force. Pushes branches in a fixed direction; use it for the flag-shaped canopies produced by constant one-way wind.
Skin:TypeSkin type.
Skin:RadiusSkin radius, which directly controls branch thickness.
Skin:SmoothSmoothing amount.
Skin:WeldingWelding. Merges vertices at junctions to remove cracks.
Displacement:AmountOverall displacement strength.
Displacement:FlaresRoot flares (root plate). Makes the trunk thicken naturally where it meets the ground.
Wind:WeightWind weight. 0 = completely still, 1 = fully wind-driven. Should increase with hierarchy level.
UV Mapping:UTiling count along U — how many times the texture repeats around the circumference.
UV Mapping:VTiling count along V — how many times the texture repeats along the length.
Random Seeds:GenerationGeneration random seed. Changing this value gives a completely different tree — the master switch for producing variants in bulk.
Leaf MeshLeaf Mesh generator
Also known as: leaf mesh, mesh leaf, leaf, leaves, foliage, leaf cluster, cluster
Main generators
Purpose
Generates any kind of leaf geometry or leaf cluster; the main source of how a canopy looks
Function
Leaf Mesh is the generator for “a single leaf” or “a cluster of leaves”. It can use alpha-mapped flat cards or fully modeled leaf meshes. Together with Batched leaf it is the main mechanism behind seasonal transition. Leaves come with a complete set of controls for orientation, bending, folding and fluttering.
How to use
Attach it under terminal twigs. First set Size X/Y in the Leaves group to define the size (it must match the texture's aspect ratio), then set Rotation / Bend / Fold / Twist to give it volume, and finally use the Generation:Frequency curve to control distribution along the branch. Be sure to enable Material:Subsurface Amount, or the leaves will look like plastic cards.
Key parameters (26 items)
Leaves:TypeLeaf type.
Leaves:Size XLeaf size along X. Should match the texture's aspect ratio or the leaf will stretch.
Leaves:Size YLeaf size along Y.
Leaves:ScaleLeaf scale.
Leaves:RotationLeaf rotation. Combine with variance so each leaf faces a different way.
Leaves:BendBend. Bends along the leaf's midrib.
Leaves:FoldFold angle. Folds a flat card along its center axis — the cheapest way to give card leaves a sense of volume.
Leaves:TwistTwist. Rotates the leaf around its own long axis.
Leaves:FlutterFlutter. Extra leaf jitter in the wind.
Leaves:AlignOrientation alignment.
Leaves:SpreadSpread. The distance of leaves from the branch axis.
Leaves:DistributionDistribution curve. Controls how densely leaves are packed along the branch.
Generation:ModeGeneration mode. Determines which distribution algorithm the children use: Classic (legacy, do not use), Proportional, Proportional steps, Absolute, Absolute steps, Phyllotaxy, Interval, Bifurcation, Flood, Parent.
Generation:FrequencyParent curve. Controls the distribution of child probability along the parent's length; X = parent position 0–1, Y = weight. Defaults to a constant 1, i.e. uniform over the whole length.
Generation:Proportional:NumberNumber of children generated per parent, proportional to the parent's size.
Generation:Mesh alignmentMesh alignment. Applies only to Leaf mesh / Batched leaf and to click-placed nodes, and the parent must be a mesh. Options are None / Tangent / Binormal / Parent X,Y,Z / World X,Y,Z.
Material:MaterialSpecifies the material asset.
Material:ColorBase color / albedo texture.
Material:OpacityOpacity texture. White is opaque, black is transparent; leaves get their shape from it.
Material:NormalNormal map, tangent space. Controls how surface relief is lit.
Material:SubsurfaceSubsurface scattering color. The warm color that shows through a backlit leaf.
Material:Subsurface AmountSubsurface scattering strength. The key parameter for translucent leaves; at 0 the leaves look like plastic cards.
Wind:WeightWind weight. 0 = completely still, 1 = fully wind-driven. Should increase with hierarchy level.
Vertex Color:GreenVertex color green channel. By SpeedTree convention it stores wind weights.
Collision:RadiusCollision radius. Usually slightly larger than the actual geometry so characters don't clip into it.
Random Seeds:GenerationGeneration random seed. Changing this value gives a completely different tree — the master switch for producing variants in bulk.
Batched LeafBatched Leaf generator
Also known as: batched leaf, batched leaves, batch, batched, performance leaves, low-poly leaves
Main generators
Purpose
Scatters large numbers of leaves in an optimized way, orders of magnitude faster than leaf meshes — ideal when there are thousands upon thousands of leaves
Function
Batched Leaf places leaves in almost the same way as Leaf Mesh, but the result cannot be edited per node — it can only be controlled as a whole. It fills the model with leaves in an optimized way, orders of magnitude faster than leaf meshes. The trade-off is that the geometry does not participate in the dynamic LOD system or in the Growth system.
How to use
Use it when the leaf count is very large and you don't need per-leaf editing. The parameters are similar to Leaf Mesh; the important ones are the sizes in the Leaves group and the distribution curve in Generation. Note: if you later need dynamic LOD or growth animation, you must switch to Leaf Mesh.
Key parameters (16 items)
Leaves:TypeLeaf type.
Leaves:Size XLeaf size along X. Should match the texture's aspect ratio or the leaf will stretch.
Leaves:Size YLeaf size along Y.
Leaves:RotationLeaf rotation. Combine with variance so each leaf faces a different way.
Leaves:BendBend. Bends along the leaf's midrib.
Leaves:FoldFold angle. Folds a flat card along its center axis — the cheapest way to give card leaves a sense of volume.
Leaves:SpreadSpread. The distance of leaves from the branch axis.
Generation:ModeGeneration mode. Determines which distribution algorithm the children use: Classic (legacy, do not use), Proportional, Proportional steps, Absolute, Absolute steps, Phyllotaxy, Interval, Bifurcation, Flood, Parent.
Generation:FrequencyParent curve. Controls the distribution of child probability along the parent's length; X = parent position 0–1, Y = weight. Defaults to a constant 1, i.e. uniform over the whole length.
Generation:Proportional:NumberNumber of children generated per parent, proportional to the parent's size.
Generation:Mesh alignmentMesh alignment. Applies only to Leaf mesh / Batched leaf and to click-placed nodes, and the parent must be a mesh. Options are None / Tangent / Binormal / Parent X,Y,Z / World X,Y,Z.
Material:MaterialSpecifies the material asset.
Material:OpacityOpacity texture. White is opaque, black is transparent; leaves get their shape from it.
Wind:WeightWind weight. 0 = completely still, 1 = fully wind-driven. Should increase with hierarchy level.
Vertex Color:GreenVertex color green channel. By SpeedTree convention it stores wind weights.
Random Seeds:GenerationGeneration random seed. Changing this value gives a completely different tree — the master switch for producing variants in bulk.
FrondFrond generator
Also known as: frond, compound leaf, palm frond, fern, cycad, palm, grass
Main generators
Purpose
Generates a whole pinnate compound leaf along the parent's spine; used for palm fronds, fern fronds and grass
Function
Frond generates a mesh that deforms along the parent branch's spine, expressing many small leaflets with very few polygons — extremely polygon-efficient. It must be attached under a Branch generator; if you want the skeleton branch itself to be invisible, set that Branch's Spine:Style to Spine only.
How to use
Attach it under the trunk or a branch. The core is the Shape group, which controls the whole leaf's outline and curvature, the Generation group, which controls attachment along the parent, and Material, which specifies the alpha-mapped frond texture. For palms, raise Spine:Length and increase Spine:Droop to get a pronounced drooping arc.
Key parameters (16 items)
Spine:LengthSpine length. As a proportion of the parent's length.
Spine:ShapeShape curve. X = position along the spine 0–1, Y = lateral offset. The key parameter for making branches bend naturally.
Spine:DroopDroop. Simulates gravity pulling the branch tip downward.
Spine:StyleSpine style. Set to Spine only to hide the branch geometry and keep only the skeleton (commonly used when attaching Fronds).
Generation:ModeGeneration mode. Determines which distribution algorithm the children use: Classic (legacy, do not use), Proportional, Proportional steps, Absolute, Absolute steps, Phyllotaxy, Interval, Bifurcation, Flood, Parent.
Generation:FrequencyParent curve. Controls the distribution of child probability along the parent's length; X = parent position 0–1, Y = weight. Defaults to a constant 1, i.e. uniform over the whole length.
Generation:Absolute:NumberExact number of children generated per parent. Does not scale with parent size — use with care.
Generation:Proportional:NumberNumber of children generated per parent, proportional to the parent's size.
Generation:RotationRotates all of this generator's nodes as a group around the parent's spine. Combine with variance to scramble orientation.
Material:MaterialSpecifies the material asset.
Material:OpacityOpacity texture. White is opaque, black is transparent; leaves get their shape from it.
Material:ColorBase color / albedo texture.
Material:Subsurface AmountSubsurface scattering strength. The key parameter for translucent leaves; at 0 the leaves look like plastic cards.
Wind:WeightWind weight. 0 = completely still, 1 = fully wind-driven. Should increase with hierarchy level.
Collision:RadiusCollision radius. Usually slightly larger than the actual geometry so characters don't clip into it.
Random Seeds:GenerationGeneration random seed. Changing this value gives a completely different tree — the master switch for producing variants in bulk.
ZoneZone generator
Also known as: zone, region, distribution area, scatter, range, ground scatter, turf, ground cover
Main generators
Purpose
Acts as the parent of other objects to scatter meshes across an area — used for grass clumps, bushes, ground cover and mushroom clusters
Function
The Zone generator works like the Tree generator — it is the parent of other objects, but its scope is limited to an area (a disk or a mesh). It comes in two forms: the disk form produces no geometry and only provides a growth area; the mesh form can provide a growth surface and contribute geometry.
How to use
Add a Zone, attach the mesh you want to scatter in the Meshes group (grass blades, flowers, mushrooms and so on), then use the Placement group to control count, random rotation, scale range and ground conforming. The Ambient Occlusion group can darken the base of the scattered objects. For grass, all three randomizations (position, orientation, scale) must be on.
Key parameters (11 items)
Generation:Resolution
Generation:FrequencyParent curve. Controls the distribution of child probability along the parent's length; X = parent position 0–1, Y = weight. Defaults to a constant 1, i.e. uniform over the whole length.
Meshes:MeshMesh entry.
Meshes:CountCount.
Meshes:WeightWeight, controlling the blend ratio.
Placement:PlacementPlacement rule.
Placement:ScaleScale range.
Placement:RotationRotation range.
Placement:OffsetOffset.
Forces:AllowMaster switch. When enabled, all checked force fields act on this generator.
Random Seeds:GenerationGeneration random seed. Changing this value gives a completely different tree — the master switch for producing variants in bulk.
CardCard generator
Also known as: card, camera-facing leaf, billboard leaf, billboard
Main generators
Purpose
Generates leaves that always face the camera — the cheapest way to represent distant foliage
Function
The Card generator produces camera-facing leaves based on a material and a mesh asset. It is cheaper than ordinary leaf cards because the leaves turn toward the viewer automatically, which suits distant or large-scale vegetation.
How to use
Use it for distant trees or performance-constrained scenes. The core is size and orientation; the texture needs an alpha channel. For close-ups, prefer Leaf Mesh for a sense of volume. Note: the Card generator exists in the v10.2.0 executable, but it is not used by any of the templates and samples shipped with the product, and its position in the Add menu is unconfirmed.
Key parameters (8 items)
Leaves:Size XLeaf size along X. Should match the texture's aspect ratio or the leaf will stretch.
Leaves:Size YLeaf size along Y.
Leaves:RotationLeaf rotation. Combine with variance so each leaf faces a different way.
Leaves:AlignOrientation alignment.
Generation:FrequencyParent curve. Controls the distribution of child probability along the parent's length; X = parent position 0–1, Y = weight. Defaults to a constant 1, i.e. uniform over the whole length.
Material:OpacityOpacity texture. White is opaque, black is transparent; leaves get their shape from it.
Wind:WeightWind weight. 0 = completely still, 1 = fully wind-driven. Should increase with hierarchy level.
Random Seeds:GenerationGeneration random seed. Changing this value gives a completely different tree — the master switch for producing variants in bulk.
BaseBase generator
Also known as: base, root plate, tree base, root, ground contact, projector
Main generators
Purpose
Represents a Projector scene object in the generation hierarchy and stores the information that affects the projection
Function
The Base generator represents a Projector scene object in the generation hierarchy while storing the information that affects the projection. It must be a direct child of the Tree generator. Introduced in SpeedTree 9.5.0, it works with a projector to add ray-cast scatter detail.
How to use
Create a Projector scene object first, then bring it into the generation hierarchy with a Base generator. Use it to project pre-painted bark detail or masks onto the model surface and avoid UV seams.
Key parameters (4 items)
Generation:ModeGeneration mode. Determines which distribution algorithm the children use: Classic (legacy, do not use), Proportional, Proportional steps, Absolute, Absolute steps, Phyllotaxy, Interval, Bifurcation, Flood, Parent.
Generation:FrequencyParent curve. Controls the distribution of child probability along the parent's length; X = parent position 0–1, Y = weight. Defaults to a constant 1, i.e. uniform over the whole length.
Forces:AllowMaster switch. When enabled, all checked force fields act on this generator.
Random Seeds:GenerationGeneration random seed. Changing this value gives a completely different tree — the master switch for producing variants in bulk.
ReferenceReference generator
Also known as: reference, reference generator, placeholder, BaseRef, base reference
Main generators
Purpose
Places a placeholder in the generation hierarchy to mark where nodes will be added later
Function
The Reference generator adds a placeholder in the generation hierarchy, used to mark the position of new nodes. Its internal type identifier is BaseRef. It produces no geometry itself.
How to use
Add it wherever you want to reserve a position, then attach generators at that position later. It also appears in the templates for stitching and conversion workflows (templates/combined/Reference.stt). Note: the official documentation has no standalone property page for the Reference generator; its name comes from the shipped Reference.stt template and from the real node names in the sample files.
Key parameters (4 items)
Generation:ModeGeneration mode. Determines which distribution algorithm the children use: Classic (legacy, do not use), Proportional, Proportional steps, Absolute, Absolute steps, Phyllotaxy, Interval, Bifurcation, Flood, Parent.
Generation:FrequencyParent curve. Controls the distribution of child probability along the parent's length; X = parent position 0–1, Y = weight. Defaults to a constant 1, i.e. uniform over the whole length.
Forces:AllowMaster switch. When enabled, all checked force fields act on this generator.
Random Seeds:GenerationGeneration random seed. Changing this value gives a completely different tree — the master switch for producing variants in bulk.
VineVine generator
Also known as: vine, ivy, climbing, hanging, physics simulation
Main generators
Purpose
A branch generator with physics simulation, for vines, ivy and other climbing or hanging structures that need gravity and constraints
Function
The Vine generator is a separate generator introduced in SpeedTree 10; it is essentially a Branch generator with physics simulation applied. Its control points are solved as particles with gravity and constraints, so it droops naturally, tangles around itself and conforms to collision bodies. Particles do not pass through the ground. Note: vines do not respond to a geometric force field's attract/avoid behavior — they only treat it as a collision body; and a vine generator must be in a later pass than the generator producing the geometric force field, or the field has no effect.
How to use
The product ships three complete workflows for vines (the only plant type with a step-by-step tutorial in the official documentation). Procedural vine: ① attach the Vine generator to a parent / ray-cast it onto a model with a Projector / grow it from a Zone generator; ② create a geometric force field with the generator or mesh you want it to interact with; ③ enable that force field in the Vine generator; ④ tune the parameters — set Spine:Droop:Style to Off to position it first, then set it to On to test gravity. Game-ready low-poly vine: attach it under a Branch, set Spine:Style to Match parent, and generate only one node per parent. Hand-drawn hero vine: position it with the gizmo in node mode, use the Bend tool, then turn Droop on. Grow along a guide: hand-draw a branch first as a guide, then let the vine grow along it. On performance: keep iteration counts and segment counts as low as possible.
Key parameters (18 items)
Spine:StyleSpine style. Default is free simulation; Match parent makes the vine conform to the parent branch (use it for low-poly game vines).
Spine:DroopDroop. Includes Style (on/off) / Amount (strength) / Friction / Stiffness / Iterations / Resolve steps / Self-collide. Turn it off while positioning, then turn it back on to test gravity.
Spine:LengthSpine length. As a proportion of the parent's length.
Spine:NoiseNoise. Adds random perturbation to the spine.
Spine:PathPath. Lets you define the spine's course by hand in hand-drawn mode.
Segments:AccuracyAccuracy. Controls the particle count — higher values give more detail and more accurate collision, but cost more.
Segments:LengthNumber of segments along the length. Too few and bends turn into straight kinks.
Segments:RadialNumber of segments around the cross-section circumference. Below 5 the polygonal facets become obvious.
Generation:ModeGeneration mode. Determines which distribution algorithm the children use: Classic (legacy, do not use), Proportional, Proportional steps, Absolute, Absolute steps, Phyllotaxy, Interval, Bifurcation, Flood, Parent.
Generation:FrequencyParent curve. Controls the distribution of child probability along the parent's length; X = parent position 0–1, Y = weight. Defaults to a constant 1, i.e. uniform over the whole length.
Generation:RotationRotates all of this generator's nodes as a group around the parent's spine. Combine with variance to scramble orientation.
Forces:AllowMaster switch. Note that a vine treats a geometric force field only as a collision body; it does not respond to attract/avoid.
Forces:MeshMesh force. Makes branches grow along the surface of an external model.
Forces:DirectionDirection force. Pushes branches in a fixed direction; use it for the flag-shaped canopies produced by constant one-way wind.
Forces:MagnetMagnet force. Snaps branches onto a specified object.
Material:MaterialSpecifies the material asset.
Wind:WeightWind weight. 0 = completely still, 1 = fully wind-driven. Should increase with hierarchy level.
Random Seeds:GenerationGeneration random seed. Changing this value gives a completely different tree — the master switch for producing variants in bulk.
CapCap generator
Also known as: cap, cut end, cross section, end cap, truncated, stump, broken branch
Decorators
Purpose
Closes the open end of a branch to simulate a broken or sawn-off branch end
Function
The Cap generator closes an open branch. The outer ring inherits the parent branch's material while the inner ring uses the cut-surface material, which produces the realistic “bark wrapped around exposed wood” cross-section. It is always created through the Extend parent mechanism — which is also why a Cap fits the parent's end precisely.
How to use
Select the Branch you want to close, Add → Cap. It is usually applied to the trunk and main branches; twigs don't need it. Essential for stumps and broken branches. There are few parameters; the main ones are the radius and height in the Cap group, plus whether it is kept at distance in Dynamic LOD.
Key parameters (9 items)
Cap:HeightCap height.
Cap:RadiusCap radius.
Generation:ModeGeneration mode. Determines which distribution algorithm the children use: Classic (legacy, do not use), Proportional, Proportional steps, Absolute, Absolute steps, Phyllotaxy, Interval, Bifurcation, Flood, Parent.
Generation:FrequencyParent curve. Controls the distribution of child probability along the parent's length; X = parent position 0–1, Y = weight. Defaults to a constant 1, i.e. uniform over the whole length.
Generation:Extend parent:TypeExtend parent type. Generates extra nodes at the tip of the parent branch; options are None / Any / Split 1 / Split 2 / Skinny / Fat / Breaks only / Bottom. The parent must be a Branch, and the child can only be a Branch, Cap, Leaf mesh or Batched leaf.
Segments:RadialNumber of segments around the cross-section circumference. Below 5 the polygonal facets become obvious.
Random Seeds:GenerationGeneration random seed. Changing this value gives a completely different tree — the master switch for producing variants in bulk.
DecalDecal generator
Also known as: decal, surface patch, moss, lichen, decorative patch, cavity
Decorators
Purpose
Wraps a material and a flat mesh onto the parent's surface to create knots, lumps, cavities and other surface detail
Function
The Decal generator wraps a material together with a flat mesh onto the parent to create surface details such as knots, lumps and cavities. It adds significant surface richness without adding much geometry.
How to use
Attach it under the trunk or a branch. Specify the patch mesh in the Mesh group, tune size and fit offset in the Decal group, and control distribution along the parent in the Generation group. The texture needs an alpha channel. The shipped templates include ready-made decoration presets such as Cavity, Decal, Gash and Lump.
Key parameters (11 items)
Decal:MeshMesh used by the decal.
Decal:SizeDecal size.
Mesh:MeshSpecifies a mesh asset (.obj / .fbx).
Generation:ModeGeneration mode. Determines which distribution algorithm the children use: Classic (legacy, do not use), Proportional, Proportional steps, Absolute, Absolute steps, Phyllotaxy, Interval, Bifurcation, Flood, Parent.
Generation:FrequencyParent curve. Controls the distribution of child probability along the parent's length; X = parent position 0–1, Y = weight. Defaults to a constant 1, i.e. uniform over the whole length.
Generation:Proportional:NumberNumber of children generated per parent, proportional to the parent's size.
Material:MaterialSpecifies the material asset.
Material:OpacityOpacity texture. White is opaque, black is transparent; leaves get their shape from it.
Growth:TimingGrowth timing. Controls when this node starts in the animation.
Forces:AllowMaster switch. When enabled, all checked force fields act on this generator.
Random Seeds:GenerationGeneration random seed. Changing this value gives a completely different tree — the master switch for producing variants in bulk.
FinFin generator
Also known as: fin, fins, buttress, buttress root, support root, fungus, moss
Decorators
Purpose
Generates thin sheet-like geometry for buttress roots, fungi, moss and hanging growth
Function
The Fin generator creates a thin geometric flap that can be used for fungi, moss, or anything else hanging off a trunk or branch. Its mesh is anchored along the X axis and grows toward +Y, with all X-direction vertices welded to the parent.
How to use
Attach it under the trunk. Use the Fins group to control the fin count, length and height, and the Generation group to control circumferential distribution. For tropical rainforest buttress roots, set Height to 2–3 meters. Combine with Displacement to make the fin edges irregular.
Key parameters (9 items)
Fins:HeightFin height.
Fins:LengthFin length.
Generation:ModeGeneration mode. Determines which distribution algorithm the children use: Classic (legacy, do not use), Proportional, Proportional steps, Absolute, Absolute steps, Phyllotaxy, Interval, Bifurcation, Flood, Parent.
Generation:FrequencyParent curve. Controls the distribution of child probability along the parent's length; X = parent position 0–1, Y = weight. Defaults to a constant 1, i.e. uniform over the whole length.
Segments:LengthNumber of segments along the length. Too few and bends turn into straight kinks.
Segments:RadialNumber of segments around the cross-section circumference. Below 5 the polygonal facets become obvious.
Displacement:AmountOverall displacement strength.
Wind:WeightWind weight. 0 = completely still, 1 = fully wind-driven. Should increase with hierarchy level.
Random Seeds:GenerationGeneration random seed. Changing this value gives a completely different tree — the master switch for producing variants in bulk.
KnotKnot generator
Also known as: knot, tree knot, scar, branch scar, wood knot, lump, wound
Decorators
Purpose
Generates extra geometry attached to a branch to create knots, lumps and cavities
Function
The Knot generator creates extra geometry attached to a branch, such as a knot, a lump or a cavity. It is divided into three zones: Outer (welded to the parent and sharing the branch material), Inner (transitioning to the exposed inner material) and Core (usually the material of a cut branch). This three-part structure allows very fine layering.
How to use
Attach it under the trunk. Use the Generation group to control height distribution along the trunk and orientation, and the Outer / Inner / Core groups to tune the size, raised height and color transition of each layer. With Displacement it can look very realistic.
Key parameters (8 items)
Generation:ModeGeneration mode. Determines which distribution algorithm the children use: Classic (legacy, do not use), Proportional, Proportional steps, Absolute, Absolute steps, Phyllotaxy, Interval, Bifurcation, Flood, Parent.
Generation:FrequencyParent curve. Controls the distribution of child probability along the parent's length; X = parent position 0–1, Y = weight. Defaults to a constant 1, i.e. uniform over the whole length.
Generation:RotationRotates all of this generator's nodes as a group around the parent's spine. Combine with variance to scramble orientation.
Segments:RadialNumber of segments around the cross-section circumference. Below 5 the polygonal facets become obvious.
Material:MaterialSpecifies the material asset.
Forces:AllowMaster switch. When enabled, all checked force fields act on this generator.
Random Seeds:GenerationGeneration random seed. Changing this value gives a completely different tree — the master switch for producing variants in bulk.
ShellShell generator
Also known as: shell, coating, moss shell, moss, algae, low-poly vine, bark replacement
Decorators
Purpose
Generates a special kind of branch that sits on top of the parent branch, used to wrap it in moss, algae or a low-poly vine
Function
The Shell generator creates a special kind of branch that sits on top of the parent branch, letting you wrap the parent in moss, algae or a low-poly vine. It amounts to giving the same branch an outer skin with a different material. In the actual v10.2.0 data, Shell is implemented as a Branch generator with the Decorator parameter group (templates/combined/Decorations/Shell.stt contains a Type="Branch" node).
How to use
Attach it under the trunk or a main branch. Only some of the shell's properties are editable. Use the Decorator group to control whether the shell is enabled, its extension style, position and scale. It is very efficient for old trees covered in moss or trunks smothered in vines — you don't have to model the vines at all.
Key parameters (10 items)
Generation:ModeGeneration mode. Determines which distribution algorithm the children use: Classic (legacy, do not use), Proportional, Proportional steps, Absolute, Absolute steps, Phyllotaxy, Interval, Bifurcation, Flood, Parent.
Generation:FrequencyParent curve. Controls the distribution of child probability along the parent's length; X = parent position 0–1, Y = weight. Defaults to a constant 1, i.e. uniform over the whole length.
Generation:Size scalarSize scalar. Scales the size of the node and all of its descendants.
Spine:LengthSpine length. As a proportion of the parent's length.
Segments:LengthNumber of segments along the length. Too few and bends turn into straight kinks.
Segments:RadialNumber of segments around the cross-section circumference. Below 5 the polygonal facets become obvious.
UV Mapping:UTiling count along U — how many times the texture repeats around the circumference.
UV Mapping:VTiling count along V — how many times the texture repeats along the length.
Material:MaterialSpecifies the material asset.
Random Seeds:GenerationGeneration random seed. Changing this value gives a completely different tree — the master switch for producing variants in bulk.
MeshMesh generator
Also known as: mesh, mesh generator, scan, scanned mesh, BranchMesh, photogrammetry
Photogrammetry generators
Purpose
Makes an imported mesh asset part of the model so the photogrammetry tools can operate on it
Function
The Mesh generator makes an imported mesh asset part of the model and makes it available to the photogrammetry tools. It is typically used to import a scanned trunk and then grow procedural branches from it. Its internal type identifier is BranchMesh.
How to use
Import a .obj / .fbx and assign it to the Mesh group. Use the Generation group to control where it attaches on the parent and its orientation, and Mesh:Scale / Rotation / Offset for fine tuning. It is often mixed with Branch: use Mesh (the scan) for the main trunk and Branch for the shaping branches.
Key parameters (11 items)
Mesh:MeshSpecifies a mesh asset (.obj / .fbx).
Mesh:ScaleMesh scale.
Mesh:RotationMesh rotation.
Mesh:OffsetMesh offset.
Generation:ModeGeneration mode. Determines which distribution algorithm the children use: Classic (legacy, do not use), Proportional, Proportional steps, Absolute, Absolute steps, Phyllotaxy, Interval, Bifurcation, Flood, Parent.
Generation:FrequencyParent curve. Controls the distribution of child probability along the parent's length; X = parent position 0–1, Y = weight. Defaults to a constant 1, i.e. uniform over the whole length.
Generation:RotationRotates all of this generator's nodes as a group around the parent's spine. Combine with variance to scramble orientation.
Forces:AllowMaster switch. When enabled, all checked force fields act on this generator.
Wind:WeightWind weight. 0 = completely still, 1 = fully wind-driven. Should increase with hierarchy level.
Random Seeds:GenerationGeneration random seed. Changing this value gives a completely different tree — the master switch for producing variants in bulk.
Mesh converterMesh converter generator
Also known as: mesh converter, conversion tools, convert, convert to trunk, mesh to branch, convert in place, Conversion-Tools, scan to procedural
Photogrammetry generators
Purpose
Creates tiling texture sets on a scanned mesh and replaces all or part of the mesh with native SpeedTree geometry
Function
The Mesh converter generator provides a set of tools for creating tiling map sets on a mesh along with native SpeedTree geometry extension. It is the core tool of the v9 photogrammetry workflow, responsible for turning a scanned trunk into a structure that can keep growing procedurally. Its internal type identifier is Conversion-Tools.
How to use
It must be a child of a Mesh generator, and that Mesh generator may contain only this one Mesh node. After importing the scanned mesh, Add → Mesh converter, then choose the conversion method: Convert to Trunk (skeletonize into a trunk), Convert to Branch (convert into branches), Convert in Place (convert in place, keeping the mesh position). The parameters include the Region group's curve capture settings and the Preview group.
Key parameters (6 items)
Generation:ModeGeneration mode. Determines which distribution algorithm the children use: Classic (legacy, do not use), Proportional, Proportional steps, Absolute, Absolute steps, Phyllotaxy, Interval, Bifurcation, Flood, Parent.
Generation:FrequencyParent curve. Controls the distribution of child probability along the parent's length; X = parent position 0–1, Y = weight. Defaults to a constant 1, i.e. uniform over the whole length.
Segments:LengthNumber of segments along the length. Too few and bends turn into straight kinks.
Segments:RadialNumber of segments around the cross-section circumference. Below 5 the polygonal facets become obvious.
Mesh:MeshSpecifies a mesh asset (.obj / .fbx).
Random Seeds:GenerationGeneration random seed. Changing this value gives a completely different tree — the master switch for producing variants in bulk.
Mesh detailMesh detail generator
Also known as: mesh detail, detail mesh, realistic detail, photogrammetry, detail mesh
Photogrammetry generators
Purpose
Creates surface detail from materials plus 3D meshes and blends that detail into the parent
Function
The Mesh detail generator creates surface detail from materials and 3D meshes and blends it smoothly into the parent. It gives procedurally generated trees the realistic detail of a scan and is a key node in “procedural + scan” hybrid workflows.
How to use
First import the high-poly .obj / .fbx, then assign it to the Mesh group of the Mesh detail node. Use Placement to control density and randomization, and the Blend group to make the mesh transition smoothly into the procedural surface. The official example samples/Learning/Photogrammetry/Decal_MeshDetail/ demonstrates the whole workflow.
Key parameters (11 items)
Mesh:MeshSpecifies a mesh asset (.obj / .fbx).
Mesh:ScaleMesh scale.
Mesh:RotationMesh rotation.
Mesh:OffsetMesh offset.
Placement:PlacementPlacement rule.
Generation:ModeGeneration mode. Determines which distribution algorithm the children use: Classic (legacy, do not use), Proportional, Proportional steps, Absolute, Absolute steps, Phyllotaxy, Interval, Bifurcation, Flood, Parent.
Generation:FrequencyParent curve. Controls the distribution of child probability along the parent's length; X = parent position 0–1, Y = weight. Defaults to a constant 1, i.e. uniform over the whole length.
Collision:CollisionWhether to generate collision for this node.
Growth:TimingGrowth timing. Controls when this node starts in the animation.
Random Seeds:GenerationGeneration random seed. Changing this value gives a completely different tree — the master switch for producing variants in bulk.
StitchStitch generator
Also known as: stitch, sew, join, band stitch, wrap stitch, bake stitch, cut stitch, seam, transition section
Photogrammetry generators
Purpose
Joins native SpeedTree geometry to a mesh so the seam is invisible
Function
The Stitch generator sews native SpeedTree geometry to a mesh. It solves the “two pieces of geometry don't line up” problem by generating transition geometry between them and matching UVs so the seam is invisible. It offers several modes: Bake stitch, Wrap stitch, Band stitch and Cut stitch.
How to use
The core of the photogrammetry workflow. It must be placed by hand with the gizmo in node mode. Position the attachment point with a Target first, then generate the transition section with Stitch, using the Region / Band Region / Blend Region groups to control the stitch area and the transition curves. Official example: samples/Learning/Photogrammetry/Oak_Photogrammetry/Stitch.spm.
Key parameters (5 items)
Generation:ModeGeneration mode. Determines which distribution algorithm the children use: Classic (legacy, do not use), Proportional, Proportional steps, Absolute, Absolute steps, Phyllotaxy, Interval, Bifurcation, Flood, Parent.
Generation:FrequencyParent curve. Controls the distribution of child probability along the parent's length; X = parent position 0–1, Y = weight. Defaults to a constant 1, i.e. uniform over the whole length.
Segments:LengthNumber of segments along the length. Too few and bends turn into straight kinks.
Segments:RadialNumber of segments around the cross-section circumference. Below 5 the polygonal facets become obvious.
Random Seeds:GenerationGeneration random seed. Changing this value gives a completely different tree — the master switch for producing variants in bulk.
TargetTarget generator
Also known as: target, locator, attachment point, anchor, alignment, placement point
Photogrammetry generators
Purpose
Precisely positions children on any parent; commonly used to place branches at specific points on a scanned mesh
Function
The Target generator precisely positions child nodes on any parent and produces no geometry itself. It is typically used to place branches at specific points on a photogrammetry mesh.
How to use
Add a Target, increase its count, position each one with the gizmo in node mode, then attach any generator under it. Official example: samples/Learning/Photogrammetry/Oak_Photogrammetry/Target.spm. It is also used to align the original mesh during Convert in Place.
Key parameters (4 items)
Generation:ModeGeneration mode. Determines which distribution algorithm the children use: Classic (legacy, do not use), Proportional, Proportional steps, Absolute, Absolute steps, Phyllotaxy, Interval, Bifurcation, Flood, Parent.
Generation:FrequencyParent curve. Controls the distribution of child probability along the parent's length; X = parent position 0–1, Y = weight. Defaults to a constant 1, i.e. uniform over the whole length.
Generation:RotationRotates all of this generator's nodes as a group around the parent's spine. Combine with variance to scramble orientation.
Random Seeds:GenerationGeneration random seed. Changing this value gives a completely different tree — the master switch for producing variants in bulk.
SpineSpine generator (legacy)
Also known as: spine, skeleton line, center line, spline, curve skeleton, legacy
Legacy generators
Purpose
Legacy generator. Originally handled the spine, the leaves and the cap all at once
Function
Spine is a SpeedTree 5–7 generator that originally handled three jobs: the spine, the leaves and the cap. In v10 it has been split apart and is now covered by the Branch generator, the Frond generator and the Cap generator respectively. Legacy generators can still load old models and be upgraded, but they are not guaranteed to survive future versions — do not use them in new models.
How to use
You will only encounter it when opening an old model. Upgrade it to the new Branch / Frond / Cap with Actions → Upgrade legacy generator(s).... Hand-drawn branches now use Branch's Hand Drawn feature, so a separate Spine generator is no longer needed.
Key parameters (8 items)
Spine:LengthSpine length. As a proportion of the parent's length.
Spine:StyleSpine style. Set to Spine only to hide the branch geometry and keep only the skeleton (commonly used when attaching Fronds).
Spine:ShapeShape curve. X = position along the spine 0–1, Y = lateral offset. The key parameter for making branches bend naturally.
Spine:PathPath. Lets you define the spine's course by hand in hand-drawn mode.
Spine:NoiseNoise. Adds random perturbation to the spine.
Spine:DroopDroop. Simulates gravity pulling the branch tip downward.
Generation:ModeGeneration mode. Determines which distribution algorithm the children use: Classic (legacy, do not use), Proportional, Proportional steps, Absolute, Absolute steps, Phyllotaxy, Interval, Bifurcation, Flood, Parent.
Generation:FrequencyParent curve. Controls the distribution of child probability along the parent's length; X = parent position 0–1, Y = weight. Defaults to a constant 1, i.e. uniform over the whole length.
Also known as: subdivision, smooth, subdiv, subdivision surface, subdivision branch, legacy
Legacy generators
Purpose
Legacy generator. Superseded by the Branch generator
Function
Subdivision branch is the legacy subdivision-surface branch generator. Today's Branch generator supports both polygonal surfaces and subdivision surfaces, so it has been fully superseded.
How to use
You will only encounter it when opening an old model. After upgrading it is handled by the Branch generator, with subdivision controlled by the Skin:Subdivision parameter. Note that each extra subdivision level roughly quadruples the polygon count.
Key parameters (4 items)
Segments:LengthNumber of segments along the length. Too few and bends turn into straight kinks.
Segments:RadialNumber of segments around the cross-section circumference. Below 5 the polygonal facets become obvious.
Also known as: cage, enclosure, bounding cage, collision shell, legacy
Legacy generators
Purpose
Legacy generator. Superseded by the Tree generator
Function
Cage is the legacy subdivision cage generator. The Tree generator now always acts as the default subdivision cage, so it has been superseded.
How to use
You will only encounter it when opening an old model. Collision is now generated with the collision settings on the Tree generator, or with a Collision object scene object.
Key parameters (3 items)
Collision:TypeCollision body type.
Collision:CollisionWhether to generate collision for this node.
Segments:RadialNumber of segments around the cross-section circumference. Below 5 the polygonal facets become obvious.
LeafLeaf generator (legacy)
Also known as: leaf card, card, legacy leaf, legacy
Legacy generators
Purpose
Legacy generator. Superseded by Leaf mesh and Batched leaf
Function
Leaf is the legacy leaf generator. In v10 it is jointly superseded by the Leaf mesh generator (per-leaf editing) and the Batched leaf generator (high-performance batching).
How to use
You will only encounter it when opening an old model. After upgrading, choose Leaf Mesh (if you need per-leaf editing, dynamic LOD or growth animation) or Batched Leaf (if you only care about performance).
Key parameters (6 items)
Leaves:Size XLeaf size along X. Should match the texture's aspect ratio or the leaf will stretch.
Leaves:Size YLeaf size along Y.
Leaves:RotationLeaf rotation. Combine with variance so each leaf faces a different way.
Generation:FrequencyParent curve. Controls the distribution of child probability along the parent's length; X = parent position 0–1, Y = weight. Defaults to a constant 1, i.e. uniform over the whole length.
Material:OpacityOpacity texture. White is opaque, black is transparent; leaves get their shape from it.
Wind:WeightWind weight. 0 = completely still, 1 = fully wind-driven. Should increase with hierarchy level.
ProxyProxy generator (legacy)
Also known as: collision proxy, proxy, physics body, legacy
Legacy generators
Purpose
Legacy generator. Has no replacement — the world building feature was removed in SpeedTree 8
Function
Proxy is the legacy collision proxy generator. It has no replacement, because the world building feature it belonged to was removed in SpeedTree 8.0.
How to use
You will only encounter it when opening an old model. Collision is now generated with the collision settings on the Tree generator, or with a standalone Collision object scene object.
Key parameters (3 items)
Collision:TypeCollision body type.
Collision:CollisionWhether to generate collision for this node.
Collision:RadiusCollision radius. Usually slightly larger than the actual geometry so characters don't clip into it.
No matching nodes. Try a shorter keyword, or click “All” to clear the filter.
Seven complete, from-scratch case studies covering broadleaf trees, conifers, shrubs, grass, palms, vines and flowers.
Each one gives real parameter names and starting values, plus a completion checklist. They all share the same workflow skeleton, so work through them in order.
The image at the top of each case is an actual screenshot of the corresponding official sample opened in SpeedTree Modeler.
Read this before using the numbers in these cases
The parameter names, node names and menu paths come from the official SpeedTree Modeler 10 manual and were cross-checked against v10.2.0 on this machine.
But the specific values (such as “Spine:Length = 0.45” or “Gnarl = 0.15”) are teaching starting points, not official recommendations —
the official documentation explains what each parameter means and publishes no default or recommended values at all.
Their job is to get you to something that looks plausible on the first try, not to be copied verbatim. In real work, drive the values from a reference photo:
import it into the scene, get the scale right, then tune against it. That is also what the official docs recommend.
Note also that the vine (Case 6) is the only plant type with official step-by-step procedures; the rest are assembled from documented parameter semantics and published production experience.
案例一 从零做一棵阔叶乔木(橡树)
Case 1 Building a Broadleaf Tree (Oak) from Scratch
入门约 60–90 分钟阔叶乔木游戏资产主线案例
BeginnerAbout 60–90 minutesBroadleafTreeGame AssetCore Case
This is the most typical and the most valuable case of the set. Finish it and you will have touched every major SpeedTree mechanism. We build the whole thing from the empty file tree_templates/Games/Blank.spm.
目标:一棵高约 12 米、树冠张开、带 3 级 LOD 的橡树,面数控制在 4 万以内。
Goal: An oak roughly 12 m tall with an open crown and 3 LOD levels, kept under 40,000 triangles.
SpeedTree Modeler v10.2.0 打开官方示例 Broadleaf_Field.spm 的画面。左上角浮层是真实的面数统计The official Broadleaf_Field.spm sample opened in SpeedTree Modeler v10.2.0. The overlay at top left is the live polygon count
Launch SpeedTree Modeler, choose File → New, and pick the Blank template (or simply open tree_templates/Games/Blank.spm).
Confirm the scene units. SpeedTree defaults to 1 unit = 1 meter. A real oak stands 10–25 m tall; we use 12 m here.
Put a reference in the viewport: add a 1.8 m tall human figure under Scene Objects (the install directory ships app_data/man.tga, the official scale reference image) and use it to sanity-check the size of your tree.
Switch to the flat-shaded mode Other/_Flat.fx. Build the entire skeleton in this mode, reading silhouette only.
Why set the scale first: every length parameter in SpeedTree is a ratio relative to its parent, but what you ultimately export is an absolute size. Get the scale wrong and you will have to redo every parameter later.
Select the root node Tree, click Add, and choose Branch. This is your trunk. Select it and rename it Trunk (in a complex model always name your nodes, or you will lose track of them).
In Properties, set:
Parameter
Suggested value
Notes
Spine:Length
1.0
The trunk is the baseline, so its length is set to 1
Spine:Shape
Slight S curve
Pull the curve's midpoint a little to one side. Real trunks are never perfectly straight
Spine:Droop
0.02
A touch of droop, no more
Segments:Length
12
The trunk has to bend, so it needs a decent number of segments
Segments:Radial
10
The trunk will be seen up close, so it needs enough radial segments
Generation:First
0.0
The trunk starts at the base
Generation:Last
1.0
All the way to the top
Displacement:Flares
0.3
Root flare. Thickening the trunk where it meets the ground makes it look far more natural at once
Then add a little irregularity to the trunk: in the Forces group set Gnarl to 0.15 and Twist to 0.1.
Now look at the silhouette in flat-shaded mode: it should read as a slightly curved column that is a bit thicker at the base. If it is too straight, increase the Spine:Shape offset.
3第二步:做主枝Step 2: Build the Primary Branches
选中 Trunk,Add → Branch。这是第一级主枝。重命名为 Big Branches。
参数
建议值
说明
Generation:Mode
Proportional
按父级比例生成。树干越长主枝越多,符合真实情况
Generation:Proportional:Number
6(方差 2)
树干上大约 4–8 根主枝
Generation:Frequency
曲线:底部 0 → 0.35 处升到 1 → 顶部 0.8
关键。真实树木下半段主干是光的,主枝集中在中上部
Generation:First
0.25
0.25 以下不长主枝
Spine:Length
0.45(方差 0.1)
主枝约为树干的 45% 长
Spine:Shape
上凸弧线
主枝先平伸再微微上翘,这是橡树的典型形态
Spine:Droop
0.15
末端下垂,产生“垂枝”感
Generation:Orientation:Sweep
0,但给方差 360
让主枝绕树干均匀分布
Generation:Orientation:Alignment
0.4
主枝略微上扬而非完全水平
Generation:Proportional:Jumble
0.25
打破规整
Generation:Size scalar
曲线:底部 0.7 → 顶部 1.0
顶部主枝略粗(橡树特征),或反过来做锥形
Segments:Length
8
Segments:Radial
8
再加 Forces:Gnarl = 0.2,Forces:Repel 开启(避免主枝互相穿插)。
反复看剪影。一棵好的橡树剪影应该像一个不规则的球体,主枝从中心向外辐射并向上弯曲。如果主枝太短太密,像刺猬;太长太稀,像伞。调整 Spine:Length 和 Number 直到顺眼。
Select Trunk and choose Add → Branch. This is the first level of primary branches. Rename it Big Branches.
Parameter
Suggested value
Notes
Generation:Mode
Proportional
Generated in proportion to the parent. The longer the trunk, the more primary branches — which matches reality
Generation:Proportional:Number
6 (variance 2)
Roughly 4–8 primary branches along the trunk
Generation:Frequency
Curve: 0 at the bottom → 1 by 0.35 → 0.8 at the top
Critical. On a real tree the lower trunk is bare; the primary branches cluster in the middle and upper sections
Generation:First
0.25
No primary branches below 0.25
Spine:Length
0.45 (variance 0.1)
Primary branches run about 45% of the trunk length
Spine:Shape
Upward-convex arc
The branches reach out level, then tip up slightly — the classic oak gesture
Spine:Droop
0.15
The tips sag, producing that “weeping branch” feel
Generation:Orientation:Sweep
0, but give it 360 variance
Spreads the primary branches evenly around the trunk
Generation:Orientation:Alignment
0.4
The branches angle slightly upward rather than lying flat
Generation:Proportional:Jumble
0.25
Breaks up the regularity
Generation:Size scalar
Curve: 0.7 at the bottom → 1.0 at the top
Upper branches slightly thicker (an oak trait), or reverse it for a tapered look
Segments:Length
8
Segments:Radial
8
Then add Forces:Gnarl = 0.2 and turn on Forces:Repel (to keep the primary branches from intersecting one another).
Keep checking the silhouette. A good oak silhouette should read as an irregular sphere, with primary branches radiating out from the centre and curving upward. Too short and too dense looks like a hedgehog; too long and too sparse looks like an umbrella. Adjust Spine:Length and Number until it reads right.
Select Big Branches, choose Add → Branch, and rename it Small Branches.
Parameter
Suggested value
Generation:Mode
Proportional
Generation:Proportional:Number
5 (variance 2)
Generation:Frequency
High in the middle, low at both ends
Spine:Length
0.5 (variance 0.15)
Spine:Shape
A more pronounced arc
Spine:Jink
0.1
Segments:Length
6
Segments:Radial
5
Forces:Gnarl
0.25
Then add a third level, Twigs, with similar parameters but more of them (8–12), shorter (0.4), and cheaper on segments (Length 4 / Radial 4).
Show restraint with hierarchy. Past three branch levels, the returns from adding more real branches drop off sharply while the triangle count climbs steeply. An oak's crown density comes mainly from its leaves, not its branches. This case stops at three levels.
Select Trunk and choose Add → Cap. Add a Cap to Big Branches as well.
Without a cap, looking at the top of the trunk from above or from the side reveals a hollow tube opening. Cap has very few parameters; the main ones are Cap:Height and Cap:Radius, which you tune so it fits the end of the trunk. Twigs do not need caps.
6第五步:加叶片Step 5: Add Leaves
选中 Twigs(最末级细枝),Add → Leaf Mesh。
先只做一片叶子。在 Leaves 组里:
参数
建议值
说明
Leaves:Size X / Size Y
0.12 / 0.18
橡树叶约 12cm × 18cm。必须与贴图长宽比一致
Leaves:Fold
0.2
沿中轴对折,让卡片有立体感
Leaves:Bend
0.15
沿叶脉弯曲
Leaves:Rotation
0,方差 40
每片叶子朝向不同
Leaves:Twist
0,方差 25
扭转
Generation:Mode
Proportional
Generation:Proportional:Number
3
先放 3 片看清楚
Material:Material
指定叶片材质
用 Material:Color / Opacity / Normal / Subsurface 四张图
确认单片叶子的尺寸、朝向、形态都对之后,再把 Number 提到 8–12,并调 Generation:Frequency 让叶片在细枝中段最密。
Select Twigs (the last branch level) and choose Add → Leaf Mesh.
Start with a single leaf. In the Leaves group:
Parameter
Suggested value
Notes
Leaves:Size X / Size Y
0.12 / 0.18
An oak leaf is about 12cm × 18cm. It must match the aspect ratio of the texture
Leaves:Fold
0.2
Folds along the midrib so the card reads as a solid form
Leaves:Bend
0.15
Bends along the vein
Leaves:Rotation
0, variance 40
Gives every leaf a different facing
Leaves:Twist
0, variance 25
Twist
Generation:Mode
Proportional
Generation:Proportional:Number
3
Start with 3 so you can see what you are doing
Material:Material
Assign the leaf material
Use the four maps Material:Color / Opacity / Normal / Subsurface
Once the single leaf's size, orientation and shape all look right, raise Number to 8–12 and adjust Generation:Frequency so the leaves are densest along the middle of the twigs.
Check it in Overdraw mode. Switch to Other/Overdraw.fx; if large bright areas appear in the crown, the leaves are stacking badly. The fix: lower Number, or increase Leaves:Spread to spread the leaves apart.
Assign the bark material to the trunk and primary branches: Material:Color + Material:Normal + Material:AO.
Tune UV Mapping:U and V. U controls how many times the texture repeats around the trunk, V how many times it repeats along its length.
Switch to Texel_Density.fx to check. The trunk and the twigs should come out close in colour; if the twigs read clearly red or blue, the texel density is inconsistent — adjust the UV Mapping V value so the twigs repeat more times.
For close-ups, add Displacement:Amount to the trunk (0.05–0.15) and pair it with a denser Segments:Length/Radial mesh to get convincing bark relief.
8第七步:节疤与细节Step 7: Knots and Detail
选中 Trunk,Add → Knot。节疤让树干有“经历”,是提升真实感性价比很高的一步。
参数
建议值
Generation:Mode
Absolute
Generation:Absolute:Number
4–8
Generation:First
0.15(避开根部)
Generation:Orientation:Sweep
给 360 方差,让节疤分布在各个方向
Outer / Inner / Core
分别调三层的大小与凸起高度
想要苔藓感,可以再加一个 Decal 节点贴在树干下半段。
Select Trunk and choose Add → Knot. Knots give the trunk a history — one of the highest-value moves you can make for realism.
Parameter
Suggested value
Generation:Mode
Absolute
Generation:Absolute:Number
4–8
Generation:First
0.15 (keep clear of the base)
Generation:Orientation:Sweep
Give it 360 variance so the knots land in every direction
Outer / Inner / Core
Tune the size and bump height of each of the three layers
If you want a mossy feel, add a Decal node over the lower half of the trunk.
Select the root node Tree and find the Level of Detail group:
Parameter
Suggested value
Notes
Level of Detail:Count
4
LOD0 full detail → LOD3 billboard
Level of Detail:Billboard start
LOD 3
The last level uses a billboard
Level of Detail:Branch volume threshold
Increase at each level
Your main triangle reducer. Lets whole twigs disappear at low LODs
Level of Detail:Cap threshold
Increase at each level
Small branch ends stop being capped
Then add collision: for Trunk, set Collision:Radius slightly larger than the trunk radius. Use the Collision button in the toolbar to check that the collision volume hugs the trunk.
Step through the levels with the LOD button and confirm there are no obvious pops. If the crown suddenly “thins out” between LOD1 and LOD2, soften the Branch volume threshold ramp.
出变体:这棵树做完后,只改根节点上的 Random Seeds:Generation,另存为新文件,就得到一棵形态不同但风格一致的兄弟树。重复十次,一片森林就有了。
Confirm that the TOTAL triangle count in the viewport stats is within budget (under 40,000 for this case).
Pick the export preset for your target: __UnrealEngine (ST).ini for UE, ___Unity.ini for Unity.
After exporting, look at it in the engine: the tree's size, the LOD transitions, the wind motion, the textures.
Making variants: once this tree is finished, change only Random Seeds:Generation on the root node and save it as a new file, and you have a sibling tree with a different form but a consistent style. Do that ten times and you have a forest.
完成检查清单Completion checklist
树高符合目标(用参考图核对)
平光模式下剪影像橡树
树干根部有 Flares 扩张
主枝分布集中在中上部,下部主干裸露
有 Gnarl 扭曲,没有笔直的枝条
叶片尺寸与贴图长宽比一致
Overdraw 模式没有严重堆叠
Texel_Density 树干与细枝精度接近
风力权重按层级递增
LOD 切换无跳变,最后一级是公告板
面数在预算内
Tree height matches the target (verified against the reference figure)
The silhouette reads as an oak in flat-shaded mode
The trunk base has a Flares flare
Primary branches cluster in the middle and upper trunk, leaving the lower trunk bare
There is Gnarl distortion and no perfectly straight branches
Leaf size matches the texture's aspect ratio
Overdraw mode shows no severe stacking
Texel density is close between the trunk and the twigs
Wind weights increase level by level
LOD transitions show no popping and the last level is a billboard
Conifers are built on a completely different idea from broadleaves. A broadleaf forms its spherical crown by branching; a conifer forms its tapering spire from layers of whorled branches along the trunk, with the trunk barely showing. Understanding the whorled structure is the key to a good conifer.
目标:一棵高约 20 米的松树,层状轮生枝,针叶成簇,面数控制在 2.5 万以内。
Goal: A pine roughly 20 m tall with tiered whorled branches and clustered needles, kept under 25,000 triangles.
官方示例 Sample_Pine/Pine.spm。注意枝条呈明显的轮生层状分布,下部主干裸露The official Sample_Pine/Pine.spm. Note the distinctly whorled, layered branching and the bare lower trunk
Start from tree_templates/Games/Conifer.spm (recommended), or begin with Blank. If you start from Blank, build a tall, slender trunk first: Spine:Length = 1.0, Segments:Length = 16, Segments:Radial = 8, with almost no curvature — conifer trunks are usually very straight.
For real-world scale: we use 20 m here. A pine's crown usually occupies only the upper 2/3 of its height; the lower 1/3 is bare trunk.
2第一步:做轮生主枝(核心)Step 1: Build the Whorled Primary Branches (the Core)
Select the trunk, choose Add → Branch, and name it Whorl Branches. This is the single most important step in the whole case.
Conifer branches grow in rings (whorls), so Generation:Mode must be Steps rather than Proportional.
Parameter
Suggested value
Notes
Generation:Mode
Steps
Step mode, which produces the tiered, layer-by-layer look
Generation:Steps:Enabled
true
Enables stepping
Generation:Steps:Number
5–7
5–7 branches per tier, ringing the trunk
Generation:Steps:Spread
0.15
How much branches in the same tier spread in height
Generation:Steps:Per step frequency
1.0
Frequency per tier
Generation:Frequency
Curve: 0 below 0.3, then a steady 1 above it
No branches on the lower 1/3 — the pine's signature
Spine:Length
Curve: 0.5 at the bottom → 0.15 at the top
Critical. The lowest branches are the longest and they shorten going up, which builds the spire
Spine:Droop
0.2
Pine branch tips sag
Generation:Orientation:Alignment
0.6
The branches angle slightly upward
Driving Spine:Length with a curve is the core technique for shaping a pine: long at the bottom, short at the top, and a conical crown emerges on its own. Skip that curve and the tree turns into a cylinder that reads as fake at a glance.
Pine needles do not grow one by one; they grow in clusters along the branch. So use a Frond or a Leaf Mesh to make the needle clusters.
Select Whorl Branches, choose Add → Leaf Mesh (or Frond), and name it Needle Cluster.
Parameter
Suggested value
Notes
Leaves:Size X / Size Y
0.25 / 0.5
A needle cluster is far larger than a single broadleaf
Leaves:Fold
0.35
The fold gives the cluster volume
Generation:Mode
Proportional
Generation:Proportional:Number
12–18
Many clusters along a single branch
Generation:Frequency
Even along the branch, slightly denser at the tip
Leaves:Rotation
Variance 60
Needle clusters face in very random directions
The needle texture is usually an image of a whole cluster rather than a single needle. Make sure the alpha in Material:Opacity is clean, or it will smear into a blob at distance.
Performance tip: nearly all of a conifer's triangles live in the needle clusters. If you blow the budget, cut Number first and scale Leaves:Size X/Y up — fewer clusters at a larger size covering the same volume is the standard low-LOD move (the Level of Detail:Frond size scalar parameter does exactly this).
A pine's top is pointed. The trick is to make the topmost whorl extremely short: pull the value at the far right end of the Spine:Length curve (X=1.0) down to 0.05. The top then tapers into a point on its own.
Also add a Cap to the trunk to close the open tube at the top.
Some conifers (cedar, spruce) carry a single “leader” shooting straight up at the top. Add a separate Branch with Generation:Absolute:Number = 1 and Spine:Length set to 0.15 so that it only grows at the very top.
Pine bark is characterised by deep fissures and scaly plates. Use displacement rather than relying on the normal map alone:
Raise Segments:Length to 16–20 and Segments:Radial to 10–12 to give displacement enough mesh.
Set Displacement:Amount to 0.1–0.2.
Point Displacement:Source at the pine bark displacement map.
Adjust Displacement:U scale / V scale so the fissures match real-world scale.
The official sample folder samples/VFX/Sample_Pine/Bark/ ships ready-made pine bark maps, including three strength variants — Pine_Bark_VertexDisplacement.png, Pine_Bark_VertexDisplacement_SmallBumps.png and Pine_Bark_VertexDisplacement_exaggerated.png — that you can reference directly.
The LOD strategy for a conifer is similar to a broadleaf's, with one difference: needle clusters can be heavily reduced in number and scaled up at low LODs, because a cluster is a simple shape and enlarging it costs very little visually.
Level of Detail:Count = 4
Raise Level of Detail:Branch volume threshold at each level so the lower twigs vanish first (the upper crown already hides them)
Use Level of Detail:Frond count and Frond size scalar to reduce the needle clusters and enlarge them
The last level uses a billboard
The official samples/VFX/Sample_Pine/Pine.spm is a finished pine; open it and compare parameters.
完成检查清单Completion checklist
树干笔直(松树不像橡树那样弯)
主枝呈明显的轮生层状分布
下部 1/3 主干裸露无枝
枝条长度从下往上递减,形成塔形
顶部收尖
针叶成簇而非单根
树皮用置换做出深裂纹
低 LOD 下针叶簇数量减少但尺寸放大
The trunk is straight (a pine does not curve the way an oak does)
Primary branches form clearly tiered whorls
The lower 1/3 of the trunk is bare and branchless
Branch length decreases from bottom to top, forming a spire
The top comes to a point
Needles grow in clusters, not singly
Bark fissures are made with displacement
At low LODs the needle clusters are fewer in number but larger in size
A shrub's defining structural trait is that it has no single trunk — multiple stems rise straight out of the ground. It is simpler to build than a tree, but be careful not to end up with a “shrunken tree”.
目标:一丛高约 1.5 米、多干、枝叶茂密的灌木,面数控制在 8 千以内。
Goal: A multi-stemmed shrub roughly 1.5 m tall with dense foliage, kept under 8,000 triangles.
官方示例 Games/Bush/Bush_Desktop.spm——从地面直接分出多根枝条,没有单一主干The official Games/Bush/Bush_Desktop.spm — multiple stems rising straight from the ground, with no single trunk
1起点选择Choosing a Starting Point
两个选择:
用 tree_templates/VFX/__Bush.spm 作为起点(最快)。
从 Blank 开始,自己搭多干结构(更能理解原理)。
参考高度:灌木 0.8–3 米,本案例取 1.5 米。
Two options:
Start from tree_templates/VFX/__Bush.spm (the fastest route).
Start from Blank and build the multi-stem structure yourself (better for understanding how it works).
For real-world scale: shrubs run 0.8–3 m; we use 1.5 m here.
Generation:First = 0 (start at the very bottom) and Generation:Last = 0.05 (branching confined to a short section at the base). This is what creates the clumping habit.
Generation:Orientation:Sweep = 0 with variance 360, so each stem heads off in a different direction.
Spine:Length = 0.8 (variance 0.2) so the stems differ in height.
Spine:Shape = a pronounced outward arc, so the stems splay outward right from the base.
Forces:Gnarl = 0.3; shrubs are messier than trees.
Common mistake: building a shrub as “one trunk plus branches” gives you a shrunken tree, and it will look wrong. A shrub must fork at ground level, with no obvious single trunk.
3第二步:二级枝Step 2: Secondary Branches
选中 Stems,Add → Branch,命名 Twigs。
参数
建议值
Generation:Mode
Proportional
Generation:Proportional:Number
6(方差 3)
Generation:Frequency
中上部为主
Spine:Length
0.6(方差 0.2)
Spine:Shape
向外弧线
Segments:Length
5
Segments:Radial
4
Forces:Gnarl
0.35
灌木通常不需要第三级枝——用叶片填充体积更划算。
Select Stems, choose Add → Branch, and name it Twigs.
Parameter
Suggested value
Generation:Mode
Proportional
Generation:Proportional:Number
6 (variance 3)
Generation:Frequency
Mainly the middle and upper sections
Spine:Length
0.6 (variance 0.2)
Spine:Shape
Outward arc
Segments:Length
5
Segments:Radial
4
Forces:Gnarl
0.35
A shrub usually does not need a third branch level — filling the volume with leaves is a better trade.
4第二步(替代方案):用 Shape Control 做团块状灌木Step 2 (Alternative): Building Mounded Shrubs with Shape Control
在 Shape Control 正常工作之前,要让生成器保持"干净"——不要加噪波(Noise)、重力(Gravity)和力场(Forces)。这些东西会干扰形状约束,让你搞不清到底是哪个参数在起作用。等形状对了,再逐个加回去。
还有一点要注意:Shape Control 会覆盖枝条长度设置。也就是说,启用之后你在 Spine:Length 上调的长度可能不再生效——这是设计如此,不是 bug。最后用 Generation:Pruning 配 Prune: Down 清理掉朝下乱长的枝条。
The approach above builds from the ground up. If your shrub is a rounded mound (landscape shrubs, clipped hedges), the official docs recommend a different route: Shape Control. It is one of the few shaping techniques the official documentation spells out explicitly.
How it works
Shape Control attached to
Result
The trunk
A spherical “lollipop” tree — every branch is constrained into a ball
A second-level generator
Puffs grow along the branches — exactly the mounded shrub form
The default shape is a sphere (Sphere); you can switch it to other shapes.
Order of operations
Build the skeleton first (trunk + first-level branches), but do not add leaves yet.
Select the generator level whose shape you want to constrain and enable Shape Control.
Adjust the shape's position, size and distribution until the mound's outline looks right.
Only at the very end add leaves, noise and forces.
One key rule from the official docs
Before Shape Control behaves correctly, keep the generator “clean” — do not add Noise, Gravity or Forces. Those interfere with the shape constraint and leave you unable to tell which parameter is actually doing the work. Once the shape is right, add them back one at a time.
One more thing to watch: Shape Control overrides the branch length settings. In other words, once it is enabled the length you set on Spine:Length may stop taking effect — that is by design, not a bug. Finish by using Generation:Pruning together with Prune: Down to clean up branches that shoot downward.
用 Overdraw.fx 检查。灌木很容易堆叠过度,如果树冠中心一大片高亮,降低 Number 或增大 Leaves:Spread。
另一种更省面的做法:用 Batched Leaf 替代 Leaf Mesh,渲染开销更小。
Select Twigs and choose Add → Leaf Mesh.
Leaves are smaller than a tree's: Leaves:Size X/Y ≈ 0.05 / 0.08.
Use plenty of them: Generation:Proportional:Number = 8–12. A shrub's density comes entirely from its leaves.
Leaves:Fold = 0.25, Leaves:Bend = 0.2.
Give Leaves:Rotation a wide variance (50–70) so the foliage looks loose and fluffy.
Check it with Overdraw.fx. Shrubs over-stack very easily; if the centre of the canopy lights up as one big bright patch, lower Number or increase Leaves:Spread.
A cheaper alternative that saves triangles: use Batched Leaf instead of Leaf Mesh — it costs less to render.
6第四步:地面接触Step 4: Ground Contact
灌木是贴地生长的,所以根部处理很重要:
给 Stems 加 Displacement:Flares = 0.4,让根部有扩张。
如果灌木比较矮,可以在底部加一点低矮的草叶或落叶(用 Zone 散布),让它与地面衔接更自然。
确保最底部的叶片没有穿到地面以下——用 Forces:Flooring 限制。
Shrubs grow tight to the ground, so how you handle the base matters a lot:
On Stems, add Displacement:Flares = 0.4 so the base flares out.
If the shrub is fairly short, scatter a little low grass or fallen leaves at its base (spread with a Zone) so that it meets the ground more naturally.
Make sure the lowest leaves do not punch through the ground — constrain them with Forces:Flooring.
7第五步:优化与导出Step 5: Optimization and Export
灌木在游戏里通常是成片出现的,所以性能要求比单株乔木更严:
面数目标 3,000–8,000。
LOD 只要 2–3 级(近景 + 公告板)。
考虑用 Batched Leaf 降低 draw call。
如果是远处的地被灌木,直接用公告板即可,不需要真几何体。
In a game, shrubs usually appear in masses, so the performance bar is stricter than for a single tree:
Triangle target 3,000–8,000.
Only 2–3 LOD levels are needed (close-up + billboard).
Consider Batched Leaf to reduce draw calls.
For distant ground-cover shrubs, a billboard alone is enough — no real geometry required.
完成检查清单Completion checklist
从地面就分叉,没有单一主干
各干高度、朝向有明显差异
枝叶蓬松,不呈规则的球形
底部与地面衔接自然
面数在 8 千以内
LOD 只有 2–3 级
It forks at ground level with no single trunk
The stems differ clearly in height and direction
The foliage is loose and airy, not a regular sphere
草的做法和树完全不同:不需要层级结构,而是用 Zone 节点在区域内散布草叶网格。这是理解 Zone 的最好案例。
Grass is built nothing like a tree: there is no hierarchy, and instead a Zone node scatters blade meshes across an area. This is the best case for understanding Zones.
目标:一块约 1×1 米的草皮,含 3 种草叶形态、随机高度与朝向,面数控制在 3 千以内。
Goal: A patch of grass about 1×1 m with 3 blade shapes and randomised height and facing, kept under 3,000 triangles.
官方示例 Grass Weeds.spm,约 20 万三角面。草叶在节点树里由 Frond 与 Branch 组成The official Grass Weeds.spm sample, roughly 200k triangles. The blades are built from Frond and Branch generators
A Zone produces no geometry of its own; it needs something to scatter. There are two ways to do this:
Use Zone Mesh entries: add entries in the Zone's Meshes group, each pointing at a blade mesh (.obj / .fbx).
Use a child generator: add a Leaf Mesh under the Zone and let it generate blades procedurally.
The first option is recommended: with blade counts this high, ready-made low-poly meshes are the least trouble. The official samples/Games/ folder has blade assets you can reference.
In the Meshes group, add 3 entries, each pointing at a different blade mesh (upright, curved, and one with a seed head), and use Meshes:Weight to control the blend (for example 0.5 / 0.3 / 0.2).
4第三步:摆放规则Step 3: Placement Rules
在 Placement 组里设置:
参数
建议值
说明
Placement:Placement
随机
随机散布
Placement:Rotation
绕 Z 轴 0–360 随机
必须随机,否则所有草叶朝向一致,一眼假
Placement:Scale
0.7 – 1.3
高度随机。真实草地高矮不齐
Placement:Offset
Z 轴贴合地面
确保草根不悬空也不入土
Meshes:Count
80–150
1 平方米的草叶数量
草的三个随机必须开:位置随机、朝向随机、缩放随机。少任何一个,草地都会显得像塑料草坪。
In the Placement group, set:
Parameter
Suggested value
Notes
Placement:Placement
Random
Random scattering
Placement:Rotation
Random 0–360 around Z
Must be random, otherwise every blade faces the same way and it reads as fake immediately
Placement:Scale
0.7 – 1.3
Randomised height. Real grass is uneven
Placement:Offset
Snap to the ground on Z
Keeps the roots from floating above or sinking into the ground
Meshes:Count
80–150
Blade count per square metre
All three randomisations must be on: random position, random facing, random scale. Drop any one of them and the grass looks like plastic turf.
The place where grass gives itself away is the base — without shadow where the blades meet the ground, they look like they are stuck into paper.
Darken the base of the blades in the Ambient Occlusion group. SpeedTree stores AO in the red channel of the vertex colour, so this step gets written into vertex colours.
When rendering, switch to _Vertex Colors/__Red.fx to check: the bottom of the blades should be clearly darker than the top.
6第五步:硬性约束(最容易踩坑的一步)Step 5: Hard Constraints (the Easiest Step to Get Wrong)
Grass has several hard constraints that are completely unlike any other plant. The official documentation states them explicitly, and getting them wrong means the grass will not show up in the engine at all, or will behave strangely:
Constraint
Notes
One LOD only
A grass model must have only one LOD level. The grass system itself has no concept of LOD, so multiple levels have no effect.
One material only
The entire grass model must use a single material.
No billboards
Because the grass system has no LOD, even the lowest LOD cannot use a billboard. This is the exact opposite of how trees work.
“Used as grass” must be checked
You have to check that option in the Compiler, or the engine will not treat the model as grass.
Why it is the opposite of trees
Trees control distant performance with LODs + billboards; grass is controlled by the engine's grass system (density maps, instanced rendering). So do not apply the tree LOD mindset to grass — that is wasted work, and it can stop the grass from rendering at all.
7第六步:风与打包Step 6: Wind and Packing
草的风力权重应该很高(Wind:Weight ≈ 0.9),草的摆动是草地观感的重要部分。
导出时用 Standard_Grass 顶点打包方案(vertex_packing/Standard_Grass.xml),它把混合与 AO 压进同一个字节,比常规模型更省。草的数量极大,所以压缩更激进。
Grass wind weights should be high (Wind:Weight ≈ 0.9); the sway of the blades is a big part of how a meadow reads.
Export with the Standard_Grass vertex packing scheme (vertex_packing/Standard_Grass.xml); it packs blend and AO into the same byte, which is leaner than the standard model layout. Grass is used in enormous numbers, so the compression is more aggressive.
For large grassland areas, consider a merged-draw preset such as __Unity (one draw call).ini to compress the whole field into a single draw call.
Give the blade mesh an even number of segments, with a line of vertices running down the centre of the blade — otherwise bending in the wind produces deformation artifacts.
完成检查清单Completion checklist
草叶位置、朝向、缩放三者都随机
3 种以上草叶形态混合
根部有 AO 变暗
风力权重高,草会摆动
只有一个 LOD 级别
只使用一个材质
没有使用公告板
已勾选 Used as grass
使用 Standard_Grass 顶点打包
面数在 3 千以内
Blade position, facing and scale are all randomised
A palm's structure is highly unusual: one straight, unbranched trunk topped by a crown of huge pinnate fronds. That is exactly the situation the Frond node handles best. Getting a palm right comes down to the droop curve of the fronds and how you treat the petioles.
目标:一棵高约 8 米、顶部有 12–16 片羽状叶的棕榈,面数控制在 1.5 万以内。
Goal: A palm roughly 8 m tall with 12–16 fronds at the top, kept under 15,000 triangles.
官方示例 Sample_Palm/Palm.spm。叶片长度远大于树干直径,并带有明显的下垂弧线The official Sample_Palm/Palm.spm. The fronds are far longer than the trunk is wide, with a pronounced drooping arc
Start from tree_templates/Games/Palm.spm or tree_templates/VFX/Palm.spm. The finished official models samples/Games/Palm/Palm_Desktop.spm and samples/VFX/Sample_Palm/Palm.spm are worth opening for comparison.
For real-world scale, palms run 5–20 m; we use 8 m here.
A palm trunk is straight, slender, unbranched, and ringed with old leaf scars.
Parameter
Suggested value
Notes
Spine:Length
1.0
Spine:Shape
Nearly straight, or an extremely slight one-way bend
Palm trunks are very straight — do not add much curvature
Spine:Noise
Very small (0.02)
Just a hint of irregularity
Forces:Gnarl
0.03
Palms need almost no gnarl
Segments:Length
20+
The trunk is long, so it needs enough segments
Segments:Radial
10
Generation:First
0.75
Fronds only on the top 25%; the lower trunk is completely bare
The ringed leaf scars on the trunk surface come from the material. The official samples/Games/Palm/Bark/ folder has ready-made maps such as Palmetto_bark_2 (palm bark), Stem_1 (petiole) and Cap_1.
Select the trunk, choose Add → Frond, and name it Fronds.
Parameter
Suggested value
Notes
Generation:Mode
Absolute or Interval
Palm frond counts are fixed, so an absolute count is more direct
Generation:Absolute:Number
14 (variance 2)
12–16 fronds
Generation:Frequency
1 only over a short section at the top
Works together with Generation:First = 0.75
Generation:Orientation:Sweep
0, variance 360
Spreads the fronds evenly around the trunk
Generation:Orientation:Alignment
0.2 – 0.4
The fronds open outward instead of hugging the trunk
Spine:Length
1.8 – 2.5
The fronds are longer than the trunk — a defining scale cue for palms
Spine:Droop
0.4 – 0.6
The most important one. Palm fronds have a pronounced droop curve
Spine:Shape
An S curve: convex first, then concave
The frond base rises, the middle flattens out and the tip droops
Then use the Shape parameter group to control the outline of the whole frond:
Pick the appropriate pinnate style with Shape:Style.
Shape:Position controls how the leaflets are distributed along the rachis.
Shape:Size controls how leaflet size varies — usually the leaflets are longest at the middle of the frond and shorten toward both ends.
Three keys to palm fronds
Droop: if Spine:Droop is not high enough, the fronds stick out like sticks.
Scale: frond length must be several times the trunk diameter, or the proportions are wrong.
Dead fronds: a real palm trunk carries a few dead, drooping, yellowed old fronds. Duplicate the Frond node, shrink it, raise Spine:Droop, swap in a dead-frond material and place it below the live frond layer.
4第三步:枯叶层Step 3: The Dead Frond Layer
选中 Fronds,用 Actions → Duplicate 复制一份,重命名 Dead Fronds。
Some palms carry a cluster of fruit at the top. Add a small Leaf Mesh or Zone at the tip of the trunk and attach a fruit mesh to it.
The official samples/Games/Palm/Meshes/ folder has Stalk.obj and Stalk_Hero.obj (petiole meshes) that you can use to build finer petioles, or to replace the procedurally generated ones.
Palm fronds have a large area and little mass, so wind weights should be high (0.8–0.95).
The trunk barely moves (0.02–0.05).
Offset the phase between fronds, or the whole crown will sway in unison like a single board.
One export note: palms have few but very large fronds, so billboards are a poor fit for their LODs (the shape is too distinctive and a billboard distorts visibly). Reducing the geometry is the better route.
完成检查清单Completion checklist
树干直、不分叉
下部 3/4 完全裸露,只有顶部有叶
叶片长度远大于树干直径
叶片有明显下垂弧线
有枯叶层挂在绿叶下方
树干有环状叶痕纹理
风力权重高且相位错开
The trunk is straight and unbranched
The lower 3/4 is completely bare, with fronds only at the top
Frond length is far greater than the trunk diameter
The fronds have a pronounced droop curve
A dead frond layer hangs below the live fronds
The trunk has ringed leaf-scar texturing
Wind weights are high and the phases are offset
案例六 藤蔓
Case 6 Vines
进阶约 40–60 分钟藤蔓Vine 生成器物理模拟官方有教程
IntermediateAbout 40–60 minutesVineVine GeneratorPhysics SimulationOfficial Tutorial Available
Vines are the only plant type with a complete step-by-step official tutorial — because SpeedTree Modeler 10 added a dedicated Vine generator. It is essentially “a Branch generator with a physics simulation applied”: the control points are solved as particles with gravity and constraints, so the vine droops naturally, tangles around itself and hugs collision bodies.
目标:一株缠绕在树干上的藤蔓,含主藤与叶片;同时掌握官方的三条藤蔓流程。
Goal: A vine wrapped around a tree trunk, with a main stem and leaves — and a working grasp of the official vine workflows.
官方示例 Learning/Vines/Vines_Simulation.spm。Vine 生成器的形状由物理模拟求解得出The official Learning/Vines/Vines_Simulation.spm. The Vine generator's shape is solved by physics simulation
1先理解 Vine 生成器的物理机制First, Understand the Vine Generator's Physics
The biggest difference between the Vine generator and every other generator is this: its shape is solved, not specified directly by parameters.
Property
Notes
Control points = particles
The spine's control points are solved as particles under gravity and constraints. Segments:Accuracy controls the particle count.
It will not pass through the ground
The particles are constrained by the ground, so the vine never droops below it.
Geometry forces are treated as collision bodies only
Important: a vine does not respond to a geometry force's attract / repel behaviour; it treats the force purely as a collision body. So you cannot use the “pull the vine over with an attractor” approach.
There is a pass-order requirement
The Vine generator must be in a later pass than the generator that produces that geometry force, or the force has no effect.
Performance-sensitive
The official guidance is explicit: keep iteration count and segment count as low as possible.
Parameters unique to vines
Parameter
Purpose
Spine:Style
Default (free simulation) or Match parent (follow the parent branch). Use the latter for low-poly game vines.
Spine:Droop:Style
The droop switch. Set it to Off while you position the vine, then switch it to On to test gravity — this is a key official tip.
Spine:Droop:Amount
Droop strength.
Spine:Droop:Friction
Friction. Governs the resistance as the vine slides across collision surfaces.
Spine:Droop:Stiffness
Stiffness. Higher is more rigid, lower is more supple.
Spine:Droop:Iterations
Iteration count. Higher is more stable and slower.
Spine:Droop:Resolve steps
Solver steps.
Spine:Droop:Self-collide
Self-collision. When enabled, the vine will not pass through itself.
Match parent: Start / End
The start and end range in Match parent mode.
Pin: Start / End / Hand-drawn / Additional
Pins the endpoints. Turning Pin off lets the vine detach from the model and fall freely.
官方给的这条技巧值得单独记住:Droop:Style 先 Off 再 On。因为一旦开了重力,藤蔓会立刻垂下去,你就很难判断"位置不对"还是"重力太大"。先关掉重力摆位,是唯一能把这两件事分开调的办法。
This is the first complete workflow given in the official docs, suited to batch generation and to cases where the vine has to conform automatically.
Add a Vine generator — any of three ways:
Attach it under a parent generator;
Ray-cast it onto the model surface with a Projector;
Grow it out of a Zone generator (good for a carpet of vines).
Create a geometry force — generate one from the generators or meshes you want the vine to interact with. This step decides what the vine will “wrap around”.
Enable that geometry force in the Vine generator's properties.
Note: the Vine generator must be in a later pass than the generator that produces the force, or the force has no effect (you will see the vine “pass straight through”).
Tune the parameters:
Need more detail or more accurate collision → raise Segments:Accuracy;
First set Spine:Droop:Style to Off; the vine is then unaffected by gravity, which makes it easy to place correctly;
Once the position is right, set Droop:Style to On and watch it fall naturally under gravity;
Fine-tune the droop with Droop:Amount / Stiffness / Friction.
This official tip deserves to be remembered on its own: Droop:Style Off first, then On. Once gravity is on, the vine drops immediately and it becomes very hard to tell whether the “position is wrong” or the “gravity is too strong”. Positioning with gravity off is the only way to tune those two things separately.
3方法 B:低模游戏藤蔓(官方流程)Method B: Low-Poly Game Vines (official workflow)
游戏里的藤蔓通常只是"贴着墙的一层装饰",不需要真实物理模拟。官方为此给了专门的低模流程:
把 Vine 生成器挂到一个 Branch 生成器下面。
把 Spine:Style 设为 Match parent——藤蔓会贴合父级枝条的形状,而不是自由模拟。
In a game, a vine is usually just “a layer of decoration stuck to a wall”, with no need for real physics simulation. The official docs give a dedicated low-poly workflow for exactly that:
Attach the Vine generator under a Branch generator.
Set Spine:Style to Match parent — the vine follows the shape of the parent branch instead of simulating freely.
Adjust Match parent: Start / End to control where the vine starts and ends along the parent.
Adjust Droop to give it a slight sense of sag.
In this mode each parent produces only one node, so the triangle count is very controllable. If you need to go cheaper still, the docs also mention the Shell generator — it can wrap the parent branch in “moss, algae or a low-poly vine”, which is cheaper than generating real vine geometry.
A vine's leaves cause more trouble than the main stem — because the leaves are placed independently, they easily punch into the surface the vine is climbing.
The official documentation's solution is Force Alignment:
The official wording is: to keep ivy leaves from passing through the wall they grow on, you need the alignment feature.
In the Vines sample shipped with the official assets, every leaf uses alignment as a reference.
You can also use Generation:Mesh alignment (Tangent / Binormal / Parent XYZ / World XYZ) to align the leaves to the surface direction of the parent mesh.
Other leaf settings for vines:
Attach the leaves to the Vine generator or a child Branch using a Leaf Mesh.
The distribution is usually fairly sparse; use a low Generation:Frequency curve.
The size is slightly smaller than leaves on a tree.
The vine as a whole sways in the wind; Wind:Weight can be 0.3–0.6 (higher than a branch, lower than a leaf).
If the vine climbs a building, lower the weight on the parts of the main stem that touch the wall, or it will visibly clip through.
On performance, remember the official reminder: keep iteration count and segment count as low as possible.Spine:Droop:Iterations and Segments:Accuracy are the two most expensive parameters.
For game projects, prefer Method B (Match parent); it produces only one node per parent, which makes the triangle count the most controllable.
Vines are usually exported together with the object they climb, so make sure the two sets of coordinates line up.
完成检查清单Completion checklist
藤蔓紧贴攀附物表面,没有穿模
主藤有自然的下垂与缠绕
几何力场已启用,且 Vine 生成器在更晚的 pass 里
摆位时用了 Droop:Style 先 Off 再 On 的技巧
叶片使用了力场对齐,没有穿墙
迭代次数与分段数保持在合理范围
游戏项目使用了 Match parent 模式或 Shell 生成器
The vine hugs the surface it climbs, with no clipping
The main stem droops and tangles naturally
The geometry force is enabled and the Vine generator sits in a later pass
Positioning used the Droop:Style Off-then-On technique
The leaves use force alignment and do not clip through walls
Iteration and segment counts are kept in a sensible range
Game projects use Match parent mode or the Shell generator
SpeedTree is not only for trees. For non-tree plants such as flowers, mushrooms and ferns, the approach is a minimal skeleton plus a lot of mesh or leaves. The official samples/VFX/Sample_Mushroom/Mushroom.spm is the best reference.
目标:一丛蘑菇或一朵花,理解“非树木”建模的思路。
Goal: A cluster of mushrooms or a single flower, and an understanding of how “non-tree” modelling works.
官方示例 Sample_Mushroom/Mushroom.spm(约 2 万面)。菌盖是导入的网格,菌柄用 Branch 生成The official Sample_Mushroom/Mushroom.spm (about 21k triangles). The cap is an imported mesh; the stem is a Branch generator
做一丛蘑菇时,用 Zone 散布多个蘑菇实例,或者复制多份 Branch Mesh 并随机旋转缩放。
Select Tree, choose Add → Branch, and name it Stem.
The stem is short and thick: Spine:Length = 0.5, Segments:Length = 8, Segments:Radial = 8.
The stem usually bends slightly: give Spine:Shape a little curvature.
The base of the stem is a little thicker: Displacement:Flares = 0.5.
Select Stem, choose Add → Branch Mesh (or Mesh Detail), and point it at the cap mesh.
Use Mesh:Scale / Rotation / Offset to seat the cap on top of the stem.
The cap material needs Material:Color, Normal and Subsurface. A mushroom cap has a very strong subsurface-scattering quality, so give Material:Subsurface Amount a fairly high value.
The official samples/VFX/Sample_Mushroom/Bark/ folder contains the complete Mushroom_White map set (AO, Color, Custom, Custom2, Gloss, Height, Metallic, Normal, Specular, SubsurfaceAmount, SubsurfaceColor, VertexDisplacement) — a direct reference for how the channels should be set up.
To build a cluster of mushrooms, scatter several mushroom instances with a Zone, or duplicate the Branch Mesh several times with random rotation and scale.
For petal arrangement you can borrow the official Phyllotaxy mode directly — the official docs specifically mention that one of its uses is “a single group at the tip, like petals”. So the petals do not have to be placed by hand one at a time; Phyllotaxy lays them out automatically.
Add → Branch for the flower stem. Slender and slightly curved: Spine:Length = 1.0, Segments:Radial = 4 (the stem is very thin and does not need to be round).
Add a Leaf Mesh at the tip of the stem for the petals. Petals are just leaves, except that:
They are smaller.
Leaves:Fold and Bend are given larger values so the petals curl.
The material uses a petal texture, with a high Material:Subsurface Amount (petals are strongly translucent).
Generation:Mode is set to Phyllotaxy, and Generation:Phyllotaxy:Arrangement:Children per node controls the petals per whorl (5–8).
Use Generation:First / Last to confine the petals to a short section at the very top of the stem.
The stamens can be a very small Branch or a Mesh Detail.
The leaves grow on the lower part of the stem; add another Leaf Mesh node and confine it to the lower half with Generation:First.
If the petals need to conform to the curve of the receptacle, use Generation:Mesh alignment (Tangent / Binormal) to align them to the parent mesh surface.
For a bed of flowers, scatter them with a Zone.
The translucency of the petals is what makes or breaks it
Petals are extremely thin, translucent tissue. Set Material:Subsurface Amount too low and the flower looks like a sheet of plastic; the Material:Subsurface colour should lean warm (the colour of sunlight passing through a petal) rather than the petal's own albedo. The official toolset provides a dedicated Subsurface Check render mode for checking this.
The official template tree_templates/VFX/_Flower.spm is a ready-made starting point.
4蕨类的做法Building Ferns
蕨类和棕榈结构相似,但更矮更密:
用 Frond 做羽叶,Spine:Length 较小(0.5–0.8)。
Spine:Shape 做成漂亮的弧形——蕨叶的弧线是它的标志。
数量多(10–20 片),从中心向外辐射。
Generation:Orientation:Sweep 方差 360。
用 Zone 散布成蕨类丛。
Ferns resemble palms in structure, but shorter and denser:
Use a Frond for the fronds, with a smaller Spine:Length (0.5–0.8).
Give Spine:Shape a graceful arc — the curve of a fern frond is its signature.
Use plenty of them (10–20), radiating outward from the centre.
Get the scale right: a mushroom cap may be only 5 cm across, a flower only 3 cm. Get the scale wrong and they will look like giant plants in the scene.
Turn subsurface scattering on: flowers, mushrooms and ferns are all thin, translucent tissue, and Material:Subsurface Amount is the key to making them come alive.
Use a Zone for clumping: these plants rarely appear alone, so scattering them with a Zone is more efficient.
You can relax the triangle budget: if they only ever appear in close-ups, spend more triangles in exchange for quality.
完成检查清单Completion checklist
尺度与真实一致(蘑菇厘米级、花厘米级)
次表面散射开启,有透光感
菌盖/花瓣有卷曲而非平面
用 Zone 做丛生而非单个摆放
材质通道齐全(Color/Normal/Subsurface)
Scale matches reality (mushrooms and flowers in the centimetre range)
Subsurface scattering is on and they read as translucent
Caps and petals curl rather than staying flat
They are clumped with a Zone rather than placed one by one
The material channels are complete (Color/Normal/Subsurface)
The tree looks fake and plasticky, like a pile of paper cutouts
This is the most common complaint, and it is usually several causes stacked on top of each other. Check them in this order:
No Gnarl. In the Forces group, set Gnarl to 0.1–0.3. Perfectly straight branches are the number one source of “fake”.
Jumble is 0. Check Generation:Proportional:Jumble or Absolute:Jumble and give it 0.2–0.4. Real plants never arrange anything in a perfectly regular pattern.
No subsurface scattering. If a leaf's Material:Subsurface Amount is 0, the leaf reads as a sheet of plastic. Raise it to 0.3–0.6.
No vertex-color AO. Switch to _Vertex Colors/__Red.fx and look: if the whole tree is a flat, even grey, there is no AO. The interior of a canopy should be clearly darker than the outside.
Leaf orientation is too uniform. Add variance to Leaves:Rotation and Leaves:Twist.
Leaves have no Fold. Give Leaves:Fold 0.1–0.3 and flat cards immediately gain a sense of volume.
The canopy shape is wrong — too round, too flat, or like a hedgehog
Canopy shape is determined by how the main branch length varies with height, not by branch count.
Like a hedgehog (branches too short and too dense): increase Spine:Length and reduce Generation:Proportional:Number.
Like an umbrella (branches too long and too sparse): do the opposite.
Too round: add a curve to Spine:Length so the lower branches are long and the upper ones short (or the reverse, depending on the species). Real canopies are irregular.
Uniformly thick from top to bottom: use the Generation:Size scalar curve to drive child size against the parent's position.
The fastest diagnostic: switch to the Other/_Flat.fx flat-light mode and look at the silhouette. If the silhouette is right, the tree is right; if the silhouette is wrong, no amount of extra leaves will save it.
The branches are too regular, ringed like something man-made
This means you are using a distribution mode that is too regular, or you are missing randomness.
In Steps mode, give Generation:Steps:Spread a non-zero value so that branches on the same tier spread out in height.
Add variance to Generation:Orientation:Sweep (for example ±30°) so the circumferential angles are not perfectly even.
Turn on Generation:Orientation:Balanced; it automatically makes the distribution more natural.
Increase Forces:Gnarl.
Consider switching to Phyllotaxy mode, which uses the golden angle of 137.5° and is naturally irregular.
Branches and leaves intersect badly and clip through each other
This is inherent to procedural generation (each node computes its own position without knowing where the others are). Solutions:
Turn on Forces:Repel. This is the most effective fix: it pushes nodes apart.
Turn on Forces:Repulse where appropriate.
Reduce Generation:Proportional:Number to lower node density.
Adjust Generation:Orientation:Alignment so branches follow the parent instead of cutting across it.
Use the Skin:Intersection parameter to control how junctions are handled.
Note: completely eliminating intersection is neither realistic nor necessary — a real canopy is a tangle of interwoven branches and leaves. The goal is to make intersections inconspicuous, not to reach zero.
The trunk is too thin or too thick — the proportions are off
Trunk thickness is the result of several factors working together:
Skin:Radius — the skin radius, which affects thickness directly.
Spine:Length — change the length and the perceived thickness ratio changes with it.
Displacement:Flares — affects only the base.
The child Branch's Generation:Size scalar — controls child thickness relative to the parent.
A useful rule of thumb: a 12 m oak has a trunk diameter at breast height of about 0.4–0.6 m, that is 3%–5% of tree height. A main branch's base diameter is roughly 1/3 of the trunk.
Opening an old file prompts me to upgrade generators
This is normal. When SpeedTree 10 opens a v8/v9 file it prompts "Upgrade legacy generator(s)...". The old generator node structure has been replaced in the new version, and only after upgrading can you use all of the new parameters.
Back up the original file first, because the upgrade is irreversible.
The tree's shape may change slightly after upgrading (the algorithms changed).
You can also upgrade selected nodes manually with Actions → Upgrade legacy generator(s)....
Polygon count and performance
The model has too many polygons and won't import into the engine
First find out where the polygons are. Use the viewport statistics to read three numbers: branches / caps / leaf meshes. Compare with the official sample Broadleaf_Field.spm — leaves account for 78%, branches only 22%.
So the optimization order should be:
Cut leaves first (the biggest win):
Reduce Generation:Proportional:Number.
Lower Leaves:Size while raising the count — no, the other way round: increase size and reduce count.
Use Level of Detail:Frond count and Frond size scalar to reduce and enlarge leaves at low LOD.
Replace Leaf Mesh with Batched Leaf or a plain Leaf.
Then cut branches:
Lower Segments:Length and Segments:Radial.
Raise Level of Detail:Branch volume threshold so fine twigs disappear at low LOD.
Reduce branch tiers (past the 4th level, build density with leaves instead).
Finally, use LOD: make sure the last level is a billboard.
Leaves are so dense that rendering is slow / flickers
This is an overdraw problem: the same pixel is painted repeatedly by many translucent leaves.
Diagnose: switch to the Other/Overdraw.fx render mode. The brighter the color, the more times that area is being drawn. A large bright patch in the middle of the canopy is the problem.
Solutions:
Reduce Generation:Proportional:Number.
Increase Leaves:Spread so leaves spread out instead of bunching up.
Increase individual leaf size and reduce the total leaf count (the same visual volume with fewer overlapping layers).
Use Shade Pruning to remove leaves inside the canopy that receive too little light — they were invisible anyway.
Use the Leaves:Distribution curve to concentrate leaves on the outer edge of the branch rather than the inside.
Obvious popping when LODs switch
Check Level of Detail:Transition range and increase it for a smoother transition.
Check the Branch volume threshold gradient level by level. If the threshold jumps too far between LOD1 and LOD2, the canopy suddenly loses a ring of volume. Keep the gradient even.
Have Level of Detail:Frond size scalar scale up level by level at low LOD to compensate for the reduced count.
Don't set the billboard's Level of Detail:Billboard start too early. If LOD1 is already a billboard, the switch at close range is very obvious.
Make sure Level of Detail:Screen area scale matches the viewing distances you actually use.
From a distance the tree turns into a flat card and looks terrible
This is inherent to billboards. A billboard renders the whole tree onto a few crossed planes, so from some angles it reads as flat.
Delay the billboard: push Level of Detail:Billboard start back one level.
Make sure the billboard texture's Material:Subsurface Amount is correct — there is a dedicated Billboard_Subsurface_Amount.fx render mode for checking this.
For plants with unusual shapes (palms, mushrooms), don't use billboards; fall back on geometry LODs instead.
For large forests, billboard orientation is usually set on the engine side (“face camera” or “crossed quads”) — tune it in the engine.
The exported file is very large
Check whether you exported LOD levels you don't need.
Using a texture packing scheme other than Unpacked (Standard / UnrealEngine / Unity) can significantly reduce the number of textures.
Don't use a higher texture resolution than you need. Distant vegetation is fine at 1024 or even 512.
If it is Alembic (.abc) with growth animation, a large file is unavoidable — that is per-frame baked geometry. Export animation only for close-up shots.
Materials and textures
Leaf edges have a black or white fringe
This is an alpha channel problem and usually has one of two causes:
Dirty alpha: the leaf edges in the texture still have semi-transparent pixels left over. Switch to the _Material/____Opacity.fx render mode to check — the alpha edge should be crisp. You will need to fix the alpha in an image editor.
Wrong mipmap generation: at distance the alpha gets averaged away and the edge turns dark. When exporting to UE, use the _UnrealEngine.xml packing scheme, which sets MipGenerationFlag="AlphaIsOpacity" — precisely to solve this.
Also: if the leaf edges look dark, check whether Material:Color's RGB leaves color in areas where alpha is 0 (it should be filled with a color close to the leaf, not black).
Leaves look like plastic cards and don't transmit light
Check Material:Subsurface Amount — this is the key parameter. 0 means no light transmission at all.
Check the Material:Subsurface color texture. Leaf subsurface color is usually a warm yellow-green (the color of sunlight passing through a leaf), not the leaf's albedo.
In the Lighting group, check the contributions of Translucency and Subsurface.
Use the __Subsurface_Check.fx render mode to verify that the subsurface setup is sensible.
The bark texture turns to mush on the twigs
This is inconsistent texel density: the trunk and the twigs use the same UV tiling count, but a twig's circumference is far smaller, so the same texture gets compressed into a tiny area.
Diagnose: switch to Other/Texel_Density.fx; a sudden change in color marks a density discontinuity.
Fix:
Adjust UV Mapping:U — U controls how many times the texture repeats around the circumference. A twig should repeat fewer times than the trunk (so each texel covers a smaller real-world size).
Adjust UV Mapping:V to control repetition along the length.
Make sure UV Mapping:Style is set to the right unwrap method.
Textures are missing — the model shows up grey or garbled
Check that the texture file paths are correct. SpeedTree looks for textures by relative path by default, so moving files breaks the paths.
Check whether the render mode has been switched to some material channel mode (such as _Material/___Normal.fx), in which case you are looking at normals rather than the final result.
Switch back to _____Standard.fx and see whether it returns to normal.
If the texture channel names don't follow the convention (_Color, _Normal, _Opacity and similar suffixes), automatic matching fails and you must assign them manually.
The normal map seems to have no effect
Make sure Material:Normal is assigned.
Check the normal map format: DirectX and OpenGL normal maps have opposite green channels. Using the wrong one inverts the relief (dents look like bumps).
Normal maps need tangent space information. Check whether the vertex packing scheme includes tangent (the third attribute of the Standard scheme contains normal/binormal/tangent/ao).
If you only want surface detail without changing the silhouette, a normal map is the right tool; if you want the silhouette to change as well, you need Displacement.
Displacement has no effect
Displacement really moves vertices, so it needs enough mesh density to show up:
Increase Segments:Length (for example 16–24) and Segments:Radial (for example 10–12).
Make sure Displacement:Amount is not 0.
Make sure Displacement:Source points at a texture.
Adjust Displacement:U scale / V scale; if the texture is scaled too large, the displacement becomes too subtle to see.
Check Displacement:Sharpness and Displacement:Fine.
If the segment count is too low and you raise Amount, you get ugly spikes instead of smooth relief.
Wind and animation
Changing wind parameters does nothing
Check these switches in order:
Is Wind:Apply enabled on the root Tree node?
Is Wind:Apply enabled on that node?
Is Forces:Allow forces enabled (some settings interact with each other)?
Is Wind:Weight really not 0?
Switch to the _Wind Weights/Level 1.fx render mode and see whether the weights are actually written. If it is all black, the weights are not taking effect.
Note: wind in SpeedTree Modeler is a parameter preview; the real animation is computed at runtime in the engine. Modeler may only show a static pose or a simple sway.
The whole tree sways in sync like a single board
The phases are not offset from each other. Solutions:
Increase the variance of Wind:Offset so each node has a different phase.
Use Wind:Level offset, which offsets phase automatically by hierarchy level.
Make sure Wind:Inherited weight scale is set sensibly so tips respond more strongly than their parents.
A real tree: the trunk moves slowly and only a little, twigs move fast and a lot, and the two run at different frequencies. So Games Shared Motion (whole-tree motion) and Games Ripple Motion (ripple motion) must be configured separately — you cannot just tune one of them.
No wind motion after exporting to the engine
Make sure you selected the right preset when exporting (use __UnrealEngine (ST).ini for UE, ___Unity.ini for Unity). Exporting with Generic FBX.ini loses SpeedTree's wind data.
Make sure the vertex packing scheme includes wind attributes. The 4th and 5th attributes of the Standard scheme are the wind data.
The engine side must have the SpeedTree material and wind system enabled. UE's SpeedTree material is special-purpose; you cannot simply swap in a regular material.
Check whether the engine's wind strength setting is too low.
How do I export a growth animation?
Use the export_presets/VFX/Growth.ini preset.
It is usually exported as Alembic (.abc), because growth animation is per-frame baked geometry.
In the Growth parameter group, set the timing: Timing (when growth starts), Speed scale (how fast it grows), Unfurl (leaf unfurling).
Use an approach similar to Season:Descendant offset to stagger growth across hierarchy levels.
See samples/Learning/Growth/Sapling_Growth.spm and Trellis_Growth.spm.
Interface and workflow
I can't find a particular parameter
Use the Search properties.. box at the top of the Properties panel. Type a keyword (such as wind or segments) to filter.
Make sure the selected node type is the right one. Many parameters exist only on certain nodes — for example the Skin group exists only on Branch, the Leaves group only on leaf-type nodes, and the Cap group only on the Cap node.
Make sure the parameter group is not collapsed. Parameters are shown in groups; click a group header to expand it.
Some parameters only appear in a particular Mode. For example, with Generation:Mode = Proportional you only get the Proportional-related parameters; you have to switch to Absolute to see the Absolute ones.
I'm not comfortable with viewport navigation — I can't orbit or zoom
Action
Mouse
Orbit the view
Drag with the middle mouse button (or Alt + left button)
Pan the view
Middle mouse button + Shift drag
Zoom
Scroll wheel
Zoom to the whole model
Zoom on the toolbar, or the shortcut key
Marquee zoom
Toolbar Zoom → drag a box
Select a generator
Set Mode to Generator and click a branch in the viewport
Select a single control point
Set Mode to Node and click the control point
If the viewport does not respond at all, check whether a modal dialog is hidden behind the main window.
The node tree is a mess and I can't find the node I want
Rename your nodes. Select a node and press F2, or right-click → Rename. This is the most effective fix.
Use Actions → Layout generators to tidy up the node tree layout automatically.
Use Actions → Icon colors to give nodes different colors by purpose so you can tell them apart at a glance.
Use Actions → All like selected (Shift+L) to select every node of the same type and change parameters in bulk.
Use Actions → Make all generator names unique to fix duplicate names in bulk.
Use Actions → Select and reveal hidden nodes to find hidden nodes — this is often the reason behind “I added a node but nothing happened”.
I changed a parameter but the model didn't change
You selected the wrong node. Check that the node shown at the top of the Properties panel is the one you mean to change.
The node is hidden or collapsed. Check with Actions → Select and reveal hidden nodes.
You changed the parent but are looking at the child. For example, you changed the trunk's segmentation but you are looking at the leaves.
The parameter is overridden. A parameter of the same name on a child node overrides the parent's setting.
You are in the wrong Mode. Some parameters only apply under a particular Generation:Mode.
Use Actions → Select nodes with edits to check whether manual edits are overriding parameters.
How do I make multiple variants of one tree (batch tree generation)?
Don't copy the file and tweak parameters — that gets messy fast. The right approach:
Tune the first tree until you are completely happy with it.
Change only Random Seeds:Generation on the root node or a key node.
Save as a new file.
Repeat. Each time change only the seed and leave every other parameter untouched.
The resulting batch of trees shares exactly the same style and differs only in form, which is what makes them read as the same species. For subtler variation you can change only Random Seeds:Branch (branch form only) or Random Seeds:Spine (spine only).
See how the official assets do it: Broadleaf_Field.spm (a single tree) and Broadleaf_Forest.spm (a forest) are two versions of the same rule set.
Import and export
An imported .obj / .fbx model is the wrong size
Check the units used by the software that exported the model. SpeedTree uses 1 unit = 1 meter by default, while many modeling packages default to centimeters or inches.
Watch the scale setting on import.
After importing, adjust with the Mesh:Scale parameter.
Tip: place a human reference in the scene first (app_data/man.tga) and size the imported model against it.
How do I bring a scanned tree (photogrammetry) into SpeedTree?
This is one of SpeedTree's major capabilities and there are complete official examples. The workflow:
Import the scanned mesh (.obj / .fbx).
Add a Target node to mark the attachment points (see samples/Learning/Photogrammetry/Oak_Photogrammetry/Target.spm).
Add a Conversion-Tools node to do the conversion:
Convert to Trunk (convert_to_trunk.stt) — skeletonize into a trunk that can grow
Convert to Branch (convert_to_branch.stt) — convert into branches
Convert in Place (convert_in_place.stt) — convert in place, keeping the mesh position
Use a Stitch node to sew the scanned section to the procedural branches. There are several modes: Band Stitch, Wrap Stitch, Cut Stitch and Bake Stitch.
Use a Mesh Detail node to layer more detail onto the scan.
The complete example is in samples/Learning/Photogrammetry/. Work through Target → Convert_To_Trunk → Stitch in that order, opening each one in turn.
Materials are wrong / rendering is broken after exporting to UE
You must use the __UnrealEngine (ST).ini preset, not a generic FBX preset.
UE needs the SpeedTree-specific material and importer. Choose the SpeedTree format on import rather than a regular static mesh.
Texture packing must use the _UnrealEngine.xml scheme: Texture0 is _Color (alpha stores opacity), Texture1 is _Normal, Texture2 is _Subsurface.
If leaf edges have a dark fringe, check that the AlphaIsOpacity mipmap generation flag is taking effect.
Make sure the SpeedTree plugin is enabled in the UE project.
Performance is poor after exporting to Unity
For large amounts of repeated vegetation, use the __Unity (one draw call).ini preset to merge draw calls.
Make sure the LOD Group is set up correctly and distant trees really are using low LODs.
Check that Unity's SpeedTree material is using the correct shader.
Use the Unity Profiler to determine whether the bottleneck is draw calls or polygon count. If it is draw calls, use the merged preset; if it is polygons, go back to SpeedTree and reduce them.
I want to use it in Blender / Maya / Houdini — how do I export?
Use the matching preset: __Blender.ini, ____Maya.ini, ___Houdini.ini, ___3D Studio MAX.ini, __Cinema4D.ini.
There are import scripts for each DCC under scripts/ in the installation directory (scripts/Blender/, scripts/Maya/, scripts/Houdini/, scripts/3ds Max/, scripts/Cinema4D/). Using those scripts preserves wind and LOD data.
If you only need geometry and textures, __FBX.ini is enough.
For animation (growth, wind) export .abc with _Alembic.ini.
Modern VFX pipelines can export USD with _USD.ini.
Can .spm files be read as text or processed programmatically?
Yes. .spm and .stt are both gzip-compressed XML. Decompress them and you can see the complete node tree and every parameter value:
Diagnosing differences: for two files that look the same but behave differently, a straight XML diff finds the parameter that differs.
Batch processing: you can script bulk parameter changes (for example, standardizing the LOD settings across every file).
You can also export uncompressed SpeedTree XML format with File → Export.
Hardware and environment
The application stutters / runs out of video memory
Lower the viewport quality settings. There is a Viewport group in the parameters, plus the Conserve graphics card memory option.
Use the Interactive Degradation parameter group so the application lowers display quality automatically while you work.
Switch to a low-LOD preview.
Hide nodes you don't need to see for the moment (Toggle visibility).
Turn off the Post post-processing display.
If the model is over a million polygons (the official sample is 3M), stuttering is normal — that is film-grade density.
Rendering / image output is very slow
SpeedTree Modeler's rendering is for preview, not a final renderer. High-quality finals should be rendered in UE / Blender / Maya / Houdini.
Lower the render resolution and sample count.
Use Level of Detail to switch to a lower level while previewing.
If you are only checking the model, _Flat.fx flat-light mode is the fastest.
SpeedTree licensing and version questions
SpeedTree Modeler is commercial software sold by subscription. There is a licensing_client/ in the installation directory that handles license validation.
Different license tiers (such as the Indie tier) restrict export formats and annual revenue; check your license scope before you rely on it.
This tutorial is based on SpeedTree Modeler v10.2.0. Parameter names and nodes may differ between versions; trust the version you actually have installed.
Finished models in the official store (SpeedTree Store) must be purchased separately.
Advanced topics
How do I make moss on the bark?
Select the trunk, Add → Decal.
Assign a thin sheet mesh to Decal:Mesh (or let it generate one automatically).
Use a moss texture with an alpha channel. The official blend_masks/standard/Mottled_1.png and Mottled_2.png are mottled masks that work well for moss.
Use Generation:First / Last to confine the moss to the lower half of the trunk (real moss grows mostly on the damp, shaded lower part).
Use the Generation:Frequency curve to make the moss thinner the higher it goes.
Increase Generation:Proportional:Number so the moss forms patches instead of scattered specks.
You can also attach a real moss mesh with Mesh Detail for a more three-dimensional result, at a higher polygon cost.
How do I make a branch broken by lightning or wind?
Select the branch you want to break and adjust the Spine:Break parameter.
Shorten Spine:Length to the break point.
Add a Cap at the break to close it, and give the break a different material that exposes the wood.
Use Displacement near the break to create a torn look.
Add a Fin node for splinters at the break.
See the templates templates/combined/Gash.stt (wound) and Peeling_Bark.stt (peeling bark).
How do I make buttress roots (tropical rainforest support roots)?
Select the trunk, Add → Fin.
Fins:Fins sets the number of fins (buttress roots are usually 3–6).
Fins:Height sets the height of the buttress — tropical buttress roots can reach 2–3 meters.
Fins:Length sets how far they extend outward.
Add variance with Generation:Orientation:Sweep so the buttresses point in different directions.
Use Displacement:Amount to make the buttress edges irregular.
You can also generate them with a Base node, or start from tree_templates/VFX/Base_Split.spm / Base_Umbrella.spm.
How do I give a tree a wind-swept “flag” canopy?
A flag-shaped canopy is caused by strong, constant wind from one direction — every branch grows toward the leeward side.
Set Forces:Direction on the trunk, pointing downwind.
Use Forces:General Direction for overall directional control.
Use Generation:Orientation:Offset to bias the whole batch of branches downwind.
Turn off circumferential balance with Generation:Orientation:Balanced, otherwise the branches will be evenly distributed.
Increase Spine:Droop so the windward branches hang down.
You can give the windward branches a shorter Spine:Length (via a curve or manual editing).
How do I set up seasonal change?
Prepare four sets of Color textures — spring / summer / fall / winter — and the alpha channel must be identical across all of them. The official naming convention is xxx_spring.png, xxx_summer.png, xxx_fall.png, xxx_winter.png.
Configure the material offset in the material.
Use Season:Time scale to control the rate of change and Season:Start offset to control when it starts.
Use Season:Descendant offset to stagger the timing across levels — a real autumn colors the outer foliage first, not everything at once.
See the official examples samples/Learning/Seasons/Seasons.spm and Material_Offset_Seasons/Material_Offset_Seasons.spm.
The three images in the example folder — Uniform.png (uniform change), Variance.png (with random variation), Parent_Curve.png (driven by a parent curve) — correspond exactly to the three ways of changing. Variance is recommended as the most natural.
How do I create a leaf-drop effect?
Lower Material:Opacity on the leaf nodes, or simply hide the leaf nodes.
Use the Season parameter group for timing control.
The falling leaves themselves are usually done with a particle system, not in SpeedTree. SpeedTree's job is to make the tree go bare.
You can build a separate fallen-leaf layer node (a small Leaf Mesh) and enable it in autumn through the Season parameters.
I'm handing the model to someone else — how do I make sure the textures don't get lost?
Put the .spm and all of its textures in the same folder and keep the relative paths unchanged.
Or use the collect/pack function in the File menu to package every dependency.
When exporting to an engine format, SpeedTree merges the textures according to the packing scheme and writes the dependencies into the material file.
Note that the File parameter group has a Search path setting — make sure it is a relative path, not an absolute one.
Unofficial documentation. This tutorial is independently produced study material. It is not affiliated with,
endorsed by, or licensed by Interactive Data Visualization, Inc. (IDV), Unity Technologies, or the SpeedTree team.
SpeedTree, SpeedTree Modeler and related marks belong to their respective owners.
Sources. Node names, parameter names, render modes, export presets and packing formats are taken primarily from the official
SpeedTree Modeler 10 User Manual (docs.unity3d.com/speedtree-modeler/manual),
and cross-checked against the actual SpeedTree Modeler v10.2.0 files installed on this machine. Screenshots and case illustrations are real captures from that build.
Suggested values and “rules of thumb” are teaching guidance, not official recommendations.
Version differences. Nodes, parameters and UI differ between SpeedTree releases. The vendor maintains separate manuals for
SpeedTree 9 and 10, and the two differ in generator types, wind and export options (the Vine generator, the Rules system and the Reference generator,
for example, are all new in v10). Always defer to the version you actually have installed.
Use at your own risk. No warranty of completeness, accuracy or fitness for a particular purpose is given.
Any consequences of modelling, exporting or producing assets based on this tutorial are the user's own responsibility.
Polygon budgets, licence scope and commercial-use limits are governed by the official licence terms.
Licensing. SpeedTree Modeler is commercial, subscription-licensed software. Different licence tiers restrict export formats and
permitted usage. Confirm your own licence scope before use.