La souris ne cligne toujours pas des yeux
Par Oleg Sidorkin, directeur technique et cofondateur de Cinevva
Nous avons beaucoup travaillé sur les outils qui donnent vie à vos modèles dans Cinevva : leur rigging, l’application d’animations et la correction des détails gênants qui apparaissent dès qu’ils commencent à bouger. Ce travail nous a amenés à nous pencher sur des pattes qui refusent de se plier, le transfert d’animation et des queues dépourvues d’os pour les animer.
Je veux maintenant donner des émotions à ces personnages. Un personnage devrait pouvoir paraître surpris, agacé ou satisfait, et pas seulement traverser une scène en marchant. Pour cela, il faut animer son visage : les paupières, les sourcils, les joues et une bouche capable de faire autre chose que de rester dans sa pose de repos.
Nous avons commencé à étudier les recherches récentes sur le rigging facial afin de déterminer dans quelle mesure il est possible de passer d’un maillage existant à des expressions exploitables. Voici le premier compte rendu de ce travail : ce que nous avons réellement pu exécuter, comment nous avons préparé le personnage et ce qui s’est passé lors de nos essais.
Notre sujet de test était la souris utilisée pour le travail sur la queue. Elle disposait déjà d’un rig corporel et de six clips d’animation. Elle pouvait marcher, sauter et sprinter, mais son visage restait figé dans toutes ces animations.
Nous avons essayé NFR, une implémentation issue de la recherche qui transfère des expressions sur un maillage facial fourni. Le premier résultat était une planche de poses intitulées ouverture de la mâchoire, sourire, clignement des yeux, pincement des lèvres et haussement des sourcils. Je n’y voyais guère d’animation exploitable. La mâchoire avait déformé le museau ; la plupart des autres images semblaient presque identiques.
Il y avait un problème de préparation qu’il valait mieux corriger avant de juger le résultat. En préparant le maillage d’entrée, nous avions supprimé une grande partie du contour des yeux de la souris. Nous avons donc refait le découpage, relancé le traitement et rendu les deux essais en mouvement. Les voici.
Ce que nous avons fourni à NFR
Le personnage complet exporté possède 22 744 sommets et 30 articulations, mais aucun blendshape facial ni os dédié à la mâchoire ou aux yeux. Nous devions ajouter les contrôles faciaux sans perturber le rig existant.
Les exigences de NFR concernant les données d’entrée expliquent pourquoi nous ne pouvions pas simplement lui fournir le GLB. Le système attend une surface faciale dont les yeux et la bouche sont découpés, sans structures internes ni globes oculaires, et un maillage approximativement aligné sur ses exemples. Nous avons retiré l’arrière de la tête, les oreilles et le cou, créé les ouvertures et conservé le plus grand composant connexe. Il restait ainsi 777 sommets et 1 296 triangles.
Chaque sommet de ce découpage correspondait encore à une position sur le personnage d’origine. Après l’inférence, nous avons soustrait le visage neutre prédit de chaque expression prédite, reconverti les décalages à l’échelle de la souris et les avons appliqués aux sommets d’origine correspondants. Le mouvement s’atténuait près du bord du découpage afin de ne pas s’interrompre brutalement à la jonction entre le visage et le reste de la tête.
Nous avons ainsi obtenu neuf blendshapes : des décalages de sommets enregistrés qu’un curseur peut fusionner avec le maillage neutre. En remettant tous les curseurs à zéro, nous retrouvions la souris d’origine. Nous avons conservé son squelette, ses textures et ses six clips corporels, puis ajouté un clip de test distinct pour chaque expression.
L’inférence elle-même prenait environ sept secondes sur une T4, une fois le checkpoint et les données d’entrée chargés. Obtenir une expression exploitable allait prendre plus de temps.
Nous avions découpé les parties dont nous avions besoin
Nos premières découpes autour des yeux étaient de larges ellipses. Sur ce visage, elles supprimaient une grande partie du contour de chaque œil. La découpe de la bouche se trouvait sous la commissure visible des lèvres. Aucune de ces erreurs n’était évidente dans les données numériques décrivant le maillage : ses coordonnées étaient finies, il ne comportait aucun triangle dégénéré ni aucune arête non-manifold.
Mais en observant le découpage, le problème apparaît assez clairement. Nous demandions un mouvement des paupières après avoir supprimé une grande partie de la surface qui aurait pu le permettre.
Pour le deuxième essai, nous avons effectué le rendu de la tête de face et sous deux angles obliques. J’ai utilisé les capacités d’analyse d’image de l’assistant pour nous aider à repérer les ouvertures et contours des yeux, la ligne des lèvres, le museau, le nez, les sourcils et les moustaches. Ces tracés ont été projetés sur les triangles visibles du maillage d’origine. En conservant la projection et les identifiants des triangles, nous pouvions vérifier quelles parties réelles du visage subsistaient après chaque découpe.

Nous avons identifié 131 triangles visibles comme appartenant aux contours des deux yeux. Le premier découpage n’en avait conservé que 25. Le nouveau en conservait 123. C’est une amélioration utile des données d’entrée, même si cette mesure évalue la conservation par rapport à nos propres annotations, et non la précision d’une segmentation indépendante.
Nous avons également modifié l’alignement. Au lieu de reproduire l’étendue de référence précédente, nous avons utilisé des repères faciaux correspondants pour définir une échelle uniforme et une position. Le nouveau découpage comptait 586 sommets et 952 triangles. Il présentait encore des trous et des contours ouverts ; cette passe sélectionnait la géométrie existante au lieu de créer de nouvelles paupières ou un intérieur pour la bouche.
Davantage de mouvement, davantage d’étirement
Le deuxième essai utilisait les mêmes poids et les neuf mêmes contrôles d’expression. Cette fois, je voulais voir l’intégralité du mouvement. Nous avons donc effectué le rendu de plusieurs intensités intermédiaires entre la pose neutre et chaque expression complète, avant de revenir à la pose neutre. La vidéo ci-dessus montre les deux versions sous un éclairage identique.
Les yeux restent ouverts. Le contrôle de la mâchoire modifie le museau sans produire une ouverture de bouche convaincante. Certains contrôles de la bouche génèrent davantage de mouvement qu’auparavant, en particulier celui de l’arrondissement des lèvres, mais ils déforment également la surface.
Nous avons mesuré la longueur des arêtes afin de quantifier cette déformation. Pour chaque arête du maillage du personnage, nous avons divisé sa longueur à l’intensité maximale de l’expression par sa longueur en pose neutre, puis compté celles dont la longueur avait plus que doublé.
| Contrôle | Premier découpage : arêtes au-delà de 2× | Découpage révisé : arêtes au-delà de 2× | Étirement maximal révisé |
|---|---|---|---|
| Ouverture de la mâchoire | 13 | 44 | 5,27× |
| Sourire à gauche | 0 | 30 | 5,53× |
| Arrondissement des lèvres | 0 | 89 | 11,29× |
Une arête courte peut produire un rapport élevé, je n’utiliserais donc pas cette seule mesure pour évaluer un rig facial. Dans le cas présent, elle confirme ce que montrent les rendus. La bouche révisée bouge davantage, et une partie de ce mouvement correspond à un étirement dont nous ne voulons pas.
Nous avons modifié trois éléments à la fois : le découpage, l’alignement et l’atténuation sur le contour extérieur. Cette comparaison ne permet pas de déterminer quelle modification est à l’origine de chaque artefact. Elle montre toutefois que, dans son ensemble, la préparation révisée n’a pas résolu les problèmes du visage de ce personnage.
Pourquoi nous avons utilisé NFR
Nous avons étudié d’autres implémentations avant de mener cette expérience. GNM Head de Google se chargeait correctement et produisait des expressions sur son propre maillage de tête humaine. Pour transférer ces expressions sur notre souris, il aurait fallu une étape distincte d’ajustement et de transfert. Example-Based Facial Rigging nécessitait des exemples d’expressions correspondants dont notre personnage ne disposait pas.
RigAnyFace et OmniFaceRig étaient également pertinents, mais au 11 septembre 2026, nous n’avions trouvé ni code d’inférence public ni poids exécutables pour l’un ou l’autre. Le lien vers le jeu de données d’OmniFaceRig indiquait toujours « Bientôt disponible ». NFR proposait un checkpoint publié et une procédure pour les maillages personnalisés ; c’est donc cette solution que nous avons menée jusqu’à une souris animée.
Il ne s’agissait pas de cinq essais comparables. Nous avons testé NFR sur notre surface faciale, vérifié GNM sur sa tête d’origine et nous nous sommes arrêtés aux limites imposées par les données d’entrée ou la disponibilité pour les autres solutions.
La prochaine tentative aura besoin d’une paupière
Le découpage était mauvais, et il valait la peine de le corriger. Mais conserver le contour d’un œil ne lui donne ni une géométrie suffisante ni le mouvement approprié pour recouvrir l’œil. La bouche présente un problème similaire : nous pouvons tirer sur le museau, mais cette expérience n’a pas créé l’ouverture ni l’intérieur nécessaires à la pose.
La prochaine étape consisterait à traiter un clignement des yeux et une ouverture de la mâchoire. Il faudrait donner à la paupière une forme capable de se refermer sur l’œil, préparer les lèvres et l’intérieur de la bouche, puis ajuster ou créer les formes correctives correspondant à ces deux mouvements. Il faudrait les vérifier de profil comme de face avant d’ajouter le reste des contrôles.
Nous avons conservé les deux essais, y compris les prédictions brutes et les découpages exacts, afin de pouvoir comparer les travaux futurs à ce résultat. Pour l’instant, le rig corporel et ses animations restent intacts. Les formes faciales demeurent expérimentales ; je ne les utiliserais pas dans un personnage finalisé.