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 versioni successive. La pipeline offre una maggiore accuratezza del colore sui percorsi esistenti, ad esempio la pipeline di rampa gamma GDI, e aggiunge il supporto per i display HDR.

Questo argomento è destinato a produttori di display e PC e a visualizzare provider di calibrazione che vogliono calibrare meglio i display dei clienti. La maggior parte delle app di Windows non deve eseguire alcuna operazione per trarre vantaggio dalla pipeline; ma se si sviluppano app gestite da colori, potrebbe essere necessario essere consapevoli 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, esistono considerazioni e requisiti aggiuntivi. disponibile in Usa DirectX con colore avanzato su schermi di intervallo dinamico standard/elevato.

Introduzione

La calibrazione dei colori dello schermo è il processo di garantire che una visualizzazione corrisponda accuratamente allo spazio dei colori segnalato; ad esempio sRGB o DCI-P3 D65. A causa delle variazioni del processo di produzione e di altre fonti, un singolo pannello di visualizzazione potrebbe deviare dalla specifica. Una volta che uno schermo è stato calibrato, le app e il contenuto possono puntare in modo sicuro allo spazio colore dello schermo senza preoccuparsi di tale variabilità o imprecisione.

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 corretta per eventuali imprecisioni nella visualizzazione e generare metadati che descrivono il volume di colore 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 visualizzazione 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 supportare. Le architetture GPU supportate includono:

  • AMD:
    • AMD RX 500 serie 400 o versioni successive
    • Processori AMD Ryzen con 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 di WDDM 3.0 (rilasciato con Windows 11 versione 21H2).

Per informazioni su come un'app può determinare se la nuova pipeline di trasformazione dei colori è disponibile in un sistema, vedi Nuove API di gestione del profilo 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 un'accuratezza, una precisione e un supporto superiori per i display a colori wide. Aggiunge inoltre il supporto per nuove tecnologie, ad esempio schermi 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 alle 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 colori 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 nell'origine RGB a XYZ, XYZ a XYZ e XYZ per la destinazione RGB; regamma di destinazione scomposta nella funzione di trasferimento in transito, rettifica 1DLUT

Tali modifiche consentono alla pipeline di colori di essere indipendente dallo spazio dei colori del contenuto di origine, che può cambiare in base a fotogrammi. Inoltre, migliora la compatibilità con gli spazi di colore dello schermo, 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 di conversione dello spazio dei colori standard, la fase della matrice può essere suddivisa in tre matrici, composte (moltiplicate) insieme:

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

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

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

La matrice 2a è determinata dal contenuto di origine e la matrice 2c è determinata dalla modalità di segnalazione dello schermo; solo la 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 la destinazione XYZ alle conversioni RGB, la matrice programmata (fase 2b) non deve includere neanche.

Esempio 1: se non si eseguono modifiche ai colori (pass-through), la matrice deve essere identity, 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 di primari da sRGB a P3 D65.

Fase 3: ReGamma di destinazione

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

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

  • 3b: eseguire eventuali regolazioni nello spazio gamma di destinazione, ad esempio la calibrazione.

1DLUT 3a è determinato dallo spazio colore del formato di filo di visualizzazione; più comunemente è SGB 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'effettivo 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), il valore 1DLUT deve essere identity, indipendentemente dallo spazio colore del formato di 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 le modifiche programmate. Altre operazioni, ad esempio la codifica YCbCr, potrebbero verificarsi in seguito.

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 di colore e al punto bianco, 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 un massimo di 4096 voci LUT fino a una precisione a 16 bit a virgola fissa.

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 presenta un comportamento indefinito quando lo schermo usa la segnalazione HDR (BT.2100 ST.2084). La nuova pipeline di trasformazione dei colori supporta in modo esplicito sia SDR (BT.1886 che sRGB) sia la segnalazione HDR e la scalabilità per supportare spazi di colore futuri del formato di filo. 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 le fasi della funzione rgb e wire transfer

Queste due fasi, controllate automaticamente dal driver, sono responsabili della codifica dei colori nello spazio colore del formato di filo: 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 alla pipeline scrivendo invece un profilo di colore ICC (International Color Consortium) 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 vengono definiti "profili ICC MHC" o "profili MHC".

Nota

MHC2 fa riferimento 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 st.2086

Oltre a programmare la nuova pipeline di trasformazione dei colori, i profili ICC MHC 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 sono:

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

Il punto bianco, la luminanza massima full frame e le primarie a colori RGB vengono descritte usando i tag ICC 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 a colori avanzati.

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

Definizione della luminanza ST.2086 per i display del backlight regolabile

Un display può avere un backlight regolabile, ad esempio controllato dall'utente o controllato 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 visualizzare la posizione in cui Windows ha il controllo sulla backlight (in genere per i portatili e i dispositivi del pannello integrato), i valori di dominanza 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 ICC

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

Un profilo ICC di MHC può includere i 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 ICC di MHC deve includere metadati ST.2086. Un profilo contenente solo metadati ST.2086 e non vengono usati dati di trasformazione per gli scenari di calibrazione dello schermo HDR, in tal caso la calibrazione HDR significa fornire informazioni più accurate sulla luminosità min/max e sulla gamma di colori per app e giochi HDR.

Riutilizzo dei tag pubblici esistenti

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

Nome tag Tipo di dati Valore ST.2086 Unità segnalata da Windows
redColorantTag XYZNumber Rosso primario Cromaticità (xy)
greenColorantTag XYZNumber Primario verde Cromaticità (xy)
blueColorantTag XYZNumber Blu primario Cromaticità (xy)
mediaWhitePointTag XYZNumber Punto bianco Cromaticità (xy)
luminanceTag XYZNumber Max full frame luluminanza Luminanza (nit)

Definizione del tag privato "MHC2"

Un profilo ICC di MHC deve contenere una struttura di tag MHC2. Gli elementi matrice e trasformazione colore 1DLUT 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) Contenuto 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) Contenuto 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 minore) [1]
FACOLTATIVO: 0 = Trasformazione identità
uInt32Number
Da 12 a 15 4 Luminanza minima di ST.2086 in nits S15Fixed16Number
Da 16 a 19 4 ST.2086 picco di luminanza nei 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 in rosso 1DLUT [2] uInt32Number
Da 28 a 31 4 Offset in byte in verde 1DLUT [2] uInt32Number
Da 32 a 35 4 Offset in byte a blu 1DLUT [2] uInt32Number

[1] Il sistema operativo eseguirà l'interpolazione dei 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 della matrice

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

[1] La struttura matrice viene ridimensionata in modo da adattarsi a 12 elementi per una matrice 3x4 in ordine principale di riga. Tuttavia, Windows usa solo i dati delle tre colonne a sinistra, definendo in modo efficace una matrice 3x3. Ad esempio, archiviando 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 in Matrice di conversione dello spazio dei colori, non includere l'origine RGB in XYZ o XYZ per impostare come destinazione le trasformazioni della matrice RGB, poiché vengono gestite automaticamente dal driver. Target RGB è definito come codifica utilizzata per la trasmissione dei colori sul filo di visualizzazione; in genere le primarie BT.709 o BT.2020.

Definizione 1DLUT

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

Nota

Come descritto in Target ReGamma, questo 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 effettivamente 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 eseguirà l'interpolazione al conteggio delle voci supportate dall'hardware.

Nuove API di gestione dei profili ICC per la 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) a tale scopo. Anche se puoi continuare a usare queste API esistenti, Windows 10, versione 2004 aggiunge un set di NUOVE API modernizzate 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 le quali non esiste un equivalente api WCS esistente.

  • ColorProfileGetDisplayList
  • ColorProfileGetDisplayDefault
  • ColorProfileGetDisplayUserScope

Un flusso di lavoro tipico che usa 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 (un'API WCS esistente) per installare il profilo colore. Che aggiunge il profilo all'elenco dei profili disponibili per l'uso nel sistema.
  3. Usa ColorProfileGetDisplayUserScope per determinare se l'utente di Windows ha eseguito l'override delle associazioni di profili predefinite del sistema e usa i propri elenchi di associazioni per utente.
  4. Usare ColorProfileAddDisplayAssociation per associare il profilo colore a una visualizzazione (rendere selezionabile un profilo installato per tale visualizzazione) e, facoltativamente, impostare il profilo come predefinito (il profilo attualmente attivo).

Caricatore di calibrazione dello schermo di Windows avanzato

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

Windows 10, versione 2004 migliora il caricatore di calibrazione posta 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 di Windows è l'unico metodo per le app ad accedere alla pipeline di trasformazione del colore: non esistono API di accesso diretto. A differenza dei profili gamma di rampa, la lettura dai profili ICC MHC è sempre abilitata, quindi una volta che un profilo ICC MHC è impostato come predefinito in un sistema in grado di supportare, il relativo stato di calibrazione viene caricato automaticamente.

Scenari HDR e Colori avanzati con gestione automatica dei colori del sistema

Nuove tecnologie avanzate per i colori, ad esempio HDR e la gestione automatica dei colori, aggiungono nuove funzionalità a Windows, tra cui la precisione dei colori superiore e l'accesso a gamut di colori di visualizzazione molto più grandi; per altre informazioni, vedere Usare DirectX con colore avanzato in schermi di intervallo dinamico standard/elevato.

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

Quando Il colore avanzato è attivo nei display SDR o HDR, il comportamento dei profili ICC visualizzati cambia 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 sulle modifiche apportate al comportamento del profilo ICC e su come adattare la tua app per ottimizzare la compatibilità con Il colore avanzato, fai riferimento al comportamento del profilo ICC con colore avanzato.