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 de couleur d’affichage GPU pris en charge par Windows 10, version 2004 (20H1) et versions ultérieures. Le pipeline offre une précision de couleur considérablement améliorée sur les chemins existants, tels que le pipeline de rampe gamma GDI, et ajoute la prise en charge des affichages HDR.
Cette rubrique est destinée aux fabricants d’affichage et aux fabricants de PC et aux fournisseurs d’étalonnage qui souhaitent mieux étalonner les écrans de leurs clients. La plupart des applications Windows n’ont rien à faire pour tirer parti du pipeline ; mais si vous développez des applications gérées par des couleurs, vous voudrez peut-être connaître le fonctionnement de cette technologie.
Le nouveau pipeline de couleurs est disponible pour tout affichage si le GPU répond à la configuration système requise. Si l’affichage est HDR ou utilise la gestion des couleurs automatiques, il existe des considérations et des exigences supplémentaires. qui se trouve dans Utiliser DirectX avec une couleur avancée sur des affichages de plage dynamique haute/standard.
Introduction
L’étalonnage des couleurs d’affichage est le processus permettant de s’assurer qu’un affichage correspond avec précision à son espace de couleur signalé ; par exemple, sRGB ou DCI-P3 D65. En raison des variations du processus de fabrication et d’autres sources, un panneau d’affichage individuel peut différer 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 vous soucier de cette variabilité ou de cette inexactitude.
À un niveau élevé, l’étalonnage des couleurs d’affichage implique les étapes suivantes :
- 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.
- En fonction des données de mesure, générez une transformation de couleur qui corrige les imprécisions de l’affichage et générez des métadonnées qui décrivent le volume de couleurs résultant de l’affichage.
- Stockez les données de transformation de couleur et affichez les métadonnées pour une utilisation ultérieure.
- 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, 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 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 400 Series, ou version ultérieure
- Processeurs AMD Ryzenavecux
- 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+)
- Soc 8CX Gen 3 ou version ultérieure ; 7C Gen 3 ou version ultérieure
Remarque
Les puces de nom de code Intel Comet Lake (code de modèle à 5 chiffres) ne sont pas prises en charge.
Un pilote WDDM (Windows Display Driver Model) 2.6 ou version ultérieure est nécessaire (publié avec Windows 10, version 1903). Certains fournisseurs gpu ont besoin d’un pilote plus récent, potentiellement 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 les API de gestion des profils ICC d’affichage.
Nouveau pipeline de transformation de couleur GPU
Windows 10, version 2004 expose un pipeline de transformation de couleur d’affichage accélérée par GPU constitué d’une matrice de couleurs gamma linéaire et d’un 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 gamme de couleurs larges. En outre, il ajoute la prise en charge des nouvelles technologies telles que HDR qui utilisent la signalisation BT.2100.
Le pipeline n’est pas directement programmable par les applications et n’est exposé qu’à l’aide de profils SCHL ; voir ci-dessous pour plus d’informations. D’autres fonctionnalités de système d’exploitation telles que la lumière 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 couleur :
Le modèle peut convertir entre deux espaces de couleurs RVB (ou 3 canaux), tels que sRVB en P3 D65. Il peut également corriger les types de variantes de couleur de panneau les plus courants.
Le pipeline de transformation de couleur Windows prend le modèle conceptuel, développe les étapes 2 (matrice de couleurs) et 3 (regamma cible) en sous-phases 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 :
Ces modifications permettent au pipeline de couleurs d’être indépendant de l’espace de couleur du contenu source, ce qui peut changer sur une base frame-à-frame. En outre, il améliore la compatibilité avec les espaces de couleur 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 du système d’exploitation. Il peut se trouver dans l’un des espaces de couleurs selon le scénario, notamment sRGB, sYCC, HDR10 ou scRVB, et peut changer sur une base frame-à-frame.
É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 couleur standard, l’étape de matrice peut être divisée en trois matrices composées (multipliées) :
2a : Convertissez de l’espace de couleur RVB du contenu source (gamma linéaire) en espace de couleur absolu ; dans le pipeline Windows, l’espace de couleur absolu est CIEXYZ.
2b : effectuez des ajustements dans l’espace CIEXYZ, comme l’étalonnage.
2c : Convertissez de CIEXYZ en espace de couleur RVB cible (gamma linéaire). L’espace de couleur RVB cible est défini comme encodage utilisé lors de la transmission de couleurs sur le fil d’affichage, généralement BT.709 ou BT.2020 primaires. Ce n’est pas les primaires réelles mesurées du panneau 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
Remarque
Étant donné que le pilote d’affichage est responsable de la source RVB vers XYZ et ciblez les conversions XYZ en RVB, 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 dans lequel vous effectuez des modifications.
Exemple 2 : Si vous placez sur un affichage SDR P3 D65 et implémentez un profil de vérification sRGB qui émule sRVB sur le panneau, votre matrice doit se composer d’une rotation primaire de sRGB en P3 D65.
Étape 3 : Cibler ReGamma
Cette étape peut être divisée en deux 1DLUT RVB, qui sont composées ensemble :
3a : Encoder les données RVB linéaires de l’étape 2c dans la fonction de transfert/gamma du signal sur le fil d’affichage.
3b : effectuez des 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))
Remarque
É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 du format de fil d’affichage.
Étape 4 : Cible (sortie vers l’analyse)
Il s’agit du framebuffer à analyser sur le fil par le GPU ; dans l’espace de couleur natif de l’affichage et après 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 fonctionnalité d’ajustement de matrice gamma linéaire (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 les conversions arbitraires d’espace de couleur RVB.
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 à une précision de point fixe jusqu’à 16 bits.
Remarque
Le matériel ne prend pas en charge le nombre total d’entrées ou de 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 SDR (BT.1886 ou sRGB) et la signalisation HDR, et les échelles pour prendre en charge les espaces de couleur de format de fil futurs. Il effectue cette opération via les étapes « XYZ to Target RGB » et « Wire transfer function » (bleu) dans le diagramme de blocs :
Ces deux étapes, qui sont contrôlées automatiquement par le pilote, sont responsables de l’encodage des couleurs dans l’espace de couleur du format de câble : 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 câble actif de l’affichage.
Nouvelle balise « SCHL2 » 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 International Color Consortium (ICC) correctement mis en forme avec des données supplémentaires stockées dans une nouvelle balise privée « Microsoft Hardware Calibration » (« SCHL2 »). 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 SCHL ».
Remarque
SCHL2 fait référence à la deuxième version de la balise privée, qui est disponible pour tous les appareils Windows 10, version 2004 ; PEC1 fourni sur une version antérieure de Windows avec des PC OEM spécifiques.
Métadonnées statiques HDR supplémentaires ST.2086
Outre la programmation du nouveau pipeline de transformation de couleur, les profils ICC de la SCHL contiennent également des métadonnées statiques HDR ST.2086. Il s’agit de valeurs qui décrivent la plage dynamique d’un affichage (luminance) et la gamme de couleurs. Ils sont largement implémentés avec les écrans HDR, mais sont utiles pour n’importe quel affichage. Les valeurs sont :
- Luminance de pointe (nits)
- Max full frame luminance (nits)
- Min luminance (nits)
- Primaires de couleur RVB (coordonnées xy)
- Point blanc (coordonnées xy)
Le point blanc, la luminosité maximale de trame complète et les primaires de couleur RVB sont décrites à l’aide de balises ICC standard. Les pics et les luminosités minimales sont décrits dans la balise SCHL2. Un profil doit contenir toutes ces informations pour que le système d’exploitation accepte le profil et l’utiliser pour les scénarios de couleur avancée.
Windows rationalise les métadonnées ST.2086 à partir de plusieurs sources, notamment le profil ICC de la SCHL, le pilote graphique et le microprogramme EDID ou DisplayID. Les profils ICC de la SCHL sont traités comme la source la plus fiable et remplacent d’autres sources. Windows expose ces informations via les API de fonctionnalité HDR, comme décrit dans Use DirectX with Advanced Color on high/standard dynamic range display( en l’occurrence, les applications HDR reçoivent les meilleures informations d’affichage HDR disponibles.
Définition de la luminance ST.2086 pour les écrans arrière réglables
Un écran peut avoir un éclairage arrière réglable, par exemple contrôlé par l’utilisateur, ou contrôlé automatiquement par un capteur de lumière ambiante. Cela introduit l’ambiguïté avec la façon dont les valeurs de luminance ST.2086 doivent être interprétées.
Pour les affichages où Windows a le contrôle sur le rétro-éclairage (généralement pour les ordinateurs portables et les appareils de panneau intégré), les valeurs de luminosité doivent décrire quand ce rétrolight contrôlé par le système d’exploitation est à son paramètre maximal ou le plus lumineux.
Pour les affichages où Windows n’a pas le contrôle sur le rétro-éclairage (généralement pour les moniteurs externes), les valeurs de luminance sont exactes uniquement pour l’état d’affichage au moment de la mesure.
Conditions requises pour le profil ICC
Un profil ICC DE LA SCHL doit utiliser la spécification DE LA CPI version 2 (ICC.1:2001-04) ou la version 4 (ICC.1:2010-12/ISO 15076-1:2010). Un profil ICC de la SCHL doit être un profil d’appareil d’affichage.
Un profil ICC DE LA SCHL 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 de la SCHL 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 de l’affichage HDR, dans ce cas, l’étalonnage HDR signifie fournir des informations minimales/max de luminosité et de gamut de couleur plus précises pour les applications et jeux HDR.
Réutilisation des balises publiques existantes
Les profils ICC de la SCHL utilisent des balises publiques existantes pour définir certaines des valeurs de métadonnées ST.2086. Toutes ces balises sont déjà requises pour les profils d’appareil d’affichage. Les définitions de type de balise et de données sont disponibles 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 | Chromaticité (xy) |
greenColorantTag | XYZNumber | Primaire verte | Chromaticité (xy) |
blueColorantTag | XYZNumber | Primaire bleue | Chromaticité (xy) |
mediaWhitePointTag | XYZNumber | Point blanc | Chromaticité (xy) |
luminanceTag | XYZNumber | Max full frame luminance | Luminance (nits) |
Définition de balise privée « SCHL2 »
Un profil ICC de la SCHL doit contenir une structure de balise 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 l’étape correspondante. Les valeurs de métadonnées ST.2086 doivent être renseignées avec des données valides.
Position d’octet | Longueur du champ (octets) | Contenu | Type de données |
---|---|---|---|
0 à 3 | 4 | 'SCHL2' (4D484332h) Signature de type | SCHL2Type |
4 à 7 | 4 | Décalage au début de l’élément de données d’étiquette | uInt32Number |
8 à 13 | 4 | Taille de l’élément de données de balise | uInt32Number |
Définition de structure SCHL2Type
Position d’octet | Longueur du champ (octets) | Contenu | Type de données |
---|---|---|---|
0 à 3 | 4 | 'SCHL2' (4D484332h) Signature de type | |
4 à 7 | 4 | Réservé, défini sur 0 | |
8 à 11 | 4 | Nombre d’entrées 1DLUT (4096 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 en matrice [2] FACULTATIF : 0 = Transformation d’identité |
uInt32Number |
24 à 27 | 4 | Décalage en octets en rouge 1DLUT [2] | uInt32Number |
28 à 31 | 4 | Offset en octets en vert 1DLUT [2] | uInt32Number |
32 à 35 | 4 | Décalage en octets en bleu 1DLUT [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 dans la structure SCHL2Type sont relatifs au début de la structure, et non au fichier.
Définition de matrice
Position d’octet | Longueur du champ (octets) | Contenu | Type de données |
---|---|---|---|
0 à 47 | 48 | Matrice d’ajustement 3x4 XYZ vers XYZ stockée dans l’ordre principal des lignes, la colonne 4 est ignorée [1] |
s15Fixed16Number |
[1] La structure de matrice est dimensionnée pour ajuster 12 éléments pour une matrice 3x4 dans l’ordre principal des lignes. Toutefois, Windows utilise uniquement les données des trois colonnes gauches, définissant efficacement une matrice 3x3. Par exemple, stockez 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 |
j | e | f |
g | h | i |
Remarque
Comme décrit dans la matrice de conversion d’espace de couleur, n’incluez pas la source RVB en XYZ ou XYZ pour cibler les transformations de matrice RVB, car elles sont gérées automatiquement par le pilote. Le RVB cible est défini comme encodage utilisé lors de la transmission de couleurs sur le câble d’affichage ; généralement BT.709 ou BT.2020 primaires.
Définition 1DLUT
Position d’octet | 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 à la fin | Variable (0 à 16384) | Valeurs LUT d’étalonnage normalisées à [0.0, 1.0] | s15Fixed16Number |
Remarque
Comme décrit dans Target ReGamma, ce LUT fonctionne dans l’espace de couleur de format filaire après l’encodage de la fonction de transfert.
Remarque
Si vos mesures ou courbes d’étalonnage ont besoin de 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 SCHL2Type. 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 interpole le nombre d’entrées prises en charge par le matériel.
Nouvelles API de gestion des profils ICC d’affichage
Remarque
Les instructions de cette section s’appliquent à tout profil ICC d’affichage, qu’il contienne ou non des données de la SCHL.
Une fois que vous avez généré un profil ICC de la SCHL, vous le provisionnez sur le système Windows pour l’affichage ciblé. Dans les versions antérieures de Windows, vous utiliseriez les fonctions de gestion des profils WCS (Windows Color System) pour ce faire. Bien que vous puissiez continuer à utiliser ces API existantes, Windows 10, version 2004 ajoute un ensemble d’API nouvelles et modernisées à WCS spécialisées pour la gestion des profils de couleur ICC d’affichage. Ces API sont toutes précédées de « ColorProfile » :
- ColorProfileAddDisplayAssociation
- ColorProfileRemoveDisplayAssociation
- ColorProfileSetDisplayDefaultAssociation
- ColorProfileGetDeviceCapabilities
Remarque
L’API ci-dessus fournit des fonctionnalités pour lesquelles aucune API WCS existante n’est équivalente.
- ColorProfileGetDisplayList
- ColorProfileGetDisplayDefault
- ColorProfileGetDisplayUserScope
Un flux de travail classique utilisant les API ColorProfile pour approvisionner un profil ICC de la SCHL sur le système est :
- 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.
- 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.
- 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.
- 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 étant par défaut (le profil actuellement actif).
Chargeur d’étalonnage d’étalonnage d’affichage Windows amélioré
Windows a proposé 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 activé explicitement en appelant WcsSetCalibrationManagementState.
Windows 10, version 2004 améliore le chargeur d’étalonnage de boîte de réception en ajoutant la prise en charge des profils ICC SCHL et du nouveau pipeline de transformation de couleur. L’écriture et l’approvisionnement d’un profil ICC SCHL, et le fait que le chargeur Windows applique son état, est la seule méthode permettant aux applications d’accéder au pipeline de transformation de couleur : il n’existe aucune API d’accès direct. Contrairement aux profils de rampe gamma, la lecture à partir des profils ICC SCHL est toujours activée. Par conséquent, une fois qu’un profil ICC de la SCHL est défini comme valeur par défaut sur un système capable, son état d’étalonnage est automatiquement chargé.
Scénarios HDR et Couleurs avancées avec gestion automatique des couleurs système
De nouvelles technologies avancées de couleur telles que HDR et la gestion automatique des couleurs ajoutent de nouvelles fonctionnalités à Windows, notamment une précision de couleur supérieure et un accès à des gamuts de couleurs d’affichage beaucoup plus volumineux ; Pour plus d’informations, consultez Utiliser DirectX avec une couleur avancée sur des affichages de plage dynamique haute/standard.
La gestion avancée des couleurs et des couleurs automatiques garantit une couleur d’affichage cohérente et colorimétriquement précise pour toutes les applications : héritées et modernes. Toutefois, certaines applications peuvent effectuer leur propre gestion explicite des couleurs à l’aide des profils de couleur ICC (International Color Consortium).
Lorsque la fonction Advanced Color est activée sur les écrans SDR ou HDR, le comportement des profils ICC d'affichage change de manière non rétro-compatible. Si votre application fonctionne avec des profils ICC d’affichage, Windows offre des comportements de compatibilité pour vous assurer 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 Advanced Color, reportez-vous au comportement du profil ICC avec Advanced Color.