由于时间有点紧张,所以就没有去细化效果,有点难看说实话哈哈哈
参考文章
https://zhuanlan.zhihu.com/p/222500848
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-节点,就可以得到真正的边缘Mask
烧焦会比辉光更前一些,所以Distance为0.5
Editor模式下运行ActorTick方法
只需要重载Actor的ShouldTickIfViewportsOnly()函数,令其返回true,这样就会在Edtor下调用该类型对象的Tick()函数
参考文章:https://chriszuko.com/ue4-how-to-editor-tick/
结果如下: