Share via


Canalización de calibración de color de visualización de hardware de Windows

En este tema se trata la calibración de color para mostrar con una nueva canalización de transformación de color de pantalla de GPU compatible con Windows 10, versión 2004 (20H1) y versiones posteriores. La canalización proporciona una precisión de color significativamente mejorada en las rutas de acceso existentes, como la canalización de rampa gamma de GDI, y agrega compatibilidad con pantallas HDR.

Este tema es para fabricantes de equipos y pantallas y proveedores de calibración de pantalla que quieren calibrar mejor las pantallas de sus clientes. La mayoría de las aplicaciones de Windows no necesitan hacer nada para beneficiarse de la canalización; pero si desarrolla aplicaciones administradas por colores, es posible que quiera tener en cuenta cómo funciona esta tecnología.

La nueva canalización de color está disponible para cualquier pantalla si la GPU cumple los requisitos del sistema. Si la pantalla es HDR o usa la administración automática de colores, hay consideraciones y requisitos adicionales. que se puede encontrar en Uso de DirectX con color avanzado en pantallas de rango dinámico alto/estándar.

Introducción

La calibración del color de visualización es el proceso de garantizar que una pantalla coincida con precisión con su espacio de colores notificado; por ejemplo, sRGB o DCI-P3 D65. Debido a las variaciones en el proceso de fabricación y otros orígenes, un panel de visualización individual podría desviarse de su especificación. Una vez que se ha calibrado una pantalla, las aplicaciones y el contenido pueden dirigirse con confianza al espacio de colores de la pantalla sin preocuparse por esa variabilidad o inexactitud.

En un nivel alto, la calibración del color de la pantalla implica estos pasos:

  1. Realice mediciones ópticas de la salida de color real de una pantalla al representar un conjunto de valores de color conocidos.
  2. En función de los datos de medición, genere una transformación de color que corrija las imprecisiones de la pantalla y genere metadatos que describan el volumen de color resultante de la pantalla.
  3. Almacene los datos de transformación de color y muestre los metadatos para su uso posterior.
  4. En tiempo de ejecución, cargue y aplique la transformación de color al búfer de fotogramas para mostrar (valores de color enviados a la pantalla) e informe de los metadatos de visualización a las aplicaciones.

Windows 10, versión 2004, proporciona una funcionalidad mejorada para los pasos 3 y 4, mientras que los fabricantes de pantalla y los proveedores de calibración son responsables de los pasos 1 y 2.

Requisitos del sistema

La nueva canalización de transformación de color requiere una GPU y un controlador de pantalla compatibles. Las arquitecturas de GPU admitidas incluyen:

  • AMD:
    • SERIE AMD RX 500 400 o posterior
    • Procesadores AMD Ryzen con Gráficos Amd
  • Intel:
    • Integrado: GPU Intel 10th Gen (Ice Lake) o posterior
    • Discreto: Intel DG1 o posterior
  • NVIDIA GTX 10xx o posterior (Pascal+)
  • Qualcomm 8CX Gen 3, o posterior; 7C Gen 3 o posterior

Nota

No se admiten conjuntos de chips intel codename Comet Lake (código de modelo de 5 dígitos).

Se necesita un controlador windows Display Driver Model (WDDM) 2.6 o posterior (publicado con Windows 10, versión 1903). Algunos proveedores de GPU necesitan un controlador más reciente, potencialmente tan nuevo como WDDM 3.0 (publicado con Windows 11, versión 21H2).

Consulta Nuevas API de administración de perfiles ICC para obtener información sobre cómo una aplicación puede determinar si la nueva canalización de transformación de color está disponible en un sistema.

Nueva canalización de transformación de color de GPU

Windows 10, versión 2004, expone una canalización de transformación de color de pantalla acelerada por GPU que consta de una matriz de color gamma lineal y 1DLUT. En comparación con la canalización de rampa gamma existente, ofrece una precisión superior, precisión y compatibilidad con pantallas de gama de colores anchos. Además, agrega compatibilidad con nuevas tecnologías, como pantallas HDR que usan señalización BT.2100.

La canalización no se puede programar directamente mediante aplicaciones y, en su lugar, solo se expone a través de perfiles MHC; consulte a continuación para obtener más detalles. Otras características del sistema operativo (SO), como la luz nocturna, también pueden usar esta canalización y el sistema operativo administra cómo compartir (redactar) o racionalizar el acceso de canalización entre varios escenarios.

Descripción de la canalización de transformación de color

La canalización de transformación de color se basa en el modelo conceptual estándar para las conversiones de espacio de color:

diagrama de bloques: degamma de origen, matriz de color, regamma de destino

El modelo puede convertir entre dos espacios de color RGB (u otros 3 canales), como sRGB a P3 D65. También puede corregir los tipos más comunes de variación de color del panel.

La canalización de transformación de color de Windows toma el modelo conceptual, expande las fases 2 (matriz de colores) y 3 (regamma de destino) en las subconfiguraciones y expone un subconjunto de las fases (2b y 3b, en verde) para las aplicaciones al programa, mientras deja el resto (blanco) controlado por el controlador:

diagrama de bloques: degamma de origen; matriz de color descomponida en rgb de origen a XYZ, XYZ a XYZ y XYZ a RGB de destino; target regamma descomponido en la función de transferencia bancaria, ajuste 1DLUT

Esas modificaciones permiten que la canalización de colores sea independiente del espacio de colores del contenido de origen, lo que puede cambiar de marco a fotograma. Además, mejora la compatibilidad con espacios de color de pantalla como BT.2100 ST.2084, que requieren optimizaciones opacas para conservar la precisión.

Fase 0: Origen (entrada de gráficos)

La entrada es el framebuffer representado desde el sistema operativo. Puede estar en uno de varios espacios de color en función del escenario, incluidos sRGB, sYCC, HDR10 o scRGB, y puede cambiar de marco a fotograma.

Fase 1: DeGamma de origen

El controlador de pantalla convierte automáticamente el contenido de origen en gamma lineal y esta fase no es programable por las aplicaciones.

Fase 2: Matriz de conversión de espacio de color

En el modelo de conversión de espacio de color estándar, la fase de matriz se puede dividir en tres matrices, que se componen (multiplican) juntas:

  • 2a: Convertir del espacio de color RGB de contenido de origen (gamma lineal) a un espacio de color absoluto; en la canalización de Windows, el espacio de color absoluto es CIEXYZ.

  • 2b: Realice cualquier ajuste en el espacio CIEXYZ, como la calibración.

  • 2c: Convierta de CIEXYZ al espacio de color RGB de destino (gamma lineal). El espacio de color RGB de destino se define como la codificación utilizada al transmitir colores sobre el cable de pantalla, normalmente BT.709 o BT.2020 primarios. No es el elemento principal real medido del panel físico.

La matriz 2a viene determinada por el contenido de origen y la matriz 2c viene determinada por el modo de señalización de la pantalla; solo la matriz 2b es accesible para las aplicaciones. El controlador multiplica los tres juntos para generar la matriz real que se va a ejecutar en hardware:

FinalMatrix = SourceRGBtoXYZ * XYZtoXYZAdjust * XYZtoTargetRGB

Nota

Dado que el controlador de pantalla es responsable del origen RGB a XYZ y de destino XYZ a conversiones RGB, la matriz que programa (fase 2b) tampoco debe incluir.

Ejemplo 1: Si no realiza ningún ajuste en los colores (paso a través), la matriz debe ser identidad, independientemente del tipo de presentación en el que se muestre.

Ejemplo 2: Si va a generar una pantalla SDR P3 D65 e implementa un perfil de "corrección sRGB" que emula sRGB en el panel, la matriz debe constar de una rotación principal de sRGB en P3 D65.

Fase 3: ReGamma de destino

Esta fase se puede dividir en dos 1DLUTs RGB, que se componen conjuntamente:

  • 3a: Codifique los datos RGB lineales de la fase 2c en la función de transferencia/gamma de la señal a través de la conexión de pantalla.

  • 3b: Realice los ajustes en el espacio gamma de destino, como la calibración.

1DLUT 3a viene determinado por el espacio de color del formato de cable de visualización; lo más común es sRGB para pantallas SDR y ST.2084 para pantallas HDR. 3b es programable por las aplicaciones y se produce después de aplicar la función de transferencia de formato de conexión. El controlador compone los dos 1DLUT para generar el 1DLUT real que se va a ejecutar en hardware:

Final1DLUT = Adjustment1DLUT(TargetReGamma(input))

Nota

Dado que el controlador es responsable de programar la función de transferencia de señal de pantalla, el 1DLUT que programa (3b) no debe incluir esa codificación. Por ejemplo, si no realiza ningún ajuste en los colores (paso a través), su 1DLUT debe ser la identidad, independientemente del espacio de color del formato de cable de visualización.

Fase 4: Destino (salida para el examen)

Este es el búfer de fotogramas que se va a examinar a través de la conexión por la GPU; en el espacio de color nativo de la pantalla y después de cualquier ajuste que haya programado. Es posible que se produzcan operaciones adicionales como la codificación YCbCr después.

Mayor precisión y precisión

La funcionalidad de etapa de matriz gamma lineal (ajuste XYZ a XYZ) se introdujo en Windows 10, versión 1709. La funcionalidad le permite realizar ajustes en colores primarios y puntos blancos, así como conversiones arbitrarias de espacio de color RGB.

La fase de ajuste 1DLUT es conceptualmente similar a la rampa gamma existente 1DLUT, pero ofrece una precisión mejorada, con hasta 4096 entradas LUT con una precisión fija de hasta 16 bits.

Nota

No todo el hardware admite el recuento completo de entradas o precisión expuestas por la canalización de color.

Compatibilidad con pantallas HDR (BT.2100)

Una limitación de la canalización de rampa gamma existente es que tiene un comportamiento indefinido cuando la pantalla usa la señalización HDR (BT.2100 ST.2084). La nueva canalización de transformación de color admite explícitamente SDR (BT.1886 o sRGB) y señalización HDR, y se escala para admitir espacios de color de formato de cable futuros. Esto se logra a través de las fases "XYZ to Target RGB" y "Wire transfer function" (azul) en el diagrama de bloques:

diagrama de bloques que identifica xyz para las fases de función rgb y de transferencia bancaria de destino

Estas dos fases, controladas automáticamente por el controlador, son responsables de codificar colores en el espacio de colores de formato de cable: por ejemplo, sRGB o BT.2020 ST.2084.

Por lo tanto, cuando programe la canalización de transformación de color, obtendrá un comportamiento bien definido en función del espacio de color del formato de conexión activo de la pantalla.

Nueva etiqueta "MHC2" para perfiles ICC

Windows no proporciona una API para controlar directamente la nueva canalización de transformación de color en tiempo de ejecución. En su lugar, la aplicación accede a la canalización escribiendo un perfil de color de International Color Consortium (ICC) con formato correcto con datos adicionales almacenados en una nueva etiqueta privada "Calibración de hardware de Microsoft" ("MHC2"). Es un modelo similar a la canalización de rampa gamma existente, que usa etiquetas ICC privadas "VCGT". Los perfiles ICC con datos de etiquetas MHC2 válidos se conocen como "perfiles icc de MHC" o "perfiles MHC".

Nota

MHC2 hace referencia a la segunda versión de la etiqueta privada, que está disponible para todos los dispositivos Windows 10, versión 2004; MHC1 se envió en una versión anterior de Windows con equipos OEM específicos.

Metadatos estáticos HDR de ST.2086 complementarios

Además de programar la nueva canalización de transformación de color, los perfiles ICC de MHC también contienen metadatos estáticos ST.2086 HDR. Estos son valores que describen el rango dinámico (luminancia) y la gama de colores de una pantalla. Se implementan ampliamente con pantallas HDR, pero son útiles para cualquier pantalla. Los valores son:

  • Luminancia pico (nits)
  • Max full frame luminance (nits)
  • Luminancia mínima (nits)
  • Colores RGB primarios (coordenadas xy)
  • Punto blanco (coordenadas xy)

El punto blanco, la luminancia máxima de marco completo y las principales de color RGB se describen mediante etiquetas ICC estándar. La luminancia máxima y mínima se describen en la etiqueta MHC2. Un perfil debe contener toda esta información para que el sistema operativo acepte el perfil y úselo para escenarios de color avanzado.

Windows racionaliza los metadatos ST.2086 de varios orígenes, incluido el perfil DE ICC de MHC, el controlador gráfico y el firmware EDID o DisplayID. Los perfiles ICC de MHC se tratan como el origen de confianza más confiable y invalidarán otros orígenes. Windows expone esta información a través de las API de funcionalidad HDR, tal y como se describe en Usar DirectX con color avanzado en pantallas de rango dinámico alto/estándar, de ese modo, las aplicaciones HDR reciben la mejor información de visualización HDR disponible.

Definición de la luminancia ST.2086 para pantallas de retroiluminación ajustables

Una pantalla puede tener una retroiluminación ajustable, por ejemplo controlada por el usuario, o controlada automáticamente por un sensor de luz ambiental. Esto introduce ambigüedad con la forma en que se deben interpretar los valores de luminancia ST.2086.

En el caso de las pantallas en las que Windows tiene control sobre la retroiluminación (normalmente para portátiles y dispositivos de panel integrados), los valores de luminancia deben describirse cuando esta luz trasera controlada por el sistema operativo está en su configuración máxima o más brillante.

En el caso de las pantallas en las que Windows no tiene control sobre la retroiluminación (normalmente para monitores externos), los valores de luminancia solo son precisos para el estado de visualización en el momento de la medición.

Requisitos de perfil de ICC

Un perfil ICC de MHC debe usar la versión 2 de especificación ICC (ICC.1:2001-04) o la versión 4 (ICC.1:2010-12/ISO 15076-1:2010). Un perfil icc de MHC debe ser un perfil de dispositivo para mostrar.

Un perfil ICC de MHC puede incluir datos de canalización de transformación de color. Las partes de la estructura MHC2 que definen la transformación de color pueden estar vacías, lo que indica explícitamente una transformación de identidad.

Un perfil ICC de MHC debe incluir metadatos ST.2086. Un perfil que contiene solo metadatos ST.2086 y no se usan datos de transformación para escenarios de calibración de pantalla HDR, en ese caso, la calibración HDR significa proporcionar información más precisa sobre la luminancia mínima/máxima y la gama de colores para aplicaciones y juegos HDR.

Reutilización de etiquetas públicas existentes

Los perfiles icc de MHC usan etiquetas públicas existentes para definir algunos de los valores de metadatos ST.2086. Todas estas etiquetas ya son necesarias para mostrar perfiles de dispositivo. Las definiciones de etiquetas y tipos de datos se pueden encontrar en las especificaciones icc.

Nombre de etiqueta Tipo de datos Valor ST.2086 Unidad notificada por Windows
redColorantTag XYZNumber Principal rojo Cromatidad (xy)
greenColorantTag XYZNumber Principal verde Cromatidad (xy)
blueColorantTag XYZNumber Principal azul Cromatidad (xy)
mediaWhitePointTag XYZNumber Punto blanco Cromatidad (xy)
luminanceTag XYZNumber Max full frame luminance Luminancia (nits)

Definición de etiqueta privada "MHC2"

Un perfil ICC de MHC debe contener una estructura de etiquetas MHC2. La matriz y los elementos de transformación de color 1DLUT se pueden establecer en 0 (NULL), que indican explícitamente una transformación de identidad para la fase correspondiente. Los valores de metadatos ST.2086 deben rellenarse con datos válidos.

Posición de bytes Longitud del campo (bytes) Contenido Tipo de datos
De 0 a 3 4 'MHC2' (4D484332h) Firma de tipo MHC2Type
De 4 a 7 4 Desplazamiento al principio del elemento de datos de etiqueta uInt32Number
De 8 a 13 4 Tamaño del elemento de datos de etiqueta uInt32Number

Definición de la estructura MHC2Type

Posición de bytes Longitud del campo (bytes) Contenido Tipo de datos
De 0 a 3 4 'MHC2' (4D484332h) Firma de tipo
De 4 a 7 4 Reservado, establecido en 0
De 8 a 11 4 Número de entradas 1DLUT (4096 o menos) [1]
OPCIONAL: 0 = Transformación de identidad
uInt32Number
De 12 a 15 4 ST.2086 min luminancia en nits S15Fixed16Number
De 16 a 19 4 ST.2086 luminancia pico en nits S15Fixed16Number
De 20 a 23 4 Desplazamiento en bytes a matriz [2]
OPCIONAL: 0 = Transformación de identidad
uInt32Number
De 24 a 27 4 Desplazamiento en bytes a rojo 1DLUT [2] uInt32Number
De 28 a 31 4 Desplazamiento en bytes a verde 1DLUT [2] uInt32Number
De 32 a 35 4 Desplazamiento en bytes a azul 1DLUT [2] uInt32Number

[1] El sistema operativo interpolará los datos al recuento de entradas compatibles con hardware.

[2] Los desplazamientos dentro de la estructura MHC2Type son relativos al principio de la estructura, no al archivo .

Definición de matriz

Posición de bytes Longitud del campo (bytes) Contenido Tipo de datos
De 0 a 23 24 Matriz de ajuste de 3 x 4 XYZ a XYZ
almacenada en orden principal de fila, se omite la columna 4 [1]
s15Fixed16Number

[1] El tamaño de la estructura de matriz se ajusta a 12 elementos para una matriz de 3x4 en orden principal de fila. Sin embargo, Windows solo usa datos de las tres columnas izquierdas, definiendo eficazmente una matriz 3x3. Por ejemplo, almacenar estos 12 valores en orden lineal:

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

genera la siguiente matriz:

Primera columna Segunda columna Tercera columna
a b c
d e f
e h i

Nota

Como se describe en Matriz de conversión de espacio de color, no incluya el origen RGB a XYZ o XYZ para las transformaciones de matriz RGB de destino, ya que el controlador las controla automáticamente. Target RGB se define como la codificación utilizada al transmitir colores sobre el cable de pantalla; normalmente BT.709 o BT.2020 primarias.

Definición 1DLUT

Posición de bytes Longitud del campo (bytes) Contenido Tipo de datos
De 0 a 3 4 'sf32' (73663332h) Firma de tipo
De 4 a 7 4 Reservado, establecido en 0
De 8 a fin Variable (de 0 a 16384) Valores de LUT de calibración normalizados a [0,0, 1,0] s15Fixed16Number

Nota

Como se describe en Target ReGamma, este LUT funciona en el espacio de colores de formato de cable después de codificar la función de transferencia.

Nota

Si las medidas o la curva de calibración necesitan menos de 4096 entradas LUT, almacene solo el recuento de entradas que realmente necesita y especifique el recuento en la estructura MHC2Type. Por ejemplo, la LUT de identidad más sencilla solo requiere dos entradas establecidas en 0.0 y 1.0. El sistema operativo se interpolará al recuento de entradas compatibles con hardware.

Nuevas API de administración de perfiles ICC para mostrar

Nota

Las instrucciones de esta sección se aplican a cualquier perfil de ICC para mostrar, tanto si contiene datos MHC como si no.

Una vez que haya generado un perfil icc de MHC, lo aprovisiona en el sistema Windows para la pantalla de destino. En versiones anteriores de Windows, usaría las funciones de administración de perfiles del Sistema de colores de Windows (WCS) para hacerlo. Aunque puedes seguir usando estas API existentes, Windows 10, versión 2004 agrega un conjunto de API nuevas y modernizadas a WCS especializadas para administrar perfiles de color ICC para mostrar. Estas API tienen el prefijo "ColorProfile":

  • ColorProfileAddDisplayAssociation
  • ColorProfileRemoveDisplayAssociation
  • ColorProfileSetDisplayDefaultAssociation
  • ColorProfileGetDeviceCapabilities

Nota

La API anterior proporciona funcionalidad para la que no hay ningún equivalente de API de WCS existente.

  • ColorProfileGetDisplayList
  • ColorProfileGetDisplayDefault
  • ColorProfileGetDisplayUserScope

Un flujo de trabajo típico que usa las API de ColorProfile para aprovisionar un perfil ICC de MHC en el sistema es:

  1. Use ColorProfileGetDeviceCapabilities para determinar si el sistema admite la nueva canalización de transformación de color. Incluso si no lo hace, es posible que siga siendo beneficioso aprovisionar el perfil para proporcionar metadatos complementarios de ST.2086.
  2. Use InstallColorProfile (una API de WCS existente) para instalar el perfil de color. Esto agrega el perfil a la lista de perfiles disponibles para su uso en el sistema.
  3. Use ColorProfileGetDisplayUserScope para determinar si el usuario de Windows ha invalidado las asociaciones de perfil predeterminadas del sistema y usa sus propias listas de asociaciones por usuario.
  4. Use ColorProfileAddDisplayAssociation para asociar el perfil de color a una pantalla (hacer que se pueda seleccionar un perfil instalado para esa pantalla) y, opcionalmente, establecer el perfil como predeterminado (el perfil activo actualmente).

Cargador mejorado de calibración de pantalla de Windows

Windows ha ofrecido un cargador de calibración de color de pantalla de la bandeja de entrada desde Windows 7. Ese cargador de calibración admite la lectura de perfiles ICC con datos de canalización de rampa gamma almacenados en etiquetas de perfil ICC privadas VCGT o MS00. El cargador de rampa gamma debe activarse explícitamente llamando a WcsSetCalibrationManagementState.

Windows 10, versión 2004 mejora el cargador de calibración de la bandeja de entrada agregando compatibilidad con perfiles ICC de MHC y la nueva canalización de transformación de color. Escribir y aprovisionar un perfil ICC de MHC y hacer que el cargador de Windows aplique su estado, es el único método para que las aplicaciones accedan a la canalización de transformación de color: no hay API de acceso directo. A diferencia de los perfiles de rampa gamma , la lectura de los perfiles icc de MHC siempre está habilitada, por lo que una vez que se establece un perfil ICC de MHC como predeterminado en un sistema capaz, su estado de calibración se carga automáticamente.

Escenarios hdr y avanzados de color con la administración automática de colores del sistema

Las nuevas tecnologías avanzadas de color, como HDR y la administración automática de colores, agregan nuevas funcionalidades a Windows, incluida la precisión superior del color y el acceso a las gamas de colores de pantalla mucho más grandes; para obtener más información, consulte Uso de DirectX con color avanzado en pantallas de rango dinámico alto/estándar.

La administración avanzada de colores y colores automáticos garantizan un color de visualización coherente y colorimétricomente preciso para todas las aplicaciones: heredadas y modernas. Sin embargo, algunas aplicaciones pueden realizar su propia administración de colores explícita mediante perfiles de color international Color Consortium (ICC).

Cuando el color avanzado está activo en pantallas SDR o HDR, el comportamiento de los perfiles icc cambia de maneras no compatibles con versiones anteriores. Si la aplicación funciona con perfiles de ICC para mostrar, Windows ofrece comportamientos de compatibilidad para asegurarse de que la aplicación sigue recibiendo un comportamiento correcto.

Para obtener información sobre los cambios en el comportamiento del perfil icc y cómo puedes adaptar tu aplicación para maximizar la compatibilidad con el color avanzado, consulta comportamiento del perfil ICC con color avanzado.