Version:

Vegetation Gem

Vegetation Gem 提供了用于以程序方式填充景观和环境的工具。这些工具由系统和编辑器组件组成,这些组件使用数据驱动的方法在运行时动态地自动选择、放置和管理植被对象。你可以使用这些工具来替换或补充手动放置、编辑和保存关卡中的每个实例。

动态植被系统的许多功能都依赖于其他 Gem 和组件来提供有关环境的数据,例如表面、图像和渐变信号,以指导植被的显示位置和方式。

依赖

Surface Data Gem 允许表面(如地形或网格)发出传达其表面类型的信号或标签。例如,使用 Vegetation Surface Mask Filter 组件,您可以使用包含和排除列表来选择可以在特定表面上放置哪些类型的植被。您还可以使用 Surface Mask Gradient组件将标签重新捕获为渐变信号。

Gradient Signal Gem提供将数据定向到植被系统的组件,从而控制动态植被的外观。将梯度信号与植被修饰符或过滤器结合使用,例如 Position ModifierDistribution Filter 组件,可在世界中生成逼真的随机植被表达式。

提供

组件实体:

关卡组件:

  • Vegetation System Settings 组件
  • Vegetation Debugger 组件

系统组件:

API: Vegetation Gem API 参考

源代码: /Gems/docs/user-guide/components/reference/Vegetation/

Vegetation Areas

动态植被系统围绕 植被区域 的概念构建,该概念描述了植被将在表面上生成的内容、位置、方式以及是否生成。 引擎中的其他系统记录和处理 Vegetation 区域。 他们可以检查世界中的点并对其执行操作,例如放置或阻止植被实例。

O3DE 编辑器 中,植被区域称为 植被层。 您可以使用描述、选择、拒绝或改变潜在植被实例的组件将植被行为添加到植被图层。 这些行为分别称为植被描述符提供者、选择器、过滤器和修饰符。 每个行为都有一个接口,该接口使用新功能扩展系统。 Vegetation Gem 包含每种类型的多个版本,每种类型对其生成的植被实例都有独特的用途和影响。 这些组件公开了一些控件,这些控件允许快速、基于规则、程序地填充世界上任何任意大小的部分,其中包含装饰性内容。 根据其配置,单个植被层可以生成一小片花朵,或者智能地用令人信服的植物和物体的种类和分组覆盖整个世界。

植被实例

植被实例 是放置在世界各地的对象。创建它们时,您可以使用植被描述符配置它们的信息。 其中包括唯一 ID、转换、其他属性和对源植被描述符的引用。

在 O3DE 编辑器中,植被实例显示在植被区域内。它们是根据植被区域的配置以程序方式生成的。

植被描述符

植被描述符 是指定表示一种植被类型所需的所有常见细节的结构。它包括网格和材质资产的数据、它创建的植被实例的类型,以及许多高级参数,这些参数可以启用这些参数来覆盖大多数过滤器和修饰器的行为。在 Vegetation Asset List 组件中或通过 资产编辑器 创建 植被描述符

组名称参数名称描述类型
Weight权重在生成和选择过程中用作乘数,用于更改选择一个描述符而不是另一个描述符的可能性。Float
Advanced启用后,将显示以下通常隐藏的高级设置。Bool
Position用于控制对 Position Modifier组件的逐实例覆盖的设置。
Position Override Enabled启用后, Position Modifier 组件可以使用描述符中指定的每个实例覆盖值,而不是组件配置。Bool
Position Min X覆盖 X 轴上最小位置偏移的值。Float
Position Max X覆盖 X 轴上最大位置偏移的值。Float
Position Min Y覆盖 Y 轴上最小位置偏移的值。Float
Position Max Y覆盖 Y 轴上最大位置偏移的值。Float
Position Min Z覆盖 Z 轴上最小位置偏移的值。Float
Position Max Z覆盖 Z 轴上最大位置偏移的值。Float
Rotation用于控制 Rotation Modifier 组件的逐实例覆盖的设置。
Rotation Override Enabled启用后, Rotation Modifier 组件可以使用描述符中指定的每实例覆盖值,而不是组件配置。Bool
Rotation Min X覆盖 X 轴上最小旋转偏移的值。Float
Rotation Max X覆盖 X 轴上最大旋转偏移的值。Float
Rotation Min Y覆盖 Y 轴上最小旋转偏移的值。Float
Rotation Max Y覆盖 Y 轴上最大旋转偏移的值。Float
Rotation Min Z覆盖 Z 轴上最小旋转偏移的值。Float
Rotation Max Z覆盖 Z 轴上最大旋转偏移的值。Float
Scale用于控制 Scale Modifier 组件的逐实例覆盖的设置。
Scale Override Enabled启用后, Scale Modifier组件可以使用描述符中指定的每个实例覆盖值,而不是组件配置。Bool
Scale Min覆盖最小缩放乘数的值。Float
Scale Max覆盖最大缩放乘数的值。Float
Altitude Filter用于控制 Altitude Filter 组件的每实例覆盖的设置。
Altitude Filter Override Enabled启用后, Altitude Filter组件可以使用描述符中指定的每个实例覆盖值,而不是组件配置。Bool
Altitude Filter Min覆盖过滤器接受的最小高度的值。Float
Altitude Filter Max过滤器接受的最大高度的覆盖值。Float
Distance Between Filter (Radius)用于控制 Distance Between Filter组件的每个实例覆盖的设置。
Distance Between Filter Override Enabled启用后, Distance Between Filter组件可以使用描述符中指定的每个实例覆盖值,而不是组件配置。Bool
Bound Mode在两个实例之间执行距离检查时,此设置确定是否使用网格资源的半径,而不是手动输入的半径

MeshRadius

Radius Min用户定义的距离检查半径。Float
Surface Slope Alignment
Surface Slope Alignment Override Enabled启用后, Slope Alignment Modifier组件可以使用描述符中指定的每个实例覆盖值,而不是组件配置。Bool
Surface Slope Alignment Min覆盖最小对齐强度。Float
Surface Slope Alignment Max覆盖最大对齐强度。Float
Slope Filter
Slope Filter Override Enabled启用后, Slope Filter 组件可以使用描述符中指定的每个实例覆盖值,而不是组件配置。Bool
Slope Filter Min覆盖过滤器接受的最小斜率。Float
Slope Filter Max覆盖过滤器接受的最大斜率。Float
Surface Mask Filter
Override Mode控制 Surface Mask Filter 组件如何考虑覆盖

Disable - 覆盖将被完全忽略

Replace - 覆盖将替换组件中指定的覆盖

Extend - 覆盖将添加到组件中指定的覆盖。
Inclusion Tags一组表面标签,用于指示可以放置植被的位置。SurfaceTagVector
Exclusion Tags一组表面标签,用于指示不放置植被的位置。SurfaceTagVector
Surface Mask Depth Filter用于控制 Surface Mask Depth Filter组件的逐实例覆盖的设置。
Surface Tags一组用于深度比较的表面标签。SurfaceTagVector
Upper Distance Range (m)用于与具有匹配表面标签的最近点进行垂直距离比较的范围。Float
Lower Distance Range (m)用于与具有匹配表面标签的最近点进行垂直距离比较的范围。Float

File: /Gems/Vegetation/Code/Source/Descriptor.cpp

EBus 接口

Vegetation::AreaInfoBus

请求名称描述参数返回
GetLayer获取植被区域的 layer 或宏优先级值。当存在多个重叠时,“GetLayer”和“GetPriority”可用于识别植被区域。NoneFloat
GetPriority获取层中的微优先级值。当存在多个重叠时,“GetLayer”和“GetPriority”可用于识别植被区域。NoneFloat
GetEncompassingAabb获取整个植被区域的轴对齐边界框。NoneAZ::Aabb
GetProductCount获取此植被区域当前生成的实例数。NoneAZ::u32
GetChangeIndex获取一个递增数字,该数字表示自创建以来 Blocker 区域刷新的次数。NoneAZ::u32

File: /Gems/Vegetation/Code/Include/Vegetation/Ebuses/AreaInfoBus.h

Vegetation::AreaRequestBus

请求名称描述参数返回
PrepareToClaim运行任何索赔前检查或逻辑,与位置无关。EntityIdStack& stackIdsBool
ClaimPositions处理一组用于种植植被或执行其他操作的点。EntityIdStack& stackIds, ClaimContext& contextNone
UnclaimPosition每当系统释放已声明的点时处理清理。const ClaimHandle handleNone

文件: /Gems/Vegetation/Code/Include/Vegetation/Ebuses/AreaRequestBus.h

Vegetation::DescriptorProviderRequestBus

Vegetation descriptor providersVegetation Layer SpawnersBlenders 提供来自已定义来源的植被描述符列表。 植被 Gem 附带的组件可以从直接在组件中定义的列表中提供描述符,从外部创建的资产中引用描述符列表,或者将多个描述符列表组合在一起。

请求名称描述参数返回
GetDescriptors当组件准备就绪并完全加载其所有资产时,此方法会创建其活动描述符的列表。DescriptorPtrVec& descriptorsNone

文件: /Gems/Vegetation/Code/Include/Vegetation/Ebuses/DescriptorProviderRequestBus.h

Vegetation::DescriptorSelectorRequestBus

当植被描述符提供程序提供多个选项时, Vegetation Layer Spawner 组件可以使用植被描述符选择器。有一个选择器 Vegetation Asset Weight Selector组件,它根据植被描述符的选择权重字段进行选择。

请求名称描述参数返回
SelectDescriptors使用输入梯度信号和其他参数将描述符集减少到符合选择条件的描述符集。Noneconst DescriptorSelectorParams&
DescriptorPtrVec&

文件: /Gems/Vegetation/Code/Include/Vegetation/Ebuses/DescriptorSelectorRequestBus.h

Vegetation::ModifierRequestBus

Vegetation modifiers 通过更改位置、旋转、缩放、对齐或任何公开的字段,为每个植被实例添加唯一性或变化。 这允许在整个植被区域中使用相同的植被描述符,并且描述符的每个实例都以不同的方式显示。

请求名称描述参数返回
Execute根据配置修改单个植被实例。Vegetation::InstanceDataNone
GetModifierStageInternal(内部):确定运行 Vegetation Modifier 组件的顺序。NoneVegetation::ModifierStage

文件: /Gems/Vegetation/Code/Include/Vegetation/Ebuses/ModifierRequestBus.h

Vegetation::FilterRequestBus

植被区域使用 植被过滤器 来评估每个植被实例数据,并决定是否应该进行任何活动。 Vegetation Layer Spawners 使用过滤器来确定是否创建植被实例。 他们可以选择在植被修饰符运行之前或之后评估过滤器。 在修饰符之前评估过滤器的性能会更好,因为它会跳过不必要的处理,但是当发生位置更改时,它产生的结果不太准确。 在修饰符之后评估过滤器是准确的,因为它会评估实例数据的最终版本。

请求名称描述参数返回
Evaluate评估 InstanceData 中描述的植被是否满足筛选器设置的要求。InstanceDataBool
GetFilterStage获取评估过滤器时的过滤器阶段 (PreProcess/PostProcess)。NoneFilterStage
SetFilterStage设置评估过滤器时的过滤器阶段 (PreProcess/PostProcess)。FilterStageNone

文件: Gems/Vegetation/Code/Include/Vegetation/Ebuses/FilterRequestBus.h