Je recherche n'importe quelle entrée sur la simulation de l'eau en 2D, par rapport à un réseau plutôt grand (appelez-le) bloqué / non bloqué (vu de côté). J'ai trouvé les idées suivantes:
Automates cellulaires
Faites une simulation massivement parallèle sur le CPU, en utilisant des automates cellulaires . Avec des règles aussi simples que:
- S'il y a une cellule ouverte vers le bas, allez-y.
- Vérifiez les cellules gauche et droite, choisissez-en une au hasard et déplacez-vous vers elle.
Avantages
- Simple à mettre en œuvre.
- Significative / déterministe dans un système multijoueur.
Les inconvénients
- Probablement très lent.
- Pas convaincant.
Dynamique des fluides sur le GPU
Effectuez une approximation approximative de la dynamique des fluides sur le GPU par rapport à une texture comme la suivante:
+------+-----+-----+-------+
|R |G |B |A |
+------+-----+-----+-------+
|vX |vY |NULL |Density|
+------+-----+-----+-------+
Avantages
- Probablement très rapide.
- Pourrait être assez convaincant.
- Un autre pixel shader pourrait le rendre directement.
Les inconvénients
- Difficile à mettre en œuvre.
- Difficile à modifier.
- Je ne peux pas allouer une seule texture de la taille de mon niveau.
- Je pourrais chevaucher les zones de la grille, mais cela ajouterait encore plus de complexité.
Particules
Utilisez des particules pour simuler l'eau. Pendant le rendu, utilisez le mélange additif, puis appliquez une fonction de multiplication au canal alpha pour donner des bords nets à l'eau.
Avantages
- Sera probablement joli.
- Facile à mettre en œuvre.
- Facile à rendre.
- Significatif dans un système multijoueur, mais nécessiterait un peu de bande passante pour être transféré.
Les inconvénients
- Les effets inter-particules seront probablement lents (recherche de voisinage).
- Peut entraîner une «fuite» d'eau à travers les espaces solides (car l'espace solide est petit, par exemple 1px).
- Pourrait conduire à des trous étranges dans l'eau en fonction de la taille des particules.
- Les deux éléments ci-dessus pourraient être atténués en permettant aux particules de dériver plus près les unes des autres que leur taille réelle, mais causeraient des problèmes avec les performances inter-particules et particules / paysage.
D'autres idées?
Remarque: Ceci est une approximation, je ne cherche pas ici de l'eau physiquement correcte - juste quelque chose qui «est assez bon» (points bonus pour rapide et sale). Le jeu est multijoueur, donc malheureusement tout le niveau doit être simulé en continu.