J'expérimente les conditions météorologiques dans un de mes matchs et j'ai été impressionné par la façon dont Starbound a géré la pluie. Fondamentalement, lorsque la pluie frappe le sol, elle est soit dispersée horizontalement (et absorbée par le sol), soit elle crée des tas d'eau (lorsque les gouttes de pluie tombent à l'intérieur d'un trou dans le sol).
Cette vidéo le montre clairement: http://imgur.com/gallery/CKCGKbG
Je sais comment faire tomber la pluie et vérifier où elle touche le sol, mais c'est là que je suis coincé. Ma question est: comment cela a-t-il pu être créé? Et comment pourrait-on modéliser le débit d'eau si parfaitement, sans nuire aux performances?
Merci d'avance!
2d
water
fluid-dynamics
Pandaqi
la source
la source
Réponses:
Le système d'eau de Starbound est en fait des automates cellulaires à base de carreaux 2D. Chaque tuile sur l'écran qui ne contient pas de couche de tuile avant, est capable de retenir l'eau. La quantité d'eau est calculée via des automates cellulaires.
Plus d'informations sur cette technique ici:
http://www.gamasutra.com/view/feature/134736/an_intro_to_cellular_automation.php
http://www.jgallant.com/2d-liquid-simulator-with-cellular-automaton-in-unity/
Quant aux gouttes de pluie, ce sont des particules. Ils servent principalement à simuler qu'il y a effectivement de l'eau qui tombe du ciel. L'eau s'accumule uniquement parce que le jeu sait qu'il pleut actuellement. Les gouttes individuelles n'ont rien à voir avec la formation réelle des piscines d'eau.
La façon dont ils l'accumulent consiste à déterminer où se trouvent les trous dans la couche supérieure du sol. S'il y a une zone qui peut accumuler de l'eau, les cellules de cette zone augmentent leur niveau d'eau en conséquence.
Starbound traite également de la pression de l'eau, et leur technique de rendu est assez étonnante. Ils ont la meilleure implémentation 2D de physique des simulations d'eau utilisant des automates cellulaires que j'ai jamais vue.
Voici une vue primitive d'un moteur de physique des liquides, utilisant la technique des automates cellulaires mentionnée ci-dessus. La partie de rendu devient un peu plus complexe, car votre eau est représentée par une valeur numérique.
http://www.jgallant.com/images/pressuretest.gif
Dans cet exemple, une amélioration très simple consisterait à masquer les cellules d'eau qui contiennent moins d'une unité complète d'eau dans sa tuile s'il n'y a pas de tuile solide en dessous. Mais alors, vous cachez le débit d'eau. Au lieu de le cacher, vous devrez déterminer comment l'eau coule, puis dessiner le sprite d'eau approprié à sa place.
la source
Il y a un tas de façons d'aborder cela. Comme toujours, ça dépend
Et donc je suppose qu'une façon serait la suivante. Étant donné un «plongeon dans le sol» arbitraire Superposez une «boîte à eau» qui la délimite. Le sol et la boîte à eau sont dessinés en couches afin que le sol soit affiché en premier, la boîte à eau ensuite.
chaque fois qu'une goutte d'eau tombe dans le sol, ajoutez-en une à la boîte à eau. Lorsque la boîte à eau atteint un nombre magique, ajoutez une ligne d'eau. Disons que 10 gouttes atterrissent dans le creux, cela ajoute une ligne à la boîte à eau.
Alors disons que la boîte à eau fait 32X32 pixels. Ajoutez une ligne de couleur de l'eau de 0,31 à 31,31. Encore 10 gouttes, tracez une ligne de 0,30 à 31,30. Ainsi, à mesure que les gouttes s'accumulent, vous construisez la boîte à eau du bas jusqu'à ce qu'elle soit pleine.
J'espère que cela a du sens.
la source