Existe um mecanismo de física 2D que pode modelar fluidos e gases? [fechadas]


20

Neste ponto, a plataforma e a linguagem de programação não importam. Gostaria apenas de saber se existe algo disponível para isso. Qualquer ajuda é apreciada.


Eu implementei um mecanismo de fluido 2D personalizado. Consegui obter um exemplo de trabalho usando este documento sobre fluidos viscoelásticos e o código do Flui ° D ° emo como modelo. No entanto, os fluidos não são tão estáveis ​​quanto eu gostaria e o código pode usar muita otimização (processamento multicore, compatibilidade com cache, etc.). O que eu quero é uma biblioteca que já tenha feito tudo isso, para que eu só precise integrá-la ao Box2d e ao meu jogo.
Deft_code 30/05

Respostas:


8

Veja o que os Q-Games usaram para o Pixeljunk Shooter. É um jogo 2D com física de fluidos bastante envolvida. Não tenho certeza se eles usaram um mecanismo de física caseiro ou de middleware, mas as informações provavelmente estão disponíveis em algum lugar.


8
Eles usaram um mecanismo caseiro, mas incluíram técnicas que podem ser aplicadas usando qualquer mecanismo de física e algum código personalizado. O fato deu uma palestra muito informativo sobre sua dinâmica de fluidos na GDC (slides aqui: gdcvault.com/play/1012447/Go-With-the-Flow-Fluid )
fantasma

6

Bem, eu não olhei para isso, mas sei que quase qualquer mecanismo de física pode imitar a idéia. Box2D, etc.

Basicamente, tem partículas que saltam ao redor, fora de superfícies e umas às outras (mais rápido para gases), mas também lhes confere um efeito de gravidade constante (os líquidos teriam o mesmo, mas alguns gases você pode querer subir lentamente).

Se você ligar as partículas externas, obterá uma forma poligonal que representa a massa

OU

se você simplesmente desenhar um gráfico de pixel ou partícula sobre cada partícula, poderá obter um efeito de nuvem para a massa.


4
Esta resposta não é adequada para jogos em tempo real em um tamanho prático.
AttackingHobo

3
Não sei por que você diria isso, pois a dinâmica de fluidos é frequentemente modelada como partículas. Por exemplo, veja os vídeos da nvidia tech sobre partículas fluidas no youtube, o programa Algodoo (anteriormente chamado Phun) ou a palestra da Q-Games sobre o jogo PixelJunk Shooter (slides em gdcvault.com/play/1012447/Go-With-the- Fluido de fluxo ). Neste último caso, Q-Games mostra como eles constroem um polígono a partir de uma coleção de partículas. Eu acho que isso verifica que esta resposta é bastante válida para implementações em tempo real IMHO.
ghost

WOWOW por que os votos negativos? Não estou furioso, só quero saber o porquê. É uma técnica realista e é usada.
Joel

"partículas saltando ao redor, fora de superfícies e uns aos outros (mais rápido para gases)" que parece que você está descrevendo fluidos no nível molecular e, embora uma abordagem ingênua possa funcionar com simulação de cozimento, ela não funciona bem para jogos em tempo real. As partículas são boas, desde que o tipo de simulação esteja correto, "rebound bounding arround" parece que funcionaria com macro partículas. Você também deturpou grosseiramente como simular densidade.
AttackingHobo

Partículas funciona bem o suficiente en.wikipedia.org/wiki/Smoothed-particle_hydrodynamics . Foi usada na última demonstração da FLT: s, conforme descrito em directtovideo.wordpress.com/2011/05/03/numb-res Essa implementação pode ser um pouco pesada, mas aproximações mais simples, como na palestra Pixel Junk Shooter GDC, devem funcionar bem.
void

6

A única biblioteca que eu poderia criar que lida especificamente com fluidos é o Fluidic . É bastante alfa e só tem um lançamento, no entanto. A biblioteca de física Bullet suporta 'hidrodinâmica de partículas suavizadas', uma técnica usada para modelar fluidos. Embora a biblioteca seja voltada para 3D, você pode aplicar restrições a um eixo para fazê-la funcionar em 2D.

Minha recomendação seria, como já mencionei em alguns comentários em outras respostas, usar um mecanismo de física padrão como Box2D ou Chipmunk e usar vários círculos para modelar a água (com gravidade) ou o gás (sem gravidade) e combiná-los. em um corpo de água ou gás. Você pode aplicar algumas restrições nos corpos individuais para torná-los "agrupados", para simular a viscosidade. Dê uma olhada neste vídeo para ver como os corpos individuais (modelados como quadrados no vídeo) funcionam juntos. Observe, no entanto, a técnica usada neste vídeo não é a mesma mencionada neste parágrafo. Você pode usar o vídeo para ter uma idéia de como os círculos interagem entre si e tentar imitar isso com as restrições presentes na biblioteca de física usada.

A parte interessante vem quando você deseja combinar vários círculos no corpo de água. A solução mais direta que posso encontrar é desenhar cada círculo como um metaball para que eles apareçam como parte de um corpo maior. Você pode encontrar a matemática e algum código de exemplo por trás desses corpos aqui .


O vídeo ao qual você vinculou está usando muito mais do que muitos círculos. Ele usa uma técnica conhecida como SPH. O porto de chamas de Flui ° D ° emo usa o Box2d para encontrar colisões e aplicar forças, mas usa métodos SPH para calcular forças não os corpos rígidos do Box2d.
Deft_code 30/05

Você está absolutamente correto a esse respeito. O vídeo deveria ser ilustrativo, e não um exemplo de implementação. Obrigado por mencionar o meu erro e atualizei a resposta para evitar mais mal-entendidos.
Ghost

3

Faz alguns anos que essa pergunta foi publicada, mas me deparei com ela durante a pesquisa, então pensei em atualizá-la.

O Google lançou o LiquidFun (código aberto) para o sistema Box2D. Ele tem algumas limitações, mas é uma maneira rápida de começar com partículas líquidas, areia, etc., com desempenho bastante decente.

https://github.com/google/liquidfun

O PixelJunk tem uma ótima abordagem, mas é uma biblioteca privada. Eles compartilharam um nível incrível de detalhes em sua palestra no GCD 2010.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.