Unity引擎制作海面效果
大家好,我是阿赵。
之前介绍了菲涅尔水的反射区域区分做法,上一次最后是做到了这个效果,接下来做一下漫反射的颜色和水波。
 
 
一、 漫反射颜色
  关于漫反射的光照模型,之前分享过,一般比较常用的是Lambert和HalfLambert。
 
  这里我采用的是HalfLambert,这样海水会稍微亮一点。其实在没有用法线贴图的情况下,水面又是一片平整的情况下,其实这个漫反射的光照模型是基本上看不出有什么效果的。不过无所谓,因为后面几篇会用到法线和高光,所以这里也先写了。
 
  加上一个baseCol作为颜色调节,可以控制水面的基本颜色
 
  可以根据需要调节各种基本色,这个其实很有用,因为每天不同的时间点,由于阳光和天空的变化,水面的颜色也会跟着变化
 
二、 水波动画

  为了做一个水波的效果,我从Unity的assetStore里面下载了一个免费的水资源贴图。
   接下来,用一个简单的UV动画,做水波纹的流动效果:
   先拿到UV,然后给他一个平铺次数

  然后很自然的用UV乘以x轴和y轴的速度,再乘以时间,做出自动滚动的UV动画
 
  中间有一个噪声图的处理
 
  这是因为,如果单纯的UV移动,会感觉波纹是直来直往不会拐弯的,加上了噪声图之后,波纹会产生一定的扭曲效果,比较真实一些。
 接下来就是对水纹贴图采样了
 
  现在水面上出现了波纹,也会沿着一个方向流动了。
 
  不过,这个效果还是有点单调,于是对波纹的采样进行一下修改,给波纹进行2次采样,两次的UV的移动速度是不一样的:
 

  这样就有了2层的纹理流动效果,不过由于现在是用add加起来的,所以叠加的部分会曝光:
 
  所以给两个方向的采样都乘以0.5,再加起来
 
  现在水面就有了2个方向的波纹流动,而且两个方向的波纹是可以分别调节速度的
 
  不过由于我们之前做了漫反射颜色,所以其实不用乘以0.5再相加,把漫反射的水面颜色和水波纹的颜色相乘,也能得到正确的效果:
 












![为什么 [] == ![] 为 true?](https://img-blog.csdnimg.cn/direct/137010b48d244f5683956d53eeeffeab.png#pic_center)






