地形材质

设置材质以用于地形地貌。

Windows
MacOS
Linux

尽管随机 材质 都可用于 地形 Actor,但虚幻引擎4(UE4)中的材质系统同时提供部分特殊地形特定材质节点,可帮助优化地形纹理。以下文档中将深入介绍此类节点、其运行方式以及在地形材质中进行使用的方法。

可在[材质编辑器](Engine/Rendering/Materials/Editor中中,使用修改其他材质的方式修改材质以用于地形。

图层权重和排序

地形使用权重混合,而非Alpha混合,因此所有图层在任何位置的混合系数最多累积到1.0。Alpha混合与顺序无关,可随时绘制任意图层,因此十分有用。此外,Alpha图层权重会增加,而其他现有图层权重会减小。

使用Alpha混合的一个弊端是图层绘制达100%时,所有其他图层的权重值将变为0%。此情况在使用绘制工具移除已100%的图层时十分明显。由于其他图层为0%,工具无法取代要移除的100%图层,因此图层好似并无变化。

地形特定材质节点

在材质编辑器中,可发现六个可用于地形系统的特殊节点。可在地形类别下的 控制板 菜单中找到所有节点。

Material Editor Context Menu

地形图层混合节点

利用**LandscapeLayerBlend** 节点可混合多个纹理或材质网络,以便将其用作地形图层。LandscapeLayerBlend使用阵列存储关于地形图层的信息。要向该阵列添加图层,选择加号图标。

Layer_Blend_arrayelements.png

将多个图层添加到 LandscapeLayerBlend 节点时,图层命名会被填入LandscapeLayerBlend节点。

LandscapeLayerBlend Mode

编号

属性

说明

1

图层

节点包含的图层列表。可单击加号(Plus Sign)添加图层。

2

额外图层

这为额外图层折叠时的外观。

3

图层命名

图层的唯一命名。图层名称 对应地形工具窗口中绘制模式使用的图层命名。

4

混合类型

为**LB_AlphaBlendLB_HeightBlendLB_WeightBlend**。参阅本页上的“地形图层混合类型”。

5

预览权重

这是在材质编辑器中预览混合的图层权重值。

6

常量图层输入

如不想使用纹理,此可提供用作颜色的数字值。此项主要在发生问题时用于图层调试。

7

常量高度输入

如不想使用纹理,此可提供用作高度的数字值。

下表详细说明了 图层混合 节点的输入和输出。

layer_blend_node.png

编号

项目

说明

1

图层 *图层名称

各图层添加图层的输入进行混合。此输入仅在 细节 面板中添加并命名图层后可用。

2

高度 *图层命名

此为提供高度图进行混合的位置。该输入仅在 混合类型 属性设为 LB_HeightBlend 的图层上可见。

3

未标记输出

混合起来的图层结果。

混合图层

使用图层混合模式的特定组合时,地形上不同图层交叉的位置将出现大量黑斑。将LB_HeightBlend模式用于多地形图层时,此问题尤其常见。LB_HeightBlend的工作原理是使用指定权重值调制图层的混合系数或权重。如区域上绘制有多个图层,且均被设为LB_HeightBlend,则可能特定区域中绘制的所有图层将同时拥有0高度值,因此各图层的理想混合系数将变为0。

由于无隐式或显式排序,且无图层对该区域有贡献,因此结果会产生黑斑。由于混合法线贴图会产生法线值(0,0,0),且该值无效,会导致照明渲染问题,因此混合法线贴图时情况会更糟。针对此问题的解决方案是对其中一个图层使用 LB_AlphaBlend,如以下范例所示。

左图中所有图层均为LB_HeightBlend,会导致部分区域变黑。在右图中,红色“1”图层已改为使用LB_AlphaBlend,从而解决该问题。

LB_HeightBlend Problem

以下是混合起来的所有图层的 Landscape Layer Blend 节点属性范例。务必注意 土壤 图层将其混合模式设为LB_AlphaBlend,而其他图层则设为LB_HeightBlend。此设置旨在避免发生上文中的问题(图层交汇处出现黑斑)。

Layer Blend Properties

如需删除图层,点击图层元素编号右侧的下拉箭头打开菜单,并选择 删除

Delete Layer

地形图层坐标节点

LandscapeLayerCoords 节点生成UV坐标,可用于将材质网络映射到地形地貌。

LandscapeLayerCoords Node

编号

属性

说明

1

映射类型

将材质(或网络)映射到地形时指定要所用朝向的 ELandscapeCoordMappingType

2

自定义UVType

要在地形上使用的映射位置。CustomUVType 输出UV坐标以基于给定属性值将材质映射到地形。

3

映射缩放

将等分缩放应用到UV坐标。

4

映射旋转

将旋转应用到UV坐标(以度计)。

5

映射平移[U]

以[U]方向将偏移应用到UV坐标。

6

映射平移[V]

以[V]方向将偏移应用到UV坐标。

7

未标记输出

输出UV坐标,根据给定属性值将材质映射到地形。

地形图层切换节点

特定图层未对地形区域贡献时,利用 LandscapeLayerSwitch 节点可排除部分材质运算。特定图层权重为0时,利用此操作可通过移除不必要的计算优化材质。

LandscapeLayerSwitch Node

编号

属性

说明

1

参数名称

给定参数的唯一命名。

2

使用预览

如果选中,则使用预览。

3

LayerUsed

地形当前区域使用节点属性中指定的图层。

4

LayerNotUsed

地形当前区域未使用图层,且其权重为0。

5

未标记输出

将基于图层对地形的特定区域是否贡献,选择使用 LayerUsedLayerNotUsed

地形图层权重节点

利用**LandscapeLayerWeight** 表达式可根据地形材质中获取的关联图层权重混合所有材质网络。该图层的权重用作混合两个输入网络的Alpha值。

LandscapeLayerWeight Node

编号

属性

说明

1

参数名称

给定参数的唯一命名。

2

预览权重

材质编辑器中用于预览的权重。

3

恒定底色

可在此指定地形需要拥有的底色

4

基础

要与该图层混合的网络。此通常为前一图层混合的结果,但如是首个图层,则可以为空。

5

图层

要混合起来创建该图层的网络。

6

未标记输出

根据所涉图层的图层权重,输出 BaseLayer 输入间的混合结果。

地形可视性遮罩节点

LandscapeVisibilityMask 节点移除地形的可见部分,以便在地形中创建洞进行如洞穴创建等操作。

LandscapeVisibilityMask Node

编号

属性

说明

1

未标记输出

输出可视性遮罩属性。

确保输出连接到材质的 不透明蒙版 插槽,且将 材质混合模式 设为 遮罩(Masked)。否则节点无法正常工作。

layer_visibility_mask_opacitymask.png

地形图层混合类型

地形 图层混合 材质节点有三个不同混合模式可供选择。尝试得到不同结果时,使用不同 图层混合 类型。

混合类型

功能

LB权重混合

如图层来自外部程序,如World Machine,或需要独立绘制各图层,而无需担心图层顺序,即可使用此类型。

LB Alpha混合

如要绘制细节并需要已定义的图层顺序,则使用此类型。例如,在岩石和草地上绘制雪层会遮住,但擦除后会显示下放岩石和草地。

LB高度混合

此与LBWeightBlend相同,但会基于高度图将细节添加至图层间的过渡。利用此项,可进行如岩石间缝隙中的图层过渡点出现泥土等操作,而不仅仅是岩石和泥土平滑混合。

此为 LB高度混合 的操作范例。正如所见,岩石缝隙间的图层过渡点出现了泥土。如此便可在图层交回处实现自然过渡。

LB_HeightBlend.png

地形图层混合技术信息

在后台,此类图层节点的行为与静态切换参数节点类似,利用其可切换使用的材质部分。地形的各组件均包含主地形材质中创建的的 MaterialInstanceConstant,仅应用到此组件。如特定地形组件上未使用特定图层,则连接到图层的节点子树将被废弃。此项会降低总体材质复杂度,使应用于地形的材质包含任意数量的纹理取样,前提是单个组件上使用的样本量不超过着色器模型规格设置的最大数量(SM 3.0为16个)。

这意味可设置主材质包含地形任意位置上使用的所有纹理或网络。最终组成极度复杂的网络集合,同时在硬件支持的参数范围内,继续将最终材质应用到地形组件。

任何材质表达式网络都可连接到 Layer 输入,取代简单 TextureSample。如此便可得到更加复杂的效果,例如,根据所层被查看的距离,从细节纹理过渡到较大的宏纹理。

曲面细分和置换贴图

材质的 曲面细分乘数场景置换贴图 通道可与地形地貌结合使用,以在地形靠近相机时提供更多细节和变形。其工作方式与其他标准材质相同,图层混合可与之结合使用,与 底色法线 或其他通道相同。地形也仅在最高细节级别(LOD)上渲染硬件曲面细分,其随着地形接近第二个LOD而逐渐淡出。后续LOD将不再启用曲面细分,在地形地貌上启用曲面细分替换时极大提高性能。

此类功能仅限启用DirectX 11时使用。因此,其应用于作二次润色效果,除非特别针对的是DirectX 11硬件。可查看曲面细分乘数页面,阅读在项目中启用和使用曲面细分的更多相关信息。

Landscape_HW_Tess.png

在上述可视化中,渲染最高LOD(白色)时启用了曲面细分,而渲染其他LOD(彩色)时未启用曲面细分。

移动地形材质

移动地形不再仅限于三个地形图层。虽然三个为最优方案,但只要纹理取样器数量足够,就可支持任意数量的图层。地形图层分配现使用特征等级切换材质节点,单个PC或主机地形材质也可具有移动版本。下图展示PC和主机版《堡垒之夜:大逃杀》中使用的地形在移动设备上的外观。

MobileLandscape_FeatureLevel.png

使用图层混合

将多个纹理和材质网络混合为可绘制地形图层的功能,是纹理化地形地貌的基础。为了将图层混合起来,可使用多个 LandscapeLayerWeight 节点或一个到两个 LandscapeLayerBlend 节点,具体取决于是否使用法线贴图。

使用地形图层权重节点

设置和使用 LandscapeLayerWeight 节点的过程非常简单,具体见下文所述。

所有图层命名必须唯一,因此建议使用可表明图层所含内容的描述性名称来命名图层。此命名这可协助记忆图层中的内容,以便更加快速地搜索图层。

  1. 材质编辑器 中,向材质图表添加 LandscapeLayerWeight 节点。其默认的 参数命名 为“None”。

  2. 细节 面板中,将 参数命名 改为图层的描述性命名,如“Rock”。在输入 参数命名 后,节点上将自行更新命名。

    Layer Name

  3. 添加额外 LandscapeLayerWeight 节点,直到所需材质中的所有图层都拥有此类节点为止。该范例中仅使用两个 LandscapeLayerWeight 节点。

  4. 添加 纹理取样 或其他材质网络表达式,并将其与 LandscapeLayerWeight 节点连接。

  5. 添加 LandscapeLayerCoords 节点,任意设置其UV标题,然后将其与 纹理取样 节点连接。

  6. 从各 图层 节点的输出引脚连出引线,连接到下一图层节点的 基本 引脚,使用引线将两者连接(不连接首个图层节点的 基本 引脚)。

  7. 从最终 图层 节点的输出引脚连出引线,连接到材质 基本 节点的 底色 输入。

完成后应可看到类似以下使用 LandscapeLayerWeight 节点的范例:

Landscape Layer Nodes

可通过更改 LandscapeLayerWeight 节点的 预览权重 属性,预览材质上不同权重的效果。

使用地形图层混合节点

作为使用 LandscapeLayerWeight 节点手动混合图层的替代方法,LandscapeLayerBlend 节点使用Alpha混合或带有基于高度偏移的Alpha混合来混合多个图层。利用基于高度的偏移,图层可根据高度图输入与其他图层混合。

  1. 在材质编辑器中,添加 LandscapeLayerBlend 节点。

  2. 细节 面板中的 图层 旁,点击加号图标(Plus Sign)添加图层。

    Layer_Blend_arrayelements.png

  3. 展开图层查看其属性。

  4. 图层命名 改为图层的描述性命名,如“Snow”。

    Layer Name

  5. 决定图层是Alpha混合或高度混合,并设置相应的 混合类型

  6. 按需添加地形材质的其他图层数。重命名并设置相应的 混合类型

  7. 将LandscapeLayerBlend节点输出连接到材质基本节点的 **底色**输入。

  8. 添加纹理取样节点,将其主输出连接到 LandscapeLayerBlend 节点的 图层 输入。或创建更复杂的材质网络,将其连接到地形图层混合 图层 输入。对于混合高度图层,将纹理取样的Alpha输出连接到LandscapeLayerBlend的 高度 输入。

完成后纹理材质网络将类似下图:

Landscape Blend Node

修改 LandscapeLayerBlend 节点的 预览权重 属性,可预览材质上不同权重的效果。

创建地形洞材质

管理模式下可在地形上创建洞,但仅能通过删除整个地形组件进行操作。为避免此类操作,可使用地形洞材质来遮罩地形上特定位置的可视性和碰撞。如要在山脉侧面创建进入洞穴的入口,此操作将非常有用。

可使用地形材质和地形洞材质的相同材质,但注意:对比不使用不透明蒙版的材质,使用此类蒙版的材质对性能影响更大。因此可选择创建单独的地形洞材质。

  1. 打开材质编辑器,在 细节 面板中,将 混合模式 设为 遮罩

    layer_visibility_mask_opacitymask.png

  2. 接着将 LandscapeVisibilityMask 节点添加到材质图表,并将其输出连接到 不透明蒙版 输入。

    Landscape_VisibilityMaskNode.png

  3. 编译材质后,将其指定到地形以便使用。该操作可在 细节 面板的 地形洞材质(Landscape Hole Material) 部分中完成。

    landscape_holematerial1.png

  4. 现正常设置地形材质的其余部分,完成后应可得到类似下图的结果。

    Landscape_VisibilityMaskSetup_In_Material.png

现在能够遮罩和取消遮罩地形可视性,如以下视频所示。

欲了解使用绘制工具创建地形洞的相关信息,参阅使用不透明遮罩创建洞

向地形指定材质

创建地形的材质后,需将材质指定到关卡中的地形Actor,以使用该材质。

  1. 内容浏览器 中找到要使用的地形材质。

  2. 在视口或在 世界大纲视图 中选择地形。

  3. 在关卡编辑器的地形 细节 面板中,点击 地形 部分中 地形材质 旁的“指定”箭头(Assign arrow)指定选中材质。

    Assigned Material

向地形指定地形洞材质

可指定不同材质为 地形洞材质,其为拥有特定不透明度设置的材质。

参阅地形洞材质的相关章节,了解洞材质的常规信息。欲了解不透明遮罩的相关信息,参阅使用不透明遮罩创建洞

  1. 内容浏览器 中找到要使用的地形洞材质并选中。

  2. 在视口或在 世界大纲视图 中选择地形。

  3. 导航到关卡编辑器 细节 > 地形 > 地形洞材质。选择箭头(Assign arrow)指定选中材质。

    landscape_holematerial1.png

标签

欢迎来到全新虚幻引擎4文档站!

我们正在努力开发新功能,包括反馈系统,以便您能对我们的工作作出评价。但它目前还未正式上线。如果您对此页面有任何意见与在使用中遭遇任何问题,请前往文档反馈论坛告知我们。

新系统上线运行后,我们会及时通知您的。

发表反馈意见