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.
Respostas:
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.
fonte
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 .
fonte
Como mencionado acima, você está pensando em Metaballs.
Este é um ótimo artigo sobre o assunto, com algumas discussões e exemplos básicos da teoria.
Explorando Metaballs e Isosurfaces em 2D
fonte