Partager via


Pipeline d’étalonnage des couleurs d’affichage matériel Windows

Cette rubrique traite de l’étalonnage des couleurs d’affichage à l’aide d’un nouveau pipeline de transformation des couleurs d’affichage GPU pris en charge par Windows 10, version 2004 (20H1) et versions ultérieures. Le pipeline offre une précision des couleurs considérablement améliorée par rapport aux chemins existants, tels que le pipeline de rampe gamma GDI, et ajoute la prise en charge des affichages HDR.

Cette rubrique s’adresse aux fabricants d’affichage et de PC et aux fournisseurs d’étalonnage d’affichage qui souhaitent mieux étalonner les écrans de leurs clients. La plupart des applications Windows n’ont pas besoin de faire quoi que ce soit pour tirer parti du pipeline ; Mais si vous développez des applications gérées par les couleurs, vous voudrez peut-être être conscient du fonctionnement de cette technologie.

Le nouveau pipeline de couleurs est disponible pour n’importe quel affichage si le GPU répond à la configuration système requise. Si l’affichage est HDR ou utilise la gestion automatique des couleurs, il existe d’autres considérations et exigences. qui peut être trouvé dans Utiliser DirectX avec couleur avancée sur les affichages de plage dynamique haute/standard.

Introduction

L’étalonnage des couleurs d’affichage est le processus qui permet de s’assurer qu’un affichage correspond exactement à son espace de couleurs signalé ; par exemple, sRGB ou DCI-P3 D65. En raison de variations dans le processus de fabrication et d’autres sources, un panneau d’affichage individuel peut s’écarter de sa spécification. Une fois qu’un affichage a été étalonné, vos applications et votre contenu peuvent cibler en toute confiance l’espace de couleur de l’affichage sans se soucier de cette variabilité ou de cette inexactitude.

À un niveau élevé, l’étalonnage des couleurs d’affichage implique les étapes suivantes :

  1. Effectuez des mesures optiques de la sortie de couleur réelle d’un affichage lors du rendu d’un ensemble de valeurs de couleur connues.
  2. En fonction des données de mesure, générez une transformation de couleur qui corrige les inexactitudes dans l’affichage et générez des métadonnées qui décrivent le volume de couleurs résultant de l’affichage.
  3. Stockez les données de transformation de couleur et affichez les métadonnées pour une utilisation ultérieure.
  4. Au moment de l’exécution, chargez et appliquez la transformation de couleur au framebuffer d’affichage (valeurs de couleur envoyées à l’affichage) et signalez les métadonnées d’affichage aux applications.

Windows 10, la version 2004 fournit des fonctionnalités améliorées pour les étapes 3 et 4, tandis que les fabricants d’affichage et les fournisseurs d’étalonnage sont responsables des étapes 1 et 2.

Configuration système requise

Le nouveau pipeline de transformation de couleur nécessite un GPU et un pilote d’affichage compatibles. Les architectures GPU prises en charge sont les suivantes :

  • AMD:
    • AMD RX 500 série 400 ou ultérieure
    • Processeurs AMD Ryzen avec Graphics
  • Intel:
    • Intégré : Gpu Intel 10e génération (Ice Lake) ou version ultérieure
    • Discret : Intel DG1 ou version ultérieure
  • NVIDIA GTX 10xx ou version ultérieure (Pascal+)
  • Qualcomm 8CX Gen 3 ou version ultérieure ; 7C Gen 3 ou version ultérieure

Notes

Les chipsets De nom de code Intel Comet Lake (code de modèle à 5 chiffres) ne sont pas pris en charge.

Un pilote Windows Display Driver Model (WDDM) 2.6 ou version ultérieure est nécessaire (publié avec Windows 10, version 1903). Certains fournisseurs de GPU ont besoin d’un pilote plus récent, potentiellement aussi nouveau que WDDM 3.0 (publié avec Windows 11, version 21H2).

Pour plus d’informations sur la façon dont une application peut déterminer si le nouveau pipeline de transformation de couleur est disponible sur un système, consultez Nouvelles API de gestion de profil ICC d’affichage .

Nouveau pipeline de transformation de couleur GPU

Windows 10, la version 2004 expose un pipeline de transformation des couleurs d’affichage accéléré par GPU composé d’une matrice de couleurs gamma linéaire et de 1DLUT. Par rapport au pipeline de rampe gamma existant, il offre une précision, une précision et une prise en charge supérieures pour les affichages de larges gammes de couleurs. En outre, il ajoute la prise en charge de nouvelles technologies telles que les affichages HDR qui utilisent la signalisation BT.2100.

Le pipeline n’est pas directement programmable par les applications, mais il est exposé uniquement via des profils MHC ; pour plus d’informations, voir ci-dessous. D’autres fonctionnalités de système d’exploitation, telles que l’éclairage nocturne, peuvent également utiliser ce pipeline, et le système d’exploitation gère la façon de partager (composer) et/ou de rationaliser l’accès au pipeline entre plusieurs scénarios.

Description du pipeline de transformation de couleur

Le pipeline de transformation de couleur est basé sur le modèle conceptuel standard pour les conversions d’espace de couleurs :

diagramme de blocs : degamma source, matrice de couleurs, regamma cible

Le modèle peut convertir entre deux espaces de couleurs RVB (ou autres 3 canaux), tels que sRGB en P3 D65. Il peut également corriger les types les plus courants de variation de couleur de panneau.

Le pipeline de transformation des couleurs Windows prend le modèle conceptuel, développe les phases 2 (matrice de couleurs) et 3 (regamma cible) en sous-étapes, et expose un sous-ensemble des étapes (2b et 3b, en vert) pour les applications à programmer, tout en laissant le reste (blanc) contrôlé par le pilote :

diagramme de blocs : degamma source ; matrice de couleurs décomposée en RVB source en XYZ, XYZ en XYZ et XYZ en RVB cible ; regamma cible décomposé en fonction de transfert bancaire, réglage 1DLUT

Ces modifications permettent au pipeline de couleurs d’être indépendant de l’espace de couleur du contenu source, qui peut changer d’image à image. En outre, il améliore la compatibilité avec les espaces de couleurs d’affichage tels que BT.2100 ST.2084, qui nécessitent des optimisations opaques afin de préserver la précision.

Étape 0 : Source (entrée graphique)

L’entrée est le framebuffer rendu à partir du système d’exploitation. Il peut se trouver dans l’un de plusieurs espaces de couleur selon le scénario, y compris sRGB, sYCC, HDR10 ou scRGB, et peut changer d’image à image.

Étape 1 : Source DeGamma

Le pilote d’affichage convertit automatiquement le contenu source en gamma linéaire, et cette étape n’est pas programmable par les applications.

Étape 2 : matrice de conversion d’espace de couleur

Dans le modèle de conversion d’espace de couleurs standard, la phase de matrice peut être divisée en trois matrices, qui sont composées (multipliées) ensemble :

  • 2a : Convertir à partir de l’espace de couleur RVB de contenu source (gamma linéaire) en espace de couleurs absolu ; dans le pipeline Windows, l’espace de couleurs absolu est CIEXYZ.

  • 2b : Effectuez des ajustements dans l’espace CIEXYZ, comme l’étalonnage.

  • 2c : Convertissez à partir de CIEXYZ en espace de couleurs RVB cible (gamma linéaire). L’espace de couleurs RVB cible est défini comme l’encodage utilisé lors de la transmission des couleurs sur le fil d’affichage, généralement bt.709 ou BT.2020 primaires. Il ne s’agit pas des primaires réelles mesurées du panel physique.

La matrice 2a est déterminée par le contenu source, et la matrice 2c est déterminée par le mode de signalisation de l’affichage ; seule la matrice 2b est accessible aux applications. Le pilote multiplie les trois ensembles pour générer la matrice réelle à exécuter dans le matériel :

FinalMatrix = SourceRGBtoXYZ * XYZtoXYZAdjust * XYZtoTargetRGB

Notes

Étant donné que le pilote d’affichage est responsable de la source RVB vers XYZ et des conversions XYZ vers RVB cibles, la matrice que vous programmez (étape 2b) ne doit pas inclure non plus.

Exemple 1 : Si vous n’effectuez aucun ajustement des couleurs (pass-through), votre matrice doit être une identité, quel que soit le type d’affichage vers lequel vous effectuez des opérations.

Exemple 2 : Si vous utilisez un affichage SDR P3 D65 et que vous implémentez un profil de « vérification sRGB » qui émule sRGB sur le panneau, votre matrice doit se composer d’une rotation des primaires de sRGB vers P3 D65.

Étape 3 : ReGamma cible

Cette étape peut être divisée en deux RVB 1DLUT, qui sont composées ensemble :

  • 3a : Encodez les données RVB linéaires de l’étape 2c dans la fonction de transfert/gamma du signal sur le câble d’affichage.

  • 3b : Effectuez les ajustements dans l’espace gamma cible, comme l’étalonnage.

1DLUT 3a est déterminé par l’espace de couleur du format de fil d’affichage ; le plus souvent, il s’agit de sRGB pour les affichages SDR et ST.2084 pour les affichages HDR. 3b est programmable par les applications et se produit après l’application de la fonction de transfert de format filaire. Le pilote compose les deux 1DLUT pour générer le 1DLUT réel à exécuter dans le matériel :

Final1DLUT = Adjustment1DLUT(TargetReGamma(input))

Notes

Étant donné que le pilote est responsable de la programmation de la fonction de transfert de signal d’affichage, le 1DLUT que vous programmez (3b) ne doit pas inclure cet encodage. Par exemple, si vous n’effectuez aucun ajustement des couleurs (pass-through), votre 1DLUT doit être une identité, quel que soit l’espace de couleur de format de fil d’affichage.

Étape 4 : Cible (sortie à analyser)

Il s’agit du framebuffer à analyser sur le fil par le GPU ; dans l’espace de couleurs natif de l’affichage, et après tous les ajustements que vous avez programmés. Des opérations supplémentaires telles que l’encodage YCbCr peuvent se produire par la suite.

Précision et précision supérieures

La phase de matrice gamma linéaire (ajustement XYZ à XYZ) a été introduite dans Windows 10, version 1709. La fonctionnalité vous permet d’effectuer des ajustements pour les primaires de couleur et le point blanc, ainsi que des conversions d’espace de couleur RVB arbitraires.

L’étape d’ajustement 1DLUT est conceptuellement similaire à la rampe gamma existante 1DLUT, mais offre une précision améliorée, avec jusqu’à 4 096 entrées LUT avec une précision de point fixe de 16 bits maximum.

Notes

Tous les matériels ne prennent pas en charge le nombre total d’entrées ou la précision exposées par le pipeline de couleurs.

Prise en charge des affichages HDR (BT.2100)

Une limitation du pipeline de rampe gamma existant est qu’il a un comportement non défini lorsque l’affichage utilise la signalisation HDR (BT.2100 ST.2084). Le nouveau pipeline de transformation de couleur prend explicitement en charge la signalisation SDR (BT.1886 ou sRGB) et HDR, et les mises à l’échelle pour prendre en charge les futurs espaces de couleurs de format de fil. Pour ce faire, il effectue les étapes « XYZ to Target RVB » et « Wire transfer function » (bleu) dans le diagramme de blocs :

diagramme de blocs identifiant xyz pour cibler les phases de fonction rvb et de transfert de câble

Ces deux étapes, qui sont contrôlées automatiquement par le pilote, sont responsables de l’encodage des couleurs dans l’espace de couleurs de format de fil : par exemple, sRGB ou BT.2020 ST.2084.

Par conséquent, lorsque vous programmez le pipeline de transformation de couleur, vous obtenez un comportement bien défini en fonction de l’espace de couleur de format de fil actif de l’affichage.

Nouvelle balise « MHC2 » pour les profils ICC

Windows ne fournit pas d’API pour contrôler directement le nouveau pipeline de transformation de couleur au moment de l’exécution. Au lieu de cela, votre application accède au pipeline en écrivant un profil de couleur ICC (International Color Consortium) correctement mis en forme avec des données supplémentaires stockées dans une nouvelle balise privée « Microsoft Hardware Calibration » (« MHC2 »). Il s’agit d’un modèle similaire au pipeline de rampe gamma existant, qui utilise des balises ICC privées « VCGT ». Les profils ICC avec des données de balise SCHL2 valides sont appelés « profils ICC SCHL » ou « profils MHC ».

Notes

MHC2 fait référence à la deuxième version de la balise privée, qui est disponible pour tous les appareils Windows 10, version 2004 ; SCHL1 fourni sur une version antérieure de Windows avec des PC OEM spécifiques.

Métadonnées statiques HDR supplémentaires ST.2086

En plus de programmer le nouveau pipeline de transformation de couleur, les profils ICC MHC contiennent également des métadonnées statiques HDR ST.2086. Il s’agit de valeurs qui décrivent la plage dynamique (luminance) et la gamme de couleurs d’un affichage. Ils sont largement implémentés avec les affichages HDR, mais sont utiles pour n’importe quel affichage. Les valeurs sont :

  • Luminance maximale (nits)
  • Luminosité pleine image maximale (nits)
  • Luminance minimale (nits)
  • Couleurs primaires RVB (coordonnées xy)
  • Point blanc (coordonnées xy)

Le point blanc, la luminosité maximale de l’image complète et les primaires de couleur RVB sont décrits à l’aide de balises ICC standard. La luminosité maximale et la luminosité minimale sont décrites dans la balise SCHL2. Un profil doit contenir toutes ces informations pour que le système d’exploitation accepte le profil et l’utilise pour les scénarios De couleur avancée.

Windows rationalise les métadonnées ST.2086 à partir de plusieurs sources, notamment le profil ICC MHC, le pilote graphique et le microprogramme EDID ou DisplayID. Les profils ICC MHC sont traités comme la source la plus fiable et remplacent d’autres sources. Windows expose ces informations via les API de capacité HDR, comme décrit dans Utiliser DirectX avec une couleur avancée sur des affichages à plage dynamique élevée/standard. De cette façon, les applications HDR reçoivent les meilleures informations d’affichage HDR disponibles.

Définition de la luminance ST.2086 pour les écrans de rétro-éclairage réglables

Un écran peut avoir un rétro-éclairage réglable, par exemple contrôlé par l’utilisateur, ou contrôlé automatiquement par un capteur de lumière ambiante. Cela introduit une ambiguïté quant à la façon dont les valeurs de luminance ST.2086 doivent être interprétées.

Pour les écrans où Windows contrôle le rétro-éclairage (généralement pour les ordinateurs portables et les appareils à panneau intégré), les valeurs de luminosité doivent décrire le moment où ce rétro-éclairage contrôlé par le système d’exploitation est à son maximum ou le plus lumineux.

Pour les écrans où Windows n’a pas de contrôle sur le rétro-éclairage (généralement pour les moniteurs externes), les valeurs de luminosité sont précises uniquement pour l’état d’affichage au moment de la mesure.

Exigences du profil ICC

Un profil ICC MHC doit utiliser la spécification ICC version 2 (ICC.1:2001-04) ou la version 4 (ICC.1:2010-12/ISO 15076-1:2010). Un profil ICC SCHL doit être un profil d’appareil d’affichage.

Un profil ICC MHC peut inclure des données de pipeline de transformation de couleur. Les parties de la structure SCHL2 qui définissent la transformation de couleur peuvent être vides, ce qui indique explicitement une transformation d’identité.

Un profil ICC MHC doit inclure des métadonnées ST.2086. Un profil contenant uniquement des métadonnées ST.2086 et aucune donnée de transformation n’est utilisé pour les scénarios d’étalonnage d’affichage HDR. Dans ce cas, l’étalonnage HDR signifie fournir des informations plus précises sur la luminosité minimale/maximale et la gamme de couleurs pour les applications et les jeux HDR.

Réutilisation des balises publiques existantes

Les profils ICC MHC utilisent des balises publiques existantes pour définir certaines des valeurs de métadonnées ST.2086. Toutes ces étiquettes sont déjà requises pour les profils d’appareil d’affichage. Les définitions de balises et de types de données se trouvent dans les spécifications ICC.

Nom de la balise Type de données Valeur ST.2086 Unité signalée par Windows
redColorantTag XYZNumber Primaire rouge Chromaticity (xy)
greenColorantTag XYZNumber Primaire verte Chromaticity (xy)
blueColorantTag XYZNumber Primaire bleue Chromaticity (xy)
mediaWhitePointTag XYZNumber Point blanc Chromaticity (xy)
luminanceTag XYZNumber Luminosité pleine image maximale Luminance (nits)

Définition de balise privée « SCHL2 »

Un profil ICC SCHL doit contenir une structure d’étiquette SCHL2. La matrice et les éléments de transformation de couleur 1DLUT peuvent être définis sur 0 (NULL), ce qui indique explicitement une transformation d’identité pour la phase respective. Les valeurs de métadonnées ST.2086 doivent être remplies avec des données valides.

Position des octets Longueur du champ (octets) Contenu Type de données
0 à 3 4 Signature de type 'SCHL2' (4D484332h) SCHL2Type
4 à 7 4 Décalage vers le début de l’élément de données de balise uInt32Number
8 à 13 4 Taille de l’élément de données de balise uInt32Number

Définition de structure MHC2Type

Position des octets Longueur du champ (octets) Contenu Type de données
0 à 3 4 Signature de type 'SCHL2' (4D484332h)
4 à 7 4 Réservé, défini sur 0
8 à 11 4 Nombre d’entrées 1DLUT (4 096 ou moins) [1]
FACULTATIF : 0 = Transformation d’identité
uInt32Number
12 à 15 4 ST.2086 min luminance in nits S15Fixed16Number
16 à 19 4 ST.2086 peak luminance in nits S15Fixed16Number
20 à 23 4 Décalage en octets sur la matrice [2]
FACULTATIF : 0 = Transformation d’identité
uInt32Number
24 à 27 4 Décalage en octets sur 1DLUT rouge [2] uInt32Number
28 à 31 4 Décalage en octets sur 1DLUT vert [2] uInt32Number
32 à 35 4 Décalage en octets sur 1DLUT bleu [2] uInt32Number

[1] Le système d’exploitation interpole les données au nombre d’entrées prises en charge par le matériel.

[2] Les décalages au sein de la structure MHC2Type sont relatifs au début de la structure, et non au fichier.

Définition de matrice

Position des octets Longueur du champ (octets) Contenu Type de données
0 à 23 24 Matrice d’ajustement xyz vers XYZ 3x4
stockée dans l’ordre principal des lignes, la colonne 4 est ignorée [1]
s15Fixed16Number

[1] La structure de la matrice est dimensionnée pour s’adapter à 12 éléments pour une matrice 3x4 dans l’ordre principal des lignes. Toutefois, Windows utilise uniquement les données des trois colonnes de gauche, définissant ainsi une matrice 3x3. Par exemple, le stockage de ces 12 valeurs dans l’ordre linéaire :

[a, b, c, 0, d, e, f, 0, g, h, i, 0]

produit la matrice suivante :

Première colonne Deuxième colonne Troisième colonne
a b c
d e f
g h i

Notes

Comme décrit dans Matrice de conversion d’espace de couleur, n’incluez pas les transformations RVB sources en XYZ ou XYZ pour cibler les transformations de matrice RVB, car elles sont gérées automatiquement par le pilote. RVB cible est défini comme l’encodage utilisé lors de la transmission des couleurs sur le fil d’affichage ; généralement BT.709 ou BT.2020 primaires.

Définition 1DLUT

Position des octets Longueur du champ (octets) Contenu Type de données
0 à 3 4 'sf32' (73663332h) Signature de type
4 à 7 4 Réservé, défini sur 0
8 jusqu’à la fin Variable (0 à 16384) Valeurs LUT d’étalonnage normalisées à [0.0, 1.0] s15Fixed16Number

Notes

Comme décrit dans Target ReGamma, ce LUT fonctionne dans l’espace de couleur du format de fil une fois la fonction de transfert encodée.

Notes

Si vos mesures ou courbes d’étalonnage nécessitent moins de 4 096 entrées LUT, stockez uniquement le nombre d’entrées dont vous avez réellement besoin et spécifiez le nombre dans la structure MHC2Type. Par exemple, le LUT d’identité le plus simple nécessite seulement deux entrées définies sur 0.0 et 1.0. Le système d’exploitation est interpolé sur le nombre d’entrées prises en charge par le matériel.

Nouvelles API de gestion des profils ICC d’affichage

Notes

Les instructions de cette section s’appliquent à tout profil ICC d’affichage, qu’il contienne ou non des données SCHL.

Une fois que vous avez généré un profil ICC SCHL, vous le provisionnez sur le système Windows pour l’affichage ciblé. Dans les versions antérieures de Windows, vous utilisiez les fonctions de gestion des profils WCS (Windows Color System) pour ce faire. Bien que vous puissiez continuer à utiliser ces API existantes, Windows 10, la version 2004 ajoute un ensemble de nouvelles API modernisées à WCS qui sont spécialisées pour la gestion des profils de couleurs ICC d’affichage. Ces API sont toutes précédées de « ColorProfile » :

  • ColorProfileAddDisplayAssociation
  • ColorProfileRemoveDisplayAssociation
  • ColorProfileSetDisplayDefaultAssociation
  • ColorProfileGetDeviceCapabilities

Notes

L’API ci-dessus fournit des fonctionnalités pour lesquelles il n’existe pas d’équivalent d’API WCS.

  • ColorProfileGetDisplayList
  • ColorProfileGetDisplayDefault
  • ColorProfileGetDisplayUserScope

Un flux de travail classique utilisant les API ColorProfile pour provisionner un profil ICC MHC sur le système est le suivant :

  1. Utilisez ColorProfileGetDeviceCapabilities pour déterminer si le système prend en charge le nouveau pipeline de transformation de couleur. Même si ce n’est pas le cas, il peut toujours être utile de provisionner le profil pour fournir des métadonnées ST.2086 supplémentaires.
  2. Utilisez InstallColorProfile (une API WCS existante) pour installer le profil de couleur. Cela ajoute le profil à la liste des profils disponibles pour une utilisation sur le système.
  3. Utilisez ColorProfileGetDisplayUserScope pour déterminer si l’utilisateur Windows a remplacé les associations de profil par défaut du système et utilise ses propres listes d’associations par utilisateur.
  4. Utilisez ColorProfileAddDisplayAssociation pour associer le profil de couleur à un affichage (rendre un profil installé sélectionnable pour cet affichage) et éventuellement définir le profil comme profil par défaut (le profil actuellement actif).

Chargeur d’étalonnage d’affichage Windows amélioré

Windows propose un chargeur d’étalonnage des couleurs d’affichage de boîte de réception depuis Windows 7. Ce chargeur d’étalonnage prend en charge la lecture des profils ICC avec des données de pipeline de rampe gamma stockées dans des balises de profil ICC privées VCGT ou MS00. Le chargeur de rampe gamma doit être explicitement activé en appelant WcsSetCalibrationManagementState.

Windows 10, la version 2004 améliore le chargeur d’étalonnage de boîte de réception en ajoutant la prise en charge des profils ICC MHC et du nouveau pipeline de transformation de couleur. L’écriture et l’approvisionnement d’un profil ICC MHC, et le fait que le chargeur Windows applique son état, sont la seule méthode permettant aux applications d’accéder au pipeline de transformation de couleur : il n’existe pas d’API d’accès direct. Contrairement aux profils de rampe gamma , la lecture à partir de profils ICC MHC est toujours activée. Par conséquent, une fois qu’un profil ICC MHC est défini par défaut sur un système compatible, son état d’étalonnage est automatiquement chargé.

Scénarios HDR et Couleur avancée avec gestion automatique des couleurs système

Les nouvelles technologies de couleur avancées telles que HDR et la gestion automatique des couleurs ajoutent de nouvelles fonctionnalités à Windows, notamment une précision des couleurs supérieure et l’accès à des gammes de couleurs d’affichage beaucoup plus grandes ; Pour plus d’informations, consultez Utiliser DirectX avec une couleur avancée sur les affichages de plage dynamique haute/standard.

La gestion avancée des couleurs et automatique des couleurs garantit une couleur d’affichage cohérente et précise du point de vue colorimétrique pour toutes les applications : héritées et modernes. Toutefois, certaines applications peuvent effectuer leur propre gestion explicite des couleurs à l’aide de profils de couleur ICC (International Color Consortium).

Lorsque la couleur avancée est active sur les affichages SDR ou HDR, le comportement des profils ICC d’affichage change de manière non compatible avec les versions descendantes. Si votre application fonctionne avec les profils ICC d’affichage, Windows propose des comportements de compatibilité pour garantir que votre application continue d’obtenir un comportement correct.

Pour plus d’informations sur les modifications apportées au comportement du profil ICC et sur la façon dont vous pouvez adapter votre application pour optimiser la compatibilité avec la couleur avancée, reportez-vous à comportement du profil ICC avec Advanced Color.