材质编辑器 - 如何构造材质函数

本页面的内容:

在一个材质图中复用另一个材质图的部分内容,可以节省材质创建时间,并加快材质工作流程的速度。 在虚幻引擎 4 (UE4) 中,用户可使用 材质函数 来实现此功能。 在这个操作指南示例中,我们将使用材质函数重新创建电子游戏中常见的菲涅耳风格阴影效果。 菲涅耳风格效果常用于强调显示对象的边缘,为对象提供伪边缘光,使对象轮廓在黑暗中更加清晰。

务请参阅 创建材质函数 文档,其中也包含有关如何创建和使用材质函数的大量有价值信息。

材质函数

Material Function(材质函数)是可以保存在包中并且在多个材质之间重复使用的材质图表的一小部分。 它们可以让复杂的材质图表被存储在外部并在其它材质中快速重新使用,这可以让更为复杂的网络剥离为单个节点,这样可以让美术更方便地创建材质。

创建材质函数

以下是创建材质函数的步骤。

  1. 首先,我们需要创建一个材质函数。 相应的操作是,在 内容浏览器 中,右键单击**并选择 新建(New)> 材质与纹理(Materials & Textures)> 材质函数(Material Function)**。

  2. 创建材质函数后,需要进行命名。 名称应该尽可能具有描述性,这样,当他人查看您的材质函数时,可以轻松了解这个函数的作用。 对于本示例,我们将把节点命名为 Custom_Fresnel。 您可以在 内容浏览器 中选中您的材质函数,按键盘上的 F2 键,然后输入您喜欢的名称,如此即可重命名材质函数。

构建材质函数

  1. 现在,材质函数已创建并重命名,请在 内容浏览器 中使用 鼠标左键双击 将其打开。 这时,您应该会看到类似下图的内容。

    Material_Function_Editor.png

    材质函数编辑器的操作非常类似于材质编辑器, 它们之间的最大差异在于 细节(Details)面板的作用以及最终材质节点的工作方式。 您可参阅 材质函数概述 ,进一步了解材质函数编辑器的工作方式。

  2. 材质函数编辑器现已打开,让我们开始创建菲涅耳效果。 因为菲涅耳效果的原理基于掠射角,所以我们需要将当前表面角度与摄像机角度进行比较,以此确定我们的 菲涅耳值。 为此,在着色器内部,我们使用 点乘积 节点将当前摄像机角度与当前查看表面的角度作比较。 要对材质节点执行此类计算,我们需要使用下列节点。

    可通过多种方法将上述节点添加到材质函数图,但是最简单的方法是,在 选用板 菜单中搜索每个节点,然后使用 鼠标左键 选中该节点并将它拖到材质图中。完成后,您应该会看到类似下图的内容:

    Material_Function_Needed_Nodes.png

    “菲涅耳效果”术语用来描述您所看到的光线如何根据您的查看角度以不同强度反射。例如,如果您站在一个池子旁边直视池底,那么将看不到水中的大量反光。当您开始移动头部,以使池水与您的视平线越来越平行,您会注意到水中的反光越来越多,这就是我们尝试在着色器中重现的行为类型,即,根据观看角度增加或移除视觉信息。

  3. 放置节点之后,需要对它们进行设置并将它们连接在一起。首先,将“常量 3 矢量”的蓝色通道设置为 1.0,它表示菲涅耳术语中的 Z 值。然后,将“常量 3 矢量”节点的输出连接到“矢量转换”节点的输入。此外,请确保设置“转换”节点,从切面空间转换为世界空间。然后,将“矢量转换”节点的输出连接到“点乘积”节点的 A 输入。完成后,将“摄像机矢量”节点的输出连接到“点乘积”节点的 B 输入。完成后,您应该看到类似下图的内容。

    Material_Function_Nodes_Setup.png

  4. 接下来,我们希望添加一个 “限制”节点 ,以将结果限制在 0 到 1 范围,确保不会产生任何可能会导致渲染伪影的错误。您可以在 选用板 菜单中搜索 限制 节点,然后将它拖到材质图中。完成后,您应该看到类似下图的内容。

    Material_Function_Adding_Clamp_Node.png

  5. 在“限制”节点之后,我们需要添加 “一减”节点 来反转效果,使效果仅作用于边缘。您可以通过在 选用板 中搜索 OneMinus 找到“一减”节点。完成后,您应该看到类似下图的内容。

    Material_Function_Adding_OneMinus.png

  6. 现在,我们需要添加两个 函数输入 节点。“函数输入”节点就是我们将材质函数放入另一个材质后,为其提供值或纹理的方式。要将“函数输入”添加到材质,请在 选用板 中搜索 Function Input,然后将它拖到材质图中。放置“函数输入”之后,您可以选中该节点并按键盘上的 Ctrl+W 进行复制。完成后,您应该看到类似下图的内容。

    Material_Function_Adding_Input_Nodes.png

    删除“函数输入”节点时,将发生下列错误。此错误警告您,如果删除此节点,那么在此材质函数的所有其他使用中都将删除此输入。这意味着,如果项目中大量使用此材质函数,那么最终可能会影响大量其他材质,因为缺少输入可能会导致材质不再能够正确编译,从而导致在游戏中不起作用。 Material_Function_Delete_Function.png

  7. 现在,我们需要对两个已创建的“函数输入”节点进行设置,以使此材质函数可在材质中使用。如果您选中其中一个“函数输入”节点,然后查看 细节(Details)选用板,您将注意到可以填入不少选项。在本示例中,我们只需要填写 输入名称(Input Name)说明(Description)输入类型(Input Type)预览值(Preview Value)。完成后,您的“函数输入”节点应该如下所示。

    • Exponent Input Material_Function_Input_Node_Exp.png

    • Intensity Input Material_Function_Input_Node_Pow.png

    有关“函数输入”节点中每个选项的作用的更多信息,请参阅 “函数输入”节点文档

  8. 设置“函数输入”节点后,我们现在需要将一个“幂”节点添加到材质图中。使用“幂”节点可以增强或减弱菲涅耳效果的衰减。这有助于使菲涅耳效果更接近或远离网格边缘。要添加“幂”节点,请在 选用板 中搜索 Power,然后将它拖放到材质图中。完成后,您应该看到类似下图的内容。

    Material_Function_Adding_Power.png

  9. 接着,我们要添加“乘法”节点,用于控制菲涅耳效果的强度。要添加 乘法 节点,请在 选用板 中搜索 Multiply,然后将它拖放到材质图中。完成后,您应该看到类似下图的内容。

    Material_Function_Adding_Multiply.png

  10. 需要的所有节点现在都已添加到材质图,接下来,我们将所有节点连接到一起。首先,我们要将“一减”节点的输出连接到“幂”节点的“底数”(Base)输入。然后,我们要将第一个“函数输入”节点(即 Fresnel Exponent)连接到“幂”节点的“指数”(Exp)输入。完成后,我们需要将“幂”节点的输出连接到“乘法”节点的 A 输入,然后将第二个“函数输入”节点(即 Fresnel Intensity)连接到“乘法”节点的 B 输入。最后,我们要将“乘法”节点的输出连接到“输出结果”节点的输入。

  11. 所有材质节点都连接完成后,需要按主工具栏中的 应用(Apply)按钮,编译材质函数。如果材质函数正确通过编译,那么 应用(Apply)按钮将变成灰色。完成后,您应该看到类似下图的内容。

    Material_Function_Completed_Material.png

使用材质函数

  1. 完成材质函数之后,请关闭材质函数编辑器,并在 内容浏览器 中创建新材质。要创建新材质,请在 内容浏览器右键单击,从 基本资产列表(Basic Assets List)中选择 材质(Material),并将新创建的材质命名为 Fresnel_Material

  2. 创建 Fresnel_Material 后,在 内容浏览器 中使用 鼠标左键双击 它,将其打开。打开材质之后,我们首先将新创建的 材质函数内容浏览器 拖到材质中,来添加该函数。

  3. 在本示例中,我们要将下列节点添加到材质中,以改善预览。请记得在 选用板 菜单中按节点名称进行搜索来查找下列节点,然后将这些节点从选用板菜单中直接拖放到材质图中。完成后,您应该看到类似下图的内容。

    Material_Function_Adding_Nodes.png

  4. 所有节点现已添加完成,接下来,请连接相应的输入和输出。首先,将“常量 3 矢量”连接到“主要着色器”节点的“基本颜色”(Base Color)输入。然后,将其中一个“常量一”连接到“主要着色器”节点的“金属色”(Metallic)输入。然后,将另一个“常量一”连接到“主要着色器”节点的“粗糙度 ”(Roughness)输入。最后,将剩余的两个“常量一”节点连接到 Fresnel Intensity 和 Fresnel Exponent,然后将 Custom_Fresnel 节点的输出连接到“主要着色器”节点的“自发光颜色”(Emissive Color)输入。完成后,您应该看到类似下图的内容。

  5. 节点现已连接到“主要材质”(Main Material)输入,您可以开始向节点添加值。在各个相应节点中填写下列值,完成后,请务必 编译材质。完成后,您应该看到类似下图的内容。

    • 基色(Base Color):R:1.0 G:0 B:0

    • 金属色(Metallic):1.0

    • 粗糙度(Roughness):0.5

    • Fresnel Intensity:1.0

    • Fresnel Exponent:5.0

    Material_Function_Complted_Material.png

  6. 现在,此材质已准备就绪,可编译并在关卡中使用。以下是在默认关卡应用一些随机网格后的效果。 Material_Function_Final_Results.png

结论

材质函数是功能非常强大的工具,可以帮助您加快并统一材质的创建与重复使用。 但是,就像所有其他功能强大的工具一样,您必须十分谨慎,确保这种强大的功能在您的掌控之下。 请注意,更改任何当前在材质中使用的现有材质函数时,如果更改后的材质函数有错误,或者在编辑时移除了一些功能,那么可能会导致那些材质损坏。