Les espaces colorimétriques ACES en 3d / 2d

  • Auteur/autrice de la publication :
  • Post category:lookdev
  • Commentaires de la publication :0 commentaire

Pour ceux qui ont connu le passage un peu “bidouillage” en workflow linéaire…eh bien rebelote !

Pour les autres, bienvenu au club, encore que le passage d’un workflow classique à un workflow ACES est carrément mieux implémenté, et du coup l’idée était ici de faire un petit récap résumant les infos glannées au fin fond de forums obscurs (ou pas), après possible que des erreurs traînent dans le tas, en tout cas si vous en voyez n’hésitez pas à me le dire que je mette ça à jour !

Alors ACES, c’est quoi, pour qui et surtout avec quels bénéfices ? C’est ce que nous allons voir !

Sommaire

  • ACES
  • PRINCIPE
  • COMMENT çA MARCHE
    • MAYA/ARNOLD
    • NUKE
    • BLENDER
    • RENDERMAN
    • MARI
    • AFTER EFFECTS
    • UNREAL ENGINE
    • SUBSTANCE
    • UNITY
  • SOurces et trucs intéressants

ACES ?

ACES, c’est l’acronyme de Academy Color Encoding System, et comme son nom l’indique c’est un système d’encodage des couleurs développé par l’Academy of Motion Pictures Arts and Sciences (qui organise notamment les oscars, et qui regroupe tout un tas de gens liés au cinéma).L’idée sous-jacente était d’uniformiser tout le bordel lié aux différents espaces colorimétriques afin que films, photos, images 3d et 2d, quel que soit le médium de fin (cinéma,télé, jeu vidéo etc) puissent cohabiter joyeusement et durablement. Joyeusement car au fil des évolutions matérielles (caméras, écrans,etc) et logicielles chacun s’était dit que ce serait super chouette de bosser dans un espace colorimétrique propriétaire et changent régulièrement. Durablement car vu que les espaces colorimétriques sont propriétaires, bah ça risque d’être galère d’avoir les sources nécessaires si la boîte derrière le format propriétaire fait faillite ou ne les archive pas correctement et qu’on veut sortir un remaster quelques années plus tard. Du coup, l’Academy s’est dit (‘fin surtout les studios de VFX qui se trouvent en bout de chaîne à devoir compositer des tas de sources avec des espaces colorimétriques différents) , hop ça suffit, ça devient la grosse galère, on n’a qu’à créer un espace colorimétrique commun.

PRINCIPE

Quand j’ai commencé la 3d début 2000 je bossais avec Maya / Mental Ray et je ne me posais pas trop de questions sur l’espace colorimétrique dans lequel j’importais mes textures, faisais mon rendu ou compositais tout ça, par contre j’avais vite remarqué que les lights avaient tendance à cramer très vite les objets proches et perdre très vite en intensité, mais je mettais ça sur le compte du quadratic decay.

Le problème provenait à l’époque de l’inadéquation de la fonction de transfert de courbe (notre ami le gamma). Pour résumer, nos yeux perçoivent mieux les différences de teintes dans les tons sombres que dans les tons clairs, du coup, hop, pourquoi ne pas optimiser en utilisant une fonction qui nous permet de “compresser” les infos en laissant de côté celles que l’oeil humain perçoit moins bien. Du coup on gagne en confort visuel et au passage on a des fichiers plus légers et plus rapides à traiter. Une caméra filme par exemple en linéaire (ou log, ou tout espace propriétaire) et le sRGB passe derrière pour lui appliquer le gamma (la fonction de transfert) et l’afficher. Forcément l’écran ou la caméra n’ont pas de biais perceptif comme l’oeil humain et bossent donc en linéaire.

 

courbe sRGB
hop, en pointillés en linéaire, en rouge notre fonction sRGB

Du coup, bah on avait des zones surexposées super vite, et une intensité qui diminuait trop vite. Là est arrivé le workflow “linéaire” pour pallier à ces problèmes, l’idée c’était de “contrecarrer” la fonction de transfert de courbe (le gamma) intégrée dans les sRGB, et de calculer notre image avec une courbe linéaire et ensuite de ré-appliquer la courbe pour l’affichage. Un tone mapping est également appliqué en bout de chaîne (en effet on va se retrouver avec des valeurs de couleurs qui sortent de l’intervalle supporté par nos écrans, le tone mapping va dicter l’adaptation de celles-ci)

Et c’est bien mieux ! Très pratique, on calcule avec une courbe et on affiche avec une autre, pour garantir des calculs plus proches de la réalité, et un affichage adapté. 

Il y a également un problème de gamut (l’espace de phase des couleurs que le périphérique peut reproduire) employé. Le plus courant sur écran c’est le sRGB, défini par HP et Microsoft, qui se sont basé sur les types d’écran les plus communs et qui du coup sert à faire en sorte que les couleurs soient suffisamment bien représentées sur la grande majorité des écrans. Le problème de ce gamut, bah c’est qu’il est très petit, comme vous pouvez le voir ci-dessous, il y a pleins de pauvres couleurs qui sont laissées pour compte, ce qui nous arrange pas, à nous qui bossons dans le lookdev.

gamut sRGB
il manque pleins de couleurs ! (le diagramme représente les couleurs perceptibles par l'oeil humain, le triangle l'espace sRGB)

C’est là qu’arrivent ACES et ses espaces colorimétriques

espace ACE
ah bah oui, c'est mieux là (ACES 2065-1)

Bon en fait c’est mieux mais…c’est trop ! les résultats son trop saturés. Et c’est là qu’arrive le ACEScg

ACE CG
Salut ! Je suis le ACEScg !
  • ACES, c’est en fait plusieurs espaces colorimétriques, voués à englober tous les cas de figure d’une prod (film/tv, jeux vidéo  etc). On va retrouver :
  • ACES2065-1, la version complète, dédiée à l’archivage et aux master
  • ACEScc : cc pour “color correction”, donc l’espace pour le grading et la retouche colorimètrique
  • ACESproxy : pour la préviz sur site et l’affichage sur site (en vidéo/film)
  • ACEScg : pour le rendu 3d

COMMENT çA MARCHE ?

Déjà faut télécharger pack OpenColorIO (OCIO) pour avoir les espaces colorimétriques dans son appli favorite ici.

Après bah, forcément en fonction des softs, ça change  !

Pour la partie display dans les softs, j’ai mis en sRGB, après ça dépend de vos écrans, genre si vous avez un écran HDR, rec2020 pour de la télé UHDTV, etc.

 

En règle générale on utilisera l’espace ACES2065-1 pour le stockage et l’échange, et on convertira pour travailler à l’intérieur de nos softs en ACEScg (‘fin c’est la façon dont s’est conçu pour fonctionner, à la base c’est pour le travail entre des entités séparées qui se feront passer les master en ACES2065-1). En terme de format de fichier, c’est en .EXR 16-bit non compressé.

hop, on clique en bas à droite sur l'icône des préférences...
...puis sur l'icône de dossier dans la partie "Color Management" ...




...on va dans le dossier où on a téléchargé notre OCIO ace et on lui linke le config.ocio correspondant à la version qui nous intéresse (dans notre cas la plus récente, 1.2)...
...et tant qu'à y être on clique sur "use OCIO Configuration" pour l'utiliser,ce qui nous passe l'affichage en sRGB et le rendu en ACEcg..
...et maintenant dans nodes de texture partie "Color Space" on va pouvoir définir l'espace colorimétrique de notre texture.

Alors c’est chouette mais on va avoir tout un tas d’espaces colorimètriques, le ACE a pour vocation d’unifier la prod, du coup on va trouver les cas de figures d’input qu’on peut trouver. Pour l’usage courant en 3d, on va utiliser :

  • ACES – ACES2065-1 pour les fichiers qui ont été archivés en… ACES – ACES2065-1
  • Utility – sRGB-Texture pour les fichiers en sRGB
  • Utility – Linear-sRGB pour les fichiers en sRGB mais linéaire (genre les hdri, exr, ou ce que vous sortez en linéaire de Mari,etc)
  • Utility – Linear-rec709 pour les vidéos (mais ça arrive pas très souvent de mettre des vidéos dans Maya)
  • Utility – Raw pour les maps scalaires, c’est à dire tout ce qui n’est pas infos de couleurs mais d’intensité, pour le coup on ne veut pas leur appliquer d’espace colorimétrique, c’est le cas des maps de Displacement, Roughness, les masques etc
  • Utility-Rec.709-Camera pour les images sRGB qui vont servir de MattePainting
 
Après, idéalement en terme de wokflow il faudrait lui donner des sources déjà dans l’espace colorimétrique ACES pour que ce soit plus “propre”.
 
 
Ah oui, faisez gaffe aux.tx ! (il faut lire le faisez gaffe avec la voix d’Alain Chabat sinon ça ne marche pas). Si vous avez les options par défaut, quand vous lancez un rendu avec Arnold il va convertir votre fichier image en .tx en fonction de l’espace colorimétrique, si vous le changez après avoir déjà lancé un rendu vérifiez qu’il le ré écrive dans le bon espace colorimétrique (vous pouvez aller checker tout ça dans en allant dans le menu Arnold/utilities/Tx Manager)
Hop, on va dans les réglages du projet, onglet "Color"...
...on passe le color management en OCIO, le OCIO config en custom et on va chercher notre config.ocio...
...et dans nos nodes de Read & Write on sélectionne les espaces colorimétriques d'entrée et de sortie (dans mon cas un rendu sorti de Maya en ACEScg, et j'enregistre en sRGB pour  mon écran, ça peut être du hdr pour un moniteur hdr, rec.2020 pour une télé HDTV, ACES2065-1 pour de l'archivage etc.)

 

 

 

On va lancer Blender avec un fichier .bat qui va lui linker le fichier config.ocio
 
hop, on crée un nouveau document texte...

 

 

...on renomme en .bat (si vous ne voyez pas les extension allez dans vos préférences d'affichage)...

 

 

... et on rajoute le chemin vers le fichier "config.ocio" et blender.exe (code en dessous)

 

 

Set OCIO=I:\OpenColorIO-Configs-feature-aces-1.2-config\OpenColorIO-Configs-feature-aces-1.2-config\aces_1.2\config.ocio

START "BLENDER 2.8.2" "F:\Program Files\Blender Foundation\Blender 2.82\blender.exe"

A personnaliser suivant vos chemins à vous !

Une fois dans Blender, l'espace colorimétrique est automatiquement passé en ACE, sRGB pour le display et ACEcg pour le rendu, pour les nodes de texture on pourra choisir ce qui nous intéresse

 

 

  • ACES – ACES2065-1 pour les fichiers qui ont été archivés en… ACES – ACES2065-1
  • Utility – sRGB-Texture pour les fichiers en sRGB
  • Utility – Linear-sRGB pour les fichiers en sRGB mais linéaire (genre les hdri, exr, ou ce que vous sortez en linéaire de Mari,etc)
  • Utility – Linear-rec709 pour les vidéos (mais ça arrive pas très souvent de mettre des vidéos dans Maya)
  • Utility – Raw pour les maps scalaires, c’est à dire tout ce qui n’est pas infos de couleurs mais d’intensité, pour le coup on ne veut pas leur appliquer d’espace colorimétrique, c’est le cas des maps de Displacement, Roughness, les masques etc

 

Après, idéalement en terme de wokflow il faudrait lui donner des sources déjà dans l’espace colorimétrique ACE pour que ce soit plus “propre”.

Ah bah...pas trop supporté pour le moment, le workflow est pour le moment de convertir ses textures en ACEScg avant de les utiliser dans Renderman (que les textures avec des infos de couleur, tout ce qui est scalar (displace,mask, roughness etc) ce n'est pas la peine.

Pour convertir on peut passer par Nuke.

Hop, on importe notre texture, on lui met un OCIO Colorspace et un Write

 

 

On règle Nuke pour bosser en ACES (voir onglet Nuke), dans le read on met l'espace colorimétrique correspondant à notre texture (utility - srgb - texture ou si l'image est en linéaire utility - srgb - linear).

 

Pour le OcioColorSpace , le in c'est l'espace colorimétrique de notre read, et le out ce sera ACES-ACEScg, et le Write sera aussi en ACEScg

hop, on crée un nouveau projet et on va dans l'onglet Color Settings...

 

 

...et on passe le Ocio config en custum, on va chercher notre fichier config.ocio...

 

 

...bon par contre il se loupe un peu sur les configs par défaut, donc on va corriger nos inputs

Alors pour After, on va aller télécharger le plug-in OpenColorIO

On copie le .aex dans le dossier plug-ins d'After Effects

Dans les Project Settings on passe la depth en 32 bits, et le working space en sRGB (si on utilise majoritairement des images,ou Rec709 si c'est de la vidéo...

 

 

...si on importe des importe des EXR,HDR etc, on va aller dans interpret footage et cocher preserve RGB...

 

 

...on pose un calque d'ajustement, on met comme effet Utility / OpenColorIO...

 

 

...en input space utility - srgb - texture (ou rec709 suivant ce qu'on a mis au début, ou si on a un input correspondant à la caméra utilisée) et output space suivant comment va être utilisée la vidéo derrière (ACES2065 pour archivage ou passer à un autre département)

 

 

...pour le rendu, onglet Color Management, on preserve RGB, comme ça on utilise l'espace colorimétrique défini dans le Output Space du OpenColorIO

Depuis la 4.15, on a un filmic tonemapper ACES, pour se "rapprocher" du standard ACES. C'est plutôt à destination des écrans HDR, et les infos pour l'activer se trouvent ici

Pour Substance Painter, on peut juste "émuler" le display ACES, pour cela il faut utiliser une LUT (LookUp Table). 

Si vous voulez créer la votre, la marche à suivre est indiquée ici sur le site de Substance.

Sinon, Brian Leleux en a crée une chouette que vous pouvez retrouver ici.

Cela ne marche que pour l'affichage dans le viewport.

Comme pour Unreal, ça se passe dans la partie tonemapper.

Hop, on va déjà dans les Project Settings, partie Player, on passe le Color Space en Linear...

 

 

...si on ne l'a pas, on va récupérer le Post Processing...

 

 

...on installe le Post Processing...

 

 

...on rajoute un Post-Process Volume sur la cam

 

 

...et dans add effects on rajoute un Color Grading...

 

 

...et dans mode du Tonemapping on passe en ACES

SOURCES ET TRUCS INTERESSANTS

Laisser un commentaire