2009-08-31 8 views
1

L'objectif global que j'essaye d'accomplir est de mettre en application un système d'avatar personnalisable où l'on peut changer la taille, le poids, le type de corps, etc. Comment est-ce fait? Par exemple, lorsque vous changez la hauteur d'un avatar, vous ne voulez pas que la tête, les yeux, les doigts, etc. soient étirés, vous voulez seulement que le torse et les jambes changent de taille et que tout reste tel quel (peut-être repositionné). Un autre exemple serait d'ajouter un "ventre de bière". Quelles sont les techniques existantes pour ce genre de morphing?Modélisation 3D - Morphing

Chaque pièce est-elle un maillage séparé?

Si oui, comment les deux pièces manipulées sont-elles "collées" de manière crédible (elles ont changé de taille). Si non, comment limiter vos manipulations à une section du maillage et pas aux autres?

Je recherche des techniques générales ainsi que des solutions spécifiques. Ceci est un problème graphique 3D générique mais je travaille avec Kit3D/Silverlight/C#. Ceci est similaire à une autre question que j'ai posté, mais c'est beaucoup plus général.

Répondre

2

Jetez un oeil au projet MakeHuman. (Attention, certaines captures d'écran potentiellement non sécurisées peuvent être sur la page principale, la plupart sont floues, mais un avertissement juste.)

Le mesh du corps humain que MakeHuman utilise est un simple maillage de base avec une série de cibles. qui peut être réglé sur 4 ou 5 axes. La majorité du programme est écrit en Python, donc il devrait être relativement facile à creuser. Il y a aussi quelques livres blancs et d'autres documents sur le document site.

+1

Pas de soucis, la partie «pas sécuritaire pour le travail» fait partie du travail. C'est très excitant, étant open source. – colithium

1

Si votre géométrie est basée sur un maillage, alors je vous suggère de générer des transformations non linéaires (appelons les "déformations"). Par exemple, vous pouvez insérer N points de pivot dans votre monde 3D, puis déterminer pour chaque sommet (point) de votre maillage à quel point il est affecté par un pivot donné. Vous pouvez utiliser une pondération carrée inversée par exemple, ou une atténuation Gaussienne, ou une sorte de Voronoï 3D, ou .... Ensuite, vous déplacez les points de pivotement et vous déformez les sommets de maillage en fonction de votre carte de poids. Si vous faites cela pour tous les sommets dans toutes les mailles et que vos maillages sont bien construits, vous ne devriez jamais vous retrouver avec des espaces ou des intersections indésirables.

Une autre approche consisterait à utiliser des déformations locales avec atténuation. Prenez la mise à l'échelle 3D par exemple. Vous définissez un point central C de l'opération de mise à l'échelle, mais le facteur d'échelle dépend de la distance par rapport à ce point de base. Ainsi, les parties du maillage proches de C s'échelonneront beaucoup et les parties éloignées seront très peu ou pas du tout.

+0

J'ai essayé des solutions similaires, mais mes connaissances en mathématiques ne sont évidemment pas aussi fortes que les vôtres. Je suis convaincu que c'est la solution, et je pense que c'est ce que les gens de MakeHuman ont fait. Il s'agit juste d'obtenir un maillage bien construit (le nôtre a quelques problèmes et nous n'avons pas de modeleur professionnel). – colithium

+0

Voici un bref tutoriel sur l'utilisation des fonctions de base radiales: http://cg.alexandra.dk/tag/geometry-deformation/ – greyfade