Building Worlds In Unreal 学习笔记——番外1:自制交互水面

Building Worlds In Unreal 学习笔记——番外1:动态的水

  • 1 距离场设置与测试
  • 2 原理:根据距离场扭曲UV采样
  • 3 实现
  • 4 一些应用反馈

上网冲浪过程中,发现了戴老师写的关于动态液体的材质,于是也学习一手,添加到Ben佬的这个水的材质中来

做这个的思路和原理在戴老师的文章里写的很好了

我就在这里记录下我对于自己这个工程做的小调整

1 距离场设置与测试

首先打开计算距离场(打开后需要重启)
Building Worlds In Unreal 学习笔记——番外1:自制交互水面_第1张图片

建立一个材质测试下
Building Worlds In Unreal 学习笔记——番外1:自制交互水面_第2张图片
把材质给一个平面,显示DistanceToNearestSurface这个距离场节点的效果
Building Worlds In Unreal 学习笔记——番外1:自制交互水面_第3张图片
还会用到一个显示相交位置法线的节点
Building Worlds In Unreal 学习笔记——番外1:自制交互水面_第4张图片

2 原理:根据距离场扭曲UV采样

这里借用戴老师的图

原本水流是正常朝着一个方向流的
Building Worlds In Unreal 学习笔记——番外1:自制交互水面_第5张图片
如果产生交互那么水流就会绕着物体表面流
Building Worlds In Unreal 学习笔记——番外1:自制交互水面_第6张图片
这个绕是怎么个绕法呢,大致流向可以推测是沿着法线方向外扩
Building Worlds In Unreal 学习笔记——番外1:自制交互水面_第7张图片
随着离开球的距离越来越远,水流流向的改变效果越来越弱。足够远之后,原本的流向完全不再改变。
Building Worlds In Unreal 学习笔记——番外1:自制交互水面_第8张图片

3 实现

根据原理和戴老师的文章,连了这么一个材质函数
Building Worlds In Unreal 学习笔记——番外1:自制交互水面_第9张图片
大意就是,得到物体周围某个限定范围内的一圈,带法线方向的,根据1→0渐变的,一个mask
为了让这个mask在什么方位都可以用,记得回到切线空间投影

然后原始的UV减去这层mask,得到UV坐标向外扩的效果,然后加上方向向量,就可以得到拖尾效果

把这个函数放到在小场景的练习里用的水材质上
Building Worlds In Unreal 学习笔记——番外1:自制交互水面_第10张图片

  • 这里回去修改了一下flowmap的函数,因为发现调整方向的时候u,扰动拖尾方向和水流方向不一样(原本没有这个乘以-1)
    Building Worlds In Unreal 学习笔记——番外1:自制交互水面_第11张图片如果没有乘以-1的话,得到的效果和自己输入的flowmap想要的方向是相反的
    举例来说,原本没有乘以-1,U是正数,采样坐标往U方向增加,显示来看是整个图向着-U方向在运动
    所以乘了-1以后,变成采样坐标往-U方向增加,显示来看是整个图向着U方向在运动,就和做扰动里的拖尾方向一致了

调调参数得到效果
拿一块平面来测试

放到场景里试试

可以看到大致实现了扭曲的效果

4 一些应用反馈

以下是一些应用这个方法后的碎碎念

  • 距离场距离场,终究是在算距离来模拟
    在我们这个小场景中,几何体太多了,距离场的数据会起伏比较小,因而在场景里的扭曲效果很不明显
    我们的场景是个浅浅的河,河底有很多小石头也会被纳入河面距离场的计算,从而音响效果
    我们其实主要是希望河上的木头和大石块发生水流扰动拖尾
    这个方法感觉方便用于那种 水面上东西不多 以及 有较深较平的水底 的水面
  • 以及对于从水面外移动到水面的物体来说,因为距离场的计算,会出现还没接触水面,水面就开始扭曲的效果
    这个方法对于不离开水面,一直在水面上的物体,还是不会看出bug的
  • 以及对于往外推法线的那个参数,还是不要调的太大,对扭曲UV调的过大,就会出现类似双螺旋的情况,就很假了
    Building Worlds In Unreal 学习笔记——番外1:自制交互水面_第12张图片

你可能感兴趣的:(Building,Worlds,In,Unreal—学习笔记)