+out vec4 FragColor;
+
+uniform sampler2D uTexMain;
+uniform sampler2D uTexWater;
+uniform vec2 uInvRes;
+uniform float uTime;
+uniform vec3 uCam;
+
+in vec3 aNorm;
+in vec2 aUv;
+in vec3 aCo;
+
+void main()
+{
+ vec2 ssuv = gl_FragCoord.xy*uInvRes;
+ vec4 mapwater = texture( uTexWater, vec2(aUv.x,aUv.y-uTime));
+
+ float undistort = smoothstep(0.1,0.6,distance( uCam, aCo )*0.1);
+ vec2 trimedge = smoothstep(0.0,0.2,1.0-abs(ssuv-0.5)*2.0);
+ undistort *= trimedge.x * trimedge.y;
+
+ vec2 warpamt = (mapwater.rg-0.5)*0.05*aUv.y*undistort;
+ vec4 mapbackbuffer = texture( uTexMain, ssuv + warpamt );
+
+ float opacity = 1.0-smoothstep(0.4,1.0,aUv.y);
+ FragColor = vec4( mapbackbuffer.rgb, opacity );
+}