Tentei implementar o que o teodron sugeria:
void main()
{
vec2 uv = gl_FragCoord.xy / resolution.xy;
float sepoffset = 0.005*cos(iGlobalTime*3.0);
if (uv.y > 0.3 + sepoffset)// is air - no reflection or effect
{
gl_FragColor = texture2D(texture, vec2(uv.x, -uv.y));
}
else
{
// Compute the mirror effect.
float xoffset = 0.005*cos(iGlobalTime*3.0+200.0*uv.y);
//float yoffset = 0.05*(1.0+cos(iGlobalTime*3.0+50.0*uv.y));
float yoffset = ((0.3 - uv.y)/0.3) * 0.05*(1.0+cos(iGlobalTime*3.0+50.0*uv.y));
vec4 color = texture2D(texture, vec2(uv.x+xoffset , -1.0*(0.6 - uv.y+ yoffset)));
//
//vec4 finalColor = vec4(mix(color.rgb, overlayColor, 0.25), 1.0);
gl_FragColor = color;
}
}
Parece bem próximo (é difícil dizer sem a imagem de base), mas você pode ajustar os parâmetros.
Você pode vê-lo em ação lá: https://www.shadertoy.com/view/Xll3R7
Algumas observações:
- Eu tive que inverter a coordenada y desde que estava obtendo a imagem de cabeça para baixo, mas isso pode depender do que você passa para o resolution.xy; se o resultado for invertido, basta desmarcar uv.y
- Mudei suas declarações uniformes para que funcione com shadertoy. Você pode ignorar essas alterações.
- No entanto, você precisará adicionar um uniforme, fornecendo o tempo e usá-lo no lugar do iGlobalTime (que é o tempo em segundos)
- Adicionei um efeito de maré, pois parece que existe um no seu exemplo, mas é difícil dizer (consulte a variável sepoffset). Você pode removê-lo se não gostar
- Eu removi a cor da sobreposição, pois ela não estava bonita e seu exemplo não tinha uma
- Para ajustar o efeito ao seu gosto:
- altere o fator do iGlobalTime para acelerar / desacelerar o efeito (você pode alterar cada um deles separadamente, se quiser, digamos, acelerar o movimento x e diminuir o movimento y)
- altere o fator cos () para amplificar / atenuar o efeito
EDIT: Eu mudei o yoffset para incluir a modificação do @cepro
time
valor, você pode mudar ouv.xy
com um(sin(time),cos(time))
vetor de deslocamento. Obviamente, você deve descobrir as amplitudes das compensações seno e cosseno. Eu começaria apenas compensando ouv.y
primeiro e ver como posso ajustar ainda mais o efeito.