Exemple d’application (mapping) de palette de couleurs traduisant un changement d’environnement lumineux sur notre personnage Billie. Crédit: Gaelle Diot.
Cet article existe en anglais / This article exists in English.
Cette exploration de palette de couleurs se fait souvent directement sur l’image, à l’aide d’un logiciel d’édition bitmap comme Krita. Le changement de couleurs est effectué à partir d’une sélection par couleur sur l’image. Ce procédé ne permet pas de séparer les couleurs similaires correspondant à des zones sémantiquement différentes, et ne prend pas non plus en compte les changements de couleurs liée à la superposition de couches semi-transparentes, ou autres effets de rendu. En cela, il se rend difficilement automatisable, ce qui pose un problème lorsque l’on veut appliquer le changement de couleur sur une animation entière.Exemple de changements de couleurs effectués manuellement avec le logiciel Krita, pouvant mener à des résultats inattendus.
D’un autre côté, l’outil d’animation 2D de Blender – le grease pencil – nous permet de part ses données vectorielles d’accéder directement à l’ensemble des couleurs qui ont été utilisées sur chacune des formes que compose le dessin. Cet accès peut se faire soit par les vertex colors ou bien par les matériaux grease pencil. Nous nous concentrons ici sur les matériaux, parce qu’ils sont plus facilement manipulables dans l’interface, et parce qu’ils portent généralement des informations sémantiques dans leur organisation, et leurs noms. Les tracés vectoriels sont affectés à un matériau de la liste, ce qui permet facilement de modifier la couleur de tous les tracés correspondant à un matériau donné. Ainsi, si on affecte un matériau spécifique pour la peau par exemple, nous pouvons changer la couleur de la peau de notre personnage à partir d’un seul contrôleur, et sur l’ensemble de l’animation.
Exemple d’applications du modifier de teinte sur notre personnage Billie, avec différentes valeurs de facteur.
A partir de ces observations, nous avons voulu combiner l’intuitivité de l’approche bitmap – clic sur une zone de dessin, choix de la nouvelle couleur – avec la précision et la flexibilité de l’approche vectorielle, dans une méthode non-destructive. Ainsi est né le Grease Pencil Color Mapper qui permet de créer des surcouches de couleurs sur les matériaux grease pencil d’une scène. L’utilisateur peut constituer une liste de matériaux existants, and de choisir une couleur de surcouche pour chacun d’entre eux. En effectuant cette opération, le programme va créer un modifier de teinte spécifique à chacun des matériaux et qui sera manipulable directement via l’interface du color mapper. Ce procédé ne fonctionne qu’avec des matériaux “plats”, c’est-à-dire sans texture ni gradients.Aperçu de l’interface utilisateur du color mapper.
L’interface montre la liste des applications (mappings) créées, avec pour chacune le nom du matériau associé, ses couleurs de tracé et de remplissage initiales, ainsi que la ou les couleur(s) choisies en surcouche. Si le matériau possède à la fois une couleur de tracé et une couleur de remplissage, alors l’utilisateur peut “lier” l’application, c’est-à-dire de faire pointer la couleur de remplissage et la couleur de tracé sur un seul et même contrôleur.
Exemple d’application de couleurs simple, visant à changer la couleur de la jupe du personnage d’orange à violet.
Le color mapper est donc un outil assez basique pour créer une surcouche de couleurs sur un ensemble de matériaux, de manière non-destructive. Si vous voulez l’essayer, vous le trouverez sur notre gitlab.
En théorie, l’outil color mapper peut aussi être utilisé pour l’exploration de nouvelles palettes de couleurs. Cependant la sélection couleur par couleur semble être une limite importante pour une exploration fluide des palettes. Alternativement, nous pourrions éditer les couleurs de manière globale. Nous avons implémenté une version simple de cette méthode par le biais des preset, ici “niveau de gris” mais qui pourrait être étendue à d’autres fonctions couleur → couleur. Cependant ce système, similaire à l’application d’un filtre sur une image, est lui aussi assez limité, par son manque de contrôle local.
Et maintenant ?
Il semblerait préférable de se diriger vers une approche plus hybride, combinant des contrôles locaux, semi-locaux, et globaux. Une manière naïve de mettre en place une telle approche serait de permettre de verrouiller certaines couleurs et d’éditer toutes les autres via une même opération dans l’espace de couleurs, comme une translation dans l’espace HSV par exemple. Ainsi, l’utilisateur pourrait par exemple sélectionner tous les matériaux correspondant à la jupe, et effectuer un changement de teinte, ou de valeur sans affecter le reste des matériaux.
Bien sûr, cette approche naïve nécessite d’être améliorée et approfondie afin de devenir un système utilisable en pratique. Une de nos principales références pour la suite de nos travaux est l’article de Mellado et al., paru en 2017 [1] (page de projet). Leur méthode utilise une représentation des palettes par graphe de couleurs, afin de définir des opérations s’appliquant de manière non-linéaires sur l’ensemble des couleurs. Nous prévoyons aussi un travail d’interface, afin de proposer une manière plus intuitive de naviguer dans une longue liste de couleurs contenant des données sémantiques.