Grease Pencil Color Mapper

Il y a deux ans, nous avons fait le color picker, dans le but d’aider les artistes 2D dans leur tâche de mise en couleur sur Blender. Cet outil est particulièrement utile lorsque les modèles comprennent une très grande liste de matériaux. Nous avons ensuite travaillé sur l’exploration de palettes de couleurs. Qu’il s’agisse de composer la palette parfaite pour un personnage, de proposer des alternatives, ou d’adapter une palette existante à différents environnements lumineux, l’exploration de palettes de couleurs en 2D peut être laborieuse, en particulier si la palette comprend un grand nombre de couleurs.

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.
L’édition des couleurs de matériaux grease pencil est cependant une opération destructive, affectant directement les couleurs de la palette initiale. Il existe une méthode non-destructive pour éditer les couleurs d’un objet grease pencil, c’est celle des modifiers. En particulier le modifier de “Teinte” qui ajoute une teinte spécifique à l’objet grease pencil. Par défaut, cette teinte s’applique sur tout l’objet, bien que l’on puisse alternativement sélectionner des calques ou des matériaux pour que l’effet soit plus ciblé. On peut donc créer un mapping de couleurs à travers une liste de modifiers appliqués à chacun des matériaux. Une telle liste n’est cependant pas vraiment facile à manipuler en pratique.

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.
Pour fluidifier la constitution de la liste d’applications, nous avons ajouté un outil permettant de pointer directement dans le visualiseur le matériau dont on veut créer ou éditer une surcouche de couleur. Cet outil spécifique de sélection de matériau dans le visualiseur fera sans doute l’objet d’un prochain article.

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.
Cette vidéo montre comment le color mapper peut être utilisé pour créer une surcouche de palettes de couleurs à partir d’une image de référence. Comme vous pouvez le voir, cette méthode trouve ses lorsqu’on essaie d’échantilloner des couleurs issues de matériaux semi-transparents. Cependant, les couleurs peuvent toujours être ré-ajustées individuellement pour retrouver les bonnes teintes dans ces cas spécifiques.
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.
[1] Mellado, N., Vanderhaeghe, D., Hoarau, C., Christophe, S., Brédif, M., & Barthe, L. (2017). Constrained palette-space exploration. ACM Transactions on Graphics (TOG), 36(4), 1-14.
Afficher les commentairesFermer les Commentaires

Laisser un commentaire