Unity引擎制作海面效果
大家好,我是阿赵。
之前介绍了菲涅尔水的反射区域区分做法,上一次最后是做到了这个效果,接下来做一下漫反射的颜色和水波。
一、 漫反射颜色
关于漫反射的光照模型,之前分享过,一般比较常用的是Lambert和HalfLambert。
这里我采用的是HalfLambert,这样海水会稍微亮一点。其实在没有用法线贴图的情况下,水面又是一片平整的情况下,其实这个漫反射的光照模型是基本上看不出有什么效果的。不过无所谓,因为后面几篇会用到法线和高光,所以这里也先写了。
加上一个baseCol作为颜色调节,可以控制水面的基本颜色
可以根据需要调节各种基本色,这个其实很有用,因为每天不同的时间点,由于阳光和天空的变化,水面的颜色也会跟着变化
二、 水波动画
为了做一个水波的效果,我从Unity的assetStore里面下载了一个免费的水资源贴图。
接下来,用一个简单的UV动画,做水波纹的流动效果:
先拿到UV,然后给他一个平铺次数
然后很自然的用UV乘以x轴和y轴的速度,再乘以时间,做出自动滚动的UV动画
中间有一个噪声图的处理
这是因为,如果单纯的UV移动,会感觉波纹是直来直往不会拐弯的,加上了噪声图之后,波纹会产生一定的扭曲效果,比较真实一些。
接下来就是对水纹贴图采样了
现在水面上出现了波纹,也会沿着一个方向流动了。
不过,这个效果还是有点单调,于是对波纹的采样进行一下修改,给波纹进行2次采样,两次的UV的移动速度是不一样的:
这样就有了2层的纹理流动效果,不过由于现在是用add加起来的,所以叠加的部分会曝光:
所以给两个方向的采样都乘以0.5,再加起来
现在水面就有了2个方向的波纹流动,而且两个方向的波纹是可以分别调节速度的
不过由于我们之前做了漫反射颜色,所以其实不用乘以0.5再相加,把漫反射的水面颜色和水波纹的颜色相乘,也能得到正确的效果: