Année : 2016-2019
Lieu : Genève, Suisse
Client : Spooklight Studio
Rôle : Lead TD Artist
■ Un peu de contexte:
En 2015, je fais parti des créateurs de Spooklight Studio avec cette mission en tête : défricher l’univers de la réalité augmentée et mixte. Parallèlement à la conception de nos projets, j’occupais le poste de Lead Technical Artist. Les tâches de TD (Shaders, Rigging), la construction et le maintien du pipeline graphique du Studio ainsi que l’assistance technique de mes collègues ont fait parti de mon quotidien durant ces trois années passionnantes.
Les contraintes :
À la création de Spooklight Studio, nous disposions de moyens très limités. Pour notre premier projet, Storyfab, nous avions 6 mois et une équipe de 5 personnes pour arriver à une première version.
Par conséquent, au moment de concevoir notre pipeline, il me fallait garder en tête les contraintes suivantes :
- Limiter au maximum les coûts des logiciels et licences.
- Ne pas réinventer la roue. Utiliser au maximum les technologies existantes (moteur 3D, plateforme AR, autorig).
- Mettre en place un workflow efficace et flexible qui permette de tester rapidement du contenu dans l’application.
- Garder ce workflow aussi simple et accessible que possible afin de permettre aux artistes, même ceux intégrés en cours de projet, d’être rapidement opérationnels.
En conséquence de quoi nous avons décidé de nous reposer sur:
- Blender, qui a l’avantage d’être gratuit, puissant et souple. Il dispose d’un autorig puissant et les animateurs le prennent en main très rapidement.
- Unity (+Vuforia). C’était à l’époque le moteur le plus polyvalent et le plus adapté à des applications AR à destination des plateformes mobiles.
Mon travail a été de connecter ces blocs et d’apporter aux équipes le maximum d’outils et de processus écrits pour fluidifier leurs travail.
Les fonctions et avantages :
Au fur et à mesure des projets est né et a grandi un pipeline liant Blender et Unity permettant une approche :
- Rapide, afin d’avoir dans le moteur une première version des personnages riggés et animés en une heure ou deux.
- Itérative et non destructive afin d’approfondir la qualité et la complexité du rig et de suivre les besoins du produit en interférant le moins possible avec la production de contenu.
Le catcher
Pour raison d’efficacité, nous avons choisi l’autorig de Blender, qui a l’avantage d’offrir des rigs puissants et ergonomiques rapidement.
Petit problème cependant : les rigs générés sont totalement inadaptés pour l’export vers un moteur temps réel : beaucoup trop de bones inutiles, hiérarchie erratique…
Pour pallier à ce problème, j’ai choisi de créer une armature indépendante nommée “Catcher” car elle suivra la structure des articulations et les mouvements du rig original. Les meshs sont ainsi skinnés à cette armature qui sera bakée et exportée.
Cette étape est totalement automatisée par un outil écrit par mes soins. Un catcher peut ainsi être généré à partir d’un rig Blender en un clic.
Cette méthode a l’avantage supplémentaire de créer une zone tampon entre le rig utilisé par les animateurs et celui qui est effectivement exporté.
Cela permet des interventions régulières sur le rig de contrôle (pour ajouter ou améliorer certaines fonctions) sans rien changer à l’armature exportée. Ainsi, tant que la structure en elle-même ne change pas, on limite drastiquement le risque de devoir ré-exporter et réintégrer les personnages et leurs animations.
A contrario, on peut aussi rectifier la hiérarchie du rig exporté sans rendre obsolète les animations déjà réalisées.
Gestion des props
Nos animations ont toujours utilisé des props (accessoires) de manière plus ou moins avancée. J’ai développé plusieurs outils dans le pipeline permettant d’uniformiser et de simplifier leur utilisation tant par les animateurs que par les intégrateurs.
Contraintes intégrées, permettant aux animateurs de choisir à quel bone du personnage est attaché le prop sans avoir à se plonger dans les contraintes ou le parenting. Ce processus normalisé permet de facilement transférer des éléments d’une scène à l’autre sans casser de liens.
Fusion des animations permettant aux animateurs d’animer le prop sur une take différente et de la fusionner avec la take du personnage ultérieurement.
Listing des props utilisés stockés dans la take, permettant de retrouver les objets utilisés pour une animation donnée. Cette liste est utilisée notamment pour importer les props nécessaires dans la librairie, afficher uniquement les props utiles à l’animation courante ou à sélectionner les objets à exporter pour chaque animation.
Bibliothèque d’animation dynamique
Blender permet d’encapsuler des animations dans des “actions”: des blocs de données aisément transportables d’un fichier à un autre (l’équivalent des “takes” du format fbx). Nous travaillions en utilisant le système de versionnage de Git à raison d’un fichier par animation (le format binary de Blender rendait inintéressant le cumul dans un même fichier).
Mais, le nombre d’animations grandissant, il s’est vite avéré utile de regrouper l’ensemble des animations dans un seul et même fichier afin de pouvoir comparer ou exporter plusieurs animations en une seule fois.
Ce genre de pratique pose deux problèmes: il faut entretenir la bibliothèque manuellement et cela empêche de merger deux branches Git possédant deux versions de la librairie différentes.
Pour pallier à ce problème j’ai créé une bibliothèque dynamique. Ce fichier est en quelque sorte une coquille vide qui, à l’aide d’un script, se voit automatiquement peuplé de toutes les animations et props de la branche active en utilisant le rig le plus récent. Ainsi, peu importe la version du projet, la bibliothèque est toujours à jour.
Ceci a été rendu possible par les méthodes unifiées décrites dans les étapes précédentes.
Outils d’animation
J’ai réalisé plusieurs outils, souvent à la demande des animateurs, pour fluidifier leur travail.
- Picker Customisable
Un picker leur permettant de sélectionner différents contrôleurs du rig. Les objets du picker sont customisables via une interface afin que les animateurs puissent modifier ou compléter leurs contrôleurs à loisir. - Selection Lock
Un simple verrouillage de sélection afin d’éviter aux animateurs de sélectionner d’autres objets par accident. - Adaptation de la Timeline
Les bornes de la timeline s’adaptent automatiquement à l’animation en cours. - Support en ligne
Le pipeline vient avec une section d’aide renvoyant à une vidéo tutoriel.
Export et Batching
L’export des animations pour Unity repose sur un processus précis consistant à baker l’animation sur le catcher et à l’exporter avec certains mesh et rigs supplémentaires dans un fichier .fbx avec les bons réglages d’échelles, d’axes etc. Sans oublier de nettoyer le fichier ensuite.
Ce travail est rébarbatif et les erreurs sont vites arrivées. J’ai donc très vite décidé d’automatiser tout ça. L’animation pipeline permet de le faire en un clic, sans risque d’erreur.
Et plus encore, le batch export permet d’exporter toutes les animations présentes dans le fichier d’un seul coup. Le temps d’un café, et c’est fini !
Intégration
L’intégration des assets d’animation dépend ensuite du projet. Les assets sont compatibles avec l’utilisation de l’avatar humanoid de mechanim et le retargeting se fait sans difficulté. La hiérarchie du catcher corresponds à ce qu’attends le système d’animation d’Unity.
Cette hiérarchie est également directement compatible avec la bibliothèque d’animation en ligne Mixamo. Cela permet de prototyper très rapidement sans avoir nécessairement d’animation finie sous la main.
Pour la suite cela dépends des projets: arbre d’animation, cinemachine ou système custom. J’ai pour ma part écrit la plupart des processus d’intégration mais laissé le développement des outils Unity à nos développeurs.
Portfolio de projets
KOUJI
Kouji a été le projet le plus long et le plus important sur lequel l’animation pipeline ait été utilisé.
En un an, une centaine d’animations ont été créées par deux animateurs. Certaines faisant intervenir plusieurs personnages et props. La souplesse du pipeline a permit de faire évoluer constamment le rig selon les besoins du produit (nouveaux skin, nouvelles customisations…) et les besoins de nouvelles animations (nécessité de nouveaux blendshapes ou contrôleurs) tout en assurant la continuité des animations déjà présentes dans l’application.
Elle a également facilité le traitement des données de ces nombreuses animations.
Storyfab
C’est avec Storyfab qu’est né notre pipeline. Il a été utilisé par un animateur interne puis par une société externe, l’intégration restant à ma charge.
Au début, principalement manuel, il a été automatisé petit à petit.
Water Rush
Water rush est un projet né d’une game jam d’une journée réalisée en interne de Spooklight.
Le pipeline a permis de mettre en place un workflow très rapide et itératif. En moins d’une matinée les développeurs avaient à leur disposition une maquette du personnage jouable avec ses principales animations organisées dans un arbre. Le travail sur les personnages pouvait continuer en parallèle de leur travail et l’intégration des nouvelles versions des assets pouvait se faire progressivement, de manière non destructive.
Pour prototyper j’ai choisi la banque d’animation Mixamo qui reconnaît immédiatement la hiérarchie des bones du catcher et permet un retargeting rapide.
Cette manière de procéder illustre parfaitement l’intérêt de ce workflow et des outils qui l’accompagnent: prototyper très rapidement afin de voir le personnage en mouvement dans le moteur le plus tôt possible. Cela permet non seulement de tester la viabilité du modèle régulièrement mais également de paralléliser au mieux les différentes tâches.
Global Game Jam 2017
Le projet SoSsick est né lors de la Global Game Jam 2017.
A cette occasion, les outils et processus du pipeline m’ont permis d’aller vite. Durant ces deux jours, j’ai ainsi pu réaliser un personnage de A à Z (modé, textures shader, rig) créer une dizaine d’animations et intégrer l’ensemble.