【转载】UE4 —— 科幻扫描线效果笔记

757 阅读2分钟

原文链接:UE4---科幻扫描线效果笔记

GIF 2021-1-5 1-30-38.gif

思路

  1. 根据 Z 轴生成 0-1 Mask 贴图
  2. 控制顶部顶点的世界位置偏移
  3. 抖动效果
  4. 屏幕空间条
  5. 菲涅尔和 CameraFade
  6. 输入不透明度

根据 Z 轴生成 0-1 Mask 贴图

将世界空间坐标转换为模型空间,只取 Z 通道, ObjectBounds 返回的是模型的边界,我们除以 Z 通道就可以得到模型从底部到顶点 [0-1] 的 Mask 遮罩

image.png

我的修正:如果是将世界空间坐标转换为模型空间,上面原文作者的图显然是错的,应该如下所示 image.png

然后再将变换到模型空间的 Z 通道从 [-1, 1] 变换为 [0, 1] 的范围,效果才如下所示 image.png

控制顶部顶点的世界位置偏移

生成的 Z 轴 Mask 遮罩是用于控制 WorldPositionOffset

image.png

同样将顶点的世界空间 Pos 转换到模型空间,并将位置进行归一化,只取 RG 通道,这个 RG 通道其实就是顶点在 XY 平面移动的方向

image.png

那么 Z 通道自然用于是 Z 轴方向上的移动

image.png

通过在这两个方向上的位移,我们可以实现 模型的压缩(激活全息)顶部扩大(缩放半径),当 激活全息为 0 时是压扁状态,为 1 则是全息状态

GIF 2021-1-5 1-30-38.gif

抖动效果

image.png

通过 ScreenPosition 的屏幕 UV 将 V 轴缩放到 0-100,再 Floor,分成 100 个不同的矩形区域,这里为了方便展示,我设置为 0-10 区间,再缩放回 0-1 区间,可以看到整个屏幕给分成了若干个矩形区域,并不是根据模型来切分。

GIF 2021-1-5 1-30-38.gif

我们继续连接 MF_FloatNoise 节点,这个节点使用传入 Noise 种子和一个 2D 向量输出一个随机值,MF_FloatNoise 材质函数如下

image.png

得到一直在随机变化的矩形条

GIF 2021-1-5 1-30-38.gif

控制抖动 用于开关抖动效果,为 0 开启、为 1 关闭,在世界空间上进行一定的抖动偏移

image.png

结果如下

GIF 2021-1-5 1-30-38.gif

屏幕空间条

同样是利用 ScreenPosition 的 UV 进行操作,但是上面可以看到,随着摄像机的距离,映射在模型上面的 UV 区域是不会变化的,一直是以屏幕为标准。

image.png

这样根据摄像机与物体的距离来决定生成的 UV 条的数量,符合了我们的要求

GIF 2021-1-5 1-30-38.gif

菲涅尔和 CameraFade

菲涅尔 用于边缘的透明,CameraFade 用于靠近 Mesh 时透明

image.png

输入不透明度

将基于 屏幕空间的空间条菲涅尔CameraFade激活全息 进行相结合,输入不透明度

image.png

用于网格的 Scifi 材质

网格的 Scifi 材质只要修改抖动,以及输入的不透明度,删除 CameraFade 即可

image.png

image.png