Quatre outils de rigging automatique, douze animaux, un défaut commun : des pattes droites
Par Oleg Sidorkin, CTO et cofondateur de Cinevva
Prenez un cycle de marche créé par un artiste pour un cerf, transférez-le sur le même cerf après son passage dans un outil de rigging automatique, et le résultat paraît incorrect d’une manière difficile à définir. Les pieds se posent à peu près aux bons endroits. Le rythme est bon. Pourtant, on dirait toujours une table qui marche.
Pendant un certain temps, nous avons supposé que le problème venait de notre code de retargeting. Ce n’est pas le cas. Le rig est déjà incorrect avant même qu’une animation ne lui soit appliquée, et une seule mesure suffit à le montrer.
La mesure
Prenez une patte. Additionnez les longueurs de ses segments osseux, de la hanche au pied. Appelons cette valeur la portée. Mesurez maintenant la distance en ligne droite entre l’articulation de la hanche et celle du pied dans la pose de référence. Appelons cette valeur l’envergure. Divisez la portée par l’envergure.
Lorsqu’un véritable animal se tient immobile, ses pattes sont fléchies : la chaîne est donc sensiblement plus longue que la ligne qu’elle couvre. Sur les douze animaux riggés par des artistes du pack Ultimate Animated Animals de Quaternius, ce rapport varie de 1,15 à 1,50, pour une moyenne de 1,30. La patte arrière d’un cerf atteint 1,40. La patte avant d’un renard, 1,29.
Voici maintenant le point important. Une patte sans flexion ne peut pas se plier sans réduire son envergure. Si les articulations sont alignées, la seule façon de fléchir le genou consiste à rapprocher le pied de la hanche. Le pied doit donc quitter le sol, ou le corps doit s’affaisser. Demandez à ce rig de reproduire l’angle de genou défini par l’artiste et vous obtenez une position accroupie. Aucun retargeting ne peut corriger cela, car l’information nécessaire à la pose n’a jamais été intégrée au squelette.

La question est donc précise et mesurable. L’outil de rigging place-t-il les articulations intermédiaires là où la patte peut effectivement se plier ?
Le protocole de test
Douze animaux, tous sous licence CC0 et issus du pack Quaternius, chacun fourni avec un rig d’artiste comportant de 38 à 51 articulations.

Un détail de la préparation du maillage s’est révélé beaucoup plus important qu’il n’y paraît. Ces fichiers glTF divisent le maillage en cinq primitives selon le matériau et, comme il s’agit de modèles low-poly aux arêtes marquées, presque tous les sommets sont dupliqués pour chaque face adjacente. Le renard contient 3 752 sommets stockés, mais seulement 926 sommets distincts. Les outils qui construisent un graphe à partir de la topologie du maillage interprètent ces coutures composées de sommets superposés mais non partagés comme des fissures. La tête devient alors un objet séparé du corps, la distance géodésique entre les deux tend vers l’infini, et une articulation censée se trouver dans le cou n’a plus aucune raison d’y être placée. Dans ce cas, souder les sommets par position n’est pas une optimisation. C’est ce qui fait la différence entre un seul animal et six îlots distincts. Neuf des douze modèles sont devenus une seule enveloppe fermée et étanche. Le taureau et la vache conservent leurs cornes comme pièces séparées, et le cerf ses bois. Nous les avons volontairement laissés ainsi, car les véritables fichiers envoyés par les utilisateurs ressemblent à cela.
Pour l’évaluation, nous avons utilisé deux éléments. Le premier est notre propre fonction d’exécution, qui réduit un squelette arbitraire de quadrupède à une structure canonique. Elle doit identifier quatre pieds dans quatre quadrants distincts, une colonne vertébrale et un cou. Si elle n’y parvient pas, le rig ne peut pas être piloté à l’exécution, quelles que soient ses autres qualités.
Cette fonction ne lit volontairement aucun nom d’os, et la raison est instructive. Tripo numérote ses chaînes de membres par indice sans signification fixe : la chaîne 0 correspond ainsi à la paire arrière sur son cerf, mais à la paire avant sur son cheval. Ses libellés gauche et droite varient également d’un rig à l’autre : Left se trouve à x=-0.072 sur le cerf et à x=+0.076 sur le cheval, alors que les deux animaux sont orientés dans la même direction. Sur son renard, Tripo identifie la colonne vertébrale comme une chaîne de membre. Toutes les hypothèses que nous avons formulées à partir des noms ont échoué lors des mesures. Nous lisons donc plutôt la géométrie de référence, qui fournit toutes ces informations sans ambiguïté.
Le second élément est le rapport de flexion décrit plus haut. Ces deux mesures sont indépendantes de l’échelle, ce qui est important, car ces outils de rigging travaillent à des échelles extrêmement différentes. Tripo normalise les modèles dans un cube d’environ une unité : son renard mesure ainsi 0,13 × 0,34 × 0,65, contre 0,77 × 2,47 × 6,59 pour celui de l’artiste.
Les résultats obtenus
| outil de rigging | rigs | pilotables | articulations moyennes | flexion moyenne |
|---|---|---|---|---|
| artiste (référence) | 12 | 11 | 46.8 | 1.299 |
| Anything World | 6 | 6 | 37.8 | 1.363 (voir ci-dessous) |
| RigNet | 12 | 12 | 54.1 | 1.146 |
| SkinTokens | 12 | 11 | 32.0 | 1.078 |
| Tripo | 12 | 10 | 25.8 | 1.045 |


La ligne d’Anything World doit être interprétée avec prudence, car son résultat semble positif alors qu’il ne l’est pas. Sa moyenne de 1,363 est supérieure à celle de l’artiste, mais elle provient entièrement d’un bug décrit plus bas. Si l’on écarte ce bug, ses pattes mesurent de 1,02 à 1,18. Elles sont droites, comme toutes les autres.
Aucun des quatre outils n’atteint donc la flexion minimale de 1,15 observée chez l’artiste. Tripo non plus, alors qu’il s’agit de l’outil de rigging que nous proposons dans notre offre Pro. Voilà le véritable constat, bien plus intéressant qu’un classement. Quatre systèmes développés indépendamment convergent vers la même erreur. Tous placent les articulations des pattes des quadrupèdes presque en ligne droite.
Cela devient logique une fois qu’on le remarque. Ces systèmes ont été entraînés sur des jeux de données dominés par des bipèdes et des modèles en pose neutre. Un membre droit constitue la moyenne la plus sûre. Un jarret fléchi est une caractéristique propre aux quadrupèdes qu’un a priori principalement humanoïde n’a guère de raisons d’apprendre.
Il convient également de noter que la ligne de référence n’est pas parfaite. Un rig d’artiste, celui du Shiba Inu, échoue à notre propre test de pilotabilité, et la raison est instructive. Ces rigs incluent une couche de contrôle IK : quatre cibles de pôles, parentes de la racine et placées à une demi-longueur de corps devant l’animal, ainsi que quatre chaînes IK dépourvues de parent. Géométriquement, elles correspondent aussi bien à la définition d’un « pied » que les véritables pieds. Sur le Shiba Inu, elles l’emportent, produisant huit faux candidats sur douze.
Cela soulève un soupçon évident qu’il est utile d’écarter, car une couche de contrôle qui perturbe un analyseur géométrique pourrait sembler expliquer une grande partie du problème. Ce n’est pas le cas. Supprimer les os de contrôle et relancer l’analyse ne modifie le résultat que pour un seul des douze rigs d’artistes. Le Shiba Inu passe de 2 membres incorrects à 4 membres correctement détectés, avec une flexion de 1,28 à 1,43, juste à côté de celle du husky. Les onze autres produisent des résultats identiques, rapports de flexion compris. La couche IK révèle donc bien un bug dans notre détection des pieds, corrigeable en une seule ligne, mais elle n’est pas responsable des pattes droites produites par le rigging automatique. La plage de 1,15 à 1,50 des artistes n’a jamais été mesurée sur les os de contrôle, et les rigs prédits ne comportent aucune couche de contrôle : les squelettes de Tripo n’en ont pas, et les cinq articulations sans déformation d’Anything World ne sont que des marqueurs d’extrémité.
Le fait que les rigs prédits soient entièrement en FK présente également un avantage inverse. Dans ce cadre très précis, un animal riggé automatiquement est plus facile à interpréter pour un moteur d’exécution ignorant les noms que le rig de l’artiste.
Les quatre outils de rigging présentent des modes de défaillance très différents
Tripo produit les pattes les plus droites, avec 1,045, et utilise de loin le moins d’articulations : 25,8 contre 46,8 pour l’artiste. En revanche, il reproduit correctement la structure des chaînes, contrairement aux autres. Quatre de ses douze rigs reprennent exactement la répartition 3/3/4/4 de l’artiste, soit trois articulations par patte avant et quatre par patte arrière. Aucun autre outil n’y est parvenu une seule fois. Tripo ne place donc pas un nombre incorrect d’articulations : il place le bon nombre d’articulations presque en ligne droite. Le défaut est plus limité qu’il n’y paraît à première vue, ce qui laisse penser que repositionner les articulations existantes serait plus simple que de refaire entièrement le rig. Deux de ses rigs échouent complètement au test de pilotabilité : le renard ne revient qu’avec deux membres, tout comme le cerf.

RigNet (SIGGRAPH 2020) obtient la meilleure flexion réelle, avec 1,146, et c’est le seul à avoir produit un rig pilotable pour les douze animaux. Le problème vient de ses chaînes. L’artiste utilise une structure 3/3/4/4 sur les douze animaux, cohérente entre l’avant et l’arrière. RigNet ne reproduit exactement cette structure qu’une seule fois. Trois de ses rigs ont une patte comportant deux articulations ou moins, ce qui empêche toute articulation, et quatre ont une patte comportant au moins sept articulations. Son cheval utilise une structure 2/2/8/8 : deux articulations dans les pattes avant et huit dans les pattes arrière. La critique publiée à propos de RigNet affirme qu’il « produit des squelettes irréguliers », et voilà à quoi ressemble cette irrégularité en pratique. Un balayage de la largeur de bande ne corrigera pas non plus le problème, car ce paramètre contrôle le nombre total d’articulations, et non leur répartition entre les membres.

Anything World est celui qui échoue de manière manifeste plutôt que discrète. Deux des huit animaux que nous lui avons envoyés n’ont pas pu être riggés : le husky a renvoyé FinetuningError: Incorrect segmentation exception et la vache un simple Unknown error. Les six rigs produits sont tous pilotables. Ils utilisent tous une structure identique de 5/5/5/5, la plus cohérente obtenue parmi tous les outils de rigging prédictifs.
Le problème vient de leurs pattes avant, et il est utile d’en décrire précisément la forme, car la moyenne brute avantage le service. Les pattes arrière sont parfaitement symétriques sur les six animaux : 1,10 et 1,10, 1,11 et 1,11, 1,13 et 1,13, et ainsi de suite jusqu’à cinq décimales. Les pattes avant présentent un défaut sur trois des six animaux : une patte est fléchie bien au-delà de toute limite anatomique, tandis que sa jumelle reste presque droite. Chez l’alpaga, la patte avant gauche atteint 3,60, contre 1,87 pour la droite. Chez le cheval, les valeurs sont de 2,47 contre 1,43. Chez le cerf, elles sont de 1,43 contre 2,13. Notez que la valeur extrême se trouve ici du côté droit : il ne s’agit donc pas d’un biais gauche systématique.

Nous avons relancé le cerf et le cheval pour écarter un problème venant de notre soumission. symmetry est un champ d’envoi obligatoire, et la réponse enregistrée ne renvoie jamais la valeur qui a été transmise. Soumis avec une symétrie explicitement activée, les deux ont reproduit l’anomalie. Elle persiste donc malgré le paramètre censé l’empêcher, sur un maillage dont le rig d’artiste est lui-même symétrique à trois décimales près.
SkinTokens (2025, du groupe VAST-AI à l’origine de Tripo) est de loin le plus régulier. Onze résultats sur douze présentent des longueurs de chaînes gauche et droite en miroir, et aucun n’a de patte comportant deux articulations ou moins. C’est un squelette bien maîtrisé qui se tient trop droit, à 1,078, plutôt qu’un squelette erratique.
Deux choses à noter à propos de SkinTokens
Il plante avec les entrées low-poly. Ce comportement n’est documenté nulle part. Notre renard de 926 sommets fait tomber son serveur côté Blender en pleine requête, sans aucun traceback Python. Le même renard subdivisé à 88 706 sommets est riggé en 70 secondes. Leur propre modèle d’exemple fonctionne parce qu’il était déjà dense. L’ajout d’une étape de subdivision jusqu’à environ 40 000 sommets avant l’appel a transformé un échec total en douze rigs réussis sur douze. Si vous lui fournissez des assets de jeu, qui sont par définition low-poly, cette condition préalable fait toute la différence entre un système qui fonctionne et un qui échoue.
La découverte la plus utile est qu’il possède un mode que nous n’avions jamais utilisé. L’option --use_skeleton le conditionne à partir d’un squelette que vous fournissez, au lieu de lui en faire inventer un. Il conserve alors ce que vous lui avez donné. Chaque articulation de sortie se trouve sur une articulation d’entrée, avec un décalage moyen de 0,31 % de la diagonale de la boîte englobante et, dans le pire des cas, de 0,50 %. À l’export, il les renomme toutes en bone_0 et suivants, puis élimine celles qui ne portent aucun poids, raison pour laquelle ce mode semblait inutilisable vu de l’extérieur.
Ce renommage est réversible. Faites correspondre les articulations de sortie au squelette fourni en fonction de leur position, et chaque nom est récupéré. Cela a fonctionné pour 100 % des articulations, sur les quatre animaux testés. Et puisque le squelette est désormais le vôtre, la posture l’est aussi. Notre cheval mesure entre 1,01 et 1,02 lorsque SkinTokens choisit le squelette, et entre 1,11 et 1,36 lorsqu’on lui fournit celui de l’artiste. Celui de l’artiste se situe entre 1,18 et 1,37.
Deux conditions préalables sont nécessaires. Il rejette catégoriquement les squelettes à racines multiples, et ces rigs d’artiste en ont cinq : le corps plus quatre chaînes IK. Notre première solution a été de supprimer les racines isolées. C’était une erreur. Retirer ces huit os laisse entre 90 et 128 sommets sans aucune influence, sur chaque animal du pack, parce que FF et FFB sont les os auxquels l’artiste a skinné les pieds. Ce ne sont pas des auxiliaires inertes. Rattacher chaque racine isolée à l’articulation du corps la plus proche préserve tous les poids tout en produisant une racine unique.
Les noms d’os anonymes ne sont pas l’obstacle qu’ils semblent être
Un squelette prédit revient avec des noms comme joint_0 ou bone_0, et la conclusion habituelle est qu’aucun clip standard ne peut lui être associé. Pour les quadrupèdes, ce problème est résolu dans les deux sens.
Les noms peuvent être récupérés, comme ci-dessus, lorsque vous avez fourni le squelette. Ils peuvent aussi être déduits. Une analyse géométrique sait déjà quelles sont les quatre chaînes correspondant aux pattes, dans quel quadrant chacune se trouve, et quelles suites correspondent à la colonne vertébrale et au cou. Les renommer à partir de ces informations ne relève pas de l’inférence. Nous l’avons fait sur les douze rigs RigNet, en utilisant une convention de nommage déjà comprise par notre moteur d’exécution, puis nous les avons analysés à nouveau. Les douze ont produit des résultats identiques par la méthode fondée sur les noms et par la méthode géométrique. Même nombre de membres, mêmes quadrants, mêmes longueurs de chaînes, même colonne vertébrale, même cou, mêmes rapports de pliage.
Un deuxième chiffre : le squelette est-il seulement symétrique ?
Les pattes avant produites par Anything World nous ont poussés à effectuer une mesure que nous aurions dû prendre dès le départ, et elle s’est avérée distinguer les outils de rigging plus nettement que le pliage.
Elle fonctionne sans lire le moindre nom d’os, ce qui est important lorsque la moitié de la sortie s’appelle bone_0. Réfléchissez chaque articulation par rapport au plan de symétrie du modèle, puis mesurez la distance entre chaque reflet et l’articulation réelle la plus proche, en pourcentage de la diagonale de la boîte englobante. Un squelette parfaitement symétrique obtient un score de zéro. Le plan est calculé à partir de la boîte englobante du maillage, pas des articulations. Permettre à un squelette asymétrique de définir son propre plan lui permettrait de faire disparaître sa propre asymétrie.
| outil de rigging | erreur miroir moyenne |
|---|---|
| artiste | 0,01 % |
| RigNet | 0,08 % |
| SkinTokens | 0,37 % |
| Anything World | 1,08 % |
| Tripo | 1,13 % |

Les rigs de l’artiste sont symétriques à l’arrondi près, ce qui est le résultat attendu et confirme utilement que la mesure fonctionne. RigNet est presque aussi bon, et ce n’est pas un hasard : il applique explicitement une symétrisation en réfléchissant ses articulations candidates par rapport à x=0 avant de les regrouper. Ce choix de conception apparaît clairement dans le chiffre obtenu.
Tripo arrive dernier, de peu, mais c’est sa dispersion qui ressort davantage que sa moyenne. Huit de ses douze rigs restent sous 0,8 %, puis le renard atteint 15,02 % et le cerf 14,45 %. Ce sont aussi les deux qui échouent au test de pilotabilité, et ce n’est pas une coïncidence : un outil de rigging dont la géométrie n’est pas symétrique ne dispose d’aucun moyen stable de distinguer un côté de l’autre. C’est le même problème qui expliquait plus tôt les difficultés de nommage, lorsque ses propres étiquettes gauche et droite variaient d’un rig à l’autre.
Ces pourcentages sont faibles. Une fraction de pour cent est invisible à l’arrêt. Elle devient perceptible dès qu’un cycle de marche demande aux pattes gauche et droite d’effectuer le même mouvement avec une demi-période de décalage.
Ce que nous allons faire
La correction doit se faire dans le rig, pas dans le retargeting. Deux pistes sont possibles, et toutes deux coûtent moins cher que d’entraîner quoi que ce soit.
Fournir le squelette et laisser le modèle effectuer le skinning. SkinTokens prend déjà cette approche en charge et préserve ce qu’on lui fournit ; pour les humanoïdes, notre outil de rigging de production génère déjà un squelette Mixamo correctement nommé qui pourrait lui être transmis directement. L’autre option consiste à repositionner les articulations dans le rig existant, ce qui, pour Tripo, revient à déplacer les articulations intermédiaires des pattes sur une chaîne dont le nombre d’articulations est déjà correct.
Ce que nous ne ferons pas, c’est remplacer un outil produisant des pattes raides par un autre qui fait de même. Cela n’apporterait rien. Pour la mesure qui compte, ils se situent entre 1,04 et 1,15, contre 1,30 pour l’artiste, et l’écart avec la référence est plus grand que celui séparant n’importe lesquels de ces outils.
Mise à jour : une troisième voie est apparue, et elle change suffisamment la situation pour mériter son propre article. Au lieu d’effectuer un retargeting entre les squelettes, nous résolvons désormais l’animation dans l’espace propre à chaque rig à partir de la surface déformée, et le classement qualitatif obtenu inverse celui présenté ci-dessus. Cette histoire est racontée dans la partie 2 : résoudre la surface, pas le squelette.
Réserves, car elles comptent ici
Les tailles d’échantillon sont inégales, ce qui limite la portée des moyennes. RigNet, SkinTokens et Tripo ont tous été exécutés sur les douze modèles. Anything World a été exécuté sur huit, dont six ont produit un rig ; les deux autres ont échoué avec des erreurs explicites, plutôt qu’en produisant un mauvais rig que nous aurions pu mesurer. Les cinq rigs Tripo initiaux provenaient de travaux de retargeting antérieurs ; les sept autres ont donc été riggés pour ce benchmark via le même endpoint et à partir des mêmes entrées. Leur ajout a modifié son pliage moyen de 0,004 et fait passer son erreur miroir moyenne de 1,54 % à 1,13 %, ce qui montre à peu près dans quelle mesure un échantillon de cinq modèles le favorisait dans un sens et le pénalisait dans l’autre.
Concernant spécifiquement Anything World, nous avons commencé avec deux rigs et avons failli publier une conclusion fondée uniquement sur eux. Tous deux présentaient la même anomalie sur les pattes avant, ce qui semblait accablant. Puis le premier modèle de la série élargie est revenu sans problème, et nous avons soudain pensé que notre propre soumission était en cause. Ce n’est qu’avec six modèles que la situation réelle est devenue visible : la moitié de l’échantillon est affectée, les pattes arrière sont toujours parfaites, et le côté extrême n’est pas toujours le même. Deux modèles auraient donné lieu à un article catégorique et erroné. Dans un sens comme dans l’autre.
Les checkpoints de RigNet provenaient d’un miroir tiers plutôt que du téléchargement proposé par l’article, qui exige une confirmation interactive et impose une limitation de débit. Ses chiffres décrivent donc notre pipeline, pas les résultats certifiés par les auteurs. Il a fallu sept correctifs distincts et non documentés rien que pour le faire fonctionner. L’un d’eux concerne une invite interactive de sélection du fuseau horaire qui bloque la construction du conteneur sans produire la moindre erreur. Un autre concerne une visionneuse de débogage qui ouvre une fenêtre puis se bloque indéfiniment. Il est impossible de contourner ce dernier problème en mode headless, car son voxeliseur effectue la rastérisation via OpenGL : le processus a donc besoin d’un affichage.
Enfin, le rapport de pliage suppose une pose neutre debout comme bind pose. C’est la bonne mesure pour ces douze animaux, mais ce serait la mauvaise pour un rig livré au milieu d’une foulée.
Les animaux sont sous licence CC0 et proviennent de Quaternius, donc n’importe qui peut reproduire cette expérience. Si vous riggez des quadrupèdes et avez mesuré autre chose, nous aimerions en discuter sur notre Discord.