在材质中使用菲涅尔效果

使用菲涅尔材质节点的指南。

Windows
MacOS
Linux

FN_Fresnel_Sample.png

创建影片或过场动画时,使用者通常需要一种更好的方式来凸显人物的轮廓。这种光照技术通常被称为"边缘光照", 它牵涉到添加额外光线,以便将人物轮廓从背景中区分开来。虽然此技术会让影片增色不少, 但是向3D场景添加更多光照同时也意味着复杂性的增大,情况可能难以掌控。虚幻引擎4特别就此提供了一个解决方案,使美术师能使用角色材质来模拟相同的基础效果。 如此一来,美术师便能更好地掌控效果的观感,甚至通过一些技巧来提高性能(例如将灯光添加到无光照的对象)。

菲涅尔

菲涅尔 是指光照基于观察者的角度来形成不同强度反射的现象。 举例而言,站在一个水池边直视池底将无法看到水中存在的大量反射。 而开始移动头部,让水面与视平线趋于平行时,便能看到越来越多的反射。

在UE4中,菲涅尔材质表达式节点将根据表面法线和相机方向的点乘积来计算衰减。 当表面法线正对相机时,输出值为0,这意味着不应出现菲涅尔效果。 而表面法线与相机垂直时,输出值为1,这意味着将产生完整的菲涅尔效果。 之后,结果被限制在[0,1]的范围中,确保中央不会出现负片效果。下图将演示此概念。

FN_Caculation_Example.png

球体中央(即0所处的位置)并没有菲涅尔效果,原因是相机正对表面法线。 当表面法线越来越趋于和相机垂直时(越来越靠近数字1),菲涅尔效果便会越来越明显, 这就是我们所需要的效果。

菲涅尔节点详解

搜索菲涅尔材质表达式时,您会发现在 工具(Utility)矢量运算(Vector Ops) 中各有一个菲涅尔。 虽然这两个材质表达式的名称和作用都相同,但其在在设置使用方面却存在差异。

菲涅尔工具

该指南讲述的是 工具(Utility) 下的菲涅尔,它的设置和用法更为简单。 强烈建议 先行使用此版本,对节点函数拥有较深的理解之后再使用另一个版本。

FN_Fresnel_Node.png

属性

描述

ExponentIn

此属性控制菲涅尔效果的衰减。

BaseReflectFrctionIn

指定从正面观察表面时镜面反射的小数。将值设为1后将禁用菲涅尔。

Normal

可在此处输入法线,影响菲涅尔效果的渲染方式。无法通过提供法线贴图或矢量3输入来对此进行设置。

可使用2个选项来调整菲涅尔材质表达式的值。

  • 在材质图表中选择菲涅尔材质表达式,然后通过 细节 面板来输入值。 FN_Change_Via_Details.png

  • 在材质图表中添加常量(Constant)或标量(Scalar)节点,然后将其连接到各自的输入。 FN_Change_In_Graph.png

使用法线贴图时务必添加 变换(Transform) 表达式节点。这将使法线贴图从切线空间变换到场景空间。如未执行此变换,法线贴图便可能无法以预期方式影响菲涅尔。

菲涅尔矢量运算

矢量运算(Vector Ops) 下的菲涅尔是一个可高度自定义的版本。使用者可通过它来影响菲涅尔渲染方式的诸多不同方面。 但此功能也存在缺陷,设置错误便可能造成瑕疵,或导致菲涅尔渲染出错。 建议只在 工具(Utility) 下的菲涅尔无法达到理想效果时再选择使用此节点。

FN_Fresnel_Node_VO.png

属性

描述

法线矢量(V3)

可在此处输入法线,影响菲涅尔效果的渲染方式。无法通过提供法线贴图或矢量3输入来对此进行设置。

相机矢量(V3)

可借助此属性来影响用于确定相机和表面法线之间的点乘积的相机。

颠倒菲涅尔(B)

此属性用于颠倒菲涅尔的效果。只希望在中央或边缘处应用菲涅尔效果时,此属性将十分实用。

强度(S)

此属性用于控制菲涅尔效果的强度。输入较大的值将缩小其所影响的区域。设置较小的值将使菲涅尔影响较大的区域。

使用低开销对比(B)

此属性使菲涅尔效果用开销较低的方法来计算明暗对比。

低开销对比暗度(S)

此属性用于控制菲涅尔的暗度。此项仅在启用 使用低开销对比 后生效。

低开销对比亮度(S)

此属性用于控制菲涅尔效果的亮度。此项仅在启用 使用低开销对比 后生效。

如何在材质中使用菲涅尔

按以下步骤创建使用菲涅尔的材质。

  1. 我们将在此例中新建一个材质,但实际上您可以将此概念应用到任何现有材质。 如需新建材质,请在 内容浏览器点击右键,然后从"创建基础资源(Create Basic Asset)"列表中选择"材质(Material)"。 创建材质后,将其命名为 Fresnel_Material

    FN_Creat_New_Material.png

  2. 使用 鼠标左键 双击 此材质,将其在 内容浏览器 中打开。 材质打开后,在 控制板(Palette) 搜索菜单中进行搜索,找到所需的材质表达式节点。 如需将材质表达式节点放入材质图表,首先用 鼠标左键 选中要放置的节点,然后继续按住 鼠标左键 将该节点拖入材质图表。 本教程需要以下类型和数量的节点。

    节点名

    数量

    矢量参数节点

    2

    标量节点

    2

    菲涅尔节点

    1

    完成后,您的材质图表应类似于下图。

    FN_Adding_Nodes.png

    搜索菲涅尔效果材质表达式时将找到两种不同的可选类型。本指南只使用 工具(Utility) 下的菲涅尔。

  3. 将需要的材质表达式节点添加到材质图表中后,便可以将它们连接起来并指定参数基础值。 在此例中,我们将使用下列参数名称和默认值。

    名称

    Base_Color

    0.5、0.5、0.5

    Roughness

    0.5

    Fresnel_Color

    1.0、0.0、0.0

    Fresnel_Exp

    0.8

    操作完成之后,您的材质图表应与下图类似。

    FN_Completed_Materail.png

  4. 将所有内容连接起来后,必须 应用保存 材质。保存材质后即可关闭材质编辑器。

    FN_Apply_Save.png

  5. 材质编译、保存并关闭后,在 内容浏览器 中找到它并进行 右键点击。 从弹出的菜单中选择 创建材质实例(Create Material Instance) 选项。执行此操作将新建一个材质实例。 操作完成后,您的 内容浏览器 应与下图类似。
    FN_Create_New_Material_Instance.png

  6. 内容浏览器 中,使用 鼠标左键 双击 新建的材质实例将其打开。 打开材质实例后,即可开始调整材质实例参数,但首先需要点击参数名称旁的灰色框,将要编辑的参数启用。 执行此操作后,即可对此参数进行编辑。举例而言,启用 Fresnel_Exp 参数后即可增强/减弱表面上菲涅尔的效果。

请注意:对 Fresnel_Exp 输入的值越大,菲涅尔效果便离边缘越近;数值越小,则效果越靠近中央。 下例展示了不同 Fresnel_Exp 值形成的菲涅尔效果。 如下例所示,值增大后,菲涅尔效果便越来越靠近网格体边缘。 FN_Different_Fresnel_Exp_Values.png

菲涅尔与法线贴图

将法线贴图输入菲涅尔的"法线(Normal)"输入,之后便能以诸多有趣的方式来对表面产生影响。 其原理是法线贴图将影响表面法线。正如之前所述,菲涅尔会检查表面法线是否与相机垂直。 如果与相机垂直,则会产生菲涅尔效果。在光滑球体上时,这意味着菲涅尔效果只会在对象边缘上产生。 但使用法线贴图时,我们将把表面法线改为不平滑, 使菲涅尔效果出现在表面法线平滑的区域上。

请查看下图的进行参考,其显示了表面法线对菲涅尔产生的影响。 左侧(图1)是使用平面法线时菲涅尔节点的输出。现在来看看右侧(图2)。 在此图中,一张法线贴图已被输入,这使表面法线产生了极大变化。 表面法线已不再平整,所以显示出了更强的菲涅尔效果。

FN_Effect_On_Surface_Normal.png

下图展示了不同法线贴图如何以不同方式对菲涅尔产生影响。

FN_Fresnel_&_Normal_Map.png

用于创建以上图片的材质正是我们之前创建的材质,但其已进行如下修改。

  • 材质 混合模式不透明(Opaque) 更改为 半透明(Translucent)

  • 连接到 自发光颜色(Emissive Color) 输入的菲涅尔最终输出也连接到 半透明(Opacity) 输入。

  • 已添加新的2D纹理采样器(2D Texture Sampler)并将其连接到 法线(Normal) 输入。初学者内容包中的 Tech_Hex_Tile_N 将用作法线纹理。

  • 已添加一个新的标量参数,其与 纹理坐标(Texture Coordinates) 表达式相乘,在法线贴图上实现基础统一平铺。

FN_Adding_Normal_Map.png

菲涅尔材质表达式也可以通过法线贴图提供,此贴图能够影响菲涅尔效果的渲染方式。举例而言, 如果希望使用菲涅尔在材质上显示能量护盾之类的效果,但在护盾激活前仍需要正常显示材质,此时法线贴图将极为实用。 如需使用以上材质来达到此效果,需进行以下操作。

  1. 首先将 半透明光照模式(Translucency Lighting Mode)体积无方向(Volumetric Non Directional) 改为 表面半透明体积(Surface Translucency Volume),对其进行更新。

  2. 底色(Base Color)粗糙度(Roughness) 改为使用初学者内容包中的 T_Brick_Clay_New_D 纹理。

  3. 接下来修改"法线(Normal)"输入,使其同样使用初学者内容包中的T_Brick_Clay_New_N。

  4. 在控制板中搜索 变换(Transform) 表达式节点并将其添加到材质图表中。确保将其设为从切线空间变换到场景空间。

  5. 将旧法线贴图纹理节点连接到"变换(Transform)"节点的输入,并将其输出连接到菲涅尔节点的"法线(Normal)"输入。操作完成后,材质应与下图类似。

FN_Fresnel_Normal_Input.png

注意砖块看上去没有菲涅尔效果。 还可以进一步操作,添加 乘法(Multiply)常量(Constant) 表达式节点,用于控制菲涅尔效果的强度。 以下是将这些节点添加到上述材质后的情况。

FN_Controal_Fresnel_Effect.png

调整添加的 常量(Constant) 即可控制菲涅尔对表面的影响。 将值设为0将关闭此效果,而设为其他值则会使效果逐渐呈现,如下例所示。

FN_Effect_Amount.png

菲涅尔的其他用途

菲涅尔的工作原理决定了,其不仅能够实现边缘光照,还可以进行其他操作。 以下是使用菲涅尔节点来进行其他操作一些实例。

  • 输入混合 可使用菲涅尔作为"插值(LERP)"的透明度(alpha)输入,以控制插值各输入组合在一起的方式。 FN_Lerp_Blending.png

结论

为材质添加菲涅尔是一种很好的工作方式,能更好地凸显人物轮廓,或显示能量护盾之类的效果。 菲涅尔以观察角度和表面法线为基础。如果需要为菲涅尔增加一些有趣的细节,请尝试使用拥有一些随机噪点的法线贴图。 另外还请牢记,可以使用菲涅尔材质表达式在两个不同输入之间进行混合,便于实现火焰或烟雾等视效。

Tags
Select Skin
Light
Dark

Welcome to the new Unreal Engine 4 Documentation site!

We're working on lots of new features including a feedback system so you can tell us how we are doing. It's not quite ready for use in the wild yet, so head over to the Documentation Feedback forum to tell us about this page or call out any issues you are encountering in the meantime.

We'll be sure to let you know when the new system is up and running.

Post Feedback