原文链接:UE4---Flowmap燃烧溶解笔记
由于时间有点紧张,所以就没有去细化效果,有点难看说实话哈哈哈
参考文章
DeepSpaceBanana Art | 作者:Taizyd Korambayil
FlowMap
FlowMap 其实就是 UV 动画,常用于制作流动效果,只有 RG 通道,存储的是流动的方向,下面就是存储了顺时针流动方向的 Flowmap
处理 FlowMap
FlowMap 导入 UE4 需要 取消勾选 sRGB,压缩设置为 向量置换贴图,否则会因为压缩出像质量损失问题
由于图片无法保存负数信息,所以将信息保存到 0-1 之间,所以我们需要手动去还原信息,与法线贴图的方法一致
我们还要反转 R 通道才能得到正确的方向,当然如果你在 FlowPainter 勾选了 FilpR 那就不用在 UE4 里再次翻转了
因为要动起来,所以我们需要将刚才得到的 偏移方向 与 时间 相乘,为了让 Time 更好的控制偏移,我们需要将 Time 连接 Frac 节点,这样得到在 0-1 不断循环的区间
可以看到有很明显的割裂感,不是 gif 录制造成的嗷
这是因为 Frac(Time) 这里过度不顺滑
所以我们需要两段 UV 动画进行缓和,达到比较平缓的过度,让 Time+0.5 就可以得到第二段动画
现在需要将两端 UV 动画进行 Lerp 淡入淡出,将 Frac 之后的 Time 缩放到 -1~1 再 绝对值,既可以得到下面函数表示,完美过渡了 0~1 的割裂感
这里原作者的 Flowmap 感觉是为了更好的在 UE4 中控制燃烧的流向,所以 FlowMap 感觉差不多是同一个方向,所最终材质蓝图如下
SphereMask
利用 SphereMask 来决定然后燃烧范围,通过材质参数集来传递 SphereMask 的中心以及半径
我们将中心设置为 (0,0,0) ,可以看到黑色区域随着半径的增大而增大
最后与上面得到 FlowMap 灰度图进行相减,并限制范围在 0-1
得到一个有燃烧流向的 Mask 图
按照道理来说,燃烧是以中心点开始往四周燃烧的,如果我们不将 SphereMask 乘 2 将得到下面的结果,可以看到与球体中心距离较远的地方都变黑了,这是不正常的,所以要乘 2
边缘发光和烧焦
利用 Distance 节点来获取边缘 Mask
得到如下图
原理分析,首先我们得到 SphereMask 与 FlowMap 处理过后 Mask 贴图颜色分析如下
那么我们将 Distance 连接到参数 0.45,中心得到的颜色则是 abs(0 - 0.45), 边缘得到的颜色是 abs(0.45-0.45),为燃烧区域则是 abs(1-0.45),结果如下
接下来我们确定边缘 Mask 的范围,并缩放到 0-1 区间,比如我们除以 0.1,那么 0-0.1 边缘区间就会缩放为 0-1,而其他不相干区域就会变为大于 1,到时候连接 1-x 节点,就可以得到真正的边缘 Mask
烧焦会比辉光更前一些,所以 Distance 的参数改为0.5
Editor 模式下运行 ActorTick 方法
只需要重载 Actor 的 ShouldTickIfViewportsOnly() 函数,令其返回 true,这样就会在 Edtor 下调用该类型对象的Tick()函数
参考文章:UE4 How to make an actor that can Tick In the Editor
结果如下: