次时代海水

先上最终效果:

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(-normalize(worldView), worldNormal));

这样就有了初步效果:

次时代海水_第1张图片

然后就是海面的高光,我们打算模拟下光照,如下:

half reflectiveFactor = max(0.0,

你可能感兴趣的:(次时代海水)