Canalización de calibración de color de visualización de hardware de Windows
En este tema se describe la calibración del color de visualización mediante 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 los fabricantes de pantallas y pc 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 de color de visualización es el proceso de asegurarse de que una pantalla coincide con precisión con su espacio de color notificado; por ejemplo, sRGB o DCI-P3 D65. Debido a 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 imprecisión.
En un nivel alto, la calibración del color de visualización implica estos pasos:
- Realice mediciones ópticas de la salida de color real de una pantalla al representar un conjunto de valores de color conocidos.
- En función de los datos de medida, 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.
- Almacene los datos de transformación de color y muestre los metadatos para su uso posterior.
- En tiempo de ejecución, cargue y aplique la transformación de color al framebuffer de presentación (valores de color enviados a la pantalla) e informe de los metadatos de visualización a las aplicaciones.
Windows 10, versión 2004, proporciona 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 Radeon
- 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 de 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 anchas. Además, agrega compatibilidad con nuevas tecnologías, como pantallas HDR que usan señalización BT.2100.
La canalización no es programable directamente por las 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 (redacción) 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:
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 sub-fases y expone un subconjunto de las fases (2b y 3b, en verde) para las aplicaciones para programar, mientras deja el resto (blanco) controlado por el controlador:
Esas modificaciones permiten que la canalización de colores sea independiente del espacio de color del contenido de origen, lo que puede cambiar de marco a marco. 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: Origen DeGamma
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 contenido de origen espacio de color RGB (gamma lineal) a un espacio de color absoluto; en la canalización de Windows, el espacio de color absoluto es CIEXYZ.
2b: Realice los ajustes 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 que se usa al transmitir colores a través del cable de pantalla, normalmente BT.709 o BT.2020 principales. 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 un giro principal de sRGB en P3 D65.
Fase 3: Target ReGamma
Esta fase se puede dividir en dos 1DLUT RGB, que se componen juntos:
3a: Codifique los datos RGB lineales de la fase 2c en la función de transferencia/gamma de la señal sobre el cable 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 de formato de cable de pantalla; 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 para mostrar.
Fase 4: Destino (salida para examinar)
Este es el búfer de fotogramas que se va a examinar a través del cable por la GPU; en el espacio de color nativo de la pantalla, y después de cualquier ajuste que haya programado. Operaciones adicionales, como la codificación YCbCr, pueden producirse posteriormente.
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 permite realizar ajustes en los colores principales y el punto blanco, 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 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 escalas para admitir futuros espacios de color de formato de cable. Esto se logra a través de las fases "XYZ to Target RGB" y "Wire transfer function" (blue) en el diagrama de bloques:
Estas dos fases, controladas automáticamente por el controlador, son responsables de codificar los colores en el espacio de color de formato de cable: por ejemplo, sRGB o BT.2020 ST.2084.
Por lo tanto, al programar la canalización de transformación de color, obtendrá un comportamiento bien definido en función del espacio de color del formato de cable 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 internacional (ICC) con el 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 de 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 enviado en una versión anterior de Windows con equipos OEM específicos.
Metadatos estáticos DE ST.2086 HDR complementarios
Además de programar la nueva canalización de transformación de color, los perfiles de MHC ICC también contienen metadatos estáticos DE ST.2086 HDR. Estos son valores que describen el rango dinámico (luminancia) de una pantalla y la gama de colores. 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 principales (coordenadas xy)
- Punto blanco (coordenadas xy)
Los puntos blancos, la luminancia máxima de marco completo y los colores 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 de gráficos y el firmware EDID o DisplayID. Los perfiles de ICC de MHC se tratan como el origen de mayor confianza 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 Uso de DirectX con color avanzado en pantallas de rango dinámico alto/estándar, de esa manera, 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 luz trasera ajustable, por ejemplo controlada por el usuario, o controlada automáticamente por un sensor de luz ambiente. Esto introduce ambigüedad con el modo 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 luz trasera (normalmente para portátiles y dispositivos de panel integrados), los valores de luminancia deben describir cuándo esta luz trasera controlada por 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 luz trasera (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 de ICC de MHC debe usar la especificación ICC versión 2 (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 usa ningún dato de transformación para escenarios de calibración de pantalla HDR, en ese caso la calibración HDR significa proporcionar información de la luminancia mínima y máxima y la gama de colores más precisas para aplicaciones y juegos HDR.
Reutilización de etiquetas públicas existentes
Los perfiles de 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 tipo de datos y etiquetas se pueden encontrar en las especificaciones icc.
Nombre de etiqueta | Tipo de datos | Valor ST.2086 | Unidad notificada por Windows |
---|---|---|---|
redColorantTag | XYZNumber | Red primary | 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 etiqueta 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 respectiva. 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 1DLUT azul [2] | uInt32Number |
[1] El sistema operativo interpolará los datos al recuento de entradas admitidas por 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 47 | 48 | Matriz de ajuste XYZ a XYZ de 3x4 a XYZ almacenada en orden principal de fila, se omite la columna 4 [1] |
s15Fixed16Number |
[1] La estructura de matriz tiene un tamaño para ajustarse 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, almacena estos 12 valores en orden lineal:
[a, b, c, 0, d, e, f, 0, g, h, i, 0]
genera la matriz siguiente:
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 los controla automáticamente. Rgb de destino 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 color 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 necesita realmente y especifique el recuento en la estructura MHC2Type. Por ejemplo, la identidad más sencilla LUT solo requiere dos entradas establecidas en 0.0 y 1.0. El sistema operativo se interpolará al recuento de entradas admitidas por 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, independientemente de si contiene o no datos MHC.
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 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:
- 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 st.2086 complementarios.
- 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.
- 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.
- Use ColorProfileAddDisplayAssociation para asociar el perfil de color a una pantalla (hacer que un perfil instalado se pueda seleccionar para esa presentación) y, opcionalmente, establezca 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 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 DE 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 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 compatible, su estado de calibración se carga automáticamente.
Escenarios hdr y avanzados de color con administración automática de colores del sistema
Nuevas tecnologías avanzadas de color, como HDR y administración automática de colores, agregan nuevas funcionalidades a Windows, incluida la precisión de color superior 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 garantiza un color de visualización coherente y preciso para todas las aplicaciones: tanto heredadas como modernas. Sin embargo, algunas aplicaciones pueden realizar su propia administración de colores explícita mediante perfiles de color del Consorcio internacional de colores (ICC).
Cuando Color Avanzado está activo en pantallas SDR o HDR, el comportamiento de los perfiles ICC de pantalla cambia de forma no compatible. Si la aplicación funciona con perfiles icc para mostrar, Windows ofrece comportamientos de compatibilidad para asegurarse de que la aplicación sigue teniendo 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.