J'implémente actuellement un jeu avec une vue de haut en bas de l'océan. J'utilise ce qui suit, une petite texture abstraite:
La texture réelle est transparente, j'ai ajouté la couleur verte pour plus de clarté.
Le problème que j'ai maintenant, c'est que je ne sais pas comment animer cette texture pour que l'eau soit belle. J'ai essayé de déplacer la texture avec une vague de péché texture.y += sin(angle)
. Bien sûr, maintenant toute la texture bouge, ce qui semble irréaliste. La prochaine chose que j'ai essayée est d'ajouter un autre calque et d'implémenter un effet de parallaxe. De sorte que les réflexions sous la surface de l'eau se déplaceraient également, mais beaucoup plus lentement. Ça a l'air un peu mieux mais toujours pas ... assez sympa.
Je pense que la meilleure animation serait, si les cellules individuelles se dilataient et se contractaient, un peu comme une toile ou un morceau de tissu. Imaginez que quelqu'un tire légèrement sur un sommet de ces cellules et que la cellule voisine se dilate et que la cellule vers laquelle je tire (ou pousse) se contracte. Un peu comme un réseau de ressorts (?). Mais je ne sais pas comment implémenter quelque chose comme ça:
- Quel est le modèle mathématique pour cela? Quelque chose avec des ressorts, où les forces poussent / tirent?
- Et si oui, comment mapper ce modèle à la texture donnée? Garder toutes les courbes et quoi non ...
(Je suis également ouvert à différentes idées / réponses sur la façon d'animer la texture donnée. Le réalisme n'est pas le point ici, juste une belle eau comme des mouvements ...)
Solution de DMGregory
J'ai posté un exemple de libgdx dans ce post: l'animation de l'eau 2D est irrégulière et non fluide (voir la réponse sur le filtrage des textures)
_Noise
est [un échantillonneur de texture qui lit] la petite texture aléatoire blobby ci-dessus.v2f i
Les données sont interpolées à partir du vertex shader - nous utilisons principalement pour obtenir les coordonnées de texture pour le pixel , nous nous inspirons,i.uv
. Et vous avez exactement raison pour tout le reste.C'est ce qu'on appelle un effet caustique, et la génération de ces effets au moment de l'exécution prend assez de temps, donc cela se fait traditionnellement avec une animation image par image pré-rendue. Il existe des outils qui généreront des images d'animation caustiques pour vous, comme Caustics Generator , qui a une version gratuite pour une utilisation non commerciale. Il existe également des modèles prédéfinis que vous pouvez acheter pour beaucoup moins cher que la version professionnelle de l'outil que j'ai mentionnée.
Notez que les effets caustiques sont également généralement un effet appliqué comme un cookie léger sur un terrain sous-marin ou sur la surface sous-marine. Autrement dit, le mettre à la surface de l'eau tout en regardant vers le bas n'est pas normalement à quoi ressemble l'eau.
la source
Cela ressemble à une texture que vous pourriez générer à partir d'un graphique voronoi, par exemple:
Vous pouvez apporter de petits ajustements fluides au graphique en déplaçant les points; redessiner le graphique chaque image serait assez cher, vous voudrez donc probablement pré-rendre l'animation.
la source
Il existe une méthode oldschool, impliquant une couche de texture inférieure et deux demi-textures transparentes pour la réflexion sur le dessus.
Si vous voulez aller jusqu'au bout et que l'eau ne semble pas pleine de vagues clonées ou de cartes de flux de soupe bleu samish, c'est le but.
https://steamcdn-a.akamaihd.net/apps/valve/2010/siggraph2010_vlachos_waterflow.pdf
la source