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:
- 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 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.
- 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 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:
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:
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:
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:
- 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.
- 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 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.
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de