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 ); }