Desenhando partículas como um blob suave

12

Eu sou novo no desenvolvimento de jogos / gráficos e estou brincando com partículas (em 2D). Quero desenhar partículas próximas umas das outras como uma bolha, assim como líquido / água. Não quero desenhar grandes círculos sobrepostos, pois o blob não será suave (e muito grande). Eu realmente não sei física, mas presumo que o que quero é algo parecido com a tensão superficial.

Não consegui encontrar nada no stackexchange ou no Google (talvez eu não conheça as palavras-chave corretas?). Até agora, encontrei duas soluções possíveis, mas não consigo encontrar nenhuma informação concreta sobre algoritmos.

Uma delas é calcular o casco côncavo de partículas que considero uma bolha. Eu posso calcular o blob criando uma classe de equivalência (na relação "próximos um do outro"). Curiosamente, não consegui encontrar nenhum algoritmo explicando como calcular o casco côncavo. Muitas postagens (e entre stackexchange) têm links para bibliotecas ou produtos comerciais que fazem isso (preciso que as bibliotecas funcionem em C #), mas nunca qualquer algoritmo. Além disso, esta solução pode ter um problema com um círculo de partículas, que não detectaria o espaço vazio no meio.

Enquanto pesquisava o casco côncavo, me deparei com algo chamado formas alfa. O que parece ser exatamente o que eu quero fazer, no entanto, assim como no casco côncavo, não encontrei nenhuma fonte que explique como eles realmente funcionam. Encontrei alguns materiais de apresentação, mas não o suficiente para continuar. É como um grande segredo que todos conhecem, exceto eu: - /

Depois de calcular o casco côncavo ou a forma alfa, quero fazer uma curva de Bézier para torná-la suave e agradável.

Embora eu ache minha abordagem um pouco complexa demais, talvez eu esteja tentando resolver isso da maneira errada? Se você puder sugerir outra solução para o meu problema ou explicar as peças que estão faltando, ficaria muito feliz e agradecido :-)

Obrigado.

Nömmik
fonte
stackoverflow.com/questions/83593/...
BlueRaja - Danny Pflughoeft
@BlueRaja Obrigado pelo seu comentário. Embora eu já tenha encontrado a publicação, mas a rejeitei porque as respostas apontam para artigos que não resolvem diretamente o meu problema, mas as referências deles podem ou uma patente que não posso usar abertamente (acho que não sou bom com burocracia) (Eu nem encontrei o link para download de qualquer maneira).
Nömmik
1
A patente "marching cubes" expirou em 2005, a maioria dos exemplos 2D é muito mais antiga e é por isso que você os viu avisando sobre o uso deles em páginas da web antigas.
Patrick Hughes
1
Aqui está um artigo gamedev que entra em ambos os metaballs e isosuperfícies, com algumas amostras para fazer as idéias claras: ligação
Patrick Hughes
Obrigado por me esclarecer sobre metaballs, eles parecem fazer o que eu quero :-)
Nömmik

Respostas:

8

A palavra-chave que você pode precisar é "Metaballs" e varia desde o complexo exemplo da nVidia GPU Gems até as versões controladas por cenas demo, projetadas apenas para parecer boas e correr rápido.

Patrick Hughes
fonte
Na verdade, eu não conhecia a palavra-chave :-) Vou dar uma olhada mais de perto e, se parece ser o que eu preciso, aceitarei sua resposta. Obrigado!
Nömmik 21/06
1
+1 para mim pensando que eram "almôndegas" antes de ler pela segunda vez.
James
2
Você poderia adicionar um pouco mais de detalhes a esta resposta? +1 se você fizer.
AttackingHobo
@ James Eu acho que todo mundo comete esse erro na primeira vez que vê a palavra!
22411 Jeff
1

Para converter um grupo de partículas em uma malha para renderizar, no estilo metaballs, você pode dar uma olhada no algoritmo Marching Cubes , que gera uma malha poligonal a partir dos dados do voxel. Há uma demonstração demoscene que tem um ótimo exemplo disso, com tudo gerado na GPU: numb res .

thekidder
fonte