地形材质-地形图层混合
一、图层权重和排序
地形材质就如同多个图层的混合体,绘制的混合权重决定了每一层的影响力。
材质图表决定如何解读权重的解读以实现混合效果。
混合图表决定了最终效果中地形对这些权重的使用方式。
可用的混合模式有二:权重混合和Alpha混合。 你可以结合这些方法以创建不同的效果,例如在草地和泥土层上实现积雪。
| 混合模式 | 说明 |
|---|---|
| 权重混合(Weight Blending) | 为材质的所有图层分别分配一个介于0和1.0之间的值,表示相应的百分比值。 地形绘制工具会确保权重混合图层的权重值总和不超过 1.0。 删除多余的值,并适当缩小其他图层,从而使总数恒定为100%。当某一层的绘制权重为100%时,所有其他层的权重值都会变为0%。 这意味着如果你使用绘制工具删除值为100%的图层,则该图层不会被替换,因为所有其他图层的值都是0%。 这会使图层看起来好像没有发生改变。 |
| Alpha混合(Alpha Blending) | 为每一图层分配一个介于0到100%之间的Alpha百分比值。 如果材质图表被设为有序混合,则此方法会遵循图层的应用顺序。 Alpha层独立于其他加权图层而存在,因此当Alpha图层权重增加时,其他现存图层的权重会减小。 |
二、特定于地形的材质节点
1.Landscape Layer Blend节点
Landscape Layer Blend节点将混合多个逐层数值,例如纹理样本或材质。 图层的混合权重越高,对混合结果的影响就越大。
要添加新图层,请点击加号(+)图标。

将图层添加到节点中后,LandscapeLayerBlend节点会显示图层的名称。 此节点的输入如下:

| 编号 | 属性 | 说明 |
|---|---|---|
| 1 | 图层(Layers) | 列出数组中包含的图层。 点击加号图标 () 即可添加新图层。 |
| 2 | 更多图层(Additional Layers) | 显示被折叠的额外图层。 |
| 3 | 图层名称(Layer Name) | 显示图层的唯一名称。 图层名称对应在地形工具窗口的绘制模式中使用的图层名称。 |
| 4 | 混合类型(Blend Type) | 定义此图层使用的混合模式。 选项如下:LB Alpha混合(LB Alpha Blend)、LB高度混合(LB Height Blend)或LB权重混合(LB Weight Blend)。如需更多信息,请参阅地形图层混合类型。 |
| 5 | 预览权重(Preview Weight) | 显示在材质编辑器中预览混合时要使用的权重值。 |
| 6 | 常量图层输入(Const Layer Input) | 定义在不想使用纹理时要使用的RGB值。 适用于图层的调试。 |
| 7 | 常量高度输入(Const Height Input) | 定义在不想使用纹理时要使用的高度值。 |
Landscape Layer Blend节点所用的输入和输出如下:

| 编号 | 项目 | 说明 |
|---|---|---|
| 1 | 图层*图层名称*(Layer Layer Name) | 显示图层的唯一名称。 此输入仅在你为**细节(Details)**面板添加并命名图层后才可用。 |
| 2 | 高度*图层名称*(Height Layer Name) | 定义混合被命名图层所用的高度图。 此输入尽在**混合类型(Blend Type)属性为LB高度混合(LB Height Blend)**的图层上可见。 |
| 3 | 输出(Output) | 输出混合后的结果。 |
所有图层的名称必须唯一。 建议使用能够表明图层内容的描述性名称来命名图层。
2.Landscape Layer Coords节点
Landscape Layer Coords节点将生成UV坐标,用于将地形材质映射到地形。

此节点具有以下选项:
| 编号 | 属性 | 说明 |
|---|---|---|
| 1 | 映射类型(Mapping Type) | 指定将材质或网络映射到地形时要使用的方向。 它包含以下选项: TCMT Auto:使用地形顶点坐标,范围为[0, OverallLandscapeResolution] TCMT XY:使用对象空间XY映射。 等同于TCMT Auto。 TCMT XZ:使用对象空间XZ映射。 推荐用于侧面投影的纹理。 TCMT YZ:使用对象空间YZ映射。 推荐用于侧面投影的纹理。 |
| 2 | 自定义UV类型(Custom UVType) | 输出UV坐标以根据类型将材质映射到地形。 它包含以下选项: LCCT None:不使用自定义UV。 LCCT Custom UV0:使用通道0中的自定义UV。 LCCT Custom UV1:使用通道1中的自定义UV。 LCCT Custom UV2:使用通道2中的自定义UV。 LCCT Weight Map UV:使用原始权重图UV。 |
| 3 | 映射缩放(Mapping Scale) | 将等分缩放应用于UV坐标。 |
| 4 | 映射旋转(Mapping Rotation) | 将旋转(以度为单位)应用于UV坐标。 |
| 5 | 映射平移[U](Mapping Pan [U]) | 将[U]方向的偏移应用于UV坐标。 |
| 6 | 映射平移[V](Mapping Pan [V]) | 将[V]方向的偏移应用于UV坐标。 |
| 7 | 无标记输出(Unlabeled Output) | 输出UV坐标以根据给定属性值将材质映射到地形。 |
3.Landscape Layer Switch节点
你可以使用Landscape Layer Switch节点,在特定图层对地形的某个区域无作用时排除某些材质运算。 这样你就可以在图层的权重为零时删除不必要的计算,从而优化材质。

| 编号 | 属性 | 说明 |
|---|---|---|
| 1 | 参数名称(Parameter Name) | 显示参数的唯一名称。 |
| 2 | 已使用预览(Preview Used) | 如果选中,则使用预览。 |
| 3 | 已使用层(Layer Used) | 如果当前地形区域使用了特定层,则表示应使用的材质网络。 |
| 4 | 未使用层(Layer Not Used) | 如果当前地形区域未使用特定层,则表示应使用的材质网络。 |
| 5 | 输出(Output) | 使用**已使用层(Layer Used)输入或未使用层(Layer Not Used)**输入,具体取决于该层是否对特定的地形区域有所贡献。 |
三、地形图层混合类型
Landscape Layer Blend节点有三种混合模式。 每种图层混合类型用于实现不同的结果。
| 混合类型 | 功能 |
|---|---|
| LB权重混合(LB Weight Blend) | 在所有LB权重混合图层之间实现加权混合。 此类型不依赖顺序。 |
| LB Alpha混合(LB Alpha Blend) | 在LB权重混合图层和LB高度混合图层之外,再实现一个Alpha混合覆层。 所有LB Alpha混合图层均按照其在列表中出现的顺序应用。 例如,在岩石和草上绘制积雪会遮挡岩石和草,擦除积雪会露出其下的岩石和草。 |
| LB高度混合(LB Height Blend) | 此模式与LB权重混合相同,但还会根据高度图在层之间的过渡中增加细节。 例如,你可以在图层过渡点处岩石之间的缝隙中显示泥土,而不是仅仅在岩石与泥土之间平滑混合。 |
四、地形图层混合技术信息
地形图层节点与Static Switch Parameter节点类似。 它能切换使用材质的不同分支。 地形的每个组件都通过主地形材质创建了自身的材质实例常量,而各常量仅会被应用于对应的组件。
如果某个地形组件不使用特定的图层,则连接到该图层的节点子树会被废弃。 这降低了复杂性,使得应用于地形的材质能够包含任意数量的纹理取样,只要其数量未超出着色器模型所设定的限制即可。
使用这种方法,你可以创建一个主地形材质来包含所需的全部纹理或材质,同时确保最终效果符合硬件所允许的参数范围。
材质表达式的所有网络都可以连接到图层(Layer)输入,以取代简单的纹理取样(Texture Samples)。 这使得执行更复杂的效果成为可能,例如根据图层的观看距离从细节纹理过渡到更大的宏观纹理。
五、图层混合问题
当你对多个地形图层使用LB高度混合模式时,你可能会在地形的不同图层交汇的地方发现黑斑。 LB高度混合的工作原理是,使用指定的高度值管理图层的混合因子或权重。 如果一个区域上绘制了多个图层,且图层混合模式均为LB高度混合,那么在某些区域中绘制的所有图层的高度值都可能同时为0,从而让所有图层的所需混合因子都变为0。
由于不存在特定的顺序,因此你可能会在所有层都无贡献的区域发现黑斑。 你甚至可能在混合法线贴图时发现更多的黑斑,因为这种混合会导致法线值为(0,0,0),即无效值,同时该值还会导致各种光照问题。 如果出现这种情况,请用权重不为零的材质绘制该区域。
在左图中,所有图层均使用LB高度混合,这导致某些区域呈现黑色。 而在右图中,红色的图层”1”被改为使用LB Alpha混合。

下面是Landscape Layer Blend节点的属性示例,所有图层都被混合在一起。 **土壤(Soil)**层的混合模式为LB Alpha混合,而其他层的混合模式为LB高度混合。 这是为了防止发生之前提到的问题。

六、使用图层混合方法
将多个纹理和材质网络混合为可绘制的地形图层,是为地形地貌制作纹理的基础。 其方法有二:
- 使用多个Landscape Layer Weight节点。
- 最多使用两个Landscape Layer Blend节点。
1.Landscape Layer Weight节点
LandscapeLayerWeight节点的设置方法如下:
转到材质编辑器,添加一个LandscapeLayerWeight节点。
转到**细节(Details)面板,将参数名称(Parameter Name)**更改为图层的描述性名称,例如”Rock”。
添加更多Landscape Layer Weight节点,直至你希望材质拥有的每个图层都有一个节点。 本示例使用了两个LandscapeLayerWeight节点。
添加你的纹理取样(Texture Samples)或材质网络表达式并将其连接到Landscape Layer Weight节点。
添加LandscapeLayerCoords节点并设置UV标题。 将其与Texture Sample节点相连。
将每个Layer节点的输出引脚连接到下一图层节点的**基础(Base)引脚,同时确保不连接第一图层节点的基础(Base)**引脚。
将最后一个Layer节点的输出引脚连接到材质的Base节点的**基础颜色(Base Color)**输入。
这时你应该获得了与下图类似的结果:

你可以更改LandscapeLayerWeight节点的**预览权重(Preview Weight)**属性,从而预览不同权重对材质的影响。
2.Landscape Layer Blend节点
如果不想使用LandscapeLayerWeight节点手动将图层混合在一起,你可以使用LandscapeLayerBlend节点自动将多个图层混合在一起,此时将使用Alpha混合,或者使用基于高度偏移的Alpha混合。 基于高度的偏移允许图层基于高度图的输入与其他图层混合。
转到材质编辑器,添加一个LandscapeLayerBlend节点。
转到**细节(Details)面板,点击图层(Layers)**旁边的加号图标()以添加图层。
展开该图层以查看其属性。
将**图层名称(Layer Name)**更改为该图层的描述性名称,例如”Snow”。
决定是让图层进行Alpha混合还是高度混合,并设置对应的混合类型。
为地形材质添加所需数量的其他图层。 重命名这些图层,并为其设置适当的混合类型。
将LandscapeLayerBlend节点的输出连接到材质的Base节点的**基础颜色(Base Color)**输入。
添加Texture Sample节点,将其主输出连接到LandscapeLayerBlend节点的**图层(Layer)输入。 你也可以创建更复杂的材质网络,并将其连接到Landscape Layer Blend的图层(Layer)输入。 针对所有高度混合图层,将纹理取样的Alpha输出连接到LandscapeLayerBlend节点的高度(Height)**输入。
完成后,地形材质网络应该与下图类似:

声明:摘自于虚幻引擎文档,自己学习记录笔记;