Je voudrais améliorer mon petit moteur de jeu avec une belle simulation de l'eau. Pour commencer à travailler là-dessus, je dois trouver un moyen approprié de représenter l'eau dans le jeu. Malheureusement, je ne connais pas beaucoup de représentations différentes, alors je vais vous demander. Il y a une question similaire que j'ai posée il y a quelque temps. Mais comme je n'avais pas formulé le problème clairement, la réponse est correcte mais pas ce que je cherchais.
Dans certains jeux, l'eau est simplement définie par un niveau de hauteur. Par exemple, tout sous la hauteur de zéro est sous l'eau. J'ai vu cette représentation dans des jeux (pour la plupart plus anciens). Le problème est que j'aimerais des grottes dans le monde extérieur qui ne sont pas inondées et des niveaux d'eau différents pour chaque lac et mer.
Les particules sont une autre représentation plus précise de la présence d'eau. Chaque goutte d'eau est stockée comme un point dans l'espace mondial. Pour les rendre, je pourrais utiliser des techniques comme les métaballes pour qu'elles construisent un seul maillage. Cette représentation serait idéale pour le réalisme car je pourrais facilement calculer la dynamique entre eux. Malheureusement, aucune machine n'a pu calculer un océan de métaboules en temps réel.
Y a-t-il d'autres façons de représenter l'eau dans un moteur? J'aimerais avoir des lacs dynamiques, donc définir la zone d'eau par une géométrie statique n'est pas une option. Par exemple, si le joueur modifie le terrain pour élargir un lac, l'eau devrait remplir cette baie et le niveau d'eau global de ce lac devrait légèrement diminuer.
la source
Réponses:
Je ne peux pas dire ce qui est couramment utilisé, mais ma première pensée serait d'utiliser un système de particules avec des particules de tailles variables représentant de l'eau de différents volumes. Le sommet de l'eau utiliserait des particules plus petites pour former les ondulations de la surface et des vagues, l'eau la plus proche du joueur utiliserait les plus petites particules pour simuler les éclaboussures et les petites ondulations, tandis que plus l'eau serait éloignée ou profonde, plus les particules seraient grandes . Cela permettrait un nombre dynamique de particules simulant l'eau de toute taille, la dynamique de l'eau au fur et à mesure qu'elle change et un niveau de performance raisonnable et contrôlé.
Je peux voir des problèmes avec cette implémentation, mais cela semble certainement être une solution relativement simple et "assez bonne" qu'un téléspectateur / joueur serait douteux de remarquer des écarts dans la simulation.
la source
Si vous utilisiez un terrain à base de voxels, vous pourriez, en plus de stocker la densité du sol par voxels, vous pourriez également stocker une valeur d'eau qui est fixée entre
0
et1 - groundDensity
. Dessiner l'eau serait aussi simple que de faire passer un cube de marche sur les valeurs de l'eau. Simuler l'eau serait un peu plus difficile, mais le principe de base est que vous voulez résoudre le système de telle sorte que:groundDensity + waterDensity
que ses voisinsL'algorithme idéal s'exécuterait dans un shader de calcul, un chemin d'exécution par voxel. Si vous voulez devenir chic, vous pouvez également stocker la vitesse de l'eau dans ce voxel pour des effets de simulation supplémentaires: par exemple, en tentant de distribuer une quantité d'eau proportionnelle à la vitesse aux cellules "pointées" par le vecteur vitesse. Ces données de vitesse pourraient également être utilisées pour déplacer les vagues, dessiner des rapides, etc.
la source