Dessiner des particules comme une goutte lisse


12

Je suis nouveau dans le développement de jeux / graphiques et je joue avec des particules (en 2D). Je veux rapprocher les particules les unes des autres comme une goutte, tout comme du liquide / de l'eau. Je ne veux pas dessiner de grands cercles qui se chevauchent car le blob ne sera pas lisse (et trop grand). Je ne connais pas vraiment la physique mais je suppose que ce que je veux, c'est quelque chose qui ressemble à la tension superficielle.

Je n'ai rien trouvé sur stackexchange ou sur Google (peut-être que je ne connais pas les bons mots clés?). Jusqu'à présent, j'ai trouvé deux solutions possibles, mais je ne trouve aucune information concrète sur les algorithmes.

L'un d'eux consiste à calculer la coque concave des particules que je considère comme une goutte. Je peux calculer le blob en créant une classe d'équivalence (sur la relation "proches les uns des autres"). Curieusement, je n'ai pas pu trouver d' algorithme expliquant comment calculer la coque concave. De nombreux articles (et parmi stackexchange) contiennent des liens vers des bibliothèques ou des produits commerciaux qui font cela (j'ai besoin de bibliothèques pour travailler en C #), mais jamais aucun algorithme. Cette solution pourrait également avoir un problème avec un cercle de particules, qui ne détecterait pas l'espace vide au milieu.

En recherchant la coque concave, je suis tombé sur quelque chose appelé formes alpha. Ce qui semble être exactement ce que je veux faire, mais comme pour la coque concave, je n'ai trouvé aucune source expliquant comment ils fonctionnent réellement. J'ai trouvé du matériel de présentation mais pas assez pour continuer. C'est comme un grand secret que tout le monde connaît sauf moi: - /

Après avoir calculé la coque concave ou la forme alpha, je veux en faire une courbe de Bézier pour la rendre lisse et agréable.

Bien que je trouve mon approche un peu trop complexe, j'essaie peut-être de résoudre le problème de la mauvaise façon? Si vous pouvez suggérer une autre solution à mon problème ou expliquer les pièces qui me manquent, je serais très heureux et reconnaissant :-)

Merci.



@BlueRaja Merci pour votre commentaire. Bien que j'aie déjà trouvé ce poste mais que je l'ai rejeté parce que les réponses renvoient à des articles qui ne résolvent pas directement mon problème, mais leurs références pourraient ou un brevet que je ne peux pas utiliser ouvertement (je pense que je ne suis pas bon avec la bureaucratie) (Je n'ai même pas trouvé le lien de téléchargement de toute façon).
Nömmik

1
Le brevet "cubes de marche" a expiré en 2005, la plupart des exemples 2D sont beaucoup plus anciens et c'est pourquoi vous les avez peut-être vus vous avertir de leur utilisation sur d'anciennes pages Web.
Patrick Hughes

1
Voici un article sur gamedev qui va dans les métaballes et les isosurfaces, avec quelques exemples pour clarifier les idées: lien
Patrick Hughes

Merci de m'avoir éclairé sur les metaballs, ils semblent faire ce que je veux :-)
Nömmik

Réponses:


8

Le mot-clé dont vous pourriez avoir besoin est "Metaballs", et s'étend de l'exemple complexe de gemmes de GPU nVidia jusqu'aux versions pilotées par les scènes de démonstration conçues uniquement pour être belles et fonctionner rapidement.


En effet, je ne connaissais pas le mot-clé :-) Je vais l'examiner de plus près et s'il semble être ce dont j'ai besoin, alors j'accepterai votre réponse. Merci!
Nömmik

1
+1 pour moi pensant que c'était des "boulettes de viande" avant de le lire une deuxième fois.
James

2
Pourriez-vous ajouter un peu plus de détails à cette réponse? +1 si vous le faites.
AttackingHobo

@James Je pense que tout le monde fait cette erreur la première fois qu'ils voient le mot!
Jeff

1

Pour convertir un groupe de particules en un maillage afin de pouvoir le rendre, à la manière des métabilles, vous pouvez jeter un œil à l' algorithme Marching Cubes , qui génère un maillage polygonal à partir des données de voxel. Il y a une démo démo qui en a un bon exemple, avec tout ce qui est généré sur le GPU: numb res .


En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.