Projet image 2014 : Création et animation de vêtements

De Ensiwiki
Aller à : navigation, rechercher
Project schedule.png
Titre du projet Projet Image 2014 : Création et animation de vêtements
Cadre Projets de spécialité
Page principale Projets de spécialité image

Encadrants Marie-Paule CaniAntoine Begault.


L'équipe

Hadrien Oliveri (MMIS)

Alexandre Ribard (MMIS)

Thomas Richaudeau (MMIS)

Contexte

Notre projet s'inscrit dans le thème de l'assistance au design de vêtements et plus largement dans le domaine de la construction d'objet 3D à partir de croquis 2D. Il s'agit ici de développer un outil qui permet la création intuitive de vêtements 3D virtuels à partir de croquis 2D.

Par exemple, un designer pourrait visualiser le vêtement qu'il souhaite créer à partir de quelques lignes de silhouettes tracées autour du personnage.

Ce projet s'inscrit dans le prolongement et exploitation des travaux de Turquin et al. (Inria, 2007) qui présente une méthode intuitive et rapide de création de vêtements (plus simple qu'avec les logiciels standards comme Blender).

Setup
L'utilisateur dessine sur le personnage le contour du vêtement qu'il souhaite. Le programme se charge de créer un vêtement 3D autour du personnage. (a) un dessin d'un vêtement. (b) l'utilisateur reproduit son dessin sur une vue du personnage 3D. (c) le résultat final, le vêtement est créé sur le personnage

Méthode développée par Turquin et al

On part d'un croquis 2D autour d'une représentation implicite d'un personnage. Celui-ci est donc une surface représentée par l'isovaleur d’un champ scalaire f continu engendré par le squelette du personnage.

C'est-à-dire : personnage <=> f(x) = Cste.

La construction du vêtement est un problème a priori sous contraint. Il n'y a en effet pas de solution unique en ce qui concerne le passage du croquis 2D au maillage 3D. La méthode de l'équipe d'E. Turquin permet de deviner le vêtement en 3D autour du personnage par interpolation sur f. Autrement dit, on devine la forme du vêtement de manière à ce que celle-ci suive la forme du personnage.


Objectifs

Notre objectif principal était d'implémenter une version simplifiée de la méthode de Turquin adaptée à l'animation physique. Nous pourrions ainsi créer et animer de manière crédible un vêtement simple.

Nous voulions également exploiter la représentation implicite du personnage pour fournir une animation temps-réel, notamment pour gérer la collision entre le vêtement et le personnage.

Le rendu graphique et l'ergonomie de l'interface utilisateur n'étant pas prioritaires, celles-ci ont été gérées au minimum.

Travaux réalisés

Création et animation d'un vêtement simple

Setup
Dans l'ordre d'affichage : l'utilisateur dessine sur le personnage (ici un cylindre) le contour du vêtement qu'il souhaite. Le programme se charge de créer un vêtement 3D autour du personnage. Nous animons physiquement le vêtement par la suite.

Conservation de la forme

Jusqu'ici, lorsque l'on animait n'importe quelle robe, celle ci, sous l'effet de la gravité, tombait comme une robe fine. Or, si un designer crée une robe avec un volume marqué, il veut préserver sa forme, même lors de l'animation, il faut donc pouvoir modéliser un matériau plus raide que précédemment.

L'idée initiale était de faire entrer en collision le vêtement avec une surface implicite remplaçant le personnage. Chaque point entre en collision avec l'isosurface sur laquelle il se trouvait initialement. Mais l'effet visuel n'est pas satisfaisant, la collision étant trop brutale.

Nous avons donc utilisé des forces de rappel élastiques vers le potentiel initial. Ainsi, chaque point est attiré vers son potentiel initial, mais il n'y a pas de collision brutale, et l'aspect visuel est beaucoup plus réaliste.

Setup
Le vêtement (en pointillé sur la figure) est rappelé vers sa forme initial grâce une force de rappel élastique.

Ajout de plis par l'utilisateur

Une des fonctionnalités intéressantes de la méthode présentée par l'équipe d'E. Turquin est la possibilité de dessiner des plis. Cette méthode est cependant lourde à implémenter et nécessite un traitement de l'image 2D complexe. Nous présentons ici une alternative simple pour créer un vêtement plissé.

L'utilisateur représente sur son croquis les plis qu'il souhaite, sous forme d'un zig-zag dont la longueur détermine l'importance du plissement. La jupe est écartée automatiquement de manière à étendre sa surface, en fonction de la longueur du contour de pli. A l'animation, le vêtement s'effondre sur lui-même et les plis apparaissent naturellement.

Setup
Setup

Vêtement composé

Après avoir réussi la création et l'animation d'une simple jupe, nous avons implémenter la création d'un vêtement plus complexe, constitué de plusieurs parties tubulaires.

On peut par exemple créer une jupe ayant plusieurs couches de tissu ou un t-shirt.

Pour créer un t-shirt, il suffit de tracer trois parties tubulaires, à savoir les manches et le corps. L'algorithme de création construit de lui-même la partie torsale du t-shirt, qui va rester fixe durant l'animation.

Setup


Setup
L'utilisateur peut dessiner plusieurs couches de vêtements. Les deux couches ne se collisionnent que très rarement grâce au rappel élastique vers sa forme initiale

Animation Physique

Modèle

Le vêtement est animé physiquement grâce à un système masse-ressort.

Chaque particule subit donc plusieurs forces : En notant  p_i la i-ième particule du système.

  • Les forces de rappel des ressorts:
  F_{ressorts}^{i} = \sum_{r \in ressorts} F_r(p_i)

avec

   F_r(p_i) = F_\mathrm{s}^r + F_\mathrm{d}^r 

F_\mathrm{s}^r = - k_r x \, (force de rappel)

F_\mathrm{d}^r = - c_r \frac{dx}{dt} (force d'amortissement)

  • La gravité
  F_{g}^{i} = -g
  • La viscosité de l'air
  F_{v}^{i} = -\nu \frac{dx}{dt}
  • Les chocs avec le personnage
   F_{choc}^{i} = F_{contact} + F_{coulombs} 

F_{contact} correspond à un choc élastique entre un point matériel et un plan. Cette force est un ratio de la norme de la vitesse du point et est colinéaire à la normale au plan. Plus formellement:

F_{contact} = \alpha \| \frac{dx}{dt} \| n(x), avec n(x) la normale du plan au point de contact

F_{coulombs} correspond à la force de Coulomb qui s'applique au tissu.

En effet, entre la rugosité à la fois de la peau et du tissu, le vêtement à tendance à s'accrocher quand il rentre en collision avec la peau. Afin de modéliser la force de Coulomb qui s'applique au tissu, nous enregistrons si une particule collisionne avec le personnage. Si c'est le cas, tant que la somme des forces qui s'applique dessus reste dans le cône de frottement, nous la maintenons collée au personnage. Dans le cas contraire, la particule est libre de se déplacer comme bon lui semble.

N.B: je vous renvoie à la page Wikipedia sur les frottements sec http://fr.wikipedia.org/wiki/Liaisons_m%C3%A9caniques_avec_frottement


  • La force du vent
   F_{w}^{i} = F_{ext} 

Une fois la somme des forces calculée pour chaque particule, nous en déduisons leur position/vitesse en intégrant le principe fondamental de la dynamique. C'est-à-dire :

  m \frac{dv}{dt} = \sum F_{subis}^i

Ainsi nous obtenons le schéma d'intégration suivant:

  m \frac{d^2x}{dt^2} = F_{ressorts}^{i} + F_{g}^{i} + F_{v}^{i} + F_{choc}^{i} + F_{w}^{i}

Soit,

  m \frac{d^2x}{dt^2} = \sum_{r \in ressorts} ( k_r x -  c_r \frac{dx}{dt}) - g -\nu \frac{dx}{dt} + F_{contact} + F_{coulombs} + F_{ext}


Ceci pour toutes les particules

Setup
Une fois le maillage 3D du vêtement engendré, nous plaquons dessus un système masse-ressort. Ce système consiste en plusieurs particules reliées entre elles par divers ressorts. La constante de raideur de chaque ressort par unité de surface/distance est constante. La masse des particules est déterminée en fonction de la superficie du tissu.

Frottements et non pénétration avec le personnage

Les frottements et la non pénétration avec le personnage sont facilement gérées grâce à la représentation implicite du personnage.

  • Modèle de frottement : frottement sec de Coulomb.

Considérons une particule en contact avec le personnage. Supposons de plus qu'elle subit une certaine force  F . On peut alors décomposer cette force comme la somme d'une composante normale (notée  N ) à la surface et une tangentielle (notée  T ). Soit

   F = T + N  .

Ainsi, tant que la composante tangentielle T n'atteint pas une certaine limite T0, le glissement ne se produit pas ; on est en situation d'adhérence. Lorsque la limite est atteinte, le glissement se produit.

La loi de Coulomb détermine cette force limite T0 :

   \mathrm{T}_0 = f_0 \times \mathrm{N} 

 f_0 est le coefficient d'adhérence, ou coefficient de frottement statique. Ce coefficient est fixé empiriquement.

Méthodes d'integration

Afin de résoudre les équations de la mécanique pour l'ensemble des particules, nous utilisons plusieurs méthodes d'intégration numériques :

  • Euler explicite
  • Runge Kutta 2 (Verlet's integration)
  • Runge Kutta 4

Pour la suite des explications, adoptons les conventions suivantes:

On considère l'équation différentielle (EDP) suivante:

   u'(t)=f(t,u(t)) 

Tout d'abords, nous sommes obligés d'échantillonner le temps d’intégration. Ainsi, au lieu de résoudre l'équation \forall t \in \mathbb{R}^*, nous la résolvons qu'à certains instants donnés. Ainsi le temps est assimilé à une suite de réels qui s'incrémente au fur et à mesure de la simulation.

  \forall n \in \mathbb{N}, (t_i)_{i \in [0,n]}

On note alors  u(t_n) = u_n

Euler explicite

La méthode d'intégration explicite d'Euler est une méthode de résolution analytique d'EDP. Elle consiste à approximer grâce à des différences finies les différents termes de l'équation.

On approxime ainsi la dérivée par rapport à  t de la manière suivante:

   u'_n \simeq \frac{u_{n+1}-u_{n} }{t_{n+1}-t_{n}} 

Ainsi, on peut obtenir la valeur de  u à l'instant suivant en fonction de sa valeur précédente.

Soit

   u_{n+1} = u_n + (t_{n+1} - t_{n}) \ f(t_n,u_n) 

Donc, en utilisant cette formule on peut résoudre facilement l'EDP qui régit l'évolution du tissu.

En notant  dt = t_{n+1} - t_{n}

Donc, la vitesse et la position de chaque particule sont obtenues

   v_{n+1} = v_n + dt \  \frac{1}{m} \ \sum F_{subis} (t_n,v_n,x_n) 
   x_{n+1} = x_n + dt \ v_{n+1} 

Runge Kutta 2

Nous avons également développés des méthodes d'intégration d'ordre 2 afin d'augmenter la stabilité numérique du schéma d'intégration. Nous avons utilisés une variante des méthodes de Runge Kutta 2 appelé l'algorithme de Verlet.

L'intégration numérique se fait de la manière suivante pour chaque particule.

  x_{n+1} = 2 \ x_n - x_{n-1} + (dt)^2 \ \frac{1}{m} \ \sum F_{subis} (t_n,v_n,x_n) 
  v_{n+1} = \frac{x_{n+1}-x_{n-1}}{2dt} 

Notons que cette méthode est plus précise d'un ordre qu'un simple développement de Taylor.

Runge Kutta 4

La méthode d'intégration précédente ne nous paraissait pas assez stable au vue de nos expériences. Notamment quand les vêtements étaient générés automatiquement. C'est pour quoi nous avons implémentés des méthodes d'intégration d'ordre plus grand.

Les méthodes de Runge Kutta d'ordre 4 produisent des résultats assez satisfaisant. L'intégration se fait de la manière suivante:

  x_{n+1} =  x_n + dt \ v_n + \frac{(dt)^2}{2} \ \frac{1}{m} \ \sum F_{subis} (t_n,v_n,x_n) 
  v_{n+0.5} = v_n +  \frac{dt}{2} \ \frac{1}{m} \ \sum F_{subis} (t_n,v_n,x_n) 
  v_{n+1}^{guessed} = (x_{n+1} - x_{n})/dt 
  v_{n+1} = v_{n+0.5} + \frac{dt}{2} \ \frac{1}{m} \ \sum F_{subis}(t_{n+1},v_{n+1}^{guessed},x_{n+1}) 

Conclusion

Toutes ses méthodes d'intégration sont des méthodes explicites. Elles sont toutes susceptibles d'être instables. Néanmoins elle n'ont pas toute le même degré d'intégration. En effet, comme son nom l'indique Runge Kutta 4 est une méthode d'ordre 4. Plus l'ordre d'intégration est grand, plus la méthode converge vers la bonne solution. En contre-partie elle nécessite un temps de calcul plus important.


Nous avons considérés la possibilité d'utiliser les méthodes d’intégration implicite d'Hermite d'ordre 4 à pas variable (4th order Hermite scheme). Cette méthode est beaucoup utilisée lors des simulations du problème à N-corps. Elle est extrêmement efficace pour ce qui est à la fois de sa stabilité et de sa bonne conservation (numérique) de l’énergie globale du système.

Outre le manque de temps, le désavantage de cette méthode est la lourdeur des calculs (en effet il faut calculer jusqu'à la dérivée seconde de l'accélération à chaque tour de boucle). Ce qui n'aurait pas rendu la simulation temps réel à moins de faire les calculs en parallèle via GPU (CUDA, OpenCL...)


Conclusion

Les objectifs ont été atteints :

  • implémentation de la méthode de Turquin mieux adaptée à une animation physique
  • création de vêtements composés
  • création de plis simples
  • comparaison qualitative de modèles d'animation
  • gestion des collisions en temps réel grâce à la représentation implicite


Ce qu'il resterait à faire à long terme :

  • travailler la stabilité du schéma numérique
  • travailler l'ergonomie de l'interface
  • implémenter d'autres fonctionnalités proposées par Turquin
  • améliorer la non auto-pénétration du tissu