前言

  没想到上次分析水弄得太长了。
  所以就单独将官方的水材质弄一篇文章进行讲解。
  结合 官方素材的水 以及 Udemy - Unlocking the Unreal Engine Material Editor 教程的水

M_LakeWater 湖水材质解析

M_LakeWater

  上图就是官方水材质的属性连接
  其实水的制作都大同小异。
  比如法线贴图的处理都是一样的。

M_LakeWater

  官方使用了 Motion_4WayChaos_Normal 的材质函数来处理动态效果
  这个函数内置在 Unreal 引擎里面,不过并没有开放到函数库当中。

M_LakeWater

  可以到 Unreal 引擎的安装目录找到这个函数。

M_LakeWater

  打开函数可以看到其实使用了 四个方向不同的偏移叠加到一起形成水动态效果

M_LakeWater
M_LakeWater

  值得注意的是使用了 AbsoluteWroldPosition 节点,这样物体的偏移和世界坐标相关联
  好处就是如果两个相同材质的平面可以无缝衔接。

M_LakeWater

  基本原理是一样的
   power 节点用来降低灰度的亮度,因为小数的平方只会更小。

M_LakeWater
M_LakeWater

  power的值足够大可以让贴图变得黑边分明。

M_OceanWater 海洋材质

置换效果

M_OceanWater

  这次加入了置换贴图的效果

M_OceanWater

  这个节点大概可以细分为三大模块
  看起来很复杂,其实稍微结构之后重复的节点很多的。

M_OceanWater

  法线贴图上两个方块内的节点大部分是相同的。
  下方的方框代表大波涛的效果,上方是小波涛的效果。
  大波涛只是多了一个 Rotator 节点来增加细节
  完全可以合并成一个 Material Function 来弄得。

M_OceanWater

  置换贴图也是如法炮制,节点的连接和大波涛的连接一样的。

M_OceanWater

海水颜色

  颜色设置这里就大有学问了

M_OceanWater

  我大致将整理了一下
  这里用到 switchNode(青色的节点) 来分离效果,因此连接也比较混乱

M_OceanWater

  我们往上看
  首先红框上的三个节点都是 switchNode 节点
  用户可以勾选来触发更多选项,默认都是不勾选的。
  因此只有黄色框框的部分是连接起来的。

M_OceanWater

  通过菲涅尔输出海水的颜色,效果更加真实。
  菲尼尔效应可以查看这个视频链接
  简单地说就是光线入射角(于接触平面形成的夹角)越小,物体的反光越强,入射角越大反光越弱。
  上面小视频也可以看到,当角度越小黑白越分明,角度越大就几乎纯白了。

  normalize 节点是向量归一化节点,是将向量转换为单位 1 保留自身方向的操作。
  TrasnfromVector 则是将 tangent space 转换为 World space
  tangent space 是基于物体空间而 world space 反之。

M_OceanWater

  由此就将法线贴图转换带菲涅尔的灰度图。

M_OceanWater

  最后颜色输出的效果如上图

反射贴图

M_OceanWater

  下面来讲解发射效果,因为比较简单好讲
  反射加上去就像在水面上贴了一层膜,其实这个反射是假反射
  因为这个反射需要 CubeMap 环境贴图来伪造出天空效果。

M_OceanWater

  主要是靠 RefelectionVector 获取反射效果的UV
  连接到贴图上就有种贴图带来的镜面反射的质感。

荡漾的泡沫

M_OceanWater

  默认FoamDistortion属性为零,因此这里的连接就和波浪的连接一样的。
  但是如果不为零就复杂了。

M_OceanWater

  我们可以看到这张波浪贴图的RG通道上的效果
  这和传统意义上的 TextureCoordinate 输出的 UV 空间扭曲了多少

M_OceanWater

  这种意义不明的扭曲叠加直接做出了泡沫丛生的贴图。

M_OceanWater

  最后就是将置换贴图的效果提取出来,增加对比度。

M_OceanWater

  中间部分的这些节点都是为了混合泡沫节点的效果。
  置换的效果限制一层
  菲涅尔法线的效果再限制一层
  所以最后泡沫出现的地方都是波浪很高而且需要较高角度才能看到。

M_TranslucentWater 透明水材质

M_TranslucentWater

  其实透明水材质的波涛设置和都是使用了四象波涛,基本原理是一样的。
  重点在于透明效果的实现

M_TranslucentWater

  这里的透明材质采用了不同于 Udemy 课程的实现方法
  Udemy是使用相减,而官方水素材则是使用了相除,我特意做了一个测试材质进行验证。

  使用相除的效果


  相除的特点在于越靠近水面,白色的区域就会越多,而相减的效果则趋向于平静。
  也就是说相除的效果会产生,越靠近水面越清澈,越远离水面越朦胧的效果。

  不过最后会乘上世界坐标减去摄像机坐标的数值,所以最后呈现的结果其实和 Udemy 教程实现的效果相似

M_TranslucentWater