Version: 2019.4
画笔
SpeedTree

可使用类似于绘制高度贴图和纹理的方式在地形上绘制树。然而,树是从表面生长的 3D 对象实体。Unity 使用优化(比如针对远处树的公告牌)来保持良好的渲染性能。这意味着可以实现茂密森林(拥有数以千计的树),而仍然保持可接受的帧率。

有树的地形
有树的地形

绘制树

工具栏上的 Paint Trees 按钮可用于绘制树:

Paint Trees 按钮
Paint Trees 按钮

地形最初没有可用的树原型。为了开始在地形上绘制,需要添加树原型。单击 Edit Trees 按钮,然后选择 Add Tree。在此处,可从项目中选择树资源,并将其添加为__树预制件__以便与画笔结合使用:

Add Tree 窗口
Add Tree 窗口

为便于进行原型设计,SpeedTree 在 Asset Store 上的免费 SpeedTrees 包 中提供了四种 SpeedTree 模型。或者,您也可以创建自己的树。

如果所导入的树预制件支持 Bend Factor__,__Add Tree 窗口将显示用于调整风响应性的 Bend Factor 属性。SpeedTree Modeler 创建的树没有 __Bend Factor__;只有 Tree Editor 创建的树才有。请参阅下文关于__让树在风中弯曲__的部分。

配置 Settings 中的设置(如下文所述)后,可以按照与绘制纹理或高度贴图相同的方法在地形上绘制树。若要从区域中移除树,请在绘制时按住 Shift 键。若要仅移除当前选定的树类型,请在绘制时按住 Control 键。

设置

选择要放置的树之后,可调整其设置以便自定义树的位置和特征。

树的设置
树的设置
属性 功能
Mass Place Trees 创建一批整体覆盖的树,但不绘制在整个地形上。批量放置树后,仍然可以使用绘制功能来添加或移除树,从而创建更密集或更稀疏的区域。
Brush Size 控制可添加树的区域的大小。
Tree Density Tree Density 控制 Brush Size 定义的区域中绘制的树平均数量。
Tree Height 使用滑动条来控制树的最小高度和最大高度。将滑动条向左拖动绘制矮树,向右拖动绘制高树。如果取消选中 Random,可以将所有新树的确切高度比例指定为 0.01 到 2 的范围内。
Lock Width to Height 默认情况下,树宽度与其高度锁定,因此始终会均匀缩放树。然而,可以禁用 Lock Width to Height 选项,然后单独指定宽度。
Tree Width 如果树宽度未与其高度锁定,则可以使用滑动条来控制树的最小宽度和最大宽度。将滑动条向左拖动绘制细树,向右拖动绘制粗树。如果取消选中 Random,可以将所有新树的确切宽度比例指定为 0.01 到 2 的范围内。
Random Tree Rotation 如果为树配置 LOD 组,请使用 Random Tree Rotation 设置来帮助创建随机自然的森林效果,而不是人工种植的完全相同的树。如果要以相同的固定旋转来放置树,请取消选中此选项。
Color Variation 应用于树的随机着色量。仅在着色器读取 _TreeInstanceColor 属性时有效。例如,用 Tree Editor 创建的所有树的着色器将读取 _TreeInstanceColor 属性。
Tree Contribute Global Illumination 启用此复选框可向 Unity 指示树影响全局光照计算。

创建树

可通过两种方法来新建树模型。可以使用 IDV, Inc. 提供的 SpeedTree Modeler 来创建具有高级视觉效果(例如,平滑的 LOD 过渡、快速公告牌以及自然风动画)的树。有关更多详细信息,请参阅 SpeedTree Modeler 文档。或者,也可以使用 Unity 的 Tree Editor 来创建树模型。

在内部,地形引擎通过确定树预制件的根游戏对象上是否存在 LOD 组来区分这两种类型的模型。SpeedTree 预制件具有 LODGroup 组件,但 Tree Editor 预制件没有该组件。

创建树时,将锚点定位在树的基部(树破土而出的位置)。性能取决于树模型的多边形数,因此请确保在平台上进行测试,并在必要时创建更简单的树。另外,对于 Tree Editor 树,每个网格都正好有两种材质:一种用于树体,另一种用于树叶。

用 Tree Editor 创建的树必须使用__自然/软遮挡树叶 (Nature/Soft Occlusion Leaves)__ 和__自然/软遮挡树皮 (Nature/Soft Occlusion Bark)__ 着色器。要使用这些着色器,必须将树放在名为 Ambient-Occlusion 的特定文件夹中,否则树无法正确渲染。将模型放入此文件夹并将其重新导入时,Unity 会使用一种专为树设计的方式计算软__环境光遮挡__。

如果在单独的 3D 建模应用程序中更改导入的树资源,则需要单击 Editor 中的 Refresh 按钮来查看地形上更新后的树:

Refresh 按钮位置
Refresh 按钮位置

注意:在 3D 建模程序中导入并改变 SpeedTree 模型后,再将其重新导出(扩展名为 .fbx.obj),可能会丢失 SpeedTree 模型附带的自然风动画功能。

将碰撞体用于树

可以将胶囊碰撞体 (Capsule Collider) 添加到树资源。首先,单击树资源旁的 > 以打开预制件。

然后,选择 Add Component > Physics > Capsule Collider 来添加碰撞体。单击预制件名称旁的 < 以返回到场景。

还必须在 Terrain Collider 组件中启用 Enable Tree Colliders

让树在风中弯曲

风区可以弯曲树木以模拟风的直接影响。此功能仅可用于通过 Terrain 菜单放置的树。为此,请选择地形,单击 Inspector 中的 Paint Trees 按钮,然后选择 Edit Trees > Add Tree__,再选择树预制件。如果未在 Unity 中创建树,请将 Bend Factor__ 设置为 1。单击地形以放置选定的树。

具有 Bend Factor 的基于地形树通过弯曲和摇摆(根据风区的 TurbulenceMain 属性值),对风区做出反应。Turbulence 设置用于控制树叶的飘动。减小该值可使飘动特效流畅。Main 值用于控制风的主要作用力。要创建风区,请选择 GameObject > 3D Object > Wind Zone

如果风区的 ModeDirectional__,则其相对于树的位置无关紧要。树将向风区方向摇摆。然而,如果风区的 Mode__ 为 Spherical__,则其 Radius__ 必须与树的半径重叠。这样会产生多方向的阵风,风力从中心到边缘衰减。

在默认设置下,诸如阔叶树 (Broadleaf) 预制件(在 Standard Assets Environment 包中提供)之类的树可以平稳而逼真地摆动。但是,如果您使用自己的树预制件,可能需要调整 Wind Zone 属性值。如果树预制件的树干彻底弯向一侧,请尝试减小 Main 值。或者,如果树预制件的树枝过度弯曲或伸展,请减小 Turbulence 值。

树细节级别 (LOD) 过渡区

对于 Tree Editor 树,Unity 的 LOD 系统使用 2D 到 3D 过渡区将 2D 公告牌与 3D 树模型进行无缝混合。这样可以防止 2D 和 3D 树显得过于突兀,这一点在 VR 中至关重要。请注意,公告牌树不接收局部光照(例如点光源和聚光灯)。这些树可使用方向光,但是公告牌上的光照仅在旋转摄像机时更新。

对于 SpeedTree 树,请参阅 LODLOD 组 (LOD Group) 文档以了解关于配置 LOD 组件的更多信息。


  • 2020–02–19 页面已修订

  • 添加了 Tree Editor 树的公告牌限制。

画笔
SpeedTree