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

Posted 清清!

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Building Worlds In Unreal 学习笔记——番外1:自制交互水面相关的知识,希望对你有一定的参考价值。

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

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

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

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

1 距离场设置与测试

首先打开计算距离场(打开后需要重启)

建立一个材质测试下

把材质给一个平面,显示DistanceToNearestSurface这个距离场节点的效果

还会用到一个显示相交位置法线的节点

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

这里借用戴老师的图

原本水流是正常朝着一个方向流的

如果产生交互那么水流就会绕着物体表面流

这个绕是怎么个绕法呢,大致流向可以推测是沿着法线方向外扩

随着离开球的距离越来越远,水流流向的改变效果越来越弱。足够远之后,原本的流向完全不再改变。

3 实现

根据原理和戴老师的文章,连了这么一个材质函数

大意就是,得到物体周围某个限定范围内的一圈,带法线方向的,根据1→0渐变的,一个mask
为了让这个mask在什么方位都可以用,记得回到切线空间投影

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

把这个函数放到在小场景的练习里用的水材质上

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

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

放到场景里试试

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

4 一些应用反馈

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

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

以上是关于Building Worlds In Unreal 学习笔记——番外1:自制交互水面的主要内容,如果未能解决你的问题,请参考以下文章

Building Worlds In Unreal 学习笔记——29-30 水坑与涟漪

Building Worlds In Unreal 学习笔记——01-02 概览与引入

Building Worlds In Unreal 学习笔记——12-14 瀑布/雾与光/总结与展望

Building Worlds In Unreal 学习笔记——03-06 地形贴图/地形材质/修正重复/近景位移

Building Worlds In Unreal 学习笔记——31-33 天空与雾气/体积云参数与材质分析

Building Worlds In Unreal 学习笔记——31-33 天空与雾气/体积云参数与材质分析