¿Existe un motor de física 2D que pueda modelar fluidos y gases? [cerrado]


20

En este punto, la plataforma y el lenguaje de programación no importan. Me gustaría saber si existe algo para esto. Cualquier ayuda es apreciada.


He implementado un motor de fluidos 2D personalizado. Pude obtener un ejemplo de trabajo usando este documento sobre fluidos viscoelásticos y el código de Flui ° D ° emo como plantilla. Sin embargo, los fluidos no son tan estables como me gustaría y el código podría usar mucho amor de optimización (procesamiento multinúcleo, compatibilidad con caché, etc.). Lo que quiero es una biblioteca que ya haya hecho todo eso, por lo que solo tengo que integrarla con Box2d y mi juego.
deft_code

Respuestas:


8

Mira lo que Q-Games usó para Pixeljunk Shooter. Es un juego 2D con una física de fluidos bastante complicada. No estoy seguro de si usaron un motor de física interno o de middleware, pero la información probablemente esté disponible en alguna parte.


8
Han utilizado un motor de cosecha propia, pero han incluido técnicas que pueden aplicarse utilizando cualquier motor de física en algún código personalizado. En realidad, dieron una charla muy informativa sobre su dinámica de fluidos en GDC (diapositivas aquí: gdcvault.com/play/1012447/Go-With-the-Flow-Fluid )
fantasma

6

Bueno, no he investigado esto, pero sé con certeza que casi cualquier motor de física puede emular la idea. Box2D, etc.

Básicamente, las partículas rebotan alrededor de las superficies y entre sí (más rápido para los gases), pero también les dan un efecto de gravedad constante (todos los líquidos tendrían lo mismo, pero algunos gases podrían elevarse lentamente).

Si une las partículas externas obtendrá una forma poligonal que representa la masa

O

Si simplemente dibujas un gráfico de píxeles o partículas sobre cada partícula, puedes lograr un efecto de nube para la masa.


44
Esta respuesta no es adecuada para juegos en tiempo real en un tamaño práctico.
AttackingHobo

3
No estoy seguro de por qué diría eso, ya que la dinámica de fluidos a menudo se modela como partículas. Para ver ejemplos, vea los videos de tecnología de nvidia sobre partículas fluidas en youtube, el programa Algodoo (anteriormente llamado Phun) o la charla que Q-Games dio sobre su juego PixelJunk Shooter (diapositivas en gdcvault.com/play/1012447/Go-With-the- Fluido Fluido ). En el último caso, Q-Games muestra cómo construyen un polígono a partir de una colección de partículas. Creo que esto verifica que esta respuesta es bastante válida para implementaciones en tiempo real en mi humilde opinión.
fantasma

WOWOW por qué los votos negativos? No estoy furioso, solo quiero saber por qué. Es una técnica realista y se utiliza.
Joel

"partículas que rebotan alrededor de las superficies y entre sí (más rápido para los gases)" que suena como si estuvieras describiendo fluidos a nivel molecular, y si bien un enfoque ingenuo podría funcionar con simulación horneada, no funcionará bien para juegos en tiempo real. Las partículas están bien, ya que el tipo largo de simulación es correcto, "rebotar alrededor" parece funcionar con macro partículas. También tergiversaste groseramente cómo simular la densidad.
AttackingHobo

Las partículas funcionan lo suficientemente bien en.wikipedia.org/wiki/Smoothed-particle_hydrodynamics . Se usó en la última demostración de FLT: como se describe en directtovideo.wordpress.com/2011/05/03/numb-res Esta implementación puede ser un poco pesada, pero las aproximaciones más simples como en la charla de Pixel Junk Shooter GDC deberían funcionar bien.
nulo

6

La única biblioteca que se me ocurrió que trata específicamente sobre fluidos es Fluidic . Sin embargo, es bastante alfa y solo tiene una versión. La biblioteca de física Bullet admite la 'hidrodinámica de partículas suavizadas', una técnica utilizada para modelar fluidos. Aunque la biblioteca está orientada hacia 3D, puede aplicar restricciones a un eje para que funcione en 2D.

Mi recomendación sería, como ya mencioné en algunos comentarios sobre otras respuestas, usar un motor de física estándar como Box2D o Chipmunk y usar varios círculos para modelar el agua (con gravedad) o el gas (sin gravedad) y combinarlos juntos en un cuerpo de agua o gas. Puede aplicar algunas restricciones en los cuerpos individuales para que se agrupen y simular la viscosidad. Eche un vistazo a este video para ver cómo los cuerpos individuales (modelados como cuadrados en el video) trabajan juntos. Sin embargo, tenga en cuenta que la técnica utilizada en este video no es la misma que se menciona en este párrafo. Puede usar el video para tener una idea de cómo los círculos interactúan entre sí e intentar imitar esto con las restricciones presentes en la biblioteca de física utilizada.

La parte interesante viene cuando quieres combinar múltiples círculos en un cuerpo de agua. La solución más sencilla que se me ocurre es dibujar cada círculo como una metabola para que aparezcan como parte de un cuerpo más grande. Puede encontrar las matemáticas y un código de ejemplo detrás de estos cuerpos aquí .


El video al que se vinculó está usando mucho más que solo muchos círculos. Él usa una técnica conocida como SPH. El puerto de llamas de Flui ° D ° emo usa Box2d para encontrar colisiones y aplicar fuerzas, pero usa métodos SPH para calcular fuerzas que no son cuerpos rígidos de Box2d.
deft_code

Tienes toda la razón al respecto. El video estaba destinado a ser ilustrativo en lugar de un ejemplo de implementación. Gracias por mencionar mi error y he actualizado la respuesta para evitar nuevos malentendidos.
fantasma

3

Han pasado algunos años desde que se publicó esta pregunta, pero la encontré mientras buscaba, así que pensé en actualizarla.

Google lanzó LiquidFun (código abierto) para el sistema Box2D. Tiene algunas limitaciones, pero es una forma rápida de comenzar con partículas líquidas, de arena, etc. con un rendimiento bastante decente.

https://github.com/google/liquidfun

PixelJunk tiene un gran enfoque, pero es una biblioteca privada. Compartieron un sorprendente nivel de detalles en su charla en GCD 2010.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.