先上最终效果:
https://v.youku.com/v_show/id_XMzczNTYwNzAyMA==.html?spm=a2hzp.8244740.0.0
随着海岛奇兵海面的实现到上一个移动海面的改进,收到了不错的反响,这促使我开始思考,有没有可能在牺牲部分性能的情况下实现更加贴近pc端表现的海水。
话不多说,开始执行。
首先,我们要知道目光射入海水的方向:
float3 worldView = (IN.worldPos - _WorldSpaceCameraPos);
然后要获得海水的法线:
half4 nmap = (tex2D(_BumpTex, i.worldPos.xz + offset) + tex2D(_BumpTex, half2(-i.worldPos.z, i.worldPos.x) - offset)) * 0.5;
这里为了让海水有流动的效果,offset随着时间变化,而取法线贴图则是用了xz和z来出里扰动。
有了法线和眼睛视角,就可以根据菲涅尔公式计算点积:
half fresnel = sqrt(1.0 - dot(-