Unity引擎制作海面效果
大家好,我是阿赵。
继续做海面效果,上次做完了漫反射颜色和水波动画,这次来做法线和高光效果。
一、 高光的计算
之前介绍过高光的光照模型做法,比较常用的是Blinn-Phong
所以我这里也稍微连线实现了一下
为了能看得更清楚高光的效果,我把漫反射颜色去掉,单独看高光的部分:
需要说明的是,现在这个效果,是配合着天空盒里面的太阳位置,还有我在场景里面的直射灯的角度,得到的一个好像太阳光在水面的光线反射效果,实际上只是对位置造成的效果,并不是真的写个Shader就有这么理想的效果的。
高光的光照模型很简单,有几个参数是控制高光颜色、高光的强度和范围的。
如果把漫反射颜色加上去,就会变成这样:
从性能上来说,如果做到现在这里就停手,其实效果也不错,而且并没有太多消耗性能的地方。可以作为一个简化版的水面效果吧。
接下来要开始添加法线的计算,后面还会添加各种深度效果。其实这些效果都是比较消耗性能的,我全部列举出来其实只是为了说明技术点,所以可以根据自己的需要,一点一点的添加。
二、 法线贴图采样
我这里的这些图,都是在Unity的AssetStore里面下载的免费水的资源。效果其实并不是特别的好,不过用来学习也足够了。
这里用到了法线贴图。其实没什么特别的难点,由于之前做漫反射水波纹的时候,已经计算好了2个会动的UV坐标来采样水波贴图,所以现在同样利用这两个UV,来采样法线贴图:
需要注意的是,由于是法线贴图,所以要勾选Unpack Normal Map。
勾选了之后,就可以设置参数调节法线贴图的缩放,也就是凹凸程度了。
接下来,把法线贴图采样得到的法线,输入到之前计算高光模型的世界法线:
把漫反射颜色去掉,单纯看高光,现在的高光会变成这样:
由于UV是和波纹动画一样的,所以这个高光也会动起来。
加上了漫反射颜色之后,水波纹和法线是同样的UV采样,所以完全是对得上的