材质编辑器 - 如何添加细节纹理

以非常近的距离查看材质时,您会注意到,材质中使用的纹理会细化为像素点,导致视觉效果欠佳。 为了解决此问题,您可以使用“细节纹理”,来帮助隐藏以非常近的距离查看材质时产生的纹理像素化。

细节纹理化

细节纹理化 通过引入叠加在对象原始漫射及法线贴图上的高度重复漫射及法线贴图组合,使纹理产生更加细腻的错觉。 这可以在近距离查看时产生优于正常的细节效果错觉。 以下是作用中的细节纹理化示例。

DT_With_Without.png

在左图(标有数字 1)中,材质使用了细节纹理化功能。 在右图(标有数字 2)中,材质未使用细节纹理化功能。 您可以注意到,左图 (1) 中的法线贴图看起来细节较多,并且这些细节比右图清晰得多。

“细节纹理化”(Detail Texturing)节点明细

如果在 选用板 中搜索“Detail Texturing”,您将找到可以使用的 DetailTexturing 材质函数。 虽然这不是将细节纹理应用于材质的唯一方法,但却是最快的方法,因为您只需输入所要使用的纹理和设置。

DT_Node_Break_Down.png

属性 说明
刻度(Scale(S)) 设置细节纹理的刻度。数值越大,产生的平铺就越多;数值越小,产生的平铺就越少。
漫射(Diffuse(V3)) 这是漫射纹理的输入。
细节漫射(DetailDiffuse(T2d)) 这是漫射细节纹理的输入。此输入只能接受纹理对象。
漫射强度(DiffuseIntensity(S)) 控制细节漫射纹理的强度。
法线(Normal(V3)) 这是法线贴图纹理的输入。
细节法线(DetailNormal(T2D)) 这是法线贴图细节纹理的输入。此输入只能接受纹理对象。
法线强度(NormalIntensity(S)) 控制细节法线贴图纹理的强度。

将纹理样本转换为纹理对象

为了让“细节纹理化”材质函数正确工作,必须将您要用作细节纹理的纹理从常规纹理转换为纹理对象。 要将纹理转换为纹理对象,只需完成下列步骤。

  1. 首先,找到要用作细节纹理的纹理。

    DT_Regular_Texture.png

  2. 找到该纹理后,请使用鼠标 右键单击 该纹理。这将显示快捷菜单,请从中选择 转换为纹理对象(Convert To Texture Object)选项。

    DT_Convert_Texture_To_Object.png

  3. 完成上述操作后,纹理样本现在显示如下。

    DT_Texture_Object_Texture.png

如何在材质中使用细节纹理化功能

以下是设置材质以使其使用细节纹理化功能的两种不同方法。 您可以根据材质和项目的需要,来选择使用其中一种方法。 这两种方法的结果完全相同,并无优劣之分。

如果您的项目包含 起步内容,那么您可找到下列各节中使用的所有内容。虽然此处展示的技巧适用于任何纹理,但如果您想采用这些技巧,请确保项目包含 起步内容

但是,在开始之前,需要先设置一个非常简单的材质以用于测试。 为此,请在 内容浏览器右键单击,然后从弹出菜单的 创建基本资产(Create Basic Asset)部分中选择 材质(Material)。 选择此选项将创建新的 材质。请将该材质命名为 Detail_Material。完成后,内容浏览器 应该如下所示。

DT_Creat_New_Material.png

使用“细节纹理化”(Detail Texturing)材质函数

  1. 首先,在 内容浏览器 中,使用 鼠标左键双击 刚才创建的材质以将其打开。

  2. 打开该材质后,通过将下列纹理从 内容浏览器 拖入材质图,添加这些纹理。

    • T_Brick_Clay_Old_D

    • T_Brick_Clay_Old_N

    • T_Ground_Gravel_D

    • T_Ground_Moss_N

    完成之后,您的材质图应该类似于下图:

    DT_Adding_Textures.png

  3. 现在,所有需要的纹理都已添加到材质图中,您可以开始添加 细节纹理化(Detail Texturing)材质函数。为此,请先在 选用板 中搜索 Detail Texturing

    DT_Search_DT_MF.png

  4. 找到 细节纹理化(Detail Texturing)材质函数之后,使用 鼠标左键 单击将其选中,然后按住 鼠标左键细节纹理化(Detail Texturing)材质函数从 选用板 拖入材质图。当鼠标指针位于材质图上方时,释放 鼠标左键 即可将 细节纹理化(Detail Texturing)材质函数放入材质图。

    DT_Adding_DT_MF.png

  5. 细节纹理化(Detail Texturing)材质函数现已添加完成,您可以开始连接所需的输入和输出,以使此材质可工作。在本示例中,我们将使用 T_Brick_Clay_Old 纹理作为基本纹理,并使用 T_Ground_Gravel 作为细节纹理。这意味着,T_Brick_Clay_Old 的漫射及法线贴图将连接到“漫射”(Diffuse)和“法线”(Normal)输入,而 T_Ground_Gravel 漫射贴图和 T_Ground_Moss 法线贴图将连接到“细节漫射”(Detail Diffuse)和“细节法线”(Detail Normal)输入。完成之后,您的材质图应该类似于下图。

    DT_Hooked_Up_Textures.png

    请记住,T_Ground_Gravel 漫射贴图和 T_Ground_Moss 法线贴图纹理样本需要转换为 纹理对象,否则此材质无法工作。有关此操作的详细信息,请参阅上面的 将纹理样本转换为纹理对象 一节。

  6. 纹理现已完成连接,您可以开始添加一些常量材质表达式,以便微调细节纹理的刻度和强度等设置。要查找常量材质表达式,请在材质选用板中搜索 Constant,然后将“常量”(Constant)从 选用板 拖到材质图中。您已添加一个常量材质表达式,现在,通过先将其选中再按键盘上的 CTRL + W 两次,复制这个表达式。最后,我们一共有 3 个常量材质表达式。

    DT_Adding_Constant_Nodes.png

  7. 将适量的常量材质表达式节点添加到材质图之后,可以对其进行连接并填充数据。为此,我们只需将 常量(Constant)材质表达式节点的输出连接到 细节纹理化(Detail Texturing)材质函数的输入。然后,在每个 常量(Constant)材质表达式节点中输入值 1。完成之后,您的材质图应该类似于下图。

    DT_All_Connections_Made.png

  8. 通过调整常量材质表达式节点的值,可以影响细节纹理的外观效果。以下示例是将“刻度”(Scale)依次设置为 1、5 和 10 所产生的效果。

    DT_Different_Scale_Settings.png

不使用细节材质函数

如果因为任何原因而无法使用 细节纹理化(Detail Texturing)材质函数,您始终可以在材质图中使用“材质表达式”(Material Expression)节点构建此功能,以下是相关说明。

  1. 内容浏览器 中,通过 右键单击 材质并从菜单中选择 复制(Duplicate),建立 Detail_Material 的副本。

    DT_Duplicate_Material.png

  2. 创建之后,将材质标注为 Detail_Material_2。完成后,您的 内容浏览器 应该如下所示。

    DT_Duplicate_Materia_Namedl.png

  3. 使用鼠标左键 双击 新创建的材质将其打开。打开该材质后,删除除纹理以外的所有内容,并确保将纹理对象重新转换为纹理样本,方法如下:先选中所有纹理对象,然后 右键单击 并从菜单中选择 转换为纹理样本(Convert To Texture Sampler)。完成之后,材质图应该如下所示。

    DT_New_Material_Setup.png

  4. 所有内容现已清除并转换完毕,您可以开始布置所需的材质表达式节点。在此部分中,我们需要下列类型及数量的节点。您可以通过在 选用板 中搜索来找到下列每一个材质表达式节点。

    • 纹理坐标(Texture Coordinate)x 1

    • 限制(Clamp)x 1

    • 常量(Constant)x 2

    • 加法(Add)x 2

    • 乘法(Multiply)x 3

    完成上述操作后,材质图应该如下所示。

    DT_RequiredNodes.jpg

  5. 需要的所有材质表达式节点现已添加完毕,您可以开始将这些节点连接到一起。首先,需要对“底色”(Base Color)部分进行连接。完成上述操作后,材质图应该如下所示。

    DT_BaseColor_Connections.jpg

  6. 接着,采用与设置“底色”(Base Color)相同的方法,对“法线贴图”(Normal Map)进行连接。完成上述操作后,材质图应该如下所示。

    DT_NormalMap_Connections.jpg

  7. 现在,“底色”(Base Color)和法线贴图(Normal map)都已彼此连接,您可以编译、保存和使用此材质了。

    DT_Complete_Material.jpg

细节纹理化提示与技巧

下一节阐述有关在材质中使用细节纹理化功能的不同方法的一些提示与技巧。

基于距离的细节纹理化

处理大型表面(例如地形)时,您将注意到,即使您所使用的纹理可以平铺,也会存在许多观看效果不佳的明显重复,从远距离查看时尤其如此。 为了解决此问题,我们可以在先前创建的细节材质的基础上进行构建,使其在距离摄像机较近时显示一个纹理,而在距离摄像机较远时显示另一个纹理。 这通常称为“基于距离的纹理混合”,其设置步骤如下。

  1. 首先,建立 Detail_Material_2 的副本,并将它命名为 Distance_Fade。命名之后,打开该材质,在 选用板 中搜索以下材质表达式节点,并将它们添加到材质图中。

    • 全局位置(World_Position)x 1

    • 摄像机位置 WS(Camera_Position_WS)x 1

    • 距离(Distance)x 1

    • 除法(Divide)x 1

    • 幂(Power)x 1

    • 限制(Clamp)x 1

    • 常量(Constant)x 2

  2. 需要的所有材质表达式节点现已添加到材质图中,我们可以开始将它们连接到一起。引起纹理变化的距离由第一个 常量(Constant)控制,该常量连接到 除法(Divide)材质表达式,在示例图中当前设置为 512。完成后,您应该看到类似下图的内容。

    DT_Distance_Based_Blending_Nodes.png

  3. 完成基于距离的混合之后,现在可以将它添加到材质的剩余部分。为此,我们首先需要向材质图添加两个 插值(LERP)材质表达式。这是因为,“插值”(LERP)材质表达式的阿尔法输入将控制切换纹理的距离。现在,剩余的工作只是将材质的余下部分连接到一起。此材质与原始材质的唯一差别是,此材质使用“插值”(LERP),而不是在结束时将纹理加到一起。完成之后,您的材质图应该类似于下图。

    DT_Distance_Based_Completed_Material.png

  4. 要查看效果,您只需在“材质预览”(Material Preview)窗口中 按住鼠标右键,然后前后移动鼠标。当您离开预览网格足够远时,您应该会看到材质从一种纹理过渡到另一种纹理。如果看不到此效果,请将连接到 除法(Divide)材质表达式的第一个 常量(Constant)(当前设置为 512)调整为较小的数字,以便在距对象较近的位置看到此效果。

结论

细节纹理化是功能非常强大的工具,可以真正帮助您实现 3D 项目。 但是,就像所有其他功能强大的工具一样,您必须十分谨慎,确保这种强大的功能在您的掌控之下。 请记住,细节纹理化只能在一定程度上消除像素化。 允许玩家摄像机放大对象等行为可能会导致细节纹理化所实现的好处失效。 另外,请记住,添加细节纹理化可能会在材质中添加两个或两个以上额外的纹理查找操作,这可能会产生一些性能/内存问题,在移动平台上更是如此。