Blender : parentage multiple
Il est parfois nécessaire, pour des animations ou des poses 3D, de parenter un objet à plusieurs os d'une armature, simplement parce qu'il bouge de place en fonction des situations. Petite technique pour appliquer un « parentage multiple » permettant de garder une certaine liberté dans la position de l'objet.
Parentage unique
Les usages de ce type de parentage sont nombreux pour tout objet porté sur soi que l'on doit parfois saisir à la main : revolver, chapeau, téléphone, etc.
Ce type de situation pose soucis car :
- On ne peut pas apparenter un objet à plusieurs os d'armature : un objet ne peut avoir qu'un seul parent. Il n'est donc pas possible de parenter l'objet à la fois à la main et à la cuisse dans le cas par exemple d'un colt dans son holster.
- Un parentage multiple par contrainte (child of constraint) ne suffit pas quand l'objet a besoin d'être orienté différemment en fonction de sa position (ou alors il faut se lancer dans une multitude de poses de l'objet, ce qui devient vite fatiguant).
Solution à base d'empty
Une solution possible part du principe général suivant :
- On créé des empty aux différentes position que doit occuper l'objet.
- On parente ces empty à l'os de l'armature avec lequel l'objet devrait bouger.
- On contraint l'objet à copier les transformations de l'empty.
- On transforme l'empty pour que l'objet soit dans la bonne position.
Je prendrais pour exemple le cas d'un personnage en cours de modélisation, Nightwing, et de ses bâtons qui doivent avoir deux positions : fixés dans le dos ou portés à la main.
Relations os - empty - objet
je créé donc deux empty au niveau des omoplates en les parentant à l'os avec lequel ils doivent bouger (ici le buste), puis un empty dans chaque paume de main en les parentant à l'os de main correspondant :
Ensuite il faut contraindre les objets à copier les transformations de l'empty. Exemple ici avec le bâton gauche sur lequel j'ajoute une contrainte de transformation l'obligeant à suivre l'empty « stick.hand.L », celui de la main, et une seconde contrainte de transformation l'obligeant à suivre l'empty « stick.L.back » (oui, je me suis un peu mélangé les pinceaux avec les noms) situé au niveau de l'omoplate.
J'ajuste enfin le positionnement et la rotation des empty pour que les bâtons soient correctement positionner dans l'un ou l'autre cas.
À noter que la contrainte ciblant l'empty positionné au niveau de l'omoplate est placée en dernier dans la pile des contraintes ; c'est donc elle qui sera appliquée (parce qu'elle est appliquée en dernier mais aussi parce la propriété mix
est fixée à « replace »), ce qui tombe bien puisque la position des bâtons dans le dos est la position par défaut, au repos.
Ensuite, quand on veut faire passer le bâton du dos dans la main, il suffit de réduire l'influence de la « contrainte omoplate » à zéro ; c'est celle qui oblige à suivre l'empty de la main qui prendra le relais :
Quand la position de l'objet a besoin d'être ajusté lors d'une pose, il faut bouger l'empty correspondant et non pas l'objet lui-même.