Humanoïdes Mecanim

Cet article explique la technologie derrière les humanoïdes Mecanim. Comment cela fonctionne, ses points forts et ses limites, pourquoi certains choix ont été faits et, espérons-le, quelques conseils pour en tirer le meilleur parti. Veuillez vous référer àDocumentation Unitypour la configuration générale et les instructions.

Mecanim Humanoid Rig et Muscle Space sont une solution alternative aux hiérarchies de nœuds squelettiques standard et aux transformations géométriques pour représenter le corps humanoïde et les animations.
Le Humanoid Rig est une description au-dessus d'une hiérarchie de nœuds squelettes. Il identifie un ensemble d’os humains et crée un référentiel musculaire pour chacun d’entre eux. Un référentiel musculaire est essentiellement une pré et post rotation avec une plage et un signe pour chaque axe.

Un muscle est une valeur normalisée [-1,1] qui déplace un os pour un axe entre la plage [min,max]. Notez que la valeur normalisée du muscle peut être inférieure ou supérieure à [-1,1] pour dépasser la plage. La portée n'est pas une limite stricte, elle définit plutôt l'amplitude de mouvement normale d'un muscle. Un rig humanoïde spécifique peut augmenter ou réduire la portée d'un référentiel musculaire pour augmenter ou réduire sa durée de mouvement.
L'espace musculaire est l'ensemble de toutes les valeurs musculaires normalisées pour le rig humanoïde. C'est une pose humanoïde normalisée. Une plage de zéro (min = max) pour un axe osseux signifie qu'il n'y a pas de muscle pour celui-ci.
Par exemple, le coude n'a pas de muscle pour son axe Y, car il s'étire uniquement vers l'intérieur et vers l'extérieur (axe Z) et roule vers l'intérieur et vers l'extérieur (axe X). Au final, l'espace musculaire est composé d'au plus 47 valeurs musculaires qui décrivent complètement une pose corporelle humanoïde.

Une des belles choses à propos de Muscle Space, c'est qu'il est complètement abstrait de son original ou de tout autre squelette. Il peut être directement appliqué à n'importe quel rig humanoïde et crée toujours une pose crédible. Une autre belle chose est la façon dont Muscle Space interpole bien. Comparé à la pose squelettique standard, Muscle Space interpolera toujours naturellement entre les images clés de l'animation, pendant la transition de la machine d'état ou lorsqu'il est mélangé dans un arbre de mélange.
En termes de calcul, il fonctionne également comme l'espace musculaire qui peut être traité comme un vecteur d'un scalaire que vous pouvez interpoler linéairement par opposition aux quaternions ou aux angles d'Euler.
Une approximation du corps humain et du mouvement humain
Chaque nouveau squelette construit pour un personnage humanoïde ou toute animation capturée sera une approximation du corps humain et du mouvement humain. Peu importe le nombre d'os ou la qualité de votre matériel MOCAP, le résultat sera une approximation de la réalité.
Les riggers, les sociétés de jeux, les écoles ou les sociétés de logiciels proposeront leur propre version de ce qui, selon eux, représente le mieux le corps humain et le mouvement et ce qui conviendra le mieux à leurs besoins de production.
L'élaboration du Mecanim Humanoid Rig et du Muscle Space a été confrontée à des choix difficiles. Nous avons dû trouver un compromis entre la rapidité d'exécution et la qualité de l'animation ou l'ouverture et la définition standard.

C'est une question difficile. Pourquoi 2 et non 3 ? Ou un nombre arbitraire d'épines et d'os ? Laissons de côté les dernières nouveautés, il ne s’agit pas de recherche biomédicale. (Notez que vous pouvez toujours utiliser un rig générique si vous avez absolument besoin de ce niveau de précision). Un os de la colonne vertébrale est clairement sous-défini.
L'ajout d'un deuxième vous amène presque au bout du chemin. Un troisième ou même un quatrième n'apportera qu'une petite contribution à la posture humaine finale. Pourquoi est-ce ainsi ? Lorsque vous observez la façon dont la colonne vertébrale humaine se plie, vous remarquerez que la partie de la colonne vertébrale qui se trouve sur la cage thoracique est presque rigide. Ce qui reste, c'est un point de flexion principal à la base de la colonne vertébrale et un autre à la base de la cage thoracique. Il y a donc deux points de flexion principaux. Regarder un contorsionniste même dans des poses extrêmes le montre clairement. Compte tenu de tout cela, nous avons décidé d’avoir 2 os de la colonne vertébrale pour le Humanoid Rig.
1 os du cou
Celui-ci est plus facile que pour la colonne vertébrale. Notez que de nombreux squelettes de jeu n'ont même pas d'os de cou et parviennent à faire le travail avec seulement un os de tête.
Rotation DoF
Comme avec la plupart des rigs squelettes (c'est encore plus souvent le cas pour les jeux), le rig humanoïde Mecanim ne prend en charge que l'animation de rotation. Les os ne sont pas autorisés à modifier leur translation locale par rapport à leur parent. Certains packages 3D induisent une certaine quantité de translation sur les os pour simuler l'élasticité des articulations ou l'animation d'écrasement et d'étirement. Nous étudions actuellement la possibilité d'ajouter une profondeur de champ de traduction, car il s'agit d'un moyen relativement peu coûteux en termes de performances de calcul pour compenser la qualité de l'animation sur des squelettes moins détaillés. Cela permettrait également aux utilisateurs de créer des animations d'écrasement et d'étirement reciblables.

Pas d'os torsadés
Les os torsadés sont souvent ajoutés aux squelettes pour éviter les problèmes de déformation de la peau sur les bras et les jambes lorsqu'ils sont dans une configuration de torsion extrême.
Les os de torsion aident à répartir la déformation induite par la torsion du début à la fin du membre.
Dans l'espace musculaire, la quantité de torsion est représentée par un muscle et elle est toujours associée à l'os parent d'un membre. Ex: La torsion de l'avant-bras se produit au niveau du coude et non au niveau du poignet.

Les plates-formes humanoïdes ne prennent pas en charge les os de torsion, mais le solveur Mecanim vous permet de spécifier un pourcentage de torsion à retirer du parent et à appliquer à l'enfant du membre. Il est défini par défaut à 50 % et aide grandement à prévenir les problèmes de déformation de la peau.
Racine humanoïde et centre de masse
Maintenant, quelle serait la meilleure façon de représenter la position et l’orientation du corps humain dans l’espace mondial ?
L'os le plus élevé de la hiérarchie (généralement les hanches, le bassin ou quel que soit son nom) est l'endroit où se trouvent les courbes de position et d'orientation de l'espace mondial dans un squelette standard. Bien que cela fonctionne bien pour un personnage spécifique, cela devient inapproprié lors du reciblage puisque d'un squelette à un autre, l'os le plus haut a généralement une position et une rotation différentes par rapport au reste du squelette.

L'espace musculaire utilise le centre de masse humanoïde pour représenter sa position dans l'espace mondial. Le centre de masse est approximé à l'aide d'une distribution de masse moyenne des parties du corps humain. Nous partons du principe qu’après ajustements d’échelle, le centre de masse d’une pose humanoïde est le même pour n’importe quel personnage humanoïde. C’est une hypothèse ambitieuse, mais elle s’est avérée très efficace pour un large éventail d’animations et de personnages humanoïdes.
Il est vrai que pour les animations debout ou en marchant, le centre de masse se situe autour des hanches, mais pour des mouvements plus dynamiques comme un salto arrière, vous pouvez voir comment le corps s'éloigne du centre de masse et comment le centre de masse semble être le point le plus stable de l'animation.
Orientation du corps
De la même manière que le centre de masse le fait pour la position spatiale mondiale de l'espace musculaire, nous utilisons une orientation corporelle moyenne pour l'orientation spatiale mondiale. Le vecteur d'orientation moyenne du corps vers le haut est calculé à partir des points médians des hanches et des épaules. Le vecteur avant est alors le produit vectoriel du vecteur haut et des vecteurs moyens hanches/épaules gauche/droite. On suppose également que cette orientation corporelle moyenne pour une pose humanoïde est la même pour toutes les plates-formes humanoïdes. En ce qui concerne le centre de masse, une orientation corporelle moyenne tend à être un référentiel stable car l'orientation du bas et du haut du corps compense naturellement lors de la marche, de la course, etc.
Mouvement des racines
Un article plus approfondi sur le mouvement des racines suivra, mais en guise d’introduction, la projection du centre de masse et l’orientation moyenne du corps sont utilisées pour créer automatiquement le mouvement des racines. Le fait que le centre de masse et l’orientation moyenne du corps soient des propriétés stables de l’animation humanoïde conduit à un mouvement racinaire stable qui peut être utilisé pour la navigation ou la prédiction de mouvement.
L'échelle
Il manque encore une chose à Muscle Space pour être une pose humanoïde complètement normalisée… sa taille globale. Nous recherchons à nouveau un moyen de décrire la taille d'un humanoïde qui ne dépend pas d'un point spécifique comme la position de l'os de la tête, car elle n'est pas cohérente d'une plate-forme à l'autre. La hauteur du centre de masse d'un personnage humanoïde en T-Stance est directement utilisée comme échelle. La position du centre de masse de l'espace musculaire est divisée par cette échelle pour produire la pose humanoïde normalisée finale. Dit autrement, l'espace musculaire est normalisé pour un humanoïde qui a une hauteur de centre de masse de 1 en position T. Toutes les positions dans l'espace musculaire sont dites en mètres normalisés.
Position originale des mains et des pieds
Lors de l'application d'un espace musculaire à un rig humanoïde, les mains et les pieds peuvent se retrouver dans une position et une orientation différentes de l'animation d'origine, en raison de la différence de proportions des rigs humanoïdes. Cela peut entraîner un glissement des pieds ou une incapacité des mains à atteindre correctement le sol. C'est pourquoi Muscle Space contient éventuellement la position et l'orientation d'origine des mains et des pieds. La position et l'orientation des mains et des pieds sont normalisées par rapport à la racine humanoïde (centre de masse, rotation moyenne du corps et échelle humanoïde) dans l'espace musculaire. Ces positions et orientations d'origine peuvent être utilisées pour corriger la pose du squelette reciblé afin qu'elle corresponde à la position spatiale mondiale d'origine à l'aide d'un passage IK.

L'objectif principal d'IK Solver sur les bras et les jambes est d'atteindre la position et l'orientation d'origine des mains et des pieds trouvées éventuellement dans l'espace musculaire. Voici ce qui se passe sous le capot pour les pieds lorsque la bascule « Foot IK » est activée dans un état de contrôleur Mecanim.
Dans ces cas, la pose du squelette reciblée n'est jamais très éloignée des objectifs IK initiaux. L'erreur IK à corriger est faible car elle n'est induite que par la différence de proportion de plates-formes humanoïdes. Le solveur IK modifiera uniquement légèrement la pose du squelette reciblé pour produire la pose finale qui correspond aux positions et orientations d'origine.
Étant donné que l'IK ne modifie que légèrement la pose du squelette reciblé, il induira rarement des artefacts d'animation tels que des claquements de genou ou de coude. Même dans ce cas, il existe un solveur Squash et Stretch, faisant partie du solveur IK, qui est là pour empêcher les éclats lorsque les bras ou les jambes se rapprochent de l'extension maximale. Par défaut, la quantité d'écrasement et d'étirement autorisée est limitée à 5 % de la longueur totale du bras ou de la jambe. Un claquement du coude ou du genou est plus visible (et disgracieux) qu’un étirement de 5 % ou moins sur le bras ou la jambe. Notez que la résolution d'écrasement et d'étirement peut être désactivée en la réglant sur 0 %.
Un article plus approfondi sur les plates-formes IK suivra. Il expliquera comment gérer les accessoires, utiliser plusieurs passes IK, interagir avec l'environnement ou entre des personnages humanoïdes, etc.
Os optionnels
Le rig humanoïde possède quelques os qui sont facultatifs. C'est le cas pour la poitrine, le cou, l'épaule gauche, l'épaule droite, les orteils gauches et les orteils droits. De nombreux squelettes existants ne disposent pas de certains des os optionnels, mais nous voulions quand même créer des humanoïdes valides avec ceux-ci.
Le Humanoid Rig prend également en charge les os optionnels LeftEye et RightEye. Les os des yeux ont chacun deux muscles, un qui monte et descend et un qui permet d'entrer et de sortir. Les os des yeux fonctionnent également avec le solveur Humanoid Rig LookAt qui peut distribuer les ajustements de regard sur la colonne vertébrale, la poitrine, le cou, la tête et les yeux. Il y aura plus d'informations sur le solveur LookAt dans le prochain article sur le rig Humanoid IK.
Doigts
Enfin, le Humanoid Rig prend en charge les doigts. Chaque doigt peut avoir de 0 à 3 chiffres. Le chiffre 0 signifie simplement que ce doigt n'est pas défini. Il y a deux muscles (étirement et écartement) pour le premier doigt et un muscle (étirement) pour le deuxième et le dernier doigt. Notez qu'il n'y a pas de surcharge de résolution pour les doigts lorsqu'aucun doigt n'est défini pour une main.
Exigences relatives à la plate-forme squelettique
Entre les os
Dans de nombreux cas, les plates-formes squelettiques auront plus d'os que ceux définis par la plate-forme humanoïde. Les os intermédiaires sont des os situés entre les os définis par les humanoïdes. Par exemple, un troisième os de la colonne vertébrale d'un bipède 3DSMAX sera traité comme un os intermédiaire. Ceux-ci sont pris en charge par Humanoid Rig, mais gardez à l'esprit que les os intermédiaires ne seront pas animés. Ils resteront à leur position et orientation par défaut par rapport à leur parent défini dans le Humanoid Rig.
Hiérarchie standard
Le rig squelette doit respecter une hiérarchie standard pour être compatible avec notre rig humanoïde. Le squelette peut avoir n'importe quel nombre d'os intermédiaires entre les os humanoïdes, mais il doit respecter le modèle suivant :
Hanches - Haut de la jambe - Bas de la jambe - Pied - Orteils
Hanches - Colonne vertébrale - Poitrine - Cou - Tête
Poitrine - Épaule - Bras - Avant-bras - Main
Main - Proximale - Intermédiaire - Distale

La T-Stance est l'étape la plus importante de la création d'un Humanoid Rig puisque la configuration des muscles est basée sur elle. La posture en T a été choisie comme posture de référence car elle est facile à conceptualiser et qu'il n'y a pas beaucoup de place pour l'interprétation de ce qu'elle devrait être :
- Debout droit face à l'axe z
- Tête et yeux orientés vers l'axe z
- Pieds au sol parallèles à l'axe z
- Bras ouverts parallèlement au sol selon l'axe x
- Mains à plat, paume vers le bas parallèle au sol le long de l'axe x
- Doigts droits parallèles au sol le long de l'axe x
-Les pouces droits et parallèles au sol à mi-chemin (45 degrés) entre les axes x et z
Lorsque l’on dit « droit », cela ne signifie pas nécessairement que les os doivent être parfaitement alignés. Cela dépend de la façon dont la peau s’attache au squelette. Certains équipements peuvent avoir une peau qui semble droite, mais le squelette en dessous ne l'est pas. Il est donc important que la position T soit définie pour le personnage final. Dans le cas où vous créez un rig humanoïde pour recibler les données MOCAP, il est recommandé de capturer au moins quelques images d'une position en T réalisée par l'acteur dans la suite MOCAP.
Ajustements de l'amplitude musculaire
Par défaut, les plages musculaires sont définies sur des valeurs qui représentent le mieux les plages musculaires humaines. La plupart du temps, ils ne devraient pas être modifiés. Pour un personnage plus caricatural, vous souhaiterez peut-être réduire la portée pour empêcher les bras de pénétrer dans le corps ou l'augmenter pour exagérer le mouvement des jambes. Si vous créez un rig humanoïde pour recibler les données MOCAP, vous ne devez pas modifier les plages car le clip d'animation produit ne respectera pas la valeur par défaut.
Clip de reciblage et d'animation
Le reciblage Mecanim est divisé en deux phases. La première phase consiste à convertir une animation de transformation de squelette standard en un clip d'animation humanoïde normalisé (ou Muscle Clip). Cette phase se produit dans l'éditeur lorsque le fichier d'animation est importé. Il est appelé en interne « RetargetFrom ». La deuxième phase se déroule en mode jeu lorsque Muscle Clip est évalué et appliqué aux os du squelette d'un Humanoid Rig.

On l’appelle en interne « RetargetTo ». Diviser le reciblage en deux phases présente deux grands avantages. Le premier problème est la vitesse de résolution. La moitié du processus de reciblage est effectuée hors ligne, seule l’autre moitié est effectuée au moment de l’exécution. L’autre avantage est la complexité de la scène et l’utilisation de la mémoire. Étant donné que le Muscle Clip est complètement abstrait pour son squelette d'origine, le squelette source n'a pas besoin d'être inclus dans l'exécution pour effectuer le reciblage.
La deuxième phase est simple. Une fois que vous disposez d'un rig humanoïde valide, appliquez-lui simplement Muscle Clip avec le solveur RetargetTo. Cela se fait automatiquement sous le capot.
La première phase, convertir une animation de squelette en clip musculaire, peut être un peu plus délicate. Le clip d’animation du squelette est échantillonné à un taux fixe. Pour chaque échantillon, la pose du squelette est convertie en pose de l'espace musculaire et une clé est ajoutée au clip musculaire. Tous les squelettes ne s'adapteront pas, il existe de nombreuses façons différentes de construire et d'animer un squelette. Certains squelettes produiront une sortie valide, mais avec une possible perte d'informations. Nous allons maintenant passer en revue ce qui est nécessaire pour créer une animation humanoïde normalisée sans perte… le Muscle Clip.
Note: Par sans perte, nous entendons que le reciblage d'un squelette vers Muscle Clip, puis le reciblage vers le même squelette préservera l'animation intacte. En fait, il sera presque intact. La torsion originale des bras et des jambes sera perdue et remplacée par ce que le solveur Twist calcule. Comme expliqué précédemment dans ce document, il n’existe aucune représentation de la répartition des torsions dans l’espace musculaire.
- La position locale des os doit être la même dans le rig humanoïde et dans le fichier d'animation. Il arrive que le squelette utilisé pour créer le Humanoid Rig diffère de celui du fichier d'animation. Assurez-vous d'utiliser exactement le même squelette. Des avertissements seront envoyés à la console lors de l'importation, si ce n'est pas le cas.
- Les os intermédiaires ne doivent avoir aucune animation. Cela se produit souvent pour un squelette 3DSMAX où le 3ème os de la colonne vertébrale présente à la fois une animation de translation et de rotation. Cela se produit également lorsque Bip001 est utilisé comme hanches et que le bassin comporte une animation. Des avertissements seront envoyés à la console lors de l'importation si ce n'est pas le cas.
- L'orientation locale de l'os intermédiaire doit être la même dans le Humanoid Rig et dans le fichier d'animation. Cela peut se produire lors de l'utilisation de la configuration automatique humanoïde qui s'appuie sur la pose de liaison de peau pour créer la position T. Assurez-vous que la rotation de la pose de liaison de la peau pour les os intermédiaires est la même que celle trouvée dans le fichier d'animation. Des avertissements seront envoyés à la console lors de l'importation si ce n'est pas le cas.
- À l'exception des hanches, l'animation de translation n'est pas prise en charge sur les os. 3DSMAX Biped place parfois une animation de translation sur les os de la colonne vertébrale. Des avertissements seront envoyés à la console au cas où cela ne serait pas le cas.
Le 3DSMAX Biped est ici pointé comme une plate-forme problématique. C'est probablement à cause de sa popularité et du fait que nous avons dû prendre en charge de nombreux cas d'utilisation avec Mecanim. Notez que si vous souhaitez créer de nouvelles animations à utiliser avec Mecanim Humanoid Rig, vous devez suivre les règles énoncées ci-dessus dès le départ. Si vous souhaitez utiliser une animation déjà existante qui enfreint certaines règles, c'est toujours possible, le solveur de reciblage Mecanim est robuste et produira une sortie valide, mais la conversion sans perte ne peut pas être garantie.
Notez que si vous souhaitez créer de nouvelles animations à utiliser avec le Mecanim Humanoid Rig, vous devez suivre les règles énoncées ci-dessus dès le début. Si vous souhaitez utiliser une animation déjà existante qui enfreint certaines règles, cela est toujours possible car le solveur de reciblage Mecanim est robuste et produira une sortie valide, mais la conversion sans perte ne peut pas être garantie.