地形材质

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

Windows
MacOS
Linux

尽管任意 材质 都可用于 地形 Actor,但虚幻引擎4(UE4)中的材质系统同时提供了一些特定的地形材质节点,可帮助优化地形纹理。以下文档中将介绍此类节点的功能,以及如何在地形材质中使用它们。

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

层权重和排序

地形使用权重混合,而非Alpha混合,因此所有层在任何位置的混合系数最多累积到1.0。Alpha混合与顺序无关,可随时绘制任意层,因此十分有用。此外,在使用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

Select Skin
Light
Dark

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

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

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

发表反馈意见