Actualmente implemento un juego con una vista de arriba hacia abajo del océano. Yo uso lo siguiente, una pequeña textura abstracta:
La textura real es transparente, agregué el color verde para mayor claridad.
El problema que tengo ahora es que no sé cómo animar esta textura para que el agua se vea bien. Traté de mover la textura con una ola pecado texture.y += sin(angle)
. Por supuesto, ahora toda la textura se está moviendo, lo que parece poco realista. Lo siguiente que intenté es agregar otra capa e implementar un efecto de paralaje. De modo que los reflejos debajo de la superficie del agua también se moverían, pero mucho más lentamente. Se ve un poco mejor pero aún no ... lo suficientemente agradable.
Creo que la mejor animación sería, si las celdas individuales se expandieran y contrajeran, como una telaraña o tela. Imagínese si alguien tirara levemente de un vértice de estas celdas y la celda vecina se expandiera y la celda que yo jale hacia (o empuje) se contraiga. Algo así como una red de resortes (?). Pero no tengo idea de cómo implementar algo como esto:
- ¿Cuál es el modelo matemático para esto? Algo con resortes, donde las fuerzas empujan / tiran?
- Y si es así, ¿cómo mapeo este modelo a la textura dada? Manteniendo todas las curvas y lo que no ...
(También estoy abierto a diferentes ideas / respuestas sobre cómo animar la textura dada. El realismo no es el punto aquí, solo algunos movimientos agradables como el agua ...)
Solución de DMGregory
Publiqué un ejemplo de libgdx en esta publicación: la animación de agua 2d es irregular y no es uniforme (vea la respuesta sobre el filtrado de texturas)
_Noise
es [una muestra de textura que lee] la pequeña textura aleatoria de arriba.v2f i
son los datos interpolados del sombreador de vértices; los usamos principalmente para obtener las coordenadas de textura para el píxel que estamos dibujandoi.uv
. Y tienes toda la razón sobre todo lo demás.Esto se denomina efecto cáustico, y generar estos efectos en tiempo de ejecución consume bastante tiempo, por lo que esto se hace tradicionalmente con animación pre-renderizada cuadro por cuadro. Existen herramientas que generarán cuadros de animación cáusticos para usted, como Caustics Generator , que tiene una versión gratuita para uso no comercial. También hay algunos prefabricados que puede comprar por un precio significativamente más barato que la versión profesional de la herramienta que mencioné.
Tenga en cuenta que los efectos cáusticos también suelen ser un efecto aplicado como una galleta ligera en un terreno submarino o en la superficie submarina. Es decir, ponerlo en la superficie del agua mientras se mira hacia abajo no suele ser el aspecto del agua.
fuente
Esto parece una textura que podría generar a partir de un gráfico voronoi, por ejemplo:
Puede hacer ajustes pequeños y suaves en el gráfico moviendo los puntos; volver a dibujar el gráfico en cada cuadro sería bastante costoso, por lo que es probable que desee renderizar previamente la animación.
fuente
Hay un método de la vieja escuela, que implica una capa de textura inferior y dos texturas medio transparentes para la reflexión en la parte superior.
Si desea llegar hasta el final y desea que el agua no se vea llena de olas clonadas o mapas de flujo de sopa azul samish, debe llegar al objetivo.
https://steamcdn-a.akamaihd.net/apps/valve/2010/siggraph2010_vlachos_waterflow.pdf
fuente