Dans mon projet, je crée un système pour déformer un maillage très détaillé (vêtements) afin qu'il «s'adapte» à un maillage convexe. Pour ce faire, j'utilise des cartes de profondeur de l'élément et de la «coque» pour déterminer à quel point dans l'espace mondial la déviation se produit et l'étendue.
La simple transformation de tous les sommets occlus aux profondeurs définies par la `` coque '' est assez efficace et a de bonnes performances, mais elle souffre du problème de ne pas conserver les caractéristiques du maillage et nécessite une élimination approfondie pour éviter les faux positifs.
Je voudrais plutôt générer à partir de la carte des écarts de profondeur un ensemble de «déformateurs» simples qui «pousseront» * tous les sommets du maillage déformé vers l'extérieur (dans l'espace mondial). De cette façon, toutes les fonctionnalités du maillage sont préservées et il n'est pas nécessaire d'avoir une heuristique complexe pour éliminer les sommets inappropriés.
Cependant, je ne sais pas comment procéder pour générer cet ensemble de déformateurs. J'imagine quelque chose comme un algorithme qui tente de faire correspondre une surface sphérique à chaque patch de déviations contiguës dans une certaine plage, mais je ne sais pas par où commencer.
Quelqu'un peut-il suggérer un filtre ou un algorithme approprié pour générer des déformateurs? Ou pour le dire autrement en compressant une carte de profondeur?
(* Poussez parce que son ajustement à un humanoïde convexe «volumineux», de sorte que les transformations sont susceptibles d'être «sphériques» par rapport au POV de la surface.)
Edit: Voici une image / diagramme suggéré à juste titre qui illustre ce que j'essaie de réaliser.
De plus, je dois dire que depuis que cette question a été publiée, j'ai beaucoup travaillé sur ce problème, et même si je n'ai jamais résolu comment obtenir les déformateurs, j'ai finalement décidé que les cartes de profondeur pour cela n'étaient pas appropriées car:
- Si le maillage déformé n'est pas complet, il est possible d'obtenir dans la carte des texels qui sont censés être de l'autre côté du maillage convexe (car ils ne sont pas masqués par ceux plus proches de la caméra du bon côté).
- L'efficacité n'était pas aussi élevée que je l'espérais car 6 cartes étaient nécessaires par déformation.
Non pas que ceux-ci soient insolubles, mais l'autre solution, qui impliquait des tests de collision dans les noyaux fonctionnant sur le GPU, a abouti à des résultats de meilleure qualité et était beaucoup plus simple, même si elle n'est peut-être pas aussi rapide.
Je pense toujours que ce problème de questions est intéressant et je serais intéressé par toutes les réponses car je suis sûr qu'il y a des situations où il serait préférable.
Réponses:
Vous avez une carte de profondeur, qui je suppose est simplement la distance entre le maillage convexe A et le maillage déformé neutre B, et vous avez des normales de surface du maillage A.
Ce qui vous manque, c'est le poids (ou les regroupements) de la façon dont chaque vert du maillage B affecte ses voisins. Par exemple, lorsque le vert central est déplacé, il doit également glisser le long de ses voisins verts d'un certain montant (pourcentage) s'ils sont dans le même groupe.
Si vous avez un groupe de verts qui s'affectent mutuellement à 100%, ils finiront tous par être poussés le plus loin de votre carte de profondeur comme s'ils faisaient tous partie d'une structure en acier inflexible qui se déplace comme une unité, fixée à 50% cette structure peut agir plus comme des feuilles de caoutchouc épaisses et 10% comme une pellicule plastique ajustée car chaque vert affecte à peine son voisin (c'est ce que vous avez maintenant.
De toute évidence, il y a un mélange et une fusion de valeurs. Comme @Gajoo l'a dit, "qu'est-ce qui ne va pas avec le déplacement de la forme entière?"
la source