darktable et OpenCL : j’achète une carte graphique ou pas ?

Une des questions les plus posées, et à juste titre : est-ce que ça vaut la peine d’investir dans une carte graphique pour utiliser darktable ? Cela fait 1 mois que je programme, teste (et fait crasher) OpenCL, voici donc mes observations, de l’intérieur du code.

OpenCL, quesséça ?

Une carte graphique est un processeur très particulier, conçu à la base pour du traitement en temps-réel (sans latence) de grands ensemble de données : j’ai nommé la synthèse d’environnements graphiques 3D pour le jeu vidéo. Les grands ensemble de données, ce sont les pixels de l’écran dont il faut calculer chaque valeur RGB en fonction de la position du joueur dans le monde virtuel.

Pour réaliser ce traitement, il faut beaucoup de cœurs. Les cœurs sont des unités élémentaires de calcul, avoir un processeur à 2 cœurs est (un peu) comme avoir 2 processeurs. Votre processeur en a probablement 2, 3, 4, mais une carte graphique en a au moins 1024. Ça fait 1024 opérations qu’on peut traiter en parallèle, en même temps. Jusque dans les années 2000, on pensait que plus un processeur était rapide, mieux c’était. Puis on a découvert que c’est plus efficace et moins coûteux d’avoir plus de cœurs que plus de GHz. D’ailleurs, une carte graphique a une fréquence de calcul beaucoup plus faible qu’un processeur.

Petit à petit, on s’est dit que ce processeur lourdement parallélisable pourrait être utilisé en temps-différé pour d’autres usages que le jeu, mais toujours pour du traitement de pixels. L’avantage du temps-différé, c’est qu’on peut optimiser plus de choses.

OpenCL est donc un « langage » qui permet aux développeurs d’envoyer n’importe quel calcul parallélisable effectué sur des données découpables à une carte graphique (entre autres). Il a l’immense avantage d’être portable, c’est à dire qu’il n’y a besoin d’aucune modification du code pour que le programme fonctionne peu importe le système d’exploitation et la marque de la carte graphique. Cependant, Apple, qui a pourtant inventé l’OpenCL il y a 10 ans, a décidé d’en abandonner le support sous Mac OS après la version 10.14, au profil de Metal.

darktable : OpenCL inclus, mais pas à tous les étages

Pour faire simple, OpenCL fonctionne de la façon suivante :

  1. l’image est lue par darktable sur le disque dur
  2. elle est stockée dans la mémoire vive de l’ordinateur (RAM)
  3. le processeur prépare l’image dans la RAM
  4. l’image est copiée de la RAM vers la mémoire vive de la carte graphique (vRAM)
  5. la carte graphique calcule le contenu des modules
  6. l’image est recopiée de la vRAM vers la RAM
  7. le processeur enregistre  l’image sur le disque dur.

Ça, c’est quand toute la pile de modules utilisés fonctionne en OpenCL : l’image reste sur la vRAM pendant toute la chaîne de calcul, et n’est renvoyée à la RAM qu’à la toute fin.

Et ça n’arrive jamais, parce que tous les modules de darktable n’ont pas une version OpenCL. À chaque module qui travaille sur processeur, il faut ré-expédier l’image sur la RAM, et la ré-importer ensuite sur la vRAM, ce qui prend du temps et cause des latences. À la fin, c’est 10-20% du temps de traitement qui est perdu dans ces allers-retours (qu’on appelle entrées/sorties, en anglais : input/output ou simplement I/O).

Voici la liste exhaustive des modules qui ne fonctionnent pas en OpenCL (à la version 2.6 de darktable):

  • dématriçage Amaze
  • pixels chauds
  • suppression de la brume
  • profil de couleur d’entrée et de sortie (seulement si Little CMS est actif ou si votre profil ICC contient une LUT/table de correspondance)
  • homogénéisation
  • filigrane
  • grain
  • correction des taches
  • réduction du bruit RAW
  • réduction du bruit (bilatéral)
  • mappage des tonalités
  • contraste de couleur
  • cadre décoratif
  • zones
  • suppression des franges
  • effet Orton

Ceux qui font très mal, ici, sont les modules de débruitage et de dématriçage (au moins la moitié du temps d’exécution à eux 3) puisqu’ils arrivent entourés par des modules OpenCL. Donc, en plus d’être lourds (de par leurs algorithmes), ils ajoutent des latences I/O. Et, pour couronner le tout, ce sont aussi les plus difficiles à porter sous OpenCL.

Là où ça fait du bien

En revanche, sur certains modules très lourds, OpenCL peut multiplier les performances (individuelles) de 2 à 20. C’est notamment le cas pour :

  • égaliseur
  • contraste local
  • réduction du bruit (profil)
  • réduction du bruit (non-local)
  • dématriçage PPG
  • tous les modes de fusion de masques (dessinés, paramétriques, etc.)

Certains modules deviennent même difficilement utilisables sans :

  • liquéfier
  • retouche (nouveauté dans 2.6)

Enfin, sur certains des modules, OpenCL permet de passer de « pas grand chose » à « presque rien » (quelques millisecondes sur une image de 36 Mpix) :

  • orientation
  • recadrer et pivoter
  • reconstruction des couleurs
  • vibrance
  • balance couleur
  • coloriser
  • mappage couleurs
  • velvia
  • virage partiel
  • vignetage
  • zones de couleurs

Bilan

Il est très difficile de dire si OpenCL vaut la peine dans un cas précis ou pas. En effet, celà dépend :

  • du processeur (certains sont meilleurs que la carte graphique)
  • de la carte graphique
  • de la version des pilotes utilisés
  • du système d’exploitation/du noyau Linux
  • de la fréquence du BUS de la mémoire vive
  • de la taille des photos retouchées
  • des modules les plus souvent utilisés.

Il est certain que pour un professionnel, ou même pour un amateur sérieux, et surtout avec les capteurs actuels à plus de 40 Mpix, la carte graphique va apporter confort et efficacité. D’autant plus que le futur de la photo est du côté des intelligences artificielles, qui ont besoin du parallélisme pour fonctionner dans des délais raisonnables.

En moyenne, en additionnant les pertes par latences I/O et l’amélioration apportée individuellement aux modules, il faut s’attendre à un gain global de temps de l’ordre de 2 à 3 à l’exportation et à l’utilisation. C’est surtout ceux qui travaillent à hauts ISO régulièrement qui vont apprécier l’OpenCL sur les modules de débruitage compatibles.

En cas de ressources matérielles limitées, tenez vous à distance des modules suivants (dans l’ordre du pire au moins pire) :

  • dématriçage Amaze (utilisez PPG)
  • grain
  • réduction du bruit (bilatéral)
  • réduction du bruit RAW
  • suppression de la brume (reste à voir si je vais être capable de le porter sous OpenCL).

De plus, le nouveau module de balance des couleurs que je viens de coder (et qui vient d’être intégré à la branche officielle de darktable) regroupe à lui seul les fonctionnalités des modules :

  • contraste, luminosité, saturation
  • virage partiel
  • courbe des tonalités / courbes de base
  • niveaux

tout en étant 2 à 12 fois plus rapide (suivant les réglages) que ces 5 modules combinés (en OpenCL), et pour un résultat souvent meilleur et plus facile à réaliser.

darktable est modulaire, pour le meilleur et pour le pire, mais le choix des modules vous permet aussi de choisir le niveau de lourdeur algorithmique désiré par rapport au résultat attendu.

darktable 2.6 : nouvelles du développement et avant-premières

Pour faire suite à mon précédent article, une première présentation de 2 nouveaux modules que j’ai développé et de la refonte de l’interface que je propose pour darktable.

Liens :

Qu’est-ce qu’une photo bien exposée ?

La question a été posée aujourd’hui sur le forum, et elle est légitime, car on endend tout et son contraire. Et la réponse n’est pas simple.

Poser les bases

Avant d’y répondre, il faut comprendre que l’exposition est une superposition de 3 concepts qui s’appliquent dans cet ordre :

  1. l’intention,
  2. le medium,
  3. l’observateur.

Et on va les détailler dans l’ordre inverse.

L’observateur

L’œil est fait de 2 types de capteurs, qui sont des cellules spécialisées convertissant un flux électromagnétique en signal électrique transmis au cerveau par le nerf optique :

  1. les bâtonnets, qui sont sensibles à la luminosité, et s’activent en faible lumière,
  2. les cônes, qui sont sensibles soit à la lumière verte, soit soit à la lumière rouge, soit à la lumière bleue, et s’activent en haute lumière. D’où le RGB des capteurs photos.

Cependant, ce que le cerveau analyse, ce n’est pas de la lumière, mais des contrastes, c’est à dire des écarts relatifs de luminance. Du coup, en l’absence de contraste suffisant, on ne « voit » rien, ou plus exactement on voit sans discerner.

L’homme invisible (Le père Noël est une ordure)

Une photo bien exposée doit tenir compte de ce paramètre, et présenter un contraste suffisant pour qu’on puisse, physiologiquement, discerner ce qui s’y passe.

De plus, la réponse de l’œil (en fait, du cerveau) est logarithmique, et non linéaire. Ça veut dire que le cerveau amplifie basses lumières, donc casse le contraste, et que nous ne voyons jamais de noir, mais seulement un gris très profond. On va y revenir.

Le medium

En latin, le medium c’est ce qui se trouve au milieu. On utilise principalement 4 media en photographie :

  1. Deux media de capture :
    1. l’émulsion gélatino-argentique, c’est la bonne vieille pellicule,
    2. le capteur semiconducteur photo-électrique, c’est ce qu’on a dans un appareil photo numérique
  2. Deux media de restitution :
    1. l’écran, le plus souvent à cristaux liquides ou à diodes électro-luminescentes (un semiconducteur qui fait exactement l’inverse du capteur),
    2. le papier, encré ou imbibé de pigments photosensibles.

Chacun de ces media a une plage dynamique caractéristique, c’est à dire une amplitude de luminance qu’il peut restituer.

Sur les media de capture, on mesure la plage dynamique en divisant la luminosité maximale admissible du medium par la luminosité minimale détectable, puis en prenant le logarithme en base 2 de ce rapport. Typiquement, en argentique, suivant les développeurs et les pellicules utilisées, la plage dynamique se situe entre 8 à 16 EV (plage de la pellicule obtenue après numérisation en HDR, ce n’est pas ce que vous obtiendrez sous l’agrandisseur optique). En numérique, suivant la sensibilité, pour de vieux appareils, on tourne à 6-8 EV, et pour des appareils récents, entre 10 et 15 EV.

Numérique et argentique ont deux comportements différents vis à vis des valeurs de luminance qui sortent de leur plage dynamique :

  • le numérique sature par la droite (quand vous regardez l’histogramme), c’est à dire que tout ce qui a une luminosité supérieure à ce qu’il peut tolérer est « vu » par le capteur comme égal à la luminosité maximale et donc on perd des détails dans les hautes lumières. En revanche, il peut enregistrer très loin dans les basses lumières, c’est juste qu’à un moment donné, l’intensité du bruit va être supérieure à celle de signal lumineux.
  • l’argentique sature par la gauche, c’est à dire que tout ce qui a une luminosité inférieure à son seuil de détection est « vu » par le film comme égal à son seuil de détection, donc on perd les détails dans les basses lumières. En revanche, il peut enregistrer loin vers les hautes lumières, c’est juste que les couleurs seront alors très délavées.

Conséquemment, on « expose à droite » en numérique pour caler les hautes lumières juste avant la saturation haute, et on « expose à gauche » en argentique, pour caler les basses lumières juste avant la saturation basse. Mais on ne fait cela que lorsque la plage dynamique de la scène est supérieure ou environ égale à celle du medium, de façon à l’utiliser au mieux. Autrement, on expose au milieu. Exposer à droite ou à gauche produit une exposition fausse qui va décaler le gris et implique, au moment du traitement, de replacer le gris au milieu de l’histogramme (d’une façon ou d’une autre).

Sur les media de restitution, on mesure cette plage dynamique de deux façons :

  • Par le rapport entre la luminance du blanc et la luminance du noir, par exemple 3000:1. C’est typique pour les écrans, rétro-éclairés, où la plage dynamique (improprement appelée contraste, la plupart du temps) dépend surtout de la luminosité du blanc.
  • Par la luminosité relative du point noir, en logarithme décimal. C’est la valeur appelée Dmax (densité maximale) que donnent les fabricants de papier photo (haut de gamme). Pour les tirages, éclairés par l’avant, la luminosité du blanc est limité par l’éclairage (et la réflectance du papier), sur lequel le fabricant ne peut pas grand chose, donc la plage dynamique dépend surtout de la profondeur du noir, c’est à dire de la façon dont les pigments réagissent avec le papier.

Un papier photochimique argentique brillant a une valeur Dmax qui tourne autour de 2.3, soit un « contraste » (encore une fois, ici c’est un abus de langage) équivalent de 200:1, traduit en métrique écran, ou une plage dynamique équivalente de 7.6 EV, traduit en métrique capteur. Pour un papier couleur et pour les papiers jet-d’encre, le Dmax tourne autour de 1.7, soit un « contraste » équivalent de 50:1, ou une plage dynamique équivalente de 5.6 EV.

Sorti d’usine, un écran tape à minimum 3000:1, soit un Dmax équivalent de 3.5 ou une plage dynamique (optique) équivalente de 11.6 EV. Voilà pourquoi le passage de l’écran au papier donne souvent de mauvaises surprises. Pour cette raison, vous devez étalonner votre écran au contraste de 285:1 (Dmax équivalent de 2.45, plage dynamique équivalente de 8.15 EV), pour suivre la norme ISO 12647, relative au traitement pré-presse.

Ceci dit, en réalité, comme les signaux RGB qui arrivent à l’écran sont généralement encodés sur 8 bits, la plage dynamique logique de l’écran est 8 EV. Ça veut dire que si la plage dynamique optique est supérieur à la plage dynamique logique, vous postérisez. Donc, à moins d’avoir un écran 10 bits, avoir un contraste supérieur à 300:1 est le meilleur moyen de bousiller la précision colorimétrique.

On a dit plus haut que l’œil et le cerveau cassent le contraste de façon logarithmique, c’est à dire rapprochent la luminosité des tons sombres de celle des tons clairs (le vrai contraste). Qualitativement, ça veut dire que pour voir un gris deux fois plus foncé qu’un gris de référence, on ne peut pas simplement multiplier la concentration de pigments noir par deux, il faut réaliser une correction du gamma avant, et probablement multiplier la concentration par 4. Le problème, c’est que cette correction gamma, si elle fait gagner en lisibilité (puisqu’elle renforce le contraste), fait perdre en plage dynamique. Jugez vous-même :

https://en.wikipedia.org/wiki/Gamma_correction#/media/File:GammaCorrection_demo.jpg

Plus on casse le contraste, plus on fait apparaître de détails, mais plus on perd en clarté. Plus on rajoute de contraste, plus on gagne en clarté, mais plus on bouche les ombres.

Comment on fait, alors ? Les maths ne sont ici d’aucun secours, c’est le photographe qui, sur un écran étalonné, doit ajuster à l’œil suivant son intention.

L’intention

L’intention est le choix artistique du photographe. On peut vouloir une image sombre, pour une ambiance… sombre. On peut vouloir une image claire, pour une ambiance plus optimiste. On peut vouloir un grand contraste, pour accentuer le modelé ou pour un effet dramatique. On peut vouloir un faible contraste, pour accentuer la douceur et la sensation d’intimité.

Le problème, c’est que cette intention doit faire des compromis avec le medium et l’observateur.

Au moment de la capture, exposer le gris ailleurs qu’au centre de l’histogramme va fausser toutes les couleurs. Si l’on veut une photo sombre, il vaut mieux exposer normalement à la prise de vue, et assombrir au moment du traitement, pour conserver des couleurs exactes.

Parfois, on n’a pas le choix d’exposer à gauche ou à droite, limité par le medium de capture. Il faut alors se souvenir de rétablir la densité du gris au moment du traitement (et de corriger les couleurs), pour que l’observateur ait un contraste également réparti entre les hautes et les basses lumières.

Parfois, on veut un contraste dramatique. Mais là, il faut se souvenir qu’un fort contraste sur un medium à faible plage dynamique a pour effet de comprimer les détails aux extrémités de la plage dynamique. Mais en même temps, un faible contraste nuit à la lisibilité (la clarté).

Ensuite, tout ce qui est sombre sur un écran (rétro-éclairé) devient plus difficile à lire sur un tirage papier (plus sombre par nature), car le contraste local dépend… du contraste global ET de la plage dynamique.

Parenthèse : contraste ou plage dynamique ?

La plage dynamique, c’est votre marge de manœuvre, en tant qu’utilisateur : c’est la plage de luminances autorisées par le médium.

Le contraste, c’est l’écart relatif entre les hautes et les basses lumières. Ça dépend de la lumière sur la scène initiale (à la prise de vue), et de votre retouche. La façon classique de rajouter du contraste, c’est avec une courbe en S :

On amplifie les hautes lumières, on atténue les basses lumières : on a rajouté du contraste.

À l’inverse, pour retirer du contraste, on inverse le S :finir

Un contraste idéalement ajusté fait en sorte que :

  • on utilise 100 % du la plage dynamique du medium, pas plus, pas moins,
  • le gris est environ à 50 % de luminance,
  • on corrige des luminances autour du gris, mais on ne touche pas au gris (sur les courbes ci-dessus, le gris sert de pivot : on fait tourner les branches du S autour, mais il n’est pas affecté)
  • la correction est presque linéaire (au moins au milieu), ce qui limite la compression du contraste local aux bords de la plage dynamique (les lobes aux extrémités de la courbe en S vont diluer le contraste local dans luminances extrêmes et faire perdre des détails).

Évidemment, le contraste idéal est comme le Code des pirates, c’est plus un guide qu’une loi.

Synthèse

Vous l’avez compris, c’est l’enfer. À chaque fois que vous voulez habiller Paul, il faut déshabiller Jean. Comment on expose « bien » une photo ?

À la prise de vue

Les détails importants doivent être aussi proches que possible de 50 % de luminosité, soit au centre de l’histogramme. Si la scène a une forte plage dynamique, il faut alors trouver un compromis en décalant le gris pour sauver la gauche de l’histogramme (en argentique) ou la droite de l’histogramme (en numérique). Souvenez-vous que la prévisualisation à l’écran de l’appareil photo est un fichier JPG traité par l’appareil, pas le fichier RAW que vous avez en vrai. Il est plus prudent de mesurer la plage dynamique et le point gris avec un posemètre/flashmètre.

Lors de la retouche

Il faut remapper la plage dynamique, avant l’ajustement des couleurs, de sorte que le blanc pur soit à environ 96 % de luminance, le noir pur à 18 %, le gris moyen à 50 %, tout ça avec une balance des blancs parfaitement neutre. Une fois que c’est fait, vous appliquez le profil de correction des couleurs d’entrée. Ceci est beaucoup plus facile si vous avez une photo référence avec une mire d’étalonnage photographiée dans les conditions d’éclairage des autres photos.

Ensuite, vous pouvez ajuster les couleurs, mais il faut surtout rétablir le contraste et corriger le gamma pour la vision humaine, en tenant compte de la plage dynamique du medium de destination. Si votre écran et votre imprimante sont étalonnés correctement, vous pouvez vous en remettre à votre œil. Sinon, vous êtes en slip dans la forêt. Et dans la forêt, il y a des moustiques, des tiques, et maintenant des loups.

Outils disponibles

Le traitement d’image se base sur trois disciplines :

  • la physique, plus précisément l’optique et l’électromagnétisme,
  • les maths, et plus précisément le traitement de signal,
  • les arts graphiques.

La physique vous dit ce qu’il se passe, les maths vous donnent un langage pour l’exprimer, et l’art… c’est votre objectif. Les maths peuvent donc vous donner quelques indications pour essayer de comprendre ce qui se passe.

Même s’il ne faut pas le prendre comme une vérité absolue, c’est l’histogramme qui peut généralement vous aider. Habituellement, il devrait ressembler à une gaussienne centrée en 50 %.

Évidemment, si vous faites du low-key ou high-key, ça ne s’applique plus. Mais, ça peut encore vous alerter que quelque-chose va mal si vous voyez des pics aux bords :

De l’importance de l’étalonnage

L’étalonnage, mathématiquement, c’est une transformation qui permet de convertir l’information d’un espace à un autre. Chaque medium a un comportement spécial : il amplifie les luminances (ou pas), il a des couleurs plus ou moins saturées et une plage dynamique propre. On va donc lui attribuer un espace, avec des coordonnées bien à lui, une taille spécifique etc.

Pour convertir d’un espace à un autre, donc d’un médium imparfait à un autre, on passe par un espace symbolique intermédiaire, linéaire, (presque) parfait et idéal : le Lab. Cet espace est composé de toutes les couleurs visibles, et indépendant des media. Il sert donc de « dénominateur commun » à tout la chaîne graphique. Lors de ces conversions, on ajuste le gamma, la plage dynamique, le gamut, etc. La conversion d’espace, c’est simplement changer de référentiel, et ajuster les coordonnées de l’espace source pour les traduire dans l’espace cible.

L’étalonnage de l’écran, c’est comme votre clé d’accès à cet espace neutre et parfait, qui n’existe pas hors du monde magique des maths et de votre ordinateur. C’est ce qui permet de traduire cet espace invisible en quelque chose de visible.

Du coup, si vous n’étalonnez pas votre écran, vous n’avez pas la moindre idée de ce que vous voyez. Je lis souvent des beaufs de la photo qui expliquent qu’ils ont de très bons résultats sans étalonnage, et que de toute façon, les gens qui vont voir les photos n’ont pas d’écran étalonné.

C’est complètement idiot. Le principe de l’étalonnage n’est pas de s’assurer de ce que le client va voir, mais de vous assurer de la cohérence de votre chaîne de traitement, du début jusqu’à la fin, ainsi que d’obtenir des résultat reproductibles, prévisibles et surtout, représentatifs de la réalité des données que vous manipulez. C’est surtout capital quand vous échangez des données avec quelqu’un d’autre (un imprimeur par exemple), car il ne connaît pas votre intention, il n’a que des données.

Et accessoirement, ça fait gagner beaucoup de temps et de confort.

Récupérer la plage dynamique, prise 2

De l’eau a coulé depuis mon précédent article sur la plage dynamique.

Depuis 2 semaines, j’ai appris à programmer en C, incluant l’OpenCL et les instructions SSE2. J’ai travaillé à temps plein pour comprendre comment darktable marchait, à l’intérieur, et vous/me/nous développer deux nouveaux modes pour des modules déjà existants, qui vont grandement simplifier la retouche et donner de meilleurs résultats. Le nouveau tutoriel aura passablement moins d’étapes.

1. Récupérer le contraste

Vous vous souvenez comme on a superposé les modules « correction du profil d’entrée », « courbes de base » et l’exposition ? Oubliez tout ça.

Dans le module « correction du profil d’entrée », j’ai ajouté un nouveau mode : logarithmique. Ce que fait cet algorithme est mathématiquement équivalent aux profils neutres N-Log et S-Log qui sont utilisés dans les encodeurs vidéo des réflexs modernes afin de préserver tous les détails dans les basses lumières. Ici, on va s’en servir comme de compression de la plage dynamique :

Notez que l’interface n’est pas encore traduite et que, n’en déplaise à certains, on programme en anglais. La première étape consiste à régler le gris moyen de la scène (input middle grey). Vous êtes feignant ? Moi aussi, c’est pouquoi vous pouvez simplement utiliser la pipette pour sélectionner la tonalité correspondante. Celle-ce sera ensuite redirigée vers le milieu de l’histogramme par l’algorithme. Si vous sélectionnez toute l’image, c’est la luminosité moyenne qui est retenue.

Ensuite, il faut régler l’intensité du noir (output black exposure), en indice de lumination (EV en anglais) à partir du point gris (qui est considéré à 0 EV). Idem, ça se fait en 2 secondes grâce à la pipette, en allant choisir la zone la plus sombre de l’image. Ici, je mets le noir à 4.18 EV à gauche du gris.

Dernière étape, la plage dynamique (dynamic range). Si vous sélectionnez toute l’image avec la pipette, il va simplement pendre la luminosité maximale et considérer que ce sera l’extrémité droite de la plage dynamique.

Et paf ! L’histogramme est à peu près centré, rien n’est brûlé. Il reste le buisson, derrière, qui est un peu bouché. Il suffit de le déboucher en diminuant le point noir dans le module exposition :

Là, vous allez me dire « c’est fade et désaturé ». Oui, mais c’est une base de travail. Et c’est là qu’entre en jeu mon deuxième module.

2. La couleur

La balance couleur a un nouveau mode, « slope – offset – power ». Ce mode est standard et respecte la norme de l’Association Américaine des Cinéastes. Comme tout standard, son objectif est de pouvoir échanger des réglages et des paramètres d’un logiciel à l’autre. Blender et la plupart des logiciels d’édition vidéo en sont déjà munis. Ce mode s’ajoute au « lift – gamma – gain » qui travaille dans un espace sRGB corrigé en gamma, ce qui pose plein de problèmes et de limites sur lesquelles je ne vais pas m’étendre. Je n’ai jamais eu de bon résultat avec ce module. Ici, on travaille dans l’espace Prophoto RGB linéaire.

On commence par ajouter un peu de saturation sur le master :

Ensuite, on va rajouter du contraste. D’abord, on va choisir le pivot (fulcrum) qui est la tonalité de gris qui n’est pas affectée par l’addition de contraste. Au dessus de cette tonalité, on ajoute plus de lumière, en dessous, on en retire. Encore une fois, il y a une pipette. On va choisir la tonalité du visage, puisque c’est le sujet de la photo :

Pas mal, non ? Beaucoup de gens s’arrêteront là. Mais on peut aller plus loin, et se pencher sur la gradation de teinte. La gradation, en anglais color-grading, est une opération qui consiste à ajuster les couleurs séparément pour, soit supprimer sélectivement les dominantes, soit en rajouter pour donner une ambiance à la photo (au cinéma, on met le méchant en vert, la pinup en magenta, la maman en orangé, et le psychopathe en bleu). Ici, je trouve qu’on manque de magenta et que le visage est trop vert.

Attention, les niveaux doivent se régler dans un ordre précis pour avoir un bon résultat : on règle d’abord le slope, ensuite l’offset, puis en dernier, le power (qui est l’équivalent du gamma). J’ai été sympa, si vous ne vous souvenez plus de l’ordre, il est rappelé dans le nom du mode (slope / offset / power) :

Là dessus, un petit coup de courbes des tonalités, pour remettre un petit boost de contraste dans l’espace Lab, zones de couleurs pour la teinte, contraste local, (similaire à ce que j’ai montré dans mon précédent article), et voilà :

Pour comparaison, la version avec la méthode précédente :

3. Bénéfices :

Premièrement, en terme de workflow, c’est très rapide, tout est automatisé au maximum avec des pipettes qui mesurent ce que vous avez besoin sans avoir à gratter les curseurs pendant des heures. C’est rapide, à condition de suivre la méthode dans laquelle ça a été pensé. Le module de correction du profil d’entrée se voit ajouter les modes de fusion classiques des autres modules, ce qui permet aussi d’utiliser la fusion paramétrique pour plus de souplesse.

Ensuite, le résultat est largement meilleur, en terme de luminosité, de rendu général, de couleur etc. On a ensuite un contrôle bien plus fin sur la couleur, ce qui rend – enfin ! – la retouche de couleur agréable et professionnelle sous darktable. J’attendais ça depuis longtemps.

Pour finir, j’ai codé des versions OpenCL de ces deux modules pour que ça soit rapide. Le code C de base est optimisé aussi, le tout est assez performant en terme de calcul.

4. Limites

La balance des couleurs  a toujours ces affreux curseurs RGB, quand la totalité des logiciels qui implémentent cette approche utilisent des roues chromatiques, beaucoup plus simples à contrôler. Le code pour les roues chromatiques est inclus, mais commenté, dans le code source du module, il semble qu’on ne soit pas très loin de le faire marcher, mais je n’ai pas eu de nouvelles du développeur précédent.

5. Et maintentant ?

Les fonctionnalités ont été soumises aux développeurs, et sont en attente de révision. Un d’entre eux s’est déjà montré hostile au profil logarithmique dans ce module précisément (pas en général). Rien ne garantit que ça soit un jour intégré au code source, mais si vous vouler les tester, vous pouvez compiler ma branche.

Attention, il se peut que le code change dans un futur proche, et que vos retouches soient alors invalides. Sauvegardez vos bases de données et travaillez sur des copies virtuelles de vos photos.

Mais tous les tests et les retours sont les bienvenus.

Mise à jour : j’ai commencé à rééditer des photos de cet été avec ces modules

Sortie de darktable (ancienne version ) + retouche Photoshop
Sortie directe de darktable (nouvelle version avec nouveaux modules)
sortie de darktable (ancienne version)
sortie de darktable (nouvelle version avec nouveaux modules)
sortie de darktable (version précédente)
sortie de darktable (nouvelle version avec nouveaux modules)