材质编辑器 - 如何使用透明度

创建特定表面类型(例如,水面或玻璃)时,您需要能够使该表面不仅通透,还具有某种深度和颜色感。 在现实世界中,经常将这些属性称为 透明度不透明度,并且经常互换使用以说明同一件事情。 但是,在虚幻引擎 4 (UE4) 中,“透明度”用来说明表面是否通透,而“不透明度”用来定义表面的通透度。在以下操作指南中,您将学习在虚幻引擎 4 中将透明度引入材质所需了解的所有内容。

透明度

透明度 术语用来说明表面阻挡或允许光线穿过的能力。 例如,砖块是不具有透明度的对象,而彩绘玻璃是具有透明度的对象。 在 UE4 中,实现透明度的方式是让像素并非 100% 不透明(即,并非通透),而是具有不同程度的透明性(通透性)。

Trans_Ramp_Example.png

上图使用一个纹理来帮助定义哪些区域应具有透明度以及这些区域应该具有的透明程度,说明 UE4 中透明度的工作方式。 这个纹理是一个渐变,其顶部为黑色,表示完全透明,而底部为白色,表示不透明。 中间的区域根据纹理像素距离黑色或白色的远近程度,具有不同的透明度。

透明度与不透明度

UE4 中处理透明度时,您还会见到我们使用 不透明度 等术语。 “不透明度”指的是表面的通透程度,而“透明度”用来说明表面通透。 在下图中,我们可以看到作用中的效果。

Trans_Opacity_Settings.png

从左到右,材质的不透明度从 0 增大到 1。 这使材质从完全透明(通透)变为完全不透明(非通透)。 但是,只有在将材质设置为使用“透明度”的情况下,才会发生这种情况。 针对未设置为使用“透明度”的材质更改不透明度对于该材质的通透程度没有影响。

  • 透明度:用于定义表面是否通透。

  • 不透明度:用来定义表面的透明或不透明程度(通透/非通透程度)。

材质中使用透明度

以下是设置材质以使用透明度的步骤。

本教程将使用项目中包含 起步内容 时可以找到的内容。如果您未将起步内容包括在项目中,请参阅 迁移 内容页面,以了解有关如何在项目之间移动内容的信息。通过这种方法,您可以将起步内容添加到项目中,而不必建立新项目。

  1. 首先,在 内容浏览器右键单击,然后在弹出菜单的 创建基本资产(Create Basic Asset)部分中,选择 材质(Material)

    Trans_Create_New_Material.png

  2. 材质命名为 Transparency_Material,然后在 内容浏览器 中使用 鼠标左键双击 此材质以将其打开。

  3. 材质现已打开,请转到 细节(Details)面板,在 材质(Material)部分中,将 混合模式(Blend Mode)不透明(Opaque)更改为 半透明(Translucent)

    Trans_Change_Blend_Mode.png

  4. 现已正确设置 混合模式(Blend Mode),您可查找下列材质表达式节点。 您可通过在材质选用板中搜索下列名称来找到这些节点。 找到之后,请使用 鼠标左键 单击它们,将其拖到材质图中,然后释放 鼠标左键 以将它们放入图中。

    • 矢量参数(Vector Parameter)x 1

    • 标量参数(Scalar Parameter)x 1

    Trans_Required_Nodes.png

  5. 正确的材质表达式节点现已添加完毕,您可以开始将这些节点连接到一起。 首先,将“矢量参数”(Vector Parameter)节点命名为 Base_Color,并对其指定颜色值。在本示例中,已输入白色作为默认颜色。 接着,将“矢量参数”(Vector Parameter)节点的输出连接到 底色(Base Color)输入。 然后,将“标量参数”(Scalar Parameter)命名为 Transparency_Amount,并对其指定默认值 0.5。 然后,将“标量参数”(Scalar Parameter)的输出连接到主着色器节点的 不透明(Opacity)输入。

    Trans_Completed_Shader.png

  6. 确保单击 应用(Apply)保存(Save)按钮,并关闭材质编辑器。
    R_Apply_&_Save.png

  7. 内容浏览器 中找到 Transparency_Material右键单击,并从显示的菜单中选择 创建材质实例(Create Material Instance)选项。

  8. 现在,我们需要找到一个要应用该材质实例的对象,以查看作用中的材质。在 内容浏览器 中的“起步内容”(Starter Content)文件夹下面,有一个 形状(Shapes)文件夹。 找到 Shape_Sphere,使用 鼠标左键 将其选中,然后按住 鼠标左键 将其拖到当前关卡。到达您喜欢的位置后,释放 鼠标左键,以将该网格放入关卡。

    Trans_Add_Test_Mesh.png

  9. 现在,关卡中已经有了用来执行测试的对象,请在 内容浏览器 中找到您早先创建的 Transparency_Material_Inst。找到后,请使用 鼠标左键 将其选中,然后将其从 内容浏览器 拖到 Shape_Sphere 上。 拖到 Shape_Sphere 上之后,释放 鼠标左键,以将该材质实例应用于该网格。

  10. 将该材质实例应用于该网格后,请在 内容浏览器 中使用 鼠标左键双击 该材质实例,以将其打开。打开后,通过使用 鼠标左键 单击灰色的复选框,启用 Transparency_Amount。启用后,您可以调整 Transparency_Amount 的值,以更改对象的透明度。

透明度与反射

设置下列选项后,使用了透明度的对象可以显示场景反射。 但是,请记住,启用大量具有反射的半透明材质可能会引起性能问题。

  1. 内容浏览器 中,使用 鼠标左键双击 上文所创建的 Transparency_Material,以将其打开。打开后,在 细节(Details)面板的 半透明(Translucency)部分中,将 半透明照明模式(Translucent Light Mode)TLM 体积无方向(TLM_Volumetric Non Directional 更改为 TLM 表面(TLM Surface)

    Trans_Change_LM.png

  2. 材质图中,选中 透明量(Transparency_Amount)材质表达式,并通过在键盘上按 CTRL + W 将其复制两次。完成之后,您的材质图应该类似于下图。

    Trans_Dup_Nodes.png

  3. 将两个材质表达式节点分别重命名为 MetallicRoughness。将 Metallic 材质表达式的默认值设置为 1.0,并将 Roughness 的默认值设置为 0。然后,将各个材质表达式节点连接到主材质节点上的相应输入。

    Trans_Reflection_Final_Material.png

  4. 确保 应用(Apply)保存(Save)该材质,然后关闭材质图。

    R_Apply_&_Save.png

  5. 现在,当您查看关卡时,您应该能够在网格上看到反射和透明效果。

    Trans_Reflection_In_Level.png

透过调整材质实例的参数,可以使透明度具有极为不同的视觉效果。

Trans_Reflection_Different_Results.png

透明度的用途

透明度可用来模拟各种不同的现实世界表面类型。 以下是 UE4 中透明度的一些最常见用途。

  • 头发

  • 玻璃

  • 烟雾或火焰视觉效果

  • 贴纸

  • 植物叶子

透明度与性能

Trans_Shader_Complexity.png

渲染大量彼此重叠且具有透明度的对象可能会迅速产生渲染/性能瓶颈,在使用点亮透明度时尤其如此。 用来说明此问题的术语是“过度绘制”,当您有大量彼此重叠且要进行透明度渲染的对象时,就会发生过度绘制。 过度绘制可能会导致这类性能问题的原因是,对于每引入一层透明度,渲染成本就会水涨船高。

为了帮助您更好地确定是否存在此问题以及何处存在此问题,UE4 有一种称为 着色器复杂性 的特殊视图模式。 “着色器复杂性”模式通过使用颜色来显示复杂性,让您了解给定表面的渲染复杂度。 您看到的颜色越绿,表示渲染成本越低,而颜色越红,表示渲染成本越高。 要启用此视图模式,只需完成下列步骤。

  1. 要启用 着色器复杂性,请使用鼠标左键单击编辑器视口顶部的 视图模式(View Mode)选项。目前,视图模式(View Mode)设置为默认值,即 点亮(Lit)

    Trans_SC_View_Mode.png

  2. 您使用鼠标左键单击 视图模式(View Mode)时,系统会显示菜单。请从菜单中选择 着色器复杂性(Shader Complexity)选项。

    Trans_Set_To_SC.png

  3. 单击 着色器复杂性(Shader Complexity)选项之后,关卡视口应该如下所示。

    Trans_Shader_Complexity_On.png

从这个视图中,您可确定可能的性能问题的发生位置。 红色区域的渲染成本非常高,而绿色区域的渲染成本较低。 虽然并不是 100% 有可能或适合消除所有过度绘制,但此视图模式在您尝试 判断性能问题的确切来源时非常有帮助。

半透明优先顺序(Translucency Sort Priority)

当场景中存在多个彼此接近的透明对象时,您有时会注意到,在确定哪个透明对象在其他透明对象 前面或后面渲染时存在问题。以下示例使用您此前创建的材质以及起步内容中的点亮烟雾 VFX 来演示这种情况。

请注意,烟雾先是显示在网格前面,接着突然跳到网格后面。 为了防止发生此问题,需要设置 半透明优先顺序(Translucency Sort Priority),以使烟雾的 VFX 始终在场景中其他半透明效果前面渲染。 要更改 VFX 的 半透明优先顺序(Translucency Sort Priority),请完成下列步骤。

  1. 首先,通过使用鼠标左键单击,选中一个或多个要在关卡中所有其他半透明效果前面渲染的对象。在本示例中,我们将选中烟雾 VFX。

    Trans_Select_VFX.png

  2. 细节(Details)面板的 渲染(Rendering)部分中,单击 白色三角形 以显示其他属性。

  3. 在新的选项列表中,找到 半透明优先顺序(Translucency Sort Priority),然后输入值 100。

    Trans_Set_Sort_Order.png

    默认情况下,所有添加到关卡的对象的 半透明优先顺序(Translucency Sort Priority)均为 0。如果您希望某个透明对象始终在其他透明对象前面渲染,请使用正数值。如果您希望某些透明对象始终在其他透明对象后面渲染,请使用负数值。

  4. 现在,检查场景中的烟雾 VFX。因为 半透明优先顺序(Translucency Sort Priority)设置为 100,所以烟雾将始终显示在其他半透明对象前面。

  5. 如果将 半透明优先顺序(Translucency Sort Priority)设置为 -100,那么烟雾将始终显示在其他半透明对象后面。

虽然调整 半透明优先顺序(Translucency Sort Priority)可以修正关卡中的顺序问题,但可能会在游戏期间产生效果或对象时引入新的顺序问题。 因此,最好定义要使用的 半透明优先顺序(Translucency Sort Priority)数值以及使用位置。 例如,您可以指定产生的所有效果的 半透明优先顺序(Translucency Sort Priority)均为 100。 因此,如果关卡中存在一些顺序问题,您可将关卡中对象的 半透明优先顺序(Translucency Sort Priority)调整为任何不大于 99 的数值。 这样,产生的游戏效果将始终在所有其他对象前面渲染,而无论关卡中这些对象的 半透明优先顺序(Translucency Sort Priority)为何。

总结

透明度是功能非常强大的工具,可以帮助您真正实现 3D 项目。 但是,就像所有其他功能强大的工具一样,您必须十分谨慎,确保这种强大的功能在您的掌控之下。 请记得尝试将使用反射效果的透明对象数尽可能保持在最低限度。 并且,在编辑器中以及游戏期间,务必时常检查“着色器复杂性”模式,以确保最大限度减少透明度过度绘制。