Créer et animer une armature dans Blender
Blender, en anglais, utilise le terme armature mais on pourrait dire squelette. Ceci dit, ce n'est pas seulement utile pour des personnages. Par exemple, on peut créer une armature sur ce texte pour l'animer en souplesse comme ceci :
On remarquera que la lettre n se déforme, ce qui ne serait pas le cas si on positionnait simplement chaque lettre par des keyframes (ce qui serait fastidieux, en plus).
Je dois d'abord créer l'armature
- Je pars de ce texte que j'ai converti en forme (clic droit,
Convert to Mesh
) puis extrudé (Tab puis E) :
- J'ajoute un objet "armature", une sorte d'os en fait, par Maj A,
Armature
, puis je le positionne à peu près pour qu'il couvre l'ensemble du texte :
- Pour mieux voir ce que je vais faire ensuite, je peux passer la vue en mode fil de fer (wireframe) ou alors je peux aller dans les propriétés de cet objet "armature", onglet
Object Data Properties
, sectionViewport Display
et cocherShow: In Front
:
- Je passe en mode d'édition (Tab) puis clic droit
Subdivide
et j'entre 6 dans la fenêtre Subdivide en bas à gauche de la vue pour obtenir 7 os en tout, soit un par lettre du mot "Blender" :
- Je clique sur chaque articulation d'os pour la déplacer (touche G) et ainsi aligner chaque os sur chaque lettre :
- Une fois que tous les os sont bien alignés, je sors du mode édition pour retourner au mode objet (Tab) :
- Je sélectionne maintenant le mot Blender puis l'armature, et je fais Ctrl P (ou menu
Object
Parent
) et je choisisWith Automatic Weights
:
- On voit dans l'outliner que l'armature est devenue parente du texte :
- Je clique sur l'armature et je fais Ctrl Tab pour passer en mode "pose", puis je clique sur chaque os (qui est alors entouré en bleu ciel) et je peux le faire bouger (G ou R) et voir le mot qui suit le mouvement :
Je peux maintenant animer l'armature
- Toujours en mode pose sur mon armature, je sélectionne tous les os (touche A) qui sont donc tous entourés en bleu ciel, et je mets une keyframe par la touche i et je choisis
Location, Rotation, Scale
pour avoir la position de départ :
- Je me positionne dans la timeline, par exemple à la frame 10 et, toujours en mode pose sur mon armature, je mets les os dans la position souhaitée puis je les sélectionne tous et je mets une keyframe sur
Location, Rotation, Scale
:
- Puis je me positionne à la frame 20, par exemple, et je remets les os à la position initiale par Alt R et je mets une troisième keyframe. J'aurais pu aussi mettre directement cette keyframe avant la position de la frame 10 mais ça revient au même ici.
C'est bon, j'ai mon animation. Il ne me reste plus qu'à faire un rendu.
Pour animer un personnage en 2D, ce premier exemple est trop simple. Parenter avec les poids automatiques peut poser des problèmes. Exemple ci-dessous.
Un personnage en 2D
-
Je crée un personnage simpliste dans Inkscape, que j'importe et dont je convertis les éléments (buste, cou, tête,…) en mesh :
(j'ai aussi mis l'origine au centre géométrique pour chaque élément, mais ce n'est pas important pour cet exemple) -
Je crée un squelette (armature) par extrusion en mode édition, pour le buste, le cou, la tête, des clavicules pour aller jusqu'aux bras (*), et enfin les bras :
* (on peut aussi extruder un bras directement depuis la base du cou, le sélectionner et faire Alt P pour Clear Parent et choisirDisconnect Bone
puis placer l'os du bras où il faut, et il sera relié par une ligne pointillée au point de départ de l'extrusion) -
Si je sélectionne tous les éléments du personnage, puis l'armature, et je fais Ctrl P
With Automatic Weights
, je vois qu'en mode pose, ça ne marche pas. Bouger un bras entraine une déformation du buste :
-
En fait, il faut parenter chaque élément du personnage à un os du squelette en sélectionnant, en mode objet, le bras, puis l'armature, puis passer en mode pose Ctrl Tab, sélectionner l'os correspondant et Ctrl P
Bone
:
-
À ce stade, si je fais tourner l'os, je vois que le bras bouge sans entrainer le buste. Il n'entraîne pas non plus l'avant-bras parce que je ne l'ai pas encore parenté à l'os correspondant :
-
Une fois que j'ai parenté chaque élément du personnage à un os correspondant, je peux bouger les os en mode pose et mettre des keyframes pour animer le personnage :
Note : on peut aussi parenter les éléments du personnage de deux autres façons
- En mode objet avec l'option
With Automatic Weights
puis en passant en mode "Weight Painting" pour peindre en bleu (poids égal à zéro) les points qu'on ne veut pas assigner à chaque os. - Ou avec l'option
With Empty Groups
qui va créer des groupes de points (Vertex Groups) vides qu'on va remplir en mode édition, en sélectionnant les points et en cliquant surAssign
.
Pour un personnage en 3D
Il vaut mieux utiliser l'extension Rigify (prononcée "riguifaille" 😁), que ce soit pour un humain/humanoïde (y compris un robot), ou pour un animal. Rigify fournit la cinématique inverse (cf ci-dessous)
Pour une vraie animation, il faut une cinématique
La cinématique présentée plus haut dans cette page est une cinématique orientée de la tête de l'os, bone head 😅 (le gros côté) vers la queue de l'os (bone tail). Autrement dit, en anglais, une forward kinematics.
Dans l'animation d'un squelette normalement constitué, ce qu'on veut c'est positionner une extrémité du squelette (une main, un pied) et que le reste (bras, jambe) suive le mouvement. Pour cela, il faut ajouter des os virtuels qu'on manipule et qui plient et déplient le bras ou la jambe en fonction de la position de la main ou du pied. C'est une cinématique inverse, inverse kinematics, abrégée en IK
. On peut le faire soi-même, os par os, mais pour des squelettes classiques (même incomplets), il vaut vraiment mieux utiliser l'extension Rigify. Par contre, il ne faut pas supprimer des os dans le metarig (le modèle) mais uniquement après avoir cliqué sur Generate Rig
puis caché le metarig.