Unity Realistic Flow

Catlike Coding的Flow篇章的学习记录,整篇不会贴代码,原链接代码写的很详细,还有源码。他所有教程最大的特点就是每一步都写出思路,可能是错的,但是会进一步讲怎么修正和改善,你能清晰地了解到他的思考过程,这比直接放出结果的教程更有意义。首先这篇讲的是Valve 最早运用在Left 4 Dead 2上运用的水体技术,分享在SIGGRAPH 2010。这篇的目的不是仅仅为了描述水,而是在流动的液体,泥浆和熔岩都可以视为Flow,但是教程不涉及复杂的物理交互模拟。

 一、UV流动

首先采用均匀排布的颜色色块纹理来观察UV变化。

先说整体思路:

1,实现一个UVFlow的函数先让UV流动起来,即给其添加一个随机方向的 vector X_Time,随机可以通过采样让UV产生采样的位置变化。

2,如果一直朝一个方向变化,则最后的采样失真会很严重,所以加上时间重置试一试。

3,时间重置会产生间隔和重复感,再增加一个时间相关的0-1权重,使两个重复片段间衔接过渡自然,但是权重导致黑色脉冲,在视觉上反而更严重了。

4,增加采样低频柏林噪声图,并添加到时间变量上,等于给时间增加了不同的相位差,导致UV沿着柏林噪声的坡度方向消退。

5,黑色的波纹般的消退并不令人满足,我们可以进一步思考,如果不使其消散成黑色,而是和另一种东西融合,先和原始未扭曲的纹理进行混合试一下。

 融合效果并不好,固定纹理会淡入淡出,再加上两种模式并不相同,动静结合很容易看出破绽,于是想到与另一个时间轴上的自己结合,时间偏差设置为一半的时间间隔,也就是0.5S。

6,虽然还有不规则波纹,效果已经好了很多,但是因为两种重复模式实际是相同的,所以持续周期时间只有原来的一半。我们也增加bias(0.5)在UV上,巧合的是因为我们使用的基础纹理在偏差后白色线框保持不变,色块发生偏移,这导致在新的Flow效果中,和之前的区别在于,白的波纹仍然是0.5S的周期,而颜色的变化周期是1S。

7,既然设置偏差很有效,我们不妨设置一个变化更复杂的偏差给UV,这样能使得变化周期更长。先试试简单按照时间来给予一个UV偏差,这会导致整个动画滑动(懒得搞动图,效果利用下图脑补下,大体上虽然还在变换,但是各种色块不断往右移动)。

 8,添加jump来实现变换,给一个UJump和VJump分别强度控制UV跳跃距离,为了实现跳跃,需要在每个时间节点处跳跃,原文的函数其实和floor函数相似,在每个时间节点进行floor跳跃。

二、定向流动

三、波浪

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值