
ZunGarden水和相关材质分析
整体概况
我们对这个模块的主要研究的内容有:
-
静态水面其反射是如何实现的
-
静态水面其流动效果和波纹感是如何实现的
-
静态水面如何实现的鼠标点击下的波纹荡漾。
-
静态水面浮光掠影,主要控制透明度,最后并没有使用
-
静态水面如何实现的折射效果
6 . 动态水面的制作
- 鱼的材质制作
1.1水面相关所有组件
我们找到水面材质的actor后我们会看到它里面的组件:
-
Billboard: BillboardComponent 是一个会被渲染为始终朝向摄像机的 2D
贴图, -
StaticMesh:一个巨大的有厚度的平板
-
Sphere:
-
:ParticleSystem
1.2水面相关成员变量
这里比较值得先说的就是Billboard,设置Billboard的大小,大小主要和Actor大小一致。
静态水面反射机制
其反射使用的方法是基于IBL的反射原理。其为了性能上的优化,做了基于顶点的计算。所以,其还是使用了自定义UV的技术来在顶点着色器中进行计算
材质会暴露一个LocationandRadius的参数,这个参数的前三个值代表的是其世界空间中的坐标,最后一个值代表的是半径
所有的参数如下
当创建材质时
在蓝图动态创建这个材质
之后对这个参数进行修改。
其中ReflectionOffset的值是:
首先将该actor在空间中对应的反射球的位置ReflectionActor的位置变换到自身的局部空间当中。然后用这个值来设置Reflection
Offset的值。也就是说我们最后对应cubemap的坐标位置是和反射球的位置保持一致的。
之后实际上还有一个操作就是设置Sphere的半径和在世界空间的位置,这个位置主要是用ReflectionActor的位置,也就是说他们两个的世界空间位置是在一块的。
现在我们回到我们的材质当中。
这里最重要的节点就是上图,根据相机位置反射位置和顶点位置,进行顶点级别的操作,这件事情当然是可以在像素着色器中做,但是会更消耗性能。这时我们计算出坐标后,有三个值,我们把之XY存储到第customizedUV1中,然后把Z存在customizedUV2
的u中,然后它的V是存储的它的菲尼尔系数
最后在我们的自发光的模块,进行对应的取值就可以了
当然最后会有菲尼尔的系数叠加
静态水面皱纹与流动
其流动的效果,还是通过自定义Uv,增加一个平移来实现
那么它的皱纹是如何实现的呢,主要是通过Normal贴图来实现的
最后的法线贴图和cubemap里的反射位置进行叠加,呈现波纹的效果
静态水面水面波纹互动
这个效果就是能够在鼠标点击的时候制作一个围绕水面的波纹
主要的做法是传给材质一个Shpere的坐标,然后根据权重,进行从内到外的波纹加权
从而实现这样的基本功能
静态水面浮光掠影
这里在测试的时候好像没看出有什么用,这里其实就是控制其透明度的问题
总之在最终的材质中没有用到,官方的吐槽是保罗的大便???
静态水面水底的折射效果
其利用水底的蠕动,进行折射效果的模拟,我们来看具体的材质
首先是看到是只有CUV2是使用的
最主要的就是世界空间偏移,其使用的VertexDistortion进行顶点扭曲,具体的含义就不介绍了。这里的
具体的效果就是两个材质的叠加,然后和我们的CUV2影响,来增加层次感
动态水面的制作
首先我们要知道的是,动态水面这里特指是只水缸里的水制作。它的技巧主要是对场景偏移上的操作上面,剩下所有的都和那些是一样的
其在编辑器中对顶点颜色进行编辑,然后在及逆行一个Jiggle_WPO的偏移操作,
这样就会呈现一个水的溢出效果呈现呼吸感
八. 鱼的材质制作
其主要技术点还是世界场景偏移,让其能进行摆动
最主要的就是顶点颜色的绘制
有非常多的参数进行控制,之后
通过不同的RGB的颜色来判断是头还是尾,这样来进行摆动