Choose your operating system:
Windows
macOS
Linux
创建特定表面类型(例如,水面或玻璃)时,你需要能够使该表面不仅通透,还具有某种深度和颜色感。 在现实世界中,经常将这些属性称为 透明度 或 不透明度,并且经常互换使用以说明同一件事情。 但是,在虚幻引擎 4 (UE4) 中,"透明度"用来说明表面是否通透,而"不透明度"用来定义表面的通透度。在以下操作指南中,你将学习在虚幻引擎 4 中将透明度引入材质所需了解的所有内容。
透明度
透明度 术语用来说明表面阻挡或允许光线穿过的能力。 例如,砖块是不具有透明度的对象,而彩绘玻璃是具有透明度的对象。 在 UE4 中,实现透明度的方式是让像素并非 100% 不透明(即,并非通透),而是具有不同程度的透明性(通透性)。
上图使用一个纹理来帮助定义哪些区域应具有透明度以及这些区域应该具有的透明程度,说明 UE4 中透明度的工作方式。 这个纹理是一个渐变,其顶部为黑色,表示完全透明,而底部为白色,表示不透明。 中间的区域根据纹理像素距离黑色或白色的远近程度,具有不同的透明度。
透明度的用途
透明度可被用于模拟各种现实世界中的表面类型。 以下为透明度在UE4中最常见的用途。
毛发
玻璃
水体
烟雾或火焰视觉效果
云彩
Impact贴花
植被
透明度与不透明度
在 UE4 中处理透明度时,你还会见到我们使用 不透明度 等术语。 "不透明度"指的是表面的通透程度,而"透明度"用来说明表面通透。 在下图中,我们可以看到作用中的效果。
从左到右,材质的不透明度从 0 增大到 1。 这使材质从完全透明(通透)变为完全不透明(非通透)。 但是,只有在将材质设置为使用"透明度"的情况下,才会发生这种情况。 针对未设置为使用"透明度"的材质更改不透明度对于该材质的通透程度没有影响。
透明度:用于定义表面是否通透。
不透明度:用来定义表面的透明或不透明程度(通透/非通透程度)。
在材质中使用透明度
以下是设置材质以使用透明度的步骤。
本教程将使用项目中包含 起步内容 时可以找到的内容。如果你未将起步内容包括在项目中,请参阅
首先,在 内容浏览器 中 右键单击,然后在弹出菜单的 创建基本资产(Create Basic Asset)部分中,选择 材质(Material)。
将材质命名为 Transparency_Material,然后在 内容浏览器 中使用 鼠标左键双击 此材质以将其打开。
材质现已打开,请转到 细节(Details)面板,在 材质(Material)部分中,将 混合模式(Blend Mode)由 不透明(Opaque)更改为 半透明(Translucent)。
现已正确设置 混合模式(Blend Mode),你可查找下列材质表达式节点。 你可通过在材质选用板中搜索下列名称来找到这些节点。 找到之后,请使用 鼠标左键 单击它们,将其拖到材质图中,然后释放 鼠标左键 以将它们放入图中。
矢量参数(Vector Parameter)x 1
标量参数(Scalar Parameter)x 1
正确的材质表达式节点现已添加完毕,你可以开始将这些节点连接到一起。 首先,将"矢量参数"(Vector Parameter)节点命名为 Base_Color,并对其指定颜色值。在本示例中,已输入白色作为默认颜色。 接着,将"矢量参数"(Vector Parameter)节点的输出连接到 底色(Base Color)输入。 然后,将"标量参数"(Scalar Parameter)命名为 Transparency_Amount,并对其指定默认值 0.5。 然后,将"标量参数"(Scalar Parameter)的输出连接到主着色器节点的 不透明(Opacity)输入。
确保单击 应用(Apply)和 保存(Save)按钮,并关闭材质编辑器。
在 内容浏览器 中找到 Transparency_Material,右键单击,并从显示的菜单中选择 创建材质实例(Create Material Instance)选项。
现在,我们需要找到一个要应用该材质实例的对象,以查看作用中的材质。在 内容浏览器 中的"起步内容"(Starter Content)文件夹下面,有一个 形状(Shapes)文件夹。 找到 Shape_Sphere,使用 鼠标左键 将其选中,然后按住 鼠标左键 将其拖到当前关卡。到达你喜欢的位置后,释放 鼠标左键,以将该网格放入关卡。
现在,关卡中已经有了用来执行测试的对象,请在 内容浏览器 中找到你早先创建的 Transparency_Material_Inst。找到后,请使用 鼠标左键 将其选中,然后将其从 内容浏览器 拖到 Shape_Sphere 上。 拖到 Shape_Sphere 上之后,释放 鼠标左键,以将该材质实例应用于该网格。
将该材质实例应用于该网格后,请在 内容浏览器 中使用 鼠标左键双击 该材质实例,以将其打开。打开后,通过使用 鼠标左键 单击灰色的复选框,启用 Transparency_Amount。启用后,你可以调整 Transparency_Amount 的值,以更改对象的透明度。
透明度与反射
设置下列选项后,使用了透明度的对象可以显示场景反射。 但是,请记住,启用大量具有反射的半透明材质可能会引起性能问题。
在 内容浏览器 中,使用 鼠标左键双击 上文所创建的 Transparency_Material,以将其打开。打开后,在 细节(Details)面板的 半透明(Translucency)部分中,将 半透明照明模式(Translucent Light Mode)从 TLM 体积无方向(TLM_Volumetric Non Directional 更改为 TLM 表面(TLM Surface)。
在材质图中,选中 透明量(Transparency_Amount)材质表达式,并通过在键盘上按 CTRL + W 将其复制两次。完成之后,你的材质图应该类似于下图。
将两个材质表达式节点分别重命名为 Metallic 和 Roughness。将 Metallic 材质表达式的默认值设置为 1.0,并将 Roughness 的默认值设置为 0。然后,将各个材质表达式节点连接到主材质节点上的相应输入。
确保 应用(Apply)并 保存(Save)该材质,然后关闭材质图。
现在,当你查看关卡时,你应该能够在网格上看到反射和透明效果。
透过调整材质实例的参数,可以使透明度具有极为不同的视觉效果。
染色或彩色透明度
薄半透明 着色模型和材质表达式可以精准再现染色和彩色半透明材质,比如染色或彩色玻璃和塑料。这种着色模型可以正确重现半透明表面的白色高光和染色背景。
在材质细节面板中进行以下设置即可启用薄半透明材质输出:
混合模式(Blend Mode):半透明
着色模型(Shading Model):薄半透明
光照模式(Lighting Mode):表面ForwardShading
半透明彩色阴影
在某些情况下,半透明材质可通过光线投射投射下彩色的阴影。通过材质的光线数量由材质的不透明度值,以及投射到材质上的光线数量决定。
透明度与性能
渲染大量彼此重叠且具有透明度的对象可能会迅速产生渲染/性能瓶颈,在使用点亮透明度时尤其如此。 用来说明此问题的术语是"过度绘制",当你有大量彼此重叠且要进行透明度渲染的对象时,就会发生过度绘制。 过度绘制可能会导致这类性能问题的原因是,对于每引入一层透明度,渲染成本就会水涨船高。
为了帮助你更好地确定是否存在此问题以及何处存在此问题,UE4 有一种称为 着色器复杂性 的特殊视图模式。 "着色器复杂性"模式通过使用颜色来显示复杂性,让你了解给定表面的渲染复杂度。 你看到的颜色越绿,表示渲染成本越低,而颜色越红,表示渲染成本越高。 要启用此视图模式,只需完成下列步骤。
要启用 着色器复杂性,请使用鼠标左键单击编辑器视口顶部的 视图模式(View Mode)选项。目前,视图模式(View Mode)设置为默认值,即 点亮(Lit)。
你使用鼠标左键单击 视图模式(View Mode)时,系统会显示菜单。请从菜单中选择 着色器复杂性(Shader Complexity)选项。
单击 着色器复杂性(Shader Complexity)选项之后,关卡视口应该如下所示。
从这个视图中,你可确定可能的性能问题的发生位置。 红色区域的渲染成本非常高,而绿色区域的渲染成本较低。 虽然并不是 100% 有可能或适合消除所有过度绘制,但此视图模式在你尝试 判断性能问题的确切来源时非常有帮助。
半透明优先顺序(Translucency Sort Priority)
当场景中存在多个彼此接近的透明对象时,你有时会注意到,在确定哪个透明对象在其他透明对象 前面或后面渲染时存在问题。以下示例使用你此前创建的材质以及起步内容中的点亮烟雾 VFX 来演示这种情况。
请注意,烟雾先是显示在网格前面,接着突然跳到网格后面。 为了防止发生此问题,需要设置 半透明优先顺序(Translucency Sort Priority),以使烟雾的 VFX 始终在场景中其他半透明效果前面渲染。 要更改 VFX 的 半透明优先顺序(Translucency Sort Priority),请完成下列步骤。
首先,通过使用鼠标左键单击,选中一个或多个要在关卡中所有其他半透明效果前面渲染的对象。在本示例中,我们将选中气雾 VFX。
在 细节(Details)面板的 渲染(Rendering)部分中,单击 白色三角形 以显示其他属性。
在新的选项列表中,找到 半透明优先顺序(Translucency Sort Priority),然后输入值 100。
默认情况下,所有添加到关卡的对象的 半透明优先顺序(Translucency Sort Priority)均为 0。如果你希望某个透明对象始终在其他透明对象前面渲染,请使用正数值。如果你希望某些透明对象始终在其他透明对象后面渲染,请使用负数值。
现在,检查场景中的气雾 VFX。因为 半透明优先顺序(Translucency Sort Priority)设置为 100,所以气雾将始终显示在其他半透明对象前面。
如果将 半透明优先顺序(Translucency Sort Priority)设置为 -100,那么气雾将始终显示在其他半透明对象后面。
虽然调整 半透明优先顺序(Translucency Sort Priority)可以修正关卡中的顺序问题,但可能会在游戏期间产生效果或对象时引入新的顺序问题。 因此,最好定义要使用的 半透明优先顺序(Translucency Sort Priority)数值以及使用位置。例如,你可以指定产生的所有效果的 半透明优先顺序(Translucency Sort Priority)均为 100。因此,如果关卡中存在一些顺序问题,你可将关卡中对象的 半透明优先顺序(Translucency Sort Priority)调整为任何不大于 99 的数值。这样,产生的游戏效果将始终在所有其他对象前面渲染,而无论关卡中这些对象的 半透明优先顺序(Translucency Sort Priority)为何。
总结
透明度是功能非常强大的工具,可以帮助你真正实现 3D 项目。 但是,就像所有其他功能强大的工具一样,你必须十分谨慎,确保这种强大的功能在你的掌控之下。 请记得尝试将使用反射效果的透明对象数尽可能保持在最低限度。 并且,在编辑器中以及游戏期间,务必时常检查"着色器复杂性"模式,以确保最大限度减少透明度过度绘制。