SpeedTree Modelerv10.2.0

1.1 SpeedTree 是什么

1.1 What Is SpeedTree

SpeedTree 是一套程序化植被建模工具链,由 Interactive Data Visualization(IDV)公司开发。它的核心思路不是“手工雕刻一棵树”,而是用规则描述一棵树怎么长:你告诉软件“主干每 0.5 米分出一根侧枝,侧枝与主干的夹角在 45°~70° 之间随机,侧枝长度是主干的 40%",软件就按这套规则把树生成出来。

这样做的好处有三个:

  • 可无限变化——同一套规则换一个随机种子就是另一棵树,批量产出整片森林不需要重复劳动。
  • 面数可控——从规则到网格的每一步都能控制精度,同一棵树可以同时输出游戏用的几万面和影视用的几百万面。
  • 引擎原生支持——Unreal Engine 和 Unity 都内置了 SpeedTree 的运行时,风力动画、LOD 切换、公告板都是引擎直接支持的。

SpeedTree 的产品线大致分为三块:

产品作用
SpeedTree Modeler建模工具,本教程的主角。用来制作单株植物、树丛、草地,并导出到引擎或渲染器。
SpeedTree SDK / Runtime引擎端的运行时库,负责风力动画、LOD、公告板的实时计算。UE 与 Unity 已内置。
SpeedTree Store / 资源库官方与第三方售卖的成品植被模型库,可直接购买使用,也可以买来拆解学习。

关于版本:v10 已经统一

早期 SpeedTree 把产品分成面向影视的 Cinema 版和面向游戏的 Games 版,两者功能与导出能力不同。 从 SpeedTree 10 起,这种版本拆分已经取消——同一个 Modeler 同时具备影视与游戏两条工作流,你只需要在导出时选择 Games 或 VFX 目标即可。

但这不意味着两者的技术路线一样:游戏路线用动态 LOD,影视路线用 Resolution 分辨率。这个区别贯穿整个教程,详见 2.15 节。

本教程基于的版本

本教程的全部参数名、节点名、渲染模式与导出预设,均取自本机安装的 SpeedTree Modeler v10.2.0。该版本向下兼容 v8/v9 的 .spm 文件;打开旧文件时软件会提示"Upgrade legacy generator(s)"(升级旧版生成器)。

SpeedTree 擅长什么,不擅长什么

擅长不擅长
树木、灌木、草、藤蔓、棕榈等有生长规律的植物单株造型极其独特的雕塑感植物(更适合直接建模)
大批量、多变异地生成同类植物完全写实的特写树皮细节(需配合摄影测量或置换贴图)
游戏与影视中需要风动与 LOD 的植被非植物类的自然物(岩石、地形、水体需用别的工具)

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:

ProductRole
SpeedTree ModelerThe 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 / RuntimeThe engine-side runtime library that handles real-time wind animation, LOD and billboards. Already built into UE and Unity.
SpeedTree Store / asset libraryLibraries 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 atNot good at
Trees, shrubs, grass, vines, palms and other plants that follow growth rulesOne-off sculptural plants with a highly distinctive silhouette (better modeled by hand)
Generating many variations of the same species in bulkFully photoreal close-up bark detail (needs photogrammetry or displacement maps)
Vegetation that needs wind and LOD in games and filmNon-plant natural objects (rocks, terrain and water need other tools)

1.2 界面总览

1.2 Interface Overview

SpeedTree Modeler 的界面是典型的 Qt 停靠面板布局。下图是本机 v10.2.0 打开官方示例 Broadleaf_Field.spm 时的真实界面:

SpeedTree Modeler v10.2.0 主界面(官方示例 Broadleaf_Field.spm,模型总计 3,032,522 三角面)

界面可以分成五个区域:

区域位置作用
菜单栏最上方File / Edit / Tools / Window / Help 五个菜单。几乎所有功能都能在这里找到,也是记忆快捷键时的兜底入口。
Generation 面板左上显示整棵树的节点树。所有生成器的父子层级都在这里,是操作最频繁的面板。顶部有 Add(添加节点)、Actions(节点操作菜单)、Randomize(随机化)三个按钮。
Properties 面板左下显示当前选中节点的全部可调参数。顶部有 Search properties.. 搜索框,参数按组(Generation、Spine、Wind…)折叠显示。
3D 视图区中间实时预览。左侧显示模型统计(面数、骨骼数),可切换透视/正交。
工具栏视图上方模式与显示控制,见下表。

下面是 Generation 面板与 Properties 面板的实际截图(从上面的主界面截取放大):

Generation 面板:顶部是 Add / Actions / Randomize 三个按钮,下方是节点树。选中一个节点后,它的全部参数会出现在 Properties 面板里
Properties 面板:顶部显示当前选中的节点名,下面是 Search properties.. 搜索框,再往下是按组折叠的参数列表

工具栏按钮逐项说明

下面这些名称来自 v10.2.0 工具栏的真实文字:

工具栏实际布局:Mode(Generator / Node)、View、Edit(Add / Post)、Freehand、Render、Show、Zoom、Visibility、Collision、Season、Shade、LOD、Scene Objects
按钮功能
Mode Generator / Node切换操作对象。Generator 模式下点击视图选中的是“生成器”(整根枝条);Node 模式下可以选中单个控制点或顶点,做精细调整。
View视图显示选项:透视图/正交图切换、网格、参考图等。
Edit Add / PostAdd 用于添加几何;Post 用于后处理显示(如线框叠加)。
Freehand手绘模式开关。开启后可以像画画一样直接拖出枝条走向。
Render渲染模式选择(光照模式、材质通道、顶点色、风力权重等),详见“渲染模式”章节。
Show显示开关:是否显示叶片、是否显示骨架、统计信息等。
Zoom框选放大、缩放到全模型。
Visibility可见性控制,配合 LOD 与剔除使用。
Collision碰撞体显示与生成开关。
Season季节切换(春/夏/秋/冬),用于预览季节贴图与落叶效果。
Shade着色控制。
LODLOD 预览与级别切换。
Scene / Scene Objects场景对象管理,可放置参考模型、灯光、相机。

视图区统计信息

视图区左上角会实时显示模型统计,这是判断“模型是否过重”的第一手数据。以上面的示例为例:

视图区的面数统计浮层。branches / caps / leaf meshes 分开统计,可以直接看出面数集中在哪一类几何体上
POLYGONS - MODEL
  branches:    670,083 tris
  caps:            437 tris
  leaf meshes: 2,362,002 tris
  TOTAL:       3,032,522
  bones:               9

可以看到叶片占了绝大多数面数(约 78%)。这正是 SpeedTree 优化的核心战场:控制叶片数量与叶片网格精度,比控制枝条分段数收益大得多。

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:

AreaLocationPurpose
Menu barTopFive menus: File / Edit / Tools / Window / Help. Almost every feature can be found here, and it is the fallback when you are learning shortcuts.
Generation panelUpper leftShows 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 panelLower leftShows 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 viewportCenterReal-time preview. The left side shows model statistics (triangle count, bone count), and you can toggle perspective/orthographic.
ToolbarAbove the viewportMode 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 panel
The 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
ButtonFunction
Mode Generator / NodeSwitches 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.
ViewViewport display options: perspective/orthographic toggle, grid, reference images and so on.
Edit Add / PostAdd is for adding geometry; Post is for post-processing display (such as a wireframe overlay).
FreehandToggles freehand mode. With it on you can drag out branch paths as if drawing.
RenderRender mode selection (lighting model, material channels, vertex color, wind weights…), covered in the “render modes” section.
ShowDisplay toggles: whether to show leaves, whether to show the skeleton, statistics and so on.
ZoomMarquee zoom and zoom to fit the whole model.
VisibilityVisibility control, used together with LOD and culling.
CollisionToggles display and generation of collision bodies.
SeasonSeason switching (spring/summer/autumn/winter) for previewing seasonal textures and leaf fall.
ShadeShading control.
LODLOD preview and level switching.
Scene / Scene ObjectsScene 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.

1.3 节点树与生成器

1.3 Node Tree and Generators

SpeedTree 里的一切都组织成一棵节点树。理解这棵树是掌握这个软件的关键。

节点树:父子层级决定"谁长在谁身上"Tree— 根节点 · 全局设置Level 0Trunk(Branch)— 树干Level 1Big Branches(Branch)— 主枝Level 2Small Branches(Branch)— 侧枝Level 3Twigs(Branch)— 细枝Level 4Leaf Mesh— 叶片Level 5Cap— 封顶Level 4Knot— 节疤Level 2Decal— 苔藓贴花Level 2Base— 根盘Level 1Level 越深 → 节点越多 → 性能开销越大。游戏资产通常在 Level 4 之后用叶片代替真实细枝。

三种节点角色

  1. 根节点(Tree)——有且只有一个,位于最顶层,存放全局设置。它不能删除、不能移动。
  2. 生成器(Generator)——真正产生几何体的节点,如 Branch、Frond、Leaf Mesh、Cap。每个生成器都“挂”在某个父级下面,按父级的形状来生长。
  3. 辅助节点——不直接产生主体几何,而是提供参考或转换能力,如 Target(目标点)、Zone(区域)、Conversion-Tools(转换工具)。

父子关系与层级(Level)

节点树的层级决定了“谁长在谁身上”:

  • Level 0 永远是 Tree 根节点。
  • Level 1 通常是树干(Trunk)。
  • Level 2 是主枝,Level 3 是侧枝,依次类推。
  • 叶片、羽叶通常挂在 Level 4 以上的末梢枝上。

实测数据可以印证这个结构。在本机 77 个官方示例文件里,各生成器出现的层级分布是:

生成器实际出现的层级说明
Tree0唯一根节点
Branch1 – 7从树干一直细分到 7 级细枝
Cap1 – 8跟随枝条末端
Frond1 – 8棕榈/蕨类可在多级出现
Leaf Mesh1 – 11层级最深,因为叶片挂在末梢
BatchedLeaf1 – 8批量叶片
Knot / Decal1 – 6表面装饰,跟随树干与主枝
MeshDetail1 – 3细节网格,通常靠近主干

层级越深,节点越多,性能开销越大。一棵典型的阔叶树会用到 4~6 级枝条。每增加一级,节点数量可能翻几倍。做游戏资产时,通常在第 4 级之后就改用叶片或羽叶来“装作还有细枝”。

节点的三种状态

状态表现如何切换
普通正常显示与生成—
隐藏(Hidden)节点图标变暗,不生成几何右键菜单 → Toggle visibility,或按 H
折叠(Collapsed)该节点的所有子节点被收起,不再生成节点前的三角箭头

节点操作菜单(Actions)

选中节点后点 Actions 按钮,或直接右键,可以看到完整的节点操作。v10.2.0 的实际菜单项包括:

菜单项快捷键作用
Copy / Cut / PasteCtrl+C / Ctrl+X / Ctrl+V复制、剪切、粘贴节点
Paste intoCtrl+Shift+V把剪贴板节点粘贴为当前节点的子节点
DuplicateCtrl+D原地复制一份
DeleteDel删除节点
Rename—重命名(做复杂模型时务必用,否则节点名会重到无法辨认)
All like selectedShift+L选中所有“同类”节点(同一模板的实例)
All descendantsShift+D选中全部子孙节点
All like selected at this level—选中同层级的同类节点
All like selected, same color—按节点颜色筛选同类
Save selected as template...—把当前节点及其子树保存成模板(.stt),可在别的树里复用
Add geometry to selected—给选中节点挂上几何体
Clear node edits—清除该节点上的手工编辑,回到纯程序化状态
Clear freehand edits—清除手绘笔迹
Clear variances—清除所有方差设置
All gaussian / uniform / blended / cohesive—把方差类型批量改成高斯/均匀/混合/内聚
Randomize selected—随机化选中节点(不选则随机化整棵)
Toggle visibility—显示/隐藏
Select and reveal hidden nodes—找出并选中所有被隐藏的节点
Select nodes with edits—找出所有被手工编辑过的节点
Layout generators—自动排布节点树布局
Make all generator names unique—批量把重名节点改成唯一名
Upgrade legacy generator(s)...—把旧版本节点升级为当前版本
Icon colors—给节点图标设置颜色,便于在复杂树里辨认

Everything in SpeedTree is organized as a node tree. Understanding that tree is the key to mastering the software.

节点树:父子层级决定"谁长在谁身上"Tree— 根节点 · 全局设置Level 0Trunk(Branch)— 树干Level 1Big Branches(Branch)— 主枝Level 2Small Branches(Branch)— 侧枝Level 3Twigs(Branch)— 细枝Level 4Leaf Mesh— 叶片Level 5Cap— 封顶Level 4Knot— 节疤Level 2Decal— 苔藓贴花Level 2Base— 根盘Level 1Level 越深 → 节点越多 → 性能开销越大。游戏资产通常在 Level 4 之后用叶片代替真实细枝。

The three node roles

  1. Root node (Tree) — there is exactly one, at the very top, holding global settings. It cannot be deleted or moved.
  2. 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.
  3. 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:

GeneratorLevels observedNotes
Tree0the single root node
Branch1 – 7from the trunk all the way down to 7th-order twigs
Cap1 – 8follows branch tips
Frond1 – 8palms and ferns can carry fronds at several levels
Leaf Mesh1 – 11the deepest level, because leaves hang on the tips
BatchedLeaf1 – 8batched leaves
Knot / Decal1 – 6surface decoration, follows the trunk and primary branches
MeshDetail1 – 3detail 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

StateAppearanceHow to switch
Normaldisplayed and generated normally—
Hiddenthe node icon dims and no geometry is generatedcontext menu → Toggle visibility, or press H
Collapsedall child nodes of this node are collapsed and no longer generatedthe 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 itemShortcutPurpose
Copy / Cut / PasteCtrl+C / Ctrl+X / Ctrl+Vcopy, cut and paste nodes
Paste intoCtrl+Shift+Vpaste the clipboard node as a child of the current node
DuplicateCtrl+Dduplicate in place
DeleteDeldelete the node
Rename—rename (essential on complex models, or node names become impossible to tell apart)
All like selectedShift+Lselect all “same kind” nodes (instances of the same template)
All descendantsShift+Dselect 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

1.4 参数系统与曲线

1.4 The Parameter System and Curves

SpeedTree 的参数不只是“一个数字”。同一个参数可以是一个固定值,也可以是一条曲线、一组带随机分布的范围。理解这一点,才能理解为什么 SpeedTree 的树看起来不重复。

一个参数的四种形态标量值 Value1.20所有实例同一个值曲线 Curve沿父级位置 0~1 变化方差 Variance1.20±0.35给参数一个随机范围随机种子 Seed12450换一个数字 = 另一棵树

四种参数形态

形态表现用途
标量值 Value一个数字输入框所有实例都用同一个值,如“枝条长度 = 1.2"。
曲线 Curve一个可拖控制点的小图让参数沿父级位置或节点长度变化。详见下一节。
方差 Variance值旁边的第二个输入框给参数加随机范围。方差算法可选 Gaussian(高斯,集中在中心)、Uniform(均匀)、Blended(混合)、Cohesive(内聚,相邻节点保持一致)。
随机种子 Random Seed整数决定整个随机序列。改一个数字就能得到形态完全不同的另一棵树,是“一树多变”的总开关。

关于曲线的一个关键理解

官方文档把曲线比作参数的“音量旋钮”:参数的静态值就是最大音量,曲线上的纵向位置表示取这个最大值的百分之几,而横向位置决定这个取值应用在树的哪个部位。所以调曲线之前,先把静态值设成一个合理的上限。

六种曲线

SpeedTree 用颜色区分不同类型的曲线。这是最容易混淆、也最值得先搞清楚的一组概念。

SpeedTree 的六种曲线Parent 父级曲线绿色。按子节点在父级上的位置分配数值。可设 Relative / Absolute 与父级层级。Profile 剖面曲线浅蓝。沿单个节点长度作用,同组每个节点效果一致。如树干由粗到细的锥度。Distribution 分布曲线橙色。控制固定数量节点的疏密分布,不改变总数,只改变聚集位置。Pruning 修剪曲线每个生成器仅一条。按位置整批移除节点,用来做稀疏、残缺感。Resolution 分辨率曲线VFX 专用。切换 High/Medium/Low/Draft分辨率时按曲线改变参数值。LOD 曲线深蓝。只出现在 LOD 属性组。左端=最高 LOD(1.0),右端=最低 LOD(0.0)。
曲线颜色作用范围说明
Parent 父级曲线绿色一整组节点 按子节点在父级上的位置分配数值。用于让树的不同部位表现不同——例如让树冠底部的枝条比顶部更长。可设置 Relative(相对 Boundaries)或 Absolute(相对父级绝对长度)两种求值模式。
Profile 剖面曲线浅蓝单个节点 沿单个节点的长度作用,同一生成器里每个节点的效果完全一致。最典型的例子是树干锥度:左端对应枝条基部,右端对应枝条末端,枝条由此从粗变细。
Distribution 分布曲线橙色一整组节点 控制固定数量节点的疏密分布——不改变总数,只改变聚集在哪里。例如把大部分一级枝集中到树干基部与顶部,让中段稀疏。
Pruning 修剪曲线—一整组节点 每个生成器仅有一条。按节点在树中的位置整批移除。曲线值低于 0.5 的位置,其节点被移除。
Resolution 分辨率曲线—VFX 专用 切换 Resolution(High / Medium / Low / Draft)时按曲线改变参数值。例如降低分辨率时自动减少枝条的分段数。
LOD 曲线深蓝LOD 属性组专用 只出现在 LOD 属性组里,控制各 LOD 属性在整段 LOD 过渡中的变化节奏。左端永远对应最高 LOD(1.0),右端对应最低 LOD(0.0)。多数情况用线性即可,让每一级简化幅度接近。

父级曲线的高级用法:Parent Level

父级曲线默认针对直接父级求值。假设一棵树有四级:Tree → Trunk → Big Branches → Little Branches。

  • 想让细枝在大枝末端变小 → 不改父级层级,直接编辑长度曲线(默认行为)。
  • 想让细枝在整棵树的顶部变小,而不是在大枝末端变小 → 把曲线的 Parent Level 从 Big Branches 改成 Trunk。这个设置在曲线编辑器左上角的下拉框里。
  • 想同时满足两个条件 → 用复合曲线(compound curves,SpeedTree 8 起支持),在曲线编辑器里为多个父级层级分别设曲线。

曲线编辑器怎么用

  1. 横轴永远是父级位置(0 = 父级根部,1 = 父级末端),不是世界坐标。
  2. 在曲线上单击添加控制点,右键删除控制点。
  3. 拖动控制点两侧的手柄调整切线做平滑过渡;按住 Shift 可以打断手柄做硬转折。
  4. 曲线默认是两个端点连成的直线,也就是恒定值。想做出“中间密两头疏”就把中点往上拉。
  5. 曲线可以存成预设复用。官方示例里就有 Uniform.png、Variance.png、Parent_Curve.png 这类曲线预设。

随机种子的分组

SpeedTree 把随机种子拆成多个独立通道,这样可以“只让枝条位置变、其它都不变”:

种子控制什么
Random Seeds:Generation节点生成位置、数量、朝向的随机序列。最常用。
Random Seeds:Branch枝条形态(脊线、弯曲)的随机。
Random Seeds:Spine脊线形状的随机。
Random Seeds:Forces力场作用的随机。
Random Seeds:LODLOD 简化过程的随机。
Random Seeds:Vertex colors顶点色噪波的随机。
Random Seeds:Welding顶点焊接的随机。

实用技巧:批量出变体

做一片森林时不要复制文件改参数。做法是:把树调到满意 → 只改 Random Seeds:Generation → 另存为新文件。这样得到的一批树共享完全相同的风格与参数,只有形态不同,视觉上才像同一个物种。

参数搜索

Properties 面板顶部的 Search properties.. 支持按名称过滤参数。选中一个 Branch 输入 wind 就只剩风力相关项。参数多的节点(如 Branch 有近 600 个参数条目)不搜索会很难找。

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.

一个参数的四种形态标量值 Value1.20所有实例同一个值曲线 Curve沿父级位置 0~1 变化方差 Variance1.20±0.35给参数一个随机范围随机种子 Seed12450换一个数字 = 另一棵树

The four parameter forms

FormAppearancePurpose
Scalar Valuea single number fieldEvery instance uses the same value, for example “branch length = 1.2”.
Curvea small graph with draggable control pointsMakes a parameter vary along the parent position or the node's length. See the next section.
Variancea second input field next to the valueAdds 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 Seedan integerDetermines 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.

SpeedTree 的六种曲线Parent 父级曲线绿色。按子节点在父级上的位置分配数值。可设 Relative / Absolute 与父级层级。Profile 剖面曲线浅蓝。沿单个节点长度作用,同组每个节点效果一致。如树干由粗到细的锥度。Distribution 分布曲线橙色。控制固定数量节点的疏密分布,不改变总数,只改变聚集位置。Pruning 修剪曲线每个生成器仅一条。按位置整批移除节点,用来做稀疏、残缺感。Resolution 分辨率曲线VFX 专用。切换 High/Medium/Low/Draft分辨率时按曲线改变参数值。LOD 曲线深蓝。只出现在 LOD 属性组。左端=最高 LOD(1.0),右端=最低 LOD(0.0)。
CurveColorScopeNotes
Parent curvegreena 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 curvelight bluea 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 curveorangea 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 curvedark blueLOD 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

  1. The X axis is always parent position (0 = base of the parent, 1 = tip of the parent), never world coordinates.
  2. Click on the curve to add a control point, right-click to delete one.
  3. 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.
  4. 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.
  5. 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”:

SeedWhat it controls
Random Seeds:GenerationThe random sequence for node generation position, count and orientation. Most used.
Random Seeds:BranchRandomness of branch form (spine, curvature).
Random Seeds:SpineRandomness of spine shape.
Random Seeds:ForcesRandomness of force application.
Random Seeds:LODRandomness of the LOD simplification process.
Random Seeds:Vertex colorsRandomness of vertex color noise.
Random Seeds:WeldingRandomness 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.

2.1 Generation 生成参数

2.1 Generation Parameters

Generation 是所有生成器里参数最多、也最重要的一组。它回答一个核心问题:子节点生成多少个、长在父级的什么位置、朝哪个方向。在实测数据中,Branch 有 230 个 Generation 参数,Leaf Mesh 有 215 个,Frond 有 169 个。

Generation 参数分为两部分:所选模式独有的参数,以及所有模式共用的参数。

2.1.1 Mode:十种分布模式

Generation:Mode — 子节点分布算法Absolute每个父级固定 N 个子节点Proportional数量与父级长度成正比Phyllotaxy叶序:黄金角 137.5° 螺旋Interval沿父级等距着生Bifurcation只在父级转折处着生Steps分段,每段一组(轮生)
模式中文官方说明典型用途
Classic经典仅为兼容旧模型而存在,新模型应避免使用。仅旧文件
Proportional按比例依据父级的尺寸创建节点,适合在父级上随机分布节点。让长枝上自然长出更多侧枝
Proportional steps比例阶梯创建一系列阶梯,每级阶梯包含若干节点。这种风格常见于松树。针叶树的轮生枝
Absolute绝对数量创建精确数量的节点,不随父级尺寸变化,应节制使用。常见用法是指定唯一的一根树干,或定期减少节点数。树干上固定 5 根主枝
Absolute steps绝对阶梯创建精确数量的阶梯,每级若干节点。同样不适应父级尺寸,应节制使用。—
Phyllotaxy叶序提供多种常见的叶片生长方式(互生 / 对生 / 轮生等)。写实的叶片排列、松柏轮生枝
Interval间隔沿父级按固定间隔创建节点,适用范围很广。棕榈叶沿树干等距分布
Bifurcation分叉在父级发生转折的位置放置节点,模拟枝条的分裂。官方原话:"分叉往往是让模型看起来有机自然的最简单办法。"让侧枝正好长在分叉点上
Flood填充创建精确数量的节点,并沿父级随机放置。快速铺满
Parent继承父级创建精确数量的节点,放在父级的原点处。让子级与父级对齐

2.1.2 共用参数:边界与分布

参数作用
Generation:First父级上允许生成节点的最低位置。
Generation:Last父级上允许生成节点的最高位置。
Generation:Shared:Boundaries:Clip移除被 Spread 或 Position 方差推出 First~Last 范围之外的节点。开启它边界才是“硬”的。
Generation:Frequency父级曲线,控制沿父级长度方向的分布权重。默认恒为 1。
Generation:Pruning修剪曲线。曲线值低于 0.5 的位置,节点被整批移除。
Generation:Knockout:Amount剔除数量。在模式产生节点之后、计算之前随机移除一部分。可用父级曲线按树体结构定位。
Generation:Knockout:+Resolution让剔除量随 Resolution 增减。
Generation:Size scalar缩放节点及其全部子级的尺寸。
Generation:Masks指定遮罩资源以限制节点出现位置。

2.1.3 共用参数:整体变换

参数作用
Generation:Rotation把该生成器的全部节点作为整体绕父级脊线旋转。配合方差可打乱朝向。
Generation:Position把全部节点沿父级上下平移。
Generation:Sink整体调整节点起点,使其陷入或远离父级表面。常用来把树干略微压到地面以下,便于场景摆放。

2.1.4 共用参数:Extend parent 延伸父级

这组参数用于在父级枝条末端额外生成节点,不受所选模式影响。如果 Branch 延伸另一个 Branch,两者之间会是无缝过渡——可以逐级延伸,从树干一路做到枝梢而没有接缝。Cap 生成器就是用这种方式产生的。

该功能生效的前提是:父级必须是 Branch 生成器,子级只能是 Branch、Cap、Leaf mesh 或 Batched leaf。

Type 取值含义
None不生成延伸节点。
Any父级的每个开口端各生成一个节点(枝条可能分裂成两个开口)。
Split 1从父级的第一个分裂(或唯一开口)生成。
Split 2从父级的第二个分裂生成(如果存在)。
Skinny从父级两个分裂中较细的那个生成。
Fat从父级两个分裂中较粗的那个生成。
Breaks only仅当父级断裂时才生成。
Bottom生成一个延伸父级底部的节点。

Count 控制单个父级上最多能挂几个延伸节点,通常设为 1。多个生成器可以延伸同一个父级——配合分裂相关的取值(Split 1/2、Skinny/Fat)可以分别定位分裂后的每一部分。

2.1.5 共用参数:力容器与网格对齐

参数组作用
Force containers: Include只有落在指定几何力场内部的节点才会被创建。
Force containers: Exclude落在指定几何力场内部的节点不会被创建。
Mesh alignment把网格对齐到指定方向。仅对 Leaf mesh / Batched leaf 以及点击放置产生的节点有效,且父级必须是网格。可选 None / Tangent / Binormal / Parent X,Y,Z / World X,Y,Z。
Click place控制该生成器如何响应自由手绘模式下的点击放置操作:Ready(接受任意)、None(不接受)、Any(优先接受)、Number(只接受对应 ID)。

2.1.6 Active 与 Resolution 联动

Generation:Shared:Active 是一条按分辨率开关生成器的曲线:曲线值大于 0.5 时该生成器启用,小于 0.5 时关闭。

用它可以在不同分辨率下整批替换生成器。官方给的例子很典型:

  • 做一份叶片贴图,在 Draft 和 Low 分辨率下只启用一片叶子;
  • 在 Medium 和 High 分辨率下启用五片叶子的版本。

这样同一个模型就能自动适应不同的质量等级,而不需要维护多个文件。

调参顺序建议

面对一个新节点,按这个顺序调效率最高:
① Mode(决定用什么算法)→ ② 数量(决定数量级)→ ③ Frequency 曲线(决定分布疏密)→ ④ Rotation / Sweep(决定朝向)→ ⑤ Jumble 方差(打乱规整感)→ 最后才碰 Segments 之类的网格参数。

很多新手一上来就调分段数,结果形态还是不对——因为形态是 Generation 决定的,分段只决定这个形态有多圆滑。

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

Generation:Mode — 子节点分布算法Absolute每个父级固定 N 个子节点Proportional数量与父级长度成正比Phyllotaxy叶序:黄金角 137.5° 螺旋Interval沿父级等距着生Bifurcation只在父级转折处着生Steps分段,每段一组(轮生)
ModePlain meaningOfficial descriptionTypical use
ClassicclassicExists only for compatibility with older models; new models should avoid it.old files only
Proportionalby proportionCreates nodes based on the parent's size; good for distributing nodes randomly over a parent.Let long branches naturally grow more side branches
Proportional stepsproportional stepsCreates a series of steps, each containing several nodes. This style is common on pines.Whorled branches on conifers
Absoluteabsolute countCreates 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 stepsabsolute stepsCreates an exact number of steps, each with several nodes. It likewise does not adapt to parent size and should be used sparingly.—
Phyllotaxyleaf arrangementProvides several common leaf growth patterns (alternate / opposite / whorled and so on).Realistic leaf arrangement, whorled conifer branches
IntervalintervalCreates nodes at a fixed spacing along the parent, and applies very broadly.Palm fronds evenly spaced along the trunk
BifurcationforkingPlaces 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
FloodfloodCreates an exact number of nodes and places them randomly along the parent.Fast coverage
Parentinherit from parentCreates an exact number of nodes at the parent's origin.Align children with the parent

2.1.2 Shared parameters: boundaries and distribution

ParameterPurpose
Generation:FirstThe lowest position on the parent where nodes may be generated.
Generation:LastThe highest position on the parent where nodes may be generated.
Generation:Shared:Boundaries:ClipRemoves nodes pushed outside the First–Last range by Spread or Position variance. Only with this enabled are the boundaries “hard”.
Generation:FrequencyA parent curve controlling the distribution weight along the parent's length. Constant 1 by default.
Generation:PruningPruning curve. Where the curve value is below 0.5, the nodes there are removed in bulk.
Generation:Knockout:AmountKnockout 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:+ResolutionMakes the knockout amount increase or decrease with Resolution.
Generation:Size scalarScales the size of a node and all of its children.
Generation:MasksSpecifies mask assets to restrict where nodes may appear.

2.1.3 Shared parameters: overall transforms

ParameterPurpose
Generation:RotationRotates all of the generator's nodes as a group around the parent spine. Add variance to scramble the orientation.
Generation:PositionTranslates all nodes up or down along the parent.
Generation:SinkAdjusts 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 valueMeaning
NoneNo extension node is generated.
AnyGenerates one node at each open end of the parent (a branch can split into two openings).
Split 1Generates from the parent's first split (or its only opening).
Split 2Generates from the parent's second split, if it exists.
SkinnyGenerates from the thinner of the parent's two splits.
FatGenerates from the thicker of the parent's two splits.
Breaks onlyGenerates only when the parent is broken.
BottomGenerates 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 groupPurpose
Force containers: IncludeOnly nodes that fall inside the specified geometry force are created.
Force containers: ExcludeNodes that fall inside the specified geometry force are not created.
Mesh alignmentAligns 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 placeControls 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.

2.2 Spine 脊线参数

2.2 Spine Parameters

每个 Branch 内部都有一条脊线(Spine)——它是枝条的中心线。几何体是沿着这条线“扫”出来的,所以脊线的形状就决定了枝条的形状。Branch 节点有 70 个 Spine 参数,是仅次于 Generation 的第二大参数组。

Spine:Shape 曲线决定枝条的弯曲形态直线(默认)看起来一定假上凸弧线主枝上扬,橡树常见下垂弧线柳枝、棕榈叶S 形基部上扬、末端回弯虚线 = 直线基准,实线 = 调整曲线后的脊线

核心参数

参数作用取值范围与经验
Spine:Length枝条长度,相对父级长度的比例。0~1 之间是“比父级短”,>1 是“比父级长”。主枝常用 0.3~0.6。
Spine:Style脊线形态风格。不同风格对应不同的弯曲模板。
Spine:Shape形状曲线。X = 沿脊线 0~1,Y = 横向偏移量。这是最常用的参数。把曲线拉成一个弧形,枝条就会自然弯曲。直线看起来一定假,真实枝条都有弧度。
Spine:Droop下垂。模拟重力让枝条末端往下垂。柳树、棕榈需要较大的下垂值;松树几乎不需要。
Spine:Jink折角。制造不规则的硬转折。小幅值(0.05~0.15)能有效打破“太顺滑”的假感。
Spine:Noise噪波。给脊线叠加随机扰动。让枝条表面走向略微抖动,近景看更真实。
Spine:Orientation脊线朝向。控制弯曲朝向哪一侧。
Spine:Path路径。手绘模式下可自定义走向。用于藤蔓、根系等自由走向结构。
Spine:Prune脊线修剪。—
Spine:Break断裂。模拟枝条折断。做枯木、断枝时使用。
Spine:Match parent与父级匹配。让子枝的弯曲延续父级的趋势。

Spine 与 Forces 的分工

这两组参数都能让枝条弯曲,但机制不同:

  • Spine:Shape 是内在的——它直接定义这根枝条本身长成什么形状。
  • Forces 是外在的——它模拟外力(重力、风、遮挡物)对枝条的影响,作用范围可以跨层级。

实操建议:先用 Spine:Shape 定基本弧线,再用 Forces 做整体协调。只用 Spine 会显得每根枝条各长各的;只用 Forces 则难以精确控制单根枝条的造型。

Hand Drawn 手绘脊线

打开工具栏的 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.

Spine:Shape 曲线决定枝条的弯曲形态直线(默认)看起来一定假上凸弧线主枝上扬,橡树常见下垂弧线柳枝、棕榈叶S 形基部上扬、末端回弯虚线 = 直线基准,实线 = 调整曲线后的脊线

Core parameters

ParameterPurposeRange and experience
Spine:LengthBranch 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:StyleSpine form style.Different styles correspond to different curvature templates.
Spine:ShapeShape 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:DroopDroop. Simulates gravity pulling the branch tip down.Willows and palms need a large droop value; pines need almost none.
Spine:JinkJink. Creates irregular hard corners.A small value (0.05–0.15) effectively breaks the “too smooth” fake look.
Spine:NoiseNoise. Adds random perturbation to the spine.Makes the branch direction wobble slightly, which reads better up close.
Spine:OrientationSpine orientation.Controls which side the curvature bends toward.
Spine:PathPath. A custom path in freehand mode.For vines, roots and other free-form structures.
Spine:PruneSpine pruning.—
Spine:BreakBreak. Simulates a snapped branch.For dead wood and broken branches.
Spine:Match parentMatch 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.

2.3 Segments 与网格密度

2.3 Segments and Mesh Density

Generation 和 Spine 决定形态,Segments 决定形态用什么精度表达出来。这组参数直接对应面数,是性能优化的主战场。

参数作用经验值
Segments:Length沿枝条长度方向的分段数。树干 8–16;主枝 4–8;细枝 2–4。段数不足时弯曲会变成折线。
Segments:Radial横截面圆周分段数。树干 8–12;主枝 6–8;细枝 3–4。低于 5 会明显看出多边形棱角。
Segments:Resolution总体网格分辨率,是 Length 与 Radial 的总控。调这个比分别调上面两个更快。
Segments:Scalar分段缩放系数。—
Segments:Accuracy几何精度。提高会让曲面更精确,代价是面数。
Segments:Features特征保留。简化时保留哪些几何特征。
Segments:Influence影响范围。—
Segments:Painted Vertices顶点绘制相关的分段。与手绘编辑配合。

面数怎么算

一根枝条的三角面数大致为:

面数 ≈ (Length 段数) × (Radial 段数) × 2

举例:Length=10、Radial=8 的一根枝条 ≈ 10 × 8 × 2 = 160 个三角面。如果这棵树有 200 根这样的枝条,就是 32,000 面——已经接近一棵游戏用中等树的全部预算。

面数在哪里?

回到前面 Broadleaf_Field.spm 的真实统计:
branches 670,083 tris / caps 437 tris / leaf meshes 2,362,002 tris / TOTAL 3,032,522

叶片占了 78% 的面数,枝条只占 22%。所以优化顺序应该是:先减叶片数量与叶片网格精度,再考虑枝条分段。很多新手死磕树干分段,收益微乎其微。

Segments 也会随 LOD 变化

枝条与羽叶可以随 LOD 改变分段数——即使这个枝条本身保留在树里,也能降低它的几何复杂度。可以分别显式设置长度分段与圆周分段,也可以调整 Optimization 属性,让 Modeler 智能决定在哪里减段而尽量保持整体形状。

注意:过度减少分段(尤其是长度分段)会造成可见的跳变(pop)。切换 LOD 预览确认一下再定稿。

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.

ParameterPurposeRule of thumb
Segments:LengthNumber 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:RadialNumber of segments around the cross-section.Trunk 8–12; primary branches 6–8; twigs 3–4. Below 5 you clearly see polygonal edges.
Segments:ResolutionOverall mesh resolution — the master control over Length and Radial.Faster to adjust than the two above separately.
Segments:ScalarSegment scale factor.—
Segments:AccuracyGeometry accuracy.Higher makes curved surfaces more precise at the cost of polygons.
Segments:FeaturesFeature preservation.Which geometric features to keep when simplifying.
Segments:InfluenceInfluence range.—
Segments:Painted VerticesSegments related to vertex painting.Works together with freehand editing.

How to estimate polygon count

The triangle count of a single branch is roughly:

triangles ≈ (Length segments) × (Radial segments) × 2

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.

2.4 Forces 力场

2.4 Forces

Forces 是让 SpeedTree 的树“看起来是真的”的关键。程序化生成最大的毛病是太规整:枝条均匀分布、笔直生长、互不相交。力场通过模拟外力来打破这种规整。

在实测数据中,Branch 有 56 个 Forces 参数,是所有生成器里最多的。下面是 v10.2.0 里实际存在的力场类型:

力场中文作用
Forces:Gnarl扭曲力最重要的一个。让枝条产生不规则的扭动。真实树木因为生长竞争、虫害、风向,几乎不会笔直。建议从 0.1~0.3 开始试。
Forces:Twist扭转力沿枝条自身轴旋转,让枝干表面纹理跟着扭,增加动势。
Forces:Direction方向力把枝条往一个固定方向推。用来表现常年单向风造成的“旗形树冠”。
Forces:Gravity重力让枝条下垂。与 Spine:Droop 的区别是它作用于整个子树。
Forces:Curl卷曲力让枝条末端卷起来。蕨类、卷须常用。
Forces:Repel排斥力避免穿插的利器。让节点之间互相推开。枝叶穿模是程序化树的常见问题,开这个能大幅缓解。
Forces:Repulse脉冲排斥排斥的变体。
Forces:Attraction吸引力把枝条吸向某处。
Forces:Magnet磁力把枝条吸附到指定对象上。
Forces:Mesh / Mesh 2 / Mesh 3网格力让枝条沿着一个外部模型的表面生长。做爬墙藤蔓、依附岩石的根系时必用。官方示例 samples/Learning/Forces/Mesh_Crawling_on_Tree.spm 就是演示这个。
Forces:Obstruction障碍力让枝条绕开碰撞体生长,模拟被建筑/岩石挡住。
Forces:Planar平面力把枝条压向一个平面,做“贴墙生长”的藤蔓。
Forces:Return回归力把偏离太远的枝条拉回来,防止被其它力推飞。
Forces:Vine / Small Vines / Big Vine / Vines藤蔓力藤蔓专用力场组。
Forces:Roots / BigRoots根系力根系生长专用。
Forces:Trunk树干力—
Forces:Flooring落地力让枝条不会穿到地面以下。
Forces:Align对齐力让枝条趋向某个共同方向。
Forces:General Direction总体方向全局方向控制。
Forces:Bounce on me!弹性碰撞开启后被其它节点碰撞时会回弹。名字很随意,但确实是官方参数名。
Forces:Allow forces允许力场总开关。关掉后该节点完全不受任何力场影响。排查“为什么调了力场没反应”时先看这里。
常用力场对枝条的作用Gnarl 扭曲让枝条不规则扭动 —— 去假感最有效Twist 扭转沿枝条轴旋转,增加动势Gravity 重力枝条受重力下垂Repel 排斥节点互相推开 —— 解决穿模Mesh 网格力沿外部模型表面生长Direction 方向整体推向某一方向(旗形树冠)

让树“不假”的三步

  1. 加 Gnarl:0.1~0.3,立刻打破笔直感。
  2. 开 Repel:解决枝叶穿模,让树冠有“透气”的空间。
  3. 给 Jumble 一个非零值:在 Generation 里,让子节点位置不完全规整。

这三步做完,程序化树的“塑料感”通常能去掉大半,而且完全不增加面数。

力场的作用范围

力场挂在哪个节点上,就影响该节点及其所有子孙。所以:

  • 想让整棵树都受某个力影响 → 挂在树干上。
  • 只想让末梢细枝乱一点 → 挂在最末一级 Branch 上。
  • 多个力场可以叠加,效果是相加的。

官方力场示例

安装目录 samples/Learning/Forces/ 下有完整的力场演示文件,建议逐个打开研究:

文件演示内容
Attenuation.spm力场衰减
Bounce.spm弹性碰撞
Geometry_Force.spm几何体力场
Mesh_Crawling_on_Mesh.spm网格在网格上爬行
Mesh_Crawling_on_Tree.spm网格在树上爬行

这些示例配套了 box.obj、sphere.obj、torus.obj、dica.obj、rook.FBX 等参考模型,可以直接看到力场如何把枝条“推”到模型表面上。

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:

ForcePlain meaningPurpose
Forces:GnarlgnarlThe 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:TwisttwistRotates along the branch's own axis so the surface texture twists with it, adding a sense of movement.
Forces:Directiondirectional forcePushes branches in one fixed direction. Used for the “flag-shaped crown” caused by constant one-way wind.
Forces:GravitygravityPulls branches down. Unlike Spine:Droop, it acts on the whole subtree.
Forces:CurlcurlCurls branch tips. Common on ferns and tendrils.
Forces:RepelrepulsionA great anti-intersection tool. Pushes nodes apart. Intersecting foliage is a common procedural tree problem and this greatly reduces it.
Forces:RepulserepulseA variant of repulsion.
Forces:AttractionattractionPulls branches toward a point.
Forces:MagnetmagnetSnaps branches onto a specified object.
Forces:Mesh / Mesh 2 / Mesh 3mesh forceMakes 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:ObstructionobstructionMakes branches grow around collision bodies, simulating being blocked by buildings or rocks.
Forces:PlanarplanarFlattens branches toward a plane, for vines that “hug a wall”.
Forces:ReturnreturnPulls branches that have strayed too far back in, so the other forces do not fling them away.
Forces:Vine / Small Vines / Big Vine / Vinesvine forcesA force group dedicated to vines.
Forces:Roots / BigRootsroot forcesDedicated to root growth.
Forces:Trunktrunk force—
Forces:FlooringflooringKeeps branches from passing below the ground plane.
Forces:AlignalignMakes branches converge on a common direction.
Forces:General Directiongeneral directionGlobal direction control.
Forces:Bounce on me!bounceWhen on, the node bounces off collisions with other nodes. The name is casual, but it really is the official parameter name.
Forces:Allow forcesallow forcesThe master switch. When off, the node is completely unaffected by any force. Check here first when wondering “why does my force do nothing”.
常用力场对枝条的作用Gnarl 扭曲让枝条不规则扭动 —— 去假感最有效Twist 扭转沿枝条轴旋转,增加动势Gravity 重力枝条受重力下垂Repel 排斥节点互相推开 —— 解决穿模Mesh 网格力沿外部模型表面生长Direction 方向整体推向某一方向(旗形树冠)

Three steps to make a tree stop looking fake

  1. Add Gnarl: 0.1–0.3 immediately kills the straight-line look.
  2. Turn on Repel: fixes foliage intersection and gives the crown room to breathe.
  3. 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:

FileWhat it demonstrates
Attenuation.spmforce attenuation
Bounce.spmbounce collisions
Geometry_Force.spmgeometry force
Mesh_Crawling_on_Mesh.spma mesh crawling on a mesh
Mesh_Crawling_on_Tree.spma 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.

2.5 Wind 风力

2.5 Wind

SpeedTree 的风力不是“给模型加一段动画”,而是把风力参数烘焙进顶点数据,导出后由引擎的 SpeedTree 运行时实时计算摆动。这样做的好处是文件小、效果可控、引擎开销低。

风力参数

参数作用
Wind:Apply总开关。关掉后该节点不参与风动。
Wind:Weight风力权重,最核心的参数。0 = 完全不动,1 = 完全随风摆。
Wind:Inherited weight scale子节点从父级继承的权重倍率。用于让末梢比父级摆得更厉害。
Wind:Offset相位偏移。让不同的枝不同步摆动,否则整棵树会像一块板子一样晃。
Wind:Level offset层级偏移。按节点层级自动错开相位。
Wind:Rotation旋转响应。枝条绕自身轴的扭转响应。

权重分配原则

风力权重沿层级递增0.05树干0.15主枝0.35侧枝0.60细枝0.85叶片Wind:Weight —— 树干几乎不动,末梢剧烈摆动。权重同时写入顶点色绿通道,导出后由引擎运行时读取。

真实的树在风中:树干几乎不动,主枝轻微摇,细枝和叶片剧烈抖。所以权重应该沿层级递增:

节点建议 Wind:Weight
树干(Level 1)0.02 – 0.08
主枝(Level 2)0.10 – 0.20
侧枝(Level 3)0.25 – 0.45
末梢细枝(Level 4+)0.5 – 0.7
叶片 / 羽叶0.7 – 1.0

顶点色的绿通道 = 风力权重

SpeedTree 约定用顶点色的绿通道存储风力权重(红通道存 AO,蓝通道存隐藏信息)。所以你在 Vertex Color:Green 里画的噪波,实际影响的就是风动效果。这也是为什么调试风效时要切换到 Wind Weights 渲染模式看。

先跑一遍 Wind wizard

官方文档在讲风力时,反复给出的推荐做法只有一条:先用 Tools 菜单里的 Wind wizard(风力向导)跑一遍,再手工微调。向导会自动按层级分配合理的权重,比从零手调快得多,也更容易得到自然的结果。

只有一两个层级会独立摆动

这是风力系统里最容易被误解、也最容易调不出效果的地方:

  • 风动是否"独立",取决于从 Tree 出发、沿着任意路径遇到的第一个启用了 Wind:Apply 的生成器。是这个生成器决定了独立运动的归属,而不是你最后调的那个。
  • 系统只给一到两个枝条层级独立运动。所以应该把独立运动分配给从树干分出的粗大主枝,而几乎不要给树干本身。
  • 如果层级选错了,就会出现"调了半天没反应"或者"整棵树一起晃"的现象。

怎么确认风力到底生效了没有

开启风力后,Generation Editor 里会出现一个数值浮层,直接显示各节点的风力权重。用渲染模式里的 _Wind Weights/Level 1~4.fx 也能看。看不到数值就说明 Wind:Apply 那条链路断了。

运动速度的层级关系

Shared Motion(整体运动)  <  Branch Motion(枝条运动)  <  Leaf Motion(叶片运动)
      慢、幅度大                    中                              快、幅度小

三者叠加才有真实感。另外 Wind:Independence 的典型取值区间是大于 1.0、小于 10.0。

Fan 对象与解剖学权重

所有风力属性都挂在一个叫 Fan 的场景对象上,而不是散落在各个生成器里。Fan 的 Actions 菜单里有一个 Set anatomical weights(设置解剖学权重),可以一次性按植物解剖结构分配好权重,是手工调参之外最快的办法。

v10.2.0 里风力按目标引擎分成几组独立算法,因为它们实现方式不同,参数并不通用——见下一节。

风力不会循环

风力动画本身不是循环的。如果需要无缝循环,要在导出时启用 AnimationWindLoop(v10.2.0 的 export_presets/VFX/Wind.ini 里已默认开启,AnimationLength=5)。如果风的起止速度差异较大,循环接缝会看得出来。

导出到 UE 时的风力

  • 用 .st9 格式导入 UE 时,风力是在材质里用 GPU 计算的,材质上没有强度参数。所以风力强度必须在 SpeedTree Modeler 里先调好再导出。
  • 一棵树如果有多个材质实例,必须把所有实例改成同一组数值,否则同一棵树的各部分会以不同幅度摆动,出现"分离"现象。

引擎侧的风力参数组

v10.2.0 里风力参数按目标引擎分成了几组,因为不同引擎的运行时实现不同:

参数组目标
Wind:Games游戏引擎通用风力参数
Wind:VFX影视级风力参数(更细腻,可烘焙)
Wind:Legacy UE4/Unity旧版 UE4 / Unity 兼容参数
Wind:LumberyardAmazon Lumberyard 引擎兼容参数

风力的两套体系:Shared Motion 与 Ripple Motion

在参数表里还能看到这几组(出现在导出与运行时的配置里):

  • Games Shared Motion / SDK Shared Motion / Global Motion —— 整体运动。整棵树作为一个整体被风吹动,幅度大、频率低。
  • Games Ripple Motion / SDK Ripple Motion —— 涟漪运动。叶片层面的高频抖动,幅度小、频率高。

两者叠加才有真实感:整体慢慢摇 + 叶片快速抖。渲染模式里的 _Wind Weights/Level 1.fx ~ Level 4.fx 和 Ripple.fx 就是用来分别查看这两套权重的。

风力相关的导出预设

export_presets/VFX/Wind.ini 是专门用于烘焙风力动画的预设,输出的是可被渲染器直接使用的风力数据,而不是游戏运行时的顶点属性。

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

ParameterPurpose
Wind:ApplyMaster switch. When off, the node takes no part in wind motion.
Wind:WeightWind weight, the core parameter. 0 = completely still, 1 = fully swaying with the wind.
Wind:Inherited weight scaleMultiplier for the weight a child inherits from its parent. Used to make tips sway harder than their parents.
Wind:OffsetPhase offset. Makes different branches sway out of sync; otherwise the whole tree rocks like a single board.
Wind:Level offsetLevel offset. Automatically staggers phase by node level.
Wind:RotationRotation response — the twist response of a branch about its own axis.

How to distribute weight

风力权重沿层级递增0.05树干0.15主枝0.35侧枝0.60细枝0.85叶片Wind: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:

NodeSuggested 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 / fronds0.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 groupTarget
Wind:Gamesgeneric game-engine wind parameters
Wind:VFXfilm-grade wind parameters (finer, bakeable)
Wind:Legacy UE4/Unitycompatibility parameters for older UE4 / Unity
Wind:Lumberyardcompatibility 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.

2.6 Material 材质与贴图通道

2.6 Material and Texture Channels

SpeedTree 的材质是一组贴图通道的集合。理解每个通道存什么,是做出高质量植被的前提。

材质贴图通道Color基础色 / 反照率Normal法线,表面凹凸Height高度,视差映射AO环境光遮蔽,加深缝隙Opacity不透明度,叶片抠形必需Gloss光泽度(与粗糙度相反)Specular高光强度,默认 0.75 灰Metallic金属度,树木通常为 0Subsurface次表面颜色,叶片透光色Subsurface Amount次表面强度,叶片透光关键Custom / Custom2自定义通道Vertex Displacement顶点置换,真实推移顶点导出时按引擎打包方案合并到少数几张贴图的 RGBA 通道,减少贴图数量。

贴图通道一览

通道参数名内容说明
ColorMaterial:Color基础色 / 反照率树皮与叶片的固有颜色。
NormalMaterial:Normal法线表面的凹凸细节。树皮几乎全靠它。
HeightMaterial:Height高度用于视差映射,制造“深进去”的立体感。
AOMaterial:AO环境光遮蔽加深缝隙的阴影,让树皮裂缝更明显。
OpacityMaterial:Opacity不透明度叶片必需。靠它把方形卡片抠出叶子形状。
GlossMaterial:Gloss光泽度决定高光的锐利程度。嫩叶比老叶亮。
SpecularMaterial:Specular高光强度—
MetallicMaterial:Metallic金属度植物一般是 0,但可用于特殊效果。
SubsurfaceMaterial:Subsurface次表面颜色叶片背光透出的颜色,通常是偏黄绿的暖色。
Subsurface AmountMaterial:Subsurface Amount次表面强度让叶片“透光”的关键。没有它叶子会像塑料片。
Custom / Custom2Material:Custom / Custom2自定义通道可用于存额外的遮罩、变化贴图等。
Vertex DisplacementMaterial:Vertex Displacement顶点置换真正推动网格顶点,做树皮的物理起伏。区别于法线贴图(只影响光照)。

贴图打包(Texture Packing)

导出时 SpeedTree 会把多个通道合并到同一张贴图的 RGBA 通道里,减少贴图数量。v10.2.0 内置了这些打包方案:

方案Texture0Texture1Texture2
Standard_Color_Normal_SS(次表面)
UnrealEngine_Color(Alpha 通道存不透明度)_Normal_Subsurface
UnityUnity 专用打包
LumberyardLumberyard 专用打包
Unpacked不打包,每个通道单独一张图(便于后期处理)

UE 方案的 MipGenerationFlag="AlphaIsOpacity" 表示:生成 Mipmap 时,Alpha 通道要按“不透明度”规则处理(避免叶片边缘在远处变黑)。这是 UE 植被常见的坑,SpeedTree 已经在打包配置里处理好了。

顶点属性打包(Vertex Packing)

导出时顶点数据也会被压缩。以下是 v10.2.0 的真实顶点布局:

Standard(常规模型):

Attribute 1  half  x4   position(3) / texcoord_u(1)
Attribute 2  half  x4   lod_position(3) / texcoord_v(1)
Attribute 3  ubyte x4   normal(1) / binormal(1) / tangent(1) / ao(1)
Attribute 4  ubyte x4   wind_branch1_weight(1) / wind_branch1_dir(1) / wind_branch1_offset(1) / wind_ripple(1)
Attribute 5  ubyte x4   wind_branch2_weight(1) / wind_branch2_dir(1) / wind_branch2_offset(1) / blend(1)

可以看到:法线、副法线、切线、AO 各占 1 字节;风力权重、方向、相位偏移、涟漪各占 1 字节。整棵树的风动信息只用了 2 个 32 位字——这是 SpeedTree 高效的原因。

Standard_Billboard(公告板):只有 2 个属性,把法线拆到位置和 UV 的剩余位里,极度压缩。

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.

材质贴图通道Color基础色 / 反照率Normal法线,表面凹凸Height高度,视差映射AO环境光遮蔽,加深缝隙Opacity不透明度,叶片抠形必需Gloss光泽度(与粗糙度相反)Specular高光强度,默认 0.75 灰Metallic金属度,树木通常为 0Subsurface次表面颜色,叶片透光色Subsurface Amount次表面强度,叶片透光关键Custom / Custom2自定义通道Vertex Displacement顶点置换,真实推移顶点导出时按引擎打包方案合并到少数几张贴图的 RGBA 通道,减少贴图数量。

Texture channels at a glance

ChannelParameter nameContentNotes
ColorMaterial:Colorbase color / albedothe intrinsic color of bark and leaves.
NormalMaterial:Normalnormalsurface bump detail. Bark relies almost entirely on this.
HeightMaterial:Heightheightused for parallax mapping to create a sense of depth.
AOMaterial:AOambient occlusiondeepens shadow in crevices so bark cracks read more strongly.
OpacityMaterial:Opacityopacityrequired for leaves. It is what cuts a leaf shape out of a square card.
GlossMaterial:Glossglossinesshow sharp the specular highlight is. Young leaves are glossier than old ones.
SpecularMaterial:Specularspecular intensity—
MetallicMaterial:Metallicmetallicusually 0 for plants, but usable for special effects.
SubsurfaceMaterial:Subsurfacesubsurface colorthe color transmitted through a backlit leaf, usually a warm yellow-green.
Subsurface AmountMaterial:Subsurface Amountsubsurface strengththe key to translucent leaves. Without it leaves look like plastic sheets.
Custom / Custom2Material:Custom / Custom2custom channelsfor storing extra masks, variation maps and so on.
Vertex DisplacementMaterial:Vertex Displacementvertex displacementactually 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:

SchemeTexture0Texture1Texture2
Standard_Color_Normal_SS (subsurface)
UnrealEngine_Color (alpha channel holds opacity)_Normal_Subsurface
UnityUnity-specific packing
LumberyardLumberyard-specific packing
Unpackedno 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:

Standard (regular models):

Attribute 1  half  x4   position(3) / texcoord_u(1)
Attribute 2  half  x4   lod_position(3) / texcoord_v(1)
Attribute 3  ubyte x4   normal(1) / binormal(1) / tangent(1) / ao(1)
Attribute 4  ubyte x4   wind_branch1_weight(1) / wind_branch1_dir(1) / wind_branch1_offset(1) / wind_ripple(1)
Attribute 5  ubyte x4   wind_branch2_weight(1) / wind_branch2_dir(1) / wind_branch2_offset(1) / blend(1)

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:

MaskUse
Default_1 / Default_2general purpose
Blend_1 / Blend_2smooth transitions
Chunky_1 / Chunky_2chunky transitions, good for mottled bark
Mottled_1 / Mottled_2speckled, good for moss
Palm_1 / Palm_2palm-specific
Pine_1pine-specific

You can also drop your own masks into blend_masks/custom/.

2.7 Displacement 置换与 UV

2.7 Displacement and UVs

Displacement 让枝条表面产生真实的几何起伏,是“近景看起来像树皮”的关键。

参数作用
Displacement:Amount置换总强度。最常用的旋钮。
Displacement:Source置换源贴图。通常用高度图或专门的置换图。
Displacement:Shape置换形状。
Displacement:Fine细节强度。叠加高频小起伏。
Displacement:Flares根部扩张(根盘)。让树干入土处自然变粗。做单株特写时非常有效。
Displacement:Length amount沿长度方向的置换量。
Displacement:Sharpness锐度。控制置换边缘的硬软。
Displacement:Mapping贴图映射方式。
Displacement:U scale / V scale贴图在 U/V 方向的缩放。
Displacement:Seed随机种子,换一个就是不同的凹凸分布。
Displacement:Feature Exaggeration特征夸张。把已有的凹凸特征放大。

置换 vs 法线贴图的区别

法线贴图只改变光照计算,模型轮廓还是光滑的,侧面看会“穿帮”。置换贴图真的移动顶点,轮廓会跟着变,但需要足够的网格密度(Segments:Length 和 Radial 要够高),否则效果出不来。近景特写用置换,远景用法线。

UV Mapping

参数作用
UV Mapping:StyleUV 展开方式。不同方式决定了树皮纹理怎么绕在枝条上。
UV Mapping:U / VU/V 方向的平铺次数。U 控制纹理绕圆周重复几次,V 控制沿长度重复几次。
UV Mapping:Tiling平铺设置总控。
UV Mapping:Create seams是否创建 UV 接缝。做贴图绘制时需要接缝来展开。
UV Mapping:Seams seed接缝位置的随机种子。

检查 UV 与纹素密度

渲染模式里有两个专门用来检查 UV 的:

  • Texcoord.fx —— 直接显示 UV 坐标(红绿渐变),能一眼看出 UV 有没有翻转、拉伸。
  • Texcoord_Seams.fx —— 高亮 UV 接缝位置。
  • Texel_Density.fx —— 纹素密度检查。用颜色显示每个区域的贴图精度是否一致。树干和细枝如果纹素密度差太多,同一张贴图在细枝上会糊掉。做游戏资产时这一步必查。

Displacement gives branch surfaces real geometric relief — the key to bark that holds up in close-ups.

ParameterPurpose
Displacement:AmountOverall displacement strength. The most-used knob.
Displacement:SourceSource displacement texture. Usually a height map or a dedicated displacement map.
Displacement:ShapeDisplacement shape.
Displacement:FineFine detail strength. Layers high-frequency small relief on top.
Displacement:FlaresRoot flare. Makes the trunk thicken naturally where it meets the ground. Very effective on single-tree close-ups.
Displacement:Length amountDisplacement amount along the length.
Displacement:SharpnessSharpness — how hard or soft the displacement edges are.
Displacement:MappingTexture mapping method.
Displacement:U scale / V scaleTexture scale in U/V.
Displacement:SeedRandom seed; change it for a different bump distribution.
Displacement:Feature ExaggerationFeature exaggeration. Amplifies existing bump features.

Displacement versus normal maps

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

ParameterPurpose
UV Mapping:StyleUV unwrap method. Different methods determine how bark texture wraps around a branch.
UV Mapping:U / VTiling count in U/V. U controls how many times the texture repeats around the circumference, V how many times along the length.
UV Mapping:TilingMaster control for tiling.
UV Mapping:Create seamsWhether to create UV seams. Seams are needed to unwrap for texture painting.
UV Mapping:Seams seedRandom 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叶片透光。让阳光透过叶子。

叶片调参口诀

  1. 尺寸先对:Size X/Y 与贴图长宽比一致,不然怎么调都别扭。
  2. 给点 Fold:0.1~0.3 的对折让卡片立刻有立体感。
  3. Rotation 加方差:没有两片叶子朝向完全相同。
  4. 开 Subsurface Amount:这是叶片“活”起来的关键,别省。
  5. 用 Frequency 曲线做疏密:枝条根部留空、中上部密。

Leaves define how the crown reads and account for the vast majority of the polygons. SpeedTree offers three node types for leaves:

NodeFormPolygonsUse
Leaf Meshflat card or real meshmediumthe mainstream choice; can be curled and folded for a 3D feel
Batched Leafbatched, packed leaveslow (cheap to render)dense crowns, mobile
Leafthe simplest cardlowestdistance, large-scale vegetation
Fronda whole pinnate compound leaflow (most efficient)palms, ferns, cycads

The Leaves parameter group

ParameterPurpose
Leaves:TypeLeaf type (card / mesh)
Leaves:Size X / Size YLeaf width and length. These must match the leaf's aspect ratio in the texture, or it will stretch.
Leaves:ScaleOverall scale.
Leaves:RotationLeaf rotation. Pair it with variance so every leaf faces differently.
Leaves:BendBend. Bends the leaf along its midrib.
Leaves:FoldFold angle. Folds a flat card along its center axis into a “V” — the cheapest way to give card leaves a 3D feel.
Leaves:TwistTwist. Rotates the leaf about its own long axis.
Leaves:FlutterFlutter. Extra leaf shake in the wind.
Leaves:AlignOrientation alignment.
Leaves:SpreadSpread. Distance of leaves from the branch axis.
Leaves:DistributionDistribution curve. Controls leaf density along the branch.
Leaves:Start angleStart angle.
Leaves:OrientationOrientation control.

Related parameter groups

Parameter groupPurpose
Local OrientationLocal orientation. Offsets leaf orientation relative to the parent.
DeformationDeformation. Lets leaves deform in the wind.
SensitivitySensitivity. Response sensitivity to light and wind.
Final AdjustmentsFinal adjustments. The last tweaks before export.
Shade PruningShade pruning. Removes leaves based on how lit they are.
Lighting:TranslucencyLeaf translucency. Lets sunlight pass through the leaves.

The leaf tuning checklist

  1. Get the size right first: Size X/Y matching the texture's aspect ratio, or nothing else will feel right.
  2. Add some Fold: 0.1–0.3 of fold instantly gives cards a 3D read.
  3. Add variance to Rotation: no two leaves face exactly the same way.
  4. Turn on Subsurface Amount: this is what brings leaves to life — do not skimp on it.
  5. Use the Frequency curve for density: bare at the branch base, dense toward the top.

2.9 Vertex Color 顶点色

2.9 Vertex Color

SpeedTree 用顶点色通道承载额外的信息,这是它把“造型数据”和“运行时数据”打包在一起的方式。三个通道各有约定:

通道参数存储内容用途
红 (R)Vertex Color:Red环境光遮蔽(AO)让枝条根部、树冠内部变暗,是“体积感”的主要来源。
绿 (G)Vertex Color:Green风力权重直接决定风动幅度。与 Wind:Weight 配合。
蓝 (B)Vertex Color:Blue隐藏 / 剔除信息控制哪些部分在特定条件下隐藏。
隐藏绿Vertex Color:Hidden Green隐藏状态的绿通道值—
顶点色:三个通道各有约定R红通道环境光遮蔽 AO树冠内部与枝条交接处变暗,产生体积感G绿通道风力权重直接决定风动幅度,与 Wind:Weight 配合B蓝通道隐藏 / 剔除信息控制特定条件下哪些部分隐藏注意:顶点色只有在 Tree 根节点上启用 "Vertex Colors" 计算标志后才会被计算。

怎么查看

用渲染模式里的 _Vertex Colors 组:

  • ___Color.fx —— 显示完整的顶点色 RGB。
  • __Red.fx —— 只看红通道,也就是 AO。
  • _Green.fx —— 只看绿通道,也就是风力权重。
  • Blue.fx —— 只看蓝通道。

为什么 AO 这么重要

程序化生成的树如果没有任何遮蔽信息,树冠内部会和外部一样亮,看起来像“一堆漂浮的纸片”。把 AO 烘进顶点色的红通道后:

  • 枝条交接处自然变暗。
  • 树冠内部变暗,产生体积感。
  • 整棵树的“重量感”就出来了。

SpeedTree 会自动计算这个 AO,一般不需要手工绘制,但要确保渲染时启用了顶点色。

手工绘制顶点色

工具栏里提供了顶点色画笔。相关图标(在 app_data/Property Bar/ 目录)包括:

工具文件作用
顶点色笔刷vertexcolor_brush_icon.png直接在模型上刷顶点色
顶点编辑vertex_edit_icon.png编辑单个顶点
顶点笔刷vertex_brush_icon.png批量影响顶点
置换笔刷displacement_brush_icon.png手工推移顶点做形变
弯曲笔刷bend_brush_icon.png手工弯曲枝条

手绘编辑是可回溯的

所有手工编辑都记录在节点上,可以用 Actions → Clear node edits 一键清除,回到纯程序化状态。所以不用担心“画坏了回不去”。这也是 SpeedTree 相比纯建模工具的优势:程序化是底子,手工是修饰,两者可以随时切换。

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:

ChannelParameterStoresUse
Red (R)Vertex Color:Redambient occlusion (AO)Darkens branch bases and the inside of the crown; the main source of volume.
Green (G)Vertex Color:Greenwind weightDirectly determines wind amplitude. Works together with Wind:Weight.
Blue (B)Vertex Color:Bluehidden / culling informationControls which parts hide under particular conditions.
Hidden GreenVertex Color:Hidden Greengreen channel value in the hidden state—
顶点色:三个通道各有约定R红通道环境光遮蔽 AO树冠内部与枝条交接处变暗,产生体积感G绿通道风力权重直接决定风动幅度,与 Wind:Weight 配合B蓝通道隐藏 / 剔除信息控制特定条件下哪些部分隐藏注意:顶点色只有在 Tree 根节点上启用 "Vertex Colors" 计算标志后才会被计算。

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:

ToolFilePurpose
vertex color brushvertexcolor_brush_icon.pngpaint vertex color directly on the model
vertex editvertex_edit_icon.pngedit individual vertices
vertex brushvertex_brush_icon.pngaffect vertices in bulk
displacement brushdisplacement_brush_icon.pngpush vertices by hand to deform the mesh
bend brushbend_brush_icon.pngbend 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.

2.10 渲染模式(调试视图)

2.10 Render Modes (Debug Views)

SpeedTree 内置了大量“调试渲染模式”,用来检查模型的各个数据通道。这是排查问题最快的手段——遇到问题先切渲染模式看数据,比盲调参数有效得多。

下面是 v10.2.0 安装目录 render_modes/ 里真实存在的全部模式,按官方分组列出:

光照模式(_Lighting)

模式用途
____Untextured.fx无贴图,只看几何体与光照
__Diffuse.fx只看漫反射贡献
__Specular.fx只看高光贡献
__Subsurface.fx只看次表面散射贡献
_Direct.fx只看直接光
Ambient.fx只看环境光
Shadow.fx只看阴影

材质通道模式(_Material)

模式检查什么
____Color.fx颜色贴图
____Opacity.fx不透明度。检查叶片 Alpha 是否干净。
___Normal.fx法线贴图
___Gloss.fx光泽度
___Specular.fx高光
__Metallic.fx金属度
__Subsurface.fx次表面颜色
_Subsurface Amount.fx次表面强度
Custom.fx / Custom2.fx自定义通道
Height.fx高度贴图

顶点色模式(_Vertex Colors)

模式检查什么
___Color.fx完整顶点色
__Red.fx红通道 = AO
_Green.fx绿通道 = 风力权重
Blue.fx蓝通道 = 隐藏信息

风力权重模式(_Wind Weights)

模式检查什么
Level 1.fx ~ Level 4.fx各层级的整体风动权重分布
Ripple.fx涟漪(叶片高频抖动)权重

其它模式(Other)

模式用途
____Phong.fxPhong 光照模型
___Blinn-Phong.fxBlinn-Phong 光照模型
___Oren-Nayar.fxOren-Nayar 漫反射模型,适合粗糙表面
__Lambert.fxLambert 漫反射
_Flat.fx平光,看剪影最好
_Snow.fx积雪效果预览
Billboard_Subsurface_Amount.fx公告板的次表面强度
Depth.fx深度图
Face_Normal_Check.fx面法线检查,用来找翻转的面
Matcap.fxMatcap 材质球预览,看形体很好用
Overdraw.fx重叠绘制检查。颜色越亮说明该区域被重复绘制次数越多,是优化叶片布局的重要依据。
Texcoord.fxUV 坐标显示
Texcoord_Seams.fxUV 接缝显示
Texel_Density.fx纹素密度检查,看贴图精度是否均匀

顶层常用模式

模式用途
_____Standard.fx标准渲染(默认)
____Scribed.fx描边渲染
___AO.fx只显示 AO
__Albedo_Check.fx反照率检查
__Saturation_Check.fx饱和度检查,用于检查颜色是否超出合理范围
__Subsurface_Check.fx次表面检查
_Lightmap.fx光照贴图预览

三个最该养成习惯的检查

  1. Overdraw —— 树冠里如果有一片亮斑,说明那里叶片堆叠严重,风一吹就会闪烁,且极其费性能。
  2. Texel_Density —— 颜色突变说明树干和细枝的贴图精度不一致,细枝上的树皮会糊。
  3. Face_Normal_Check —— 导出后引擎里出现黑面,通常是法线翻转,这里能直接看到。

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)

ModePurpose
____Untextured.fxno texture; geometry and lighting only
__Diffuse.fxdiffuse contribution only
__Specular.fxspecular contribution only
__Subsurface.fxsubsurface scattering contribution only
_Direct.fxdirect light only
Ambient.fxambient light only
Shadow.fxshadows only

Material channel modes (_Material)

ModeWhat it checks
____Color.fxcolor map
____Opacity.fxopacity. Checks whether leaf alpha is clean.
___Normal.fxnormal map
___Gloss.fxglossiness
___Specular.fxspecular
__Metallic.fxmetallic
__Subsurface.fxsubsurface color
_Subsurface Amount.fxsubsurface amount
Custom.fx / Custom2.fxcustom channels
Height.fxheight map

Vertex color modes (_Vertex Colors)

ModeWhat it checks
___Color.fxfull vertex color
__Red.fxred channel = AO
_Green.fxgreen channel = wind weight
Blue.fxblue channel = hidden information

Wind weight modes (_Wind Weights)

ModeWhat it checks
Level 1.fx ~ Level 4.fxshared wind weight distribution per level
Ripple.fxripple (high-frequency leaf shake) weight

Other modes

ModePurpose
____Phong.fxPhong lighting model
___Blinn-Phong.fxBlinn-Phong lighting model
___Oren-Nayar.fxOren-Nayar diffuse model, good for rough surfaces
__Lambert.fxLambert diffuse
_Flat.fxflat shading; the best way to read a silhouette
_Snow.fxsnow accumulation preview
Billboard_Subsurface_Amount.fxbillboard subsurface amount
Depth.fxdepth map
Face_Normal_Check.fxface normal check, for finding flipped faces
Matcap.fxMatcap preview; great for reading form
Overdraw.fxoverdraw check. Brighter color means that area is drawn over more times — an important basis for optimizing leaf layout.
Texcoord.fxUV coordinate display
Texcoord_Seams.fxUV seam display
Texel_Density.fxtexel density check, for consistent texture precision

Common top-level modes

ModePurpose
_____Standard.fxstandard render (default)
____Scribed.fxscribed/outline render
___AO.fxAO only
__Albedo_Check.fxalbedo check
__Saturation_Check.fxsaturation check, for colors outside a sensible range
__Subsurface_Check.fxsubsurface check
_Lightmap.fxlightmap preview

The three checks worth making a habit

  1. Overdraw — a bright patch inside the crown means heavy leaf stacking there; it will flicker in wind and cost a great deal of performance.
  2. Texel_Density — abrupt color changes mean inconsistent texture precision between trunk and twigs, so the bark on the twigs will look blurry.
  3. Face_Normal_Check — black faces in the engine after export are usually flipped normals, and this shows them directly.

2.11 Collision 碰撞

2.11 Collision

植被在游戏里需要碰撞:玩家会撞到树干、子弹会被挡住、物理物体要能挂在树上。SpeedTree 提供多级碰撞方案。

参数组作用
Collision:Type碰撞体类型。
Collision:Collision是否为该节点生成碰撞。
Collision:Radius碰撞半径。通常比实际几何体略大一点,避免角色“贴脸”。
Leaf Collision:Type叶片碰撞类型。叶片一般不生成碰撞,但穿行灌木时可能需要。
Leaf Collision:Radius叶片碰撞半径。
Proxy Collision在 Tree 根节点上,生成整树的简化碰撞代理。

碰撞体的层级策略

不要给每个枝条都生成碰撞,那样面数会爆炸。合理做法:

层级碰撞策略
树干(Level 1)生成圆柱形碰撞,半径取树干实际半径的 1.0~1.1 倍
主枝(Level 2)只给粗大的主枝生成,或整体忽略
细枝 / 叶片不生成。用 Tree 根节点上的 Proxy 做整体包裹

专门的碰撞节点有两个:Proxy(碰撞代理)生成贴合树干的低面数碰撞体;Cage(碰撞笼)生成包住整棵树的简化外壳。两者的图标分别是 generator_proxy.tga 和 generator_cage.tga。

导出碰撞体

碰撞体不会自动出现在引擎里,需要在导出时勾选对应选项,或在 UE/Unity 的导入设置里启用“生成碰撞”。UE 的 SpeedTree 导入器会读取模型里标记的碰撞几何体。

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 groupPurpose
Collision:TypeCollision body type.
Collision:CollisionWhether to generate collision for this node.
Collision:RadiusCollision radius. Usually slightly larger than the actual geometry so characters do not end up right against the trunk.
Leaf Collision:TypeLeaf collision type. Leaves generally do not generate collision, but it can be needed when walking through shrubs.
Leaf Collision:RadiusLeaf collision radius.
Proxy CollisionOn 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:

LevelCollision 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 / leavesDo 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.

2.12 Season 季节

2.12 Season

SpeedTree 支持在同一棵树里定义四季表现,通过材质偏移(Material Offset)在季节之间切换。官方示例 samples/Learning/Seasons/Seasons.spm 与 samples/Learning/Material_Offset_Seasons/Material_Offset_Seasons.spm 完整演示了这套流程。

Season 参数

参数作用
Season:Time scale季节时间缩放。控制这个节点随季节变化的快慢。
Season:Start offset起始偏移。让不同节点在不同时间点开始变色。
Season:Descendant offset子级偏移。让子树比父级晚一点变化,做出“从外向内逐渐变色”的自然过渡。

季节贴图的命名约定

在官方示例 Material_Offset_Seasons/Leaves/ 目录里可以看到真实使用的贴图组:

EasternRedbud_front_1.png            基础(夏季)
EasternRedbud_front_1_spring.png     春季
EasternRedbud_front_1_summer.png     夏季
EasternRedbud_front_1_fall.png       秋季
EasternRedbud_front_1_winter.png     冬季
EasternRedbud_front_1_Opacity.png    不透明度
EasternRedbud_front_1_Normal.png     法线
EasternRedbud_front_1_Subsurface.png 次表面

同一套命名规则也用在 samples/Games/Palm/Clusters/Whole_Frond_Cluster/ 里(Palm_Cluster_2_Summer、_Winter 等)。

材质偏移的三种方式

示例目录里配套了三张示意图,正好对应三种变化方式:

文件含义
Uniform.png整棵树统一变色的效果
Variance.png带随机差异的变色效果(更自然)
Parent_Curve.png用父级曲线控制变色节奏

推荐用 Variance 方式:真实的秋天不是所有叶子同时变黄,而是有先有后。

做秋色的要点

  1. 先做一张干净的夏季叶片贴图作为基础。
  2. 再准备秋/冬版本的 Color 贴图,保持完全相同的 Alpha 通道。
  3. 用 Season:Descendant offset 让树冠外围先变色。
  4. 冬季可以把 Opacity 调低或直接隐藏叶片节点,露出枝干。

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

ParameterPurpose
Season:Time scaleSeason time scale. Controls how quickly this node changes with the season.
Season:Start offsetStart offset. Makes different nodes start changing color at different times.
Season:Descendant offsetDescendant 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:

FileMeaning
Uniform.pngThe whole tree changes color uniformly
Variance.pngColor change with random variation (more natural)
Parent_Curve.pngColor 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

  1. Start with a clean summer leaf texture as the base.
  2. Prepare autumn/winter versions of the Color map, keeping exactly the same alpha channel.
  3. Use Season:Descendant offset so the outer crown changes color first.
  4. For winter you can lower Opacity or simply hide the leaf nodes to reveal the branches.

2.13 Growth 生长动画

2.13 Growth Animation

Growth 让植物“长出来”。它不是简单地缩放,而是按枝条生长顺序逐级展开,做出真正像植物生长的动画。

参数作用
Growth:Timing生长时序。控制这个节点在整段动画的什么时间点开始生长。
Growth:Speed scale生长速度。不同节点可以有不同的速度。
Growth:Radius生长半径。枝条在生长过程中由细变粗。
Growth:Unfurl展开动画。叶片从卷曲状态展开的过程。
Growth:Noise生长噪波。让生长过程不是匀速的,更自然。
Growth:Smoothing平滑。让生长过渡更柔和。
Growth:Mapping生长映射。控制生长动画的数据如何分布。
Growth:Allow extension control允许扩展控制。

官方生长示例

文件演示内容
samples/Learning/Growth/Sapling_Growth.spm幼苗生长
samples/Learning/Growth/Trellis_Growth.spm沿棚架生长(配套 trellis.fbx 与 trellis_ao.png)

导出生长动画

export_presets/VFX/Growth.ini 是专门的生长动画导出预设。生长动画通常导出为 Alembic(.abc)格式,在 Houdini、Maya、Blender 里做后续渲染。注意:生长动画是逐帧烘焙的,文件会比较大,只对近景镜头使用。

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.

ParameterPurpose
Growth:TimingGrowth timing. Controls at what point in the overall animation this node starts growing.
Growth:Speed scaleGrowth speed. Different nodes can grow at different speeds.
Growth:RadiusGrowth radius. Branches thicken from thin to thick as they grow.
Growth:UnfurlUnfurl animation. The process of a leaf opening out from a curled state.
Growth:NoiseGrowth noise. Makes growth non-uniform, which looks more natural.
Growth:SmoothingSmoothing. Softens the growth transition.
Growth:MappingGrowth mapping. Controls how the growth animation data is distributed.
Growth:Allow extension controlAllow extension control.

Official growth samples

FileWhat it demonstrates
samples/Learning/Growth/Sapling_Growth.spmsapling growth
samples/Learning/Growth/Trellis_Growth.spmgrowth 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.

2.14 Skin 蒙皮

2.14 Skin

Skin(蒙皮)解决的是枝条交接处的几何问题。两根枝条相接时,如果只是简单地把两个圆柱插在一起,接缝处会出现穿插、破面或明显的硬边。Skin 负责让交接处平滑过渡。

参数作用
Skin:Type蒙皮类型。不同算法适用于不同粗细的枝条。
Skin:Radius蒙皮影响半径。半径越大,过渡区域越宽。
Skin:Smooth平滑程度。
Skin:Welding焊接。把交接处的顶点合并,消除裂缝。
Skin:Splits分叉处理。控制分叉处的几何生成方式。
Skin:Squash压扁。让交接处稍微压扁,更符合真实树干的形态。
Skin:Subdivision细分。在交接处增加几何密度。
Skin:Roll滚转。
Skin:Visibility可见性控制。
Skin:Intersection相交处理。控制几何体互相穿插时的表现。
Skin:Light seam reduction接缝光照弱化。消除接缝处的光照不连续,避免出现一条亮线或暗线。

Skin 是 Branch 独有的重参数组

在实测数据中,Branch 有 48 个 Skin 参数,而 Frond、Leaf Mesh 等叶片类节点完全没有这一组——因为只有木质结构才有枝条交接问题。

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.

ParameterPurpose
Skin:TypeSkin type. Different algorithms suit branches of different thickness.
Skin:RadiusSkin influence radius. The larger the radius, the wider the transition region.
Skin:SmoothDegree of smoothing.
Skin:WeldingWelding. Merges vertices at the junction to eliminate cracks.
Skin:SplitsSplit handling. Controls how geometry is generated at a fork.
Skin:SquashSquash. Flattens the junction slightly, which better matches real trunk form.
Skin:SubdivisionSubdivision. Adds geometry density at the junction.
Skin:RollRoll.
Skin:VisibilityVisibility control.
Skin:IntersectionIntersection handling. Controls the result when geometry passes through itself.
Skin:Light seam reductionLight 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 段。

还有两个更彻底的用法:

  • Generation:Shared:Active —— 按分辨率整批启用/关闭生成器。曲线值 >0.5 启用,<0.5 关闭。
  • Generation:Knockout:+Resolution —— 按分辨率增减节点剔除量。

工作习惯建议:建模时保持 High,模型保存为 Medium,做重度编辑时切到 Draft。

2.15.3 动态 LOD(游戏)

SpeedTree 的 LOD 是动态的——它随距离平滑变化,而不是在几个离散级别之间硬切。这正是它相比传统 LOD 的最大优势:不会看到明显的跳变。

LOD 序列:几何体逐级简化,最后用公告板LOD 0全精度100%LOD 1减细枝45%LOD 2再减 + 叶片放大18%LOD 3公告板2%屏幕占比越小 → 用越低的 LOD。LOD 曲线左端=最高精度 1.0,右端=最低 0.0。被 LOD 隐藏的枝条只是"隐形",其上的叶片仍然保留 —— 所以减枝不一定减叶。

开启方式(二选一):

  • Tree Window 工具栏 → LOD → 勾选 Dynamic LOD;
  • Tree 生成器属性 → Dynamic LOD 组 → 勾选 Enable。

开启后 LOD 指示器可编辑。默认是 Manual 模式,拖动箭头即可手动改变 LOD 并观察面数变化;切换到 Screen Area 模式后,相机动得越远树自动变得越简单。

过渡时发生了什么

这是理解 SpeedTree LOD 的关键。在过渡过程中,树的某些部分会被智能移除以降低复杂度,同时保持过渡无缝。做法是分析树体、找出被遮挡在内部的部分。一个将被移除的部分会先缩小到不可见,然后才在下一个阶段被彻底删除。

几何类型过渡行为
枝条先收缩到自己的脊线,然后消失。
叶片一部分叶片收缩消失,同时保留下来的叶片会长大,以维持树冠轮廓。

这带来一个很重要的推论:被 LOD 隐藏的枝条只是“隐形”,它上面的叶片仍然保留。所以减少枝条数量不等于减少叶片数量。反过来说,如果想让低 LOD 真正省面,必须同时处理叶片。

控制 LOD 的两个层面

全局层面——Tree 生成器的 Dynamic LOD 组里有一组 LOD 曲线,用来控制整段 LOD 过渡中各类几何体的削减幅度(枝条、叶片、装饰物等各有一条)。

单个生成器层面——每个生成器都有自己的 LOD 相关参数:

参数作用
Dynamic LOD:Weight重要。影响谁会被移除。枝条的移除基于它的尺寸和它在树中被“藏”得有多好;而 Weight 会影响这个计算——权重高的枝条会“赢过”权重低的枝条,从而留在树里。
Grow Scale控制保留下来的叶片长大多少。
Jumble给内部叶片的移除过程加入噪波。
Optimization让 Modeler 智能决定在哪里减段而保持形状。
Mesh Index网格 LOD:随该 LOD 曲线下降,逐渐换用更低质量的网格版本。

Grow Scale 与 Jumble 是保持轮廓的关键

叶片在 LOD 过渡中不只是“缩小消失”,留下来的叶片还会长大。如果不调 Grow Scale,树在远处会明显变瘦。而 Jumble 用于避免一个常见问题:树冠内部的叶片往往先被标记移除,结果可能把内部掏空、只剩一层壳。加一点 Jumble 的噪波能缓解这种“空壳感”。

网格 LOD 与 Mesh Anchors 的陷阱

在可以用网格的部分(叶片、羽叶等),可以在 LOD 变化时切换到低质量版本的网格。网格 LOD 级别在 Mesh Asset Bar 里设置,随 Mesh Index 属性上的 LOD 曲线下降,逐渐选用更低级别的网格。

陷阱:与减段类似,网格 LOD 也会造成可见跳变,需要小心避免。如果使用了 mesh anchors 来放置子节点,问题会更严重——如果 mesh anchors 随 LOD 移动,整棵树的外观可能发生剧烈变化。

公告板(Billboard)

启用公告板会在 LOD 序列末尾追加一级:用从多个视角拍摄的树照片拼成一张公告板图集,渲染时只显示朝向相机的那几个视角。这是植被性能的关键——一棵远处的树可能只占几十个三角面。

相关控制:Billboard start(从哪一级开始用公告板)、Billboard end、Screen area scale。导出时还有 Faces(面数)、Top down(俯视)、Top down height % 等选项。

参考实测的默认值:Unity 预设的 BillboardCount=8、BillboardTopDown=true、BillboardTopDownHeight=0.5;SpeedTree Runtime SDK 预设则是 BillboardCount=12。

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

ResolutionLevel of Detail (dynamic LOD)
Aimed atVFX / filmReal time / games
FormA few fixed quality tiers of the same modelSimplification that is smooth and continuous with distance
TiersHigh / Medium / Low / DraftContinuous transition, with no discrete level popping
ControlResolution curves (one per parameter)LOD curves (inside the LOD property group)
ExportVFX export outputs the selected resolutionGames 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.

LOD 序列:几何体逐级简化,最后用公告板LOD 0全精度100%LOD 1减细枝45%LOD 2再减 + 叶片放大18%LOD 3公告板2%屏幕占比越小 → 用越低的 LOD。LOD 曲线左端=最高精度 1.0,右端=最低 0.0。被 LOD 隐藏的枝条只是"隐形",其上的叶片仍然保留 —— 所以减枝不一定减叶。

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 typeTransition behavior
BranchesFirst shrink into their own spine, then disappear.
LeavesSome 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:

ParameterPurpose
Dynamic LOD:WeightImportant. 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 ScaleControls how much the surviving leaves grow.
JumbleAdds noise to the removal of interior leaves.
OptimizationLets the Modeler decide intelligently where to drop segments while preserving shape.
Mesh IndexMesh 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.

3.1 文件、模板与示例资源

3.1 Files, Templates and Sample Assets

文件格式

扩展名说明
.spmSpeedTree Modeler 的模型文件。本质是 gzip 压缩的 XML,记录了完整的节点树与所有参数值。
.sttSpeedTree Template,模板文件。同样压缩的 XML,保存的是“一组节点”而非完整模型。
.stmat材质文件。
.xmlSpeedTree XML 格式,未压缩的交换格式,便于程序化处理与版本对比。

一个实用技巧:把 .spm 当文本读

因为 .spm 是 gzip 压缩的 XML,你可以把它解压后直接用文本编辑器查看。所有参数名与取值都一目了然。这在排查“为什么两个文件表现不同”时极其有用——直接 diff 两个 XML 就能找到差异参数。本教程的所有参数名就是这样从官方示例中提取验证的。

内置模板(tree_templates/)

安装目录下的模板是上手最快的方式。v10.2.0 的真实模板列表:

Games 模板(面向游戏,面数与 LOD 已优化):

模板用途
Blank.spm空文件,只有一个 Tree 根节点。完全从零开始用这个。
Broadleaf.spm阔叶树。最通用的起点。
Conifer.spm针叶树(松、杉)。
Palm.spm棕榈。
Cluster.spm叶簇,用于拼装复杂树冠。
Grass.spm草。
Plant.spm小型植物。
Stump.spm树桩。
Vine.spm藤蔓。

VFX 模板(面向影视,几何更细、含手绘与造型控制):

模板用途
__Broadleaf.spm阔叶树(VFX 版)
_Conifer.spm / Pine.spm针叶树 / 松树
Palm.spm棕榈
__Bush.spm灌木
_Grass.spm / Grass Weeds.spm草 / 杂草
_Flower.spm花
_Plant.spm小型植物
_Stump.spm树桩
_Vine.spm藤蔓
Sapling.spm幼苗
Base_Split.spm分裂式根部
Base_Umbrella.spm伞状根部
Base_Weathered.spm风化根部
Hand_Drawn_Subd.spm手绘 + 细分
Shape_Controlled.spm形状控制

内置组合模板(templates/combined/)

这些是节点级的“零件模板”,可以直接拖进节点树。文件名前的下划线表示它在菜单里的缩进层级:

模板内容
Base.stt基础根盘
Reference.stt参考对象
Knot.stt / Decal.stt / Cavity.stt / Gash.stt / Lump.stt / Peeling_Bark.stt各种表面装饰:节疤、贴花、凹陷、伤口、隆起、剥落树皮
Roots.stt根系
Shell.stt外壳
Target.stt目标点
Mesh detail.stt网格细节
__Single.stt / __Bifurcating.stt / __Little.stt / __Big.stt / __Twigs.stt / _Tubes.stt各种枝条形态
___Alternating.stt / ___Opposite.stt / ___Whorled.stt / __Scattered.stt叶片排列方式:互生 / 对生 / 轮生 / 散生
___Trunk.stt / _____Trunks_Tube.stt / _____Trunks__Old.stt / _____Trunks__Split.stt / _____Trunks__Tall.stt / _____Trunks_Several.stt / _____Trunks_Hand-drawn.stt各种树干形态:管状、苍老、分裂、高瘦、多干、手绘
_______Cap_.stt / _______Fin.stt / _______Knot.stt / _______Vine.stt / _______Zone.stt封顶 / 鳍片 / 节疤 / 藤蔓 / 区域
________Frond.stt / _________Batched_leaf.stt / __________Branch.stt / __________Leaf.stt羽叶 / 批量叶片 / 枝 / 叶

官方学习示例(samples/Learning/)

这是最有价值的学习材料,每个目录都针对一个专门主题:

目录学习内容
Forces/力场系统:衰减、弹性、几何体力场、网格爬行
Growth/生长动画:幼苗生长、沿棚架生长
Seasons/四季变化
Material_Offset_Seasons/材质偏移做季节变化(含 Uniform / Variance / Parent_Curve 三种示意图)
Photogrammetry/摄影测量:把扫描件接入程序化树、缝合、网格细节
Custom_Spines/自定义脊线(含 LOD1/LOD2 网格)
Vines/藤蔓:手绘藤蔓与藤蔓模拟
Projector/投影器
References/参考图使用
Rules/规则脚本:Conifer_Simple_Rules.spm 与 Oak_Complex_Rules.spm
Subdivision_Surface/细分曲面

成品示例

文件说明
samples/VFX/Sample_Broadleaf/Broadleaf_Field.spm阔叶树丛(单株)
samples/VFX/Sample_Broadleaf/Broadleaf_Forest.spm阔叶树林(多株)
samples/VFX/Sample_Pine/Pine.spm松树(含树皮置换贴图示例)
samples/VFX/Sample_Palm/Palm.spm棕榈
samples/VFX/Sample_Mushroom/Mushroom.spm蘑菇(展示非树木类的做法)
samples/Games/Palm/Palm_Desktop.spm游戏版棕榈(桌面精度)
samples/Games/Conifer/针叶树素材库(球果、针叶簇、树皮贴图)

File formats

ExtensionNotes
.spmThe SpeedTree Modeler model file. Essentially gzip-compressed XML, recording the complete node tree and all parameter values.
.sttSpeedTree Template. Also compressed XML, but it stores “a set of nodes” rather than a complete model.
.stmatMaterial file.
.xmlSpeedTree 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):

TemplateUse
Blank.spmAn empty file containing only a Tree root node. Use this to start completely from scratch.
Broadleaf.spmBroadleaf tree. The most general starting point.
Conifer.spmConifer (pine, fir).
Palm.spmPalm.
Cluster.spmLeaf cluster, for assembling complex crowns.
Grass.spmGrass.
Plant.spmSmall plants.
Stump.spmTree stump.
Vine.spmVine.

VFX templates (film-oriented, finer geometry, with hand-drawn and shape controls):

TemplateUse
__Broadleaf.spmbroadleaf tree (VFX version)
_Conifer.spm / Pine.spmconifer / pine
Palm.spmpalm
__Bush.spmshrub
_Grass.spm / Grass Weeds.spmgrass / weeds
_Flower.spmflower
_Plant.spmsmall plant
_Stump.spmstump
_Vine.spmvine
Sapling.spmsapling
Base_Split.spmsplit root base
Base_Umbrella.spmumbrella root base
Base_Weathered.spmweathered root base
Hand_Drawn_Subd.spmhand drawn + subdivision
Shape_Controlled.spmshape 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:

TemplateContent
Base.sttbasic root flare
Reference.sttreference object
Knot.stt / Decal.stt / Cavity.stt / Gash.stt / Lump.stt / Peeling_Bark.sttSurface decorations of various kinds: knot, decal, cavity, gash, lump, peeling bark
Roots.sttroots
Shell.sttshell
Target.stttarget point
Mesh detail.sttmesh detail
__Single.stt / __Bifurcating.stt / __Little.stt / __Big.stt / __Twigs.stt / _Tubes.sttbranch forms of various kinds
___Alternating.stt / ___Opposite.stt / ___Whorled.stt / __Scattered.sttleaf arrangements: alternate / opposite / whorled / scattered
___Trunk.stt / _____Trunks_Tube.stt / _____Trunks__Old.stt / _____Trunks__Split.stt / _____Trunks__Tall.stt / _____Trunks_Several.stt / _____Trunks_Hand-drawn.stttrunk forms of various kinds: tubular, old, split, tall, multi-trunk, hand-drawn
_______Cap_.stt / _______Fin.stt / _______Knot.stt / _______Vine.stt / _______Zone.sttcap / fin / knot / vine / zone
________Frond.stt / _________Batched_leaf.stt / __________Branch.stt / __________Leaf.sttfrond / batched leaf / branch / leaf

Official learning samples (samples/Learning/)

This is the most valuable learning material of all; each directory targets one specific topic:

DirectoryWhat to learn
Forces/The force system: attenuation, bounce, geometry force, mesh crawling
Growth/Growth animation: sapling growth, growth along a trellis
Seasons/Seasonal change
Material_Offset_Seasons/Material offset for seasonal change (with the three diagrams Uniform / Variance / Parent_Curve)
Photogrammetry/Photogrammetry: bringing scans into a procedural tree, stitching, mesh detail
Custom_Spines/Custom spines (with LOD1/LOD2 meshes)
Vines/Vines: hand-drawn vines and vine simulation
Projector/Projector
References/Using reference images
Rules/Rule scripts: Conifer_Simple_Rules.spm and Oak_Complex_Rules.spm
Subdivision_Surface/Subdivision surface

Finished samples

FileNotes
samples/VFX/Sample_Broadleaf/Broadleaf_Field.spmBroadleaf grove (single tree)
samples/VFX/Sample_Broadleaf/Broadleaf_Forest.spmBroadleaf forest (multiple trees)
samples/VFX/Sample_Pine/Pine.spmPine (with a bark displacement map example)
samples/VFX/Sample_Palm/Palm.spmPalm
samples/VFX/Sample_Mushroom/Mushroom.spmMushroom (showing a non-tree approach)
samples/Games/Palm/Palm_Desktop.spmGame palm (desktop precision)
samples/Games/Conifer/Conifer asset library (cones, needle clusters, bark textures)

3.2 标准工作流程

3.2 The Standard Workflow

植被制作八阶段定目标用途 / 距离面数预算选起点模板 or空文件定比例真实高度单位确认搭骨架先只看剪影平光模式加叶片单片 → 一簇Overdraw 检查表面细节材质 / UV置换 / 装饰风与 LOD权重递增LOD + 碰撞导出验证引擎实测LOD 切换前三步决定方向,做错要重来;中间三步是主体工作;后两步决定能不能用。最常见的时间浪费:骨架还没对就急着加叶片。
一个完成度较高的 SpeedTree 模型在视图区里的样子(官方示例 Broadleaf_Field.spm 的视口部分)。注意树冠的疏密变化、枝条的自然弯曲,以及底部主干的裸露

一个完整的植被制作流程大致是八个阶段。无论做树、灌木还是草,这个骨架都适用。

阶段一:定目标

动手前先想清楚三件事,它们决定了后面所有参数的方向:

问题影响
用途:游戏还是影视?游戏需要 LOD、碰撞、严格的面数预算;影视可以上百万面,用 Alembic 输出。
观察距离:近景特写还是远景填充?近景要置换、要叶片网格;远景用卡片叶片和公告板就够。
面数预算:单株多少面?移动端单株 2k–10k;PC 游戏 15k–60k;影视不限。这个数字要在建模时就守着。

阶段二:选起点

起点适用
tree_templates/Games/Blank.spm完全从零,最理解原理,但最慢。
对应物种模板(Broadleaf / Conifer / Palm…)推荐。已有合理的节点结构,改参数即可,效率最高。
打开官方成品示例另存学习时用。能看到成熟项目的参数配置。

阶段三:定比例

SpeedTree 里 1 单位 = 1 米(可通过 Units 设置调整)。一定要先确定树的真实高度,否则后面所有参数都是凭感觉调,导出到引擎里会大小失调。

植物真实高度参考
草0.1 – 0.6 m
灌木0.8 – 3 m
小乔木 / 幼苗3 – 6 m
阔叶乔木10 – 25 m
针叶乔木15 – 40 m
棕榈5 – 20 m

SpeedTree 在视图里有一个人形高度指示器,用来快速校对比例。官方文档给出的等价值是:

单位人形指示器的数值
米 (m)1.8
厘米 (cm)182
英尺 (feet)6
英寸 (inches)72
码 (yards)2

把指示器设成上面对应的值,它就代表一个 1.8 米高的人。用它来对照树高,比凭感觉估要可靠得多。

阶段四:搭骨架

先只做枝干,关掉叶片。这一步的目标是让“光秃秃的树”看起来就合理:

  1. 调树干 Branch 的 Spine:Length、Spine:Shape,让它有自然的锥度和弯曲。
  2. 调 Generation:Mode 与数量,让主枝分布合理。
  3. 加 Forces:Gnarl 打破规整。
  4. 逐级往下加子 Branch,每一级都确认形态合理后再加下一级。

关键习惯:先看剪影

切到 Other/_Flat.fx 平光渲染模式,模型会变成纯色剪影。如果剪影看起来就像那棵树,骨架就对了;如果剪影怪,加再多叶子也救不回来。

阶段五:加叶片

  1. 在末梢枝下加 Leaf Mesh / Frond。
  2. 先只放一片叶子,把尺寸、朝向、对折角度调好。
  3. 再调数量与分布曲线,让它成为一簇。
  4. 用 Overdraw 渲染模式检查有没有严重堆叠。

阶段六:表面细节

  • 材质:指定 Color / Normal / Opacity / Subsurface 等贴图。
  • UV:调 UV Mapping:U / V 让树皮纹理比例正确,用 Texel_Density.fx 检查。
  • 置换:加 Displacement:Amount,近景才开。
  • 装饰:加 Knot(节疤)、Decal(苔藓)增加故事性。

阶段七:风与 LOD

  1. 按层级递增设置 Wind:Weight,用 _Wind Weights 模式检查。
  2. 在 Tree 根节点设置 Level of Detail:Count,逐级降面。
  3. 设置 Billboard start,让远处用公告板。
  4. 加碰撞(Collision:Radius 或 Proxy)。

阶段八:导出与验证

  1. 选对应引擎的导出预设。
  2. 导出后在引擎里实际观察:LOD 切换是否跳变、风动是否自然、贴图有没有丢。
  3. 用引擎的性能分析工具确认 draw call 与面数符合预期。
植被制作八阶段定目标用途 / 距离面数预算选起点模板 or空文件定比例真实高度单位确认搭骨架先只看剪影平光模式加叶片单片 → 一簇Overdraw 检查表面细节材质 / UV置换 / 装饰风与 LOD权重递增LOD + 碰撞导出验证引擎实测LOD 切换前三步决定方向,做错要重来;中间三步是主体工作;后两步决定能不能用。最常见的时间浪费:骨架还没对就急着加叶片。
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:

QuestionImpact
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 pointWhen to use it
tree_templates/Games/Blank.spmCompletely 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 nameFor 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.

PlantReal height reference
Grass0.1 – 0.6 m
Shrub0.8 – 3 m
Small tree / sapling3 – 6 m
Broadleaf tree10 – 25 m
Conifer15 – 40 m
Palm5 – 20 m

SpeedTree has a human-height indicator in the viewport for checking scale quickly. The equivalent values given in the official documentation are:

UnitValue for the human figure indicator
Meters (m)1.8
Centimeters (cm)182
Feet6
Inches72
Yards2

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:

  1. Adjust the trunk Branch's Spine:Length and Spine:Shape so it has natural taper and curvature.
  2. Adjust Generation:Mode and the count so the primary branches are distributed sensibly.
  3. Add Forces:Gnarl to break the regularity.
  4. 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

  1. Add a Leaf Mesh / Frond under the tip twigs.
  2. Place just one leaf first and get its size, orientation and fold angle right.
  3. Then adjust the count and the distribution curve to turn it into a cluster.
  4. 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

  1. Set Wind:Weight increasing with level, and check it with the _Wind Weights modes.
  2. Set Level of Detail:Count on the Tree root node and reduce polygons level by level.
  3. Set Billboard start so distance uses billboards.
  4. Add collision (Collision:Radius or a Proxy).

Stage 8: Export and verify

  1. Choose the export preset for your engine.
  2. After export, look at it in the engine: does the LOD switch pop, does the wind look natural, are any textures missing.
  3. Use the engine's profiling tools to confirm the draw calls and polygon counts match expectations.

3.3 导出与引擎集成

3.3 Export and Engine Integration

SpeedTree 内置了针对不同目标的导出预设,位于安装目录 export_presets/。v10.2.0 的真实预设列表:

游戏引擎预设(Games/)

预设目标说明
__UnrealEngine (ST).iniUnreal Engine输出 UE 原生的 SpeedTree 格式,配合 UE 的 SpeedTree 导入器使用,风力与 LOD 由引擎运行时驱动。
__UnrealEngine (ST9).iniUnreal Engine(ST9 兼容)针对旧版 UE 的 SpeedTree 9 格式兼容。
___Unity.iniUnity输出 Unity 的 SpeedTree 资源。
__Unity (one draw call).iniUnity(单次绘制)合并为一次 draw call,适合大量重复植被,性能最优但灵活性降低。
_SpeedTree Runtime SDK.iniSpeedTree 运行时 SDK给自研引擎使用,需要自行集成 SDK。
Generic FBX.ini通用 FBX不带引擎特定数据的通用格式,用于导入其它 DCC 工具。

影视与 DCC 预设(VFX/)

预设目标
____Maya.iniAutodesk Maya
___3D Studio MAX.ini3ds Max
___Houdini.iniHoudini
__Blender.iniBlender
__Cinema4D.iniCinema 4D
__FBX.ini通用 FBX
_Alembic.iniAlembic(.abc)。影视标准,支持生长动画与风动的逐帧烘焙。
_USD.iniUniversal Scene Description。现代影视管线标准。
Growth.ini生长动画专用导出
Wind.ini风力动画专用导出

安装目录 scripts/ 下还提供了各 DCC 的导入脚本:

scripts/3ds Max/
scripts/Blender/
scripts/Cinema4D/
scripts/Houdini/
scripts/Maya/

用这些脚本导入可以保留风力与 LOD 信息,比直接导入 FBX 效果好。

导出前检查清单

检查项怎么查
面数是否在预算内看视图区统计的 TOTAL 数字
叶片有没有严重堆叠Overdraw.fx 渲染模式
贴图精度是否均匀Texel_Density.fx 渲染模式
有没有翻转的面Face_Normal_Check.fx 渲染模式
叶片 Alpha 是否干净_Material/____Opacity.fx 渲染模式
风力权重是否合理_Wind Weights/Level 1~4.fx
LOD 切换是否跳变用 LOD 按钮逐级切换观察
材质贴图路径是否正确确认没有丢贴图警告

面数预算参考

重要说明:官方没有给出任何面数预算。

SpeedTree 官方文档里不存在三角面预算、图集尺寸或 LOD 级数的推荐值。下面这张表来自第三方从业者的公开经验总结,只能作为量级参考,不是标准。实际预算必须由你的项目类型、目标平台、同屏植被数量和美术风格共同决定。

资产类型LOD0 面数LOD 级数
英雄树(近景主角)8,000 – 15,0004 级,最后一级约 200 面 + 公告板
背景树3,000 – 6,0003 级
灌木500 – 2,0002 级 + 公告板
草(每丛)30 – 80单级(见草案例的硬性约束)

同一批第三方资料还给出了剔除距离的量级参考:大树约 8,000–15,000 单位、灌木 3,000–5,000、草 1,500–3,000;并且建议剔除的起始距离取结束距离的约 80%,配合引擎的 Dithered LOD Transition 来消除跳变。

作为对照,本机官方示例 Broadleaf_Field.spm 的总面数是 3,032,522,属于影视级密度,不能直接用于游戏。

公告板的数量

官方文档提到:一棵树通常生成 6 到 10 张公告板。这与实测的预设一致——Unity 预设用 8 张,SpeedTree Runtime SDK 预设用 12 张。公告板张数越多,从各个角度看都越完整,但图集也越大。

LOD 与 Billboard 的关系

最后一两级 LOD 通常是公告板(Billboard)——把整棵树渲染成几张交叉的平面,用贴图代替几何体。这是植被性能的关键:一棵远处的树可能只占几十个三角面。Level of Detail:Billboard start 决定从哪一级开始用公告板,这个值设得太早会让树在中等距离就“变扁”,设得太晚则性能吃紧。

SpeedTree ships export presets for different targets, in the install directory export_presets/. The real preset list in v10.2.0:

Game engine presets (Games/)

PresetTargetNotes
__UnrealEngine (ST).iniUnreal EngineOutputs UE's native SpeedTree format, used together with UE's SpeedTree importer; wind and LOD are driven by the engine runtime.
__UnrealEngine (ST9).iniUnreal Engine (ST9 compatible)SpeedTree 9 format compatibility for older UE versions.
___Unity.iniUnityOutputs a Unity SpeedTree asset.
__Unity (one draw call).iniUnity (single draw)Merges into a single draw call, ideal for large amounts of repeated vegetation; the best performance but less flexibility.
_SpeedTree Runtime SDK.iniSpeedTree Runtime SDKFor in-house engines; you integrate the SDK yourself.
Generic FBX.iniGeneric FBXA generic format without engine-specific data, for importing into other DCC tools.

Film and DCC presets (VFX/)

PresetTarget
____Maya.iniAutodesk Maya
___3D Studio MAX.ini3ds Max
___Houdini.iniHoudini
__Blender.iniBlender
__Cinema4D.iniCinema 4D
__FBX.iniGeneric FBX
_Alembic.iniAlembic (.abc). The film standard, supporting frame-by-frame baking of growth animation and wind.
_USD.iniUniversal Scene Description. The modern film pipeline standard.
Growth.iniDedicated growth animation export
Wind.iniDedicated wind animation export

The install directory scripts/ also provides import scripts for the various DCCs:

scripts/3ds Max/
scripts/Blender/
scripts/Cinema4D/
scripts/Houdini/
scripts/Maya/

Importing with these scripts preserves the wind and LOD information, which works better than importing the FBX directly.

Pre-export checklist

CheckHow to check it
Are the polygons within budgetread the TOTAL number in the viewport statistics
Is there serious leaf stackingthe Overdraw.fx render mode
Is texture precision consistentthe Texel_Density.fx render mode
Are there any flipped facesthe Face_Normal_Check.fx render mode
Is the leaf alpha cleanthe _Material/____Opacity.fx render mode
Are the wind weights sensible_Wind Weights/Level 1~4.fx
Does the LOD switch popstep through the levels with the LOD button
Are the material texture paths correctconfirm 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 typeLOD0 polygonsLOD levels
Hero tree (close-up protagonist)8,000 – 15,0004 levels, last level about 200 polygons + billboard
Background tree3,000 – 6,0003 levels
Shrub500 – 2,0002 levels + billboard
Grass (per clump)30 – 80single 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

手绘工作流

程序化生成适合做“整体合理”的树,但主角树的关键枝条往往需要更强的造型控制。这时用手绘模式:

  1. 打开工具栏的 Freehand。
  2. 添加一个 Spine 节点,在视图里拖出枝条走向。
  3. 用 Hand Drawn:Resample 重采样,让手绘曲线平滑。
  4. 把 Branch 或 Leaf Mesh 挂到 Spine 下,沿手绘路径生长。
  5. 用 Convert generator to hand drawn 也可以把已有的程序化枝条转成手绘,再做修改。

相关模板:internal_templates/hand_drawn_trunk.stt、hand_drawn_branch.stt、hand_drawn_subd_branch.stt、hand_drawn_target.stt。

官方示例:samples/Learning/Vines/Hand_Drawn_Vines.spm(手绘藤蔓)、Vines_Simulation.spm(藤蔓模拟)、samples/Learning/Custom_Spines/Custom_Spines.spm(自定义脊线)。

手绘的代价

手绘部分不再受参数控制,也就失去了“改一个种子变一棵树”的能力。所以手绘应该只用在关键枝条上(通常不超过全树 10%~20%),其余仍然交给程序化。手绘编辑记录在节点上,可以随时用 Clear freehand edits 清除。

摄影测量工作流

摄影测量(Photogrammetry)是用照片扫描真实树木得到高精度模型的技术。SpeedTree 的价值在于:把扫描件接入程序化系统,让扫描树也能有 LOD、风动和无限变体。

把扫描件接入程序化树(摄影测量流程)1导入扫描网格Mesh (BranchMesh)obj / fbx2标记对接位置Target用 gizmo 摆位3转换为枝干Mesh converterConversion-Tools4缝合过渡StitchBand / Wrap / Cut / Bake5叠加细节Mesh detail / Decal节疤、苔藓示例文件:samples/Learning/Photogrammetry/Oak_Photogrammetry/ 下的 Target → Convert_To_Trunk → Stitch 三个文件依次演示。核心价值:让扫描件也拥有 LOD、风力与无限变体能力。

官方在 samples/Learning/Photogrammetry/ 下提供了完整的三套示例:

1. Oak_Photogrammetry/——把扫描的橡树接入程序化系统

文件步骤
Target.spm第一步:用 Target 标记对接位置
Convert_To_Trunk.spm第二步:把扫描网格转换成树干结构
Oak_Photogrammetry_Convert_In_Place.spm原地转换,保留原始网格位置
Stitch.spm第三步:把扫描段与程序化枝条缝合

配套的 Mesh/ 目录里有扫描网格(Sample_Photogrammetry_Trunk.obj 与 .fbx),Converted/ 目录里有转换后的全套贴图(AO、Color、Gloss、Height、Metallic、Normal、Specular、Subsurface、VertexDisplacement 等),Stitch/ 目录里是缝合段的贴图。

2. Decal_MeshDetail/——用贴花与网格细节补充表面

配套 Knot_01、Knot_02(节疤)、LongDetail_01(长条细节)三组贴图,演示如何用 Decal 与 Mesh Detail 在扫描件上叠加细节。

3. All_Mesh_Tree_Example/——全网格树的例子

三种节点转换工具

工具模板作用
Convert to Trunkconvert_to_trunk.stt / convert_to_trunk_with_base.stt把网格骨架化成可生长的树干
Convert to Branchconvert_to_branch.stt把网格转成枝条
Convert in Placeconvert_in_place.stt / convert_in_place_with_base.stt原地转换,保持网格原始位置

Hand-drawn workflow

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:

  1. Turn on Freehand on the toolbar.
  2. Add a Spine node and drag the branch path in the viewport.
  3. Use Hand Drawn:Resample to resample and smooth the hand-drawn curve.
  4. Attach a Branch or Leaf Mesh under the Spine so it grows along the hand-drawn path.
  5. 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.

Official samples: samples/Learning/Vines/Hand_Drawn_Vines.spm (hand-drawn vines), Vines_Simulation.spm (vine simulation), samples/Learning/Custom_Spines/Custom_Spines.spm (custom spines).

The cost of hand drawing

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.

把扫描件接入程序化树(摄影测量流程)1导入扫描网格Mesh (BranchMesh)obj / fbx2标记对接位置Target用 gizmo 摆位3转换为枝干Mesh converterConversion-Tools4缝合过渡StitchBand / Wrap / Cut / Bake5叠加细节Mesh detail / Decal节疤、苔藓示例文件:samples/Learning/Photogrammetry/Oak_Photogrammetry/ 下的 Target → Convert_To_Trunk → Stitch 三个文件依次演示。核心价值:让扫描件也拥有 LOD、风力与无限变体能力。

The official installation provides three complete examples under samples/Learning/Photogrammetry/:

1. Oak_Photogrammetry/ — bringing a scanned oak into the procedural system

FileStep
Target.spmStep one: use a Target to mark the attachment point
Convert_To_Trunk.spmStep two: convert the scanned mesh into a trunk structure
Oak_Photogrammetry_Convert_In_Place.spmconvert in place, preserving the original mesh position
Stitch.spmStep 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

The three node conversion tools

ToolTemplatePurpose
Convert to Trunkconvert_to_trunk.stt / convert_to_trunk_with_base.sttskeletonize a mesh into a growable trunk
Convert to Branchconvert_to_branch.sttconvert a mesh into a branch
Convert in Placeconvert_in_place.stt / convert_in_place_with_base.sttconvert in place, preserving the mesh's original position

3.5 规则脚本与投影器

3.5 Rule Scripts and the Projector

规则脚本(Rules)

SpeedTree 支持用 Lua 脚本控制生成规则。安装目录里有两处相关资源:

  • app_data/RuleScriptCommon.lua —— 规则脚本的公共函数库,提供 math.clamp、math.saturate、math.lerp、math.round 等工具函数。
  • samples/Learning/Rules/ —— 两个示例:Conifer_Simple_Rules.spm(针叶树简单规则)与 Oak_Complex_Rules.spm(橡树复杂规则)。

规则脚本适合做“参数之间的联动”:例如让枝条粗细自动跟随长度变化,而不是分别设两个参数。对普通用户来说不是必需,但做复杂物种时能大幅减少手工调参。

投影器(Projector)

samples/Learning/Projector/Projector.spm 演示了投影器功能。投影器可以把一张贴图从某个方向投影到模型表面,用于:

  • 把预先绘制好的树皮细节(如整棵树的纹理)投影上去,避免 UV 接缝。
  • 投射光照信息或遮罩。
  • 做快速的概念验证。

参考图(References)

samples/Learning/References/References.spm 演示了参考图的使用。做法是:

  1. 把要模仿的树的照片导入为参考对象。
  2. 调整参考图的比例,让它与场景单位一致。
  3. 一边调参数一边对照剪影。

这是提高写实度最有效的手段之一——不要让软件里的树和真实照片脱节。

细分曲面(Subdivision Surface)

samples/Learning/Subdivision_Surface/Subdivision_Surface.spm 演示细分。配合 Subdivision 节点或 Skin:Subdivision 参数,可以把低模平滑成高模。注意每加一级细分,面数约翻四倍。

Rule scripts (Rules)

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:

  1. Import a photograph of the tree you want to imitate as a reference object.
  2. Scale the reference image so that it matches the scene units.
  3. 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.

共收录 25 个生成器,按官方文档分为主生成器、装饰生成器、摄影测量生成器与旧版生成器四类。节点名称与参数名均取自 SpeedTree Modeler 10 官方文档,并与本机 v10.2.0 的实际文件逐项核对。

支持精确匹配节点名与别名,也支持按作用、目的、参数名模糊匹配。结果按相关度排序。

分类说明

  • 主生成器 构成植物主体的生成器。每个模型必须有且只有一个 Tree。
  • 装饰生成器 在已有几何体上叠加外观特征的生成器(官方称 Decorators)。
  • 摄影测量生成器 把扫描的三维资产接入模型并转成程序化几何体。
  • 旧版生成器 SpeedTree 5~7 的生成器。仍可加载旧模型并升级,但不保证未来版本保留,新模型不要使用。

Tree树(根生成器)

别名: 根节点、根生成器、Tree Generator、总节点、root、master

主生成器
作用
整棵模型的根容器与全局设置中心;每个模型有且只有一个
功能
Tree 生成器是节点树的最顶层,不能被删除或移动。它本身不产生几何体,而是存放整棵模型级别的设置:LOD 级别、叶片碰撞、碰撞代理、细分、顶点色计算开关、随机种子、导出与编译选项等。
使用方法
新建文件时自动创建。做游戏资产时,LOD 数量、碰撞代理、顶点色计算标志都在这一层设置。注意:顶点色只有在 Tree 上启用 Vertex Colors 计算标志后才会被计算。
主要参数 (15 项)
  • Level of Detail:CountLOD 级别数量。游戏通常 3~5 级。
  • Level of Detail:Enabled该 LOD 级别是否启用。
  • Level of Detail:Length segments该级别的长度分段数。
  • Level of Detail:Radial segments该级别的圆周分段数。
  • Level of Detail:Billboard start从哪一级开始使用公告板。
  • Level of Detail:Branch volume threshold枝条体积阈值。体积小于该值的枝条在低 LOD 下被剔除,是减面最有效的参数。
  • Dynamic LOD:Weight动态 LOD 权重。决定该生成器在简化时谁先被削减。
  • Leaf Collision:Type叶片碰撞类型。
  • Collision:Type碰撞体类型。
  • Collision:Radius碰撞半径。通常比实际几何体略大,避免角色贴脸。
  • Vertex Color:Red顶点色红通道。SpeedTree 约定用于存储环境光遮蔽 AO。
  • Vertex Color:Green顶点色绿通道。SpeedTree 约定用于存储风力权重。
  • Vertex Color:Blue顶点色蓝通道。SpeedTree 约定用于存储隐藏 / 剔除信息。
  • Wind:Apply是否应用风效。
  • Random Seeds:Generation生成随机种子。改这个值会得到形态完全不同的另一棵树,是批量出变体的总开关。

Branch枝干生成器

别名: 枝条、树枝、trunk、树干、主枝、分枝、细枝、根系、roots、bough、limb

主生成器
作用
生成树干、主枝、侧枝、细枝、根系等一切木质结构;使用频率最高的生成器
功能
Branch 负责生成树干、枝条与根系,也可以用于手绘枝条。它通过「父级 + 生成规则」递归产生整棵树的骨架,同时集成了脊线(Spine)、分段(Segments)、蒙皮(Skin)、力场(Forces)、置换(Displacement)、风力(Wind)等木质结构所需的全部参数组。
使用方法
1) 选中父级 → Add → Branch;2) 在 Generation:Mode 里选分布模式;3) 用 Generation:Frequency 曲线控制沿父级的疏密;4) 用 Spine:Length 与 Spine:Shape 控制长度和弯曲;5) 用 Forces:Gnarl 打破规整;6) 用 Segments:Length / Radial 控制面数。做树干时 Spine:Length 调大、子节点数量少;做末梢细枝时数量多、长度短。
主要参数 (34 项)
  • Generation:Mode生成模式。决定子节点用哪套算法分布:Classic(旧版,勿用)、Proportional、Proportional steps、Absolute、Absolute steps、Phyllotaxy、Interval、Bifurcation、Flood、Parent。
  • Generation:Frequency父级曲线。控制沿父级长度方向子节点出现概率的分布,X=父级位置 0~1,Y=权重。默认恒为 1 即全长均匀。
  • Generation:First起始边界。父级上允许生成节点的最低位置。
  • Generation:Last结束边界。父级上允许生成节点的最高位置。
  • Generation:Proportional:Number每个父级上生成的子节点数量,与父级尺寸成比例。
  • Generation:Absolute:Number每个父级上生成的精确子节点数量。不随父级尺寸变化,慎用。
  • Generation:Phyllotaxy:Nodes:Spiral螺旋角。经典叶序使用黄金角 137.5°。
  • Generation:Bifurcation:Threshold分叉阈值。控制父级在何处被视为转折点。
  • Generation:Interval:Count间隔模式生成的节点数量。
  • Generation:Sink下沉。整体调整节点起点,使其陷入或远离父级表面。常用来把树干略微压到地面以下,便于场景摆放。
  • Generation:Pruning修剪曲线。每个生成器仅一条。曲线值低于 0.5 的位置,其节点被整批移除。
  • Generation:Size scalar尺寸缩放。缩放节点及其全部子级的尺寸。
  • Generation:Extend parent:Type延伸父级类型。在父级枝条末端额外生成节点,可选 None / Any / Split 1 / Split 2 / Skinny / Fat / Breaks only / Bottom。父级必须是 Branch,子级只能是 Branch、Cap、Leaf mesh 或 Batched leaf。
  • Spine:Length脊线长度。相对父级长度的比例。
  • Spine:Shape形状曲线。X=沿脊线 0~1,Y=横向偏移量。让枝条自然弯曲的关键参数。
  • Spine:Droop下垂。模拟重力让枝条末端下垂。
  • Spine:Jink折角。制造不规则的硬转折,打破过于顺滑的假感。
  • Spine:Noise噪波。给脊线叠加随机扰动。
  • Segments:Length沿长度方向的分段数。段数不足时弯曲会变成折线。
  • Segments:Radial横截面圆周分段数。低于 5 会明显看出多边形棱角。
  • Forces:Allow总开关。启用后,所有被勾选的力场才会作用于本生成器。
  • Forces:Gnarl扭曲力。让枝条产生不规则扭动,是消除「假感」最有效的参数。
  • Forces:Twist扭转力。沿枝条自身轴旋转。
  • Forces:Direction方向力。把枝条推向固定方向,可做常年单向风形成的旗形树冠。
  • Skin:Type蒙皮类型。
  • Skin:Radius蒙皮半径,直接影响枝干粗细。
  • Skin:Smooth平滑程度。
  • Skin:Welding焊接。合并交接处顶点,消除裂缝。
  • Displacement:Amount置换总强度。
  • Displacement:Flares根部扩张(根盘)。让树干入土处自然变粗。
  • Wind:Weight风力权重。0=完全不动,1=完全随风摆。应按层级递增。
  • UV Mapping:UU 方向平铺次数,控制纹理绕圆周重复几次。
  • UV Mapping:VV 方向平铺次数,控制纹理沿长度重复几次。
  • Random Seeds:Generation生成随机种子。改这个值会得到形态完全不同的另一棵树,是批量出变体的总开关。

Leaf Mesh叶片网格生成器

别名: 叶片网格、网格叶片、叶片、leaf、leaves、叶子、叶簇、cluster

主生成器
作用
生成任意类型的叶片几何体或叶簇,是树冠观感的主要来源
功能
Leaf Mesh 是「一片叶子」或「一簇叶子」的生成器,既可以用带 Alpha 的平面卡片,也可以直接用建模好的叶片网格。它与 Batched leaf 一起,是季节过渡(season transition)的主要实现机制。叶片带有朝向、翻转、卷曲、颤动等一整套控制。
使用方法
挂在末梢细枝下。先在 Leaves 组设 Size X/Y 定义尺寸(必须与贴图长宽比一致),再设 Rotation / Bend / Fold / Twist 让它有立体感,最后用 Generation:Frequency 曲线控制沿枝条的分布。务必开启 Material:Subsurface Amount,否则叶片会像塑料片。
主要参数 (26 项)
  • Leaves:Type叶片类型。
  • Leaves:Size X叶片 X 方向尺寸。应与贴图长宽比一致,否则会拉伸。
  • Leaves:Size Y叶片 Y 方向尺寸。
  • Leaves:Scale叶片缩放。
  • Leaves:Rotation叶片旋转。配合方差让每片叶子朝向不同。
  • Leaves:Bend弯曲。沿叶脉弯折。
  • Leaves:Fold对折角度。让平面卡片沿中轴对折,是给卡片叶子立体感最省事的方法。
  • Leaves:Twist扭转。叶片绕自身长轴旋转。
  • Leaves:Flutter颤动。叶片在风中的额外抖动。
  • Leaves:Align朝向对齐。
  • Leaves:Spread散布。叶片离枝条轴线的距离。
  • Leaves:Distribution分布曲线。控制叶片沿枝条的疏密。
  • Generation:Mode生成模式。决定子节点用哪套算法分布:Classic(旧版,勿用)、Proportional、Proportional steps、Absolute、Absolute steps、Phyllotaxy、Interval、Bifurcation、Flood、Parent。
  • Generation:Frequency父级曲线。控制沿父级长度方向子节点出现概率的分布,X=父级位置 0~1,Y=权重。默认恒为 1 即全长均匀。
  • Generation:Proportional:Number每个父级上生成的子节点数量,与父级尺寸成比例。
  • Generation:Mesh alignment网格对齐。仅对 Leaf mesh / Batched leaf 及点击放置产生的节点有效,且父级必须是网格。可选 None / Tangent / Binormal / Parent X,Y,Z / World X,Y,Z。
  • Material:Material指定材质资源。
  • Material:Color基础色 / 反照率贴图。
  • Material:Opacity不透明度贴图。白色不透明、黑色透明,叶片靠它抠出形状。
  • Material:Normal法线贴图,切线空间。控制表面凹凸的光照表现。
  • Material:Subsurface次表面散射颜色。叶片背光透出的暖色。
  • Material:Subsurface Amount次表面散射强度。让叶片透光的关键参数,为 0 时叶子像塑料片。
  • Wind:Weight风力权重。0=完全不动,1=完全随风摆。应按层级递增。
  • Vertex Color:Green顶点色绿通道。SpeedTree 约定用于存储风力权重。
  • Collision:Radius碰撞半径。通常比实际几何体略大,避免角色贴脸。
  • Random Seeds:Generation生成随机种子。改这个值会得到形态完全不同的另一棵树,是批量出变体的总开关。

Batched Leaf批量叶片生成器

别名: 批量叶片、叶片批处理、batched、batch、省面叶片、高性能叶片

主生成器
作用
以优化方式大量铺叶片,比叶片网格快几个数量级,适合叶片成千上万的场景
功能
Batched Leaf 生成叶片的方式与 Leaf Mesh 几乎相同,但结果无法进行节点编辑——只能作为整体控制。它用优化的方式给模型铺满叶片,速度比叶片网格快几个数量级。代价是几何体不参与动态 LOD 系统,也不参与生长(Growth)系统。
使用方法
在叶片数量极大、且不需要逐片编辑时使用。参数与 Leaf Mesh 类似,重点是 Leaves 组的尺寸与 Generation 的分布曲线。注意:如果后续需要动态 LOD 或生长动画,必须改用 Leaf Mesh。
主要参数 (16 项)
  • Leaves:Type叶片类型。
  • Leaves:Size X叶片 X 方向尺寸。应与贴图长宽比一致,否则会拉伸。
  • Leaves:Size Y叶片 Y 方向尺寸。
  • Leaves:Rotation叶片旋转。配合方差让每片叶子朝向不同。
  • Leaves:Bend弯曲。沿叶脉弯折。
  • Leaves:Fold对折角度。让平面卡片沿中轴对折,是给卡片叶子立体感最省事的方法。
  • Leaves:Spread散布。叶片离枝条轴线的距离。
  • Generation:Mode生成模式。决定子节点用哪套算法分布:Classic(旧版,勿用)、Proportional、Proportional steps、Absolute、Absolute steps、Phyllotaxy、Interval、Bifurcation、Flood、Parent。
  • Generation:Frequency父级曲线。控制沿父级长度方向子节点出现概率的分布,X=父级位置 0~1,Y=权重。默认恒为 1 即全长均匀。
  • Generation:Proportional:Number每个父级上生成的子节点数量,与父级尺寸成比例。
  • Generation:Mesh alignment网格对齐。仅对 Leaf mesh / Batched leaf 及点击放置产生的节点有效,且父级必须是网格。可选 None / Tangent / Binormal / Parent X,Y,Z / World X,Y,Z。
  • Material:Material指定材质资源。
  • Material:Opacity不透明度贴图。白色不透明、黑色透明,叶片靠它抠出形状。
  • Wind:Weight风力权重。0=完全不动,1=完全随风摆。应按层级递增。
  • Vertex Color:Green顶点色绿通道。SpeedTree 约定用于存储风力权重。
  • Random Seeds:Generation生成随机种子。改这个值会得到形态完全不同的另一棵树,是批量出变体的总开关。

Frond羽叶生成器

别名: 羽叶、复叶、棕榈叶、蕨叶、苏铁、palm frond、fern、grass、草

主生成器
作用
沿父级脊线生成一整片羽状复叶,用于棕榈叶、蕨叶、草
功能
Frond 生成沿父级枝条脊线形变的网格,用少量面数表达大量小叶,面数效率极高。它必须挂在 Branch 生成器下面;如果想让作为骨架的枝条本身不显示,把该 Branch 的 Spine:Style 设为 Spine only。
使用方法
挂在树干或枝条下。核心是 Shape 组控制整片叶子的轮廓与弯曲,Generation 组控制沿父级的着生分布,Material 指定带 Alpha 的整片羽叶贴图。做棕榈时把 Spine:Length 调大、Spine:Droop 加大,做出明显的下垂弧线。
主要参数 (16 项)
  • Spine:Length脊线长度。相对父级长度的比例。
  • Spine:Shape形状曲线。X=沿脊线 0~1,Y=横向偏移量。让枝条自然弯曲的关键参数。
  • Spine:Droop下垂。模拟重力让枝条末端下垂。
  • Spine:Style脊线形态风格。设为 Spine only 可隐藏枝干几何体,只保留骨架(挂 Frond 时常用)。
  • Generation:Mode生成模式。决定子节点用哪套算法分布:Classic(旧版,勿用)、Proportional、Proportional steps、Absolute、Absolute steps、Phyllotaxy、Interval、Bifurcation、Flood、Parent。
  • Generation:Frequency父级曲线。控制沿父级长度方向子节点出现概率的分布,X=父级位置 0~1,Y=权重。默认恒为 1 即全长均匀。
  • Generation:Absolute:Number每个父级上生成的精确子节点数量。不随父级尺寸变化,慎用。
  • Generation:Proportional:Number每个父级上生成的子节点数量,与父级尺寸成比例。
  • Generation:Rotation把该生成器的全部节点作为一个整体绕父级脊线旋转。配合方差可打乱朝向。
  • Material:Material指定材质资源。
  • Material:Opacity不透明度贴图。白色不透明、黑色透明,叶片靠它抠出形状。
  • Material:Color基础色 / 反照率贴图。
  • Material:Subsurface Amount次表面散射强度。让叶片透光的关键参数,为 0 时叶子像塑料片。
  • Wind:Weight风力权重。0=完全不动,1=完全随风摆。应按层级递增。
  • Collision:Radius碰撞半径。通常比实际几何体略大,避免角色贴脸。
  • Random Seeds:Generation生成随机种子。改这个值会得到形态完全不同的另一棵树,是批量出变体的总开关。

Zone区域生成器

别名: 区域、分布区、散布、zone、region、范围、地面散布、草皮、地被

主生成器
作用
作为其它物体的父级,在一个区域内散布网格,用来做草丛、灌木丛、地被、蘑菇群
功能
Zone 生成器的作用类似于 Tree 生成器——它是别的物体的父级,但作用范围限定在一个区域(圆盘或网格)。它有两种形态:圆盘形态不产生几何体,只提供一个生长区域;网格形态可以提供生长表面并贡献几何体。
使用方法
Add 一个 Zone,在 Meshes 组里挂上要散布的网格(草叶、花、蘑菇等),再用 Placement 组控制数量、随机旋转、缩放范围与地面贴合。Ambient Occlusion 组可以给散布体加上根部变暗。草的三个随机(位置、朝向、缩放)必须全开。
主要参数 (11 项)
  • Generation:Resolution
  • Generation:Frequency父级曲线。控制沿父级长度方向子节点出现概率的分布,X=父级位置 0~1,Y=权重。默认恒为 1 即全长均匀。
  • Meshes:Mesh网格条目。
  • Meshes:Count数量。
  • Meshes:Weight权重,控制混合比例。
  • Placement:Placement摆放规则。
  • Placement:Scale缩放范围。
  • Placement:Rotation旋转范围。
  • Placement:Offset偏移。
  • Forces:Allow总开关。启用后,所有被勾选的力场才会作用于本生成器。
  • Random Seeds:Generation生成随机种子。改这个值会得到形态完全不同的另一棵树,是批量出变体的总开关。

Card卡片生成器

别名: 卡片、面向相机叶片、card、billboard leaf、billboard

主生成器
作用
生成始终面向相机的叶片,用最低成本表现远景叶片
功能
Card 生成器负责产生面向相机的叶片,基于材质与网格资源。它比普通叶片卡片更省,因为叶片会自动转向观察者,适合远景或大规模植被。
使用方法
用于远景树或性能受限的场景。核心是尺寸与朝向设置,贴图需要带 Alpha 通道。近景建议改用 Leaf Mesh 以获得立体感。注意:Card 生成器在 v10.2.0 的可执行文件中存在,但官方随附的模板与示例中没有使用它,添加菜单中的位置未确认。
主要参数 (8 项)
  • Leaves:Size X叶片 X 方向尺寸。应与贴图长宽比一致,否则会拉伸。
  • Leaves:Size Y叶片 Y 方向尺寸。
  • Leaves:Rotation叶片旋转。配合方差让每片叶子朝向不同。
  • Leaves:Align朝向对齐。
  • Generation:Frequency父级曲线。控制沿父级长度方向子节点出现概率的分布,X=父级位置 0~1,Y=权重。默认恒为 1 即全长均匀。
  • Material:Opacity不透明度贴图。白色不透明、黑色透明,叶片靠它抠出形状。
  • Wind:Weight风力权重。0=完全不动,1=完全随风摆。应按层级递增。
  • Random Seeds:Generation生成随机种子。改这个值会得到形态完全不同的另一棵树,是批量出变体的总开关。

Base基础生成器

别名: 基础、根盘、树基、base、根部、入土、投影器

主生成器
作用
在生成层级中代表投影器(Projector)场景对象,并保存影响投影的信息
功能
Base 生成器在生成层级中代表 Projector 场景对象,同时保存影响投影的信息。它必须作为 Tree 生成器的直接子级。SpeedTree 9.5.0 引入,配合投影器做射线投射的散布细节。
使用方法
先创建 Projector 场景对象,再用 Base 生成器把它接入生成层级。用于把预先绘制好的树皮细节或遮罩投射到模型表面,避免 UV 接缝。
主要参数 (4 项)
  • Generation:Mode生成模式。决定子节点用哪套算法分布:Classic(旧版,勿用)、Proportional、Proportional steps、Absolute、Absolute steps、Phyllotaxy、Interval、Bifurcation、Flood、Parent。
  • Generation:Frequency父级曲线。控制沿父级长度方向子节点出现概率的分布,X=父级位置 0~1,Y=权重。默认恒为 1 即全长均匀。
  • Forces:Allow总开关。启用后,所有被勾选的力场才会作用于本生成器。
  • Random Seeds:Generation生成随机种子。改这个值会得到形态完全不同的另一棵树,是批量出变体的总开关。

Reference引用生成器

别名: 引用、引用生成器、占位、placeholder、reference、BaseRef、基础引用

主生成器
作用
在生成层级中放置占位符,标记后续要添加节点的位置
功能
Reference 生成器在生成层级中添加占位符,用来标记新节点的位置。它在文件内部的类型标识是 BaseRef。它本身不产生几何体。
使用方法
在需要预留位置的地方添加,之后再往这个位置挂生成器。也出现在拼接与转换流程的模板里(templates/combined/Reference.stt)。注意:官方文档中没有独立的 Reference 生成器属性页,其名称来自随附的 Reference.stt 模板与示例文件中的真实节点名。
主要参数 (4 项)
  • Generation:Mode生成模式。决定子节点用哪套算法分布:Classic(旧版,勿用)、Proportional、Proportional steps、Absolute、Absolute steps、Phyllotaxy、Interval、Bifurcation、Flood、Parent。
  • Generation:Frequency父级曲线。控制沿父级长度方向子节点出现概率的分布,X=父级位置 0~1,Y=权重。默认恒为 1 即全长均匀。
  • Forces:Allow总开关。启用后,所有被勾选的力场才会作用于本生成器。
  • Random Seeds:Generation生成随机种子。改这个值会得到形态完全不同的另一棵树,是批量出变体的总开关。

Vine藤蔓生成器

别名: 藤蔓、藤、爬山虎、常春藤、vine、ivy、攀爬、垂挂、物理模拟

主生成器
作用
带物理模拟的枝干生成器,用于藤蔓、爬山虎等需要重力与约束作用的攀爬或垂挂结构
功能
Vine 生成器是 SpeedTree 10 新增的独立生成器,本质上是施加了物理模拟的 Branch 生成器。它的控制点被当作带重力与约束的粒子来求解,因此能自然下垂、互相缠绕、贴合碰撞体。粒子不会穿过地面。注意:藤蔓不响应几何力场的吸引/规避行为,只把它当作碰撞体;且藤蔓生成器必须处在产生几何力场的生成器之后的 pass 里,否则力场不生效。
使用方法
官方为藤蔓提供了三条完整流程(这是官方文档里唯一有分步教程的植物类型)。程序化藤蔓:① 把 Vine 生成器挂到父级 / 用 Projector 射线投射到模型上 / 从 Zone 生成器长出;② 用想让它交互的生成器或网格创建几何力场;③ 在 Vine 生成器里启用该力场;④ 调参数——把 Spine:Droop:Style 设为 Off 先摆好位置,再设为 On 测试重力。游戏用低模藤蔓:挂到 Branch 下,Spine:Style 设为 Match parent,每个父级只生成一个节点。手绘英雄藤蔓:节点模式下用 gizmo 摆位,配合 Bend 工具,再打开 Droop。沿引导线生长:先手绘一条枝条作为引导,再让藤蔓沿它生长。性能上:迭代次数与分段数尽量保持最低。
主要参数 (18 项)
  • Spine:Style脊线风格。Default 为自由模拟;Match parent 让藤蔓贴合父级枝条(做低模游戏藤蔓时用)。
  • Spine:Droop下垂。含 Style(开关)/ Amount(强度)/ Friction(摩擦)/ Stiffness(刚度)/ Iterations(迭代次数)/ Resolve steps(求解步数)/ Self-collide(自碰撞)。摆位时先关掉,摆好再打开测重力。
  • Spine:Length脊线长度。相对父级长度的比例。
  • Spine:Noise噪波。给脊线叠加随机扰动。
  • Spine:Path路径。手绘模式下可自定义脊线走向。
  • Segments:Accuracy精度。控制粒子数量——数值越高细节越多、碰撞越准,但开销也越大。
  • Segments:Length沿长度方向的分段数。段数不足时弯曲会变成折线。
  • Segments:Radial横截面圆周分段数。低于 5 会明显看出多边形棱角。
  • Generation:Mode生成模式。决定子节点用哪套算法分布:Classic(旧版,勿用)、Proportional、Proportional steps、Absolute、Absolute steps、Phyllotaxy、Interval、Bifurcation、Flood、Parent。
  • Generation:Frequency父级曲线。控制沿父级长度方向子节点出现概率的分布,X=父级位置 0~1,Y=权重。默认恒为 1 即全长均匀。
  • Generation:Rotation把该生成器的全部节点作为一个整体绕父级脊线旋转。配合方差可打乱朝向。
  • Forces:Allow总开关。注意藤蔓只把几何力场当作碰撞体,不响应吸引/规避。
  • Forces:Mesh网格力。让枝条沿外部模型的表面生长。
  • Forces:Direction方向力。把枝条推向固定方向,可做常年单向风形成的旗形树冠。
  • Forces:Magnet磁力。把枝条吸附到指定对象。
  • Material:Material指定材质资源。
  • Wind:Weight风力权重。0=完全不动,1=完全随风摆。应按层级递增。
  • Random Seeds:Generation生成随机种子。改这个值会得到形态完全不同的另一棵树,是批量出变体的总开关。

Cap封顶生成器

别名: 封顶、切口、断面、cap、封口、截断、树桩、断枝

装饰生成器
作用
封闭枝条的开口端,模拟折断或锯断的枝端
功能
Cap 生成器封闭开口的枝条。外圈区域继承父级枝条的材质,内圈则是切断面的材质,因此能做出「树皮包着木质部」的真实断面效果。它总是通过 Extend parent 机制生成——这也是为什么 Cap 能精确贴合父级末端。
使用方法
选中需要封口的 Branch,Add → Cap。常给树干与主枝加,细枝不需要。做树桩、断枝时必用。参数很少,主要调 Cap 组的半径与高度,以及 Dynamic LOD 里远距离是否保留。
主要参数 (9 项)
  • Cap:Height封顶高度。
  • Cap:Radius封顶半径。
  • Generation:Mode生成模式。决定子节点用哪套算法分布:Classic(旧版,勿用)、Proportional、Proportional steps、Absolute、Absolute steps、Phyllotaxy、Interval、Bifurcation、Flood、Parent。
  • Generation:Frequency父级曲线。控制沿父级长度方向子节点出现概率的分布,X=父级位置 0~1,Y=权重。默认恒为 1 即全长均匀。
  • Generation:Extend parent:Type延伸父级类型。在父级枝条末端额外生成节点,可选 None / Any / Split 1 / Split 2 / Skinny / Fat / Breaks only / Bottom。父级必须是 Branch,子级只能是 Branch、Cap、Leaf mesh 或 Batched leaf。
  • Segments:Radial横截面圆周分段数。低于 5 会明显看出多边形棱角。
  • Dynamic LOD:Weight动态 LOD 权重。决定该生成器在简化时谁先被削减。
  • Displacement:Amount置换总强度。
  • Random Seeds:Generation生成随机种子。改这个值会得到形态完全不同的另一棵树,是批量出变体的总开关。

Decal贴花生成器

别名: 贴花、表面贴片、苔藓、地衣、decal、装饰贴片、凹陷、cavity

装饰生成器
作用
把材质与扁平网格包裹到父级表面,做出节疤、隆起、凹陷等表面细节
功能
Decal 生成器把一个材质连同扁平网格包裹到父级上,用来创建节疤、隆起、凹陷(cavity)这类表面细节。它不增加大量几何体就能显著提升表面丰富度。
使用方法
挂在树干或枝条下。在 Mesh 组指定贴片网格,用 Decal 组调尺寸与贴合偏移,Generation 组控制沿父级的分布。贴图需要带 Alpha 通道。官方随附模板中有 Cavity、Decal、Gash、Lump 等现成的装饰预设。
主要参数 (11 项)
  • Decal:Mesh贴花所用网格。
  • Decal:Size贴花尺寸。
  • Mesh:Mesh指定网格资源(.obj / .fbx)。
  • Generation:Mode生成模式。决定子节点用哪套算法分布:Classic(旧版,勿用)、Proportional、Proportional steps、Absolute、Absolute steps、Phyllotaxy、Interval、Bifurcation、Flood、Parent。
  • Generation:Frequency父级曲线。控制沿父级长度方向子节点出现概率的分布,X=父级位置 0~1,Y=权重。默认恒为 1 即全长均匀。
  • Generation:Proportional:Number每个父级上生成的子节点数量,与父级尺寸成比例。
  • Material:Material指定材质资源。
  • Material:Opacity不透明度贴图。白色不透明、黑色透明,叶片靠它抠出形状。
  • Growth:Timing生长时序。控制该节点在动画中的开始时间。
  • Forces:Allow总开关。启用后,所有被勾选的力场才会作用于本生成器。
  • Random Seeds:Generation生成随机种子。改这个值会得到形态完全不同的另一棵树,是批量出变体的总开关。

Fin鳍片生成器

别名: 鳍片、薄片、板根、fin、buttress、翼片、支撑根、菌类、moss、苔藓

装饰生成器
作用
生成薄片状几何体,用于板根、真菌、苔藓、悬挂物
功能
Fin 生成器创建一片薄薄的几何翻片,可以用于真菌、苔藓,或者其它从树干枝条上垂挂下来的东西。它的网格沿 X 轴锚定、向 +Y 方向生长,所有 X 方向的顶点都焊接到父级上。
使用方法
挂在树干下。用 Fins 组控制鳍片数量、长度与高度,用 Generation 组控制周向分布。做热带雨林板根时把 Height 调到 2~3 米。配合 Displacement 让鳍片边缘不规则。
主要参数 (9 项)
  • Fins:Height鳍片高度。
  • Fins:Length鳍片长度。
  • Generation:Mode生成模式。决定子节点用哪套算法分布:Classic(旧版,勿用)、Proportional、Proportional steps、Absolute、Absolute steps、Phyllotaxy、Interval、Bifurcation、Flood、Parent。
  • Generation:Frequency父级曲线。控制沿父级长度方向子节点出现概率的分布,X=父级位置 0~1,Y=权重。默认恒为 1 即全长均匀。
  • Segments:Length沿长度方向的分段数。段数不足时弯曲会变成折线。
  • Segments:Radial横截面圆周分段数。低于 5 会明显看出多边形棱角。
  • Displacement:Amount置换总强度。
  • Wind:Weight风力权重。0=完全不动,1=完全随风摆。应按层级递增。
  • Random Seeds:Generation生成随机种子。改这个值会得到形态完全不同的另一棵树,是批量出变体的总开关。

Knot节疤生成器

别名: 节疤、树节、疤、knot、branch scar、枝痕、木节、隆起、lump、伤口

装饰生成器
作用
生成附着在枝条上的额外几何体,做出节疤、隆起、凹陷
功能
Knot 生成器创建附着到枝条上的额外几何体,例如节疤、隆起或凹陷。它分为三个区段:Outer(外圈,与父级焊接并共用枝条材质)、Inner(过渡到裸露内层材质)、Core(核心,通常是切断枝条的材质)。这种三段结构能做出非常细腻的层次。
使用方法
挂在树干下。用 Generation 组控制沿树干的高度分布与朝向,用 Outer / Inner / Core 三组分别调整三层的大小、凸起高度和颜色过渡。配合 Displacement 可以做得很写实。
主要参数 (8 项)
  • Generation:Mode生成模式。决定子节点用哪套算法分布:Classic(旧版,勿用)、Proportional、Proportional steps、Absolute、Absolute steps、Phyllotaxy、Interval、Bifurcation、Flood、Parent。
  • Generation:Frequency父级曲线。控制沿父级长度方向子节点出现概率的分布,X=父级位置 0~1,Y=权重。默认恒为 1 即全长均匀。
  • Generation:Rotation把该生成器的全部节点作为一个整体绕父级脊线旋转。配合方差可打乱朝向。
  • Segments:Radial横截面圆周分段数。低于 5 会明显看出多边形棱角。
  • Material:Material指定材质资源。
  • Forces:Allow总开关。启用后,所有被勾选的力场才会作用于本生成器。
  • Dynamic LOD:Weight动态 LOD 权重。决定该生成器在简化时谁先被削减。
  • Random Seeds:Generation生成随机种子。改这个值会得到形态完全不同的另一棵树,是批量出变体的总开关。

Shell外壳生成器

别名: 外壳、包覆、苔藓外壳、shell、moss、algae、低模藤蔓、树皮替换

装饰生成器
作用
生成一种特殊枝条,覆盖在父级枝条之上,用来包裹苔藓、藻类或低模藤蔓
功能
Shell 生成器创建一种特殊的枝条,它坐在父级枝条之上,让你可以把父级包裹在苔藓、藻类或低模藤蔓里。它相当于给同一根枝条套一层不同材质的外皮。在 v10.2.0 的实际数据中,Shell 由 Branch 生成器配合 Decorator 参数组实现(templates/combined/Decorations/Shell.stt 内部就是一个 Type="Branch" 节点)。
使用方法
挂在树干或主枝下。外壳只有一部分属性可编辑。用 Decorator 组控制外壳的启用、延伸风格、位置与缩放。做长满苔藓的老树、被藤蔓覆盖的树干时非常高效——不需要真的建模藤蔓。
主要参数 (10 项)
  • Generation:Mode生成模式。决定子节点用哪套算法分布:Classic(旧版,勿用)、Proportional、Proportional steps、Absolute、Absolute steps、Phyllotaxy、Interval、Bifurcation、Flood、Parent。
  • Generation:Frequency父级曲线。控制沿父级长度方向子节点出现概率的分布,X=父级位置 0~1,Y=权重。默认恒为 1 即全长均匀。
  • Generation:Size scalar尺寸缩放。缩放节点及其全部子级的尺寸。
  • Spine:Length脊线长度。相对父级长度的比例。
  • Segments:Length沿长度方向的分段数。段数不足时弯曲会变成折线。
  • Segments:Radial横截面圆周分段数。低于 5 会明显看出多边形棱角。
  • UV Mapping:UU 方向平铺次数,控制纹理绕圆周重复几次。
  • UV Mapping:VV 方向平铺次数,控制纹理沿长度重复几次。
  • Material:Material指定材质资源。
  • Random Seeds:Generation生成随机种子。改这个值会得到形态完全不同的另一棵树,是批量出变体的总开关。

Mesh网格生成器

别名: 网格、网格生成器、扫描件、mesh、BranchMesh、摄影测量、photogrammetry

摄影测量生成器
作用
让导入的网格资产成为模型的一部分,并可被摄影测量工具处理
功能
Mesh 生成器让导入的网格资产成为模型的一部分,并可以被摄影测量工具操作。它通常用来导入扫描的树干,再以此为基础上生长程序化枝条。在文件内部的类型标识是 BranchMesh。
使用方法
导入 .obj / .fbx 后指定给 Mesh 组。用 Generation 组控制它在父级上的着生位置与朝向,用 Mesh:Scale / Rotation / Offset 做微调。常与 Branch 混用:主干用 Mesh(扫描件),造型枝用 Branch。
主要参数 (11 项)
  • Mesh:Mesh指定网格资源(.obj / .fbx)。
  • Mesh:Scale网格缩放。
  • Mesh:Rotation网格旋转。
  • Mesh:Offset网格偏移。
  • Generation:Mode生成模式。决定子节点用哪套算法分布:Classic(旧版,勿用)、Proportional、Proportional steps、Absolute、Absolute steps、Phyllotaxy、Interval、Bifurcation、Flood、Parent。
  • Generation:Frequency父级曲线。控制沿父级长度方向子节点出现概率的分布,X=父级位置 0~1,Y=权重。默认恒为 1 即全长均匀。
  • Generation:Rotation把该生成器的全部节点作为一个整体绕父级脊线旋转。配合方差可打乱朝向。
  • Forces:Allow总开关。启用后,所有被勾选的力场才会作用于本生成器。
  • Wind:Weight风力权重。0=完全不动,1=完全随风摆。应按层级递增。
  • Dynamic LOD:Weight动态 LOD 权重。决定该生成器在简化时谁先被削减。
  • Random Seeds:Generation生成随机种子。改这个值会得到形态完全不同的另一棵树,是批量出变体的总开关。

Mesh converter网格转换生成器

别名: 网格转换、转换工具、convert、convert to trunk、网格转枝干、convert in place、Conversion-Tools、扫描转程序化

摄影测量生成器
作用
在扫描网格上创建可平铺的贴图集,并把网格全部或部分替换为原生 SpeedTree 几何体
功能
Mesh converter 生成器提供一组工具,用于在网格上创建可平铺的贴图集(tiling map sets)以及原生 SpeedTree 几何体扩展。它是 v9 摄影测量工作流的核心工具,负责把扫描的树干转换成可以继续程序化生长的结构。文件内部类型标识是 Conversion-Tools。
使用方法
必须作为 Mesh 生成器的子级,且该 Mesh 生成器下只能有这一个 Mesh 节点。导入扫描网格后 Add → Mesh converter,然后选择转换方式:Convert to Trunk(骨架化成树干)、Convert to Branch(转成枝条)、Convert in Place(原地转换,保留网格位置)。参数中有 Region 组的曲线捕获设置与 Preview 组。
主要参数 (6 项)
  • Generation:Mode生成模式。决定子节点用哪套算法分布:Classic(旧版,勿用)、Proportional、Proportional steps、Absolute、Absolute steps、Phyllotaxy、Interval、Bifurcation、Flood、Parent。
  • Generation:Frequency父级曲线。控制沿父级长度方向子节点出现概率的分布,X=父级位置 0~1,Y=权重。默认恒为 1 即全长均匀。
  • Segments:Length沿长度方向的分段数。段数不足时弯曲会变成折线。
  • Segments:Radial横截面圆周分段数。低于 5 会明显看出多边形棱角。
  • Mesh:Mesh指定网格资源(.obj / .fbx)。
  • Random Seeds:Generation生成随机种子。改这个值会得到形态完全不同的另一棵树,是批量出变体的总开关。

Mesh detail网格细节生成器

别名: 网格细节、细节网格、写实细节、photogrammetry、摄影测量、detail mesh

摄影测量生成器
作用
用材质加三维网格创建表面细节,并把这些细节融合进父级
功能
Mesh detail 生成器用材质与三维网格创建表面细节,并把细节平滑地融合(blend)进父级。它让程序化生成的树拥有扫描件的写实细节,是「程序化 + 扫描」混合流程的关键节点。
使用方法
先导入 .obj / .fbx 高模,再指定给 Mesh detail 的 Mesh 组。用 Placement 控制摆放密度与随机,用 Blend 组让网格与程序化表面平滑过渡。官方示例 samples/Learning/Photogrammetry/Decal_MeshDetail/ 完整演示了这套流程。
主要参数 (11 项)
  • Mesh:Mesh指定网格资源(.obj / .fbx)。
  • Mesh:Scale网格缩放。
  • Mesh:Rotation网格旋转。
  • Mesh:Offset网格偏移。
  • Placement:Placement摆放规则。
  • Generation:Mode生成模式。决定子节点用哪套算法分布:Classic(旧版,勿用)、Proportional、Proportional steps、Absolute、Absolute steps、Phyllotaxy、Interval、Bifurcation、Flood、Parent。
  • Generation:Frequency父级曲线。控制沿父级长度方向子节点出现概率的分布,X=父级位置 0~1,Y=权重。默认恒为 1 即全长均匀。
  • Collision:Collision是否为该节点生成碰撞。
  • Growth:Timing生长时序。控制该节点在动画中的开始时间。
  • Dynamic LOD:Weight动态 LOD 权重。决定该生成器在简化时谁先被削减。
  • Random Seeds:Generation生成随机种子。改这个值会得到形态完全不同的另一棵树,是批量出变体的总开关。

Stitch缝合生成器

别名: 缝合、拼接、接合、stitch、band stitch、wrap stitch、bake stitch、cut stitch、接缝、过渡段

摄影测量生成器
作用
把原生 SpeedTree 几何体与网格连接起来,使接缝不可见
功能
Stitch 生成器把原生 SpeedTree 几何体与网格缝合在一起。它解决「两段几何体对不上」的问题:在两段之间生成过渡几何体并匹配 UV,使接缝不可见。提供 Bake stitch(烘焙)、Wrap stitch(环绕)、Band stitch(带状)、Cut stitch(切割)几种模式。
使用方法
摄影测量工作流的核心。需要手工用 gizmo 在节点模式下放置。先用 Target 定位对接点,再用 Stitch 生成过渡段,用 Region / Band Region / Blend Region 组控制缝合区域与过渡曲线。官方示例:samples/Learning/Photogrammetry/Oak_Photogrammetry/Stitch.spm。
主要参数 (5 项)
  • Generation:Mode生成模式。决定子节点用哪套算法分布:Classic(旧版,勿用)、Proportional、Proportional steps、Absolute、Absolute steps、Phyllotaxy、Interval、Bifurcation、Flood、Parent。
  • Generation:Frequency父级曲线。控制沿父级长度方向子节点出现概率的分布,X=父级位置 0~1,Y=权重。默认恒为 1 即全长均匀。
  • Segments:Length沿长度方向的分段数。段数不足时弯曲会变成折线。
  • Segments:Radial横截面圆周分段数。低于 5 会明显看出多边形棱角。
  • Random Seeds:Generation生成随机种子。改这个值会得到形态完全不同的另一棵树,是批量出变体的总开关。

Target目标生成器

别名: 目标、定位、对接点、target、锚点、对位、放置点

摄影测量生成器
作用
在任意父级上精确定位子节点,常用于把枝条放到扫描网格的指定位置
功能
Target 生成器用于在任意父级上精确定位子节点,本身不产生几何体。它通常用来把枝条放到摄影测量网格的特定位置上。
使用方法
添加 Target 后增加数量,在节点模式下用 gizmo 逐个摆放,再把任意生成器挂到它下面。官方示例:samples/Learning/Photogrammetry/Oak_Photogrammetry/Target.spm。做 Convert in Place 时也用它来对齐原始网格。
主要参数 (4 项)
  • Generation:Mode生成模式。决定子节点用哪套算法分布:Classic(旧版,勿用)、Proportional、Proportional steps、Absolute、Absolute steps、Phyllotaxy、Interval、Bifurcation、Flood、Parent。
  • Generation:Frequency父级曲线。控制沿父级长度方向子节点出现概率的分布,X=父级位置 0~1,Y=权重。默认恒为 1 即全长均匀。
  • Generation:Rotation把该生成器的全部节点作为一个整体绕父级脊线旋转。配合方差可打乱朝向。
  • Random Seeds:Generation生成随机种子。改这个值会得到形态完全不同的另一棵树,是批量出变体的总开关。

Spine脊线生成器(旧版)

别名: 脊线、骨架线、中心线、spine、spline、曲线骨架、旧版

旧版生成器
作用
旧版生成器。原本同时负责脊线、叶片与封顶三件事
功能
Spine 是 SpeedTree 5~7 的生成器,原本负责脊线、叶片与封顶三部分功能。在 v10 中它已被拆分:由 Branch 生成器、Frond 生成器、Cap 生成器分别承担。旧版生成器仍可加载旧模型并升级,但不保证未来版本保留,新模型不要使用。
使用方法
只在打开旧模型时遇到。用 Actions → Upgrade legacy generator(s)... 升级为新的 Branch / Frond / Cap。手绘枝条现在用 Branch 的 Hand Drawn 功能,不再需要单独的 Spine 生成器。
主要参数 (8 项)
  • Spine:Length脊线长度。相对父级长度的比例。
  • Spine:Style脊线形态风格。设为 Spine only 可隐藏枝干几何体,只保留骨架(挂 Frond 时常用)。
  • Spine:Shape形状曲线。X=沿脊线 0~1,Y=横向偏移量。让枝条自然弯曲的关键参数。
  • Spine:Path路径。手绘模式下可自定义脊线走向。
  • Spine:Noise噪波。给脊线叠加随机扰动。
  • Spine:Droop下垂。模拟重力让枝条末端下垂。
  • Generation:Mode生成模式。决定子节点用哪套算法分布:Classic(旧版,勿用)、Proportional、Proportional steps、Absolute、Absolute steps、Phyllotaxy、Interval、Bifurcation、Flood、Parent。
  • Generation:Frequency父级曲线。控制沿父级长度方向子节点出现概率的分布,X=父级位置 0~1,Y=权重。默认恒为 1 即全长均匀。

Subdivision branch细分枝生成器(旧版)

别名: 细分、平滑、subdivision、subdiv、细分曲面、细分枝、旧版

旧版生成器
作用
旧版生成器。已被 Branch 生成器取代
功能
Subdivision branch 是旧版的细分曲面枝条生成器。现在的 Branch 生成器同时支持多边形表面与细分曲面,因此它已被完全取代。
使用方法
只在打开旧模型时遇到。升级后由 Branch 生成器承担,细分通过 Skin:Subdivision 参数控制。注意每加一级细分,面数约翻四倍。
主要参数 (4 项)
  • Segments:Length沿长度方向的分段数。段数不足时弯曲会变成折线。
  • Segments:Radial横截面圆周分段数。低于 5 会明显看出多边形棱角。
  • Skin:Subdivision细分。
  • Dynamic LOD:Weight动态 LOD 权重。决定该生成器在简化时谁先被削减。

Cage碰撞笼生成器(旧版)

别名: 碰撞笼、包裹体、cage、包围、碰撞外壳、旧版

旧版生成器
作用
旧版生成器。已被 Tree 生成器取代
功能
Cage 是旧版的细分笼生成器。现在 Tree 生成器始终充当默认的细分笼,因此它已被取代。
使用方法
只在打开旧模型时遇到。碰撞体现在用 Tree 生成器上的碰撞设置,或 Collision object 场景对象来生成。
主要参数 (3 项)
  • Collision:Type碰撞体类型。
  • Collision:Collision是否为该节点生成碰撞。
  • Segments:Radial横截面圆周分段数。低于 5 会明显看出多边形棱角。

Leaf叶片生成器(旧版)

别名: 叶片卡片、卡片、leaf card、旧版叶片、旧版

旧版生成器
作用
旧版生成器。已被 Leaf mesh 与 Batched leaf 取代
功能
Leaf 是旧版的叶片生成器。v10 中它由 Leaf mesh 生成器(可逐片编辑)与 Batched leaf 生成器(批量高性能)共同取代。
使用方法
只在打开旧模型时遇到。升级后按需要选择 Leaf Mesh(要逐片编辑、要动态 LOD 或生长动画)或 Batched Leaf(只要性能)。
主要参数 (6 项)
  • Leaves:Size X叶片 X 方向尺寸。应与贴图长宽比一致,否则会拉伸。
  • Leaves:Size Y叶片 Y 方向尺寸。
  • Leaves:Rotation叶片旋转。配合方差让每片叶子朝向不同。
  • Generation:Frequency父级曲线。控制沿父级长度方向子节点出现概率的分布,X=父级位置 0~1,Y=权重。默认恒为 1 即全长均匀。
  • Material:Opacity不透明度贴图。白色不透明、黑色透明,叶片靠它抠出形状。
  • Wind:Weight风力权重。0=完全不动,1=完全随风摆。应按层级递增。

Proxy代理生成器(旧版)

别名: 碰撞代理、代理、proxy、collision proxy、物理体、旧版

旧版生成器
作用
旧版生成器。没有任何替代品——世界构建功能已在 SpeedTree 8 中移除
功能
Proxy 是旧版的碰撞代理生成器。它没有任何替代品,因为与之配套的世界构建(world building)功能已在 SpeedTree 8.0 中被移除。
使用方法
只在打开旧模型时遇到。碰撞现在用 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.
  • Dynamic LOD:WeightDynamic LOD weight. Determines which generator gets simplified away first.
  • Leaf Collision:TypeLeaf collision type.
  • Collision:TypeCollision body type.
  • 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.
  • Dynamic LOD:WeightDynamic LOD weight. Determines which generator gets simplified away first.
  • Displacement:AmountOverall displacement strength.
  • 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.
  • Dynamic LOD:WeightDynamic LOD weight. Determines which generator gets simplified away first.
  • 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.
  • Dynamic LOD:WeightDynamic LOD weight. Determines which generator gets simplified away first.
  • 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.
  • Dynamic LOD:WeightDynamic LOD weight. Determines which generator gets simplified away first.
  • 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.

Subdivision branchSubdivision branch generator (legacy)

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.
  • Skin:SubdivisionSubdivision.
  • Dynamic LOD:WeightDynamic LOD weight. Determines which generator gets simplified away first.

CageCage generator (legacy)

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.

七个从零开始的完整案例,覆盖乔木、灌木、草、棕榈、藤蔓与花卉。 每个案例都给出真实的参数名与建议起始值,并附检查清单。案例之间共享同一套流程骨架,建议按顺序做。 每章开头的配图是 SpeedTree Modeler 中打开对应官方示例后的实际画面。

关于案例里的数值,请先读这一段

案例中的参数名、节点名、操作路径都来自 SpeedTree Modeler 10 官方文档,并与本机 v10.2.0 实测核对。 但具体的建议数值(如「Spine:Length = 0.45」「Gnarl = 0.15」)是教学用的起点,不是官方推荐值—— 官方文档只解释参数语义,不提供任何数值默认值或推荐区间。

这些数值的作用是让你第一次就能调出「看起来合理」的结果,而不是让你照抄。真实项目里应当以参考照片为准: 先把参考图导入场景、调好比例,再对着它调参数。这也是官方推荐的做法。

另外,唯一有官方分步教程的植物类型是藤蔓(案例六),其余案例是基于官方参数语义与公开制作经验的整理。

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

这是最典型也最有价值的案例。做完它,SpeedTree 的主要机制你就都摸过一遍了。全程从 tree_templates/Games/Blank.spm 空文件开始。

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

1准备工作Setup

  1. 启动 SpeedTree Modeler,选 File → New,模板选 Blank(或直接打开 tree_templates/Games/Blank.spm)。
  2. 确认场景单位。SpeedTree 默认 1 单位 = 1 米,橡树的真实高度在 10–25 米之间,本案例取 12 米。
  3. 在视图里放一个参考:Scene Objects 里加一个 1.8 米高的人形参考(安装目录 app_data/man.tga 就是官方的比例参考图),用它来校验树的大小。
  4. 切到 Other/_Flat.fx 平光模式。整段骨架搭建过程都在这个模式下进行,只看剪影。

为什么先设比例:SpeedTree 的所有长度参数都是相对父级的比例,但最终导出的是绝对尺寸。比例错了,后面每个参数都要重调。

  1. Launch SpeedTree Modeler, choose File → New, and pick the Blank template (or simply open tree_templates/Games/Blank.spm).
  2. Confirm the scene units. SpeedTree defaults to 1 unit = 1 meter. A real oak stands 10–25 m tall; we use 12 m here.
  3. 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.
  4. 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.

2第一步:做树干Step 1: Build the Trunk

选中根节点 Tree,点 Add,选择 Branch。这就是你的树干。选中它,重命名为 Trunk(复杂模型里务必命名,否则节点多了分不清)。

在 Properties 里设置:

参数建议值说明
Spine:Length1.0树干是基准,长度设为 1
Spine:Shape轻微 S 形把曲线中点往一侧拉一点。真实的树干绝不会笔直
Spine:Droop0.02一点点下垂,别多
Segments:Length12树干要弯,段数不能太少
Segments:Radial10树干在近景会被看到,圆周分段要够
Generation:First0.0树干从根部开始
Generation:Last1.0一直到顶
Displacement:Flares0.3根部扩张。让树干入土处变粗,立刻自然很多

然后给树干加一点不规则:在 Forces 组里把 Gnarl 设成 0.15,Twist 设成 0.1。

此时切回平光模式看剪影:应该是一根略微弯曲、根部略粗的柱体。如果太直,加大 Spine:Shape 的偏移量。

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:

ParameterSuggested valueNotes
Spine:Length1.0The trunk is the baseline, so its length is set to 1
Spine:ShapeSlight S curvePull the curve's midpoint a little to one side. Real trunks are never perfectly straight
Spine:Droop0.02A touch of droop, no more
Segments:Length12The trunk has to bend, so it needs a decent number of segments
Segments:Radial10The trunk will be seen up close, so it needs enough radial segments
Generation:First0.0The trunk starts at the base
Generation:Last1.0All the way to the top
Displacement:Flares0.3Root 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:ModeProportional按父级比例生成。树干越长主枝越多,符合真实情况
Generation:Proportional:Number6(方差 2)树干上大约 4–8 根主枝
Generation:Frequency曲线:底部 0 → 0.35 处升到 1 → 顶部 0.8关键。真实树木下半段主干是光的,主枝集中在中上部
Generation:First0.250.25 以下不长主枝
Spine:Length0.45(方差 0.1)主枝约为树干的 45% 长
Spine:Shape上凸弧线主枝先平伸再微微上翘,这是橡树的典型形态
Spine:Droop0.15末端下垂,产生“垂枝”感
Generation:Orientation:Sweep0,但给方差 360让主枝绕树干均匀分布
Generation:Orientation:Alignment0.4主枝略微上扬而非完全水平
Generation:Proportional:Jumble0.25打破规整
Generation:Size scalar曲线:底部 0.7 → 顶部 1.0顶部主枝略粗(橡树特征),或反过来做锥形
Segments:Length8
Segments:Radial8

再加 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.

ParameterSuggested valueNotes
Generation:ModeProportionalGenerated in proportion to the parent. The longer the trunk, the more primary branches — which matches reality
Generation:Proportional:Number6 (variance 2)Roughly 4–8 primary branches along the trunk
Generation:FrequencyCurve: 0 at the bottom → 1 by 0.35 → 0.8 at the topCritical. On a real tree the lower trunk is bare; the primary branches cluster in the middle and upper sections
Generation:First0.25No primary branches below 0.25
Spine:Length0.45 (variance 0.1)Primary branches run about 45% of the trunk length
Spine:ShapeUpward-convex arcThe branches reach out level, then tip up slightly — the classic oak gesture
Spine:Droop0.15The tips sag, producing that “weeping branch” feel
Generation:Orientation:Sweep0, but give it 360 varianceSpreads the primary branches evenly around the trunk
Generation:Orientation:Alignment0.4The branches angle slightly upward rather than lying flat
Generation:Proportional:Jumble0.25Breaks up the regularity
Generation:Size scalarCurve: 0.7 at the bottom → 1.0 at the topUpper branches slightly thicker (an oak trait), or reverse it for a tapered look
Segments:Length8
Segments:Radial8

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.

4第三步:做二级枝Step 3: Build the Secondary Branches

选中 Big Branches,Add → Branch,重命名为 Small Branches。

参数建议值
Generation:ModeProportional
Generation:Proportional:Number5(方差 2)
Generation:Frequency中段高、两端低
Spine:Length0.5(方差 0.15)
Spine:Shape更明显的弧线
Spine:Jink0.1
Segments:Length6
Segments:Radial5
Forces:Gnarl0.25

再加第三级 Twigs(细枝),参数类似,但数量更多(8–12)、长度更短(0.4)、分段更省(Length 4 / Radial 4)。

层级要克制。三级枝之后,继续加真实枝条的收益急剧下降,而面数急剧上升。橡树的树冠密度主要靠叶片营造,不是靠枝。本案例到三级枝就停。

Select Big Branches, choose Add → Branch, and rename it Small Branches.

ParameterSuggested value
Generation:ModeProportional
Generation:Proportional:Number5 (variance 2)
Generation:FrequencyHigh in the middle, low at both ends
Spine:Length0.5 (variance 0.15)
Spine:ShapeA more pronounced arc
Spine:Jink0.1
Segments:Length6
Segments:Radial5
Forces:Gnarl0.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.

5第四步:封顶Step 4: Cap the Ends

选中 Trunk,Add → Cap。同样给 Big Branches 加一个 Cap。

不加封顶的话,从上方或侧面看到树干顶端时,会看到中空的管口。Cap 的参数很少,主要调 Cap:Height 与 Cap:Radius 让它贴合树干末端。细枝不需要封顶。

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 Y0.12 / 0.18橡树叶约 12cm × 18cm。必须与贴图长宽比一致
Leaves:Fold0.2沿中轴对折,让卡片有立体感
Leaves:Bend0.15沿叶脉弯曲
Leaves:Rotation0,方差 40每片叶子朝向不同
Leaves:Twist0,方差 25扭转
Generation:ModeProportional
Generation:Proportional:Number3先放 3 片看清楚
Material:Material指定叶片材质用 Material:Color / Opacity / Normal / Subsurface 四张图

确认单片叶子的尺寸、朝向、形态都对之后,再把 Number 提到 8–12,并调 Generation:Frequency 让叶片在细枝中段最密。

用 Overdraw 模式检查。切到 Other/Overdraw.fx,如果树冠里出现大片高亮区域,说明叶片严重堆叠。解决办法:降低 Number,或增大 Leaves:Spread 让叶片散开。

Select Twigs (the last branch level) and choose Add → Leaf Mesh.

Start with a single leaf. In the Leaves group:

ParameterSuggested valueNotes
Leaves:Size X / Size Y0.12 / 0.18An oak leaf is about 12cm × 18cm. It must match the aspect ratio of the texture
Leaves:Fold0.2Folds along the midrib so the card reads as a solid form
Leaves:Bend0.15Bends along the vein
Leaves:Rotation0, variance 40Gives every leaf a different facing
Leaves:Twist0, variance 25Twist
Generation:ModeProportional
Generation:Proportional:Number3Start with 3 so you can see what you are doing
Material:MaterialAssign the leaf materialUse 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.

7第六步:材质与 UVStep 6: Materials and UVs

  1. 给树干和主枝指定树皮材质:Material:Color + Material:Normal + Material:AO。
  2. 调 UV Mapping:U 与 V。U 控制纹理绕树干一周重复几次,V 控制沿长度重复几次。
  3. 切到 Texel_Density.fx 检查。树干和细枝的颜色应该接近;如果细枝明显偏红或偏蓝,说明贴图精度不一致,调整 UV Mapping 的 V 值让细枝重复更多次。
  4. 近景的话,给树干加 Displacement:Amount(0.05–0.15),配合 Segments:Length/Radial 提高后的网格,做出真实的树皮起伏。
  1. Assign the bark material to the trunk and primary branches: Material:Color + Material:Normal + Material:AO.
  2. 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.
  3. 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.
  4. 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:ModeAbsolute
Generation:Absolute:Number4–8
Generation:First0.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.

ParameterSuggested value
Generation:ModeAbsolute
Generation:Absolute:Number4–8
Generation:First0.15 (keep clear of the base)
Generation:Orientation:SweepGive it 360 variance so the knots land in every direction
Outer / Inner / CoreTune 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.

9第八步:风力Step 8: Wind

按层级递增设置 Wind:Weight(在 Wind 参数组里):

节点Wind:Weight
Trunk0.03
Big Branches0.15
Small Branches0.35
Twigs0.6
Leaf Mesh0.85

切到 _Wind Weights/Level 1.fx 到 Level 4.fx 逐个检查,应该看到权重从根部到末梢逐渐升高。

Set Wind:Weight so that it increases level by level (in the Wind parameter group):

NodeWind:Weight
Trunk0.03
Big Branches0.15
Small Branches0.35
Twigs0.6
Leaf Mesh0.85

Step through _Wind Weights/Level 1.fx to Level 4.fx one at a time to check; the weights should rise steadily from the base out to the tips.

10第九步:LOD 与碰撞Step 9: LODs and Collision

选中根节点 Tree,找到 Level of Detail 组:

参数建议值说明
Level of Detail:Count4LOD0 全精度 → LOD3 公告板
Level of Detail:Billboard startLOD 3最后一级用公告板
Level of Detail:Branch volume threshold逐级提高减面主力。让细枝在低 LOD 下整体消失
Level of Detail:Cap threshold逐级提高小枝末端不再封顶

然后加碰撞:给 Trunk 设置 Collision:Radius 略大于树干半径。用工具栏的 Collision 按钮检查碰撞体是否贴合。

用 LOD 按钮逐级切换,确认没有明显跳变。如果 LOD1 到 LOD2 之间树冠突然“瘦”了一圈,把 Branch volume threshold 的梯度放缓。

Select the root node Tree and find the Level of Detail group:

ParameterSuggested valueNotes
Level of Detail:Count4LOD0 full detail → LOD3 billboard
Level of Detail:Billboard startLOD 3The last level uses a billboard
Level of Detail:Branch volume thresholdIncrease at each levelYour main triangle reducer. Lets whole twigs disappear at low LODs
Level of Detail:Cap thresholdIncrease at each levelSmall 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.

11第十步:导出Step 10: Export

  1. 确认视图统计里 TOTAL 面数在预算内(本案例目标 4 万以内)。
  2. 按目标选导出预设:UE 用 __UnrealEngine (ST).ini,Unity 用 ___Unity.ini。
  3. 导出后在引擎里实际观察:树的大小、LOD 切换、风动、贴图。

出变体:这棵树做完后,只改根节点上的 Random Seeds:Generation,另存为新文件,就得到一棵形态不同但风格一致的兄弟树。重复十次,一片森林就有了。

  1. Confirm that the TOTAL triangle count in the viewport stats is within budget (under 40,000 for this case).
  2. Pick the export preset for your target: __UnrealEngine (ST).ini for UE, ___Unity.ini for Unity.
  3. 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
  • Triangle count is within budget

案例二 针叶树(松树)

Case 2 Conifers (Pine)

入门约 40–60 分钟针叶松树乔木轮生

BeginnerAbout 40–60 minutesConiferPineTreeWhorled

针叶树和阔叶树的思路完全不同。阔叶树靠主枝分叉形成球状树冠;针叶树靠树干上的轮生枝层形成塔形,且几乎不显主干。掌握轮生结构是做好针叶树的关键。

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

1准备工作Setup

用 tree_templates/Games/Conifer.spm 作为起点(推荐),或从 Blank 开始。若从 Blank 开始,先做一个高瘦的树干:Spine:Length = 1.0,Segments:Length = 16,Segments:Radial = 8,几乎不加弯曲——针叶树的主干通常很直。

参考真实高度:本案例取 20 米。松树的树冠通常只占全高的上部 2/3,下部 1/3 是光秃的主干。

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)

选中树干,Add → Branch,命名 Whorl Branches。这是整个案例最关键的一步。

针叶树的枝条是一圈一圈长的(轮生),所以 Generation:Mode 要选 Steps(阶梯)而不是 Proportional。

参数建议值说明
Generation:ModeSteps阶梯模式,产生“一层一层”的效果
Generation:Steps:Enabledtrue启用阶梯
Generation:Steps:Number5–7每层 5–7 根枝,绕树干一圈
Generation:Steps:Spread0.15同层枝条在高度上的散布
Generation:Steps:Per step frequency1.0每层的频率
Generation:Frequency曲线:0.3 以下为 0,往上稳定为 1下部 1/3 不长枝,这是松树的标志
Spine:Length曲线:底部 0.5 → 顶部 0.15关键。底部枝条最长,越往上越短,形成塔形
Spine:Droop0.2松枝末端下垂
Generation:Orientation:Alignment0.6枝条略微上扬

这里 Spine:Length 用曲线控制是松树造型的核心技巧:底部枝条长、顶部短,自然形成圆锥形树冠。如果不做这条曲线,树会变成圆柱形,一眼假。

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.

ParameterSuggested valueNotes
Generation:ModeStepsStep mode, which produces the tiered, layer-by-layer look
Generation:Steps:EnabledtrueEnables stepping
Generation:Steps:Number5–75–7 branches per tier, ringing the trunk
Generation:Steps:Spread0.15How much branches in the same tier spread in height
Generation:Steps:Per step frequency1.0Frequency per tier
Generation:FrequencyCurve: 0 below 0.3, then a steady 1 above itNo branches on the lower 1/3 — the pine's signature
Spine:LengthCurve: 0.5 at the bottom → 0.15 at the topCritical. The lowest branches are the longest and they shorten going up, which builds the spire
Spine:Droop0.2Pine branch tips sag
Generation:Orientation:Alignment0.6The 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.

3第二步:做针叶簇Step 2: Build the Needle Clusters

松树的针叶不是一片片长的,而是一簇簇长在枝条上的。所以用 Frond 或 Leaf Mesh 做“针叶簇”。

选中 Whorl Branches,Add → Leaf Mesh(或 Frond),命名 Needle Cluster。

参数建议值说明
Leaves:Size X / Size Y0.25 / 0.5针叶簇比单片阔叶大得多
Leaves:Fold0.35折叠让簇有体积感
Generation:ModeProportional
Generation:Proportional:Number12–18一根枝上很多簇
Generation:Frequency沿枝条均匀,末端略密
Leaves:Rotation方差 60针叶簇朝向很随机

针叶贴图通常是“一簇针叶”的图,而不是单根针。材质要确保 Material:Opacity 的 Alpha 干净,否则远看会糊成一团。

性能提示:针叶树的面数几乎全在针叶簇上。如果面数超标,优先减少 Number,同时把 Leaves:Size X/Y 放大——用更少的簇、更大的尺寸盖住同样的体积,这是低 LOD 的标准做法(对应 Level of Detail:Frond size scalar 参数)。

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.

ParameterSuggested valueNotes
Leaves:Size X / Size Y0.25 / 0.5A needle cluster is far larger than a single broadleaf
Leaves:Fold0.35The fold gives the cluster volume
Generation:ModeProportional
Generation:Proportional:Number12–18Many clusters along a single branch
Generation:FrequencyEven along the branch, slightly denser at the tip
Leaves:RotationVariance 60Needle 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).

4第三步:封顶与顶部Step 3: Caps and the Top

松树的顶端是尖的。做法是让最上层的轮生枝变得极短:在 Spine:Length 曲线的最右端(X=1.0)把值拉到 0.05。这样顶部自然收成一个尖。

另外给树干加一个 Cap 封住顶端管口。

有些松树(如雪松、云杉)顶部会有一根“主导枝”竖直向上。可以单独加一根 Branch,Generation:Absolute:Number = 1,Spine:Length 设为 0.15,让它只长在最顶端。

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.

5第四步:树皮与细节Step 4: Bark and Detail

松树树皮的特征是深裂纹与鳞片状。建议用置换而不是只靠法线:

  • Segments:Length 提到 16–20,Segments:Radial 提到 10–12,为置换提供足够网格。
  • Displacement:Amount 设 0.1–0.2。
  • Displacement:Source 指定松树树皮的置换贴图。
  • Displacement:U scale / V scale 调整纹理比例,让裂纹大小符合真实尺度。

官方示例 samples/VFX/Sample_Pine/Bark/ 里有现成的松树树皮贴图,包括 Pine_Bark_VertexDisplacement.png、Pine_Bark_VertexDisplacement_SmallBumps.png 和 Pine_Bark_VertexDisplacement_exaggerated.png 三个强度版本,可以直接参考。

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.

6第五步:LOD 与导出Step 5: LODs and Export

针叶树的 LOD 策略与阔叶树类似,但有一点不同:针叶簇在低 LOD 下可以大幅减少数量并放大尺寸,因为针叶簇本身形状简单,放大后视觉损失很小。

  • Level of Detail:Count = 4
  • 逐级提高 Level of Detail:Branch volume threshold,让下部细枝先消失(它们本来就被上部遮挡)
  • 用 Level of Detail:Frond count 与 Frond size scalar 减少并放大针叶簇
  • 最后一级用公告板

官方 samples/VFX/Sample_Pine/Pine.spm 是一个完整的松树成品,可以打开对照参数。

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

案例三 灌木

Case 3 Shrubs

入门约 30–45 分钟灌木多干低矮

BeginnerAbout 30–45 minutesShrubMulti-stemLow-growing

灌木的结构特点是没有单一主干——从地面直接分出多根枝条。做法上比乔木简单,但要注意不能做成“缩小版的树”。

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.

2第一步:做多干Step 1: Build the Multiple Stems

灌木的关键是多根主干从地面同时长出。做法:

  1. 选中 Tree 根节点,Add → Branch,命名 Stems。
  2. 这是“一级枝”,但它不是一根主干,而是一组。
  3. Generation:Mode = Absolute(绝对数量),Absolute:Number = 5(方差 2)。
  4. Generation:First = 0(从最底部开始),Generation:Last = 0.05(只在根部一小段内分叉)。这是做出“丛生”感的关键。
  5. Generation:Orientation:Sweep = 0,方差 360,让各干朝不同方向。
  6. Spine:Length = 0.8(方差 0.2),各干高度不一。
  7. Spine:Shape = 明显的向外弧线,枝条从根部就向外张开。
  8. Forces:Gnarl = 0.3,灌木比乔木更杂乱。

常见错误:把灌木做成“一根主干 + 分枝”就是缩小版的树,看起来会很怪。灌木必须从地面就分叉,没有明显的单一主干。

The key to a shrub is that several trunks emerge from the ground at the same time. Here is how:

  1. Select the Tree root node, choose Add → Branch, and name it Stems.
  2. This is a “first-level branch”, but it is not one trunk — it is a group of them.
  3. Generation:Mode = Absolute (a fixed count), Absolute:Number = 5 (variance 2).
  4. 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.
  5. Generation:Orientation:Sweep = 0 with variance 360, so each stem heads off in a different direction.
  6. Spine:Length = 0.8 (variance 0.2) so the stems differ in height.
  7. Spine:Shape = a pronounced outward arc, so the stems splay outward right from the base.
  8. 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:ModeProportional
Generation:Proportional:Number6(方差 3)
Generation:Frequency中上部为主
Spine:Length0.6(方差 0.2)
Spine:Shape向外弧线
Segments:Length5
Segments:Radial4
Forces:Gnarl0.35

灌木通常不需要第三级枝——用叶片填充体积更划算。

Select Stems, choose Add → Branch, and name it Twigs.

ParameterSuggested value
Generation:ModeProportional
Generation:Proportional:Number6 (variance 3)
Generation:FrequencyMainly the middle and upper sections
Spine:Length0.6 (variance 0.2)
Spine:ShapeOutward arc
Segments:Length5
Segments:Radial4
Forces:Gnarl0.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(形状控制)。这是官方文档里少数明确写出的成型技巧。

原理

Shape Control 挂在得到的效果
树干上一棵圆球形的"棒棒糖"树——所有枝条被约束成一个球形
第二级生成器上枝条上长出一个个团块(puffs)——这正是团状灌木的形态

默认形状是球体(Sphere),可以改成其它形状。

操作顺序

  1. 先搭好骨架(树干 + 一级枝),但先不要加叶片。
  2. 选中需要约束形状的那一级生成器,启用 Shape Control。
  3. 调整形状的位置、尺寸、分布,直到团块轮廓满意。
  4. 最后才加叶片、噪波与力场。

官方给的一条关键规则

在 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 toResult
The trunkA spherical “lollipop” tree — every branch is constrained into a ball
A second-level generatorPuffs 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

  1. Build the skeleton first (trunk + first-level branches), but do not add leaves yet.
  2. Select the generator level whose shape you want to constrain and enable Shape Control.
  3. Adjust the shape's position, size and distribution until the mound's outline looks right.
  4. 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.

5第三步:叶片Step 3: Leaves

选中 Twigs,Add → Leaf Mesh。

  • 叶片尺寸比乔木小:Leaves:Size X/Y ≈ 0.05 / 0.08。
  • 数量要大:Generation:Proportional:Number = 8–12。灌木的茂密感全靠叶片。
  • Leaves:Fold = 0.25,Leaves:Bend = 0.2。
  • Leaves:Rotation 方差给大一些(50–70),让枝叶看起来蓬松。

用 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
  • The base meets the ground naturally
  • Triangle count is under 8,000
  • There are only 2–3 LOD levels

案例四 草与地被

Case 4 Grass and Ground Cover

进阶约 30–45 分钟草地被Zone散布

IntermediateAbout 30–45 minutesGrassGround CoverZoneScattering

草的做法和树完全不同:不需要层级结构,而是用 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

1起点选择Choosing a Starting Point

用 tree_templates/Games/Grass.spm 或 tree_templates/VFX/_Grass.spm 作为起点。也可以从 Blank 开始,自己加 Zone。

草的高度参考:0.1–0.6 米。本案例取 0.35 米。

Start from tree_templates/Games/Grass.spm or tree_templates/VFX/_Grass.spm. You can also start from Blank and add a Zone yourself.

For real-world scale, grass runs 0.1–0.6 m; we use 0.35 m here.

2第一步:建 ZoneStep 1: Create the Zone

  1. 选中 Tree,Add → Zone。
  2. 在视图里会看到一个区域框。调整它的大小,本案例设成 1×1 米、高度 0.5 米。
  3. Generation:Resolution 控制散布的密度精度。
  1. Select Tree and choose Add → Zone.
  2. A zone box appears in the viewport. Resize it; for this case set it to 1×1 m with a height of 0.5 m.
  3. Generation:Resolution controls the density resolution of the scattering.

3第二步:加入草叶网格Step 2: Add the Blade Meshes

Zone 本身不产生几何体,它需要一个“被散布的对象”。有两种做法:

  1. 用 Zone Mesh 条目:在 Zone 的 Meshes 组里添加条目,每个条目挂一个草叶网格(.obj / .fbx)。
  2. 用子生成器:在 Zone 下加 Leaf Mesh,让程序化生成草叶。

推荐第一种:草叶数量极大,用现成的低模网格最省事。官方 samples/Games/ 里有可参考的草叶资源。

在 Meshes 组里添加 3 个条目,各挂一种草叶网格(直立型、弯曲型、带穗型),用 Meshes:Weight 控制混合比例(例如 0.5 / 0.3 / 0.2)。

A Zone produces no geometry of its own; it needs something to scatter. There are two ways to do this:

  1. Use Zone Mesh entries: add entries in the Zone's Meshes group, each pointing at a blade mesh (.obj / .fbx).
  2. 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:Scale0.7 – 1.3高度随机。真实草地高矮不齐
Placement:OffsetZ 轴贴合地面确保草根不悬空也不入土
Meshes:Count80–1501 平方米的草叶数量

草的三个随机必须开:位置随机、朝向随机、缩放随机。少任何一个,草地都会显得像塑料草坪。

In the Placement group, set:

ParameterSuggested valueNotes
Placement:PlacementRandomRandom scattering
Placement:RotationRandom 0–360 around ZMust be random, otherwise every blade faces the same way and it reads as fake immediately
Placement:Scale0.7 – 1.3Randomised height. Real grass is uneven
Placement:OffsetSnap to the ground on ZKeeps the roots from floating above or sinking into the ground
Meshes:Count80–150Blade 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.

5第四步:根部变暗Step 4: Darkening the Base

草地最容易露馅的地方是根部——草叶与地面接触处如果没有阴影,会像插在纸上。

在 Ambient Occlusion 组里给草叶根部加深。SpeedTree 的顶点色红通道存 AO,所以这一步会写进顶点色。

渲染时切到 _Vertex Colors/__Red.fx 检查:应该看到草叶底部明显比顶部暗。

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)

草有几个与其他植物完全不同的硬性约束。官方文档明确规定,做错会导致草在引擎里根本不显示或表现异常:

约束说明
只能有一个 LOD草模型必须只有一个 LOD 级别。草系统本身没有 LOD 概念,多级 LOD 不会生效。
只能有一个材质整个草模型必须只使用一个材质。
不能用公告板因为草系统没有 LOD,所以最低 LOD 也不能使用公告板。这一点与树的做法完全相反。
要勾选 "Used as grass"需要在 Compiler 里勾选该选项,否则引擎不会把模型当作草来处理。

为什么和树相反

树靠 LOD + 公告板控制远处性能;草靠引擎的草地系统(密度图、实例化渲染)来控制。所以不要把树的 LOD 思路套到草上——那样只会白做工,还可能让草完全不显示。

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:

ConstraintNotes
One LOD onlyA 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 onlyThe entire grass model must use a single material.
No billboardsBecause 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 checkedYou 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 压进同一个字节,比常规模型更省。草的数量极大,所以压缩更激进。
  • 如果是大范围草地,考虑用 __Unity (one draw call).ini 这类合并绘制的预设,把整片草压到一次 draw call。
  • 草叶网格的分段数取偶数,并且要有一条顶点沿叶片中心线走——否则在风中弯曲时会出现形变瑕疵。
  • 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
  • Three or more blade shapes are blended
  • The base is darkened with AO
  • Wind weights are high, so the grass sways
  • There is exactly one LOD level
  • Only one material is used
  • No billboard is used
  • “Used as grass” is checked
  • Standard_Grass vertex packing is used
  • Triangle count is under 3,000

案例五 棕榈树

Case 5 Palm Trees

进阶约 45–60 分钟棕榈Frond热带单体结构

IntermediateAbout 45–60 minutesPalmFrondTropicalSingle-stem Structure

棕榈的结构极其特殊:一根不分叉的直干 + 顶部一丛巨大的羽状叶。这正好是 Frond 节点最擅长的场景。做好棕榈的关键在于叶片的下垂弧线和叶柄的处理。

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

1起点选择Choosing a Starting Point

用 tree_templates/Games/Palm.spm 或 tree_templates/VFX/Palm.spm 作为起点。官方成品 samples/Games/Palm/Palm_Desktop.spm 与 samples/VFX/Sample_Palm/Palm.spm 可以打开对照。

参考高度:棕榈 5–20 米,本案例取 8 米。

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.

2第一步:做直干Step 1: Build the Straight Trunk

棕榈的树干特征:直、细、不分叉、表面有环状叶痕。

参数建议值说明
Spine:Length1.0
Spine:Shape接近直线,或极轻微的单向弯曲棕榈干很直,不要加太多弯曲
Spine:Noise极小(0.02)只需一点点不规则
Forces:Gnarl0.03棕榈几乎不需要扭曲
Segments:Length20+干很长,段数要够
Segments:Radial10
Generation:First0.75只在顶部 25% 长叶,下部完全裸露

树干表面的环状叶痕靠材质表现。官方 samples/Games/Palm/Bark/ 里有 Palmetto_bark_2(棕榈树皮)、Stem_1(叶柄)、Cap_1 等现成贴图。

给树干加一个 Cap 封住顶部。

A palm trunk is straight, slender, unbranched, and ringed with old leaf scars.

ParameterSuggested valueNotes
Spine:Length1.0
Spine:ShapeNearly straight, or an extremely slight one-way bendPalm trunks are very straight — do not add much curvature
Spine:NoiseVery small (0.02)Just a hint of irregularity
Forces:Gnarl0.03Palms need almost no gnarl
Segments:Length20+The trunk is long, so it needs enough segments
Segments:Radial10
Generation:First0.75Fronds 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.

Add a Cap to the trunk to close the top.

3第二步:做羽状叶(核心)Step 2: Build the Fronds (the Core)

选中树干,Add → Frond,命名 Fronds。

参数建议值说明
Generation:ModeAbsolute 或 Interval棕榈叶数量固定,用绝对数量更直接
Generation:Absolute:Number14(方差 2)12–16 片叶
Generation:Frequency只在顶部一小段为 1与 Generation:First = 0.75 配合
Generation:Orientation:Sweep0,方差 360叶片绕干均匀分布
Generation:Orientation:Alignment0.2 – 0.4叶片向外张开,不是贴着干
Spine:Length1.8 – 2.5叶片比树干还长,这是棕榈的尺度特征
Spine:Droop0.4 – 0.6最关键。棕榈叶有明显的下垂弧线
Spine:Shape先上凸再下凹的 S 形叶片基部上扬、中段平展、末端下垂

然后调 Shape 参数组控制整片叶子的轮廓:

  • Shape:Style 选合适的羽叶风格。
  • Shape:Position 控制小叶沿叶轴的分布。
  • Shape:Size 控制小叶的尺寸变化——通常叶片中段的小叶最长,两端渐短。

做棕榈叶的三个要点

  1. 下垂:Spine:Droop 不够大,叶子就会像棍子一样戳出去。
  2. 尺度:叶片长度要大于树干直径好几倍,否则比例不对。
  3. 枯叶:真实棕榈干上会挂着几片枯黄的下垂老叶。做法是复制一份 Frond 节点,缩小、加大 Spine:Droop、换枯叶材质,放在叶片层下方。

Select the trunk, choose Add → Frond, and name it Fronds.

ParameterSuggested valueNotes
Generation:ModeAbsolute or IntervalPalm frond counts are fixed, so an absolute count is more direct
Generation:Absolute:Number14 (variance 2)12–16 fronds
Generation:Frequency1 only over a short section at the topWorks together with Generation:First = 0.75
Generation:Orientation:Sweep0, variance 360Spreads the fronds evenly around the trunk
Generation:Orientation:Alignment0.2 – 0.4The fronds open outward instead of hugging the trunk
Spine:Length1.8 – 2.5The fronds are longer than the trunk — a defining scale cue for palms
Spine:Droop0.4 – 0.6The most important one. Palm fronds have a pronounced droop curve
Spine:ShapeAn S curve: convex first, then concaveThe 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

  1. Droop: if Spine:Droop is not high enough, the fronds stick out like sticks.
  2. Scale: frond length must be several times the trunk diameter, or the proportions are wrong.
  3. 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。

  • Generation:First 调到更低的位置(例如 0.6),让枯叶挂在绿叶层下面。
  • Spine:Droop 加大到 0.7。
  • Spine:Length 缩小到 1.5。
  • 材质换成枯叶贴图。官方资源里有现成的:samples/Games/Palm/Leaves/Dried_Palm/DriedPalm_1.png。
  • 数量减少到 4–6 片。

这一步对真实感提升极大——只有绿叶的棕榈看起来像塑料模型。

Select Fronds, duplicate it with Actions → Duplicate, and rename the copy Dead Fronds.

  • Lower Generation:First (to 0.6, for example) so the dead fronds hang below the live layer.
  • Raise Spine:Droop to 0.7.
  • Reduce Spine:Length to 1.5.
  • Swap the material for a dead-frond texture. There is a ready-made one in the official assets: samples/Games/Palm/Leaves/Dried_Palm/DriedPalm_1.png.
  • Cut the count to 4–6.

This step adds a great deal of realism — a palm with only green fronds looks like a plastic model.

5第四步:果实与细节(可选)Step 4: Fruit and Detail (Optional)

有些棕榈顶部会有一串果实。做法是在树干顶端加一个小的 Leaf Mesh 或 Zone,挂上果实网格。

官方 samples/Games/Palm/Meshes/ 里有 Stalk.obj 与 Stalk_Hero.obj(叶柄网格),可以用来做更精细的叶柄,或者用它们替换程序化生成的叶柄。

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.

6第五步:风与导出Step 5: Wind and Export

  • 棕榈叶面积大、质量轻,风力权重应该很高(0.8–0.95)。
  • 树干几乎不动(0.02–0.05)。
  • 叶片之间的相位要错开,否则整丛叶会同步摆动,像一块板。
  • 导出时注意:棕榈叶数量少但每片很大,不适合用公告板做 LOD(形状太特殊,公告板会明显失真)。用几何体降级更好。
  • 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

藤蔓是所有植物类型里唯一一个官方提供完整分步教程的——因为 SpeedTree Modeler 10 新增了独立的 Vine 生成器。它本质上是「施加了物理模拟的 Branch 生成器」:控制点被当作带重力与约束的粒子来求解,因此能自然下垂、互相缠绕、贴合碰撞体。

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

Vine 生成器和其他生成器最大的不同在于:它的形状是算出来的,不是参数直接指定的。

特性说明
控制点 = 粒子脊线的控制点被当作粒子求解,受重力与约束作用。Segments:Accuracy 控制粒子数量。
不会穿过地面粒子受地面约束,所以藤蔓不会垂到地下。
只把几何力场当碰撞体重要:藤蔓不响应几何力场的吸引 / 规避行为,只把力场当作一个碰撞体。所以不能用"吸引力场把藤蔓拉过去"这种思路。
有 pass 顺序要求Vine 生成器必须处在产生该几何力场的生成器之后的 pass 里,否则力场不生效。
性能敏感官方明确建议:迭代次数与分段数尽量保持最低。

藤蔓独有的参数

参数作用
Spine:StyleDefault(自由模拟)或 Match parent(贴合父级枝条)。做低模游戏藤蔓时用后者。
Spine:Droop:Style下垂开关。摆位时先设为 Off,摆好位置后再设为 On 测试重力——这是官方给的关键技巧。
Spine:Droop:Amount下垂强度。
Spine:Droop:Friction摩擦。影响藤蔓在碰撞体表面滑动的阻力。
Spine:Droop:Stiffness刚度。越高越挺、越低越软。
Spine:Droop:Iterations迭代次数。越高越稳定,也越慢。
Spine:Droop:Resolve steps求解步数。
Spine:Droop:Self-collide自碰撞。开启后藤蔓自己不会穿过自己。
Match parent: Start / EndMatch parent 模式下的起止范围。
Pin: Start / End / Hand-drawn / Additional钉住端点。关闭 Pin 可以让藤蔓脱离模型自由垂落。

The biggest difference between the Vine generator and every other generator is this: its shape is solved, not specified directly by parameters.

PropertyNotes
Control points = particlesThe spine's control points are solved as particles under gravity and constraints. Segments:Accuracy controls the particle count.
It will not pass through the groundThe particles are constrained by the ground, so the vine never droops below it.
Geometry forces are treated as collision bodies onlyImportant: 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 requirementThe Vine generator must be in a later pass than the generator that produces that geometry force, or the force has no effect.
Performance-sensitiveThe official guidance is explicit: keep iteration count and segment count as low as possible.

Parameters unique to vines

ParameterPurpose
Spine:StyleDefault (free simulation) or Match parent (follow the parent branch). Use the latter for low-poly game vines.
Spine:Droop:StyleThe 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:AmountDroop strength.
Spine:Droop:FrictionFriction. Governs the resistance as the vine slides across collision surfaces.
Spine:Droop:StiffnessStiffness. Higher is more rigid, lower is more supple.
Spine:Droop:IterationsIteration count. Higher is more stable and slower.
Spine:Droop:Resolve stepsSolver steps.
Spine:Droop:Self-collideSelf-collision. When enabled, the vine will not pass through itself.
Match parent: Start / EndThe start and end range in Match parent mode.
Pin: Start / End / Hand-drawn / AdditionalPins the endpoints. Turning Pin off lets the vine detach from the model and fall freely.

2方法 A:程序化藤蔓(官方流程)Method A: Procedural Vines (official workflow)

这是官方文档给出的第一条完整流程,适合批量生成、需要自动贴合的场景。

  1. 添加 Vine 生成器,三种方式任选:
    • 挂到某个父级生成器下;
    • 用 Projector 射线投射到模型表面;
    • 从 Zone 生成器里长出来(适合一片藤蔓覆盖)。
  2. 创建几何力场——用你希望藤蔓与之交互的那些生成器或网格来生成一个 geometry force。这一步决定了藤蔓会"缠在什么上面"。
  3. 在 Vine 生成器属性里启用这个几何力场。
    注意:Vine 生成器必须处在产生该力场的生成器之后的 pass 里,否则力场不生效(会出现"藤蔓直直穿过去"的现象)。
  4. 调参数:
    • 需要更多细节或更准确的碰撞 → 提高 Segments:Accuracy;
    • 先把 Spine:Droop:Style 设为 Off,此时藤蔓不受重力,方便你把它摆到正确的位置;
    • 位置对了之后,再把 Droop:Style 设为 On,观察它受重力后的自然垂落;
    • 用 Droop:Amount / Stiffness / Friction 微调下垂形态。

官方给的这条技巧值得单独记住: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.

  1. 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).
  2. 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”.
  3. 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”).
  4. 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)

游戏里的藤蔓通常只是"贴着墙的一层装饰",不需要真实物理模拟。官方为此给了专门的低模流程:

  1. 把 Vine 生成器挂到一个 Branch 生成器下面。
  2. 把 Spine:Style 设为 Match parent——藤蔓会贴合父级枝条的形状,而不是自由模拟。
  3. 调整 Match parent: Start / End 控制藤蔓在父级上的起止范围。
  4. 调整 Droop 让它有轻微下垂感。

这种模式下每个父级只生成一个节点,所以面数非常可控。需要更省的话,官方还提到可以用 Shell 生成器——它能把父级枝条包裹在"苔藓、藻类或低模藤蔓"里,比真的生成藤蔓几何体更省。

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:

  1. Attach the Vine generator under a Branch generator.
  2. Set Spine:Style to Match parent — the vine follows the shape of the parent branch instead of simulating freely.
  3. Adjust Match parent: Start / End to control where the vine starts and ends along the parent.
  4. 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.

4方法 C:手绘英雄藤蔓(官方流程)Method C: Hand-Drawn Hero Vines (official workflow)

需要精确控制缠绕路径的主角镜头用这条:

  1. 添加 Vine 生成器(位置任意)。
  2. 创建并启用几何力场。
  3. 切换到节点模式(Node Mode),用 gizmo 把藤蔓的起点摆到你想让它垂落的位置的上方。
  4. 用 Bend 工具调整走向。
  5. 把 Droop:Style 设为 On,逐步增大 Amount。
  6. 如果需要让藤蔓脱离模型自由垂落,关闭 Pin:Start / Pin:End。

相关模板:internal_templates/hand_drawn_branch.stt、hand_drawn_subd_branch.stt、hand_drawn_target.stt。

Use this one when a hero shot needs precise control over the winding path:

  1. Add a Vine generator (anywhere).
  2. Create and enable a geometry force.
  3. Switch to Node Mode and use the gizmo to place the vine's start point above where you want it to hang.
  4. Shape the path with the Bend tool.
  5. Set Droop:Style to On and increase Amount gradually.
  6. If you want the vine to detach from the model and hang freely, turn off Pin:Start / Pin:End.

Related templates: internal_templates/hand_drawn_branch.stt, hand_drawn_subd_branch.stt, hand_drawn_target.stt.

5方法 D:沿引导线生长(官方流程)Method D: Growing Along a Guide (official workflow)

想让藤蔓沿着一条你指定的路径长(例如沿着栏杆、灯柱、格架):

  1. 添加一个生成器,用它创建一个几何力场。
  2. 手绘一条枝条(或者把程序化枝条转成手绘),作为藤蔓的"引导线"。
  3. 添加 Vine 生成器。
  4. 把藤蔓摆到靠近引导线的位置——可以用方向力或磁力辅助定位。
  5. 启用引导线的几何力场。
  6. 微调 Geometry Force Crawling、Droop 与 Forces。

官方示例:samples/Learning/Vines/Hand_Drawn_Vines.spm(手绘藤蔓)与 Vines_Simulation.spm(藤蔓模拟)。

To make a vine grow along a path you specify (along a railing, a lamp post, a trellis):

  1. Add a generator and use it to create a geometry force.
  2. Hand-draw a branch (or convert a procedural branch into a hand-drawn one) to act as the vine's “guide”.
  3. Add a Vine generator.
  4. Position the vine close to the guide — directional or magnetic forces can help with placement.
  5. Enable the guide's geometry force.
  6. Fine-tune Geometry Force Crawling, Droop and Forces.

Official examples: samples/Learning/Vines/Hand_Drawn_Vines.spm (hand-drawn vines) and Vines_Simulation.spm (vine simulation).

6叶片:别让叶子穿墙Leaves: Don't Let Them Clip Through Walls

藤蔓的叶片比主藤更容易出问题——因为叶片是独立摆放的,很容易穿进它所攀附的那个表面。

官方文档给出的解法是力场对齐(Force Alignment):

  • 官方原话是:为了保证常春藤的叶片不穿过它所生长的墙面,需要用对齐功能。
  • 官方随附的 Vines 示例里,所有叶片都使用了对齐作为参考。
  • 另外还可以用 Generation:Mesh alignment(Tangent / Binormal / Parent XYZ / World XYZ)把叶片对齐到父级网格的表面方向。

藤蔓叶片的其它设置:

  • 叶片挂在 Vine 生成器或子 Branch 上,用 Leaf Mesh。
  • 分布通常比较稀疏,Generation:Frequency 用较低的曲线。
  • 尺寸比树上的叶子略小。

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.

7风力与性能Wind and Performance

  • 藤蔓整体随风摆动,Wind:Weight 可以给 0.3–0.6(比树枝高、比叶片低)。
  • 如果藤蔓是爬在建筑上的,主茎贴墙的部分权重应该调低,否则会明显穿墙。
  • 性能上记住官方那句提醒:迭代次数与分段数尽量保持最低。Spine:Droop:Iterations 和 Segments:Accuracy 是最费的两个参数。
  • 游戏项目优先用方法 B(Match parent),它每个父级只产生一个节点,面数最可控。
  • 导出时藤蔓通常和攀附物一起导出,注意两者的坐标要对齐。
  • 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

案例七 花与蘑菇(非树木类)

Case 7 Flowers and Mushrooms (Non-Tree Plants)

进阶约 30–45 分钟花蘑菇VFX非树木

IntermediateAbout 30–45 minutesFlowerMushroomVFXNon-Tree

SpeedTree 不只做树。花、蘑菇、蕨类这些非树木类植物,用的思路是少量骨架 + 大量网格或叶片。官方 samples/VFX/Sample_Mushroom/Mushroom.spm 是最好的参考。

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

1思路差异How the Approach Differs

树的做法是“用规则递归生成层级”。花和蘑菇的结构简单得多,所以做法反过来:

对象做法
蘑菇用 Branch 做菌柄,用 Branch Mesh 或 Mesh Detail 做菌盖。菌盖直接导入建模好的网格最省事。
花用 Branch 做茎,用 Leaf Mesh 做花瓣(花瓣本质就是叶片,只是材质不同),用 Zone 做花丛。
蕨类用 Frond,参数和棕榈类似但尺寸小、数量多。

Trees are built by “recursively generating a hierarchy from rules”. Flowers and mushrooms are far simpler in structure, so the approach inverts:

ObjectApproach
MushroomsUse a Branch for the stem and a Branch Mesh or Mesh Detail for the cap. Importing an already-modelled cap mesh is the least trouble.
FlowersUse a Branch for the stem, a Leaf Mesh for the petals (petals are essentially leaves with a different material), and a Zone for a bed of flowers.
FernsUse a Frond; the parameters resemble a palm's but smaller in size and greater in number.

2蘑菇的做法Building Mushrooms

  1. 选中 Tree,Add → Branch,命名 Stem(菌柄)。
  2. 菌柄短而粗:Spine:Length = 0.5,Segments:Length = 8,Segments:Radial = 8。
  3. 菌柄通常微微弯曲:Spine:Shape 给一点弧度。
  4. 菌柄根部略粗:Displacement:Flares = 0.5。
  5. 选中 Stem,Add → Branch Mesh(或 Mesh Detail),指定菌盖网格。
  6. 用 Mesh:Scale / Rotation / Offset 把菌盖摆到菌柄顶端。
  7. 菌盖材质需要 Material:Color、Normal、Subsurface。蘑菇的菌盖有很强的次表面散射感,Material:Subsurface Amount 要给得比较高。

官方 samples/VFX/Sample_Mushroom/Bark/ 里有 Mushroom_White 的完整贴图组(AO、Color、Custom、Custom2、Gloss、Height、Metallic、Normal、Specular、SubsurfaceAmount、SubsurfaceColor、VertexDisplacement),可以直接参考通道配置。

做一丛蘑菇时,用 Zone 散布多个蘑菇实例,或者复制多份 Branch Mesh 并随机旋转缩放。

  1. Select Tree, choose Add → Branch, and name it Stem.
  2. The stem is short and thick: Spine:Length = 0.5, Segments:Length = 8, Segments:Radial = 8.
  3. The stem usually bends slightly: give Spine:Shape a little curvature.
  4. The base of the stem is a little thicker: Displacement:Flares = 0.5.
  5. Select Stem, choose Add → Branch Mesh (or Mesh Detail), and point it at the cap mesh.
  6. Use Mesh:Scale / Rotation / Offset to seat the cap on top of the stem.
  7. 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.

3花的做法Building Flowers

花瓣的排布可以直接借用官方的叶序(Phyllotaxy)模式——官方文档明确提到它的一个用法是「末端一个单独的组,就像花瓣」。所以花瓣不需要手工一个个摆,用叶序模式自动排布即可。

  1. Add → Branch 做花茎。细长、略有弯曲:Spine:Length = 1.0,Segments:Radial = 4(花茎很细,不需要圆)。
  2. 在花茎顶端加 Leaf Mesh 做花瓣。花瓣就是叶片,只是:
    • 尺寸更小。
    • Leaves:Fold 和 Bend 给得更大,让花瓣卷曲。
    • 材质用花瓣贴图,Material:Subsurface Amount 给高值(花瓣透光性很强)。
    • Generation:Mode 设为 Phyllotaxy,用 Generation:Phyllotaxy:Arrangement:Children per node 控制每轮的花瓣数(5–8 片)。
    • 用 Generation:First / Last 把花瓣限制在花茎最顶端的一小段内。
  3. 花蕊可以用一个很小的 Branch 或 Mesh Detail。
  4. 叶子长在花茎下部,另加一个 Leaf Mesh 节点,Generation:First 限制在下半段。
  5. 如果花瓣需要贴合花托的曲面,用 Generation:Mesh alignment(Tangent / Binormal)把花瓣对齐到父级网格表面。
  6. 做花丛时用 Zone 散布。

花瓣的透光感是成败关键

花瓣是极薄的透光组织。Material:Subsurface Amount 给低了,花会像塑料片;Material:Subsurface 的颜色应该偏暖(阳光透过花瓣的颜色),而不是花瓣的固有色。官方为此提供了专门的 Subsurface Check 渲染模式用来检查。

官方模板 tree_templates/VFX/_Flower.spm 是一个现成的起点。

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.

  1. 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).
  2. 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.
  3. The stamens can be a very small Branch or a Mesh Detail.
  4. 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.
  5. 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.
  6. 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.
  • Generation:Orientation:Sweep variance 360.
  • Scatter them into fern clumps with a Zone.

5共通的注意事项Points That Apply to All of Them

  • 尺度要准:蘑菇菌盖直径可能只有 5 厘米,花可能只有 3 厘米。尺度错了,在场景里会像巨型植物。
  • 次表面散射要开:花、蘑菇、蕨类都是薄而透光的组织,Material:Subsurface Amount 是它们“活”起来的关键。
  • 用 Zone 做丛生:这些植物很少单独出现,用 Zone 散布更高效。
  • 面数可以放宽:如果它们只出现在近景,可以用较高的面数换取质量。
  • 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)

形态与造型

树看起来很假、很塑料,像一堆纸片

这是最常见的问题,通常由几个原因叠加造成。按下面顺序排查:

  1. 没有加 Gnarl。在 Forces 组里把 Gnarl 设到 0.1–0.3。笔直的枝条是“假”的头号来源。
  2. Jumble 为 0。检查 Generation:Proportional:Jumble 或 Absolute:Jumble,给它 0.2–0.4。真实植物没有完全规整的排布。
  3. 缺少次表面散射。叶片的 Material:Subsurface Amount 如果是 0,叶子会像塑料片。调到 0.3–0.6。
  4. 没有顶点色 AO。切到 _Vertex Colors/__Red.fx 看,如果整棵树一片均匀的灰色,说明没有 AO。树冠内部应该明显比外部暗。
  5. 叶片朝向太一致。给 Leaves:Rotation 和 Leaves:Twist 加方差。
  6. 叶片没有 Fold。给 Leaves:Fold 0.1–0.3,平面卡片立刻有立体感。
树冠形状不对——太圆、太扁或者像刺猬

树冠形状由主枝长度随高度的变化决定,而不是由数量决定。

  • 像刺猬(枝太短太密):增大 Spine:Length,减小 Generation:Proportional:Number。
  • 像伞(枝太长太稀):反过来。
  • 太圆:给 Spine:Length 加曲线,让底部枝条长、顶部短(或反之,取决于树种)。真实的树冠是不规则的。
  • 上下一般粗:用 Generation:Size scalar 曲线控制子节点尺寸随父级位置的变化。

最快的诊断方法:切到 Other/_Flat.fx 平光模式看剪影。剪影对了,树就对了;剪影不对,加多少叶子都救不回来。

枝条太规整,一圈一圈像人工做的

说明你用了过于规整的分布模式,或者缺少随机。

  • 如果是 Steps 模式(阶梯),给 Generation:Steps:Spread 一个非零值,让同层枝条在高度上散开。
  • 给 Generation:Orientation:Sweep 加方差(例如 ±30°),让周向角度不完全均匀。
  • 开 Generation:Orientation:Balanced,它会自动让分布更自然。
  • 增加 Forces:Gnarl。
  • 考虑改用 Phyllotaxy(叶序)模式,它用黄金角 137.5° 排布,天然不规整。
枝叶互相穿插、穿模严重

这是程序化生成的固有问题(因为每个节点独立计算位置,不知道别的节点在哪)。解决办法:

  1. 开 Forces:Repel。这是最有效的办法,让节点之间互相推开。
  2. 适当开启 Forces:Repulse。
  3. 减小 Generation:Proportional:Number,减少节点密度。
  4. 调整 Generation:Orientation:Alignment,让枝条更顺着父级而不是横穿。
  5. 用 Skin:Intersection 参数控制交接处的处理方式。

注意:完全消除穿插不现实也没必要——真实树冠里枝叶本来就是交织的。目标是让穿插不显眼,而不是零穿插。

树干太细或太粗,比例不对

树干粗细由几个因素共同决定:

  • Skin:Radius —— 蒙皮半径,直接影响粗细。
  • Spine:Length —— 长度变了,视觉上的粗细比例也会变。
  • Displacement:Flares —— 只影响根部。
  • 子级 Branch 的 Generation:Size scalar —— 控制子枝相对父级的粗细。

经验比例:一棵 12 米的橡树,树干胸径约 0.4–0.6 米,也就是树高的 3%–5%。主枝的基部直径约为主干的 1/3。

打开旧文件提示要升级生成器

这是正常的。SpeedTree 10 打开 v8/v9 的文件时会提示 "Upgrade legacy generator(s)..."。旧版的生成器节点结构在新版里已被替换,升级后才能使用全部新参数。

  • 升级前建议先备份原文件,因为升级是不可逆的。
  • 升级后树的形态可能有细微变化(因为算法改了)。
  • 也可以用 Actions → Upgrade legacy generator(s)... 手动升级选中的节点。

面数与性能

模型面数太高,导不进引擎

先搞清楚面数在哪里。用视图区的统计看三个数字:branches / caps / leaf meshes。参考官方示例 Broadleaf_Field.spm 的分布——叶片占 78%,枝条只占 22%。

所以优化顺序应该是:

  1. 先减叶片(收益最大):
    • 减小 Generation:Proportional:Number。
    • 降低 Leaves:Size 的同时提高数量——不对,应该反过来:提高尺寸、减少数量。
    • 用 Level of Detail:Frond count 与 Frond size scalar 在低 LOD 减少并放大叶片。
    • 把 Leaf Mesh 换成 Batched Leaf 或普通 Leaf。
  2. 再减枝条:
    • 降低 Segments:Length 与 Segments:Radial。
    • 提高 Level of Detail:Branch volume threshold,让细枝在低 LOD 消失。
    • 减少枝条层级(第 4 级之后改用叶片营造密度)。
  3. 最后用 LOD:确保最后一级是公告板。
叶片太密导致渲染很慢 / 有闪烁

这是 overdraw(重叠绘制)问题:同一像素被多片半透明叶子重复绘制。

诊断:切到 Other/Overdraw.fx 渲染模式。颜色越亮说明该区域被重复绘制次数越多。树冠中心出现大片高亮就是问题所在。

解决办法:

  • 减少 Generation:Proportional:Number。
  • 增大 Leaves:Spread,让叶片散开而不是挤在一起。
  • 增大单叶尺寸、减少叶片总数(视觉体积相同,但覆盖次数少)。
  • 用 Shade Pruning 剔除树冠内部受光不足的叶片——它们本来也看不见。
  • 用 Leaves:Distribution 曲线让叶片集中在枝条外围而非内部。
LOD 切换时明显跳变
  • 检查 Level of Detail:Transition range,增大它让过渡更平滑。
  • 逐级检查 Branch volume threshold 的梯度。如果 LOD1→LOD2 之间阈值跳得太大,树冠会突然瘦一圈。让梯度均匀。
  • 让 Level of Detail:Frond size scalar 在低 LOD 逐级放大,补偿减少的数量。
  • 公告板的 Level of Detail:Billboard start 不要设得太早。如果 LOD1 就用公告板,近距离切换会非常明显。
  • 确认 Level of Detail:Screen area scale 的设置符合实际观察距离。
远处看树变成一个扁片,很难看

这是公告板(Billboard)的固有问题。公告板是把整棵树渲染到几张交叉平面上,从某些角度会看出“扁”。

  • 延迟公告板的启用:把 Level of Detail:Billboard start 往后调一级。
  • 确认公告板贴图的 Material:Subsurface Amount 正确——渲染模式里有专门的 Billboard_Subsurface_Amount.fx 用来检查这个。
  • 对于形状特殊的植物(棕榈、蘑菇),不要用公告板,改用几何体降级。
  • 如果是大面积森林,公告板的朝向通常需要引擎侧设置成“面向相机”或“十字交叉”,在引擎里调。
导出的文件很大
  • 检查是否导出了不需要的 LOD 级别。
  • 用 Unpacked 以外的贴图打包方案(Standard / UnrealEngine / Unity)可以显著减少贴图数量。
  • 贴图分辨率不要超过需要。远处植被的贴图 1024 甚至 512 就够。
  • 如果是 Alembic(.abc)且带生长动画,文件大是必然的——那是逐帧烘焙的几何体。只对近景镜头导出动画。

材质与贴图

叶片边缘有一圈黑边或白边

这是 Alpha 通道的问题,通常有两个原因:

  1. Alpha 不干净:贴图里叶子的边缘有半透明像素残留。切到 _Material/____Opacity.fx 渲染模式检查,Alpha 边缘应该干净利落。需要回到图像软件里修 Alpha。
  2. Mipmap 生成方式不对:远处 LOD 时 Alpha 被平均掉了,边缘出现黑边。导出到 UE 时要用 _UnrealEngine.xml 打包方案,它设置了 MipGenerationFlag="AlphaIsOpacity",正是为了解决这个问题。

补充:如果叶片边缘偏暗,检查 Material:Color 的 RGB 是否在 Alpha 为 0 的区域留下了颜色(应该填充与叶子相近的颜色,而不是黑色)。

叶子看起来像塑料片,不透光
  1. 检查 Material:Subsurface Amount,这是关键参数。0 表示完全不透光。
  2. 检查 Material:Subsurface 颜色贴图。叶片的次表面颜色通常是偏黄绿的暖色(阳光透过叶子的颜色),不是叶子的固有色。
  3. 在 Lighting 组里检查 Translucency 与 Subsurface 的贡献。
  4. 用渲染模式 __Subsurface_Check.fx 检查次表面设置是否合理。
树皮贴图在细枝上糊掉了

这是纹素密度(texel density)不一致:树干和细枝用了同样的 UV 平铺次数,但细枝周长小得多,于是同样的贴图被压缩到很小的面积上。

诊断:切到 Other/Texel_Density.fx,颜色突变的地方就是密度不一致的地方。

解决:

  • 调 UV Mapping:U —— U 控制纹理绕圆周重复几次。细枝应该比树干重复更少次(让每个纹素对应更小的实际尺寸)。
  • 调 UV Mapping:V 控制沿长度方向的重复。
  • 确认 UV Mapping:Style 选对了展开方式。
贴图丢失,模型显示成灰色或花屏
  • 确认贴图文件路径正确。SpeedTree 默认按相对路径找贴图,移动文件后路径会断。
  • 检查渲染模式是不是被切到了某个材质通道模式(如 _Material/___Normal.fx),这时显示的是法线而不是最终效果。
  • 切回 _____Standard.fx 看是否恢复正常。
  • 如果贴图通道名称不符合约定(_Color、_Normal、_Opacity 等后缀),自动匹配会失败,需要手动指定。
法线贴图看起来没效果
  • 确认 Material:Normal 已指定。
  • 检查法线贴图的格式:DirectX 与 OpenGL 的法线贴图绿通道方向相反。用错方向会导致凹凸“反向”(凹的看起来是凸的)。
  • 法线贴图需要切线空间信息。检查顶点打包方案是否包含 tangent(Standard 方案的第三个属性包含 normal/binormal/tangent/ao)。
  • 如果只是想要表面细节而不需要轮廓变化,法线贴图是对的;如果想要轮廓也跟着变,需要用 Displacement(置换)。
置换(Displacement)没有效果

置换真的移动顶点,所以必须有足够的网格密度才能表现出来:

  1. 提高 Segments:Length(例如 16–24)和 Segments:Radial(例如 10–12)。
  2. 确认 Displacement:Amount 不是 0。
  3. 确认 Displacement:Source 指定了贴图。
  4. 调整 Displacement:U scale / V scale,如果贴图缩放太大,置换会变得非常细微看不出来。
  5. 检查 Displacement:Sharpness 和 Displacement:Fine。

如果段数不够就加大 Amount,会出现难看的尖刺而不是平滑的起伏。

风力与动画

风力参数调了没反应

按顺序检查这几个开关:

  1. 根节点 Tree 上的 Wind:Apply 是否开启。
  2. 该节点上的 Wind:Apply 是否开启。
  3. Forces:Allow forces 是否开启(有些设置会互相影响)。
  4. Wind:Weight 是否真的不是 0。
  5. 切到 _Wind Weights/Level 1.fx 渲染模式,看权重到底有没有被写入。如果一片黑,说明权重没生效。
  6. 注意:SpeedTree Modeler 里的风力是参数预览,真正的动画在引擎里由运行时计算。Modeler 里可能只显示静态或简单摆动。
整棵树像一块板子一样同步摆动

这是相位没有错开。解决办法:

  • 增大 Wind:Offset 的方差,让每个节点有不同的相位。
  • 使用 Wind:Level offset,它按层级自动错开相位。
  • 确认 Wind:Inherited weight scale 设置合理,让末梢比父级响应更剧烈。

真实的树:树干慢而小幅,细枝快而大幅,两者频率不同。所以 Games Shared Motion(整体运动)和 Games Ripple Motion(涟漪运动)要分别配置,不能只调一个。

导出到引擎后没有风动效果
  • 确认导出时选了正确的预设(UE 用 __UnrealEngine (ST).ini,Unity 用 ___Unity.ini)。用 Generic FBX.ini 导出会丢失 SpeedTree 的风力数据。
  • 确认顶点打包方案包含风力属性。Standard 方案的第 4、5 个属性就是风力数据。
  • 引擎侧需要启用 SpeedTree 材质与风力系统。UE 的 SpeedTree 材质是专用的,不能随便换成普通材质。
  • 检查引擎的风力强度设置是否过低。
生长动画怎么导出
  • 用 export_presets/VFX/Growth.ini 预设。
  • 通常导出为 Alembic(.abc),因为生长动画是逐帧烘焙的几何体。
  • 在 Growth 参数组里设置时序:Timing(什么时候开始长)、Speed scale(长多快)、Unfurl(叶片展开)。
  • 用 Season:Descendant offset 类似的思路,让不同层级的生长有时间差。
  • 参考 samples/Learning/Growth/Sapling_Growth.spm 与 Trellis_Growth.spm。

界面与操作

找不到某个参数
  1. 用 Properties 面板顶部的 Search properties.. 搜索框。输入关键词(如 wind、segments)即可过滤。
  2. 确认选中的节点类型对不对。很多参数只在特定节点上存在——例如 Skin 组只在 Branch 上有,Leaves 组只在叶片类节点上有,Cap 组只在 Cap 节点上有。
  3. 确认参数组没有被折叠。参数按组显示,点组标题展开。
  4. 有些参数只在特定的 Mode 下才出现。例如选了 Generation:Mode = Proportional,就只有 Proportional 相关的参数;切成 Absolute 才会出现 Absolute 的参数。
视图操作不熟,转不动/缩放不了
操作鼠标
旋转视角按住中键拖动(或 Alt + 左键)
平移视角按住中键 + Shift 拖动
缩放滚轮
缩放到全模型工具栏 Zoom,或按快捷键
框选放大工具栏 Zoom → 框选
选中生成器Mode 切到 Generator,在视图里点击枝条
选中单个控制点Mode 切到 Node,点击控制点

如果视图完全没有响应,检查是不是有一个模态对话框被主窗口挡住了。

节点树太乱,找不到想要的节点
  • 给节点改名。选中节点按 F2 或右键 Rename。这是最有效的办法。
  • 用 Actions → Layout generators 自动整理节点树布局。
  • 用 Actions → Icon colors 给不同用途的节点设置不同颜色,一眼就能区分。
  • 用 Actions → All like selected(Shift+L)快速选中所有同类节点,批量改参数。
  • 用 Actions → Make all generator names unique 批量解决重名。
  • 用 Actions → Select and reveal hidden nodes 找出被隐藏的节点——经常是“我明明加了节点怎么没效果”的原因。
改了参数但模型没变化
  1. 选错节点了。检查 Properties 面板顶部显示的是不是你想改的那个节点。
  2. 节点被隐藏或折叠了。用 Actions → Select and reveal hidden nodes 检查。
  3. 改的是父级但看的是子级。例如改了树干的分段,但看的是叶片。
  4. 参数被覆盖。子节点上的同名参数会覆盖父级的设置。
  5. 在错误的 Mode 下。某些参数只在特定 Generation:Mode 下有效。
  6. 用 Actions → Select nodes with edits 检查是否有手工编辑覆盖了参数。
怎么做一树多变体(批量出树)

不要复制文件改参数——那样容易越改越乱。正确做法:

  1. 把第一棵树调到完全满意。
  2. 只修改根节点或关键节点上的 Random Seeds:Generation。
  3. 另存为新文件。
  4. 重复。每次只改种子,其它参数完全不动。

这样得到的一批树共享完全相同的风格,只有形态不同,视觉上才像同一个物种。可以进一步只改 Random Seeds:Branch(只变枝条形态)或 Random Seeds:Spine(只变脊线)来做更细微的变化。

参考官方做法:Broadleaf_Field.spm(单株)与 Broadleaf_Forest.spm(树林)就是同一套规则的两种版本。

导入与导出

导入的 .obj / .fbx 模型尺寸不对
  • 确认导出模型的软件用的单位。SpeedTree 默认 1 单位 = 1 米,而很多建模软件默认是厘米或英寸。
  • 导入时注意缩放设置。
  • 导入后用 Mesh:Scale 参数调整。
  • 建议:先在场景里放一个人形参考(app_data/man.tga),对照着调整导入模型的尺寸。
怎么把扫描的树(摄影测量)接入 SpeedTree

这是 SpeedTree 的重要能力,官方有完整示例。流程是:

  1. 导入扫描网格(.obj / .fbx)。
  2. 加一个 Target 节点标记对接位置(参考 samples/Learning/Photogrammetry/Oak_Photogrammetry/Target.spm)。
  3. 加 Conversion-Tools 节点做转换:
    • Convert to Trunk(convert_to_trunk.stt)—— 骨架化成可生长的树干
    • Convert to Branch(convert_to_branch.stt)—— 转成枝条
    • Convert in Place(convert_in_place.stt)—— 原地转换,保留网格位置
  4. 用 Stitch 节点把扫描段与程序化枝条缝合。有 Band Stitch(带状)、Wrap Stitch(环绕)、Cut Stitch(切割)、Bake Stitch(烘焙)几种模式。
  5. 用 Mesh Detail 节点在扫描件上叠加更多细节。

完整示例在 samples/Learning/Photogrammetry/,建议按 Target → Convert_To_Trunk → Stitch 的顺序逐个打开研究。

导出到 UE 后材质不对 / 显示异常
  • 必须用 __UnrealEngine (ST).ini 预设,不能用通用 FBX 预设。
  • UE 需要 SpeedTree 专用的材质与导入器。导入时选择 SpeedTree 格式而不是普通静态网格。
  • 贴图打包要用 _UnrealEngine.xml 方案:Texture0 是 _Color(Alpha 存不透明度),Texture1 是 _Normal,Texture2 是 _Subsurface。
  • 如果叶片边缘有黑边,检查 AlphaIsOpacity 的 Mipmap 生成标志是否生效。
  • 确认 UE 项目启用了 SpeedTree 插件。
导出到 Unity 后性能很差
  • 如果是大量重复植被,用 __Unity (one draw call).ini 预设合并绘制。
  • 确认 LOD Group 正确设置,远处的树确实在用低 LOD。
  • 检查 Unity 的 SpeedTree 材质是否启用了正确的 shader。
  • 用 Unity Profiler 确认瓶颈是 draw call 还是面数。如果是 draw call,用合并预设;如果是面数,回 SpeedTree 减面。
想在 Blender / Maya / Houdini 里用,怎么导
  • 用对应的预设:__Blender.ini、____Maya.ini、___Houdini.ini、___3D Studio MAX.ini、__Cinema4D.ini。
  • 安装目录 scripts/ 下有对应 DCC 的导入脚本(scripts/Blender/、scripts/Maya/、scripts/Houdini/、scripts/3ds Max/、scripts/Cinema4D/),用这些脚本导入可以保留风力与 LOD 数据。
  • 如果只需要几何体和贴图,用 __FBX.ini 就够。
  • 需要动画(生长、风)用 _Alembic.ini 导出 .abc。
  • 现代影视管线可以用 _USD.ini 导出 USD。
.spm 文件能不能直接用文本查看或程序处理

可以。.spm 和 .stt 都是 gzip 压缩的 XML。解压后能看到完整的节点树与所有参数值:

<?xml version="1.0" encoding="UTF-8"?>
<SpeedTree Version="8" VersionString="9.5.0" Title="Modeler 9.5.0">
  <Generators>
    <Generator Type="Branch">
      <Level>1</Level>
      <Name>Trunk</Name>
      <Properties>
        <Property>
          <Name>Generation:Mode</Name>
          <Value>0</Value>
        </Property>
        <SplineProperty>
          <Name>Generation:Frequency</Name>
          <Value>1</Value>
          <Variance>0</Variance>
          <Distribution>0</Distribution>
          ...
        </SplineProperty>
      </Properties>
    </Generator>
  </Generators>
</SpeedTree>

这在两个场景下特别有用:

  • 排查差异:两个看起来一样但表现不同的文件,直接 diff XML 就能找到差异参数。
  • 批量处理:可以用脚本批量修改参数(例如统一调整所有文件的 LOD 设置)。

也可以用 File → Export 导出未压缩的 SpeedTree XML 格式。

硬件与环境

软件运行很卡 / 显存不足
  • 降低视图质量设置。参数里有 Viewport 组,以及 Conserve graphics card memory(节省显卡内存)选项。
  • 用 Interactive Degradation(交互降级)参数组,让软件在操作时自动降低显示精度。
  • 切到低 LOD 预览。
  • 隐藏暂时不需要看的节点(Toggle visibility)。
  • 关掉 Post 后处理显示。
  • 如果模型超过百万面(如官方示例的 3M 面),卡顿是正常的,那是影视级密度。
渲染 / 出图很慢
  • SpeedTree Modeler 的渲染是用于预览的,不是最终渲染器。高质量成品应该在 UE / Blender / Maya / Houdini 里渲染。
  • 降低渲染分辨率与采样数。
  • 用 Level of Detail 在预览时切到低级别。
  • 如果只是检查模型,用 _Flat.fx 平光模式最快。
SpeedTree 的授权与版本问题
  • SpeedTree Modeler 是商业软件,采用订阅制。安装目录下有 licensing_client/,负责授权验证。
  • 不同授权等级(如 Indie 版)对导出格式与年收入有限制,使用前请确认自己的授权范围。
  • 本教程基于 SpeedTree Modeler v10.2.0。不同版本的参数名与节点可能有差异,以你实际安装的版本为准。
  • 官方资源库(SpeedTree Store)里的成品模型需要单独购买。

进阶问题

怎么做出树皮上的苔藓
  1. 选中树干,Add → Decal。
  2. 在 Decal:Mesh 指定一个薄片网格(或让它自动生成)。
  3. 材质用带 Alpha 的苔藓贴图。官方 blend_masks/standard/Mottled_1.png 与 Mottled_2.png 是斑点状遮罩,适合苔藓。
  4. 用 Generation:First / Last 限制苔藓只长在树干下半段(真实苔藓多长在阴湿的下部)。
  5. 用 Generation:Frequency 曲线让苔藓越往上越稀。
  6. 增加 Generation:Proportional:Number 让苔藓成片而不是零星。

也可以用 Mesh Detail 挂真实的苔藓网格,效果更立体但面数更高。

怎么做被雷劈/风折的断枝
  1. 选中要折断的枝条,调整 Spine:Break 参数。
  2. 把 Spine:Length 缩短到折断点。
  3. 在断口处加一个 Cap 封口,并给断口换一个暴露木质部的材质。
  4. 断口附近用 Displacement 做出撕裂感。
  5. 加 Fin 节点做断裂处的木刺。
  6. 参考模板 templates/combined/Gash.stt(伤口)与 Peeling_Bark.stt(剥落树皮)。
怎么做板根(热带雨林的支撑根)
  1. 选中树干,Add → Fin。
  2. Fins:Fins 设置鳍片数量(板根通常 3–6 片)。
  3. Fins:Height 设置板根的高度——热带板根可以高达 2–3 米。
  4. Fins:Length 设置向外延伸的长度。
  5. 用 Generation:Orientation:Sweep 加方差,让板根朝不同方向。
  6. 用 Displacement:Amount 让板根边缘不规则。
  7. 也可以用 Base 节点生成,或用 tree_templates/VFX/Base_Split.spm / Base_Umbrella.spm 作为起点。
怎么让树有风吹过的“旗形”树冠

旗形树冠是常年单向强风造成的——枝条全部朝背风侧生长。

  1. 在树干上设置 Forces:Direction,方向指向下风向。
  2. 调 Forces:General Direction 做整体方向控制。
  3. 用 Generation:Orientation:Offset 把整批枝条统一偏向下风向。
  4. 用 Generation:Orientation:Balanced 关闭周向平衡,否则枝条会均匀分布。
  5. 加大 Spine:Droop 让迎风侧的枝条下垂。
  6. 可以给迎风侧的枝条设更小的 Spine:Length(用曲线或手工编辑)。
怎么做四季变化
  1. 准备春/夏/秋/冬四套 Color 贴图,Alpha 通道必须完全一致。命名参考官方约定:xxx_spring.png、xxx_summer.png、xxx_fall.png、xxx_winter.png。
  2. 在材质里配置材质偏移(Material Offset)。
  3. 用 Season:Time scale 控制变化速度,Season:Start offset 控制起始时间。
  4. 用 Season:Descendant offset 让不同层级有时间差——真实的秋天是外围先变色,不是同时变。
  5. 参考官方示例 samples/Learning/Seasons/Seasons.spm 与 Material_Offset_Seasons/Material_Offset_Seasons.spm。

示例目录里的 Uniform.png(统一变化)、Variance.png(带随机差异)、Parent_Curve.png(父级曲线控制)三张图,正好对应三种变化方式。推荐 Variance,最自然。

怎么做落叶效果
  • 在叶片节点上降低 Material:Opacity,或直接隐藏叶片节点。
  • 用 Season 参数组做时间控制。
  • 落叶本身通常是粒子系统做的,不在 SpeedTree 里。SpeedTree 负责让树“变秃”。
  • 可以单独做一个落叶层的节点(小尺寸的 Leaf Mesh),在秋天时通过 Season 参数启用。
模型要交给别人,怎么保证贴图不丢
  • 把 .spm 与所有贴图放在同一个文件夹里,保持相对路径不变。
  • 或者用 File 菜单里的收集/打包功能把所有依赖打包。
  • 导出为引擎格式时,SpeedTree 会把贴图按打包方案合并输出,依赖关系会写进材质文件。
  • 注意 File 参数组里有 Search path(搜索路径)设置,确认路径是相对路径而不是绝对路径。

Form and silhouette

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:

  1. No Gnarl. In the Forces group, set Gnarl to 0.1–0.3. Perfectly straight branches are the number one source of “fake”.
  2. 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.
  3. 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.
  4. 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.
  5. Leaf orientation is too uniform. Add variance to Leaves:Rotation and Leaves:Twist.
  6. 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:

  1. Turn on Forces:Repel. This is the most effective fix: it pushes nodes apart.
  2. Turn on Forces:Repulse where appropriate.
  3. Reduce Generation:Proportional:Number to lower node density.
  4. Adjust Generation:Orientation:Alignment so branches follow the parent instead of cutting across it.
  5. 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:

  1. 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.
  2. 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).
  3. 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:

  1. 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.
  2. 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
  1. Check Material:Subsurface Amount — this is the key parameter. 0 means no light transmission at all.
  2. 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.
  3. In the Lighting group, check the contributions of Translucency and Subsurface.
  4. 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:

  1. Increase Segments:Length (for example 16–24) and Segments:Radial (for example 10–12).
  2. Make sure Displacement:Amount is not 0.
  3. Make sure Displacement:Source points at a texture.
  4. Adjust Displacement:U scale / V scale; if the texture is scaled too large, the displacement becomes too subtle to see.
  5. 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:

  1. Is Wind:Apply enabled on the root Tree node?
  2. Is Wind:Apply enabled on that node?
  3. Is Forces:Allow forces enabled (some settings interact with each other)?
  4. Is Wind:Weight really not 0?
  5. 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.
  6. 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
  1. Use the Search properties.. box at the top of the Properties panel. Type a keyword (such as wind or segments) to filter.
  2. 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.
  3. Make sure the parameter group is not collapsed. Parameters are shown in groups; click a group header to expand it.
  4. 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
ActionMouse
Orbit the viewDrag with the middle mouse button (or Alt + left button)
Pan the viewMiddle mouse button + Shift drag
ZoomScroll wheel
Zoom to the whole modelZoom on the toolbar, or the shortcut key
Marquee zoomToolbar Zoom → drag a box
Select a generatorSet Mode to Generator and click a branch in the viewport
Select a single control pointSet 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
  1. You selected the wrong node. Check that the node shown at the top of the Properties panel is the one you mean to change.
  2. The node is hidden or collapsed. Check with Actions → Select and reveal hidden nodes.
  3. 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.
  4. The parameter is overridden. A parameter of the same name on a child node overrides the parent's setting.
  5. You are in the wrong Mode. Some parameters only apply under a particular Generation:Mode.
  6. 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:

  1. Tune the first tree until you are completely happy with it.
  2. Change only Random Seeds:Generation on the root node or a key node.
  3. Save as a new file.
  4. 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:

  1. Import the scanned mesh (.obj / .fbx).
  2. Add a Target node to mark the attachment points (see samples/Learning/Photogrammetry/Oak_Photogrammetry/Target.spm).
  3. 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
  4. 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.
  5. 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:

<?xml version="1.0" encoding="UTF-8"?>
<SpeedTree Version="8" VersionString="9.5.0" Title="Modeler 9.5.0">
  <Generators>
    <Generator Type="Branch">
      <Level>1</Level>
      <Name>Trunk</Name>
      <Properties>
        <Property>
          <Name>Generation:Mode</Name>
          <Value>0</Value>
        </Property>
        <SplineProperty>
          <Name>Generation:Frequency</Name>
          <Value>1</Value>
          <Variance>0</Variance>
          <Distribution>0</Distribution>
          ...
        </SplineProperty>
      </Properties>
    </Generator>
  </Generators>
</SpeedTree>

This is especially useful in two situations:

  • 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?
  1. Select the trunk, Add → Decal.
  2. Assign a thin sheet mesh to Decal:Mesh (or let it generate one automatically).
  3. 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.
  4. 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).
  5. Use the Generation:Frequency curve to make the moss thinner the higher it goes.
  6. 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?
  1. Select the branch you want to break and adjust the Spine:Break parameter.
  2. Shorten Spine:Length to the break point.
  3. Add a Cap at the break to close it, and give the break a different material that exposes the wood.
  4. Use Displacement near the break to create a torn look.
  5. Add a Fin node for splinters at the break.
  6. See the templates templates/combined/Gash.stt (wound) and Peeling_Bark.stt (peeling bark).
How do I make buttress roots (tropical rainforest support roots)?
  1. Select the trunk, Add → Fin.
  2. Fins:Fins sets the number of fins (buttress roots are usually 3–6).
  3. Fins:Height sets the height of the buttress — tropical buttress roots can reach 2–3 meters.
  4. Fins:Length sets how far they extend outward.
  5. Add variance with Generation:Orientation:Sweep so the buttresses point in different directions.
  6. Use Displacement:Amount to make the buttress edges irregular.
  7. 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.

  1. Set Forces:Direction on the trunk, pointing downwind.
  2. Use Forces:General Direction for overall directional control.
  3. Use Generation:Orientation:Offset to bias the whole batch of branches downwind.
  4. Turn off circumferential balance with Generation:Orientation:Balanced, otherwise the branches will be evenly distributed.
  5. Increase Spine:Droop so the windward branches hang down.
  6. You can give the windward branches a shorter Spine:Length (via a curve or manual editing).
How do I set up seasonal change?
  1. 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.
  2. Configure the material offset in the material.
  3. Use Season:Time scale to control the rate of change and Season:Start offset to control when it starts.
  4. Use Season:Descendant offset to stagger the timing across levels — a real autumn colors the outer foliage first, not everything at once.
  5. 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.

免责声明

非官方文档。本教程为个人整理的学习资料,与 Interactive Data Visualization, Inc.(IDV)、Unity Technologies 及 SpeedTree 官方无任何隶属、合作或授权关系。SpeedTree、SpeedTree Modeler 及相关标识为其各自权利人的商标。

内容来源。教程中的节点名称、参数名称、渲染模式、导出预设与打包格式,主要取自官方 SpeedTree Modeler 10 User Manual(docs.unity3d.com/speedtree-modeler/manual), 并与本机安装的 SpeedTree Modeler v10.2.0 实际文件逐项核对。界面截图与案例配图为该版本的实际运行画面。 参数取值与「经验值」属于教学建议,不是官方推荐值。

版本差异。不同 SpeedTree 版本的节点、参数与界面可能存在差异。官方为 SpeedTree 9 与 10 分别维护了文档, 两者在生成器类型、风力与导出选项上都有变化(例如 Vine 生成器、Rules 系统、Reference 生成器均为 v10 新增)。 请以你实际安装的版本为准。

使用风险。本教程不保证内容的完整性、准确性或适用于特定用途。依据本教程进行建模、导出或生产所造成的任何后果, 由使用者自行承担。生产环境中的面数预算、授权范围与商业使用限制,请以官方授权条款为准。

授权提示。SpeedTree Modeler 是商业软件,采用订阅授权,不同授权等级对导出格式与使用范围有限制。 使用前请确认自己的授权范围。

Disclaimer

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.