在材质中使用菲涅耳效果

2016年12月22日 10:51 0 点赞 0 评论 更新于 2020-01-14 19:43
在材质中使用菲涅耳效果

引言

在创建电影时,为了更好地凸显人物的轮廓,常常会采用“边缘照明”技术。该技术通过添加额外光线,帮助区分人物边缘与背景。然而,在任何 3D 场景中添加额外光线会增加场景的复杂性,这种复杂性可能会迅速变得难以管理。虚幻引擎 4(UE4)提供了一种解决方案,允许美工通过人物的材质模拟相同的基本效果。这样,美工对效果的外观有更大的控制权,甚至可以在不照亮对象的情况下添加照明以提高性能。

菲涅耳效果的原理

菲涅耳效果的概念

菲涅耳效果这一术语用于描述光线根据查看角度以不同强度反射的现象。例如,当您站在池子旁边直视池底时,水中的反光较少;而当您移动头部,使池水水面与视平线越来越平行时,水中的反光会逐渐增多。

UE4 中的菲涅耳效果计算

在 UE4 中,“菲涅耳效果”(Fresnel)材质表达式节点会根据表面法线与摄像机方向的点乘积来计算衰减。当表面法线正对着摄像机时,输出值为 0,意味着不会产生菲涅耳效果;当表面法线与摄像机垂直时,输出值为 1,表示会产生完全的菲涅耳效果。为确保不会在中央产生负颜色,结果会被限制在 [0,1] 范围内。

以球体为例,在球体中央(输出值为 0 的位置),由于摄像机正对着表面法线,所以没有菲涅耳效果;而当表面法线与摄像机越来越垂直,即输出值接近 1 时,菲涅耳效果会变得越来越明显,这正是我们期望的效果。

“菲涅耳效果”(Fresnel)节点明细

不同位置的“菲涅耳效果”节点

搜索“菲涅耳效果”(Fresnel)材质表达式时,会发现在“实用程序(Utility)”和“矢量操作(Vector Ops)”下各有一个该节点。虽然它们名称和作用相同,但在设置和使用方面存在差异。

“菲涅耳效果”(Fresnel)实用程序节点

本操作指南使用“实用程序(Utility)”下的“菲涅耳效果”(Fresnel)节点,这是相对简单的设置和使用方式。建议您先使用这个版本,在熟悉其功能后再尝试另一个版本。该节点的属性及说明如下: | 属性 | 说明 | | ---- | ---- | | ExponentIn | 控制菲涅耳效果的衰减。 | | BaseReflectFrctionIn | 指定从正对表面的方向查看表面时,镜面反射的小数。将此属性设置为 1 会禁用菲涅耳效果。 | | 法线(Normal) | 可输入法线以影响菲涅耳效果的渲染方式,但无法通过提供法线贴图或矢量 3 输入来设置。 |

调整“菲涅耳效果”(Fresnel)材质表达式的值有两种方式:

  1. 在材质图中选择该节点,然后通过“细节(Details)”面板输入值。
  2. 在材质图中添加“常量”(Constant)或“标量”(Scalar)节点,并将它们连接到各自的输入。

使用法线贴图时,需添加“转换(Transform)”表达式节点,将法线贴图从切面空间转换到世界空间,否则法线贴图可能无法按预期影响菲涅耳效果。

“菲涅耳效果”(Fresnel)矢量操作节点

“矢量操作(Vector Ops)”下的“菲涅耳效果”(Fresnel)节点是高度可定制的版本,能影响菲涅耳效果渲染的多个方面。但不正确的设置可能会导致渲染出现伪影或错误,因此仅在“实用程序(Utility)”下的节点无法满足需求时使用。该节点的属性及说明如下: | 属性 | 说明 | | ---- | ---- | | 法线矢量(Normal Vector)(V3) | 可输入法线以影响菲涅耳效果的渲染方式,无法通过提供法线贴图或矢量 3 输入来设置。 | | 摄像机矢量(Camera Vector)(V3) | 影响用来确定摄像机与表面法线之间点乘积的摄像机。 | | 反转菲涅耳效果(Invert Fresnel)(B) | 反转菲涅耳效果,在仅希望在中央或边缘应用该效果时有用。 | | 强度(Power)(S) | 控制菲涅耳效果的强度。较大的数值会减小受影响的区域,较小的数值会使效果影响更大的区域。 | | 使用低成本对比(Use Cheap Contrast)(B) | 允许菲涅耳效果使用成本较低的方法计算明暗对比。 | | 低成本对比黑暗(Cheap Contrast Dark)(S) | 控制菲涅耳效果的黑暗程度,仅在“使用低成本对比(Use Cheap Contrast)”启用时有效。 | | 低成本对比明亮(Cheap Contrast Bright)(S) | 控制菲涅耳效果的明亮程度,仅在“使用低成本对比(Use Cheap Contrast)”启用时有效。 |

如何在材质中使用菲涅耳效果

创建新材质

在本示例中,将创建一个新材质,您也可将所学概念应用于现有材质。在“内容浏览器”中右键单击,从“创建基本资产”(Create Basic Asset)列表中选择“材质”(Material),并将其命名为“Fresnel_Material”。

打开材质并添加节点

在“内容浏览器”中双击新材质将其打开。打开后,通过“选用板”搜索菜单找到所需的材质表达式节点,使用鼠标左键选中节点并拖到材质图中。本教程需要以下类型和数量的节点: | 节点名称 | 数量 | | ---- | ---- | | 矢量参数(Vector Parameter)节点 | 2 | | 标量(Scalar)节点 | 2 | | 菲涅耳效果(Fresnel)节点 | 1 |

连接节点并指定参数值

添加完节点后,将它们连接到一起,并指定参数的基本值。本示例使用以下参数名称和默认值: | 名称 | 值 | | ---- | ---- | | Base_Color | 0.5, 0.5, 0.5 | | Roughness | 0.5 | | Fresnel_Color | 1.0, 0.0, 0.0 | | Fresnel_Exp | 0.8 |

保存材质并创建实例

连接好所有节点并指定参数值后,应用并保存材质,然后关闭材质编辑器。在“内容浏览器”中找到该材质,右键单击并选择“创建材质实例(Create Material Instance)”选项。

调整材质实例参数

在“内容浏览器”中双击新创建的材质实例将其打开。打开后,通过单击参数名称旁边的灰色框启用要编辑的参数,例如启用“Fresnel_Exp”参数,可增强或减弱表面上的菲涅耳效果。需要注意的是,对“Fresnel_Exp”输入的数值越大,菲涅耳效果离边缘越近;数值越小,效果越接近中心。

“菲涅耳效果”(Fresnel)与法线贴图

法线贴图对菲涅耳效果的影响

将法线贴图输入到“菲涅耳效果”(Fresnel)的“法线”(Normal)输入时,会以多种有趣的方式影响表面。因为法线贴图会改变表面法线,而菲涅耳效果会检查表面法线是否与摄像机垂直,若垂直则会出现该效果。在平滑的球体上,菲涅耳效果只会在对象边缘产生;引入法线贴图后,表面法线不再平滑,菲涅耳效果会在原本不会出现的位置出现。

示例材质的修改

为了展示不同表面法线对菲涅耳效果的影响,对材质进行了以下修改:

  1. 将材质的“混合模式(Blend Mode)”从“不透明(Opaque)”更改为“半透明(Translucent)”。
  2. 将连接到“自发光颜色(Emissive Color)”输入的“菲涅耳效果”(Fresnel)最终输出也连接到“半透明(Opacity)”输入。
  3. 添加新的“2D 纹理样本”(2D Texture Sampler),并将其连接到“法线”(Normal)输入,使用起步内容中的“Tech_Hex_Tile_N”作为法线纹理。
  4. 添加新的标量参数,与纹理坐标表达式相乘,实现法线贴图的基本统一平铺。

实现特定效果的操作

若要使用菲涅耳效果在材质上显示能量护盾等效果,且希望材质在护盾激活前正常显示,可进行以下操作:

  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)节点的输入,并将其输出连接到“菲涅耳效果”(Fresnel)节点的“法线”(Normal)输入。

此外,还可以添加“乘法(Multiply)”和“常量(Constant)”表达式节点来控制菲涅耳效果的强度,通过调整“常量(Constant)”的值,可控制该效果对表面的影响程度。

“菲涅耳效果”(Fresnel)的其他用途

菲涅耳效果不仅可用于边缘照明,还可作为“插值”(LERP)的阿尔法输入,控制“插值”(LERP)的各个输入的组合方式,从而实现火焰、烟雾等视觉效果。

结论

在材质中添加菲涅耳效果是一种有效的方法,可用于凸显人物轮廓或显示能量护盾特效。由于菲涅耳效果的实现基于查看角度和表面法线,因此使用带有随机噪声的法线贴图可以增加效果的细节。同时,“菲涅耳效果”(Fresnel)材质表达式还可用于在两个不同输入之间进行混合,实现更多有趣的视觉效果。

作者信息

孟子菇凉

孟子菇凉

共发布了 3994 篇文章