Existe-t-il un moteur physique 2D qui peut modéliser les fluides et les gaz? [fermé]
20
À ce stade, la plate-forme et le langage de programmation n'ont pas d'importance. J'aimerais simplement savoir s'il existe quelque chose pour cela. Toute aide est appréciée.
J'ai implémenté un moteur fluide 2D personnalisé. J'ai pu obtenir un exemple de travail en utilisant ce document sur les fluides viscoélastiques et le code de Flui ° D ° emo comme modèle. Cependant, les fluides ne sont pas aussi stables que je le souhaiterais et le code pourrait utiliser beaucoup d'optimisation (traitement multicœur, convivialité du cache, etc.). Ce que je veux, c'est une bibliothèque qui ait déjà fait tout cela, de sorte que je n'ai qu'à l'intégrer à Box2d et à mon jeu.
deft_code
Réponses:
8
Découvrez ce que Q-Games a utilisé pour Pixeljunk Shooter. C'est un jeu 2d avec une physique des fluides assez impliquée. Je ne sais pas s'ils ont utilisé un moteur physique local ou middleware, mais l'information est probablement là quelque part.
Ils ont utilisé un moteur local, mais ont inclus des techniques qui peuvent être appliquées à l'aide de n'importe quel moteur physique et d'un code personnalisé. Le a en fait donné une conférence très informative sur leur dynamique des fluides à GDC (diapositives ici: gdcvault.com/play/1012447/Go-With-the-Flow-Fluid )
ghost
6
Eh bien, je n'ai pas examiné cela, mais je sais pertinemment que presque tous les moteurs physiques peuvent imiter l'idée. Box2D, etc.
Fondamentalement, les particules rebondissent sur les surfaces et les unes des autres (plus rapidement pour les gaz), mais leur donnent également un effet constant de gravité (les liquides auraient tous la même chose, mais certains gaz pourraient vouloir monter lentement).
Si vous reliez les particules externes, vous obtiendrez une forme polygonale représentant la masse
OU
si vous dessinez simplement un graphique de pixels ou de particules sur chaque particule, vous pouvez obtenir un effet de nuage pour la masse à la place.
Cette réponse n'est pas adaptée aux jeux en temps réel de taille pratique.
AttackingHobo
3
Je ne sais pas pourquoi vous diriez cela, car la dynamique des fluides est très souvent modélisée sous forme de particules. Pour des exemples, voir les vidéos techniques nvidia sur les particules fluides sur youtube, le programme Algodoo (anciennement appelé Phun) ou le discours que Q-Games a donné sur leur jeu PixelJunk Shooter (diapositives à gdcvault.com/play/1012447/Go-With-the- Flow-Fluid ). Dans ce dernier cas, Q-Games montre comment ils construisent un polygone à partir d'une collection de particules. Je pense que cela vérifie que cette réponse est tout à fait valable pour les implémentations en temps réel à mon humble avis.
fantôme
WOWOW pourquoi les downvotes? Je ne rage pas, je veux juste savoir pourquoi. C'est une technique réaliste et utilisée.
Joel
"particules rebondissant autour, hors des surfaces et les unes des autres (plus rapide pour les gaz)" qui ressemble à vous décrivez les fluides au niveau moléculaire, et bien qu'une approche naïve puisse fonctionner avec la simulation cuite, elle ne fonctionnera pas bien pour les jeux en temps réel. Les particules sont très bien tant que le type de simulation est correct, "rebondir autour" semble fonctionner avec des macro particules. Vous avez également déformé grossièrement comment simuler la densité.
La seule bibliothèque que je pourrais proposer qui traite spécifiquement des fluides est Fluidic . C'est plutôt alpha et n'a qu'une seule version, cependant. La bibliothèque de physique Bullet prend en charge «l'hydrodynamique des particules lissées», une technique utilisée pour modéliser les fluides. Bien que la bibliothèque soit orientée vers la 3D, vous pouvez appliquer des contraintes à un axe pour la faire fonctionner en 2D.
Ma recommandation serait, comme je l'ai déjà mentionné dans certains commentaires sur d'autres réponses, d'utiliser un moteur physique standard comme Box2D ou Chipmunk et d'utiliser un certain nombre de cercles pour modéliser l'eau (avec gravité) ou le gaz (sans gravité) et les combiner ensemble dans un seul corps d'eau ou de gaz. Vous pouvez appliquer certaines contraintes sur les corps individuels pour les faire «s'agglutiner» ensemble afin de pouvoir simuler la viscosité. Jetez un œil à cette vidéo pour voir comment les corps individuels (modélisés sous forme de carrés dans la vidéo) fonctionnent ensemble. Notez cependant que la technique utilisée dans cette vidéo n'est pas la même que celle mentionnée dans ce paragraphe. Vous pouvez utiliser la vidéo pour avoir une idée de la façon dont les cercles interagissent et essayer d'imiter cela avec les contraintes présentes dans la bibliothèque de physique utilisée.
La partie intéressante survient lorsque vous souhaitez combiner plusieurs cercles dans un plan d'eau. La solution la plus simple que je peux trouver consiste à dessiner chaque cercle comme une métabille afin qu'ils apparaissent comme faisant partie d'un corps plus grand. Vous pouvez trouver les mathématiques et un exemple de code derrière ces corps ici .
La vidéo à laquelle vous avez lié utilise bien plus que de nombreux cercles. Il utilise une technique connue sous le nom de SPH. Le port flamboyant de Flui ° D ° emo utilise Box2d pour trouver les collisions et appliquer des forces mais utilise des méthodes SPH pour calculer les forces et non les corps rigides de Box2d.
deft_code
Vous avez absolument raison à cet égard. La vidéo était censée être illustrative au lieu d'un exemple de mise en œuvre. Merci d'avoir mentionné mon erreur et j'ai mis à jour la réponse pour éviter de nouveaux malentendus.
fantôme
3
Cela fait quelques années que cette question n'a pas été publiée, mais je l'ai rencontrée lors de la recherche, j'ai donc pensé la mettre à jour.
Google a publié LiquidFun (open source) pour le système Box2D. Il a certaines limites, mais c'est un moyen rapide de commencer avec des particules de liquide, de sable, etc. avec des performances assez décentes.
PixelJunk a une excellente approche, mais c'est une bibliothèque privée. Ils ont partagé un niveau incroyable de détails dans leur discours à GCD 2010.
Réponses:
Découvrez ce que Q-Games a utilisé pour Pixeljunk Shooter. C'est un jeu 2d avec une physique des fluides assez impliquée. Je ne sais pas s'ils ont utilisé un moteur physique local ou middleware, mais l'information est probablement là quelque part.
la source
Eh bien, je n'ai pas examiné cela, mais je sais pertinemment que presque tous les moteurs physiques peuvent imiter l'idée. Box2D, etc.
Fondamentalement, les particules rebondissent sur les surfaces et les unes des autres (plus rapidement pour les gaz), mais leur donnent également un effet constant de gravité (les liquides auraient tous la même chose, mais certains gaz pourraient vouloir monter lentement).
Si vous reliez les particules externes, vous obtiendrez une forme polygonale représentant la masse
OU
si vous dessinez simplement un graphique de pixels ou de particules sur chaque particule, vous pouvez obtenir un effet de nuage pour la masse à la place.
la source
La seule bibliothèque que je pourrais proposer qui traite spécifiquement des fluides est Fluidic . C'est plutôt alpha et n'a qu'une seule version, cependant. La bibliothèque de physique Bullet prend en charge «l'hydrodynamique des particules lissées», une technique utilisée pour modéliser les fluides. Bien que la bibliothèque soit orientée vers la 3D, vous pouvez appliquer des contraintes à un axe pour la faire fonctionner en 2D.
Ma recommandation serait, comme je l'ai déjà mentionné dans certains commentaires sur d'autres réponses, d'utiliser un moteur physique standard comme Box2D ou Chipmunk et d'utiliser un certain nombre de cercles pour modéliser l'eau (avec gravité) ou le gaz (sans gravité) et les combiner ensemble dans un seul corps d'eau ou de gaz. Vous pouvez appliquer certaines contraintes sur les corps individuels pour les faire «s'agglutiner» ensemble afin de pouvoir simuler la viscosité. Jetez un œil à cette vidéo pour voir comment les corps individuels (modélisés sous forme de carrés dans la vidéo) fonctionnent ensemble. Notez cependant que la technique utilisée dans cette vidéo n'est pas la même que celle mentionnée dans ce paragraphe. Vous pouvez utiliser la vidéo pour avoir une idée de la façon dont les cercles interagissent et essayer d'imiter cela avec les contraintes présentes dans la bibliothèque de physique utilisée.
La partie intéressante survient lorsque vous souhaitez combiner plusieurs cercles dans un plan d'eau. La solution la plus simple que je peux trouver consiste à dessiner chaque cercle comme une métabille afin qu'ils apparaissent comme faisant partie d'un corps plus grand. Vous pouvez trouver les mathématiques et un exemple de code derrière ces corps ici .
la source
Cela fait quelques années que cette question n'a pas été publiée, mais je l'ai rencontrée lors de la recherche, j'ai donc pensé la mettre à jour.
Google a publié LiquidFun (open source) pour le système Box2D. Il a certaines limites, mais c'est un moyen rapide de commencer avec des particules de liquide, de sable, etc. avec des performances assez décentes.
https://github.com/google/liquidfun
PixelJunk a une excellente approche, mais c'est une bibliothèque privée. Ils ont partagé un niveau incroyable de détails dans leur discours à GCD 2010.
la source