Shader_FlowMap应用

最近手游项目上需要给下水道做流动水,水流要能跟着弯曲流动,避开杂物,分流等。所以就采用了FlowMap来做。记录下核心部分。
FlowMap推荐使用FlowMapPainter来制作。也可以使用其他有流体功能的软件烘焙。

FlowMap实际还是UV动画,只是事先制作好UV流动方向的贴图, 非常方便定制不同的流动速度和方向,绕开固定位置物体等。下面用Unity插件ASE图形化Shader直观表示。
FlowMap是用的RG通道记录坐标,同UV的坐标。
只需要读取FlowMap里记录的坐标根据时间对原UV进行添加即可让原图流动起来。
但是这里会有个问题,就是走完一个循环会出现闪回,然后从头开始,没有自然的衔接循环起来。

解决问题的关键就是通过两层贴图的流动偏移,交替过渡显示,来让流动自然循环起来。
这里就需要将时间错开,这是整个FlowMap的算法核心。
得到两个错开的UV循环流动时间。

得到两层贴图的融合时间。

在原来的UV流动上,用两个错开的循环流动时间得到两个错开的UV流动。

对原贴图分别用错开的UV流动,通过融合时间Lerp两层贴图,输出到对应贴图接口。
其他类型贴图重复下面的方法输出即可。
