可使用类似于绘制高度贴图和纹理的方式在地形上绘制树。然而,树是从表面生长的 3D 对象实体。Unity 使用优化(比如针对远处树的公告牌)来保持良好的渲染性能。这意味着可以实现茂密森林(拥有数以千计的树),而仍然保持可接受的帧率。
工具栏上的 Paint Trees 按钮可用于绘制树:
地形最初没有可用的树原型。为了开始在地形上绘制,需要添加树原型。单击 Edit Trees 按钮,然后选择 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 Lightmap Static | 启用此复选框可向 Unity 指示该游戏对象的位置是固定的并将参与全局光照计算。如果未将游戏对象标记为 Lightmap Static,则仍可使用光照探针为该对象提供光照。 |
可通过两种方法来新建树模型。可以使用 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 按钮来查看地形上更新后的树:
注意:在 3D 建模程序中导入并改变 SpeedTree 模型后,再将其重新导出(扩展名为 .fbx
或 .obj
),可能会丢失 SpeedTree 模型附带的自然风动画功能。
可以将胶囊碰撞体 (Capsule Collider) 添加到新的树资源。首先,将预制件从 Assets 文件夹拖动到场景中,从而实例化场景中的树。然后,使用菜单 Component > Physics > Capsule Collider 来添加碰撞体。下一步,可以执行以下操作之一:
覆盖原始预制件:单击 Inspector 窗口中的 Tree 游戏对象上的 Apply 按钮:
新建预制件:将 Tree 游戏对象拖入 Assets 文件夹。
如果新建预制件,请确保将带有碰撞体的树添加到地形,而不是添加原始的游戏对象。还必须在地形的 Terrain Collider 组件中启用 Create Tree Colliders 设置。
本节仅适用于 Unity 的 Tree Editor 创建的树(具有 __Bend Factor__)。
要让树对风做出反应,首先选择 GameObject > 3D Object > Wind Zone 来创建 Wind Zone。
为了确保将树设置为可以弯曲,请选择__地形__,单击 Inspector 中的 Place Trees 按钮,然后选择 Edit Trees > Edit Tree。如果尚未将 Bend Factor 设置为 1,请进行此设置。
在默认设置下,树的移动非常剧烈。为了修复此问题,请更改每个树类型的 Bend Factor。如果希望一些树类型比其他树类型具有更大的弯曲度,此设置会很有用。若要更改整个 Wind Zone 中的弯曲效果,请直接配置 Wind Zone 组件中的值。为了减少树叶的飘动效果,请将风的湍流度下调到 0.1–0.3 左右,然后一切就会变得更平稳。如果不希望树始终吹向一边,而是希望有一些变化,请将 Main 值减小到与湍流度的值相同。
对于 Tree Editor 树,Unity 的 LOD 系统使用 2D 到 3D 过渡区将 2D 公告牌与 3D 树模型进行无缝混合。这样可以防止 2D 和 3D 树显得过于突兀,这一点在 VR 中至关重要。
对于 SpeedTree 树,请参阅 LOD 和 LOD 组 (LOD Group) 文档以了解关于配置 LOD 组件的更多信息。
2019–01–29 页面已修订并进行了编辑审查
在 2018.3 版中添加了新设置和 SpeedTree 功能