Condividi tramite


Pipeline di calibrazione dei colori dell'hardware Windows

Questo argomento illustra la calibrazione dei colori di visualizzazione usando una nuova pipeline di trasformazione del colore di visualizzazione GPU supportata da Windows 10, versione 2004 (20H1) e successive. La pipeline offre una maggiore accuratezza dei colori sui percorsi esistenti, ad esempio la pipeline di rampa gamma GDI, e aggiunge il supporto per gli schermi HDR.

Questo argomento è destinato ai produttori di display e PC e ai fornitori di calibrazione che vogliono calibrare meglio le visualizzazioni dei clienti. La maggior parte delle app di Windows non deve eseguire alcuna operazione per trarre vantaggio dalla pipeline; ma se sviluppi app gestite da colori, potresti voler essere a conoscenza del funzionamento di questa tecnologia.

La nuova pipeline di colori è disponibile per qualsiasi visualizzazione se la GPU soddisfa i requisiti di sistema. Se lo schermo è HDR o usa la gestione automatica dei colori, sono disponibili considerazioni e requisiti aggiuntivi. disponibile in Use DirectX with Advanced Color on high/standard dynamic range display (Usa DirectX con colore avanzato su schermi dinamico standard/alti).

Introduzione

La calibrazione dei colori di visualizzazione è il processo di garantire che un display corrisponda accuratamente allo spazio dei colori segnalato; ad esempio sRGB o DCI-P3 D65. A causa delle variazioni nel processo di produzione e in altre origini, un singolo pannello di visualizzazione potrebbe differire dalla specifica. Dopo aver calibrato uno schermo, le app e il contenuto possono puntare con sicurezza allo spazio colore dello schermo senza doversi preoccupare di tale variabilità o inesattezza.

A livello generale, la calibrazione dei colori di visualizzazione prevede questi passaggi:

  1. Eseguire misurazioni ottiche dell'output di colore effettivo di una visualizzazione durante il rendering di un set di valori di colore noti.
  2. In base ai dati di misurazione, generare una trasformazione del colore che corregge eventuali inesattezze nella visualizzazione e generare metadati che descrivono il volume di colori risultante della visualizzazione.
  3. Archiviare i dati di trasformazione dei colori e visualizzare i metadati per usarli in un secondo momento.
  4. In fase di esecuzione, caricare e applicare la trasformazione del colore al framebuffer di visualizzazione (valori di colore inviati alla visualizzazione) e segnalare i metadati di visualizzazione alle app.

Windows 10 versione 2004 offre funzionalità avanzate per i passaggi 3 e 4, mentre i produttori di display e i provider di calibrazione sono responsabili dei passaggi 1 e 2.

Requisiti di sistema

La nuova pipeline di trasformazione del colore richiede una GPU e un driver di visualizzazione in grado di visualizzare. Le architetture GPU supportate includono:

  • AMD:
    • AMD RX 500 serie 400 o successiva
    • Processori AMD Ryzen con La grafica Radeon
  • Intel:
    • Integrato: Intel 10th Gen GPU (Ice Lake) o versioni successive
    • Discreto: Intel DG1 o versione successiva
  • NVIDIA GTX 10xx o versione successiva (Pascal+)
  • Qualcomm 8CX Gen 3 o versione successiva; 7C Gen 3 o versione successiva

Nota

I chipset Intel codename Comet Lake (codice modello a 5 cifre) non sono supportati.

È necessario un driver Windows Display Driver Model (WDDM) 2.6 o versione successiva (rilasciato con Windows 10 versione 1903). Alcuni fornitori di GPU necessitano di un driver più recente, potenzialmente nuovo come WDDM 3.0 (rilasciato con Windows 11, versione 21H2).

Per informazioni su come un'app può determinare se la nuova pipeline di trasformazione del colore è disponibile in un sistema, vedi Nuove API di gestione dei profili ICC .

Nuova pipeline di trasformazione del colore GPU

Windows 10 versione 2004 espone una pipeline di trasformazione del colore di visualizzazione con accelerazione GPU costituita da una matrice di colori gamma lineare e 1DLUT. Rispetto alla pipeline di rampa gamma esistente, offre precisione, precisione e supporto superiori per la gamma di colori wide. Inoltre, aggiunge il supporto per le nuove tecnologie, ad esempio i display HDR che usano la segnalazione BT.2100.

La pipeline non è programmabile direttamente dalle app e viene invece esposta solo tramite profili MHC; per altri dettagli, vedere di seguito. Altre funzionalità del sistema operativo, ad esempio la luce notturna, potrebbero anche usare questa pipeline e il sistema operativo gestisce come condividere (comporre) e/o razionalizzare l'accesso alla pipeline tra più scenari.

Descrizione della pipeline di trasformazione colore

La pipeline di trasformazione dei colori si basa sul modello concettuale standard per le conversioni dello spazio dei colori:

diagramma a blocchi: degamma di origine, matrice di colori, regamma di destinazione

Il modello può eseguire la conversione tra due spazi di colore RGB (o altri 3 canali), ad esempio sRGB in P3 D65. Può anche correggere i tipi più comuni di variazione del colore del pannello.

La pipeline di trasformazione colore di Windows accetta il modello concettuale, espande le fasi 2 (matrice di colori) e 3 (regamma di destinazione) in fasi secondarie ed espone un subset delle fasi (2b e 3b, in verde) per le app da programmare, lasciando il resto (bianco) controllato dal driver:

diagramma a blocchi: degamma di origine; matrice di colori scomposta in RGB di origine a XYZ, XYZ a XYZ e XYZ per la destinazione RGB; regamma di destinazione scomposto in funzione di trasferimento in transito, regolazione 1DLUT

Queste modifiche consentono alla pipeline di colori di essere indipendente dallo spazio colori del contenuto di origine, che può cambiare in base a fotogrammi. Inoltre, migliora la compatibilità con gli spazi colori di visualizzazione, ad esempio BT.2100 ST.2084, che richiedono ottimizzazioni opache per mantenere la precisione.

Fase 0: Origine (input grafico)

L'input è il framebuffer di cui è stato eseguito il rendering dal sistema operativo. Può trovarsi in uno dei diversi spazi di colore a seconda dello scenario, tra cui sRGB, sYCC, HDR10 o scRGB e può cambiare in base a fotogrammi.

Fase 1: DeGamma di origine

Il driver di visualizzazione converte automaticamente il contenuto di origine in gamma lineare e questa fase non è programmabile dalle app.

Fase 2: Matrice di conversione dello spazio dei colori

Nel modello standard di conversione dello spazio dei colori, la fase matrice può essere suddivisa in tre matrici, composte (moltiplicate) insieme:

  • 2a: Convertire dallo spazio colore RGB del contenuto di origine (gamma lineare) in uno spazio colore assoluto; nella pipeline di Windows lo spazio dei colori assoluto è CIEXYZ.

  • 2b: Eseguire eventuali regolazioni nello spazio CIEXYZ, ad esempio la calibrazione.

  • 2c: Eseguire la conversione da CIEXYZ allo spazio dei colori RGB di destinazione (gamma lineare). Lo spazio dei colori RGB di destinazione è definito come codifica utilizzata per la trasmissione dei colori sul filo di visualizzazione, in genere le primarie BT.709 o BT.2020. Non sono le primarie effettive e misurate del pannello fisico.

La matrice 2a è determinata dal contenuto di origine e la matrice 2c è determinata dalla modalità di segnalazione dello schermo; solo matrice 2b è accessibile alle app. Il driver moltiplica i tre insieme per generare la matrice effettiva da eseguire nell'hardware:

FinalMatrix = SourceRGBtoXYZ * XYZtoXYZAdjust * XYZtoTargetRGB

Nota

Poiché il driver di visualizzazione è responsabile della conversione da RGB a XYZ di origine e da XYZ a RGB di destinazione, la matrice programmata (fase 2b) non deve includere neanche.

Esempio 1: Se non si eseguono modifiche ai colori (pass-through), la matrice deve essere identità, indipendentemente dal tipo di visualizzazione a cui si sta eseguendo l'output.

Esempio 2: Se si esegue l'output in uno schermo SDR P3 D65 e si implementa un profilo di correzione "sRGB" che emula sRGB nel pannello, la matrice deve essere costituita da una rotazione delle primarie da sRGB a P3 D65.

Fase 3: ReGamma di destinazione

Questa fase può essere suddivisa in due 1DLUT RGB, costituiti insieme:

  • 3a: Codificare i dati RGB lineari dalla fase 2c alla funzione di trasferimento/gamma del segnale attraverso il cavo di visualizzazione.

  • 3b: Eseguire qualsiasi regolazione nello spazio gamma di destinazione, ad esempio la calibrazione.

1DLUT 3a è determinato dallo spazio colore formato filo di visualizzazione; più comunemente è SRGB per i display SDR e ST.2084 per i display HDR. 3b è programmabile dalle app e si verifica dopo l'applicazione della funzione di trasferimento in formato wire. Il driver compone i due 1DLUT per generare l'effettiva 1DLUT da eseguire nell'hardware:

Final1DLUT = Adjustment1DLUT(TargetReGamma(input))

Nota

Poiché il driver è responsabile della programmazione della funzione di trasferimento del segnale di visualizzazione, la codifica 1DLUT programmata (3b) non deve includere tale codifica. Ad esempio, se non si eseguono modifiche ai colori (pass-through), l'1DLUT deve essere l'identità, indipendentemente dallo spazio colore del formato filo di visualizzazione.

Fase 4: Destinazione (output da analizzare)

Questo è il framebuffer da analizzare in rete dalla GPU; nello spazio dei colori nativo dello schermo e dopo eventuali modifiche programmate. In seguito potrebbero verificarsi operazioni aggiuntive, ad esempio la codifica YCbCr.

Maggiore precisione e precisione

La funzionalità di regolazione della matrice gamma lineare (da XYZ a XYZ) è stata introdotta in Windows 10 versione 1709. La funzionalità consente di eseguire modifiche alle primarie dei colori e ai punti bianchi, nonché alle conversioni arbitrarie di spazi di colore RGB.

La fase di regolazione 1DLUT è concettualmente simile alla rampa gamma 1DLUT esistente, ma offre una maggiore precisione, con fino a 4096 voci di LUT fino a precisione a virgola fissa a 16 bit.

Nota

Non tutti gli hardware supportano il numero completo di voci o precisione esposte dalla pipeline di colori.

Supporto per i display HDR (BT.2100)

Una limitazione della pipeline di rampa gamma esistente è che ha un comportamento indefinito quando lo schermo usa la segnalazione HDR (BT.2100 ST.2084). La nuova pipeline di trasformazione del colore supporta in modo esplicito sia SDR (BT.1886 o sRGB) che la segnalazione HDR e ridimensiona per supportare spazi colore in formato filo futuri. Questa operazione viene eseguita tramite le fasi "XYZ to Target RGB" e "Wire transfer function" (blue) nel diagramma a blocchi:

diagramma a blocchi che identifica xyz per indirizzare le fasi rgb e di funzione di trasferimento in transito

Queste due fasi, controllate automaticamente dal driver, sono responsabili della codifica dei colori nello spazio colore del formato di collegamento: ad esempio, sRGB o BT.2020 ST.2084.

Pertanto, quando si programma la pipeline di trasformazione del colore, si ottiene un comportamento ben definito in base allo spazio colore del formato di filo attivo dello schermo.

Nuovo tag "MHC2" per i profili ICC

Windows non fornisce un'API per controllare direttamente la nuova pipeline di trasformazione del colore in fase di esecuzione. L'app accede invece alla pipeline scrivendo un profilo di colore INTERNATIONAL Color Consortium (ICC) formattato correttamente con dati aggiuntivi archiviati in un nuovo tag privato "Microsoft Hardware Calibrazione" ("MHC2"). Si tratta di un modello simile alla pipeline di rampa gamma esistente, che usa tag ICC privati "VCGT". I profili ICC con dati di tag MHC2 validi sono definiti "profili CP MHC" o "profili MHC".

Nota

MHC2 si riferisce alla seconda versione del tag privato, disponibile per tutti i dispositivi Windows 10, versione 2004; MHC1 fornito in una versione precedente di Windows con PC OEM specifici.

Metadati statici HDR supplementari di ST.2086

Oltre a programmare la nuova pipeline di trasformazione del colore, i profili MHC ICC contengono anche metadati statici HDR ST.2086. Si tratta di valori che descrivono l'intervallo dinamico (luminanza) e la gamma di colori di una visualizzazione. Sono ampiamente implementati con schermi HDR, ma sono utili per qualsiasi display. I valori possibili sono:

  • Luminanza di picco (nit)
  • Max full frame luminance (nits)
  • Luminanza minima (nit)
  • Primarie di colore RGB (coordinate xy)
  • Punto bianco (coordinate xy)

Il punto bianco, la luminanza massima full frame e i primari di colore RGB vengono descritti usando tag CP standard. Il picco e la luminanza minima sono descritti nel tag MHC2. Un profilo deve contenere tutte queste informazioni per consentire al sistema operativo di accettare il profilo e usarlo per scenari di colore avanzato.

Windows razionalizza i metadati ST.2086 da più origini, tra cui il profilo CP MHC, il driver grafico e il firmware EDID o DisplayID. I profili MHC CP vengono considerati come la fonte più attendibile e sostituiranno altre fonti. Windows espone queste informazioni tramite le API di funzionalità HDR, come descritto in Usare DirectX con colore avanzato su schermi di intervallo dinamico standard/elevato, in questo modo, alle app HDR vengono fornite le informazioni di visualizzazione HDR migliori disponibili.

Definizione della luminanza ST.2086 per la visualizzazione della backlight regolabile

Un display può avere una backlight regolabile, ad esempio controllata dall'utente, o controllata automaticamente da un sensore di luce ambientale. Ciò introduce ambiguità con il modo in cui devono essere interpretati i valori di luminanza ST.2086.

Per i display in cui Windows ha il controllo sulla backlight (in genere per i portatili e i dispositivi del pannello integrato), i valori di luminanza devono descrivere quando questa backlight controllata dal sistema operativo è al massimo o più luminoso.

Per i display in cui Windows non ha il controllo sulla backlight (in genere per i monitor esterni), i valori di luminanza sono accurati solo per lo stato di visualizzazione al momento della misurazione.

Requisiti del profilo CPI

Un profilo MHC ICC deve usare la specifica CPI versione 2 (ICC.1:2001-04) o versione 4 (ICC.1:2010-12/ISO 15076-1:2010). Un profilo MHC CP deve essere un profilo del dispositivo di visualizzazione.

Un profilo MHC ICC può includere dati della pipeline di trasformazione del colore. Le parti della struttura MHC2 che definiscono la trasformazione del colore possono essere vuote, che indicano in modo esplicito una trasformazione di identità.

Un profilo MHC ICC deve includere metadati ST.2086. Un profilo contenente solo metadati ST.2086 e non vengono usati dati di trasformazione per gli scenari di calibrazione della visualizzazione HDR, in questo caso la calibrazione HDR significa fornire informazioni più accurate sulla luminosità minima/massima e sulla gamma di colori per app e giochi HDR.

Riutilizzo dei tag pubblici esistenti

I profili MHC CP usano tag pubblici esistenti per definire alcuni dei valori dei metadati ST.2086. Tutti questi tag sono già necessari per i profili di dispositivo di visualizzazione. Le definizioni dei tipi di dati e dei tag sono disponibili nelle specifiche di CPI.

Nome del tag Tipo di dati Valore ST.2086 Unità segnalata da Windows
redColorantTag XYZNumber Primario rosso Cromaticità (xy)
greenColorantTag XYZNumber Primario verde Cromaticità (xy)
blueColorantTag XYZNumber Primaria blu Cromaticità (xy)
mediaWhitePointTag XYZNumber Punto bianco Cromaticità (xy)
luminanceTag XYZNumber Max full frame luminance Dominanza (nit)

Definizione del tag privato "MHC2"

Un profilo MHC ICC deve contenere una struttura di tag MHC2. Gli elementi di trasformazione del colore 1DLUT e matrice possono essere impostati su 0 (NULL), che indicano in modo esplicito una trasformazione di identità per la rispettiva fase. I valori dei metadati ST.2086 devono essere compilati con dati validi.

Posizione byte Lunghezza campo (byte) Content Tipo di dati
da 0 a 3 4 Firma del tipo 'MHC2' (4D484332h) MHC2Type
da 4 a 7 4 Offset all'inizio dell'elemento dati tag uInt32Number
da 8 a 13 4 Dimensione dell'elemento dati tag uInt32Number

Definizione della struttura MHC2Type

Posizione byte Lunghezza campo (byte) Content Tipo di dati
da 0 a 3 4 Firma del tipo 'MHC2' (4D484332h)
da 4 a 7 4 Riservato, impostato su 0
da 8 a 11 4 Numero di voci 1DLUT (4096 o meno) [1]
FACOLTATIVO: 0 = Trasformazione identità
uInt32Number
Da 12 a 15 4 ST.2086 min luminance in nits S15Fixed16Number
Da 16 a 19 4 ST.2086 picco di luminanza in nits S15Fixed16Number
Da 20 a 23 4 Offset in byte alla matrice [2]
FACOLTATIVO: 0 = Trasformazione identità
uInt32Number
Da 24 a 27 4 Offset in byte a rosso 1DLUT [2] uInt32Number
da 28 a 31 4 Offset in byte a 1DLUT verde [2] uInt32Number
da 32 a 35 4 Offset in byte a blu 1DLUT [2] uInt32Number

[1] Il sistema operativo interpolerà i dati al conteggio delle voci supportate dall'hardware.

[2] Gli offset all'interno della struttura MHC2Type sono relativi all'inizio della struttura, non al file.

Definizione matrice

Posizione byte Lunghezza campo (byte) Content Tipo di dati
da 0 a 23 24 Matrice di regolazione XYZ da 3x4 a XYZ
archiviato nell'ordine principale della riga, la colonna 4 viene ignorata [1]
s15Fixed16Number

[1] La struttura matrice è ridimensionata per adattarsi a 12 elementi per una matrice 3x4 nell'ordine principale della riga. Tuttavia, Windows usa solo i dati dalle tre colonne a sinistra, definendo in modo efficace una matrice 3x3. Ad esempio, archiviare questi 12 valori in ordine lineare:

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

produce la matrice seguente:

Prima colonna Seconda colonna Terza colonna
a b c
d e f
g h i

Nota

Come descritto nella matrice di conversione dello spazio dei colori, non includere l'oggetto RGB di origine a XYZ o XYZ per indirizzare le trasformazioni della matrice RGB, poiché vengono gestite automaticamente dal driver. L'oggetto RGB di destinazione viene definito come codifica utilizzata durante la trasmissione di colori sul filo di visualizzazione; in genere le primarie BT.709 o BT.2020.

Definizione 1DLUT

Posizione byte Lunghezza campo (byte) Content Tipo di dati
da 0 a 3 4 Firma del tipo 'sf32' (73663332h)
da 4 a 7 4 Riservato, impostato su 0
da 8 a fine Variabile (da 0 a 16384) Valori di calibrazione LUT normalizzati in [0.0, 1.0] s15Fixed16Number

Nota

Come descritto in Target ReGamma, questa LUT opera nello spazio colore del formato di filo dopo la codifica della funzione di trasferimento.

Nota

Se le misurazioni o la curva di calibrazione richiedono meno di 4096 voci LUT, archiviare solo il numero di voci necessarie e specificare il conteggio nella struttura MHC2Type. Ad esempio, la LUT di identità più semplice richiede solo due voci impostate su 0,0 e 1,0. Il sistema operativo interpolerà il conteggio delle voci supportate dall'hardware.

Nuove API di gestione dei profili ICC di visualizzazione

Nota

Le indicazioni contenute in questa sezione si applicano a qualsiasi profilo ICC visualizzato, indipendentemente dal fatto che contenga o meno dati MHC.

Dopo aver generato un profilo ICC MHC, esegui il provisioning nel sistema Windows per la visualizzazione di destinazione. Nelle versioni precedenti di Windows si userebbero le funzioni di gestione dei profili di Windows Color System (WCS) per eseguire questa operazione. Anche se è possibile continuare a usare queste API esistenti, Windows 10, la versione 2004 aggiunge un set di NUOVE API moderne a WCS specializzate per la gestione dei profili di colore ICC. Queste API sono tutte precedute da "ColorProfile":

  • ColorProfileAddDisplayAssociation
  • ColorProfileRemoveDisplayAssociation
  • ColorProfileSetDisplayDefaultAssociation
  • ColorProfileGetDeviceCapabilities

Nota

L'API precedente fornisce funzionalità per cui non esiste un equivalente dell'API WCS esistente.

  • ColorProfileGetDisplayList
  • ColorProfileGetDisplayDefault
  • ColorProfileGetDisplayUserScope

Un flusso di lavoro tipico usando le API ColorProfile per effettuare il provisioning di un profilo ICC MHC nel sistema è:

  1. Usare ColorProfileGetDeviceCapabilities per determinare se il sistema supporta la nuova pipeline di trasformazione del colore. Anche se non lo fa, potrebbe comunque essere utile effettuare il provisioning del profilo per fornire metadati ST.2086 supplementari.
  2. Usare InstallColorProfile (API WCS esistente) per installare il profilo di colore. Che aggiunge il profilo all'elenco dei profili disponibili per l'uso nel sistema.
  3. Usare ColorProfileGetDisplayUserScope per determinare se l'utente di Windows ha eseguito l'override delle associazioni di profilo predefinite del sistema e usa i propri elenchi di associazione per utente.
  4. Usare ColorProfileAddDisplayAssociation per associare il profilo di colore a una visualizzazione (creare un profilo installato selezionabile per tale visualizzazione) e impostare facoltativamente il profilo come predefinito (il profilo attualmente attivo).

Caricatore di calibrazione dello schermo Windows avanzato

Windows ha offerto un caricatore di calibrazione del colore della visualizzazione della posta in arrivo da Windows 7. Il caricatore di calibrazione supporta la lettura dei profili ICC con i dati della pipeline di rampa gamma archiviati nei tag di profilo VCGT o MS00 privati. Il caricatore di rampa gamma deve essere attivato in modo esplicito chiamando WcsSetCalibrationManagementState.

Windows 10, versione 2004 migliora il caricatore di calibrazione in arrivo aggiungendo il supporto per i profili ICC MHC e la nuova pipeline di trasformazione del colore. La scrittura e il provisioning di un profilo MHC ICC e l'applicazione dello stato del caricatore Windows è l'unico metodo per le app per accedere alla pipeline di trasformazione del colore: non sono presenti API di accesso diretto. A differenza dei profili di rampa gamma , la lettura dei profili ICC MHC è sempre abilitata, quindi una volta che un profilo ICC MHC viene impostato come predefinito su un sistema in grado di eseguire il caricamento automatico dello stato di calibrazione.

Scenari HDR e Advanced Color con gestione automatica dei colori del sistema

Nuove tecnologie avanzate di colore, ad esempio HDR e gestione automatica dei colori, aggiungono nuove funzionalità a Windows, tra cui precisione del colore superiore e accesso a gamma di colori di visualizzazione molto più grandi; per altre informazioni, vedere Usare DirectX con Il colore avanzato nelle visualizzazioni dell'intervallo dinamico standard elevato.

La gestione avanzata dei colori e dei colori garantisce un colore di visualizzazione coerente e colorimetricamente accurato per tutte le app: legacy e moderno. Tuttavia, alcune app potrebbero eseguire la propria gestione dei colori esplicita usando profili di colore International Color Consortium (ICC).

Quando Il colore avanzato è attivo in visualizzazione SDR o HDR, il comportamento dei profili ICC viene modificato in modi non compatibili con le versioni precedenti. Se l'app funziona con i profili ICC visualizzati, Windows offre comportamenti di compatibilità per garantire che l'app continui a ottenere un comportamento corretto.

Per informazioni sul comportamento del profilo ICC e su come adattare l'app per ottimizzare la compatibilità con Il colore avanzato, fare riferimento al comportamento del profilo ICC con Il colore avanzato.