ZunGarden水和相关材质逻辑分析

在这里插入图片描述
ZunGarden水和相关材质分析

整体概况

我们对这个模块的主要研究的内容有:

  1. 静态水面其反射是如何实现的
    ![image1.png][2]

  2. 静态水面其流动效果和波纹感是如何实现的

  3. 静态水面如何实现的鼠标点击下的波纹荡漾。
    ![image2.png][3]

  4. 静态水面浮光掠影,主要控制透明度,最后并没有使用

  5. 静态水面如何实现的折射效果

![image3.png][4]

6 . 动态水面的制作

![image4.png][5]

  1. 鱼的材质制作

![image5.png][6]

1.1水面相关所有组件

我们找到水面材质的actor后我们会看到它里面的组件:

![image6.png][7]

  1. Billboard: BillboardComponent 是一个会被渲染为始终朝向摄像机的 2D
    贴图,

  2. StaticMesh:一个巨大的有厚度的平板

  3. Sphere:

  4. :ParticleSystem

1.2水面相关成员变量

![image7.png][8]

![image8.png][9]

这里比较值得先说的就是Billboard,设置Billboard的大小,大小主要和Actor大小一致。

静态水面反射机制

其反射使用的方法是基于IBL的反射原理。其为了性能上的优化,做了基于顶点的计算。所以,其还是使用了自定义UV的技术来在顶点着色器中进行计算

![image9.png][10]

材质会暴露一个LocationandRadius的参数,这个参数的前三个值代表的是其世界空间中的坐标,最后一个值代表的是半径

所有的参数如下

![image10.png][11]

当创建材质时

![image11.png][12]

在蓝图动态创建这个材质

![image12.png][13]

之后对这个参数进行修改。

其中ReflectionOffset的值是:

![image13.png][14]

首先将该actor在空间中对应的反射球的位置ReflectionActor的位置变换到自身的局部空间当中。然后用这个值来设置Reflection
Offset的值。也就是说我们最后对应cubemap的坐标位置是和反射球的位置保持一致的。

![image14.png][15]

之后实际上还有一个操作就是设置Sphere的半径和在世界空间的位置,这个位置主要是用ReflectionActor的位置,也就是说他们两个的世界空间位置是在一块的。

现在我们回到我们的材质当中。

![image15.png][16]

这里最重要的节点就是上图,根据相机位置反射位置和顶点位置,进行顶点级别的操作,这件事情当然是可以在像素着色器中做,但是会更消耗性能。这时我们计算出坐标后,有三个值,我们把之XY存储到第customizedUV1中,然后把Z存在customizedUV2
的u中,然后它的V是存储的它的菲尼尔系数

![image16.png][17]

最后在我们的自发光的模块,进行对应的取值就可以了

![image17.png][18]

当然最后会有菲尼尔的系数叠加

![image18.png][19]

静态水面皱纹与流动

其流动的效果,还是通过自定义Uv,增加一个平移来实现

![image19.png][20]

那么它的皱纹是如何实现的呢,主要是通过Normal贴图来实现的

![image20.png][21]

最后的法线贴图和cubemap里的反射位置进行叠加,呈现波纹的效果

静态水面水面波纹互动

这个效果就是能够在鼠标点击的时候制作一个围绕水面的波纹

![image21.png][22]

![image22.png][23]

主要的做法是传给材质一个Shpere的坐标,然后根据权重,进行从内到外的波纹加权
![image23.png][24]

从而实现这样的基本功能

静态水面浮光掠影

这里在测试的时候好像没看出有什么用,这里其实就是控制其透明度的问题

![image24.png][25]

总之在最终的材质中没有用到,官方的吐槽是保罗的大便???

静态水面水底的折射效果

![image25.png][26]

其利用水底的蠕动,进行折射效果的模拟,我们来看具体的材质

![image26.png][27]

首先是看到是只有CUV2是使用的

最主要的就是世界空间偏移,其使用的VertexDistortion进行顶点扭曲,具体的含义就不介绍了。这里的

![image27.png][28]

具体的效果就是两个材质的叠加,然后和我们的CUV2影响,来增加层次感

动态水面的制作

首先我们要知道的是,动态水面这里特指是只水缸里的水制作。它的技巧主要是对场景偏移上的操作上面,剩下所有的都和那些是一样的

![image28.png][29]

其在编辑器中对顶点颜色进行编辑,然后在及逆行一个Jiggle_WPO的偏移操作,

![image29.png][30]

这样就会呈现一个水的溢出效果呈现呼吸感

八. 鱼的材质制作

其主要技术点还是世界场景偏移,让其能进行摆动

最主要的就是顶点颜色的绘制

![image30.png][31]

![image31.png][32]
有非常多的参数进行控制,之后

![image32.png][33]

通过不同的RGB的颜色来判断是头还是尾,这样来进行摆动

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Papals

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值