Конвейер калибровки цвета для аппаратного дисплея Windows
В этом разделе рассматривается калибровка цвета дисплея с помощью нового конвейера преобразования цвета дисплея GPU, который поддерживается Windows 10 версии 2004 (20H1) и более поздних версий. Конвейер обеспечивает значительно улучшенную точность цвета по сравнению с существующими путями, такими как конвейер гамма-пандуса GDI, и добавляет поддержку hdr-дисплеев.
Этот раздел предназначен для производителей дисплеев и КОМПЬЮТЕРов, а также поставщиков калибровки дисплеев, которые хотят лучше откалибровать дисплеи своих клиентов. Большинству приложений Windows не нужно ничего делать, чтобы воспользоваться преимуществами конвейера; но если вы разрабатываете приложения, управляемые цветом, вам может потребоваться знать, как работает эта технология.
Новый конвейер цветов доступен для любого дисплея, если GPU соответствует требованиям к системе. Если дисплей имеет формат HDR или использует автоматическое управление цветом, существуют дополнительные рекомендации и требования. который можно найти в разделе Использование DirectX с расширенным цветом на дисплеях с высоким или стандартным динамическим диапазоном.
Введение
Калибровка цвета дисплея — это процесс обеспечения точного соответствия дисплея указанному цветовом пространству; например, sRGB или DCI-P3 D65. Из-за различий в производственном процессе и других источниках отдельная панель дисплея может отклоняться от ее спецификации. После калибровки дисплея ваши приложения и содержимое могут уверенно ориентироваться на цветовое пространство дисплея, не беспокоясь об этой изменчивости или неточности.
На высоком уровне калибровка цвета дисплея включает следующие шаги:
- Выполняйте оптические измерения фактических выходных данных цвета дисплея при отрисовке набора известных значений цвета.
- На основе данных измерения создайте преобразование цвета, которое исправляет любые неточности на экране, и метаданные, описывающие результирующий объем цвета дисплея.
- Сохранение данных преобразования цвета и отображение метаданных для последующего использования.
- Во время выполнения загрузите и примените преобразование цвета к экрану framebuffer (значения цвета, отправляемые на дисплей) и сообщите о метаданных отображения в приложения.
Windows 10 версии 2004 предоставляет расширенные функциональные возможности для шагов 3 и 4, а производители дисплеев и поставщики калибровки отвечают за шаги 1 и 2.
Требования к системе
Для нового конвейера преобразования цвета требуется поддерживающий GPU и драйвер дисплея. Поддерживаемые архитектуры GPU:
- AMD:
- AMD RX серии 500 400 или более поздней версии
- Процессоры AMD Ryzen с Графикой
- Intel:
- Интегрированная: Intel 10-го поколения GPU (Ice Lake) или более поздней версии
- Дискретный: Intel DG1 или более поздней версии
- NVIDIA GTX 10xx или более поздней версии (Pascal+)
- Qualcomm 8CX 3-го поколения или более поздней версии; 7C 3-го поколения или более поздней версии
Примечание
Наборы микросхем Intel с кодовым именем Comet Lake (5-значный код модели) не поддерживаются.
Требуется драйвер Windows Display Driver Model (WDDM) 2.6 или более поздней версии (выпущенный в Windows 10 версии 1903). Некоторым поставщикам GPU требуется более новый драйвер, который может быть новым, как WDDM 3.0 (выпущенный с Windows 11 версии 21H2).
Сведения о том, как приложение может определить, доступен ли новый конвейер преобразования цвета в системе, см. в статье Новые API управления профилем ICC для отображения .
Новый конвейер преобразования цвета GPU
Windows 10 версии 2004 предоставляет конвейер преобразования цвета дисплея с ускорением GPU, состоящий из линейной гамма-цветовой матрицы и 1DLUT. По сравнению с существующим конвейером гамма-пандуса он обеспечивает превосходную точность, точность и поддержку широкоцветных дисплеев цветовой гаммы. Кроме того, добавлена поддержка новых технологий, таких как HDR-дисплеи, использующие сигнализацию BT.2100.
Конвейер не программируется напрямую приложениями и предоставляется только через профили MHC; Дополнительные сведения см. ниже. Другие функции операционной системы ( ОС), такие как ночной свет, также могут использовать этот конвейер, и ОС управляет способом совместного использования (создания) и (или) рационализации доступа к конвейеру между несколькими сценариями.
Описание конвейера преобразования цвета
Конвейер преобразования цвета основан на стандартной концептуальной модели для преобразования цветового пространства:
Модель может преобразовывать любые два RGB (или другие 3-канальные) цветовые пространства, например sRGB, в P3 D65. Он также может исправить наиболее распространенные типы цветовых вариаций панелей.
Конвейер преобразования цвета Windows принимает концептуальную модель, развертывает этапы 2 (цветовая матрица) и 3 (целевая regamma) на вложенные этапы и предоставляет подмножество этапов (2b и 3b, зеленым цветом) для программирования приложений, оставляя оставшуюся часть (белую) управляется драйвером:
Эти изменения позволяют конвейеру цвета не зависеть от цветового пространства исходного содержимого, которое может изменяться в зависимости от фрейма. Кроме того, он улучшает совместимость с цветовыми пространствами дисплея, такими как BT.2100 ST.2084, которые требуют непрозрачных оптимизаций для сохранения точности.
Этап 0: источник (графический ввод)
Входные данные — это отрисованный фреймбуфер из ОС. Он может быть в одном из нескольких цветовых пространств в зависимости от сценария, включая sRGB, sYCC, HDR10 или scRGB, и может изменяться в зависимости от кадра.
Этап 1. Источник DeGamma
Драйвер отображения автоматически преобразует исходное содержимое в линейную гамму, и этот этап не программируется приложениями.
Этап 2. Матрица преобразования цветового пространства
В стандартной модели преобразования цветового пространства этап матрицы можно разбить на три матрицы, которые объединяются (умножаются) вместе:
2a: Преобразование цветового пространства RGB исходного содержимого (линейного гамма) в абсолютное цветовое пространство; в конвейере Windows абсолютным цветовым пространством является CIEXYZ.
2b: Выполните любые корректировки в пространстве CIEXYZ, например калибровку.
2c: Преобразование из CIEXYZ в целевое цветовое пространство RGB (линейная гамма). Целевое цветовое пространство RGB определяется как кодировка, используемая при передаче цветов по проводу дисплея, как правило, BT.709 или BT.2020 primaries. Это не фактические измеряемые первичные экземпляры физической панели.
Матрица 2a определяется исходным содержимым, а матрица 2c — режимом сигнализации дисплея; Только матрица 2b доступна для приложений. Драйвер умножает эти три значения, чтобы создать фактическую матрицу, выполняемую на оборудовании:
FinalMatrix = SourceRGBtoXYZ * XYZtoXYZAdjust * XYZtoTargetRGB
Примечание
Так как драйвер дисплея отвечает за исходные преобразования RGB в XYZ и целевые преобразования XYZ в RGB, матрица, которую вы программируете (этап 2b), не должна включать ни одно из них.
Пример 1. Если вы не выполняете корректировку цветов (сквозную), то матрица должна быть удостоверением независимо от типа отображения, на который вы выводите данные.
Пример 2. Если вы выводите данные на дисплей SDR P3 D65 и реализуете профиль проверки правописания sRGB, который эмулирует sRGB на панели, то матрица должна состоять из основного поворота из sRGB в P3 D65.
Этап 3. Целевой объект ReGamma
Этот этап можно разделить на два RGB 1DLUT, которые состоят вместе:
3a: Кодирование линейных RGB-данных из этапа 2c в функцию передачи/гамма сигнала по проводу дисплея.
3b: Выполните любые корректировки в целевом гамма-пространстве, например калибровку.
1DLUT 3a определяется цветовым пространством формата отображения провода; Чаще всего это sRGB для дисплеев SDR и ST.2084 для дисплеев HDR. 3b программируется приложениями и возникает после применения функции передачи формата провода. Драйвер состоит из двух 1DLUT для создания фактического 1DLUT для выполнения на оборудовании:
Final1DLUT = Adjustment1DLUT(TargetReGamma(input))
Примечание
Так как драйвер отвечает за программирование функции передачи сигналов отображения, программируемый код 1DLUT (3b) не должен включать эту кодировку. Например, если вы не выполняете корректировку цветов (сквозная передача), то 1DLUT должен быть идентификатором независимо от цветового пространства формата отображения.
Этап 4. Целевой объект (вывод для сканирования)
Это фреймбуфер, который будет отсканирован по проводу с помощью GPU; в собственном цветовом пространстве дисплея и после всех запрограммированных настроек. После этого могут выполняться дополнительные операции, такие как кодирование YCbCr.
Более высокая точность и точность
Возможность линейной гамма-матрицы (от XYZ до XYZ) была представлена в Windows 10 версии 1709. Эта возможность позволяет выполнять корректировки основных цветов и белых точек, а также произвольные преобразования цветов rgb-пространства.
Этап корректировки 1DLUT концептуально аналогичен существующей гамма-рампы 1DLUT, но обеспечивает повышенную точность с до 4096 LUT записей с точностью до 16 бит фиксированной точки.
Примечание
Не все оборудование поддерживает полное количество записей или точность, предоставляемые конвейером цвета.
Поддержка дисплеев HDR (BT.2100)
Ограничение существующего конвейера гамма-пандуса заключается в том, что он имеет неопределенное поведение, когда дисплей использует сигнализацию HDR (BT.2100 ST.2084). Новый конвейер преобразования цвета явно поддерживает как SDR (BT.1886 или sRGB), так и сигналы HDR, а также масштабируется для поддержки будущих цветовых пространств в формате провода. Это достигается с помощью этапов "XYZ to Target RGB" и "Функция передачи данных" (синий) на блок-схеме:
Эти два этапа, которые управляются драйвером автоматически, отвечают за кодирование цветов в цветовом пространстве формата провода: например, sRGB или BT.2020 ST.2084.
Таким образом, при программировании конвейера преобразования цвета вы получаете четко определенное поведение на основе активного цветового пространства формата провода дисплея.
Новый тег MHC2 для профилей ICC
Windows не предоставляет API для непосредственного управления новым конвейером преобразования цвета во время выполнения. Вместо этого приложение обращается к конвейеру, записывая правильно отформатированный цветовой профиль Международного консорциума цветов (ICC) с дополнительными данными, хранящимися в новом частном теге Microsoft Hardware Calibration (MHC2). Это аналогичная модель существующего конвейера гамма-пандуса , в котором используются частные теги ICC "VCGT". Профили ICC с допустимыми данными тегов MHC2 называются профилями MHC ICC или MHC.
Примечание
MHC2 — это вторая версия частного тега, доступная для всех устройств с Windows 10 версии 2004; MHC1 поставляется в более раннем выпуске Windows с конкретными компьютерами OEM.
Дополнительные статические метаданные ST.2086 HDR
Помимо программирования нового конвейера преобразования цвета, профили MHC ICC также содержат статические метаданные ST.2086 HDR. Это значения, описывающие динамический диапазон (яркость) дисплея и цветовую гамму. Они широко реализованы с дисплеями HDR, но полезны для любого дисплея. Значения качества производительности:
- Пиковая яркость (ниты)
- Максимальная яркость полного кадра (нит)
- Минимальная яркость (гниды)
- Основные цвета RGB (координаты xy)
- Белая точка (координаты xy)
Белая точка, максимальная яркость полного кадра и основные цвета RGB описаны с помощью стандартных тегов ICC. Пиковая и минимальная яркость описаны в теге MHC2. Профиль должен содержать все эти сведения, чтобы ОПЕРАЦИОННая система принимала профиль и использовать ее для сценариев расширенного цвета.
Windows рационализирует метаданные ST.2086 из нескольких источников, включая профиль MHC ICC, графический драйвер и встроенное ПО EDID или DisplayID. Профили MHC ICC считаются наиболее надежным источником и переопределяют другие источники. Windows предоставляет эти сведения через API-интерфейсы возможностей HDR, как описано в статье Использование DirectX с дополнительными цветами на дисплеях с высоким или стандартным динамическим диапазоном. Таким образом приложениям HDR предоставляются наилучшие доступные сведения о hdr-дисплеях.
Определение яркости ST.2086 для регулируемых дисплеев подсветки
Дисплей может иметь регулируемую подсветку, например управляется пользователем или автоматически управляется датчиком внешнего освещения. Это вызывает неоднозначность при интерпретации значений яркости ST.2086.
Для дисплеев, на которых Windows управляет подсветкой (обычно для ноутбуков и встроенных панелей), значения яркости должны описывать, когда эта подсветка, контролируемая ОС, находится на максимальном или самом ярком уровне.
Для дисплеев, на которых Windows не контролирует подсветку (обычно для внешних мониторов), значения яркости точны только для состояния дисплея во время измерения.
Требования к профилю ICC
Профиль MHC ICC должен использовать спецификацию ICC версии 2 (ICC.1:2001-04) или версии 4 (ICC.1:2010-12/ISO 15076-1:2010). Профиль MHC ICC должен быть профилем устройства отображения.
Профиль MHC ICC может содержать данные конвейера преобразования цвета. Части структуры MHC2, определяющие преобразование цвета, могут быть пустыми, что явно указывает на преобразование идентификаторов.
Профиль MHC ICC должен содержать метаданные ST.2086. Профиль, содержащий только метаданные ST.2086 и не содержащий данные преобразования, используется для сценариев калибровки дисплея HDR. В этом случае калибровка HDR означает предоставление более точных сведений о минимальной и максимальной яркости и цветовой гамме для приложений и игр HDR.
Повторное использование существующих общедоступных тегов
Профили MHC ICC используют существующие общедоступные теги для определения некоторых значений метаданных ST.2086. Все эти теги уже необходимы для отображения профилей устройств. Определения тегов и типов данных можно найти в спецификациях ICC.
Имя тега | Тип данных | Значение ST.2086 | Единица измерения, сообщаемая Windows |
---|---|---|---|
redColorantTag | XYZNumber | Красный основной | Хроматичность (xy) |
greenColorantTag | XYZNumber | Зеленый основной | Хроматичность (xy) |
blueColorantTag | XYZNumber | Синяя основная | Хроматичность (xy) |
mediaWhitePointTag | XYZNumber | Белая точка | Хроматичность (xy) |
luminanceTag | XYZNumber | Максимальная яркость полного кадра | Яркость (ниты) |
Определение частного тега MHC2
Профиль MHC ICC должен содержать одну структуру тегов MHC2. Элементы преобразования цвета matrix и 1DLUT могут иметь значение 0 (NULL), что явно указывает на преобразование идентификаторов для соответствующего этапа. Значения метаданных ST.2086 должны быть заполнены допустимыми данными.
Положение байтов | Длина поля (байты) | Содержимое | Тип данных |
---|---|---|---|
От 0 до 3 | 4 | Сигнатура типа "MHC2" (4D484332h) | MHC2Type |
От 4 до 7 | 4 | Смещение до начала элемента данных тега | uInt32Number |
от 8 до 13 | 4 | Размер элемента данных тега | uInt32Number |
Определение структуры MHC2Type
Положение байтов | Длина поля (байты) | Содержимое | Тип данных |
---|---|---|---|
От 0 до 3 | 4 | Сигнатура типа "MHC2" (4D484332h) | |
От 4 до 7 | 4 | Зарезервировано, задайте значение 0 | |
От 8 до 11 | 4 | Количество записей 1DLUT (4096 или меньше) [1] НЕОБЯЗАТЕЛЬНО: 0 = преобразование удостоверения |
uInt32Number |
от 12 до 15 | 4 | ST.2086 min luminance in nits | S15Fixed16Number |
от 16 до 19 | 4 | Пиковая яркость ST.2086 в нитах | S15Fixed16Number |
от 20 до 23 | 4 | Смещение в байтах до матрицы [2] НЕОБЯЗАТЕЛЬНО: 0 = преобразование идентификации |
uInt32Number |
От 24 до 27 | 4 | Смещение в байтах до красного 1DLUT [2] | uInt32Number |
От 28 до 31 | 4 | Смещение в байтах до зеленого 1DLUT [2] | uInt32Number |
От 32 до 35 | 4 | Смещение в байтах до синего 1DLUT [2] | uInt32Number |
[1] Ос будет интерполировать данные по количеству записей, поддерживаемых оборудованием.
[2] Смещения в структуре MHC2Type относятся к началу структуры, а не к файлу.
Определение матрицы
Положение байтов | Длина поля (байты) | Содержимое | Тип данных |
---|---|---|---|
От 0 до 23 | 24 | Матрица корректировки от 3x4 от XYZ до XYZ хранящийся в основном порядке строк, столбец 4 игнорируется [1] |
s15Fixed16Number |
[1] Размер структуры матрицы соответствует 12 элементам для матрицы 3x4 в порядке основных строк. Однако Windows использует только данные из трех левых столбцов, эффективно определяя матрицу 3x3. Например, хранение этих 12 значений в линейном порядке:
[a, b, c, 0, d, e, f, 0, g, h, i, 0]
создает следующую матрицу:
Первый столбец | Второй столбец | Третий столбец |
---|---|---|
а | b | с |
d | й | f |
н | h | i |
Примечание
Как описано в разделе Матрица преобразования цветового пространства, не включайте исходный RGB в XYZ или XYZ для целевых преобразований матриц RGB, так как они обрабатываются автоматически драйвером. Целевой RGB определяется как кодировка, используемая при передаче цветов по проводу дисплея; обычно это первичные приложения BT.709 или BT.2020.
Определение 1DLUT
Положение байтов | Длина поля (байты) | Содержимое | Тип данных |
---|---|---|---|
от 0 до 3 | 4 | 'sf32' (73663332h) Type Signature | |
от 4 до 7 | 4 | Зарезервировано, задайте значение 0 | |
От 8 до конца | Переменная (от 0 до 16384) | Значения LUT калибровки нормализованы до [0,0, 1,0] | s15Fixed16Number |
Примечание
Как описано в разделе Target ReGamma, этот LUT работает в цветовом пространстве в формате провода после кодирования функции передачи.
Примечание
Если для кривых измерений или калибровки требуется менее 4096 записей LUT, сохраните только нужное количество записей и укажите их в структуре MHC2Type. Например, для простейшей идентификации LUT требуется только две записи, равные 0.0 и 1.0. Операционная система будет интерполироваться по количеству записей, поддерживаемых оборудованием.
Новые API-интерфейсы управления профилями ICC для отображения
Примечание
Рекомендации в этом разделе относятся к любому отображаемому профилю ICC независимо от того, содержит ли он данные MHC.
После создания профиля MHC ICC вы подготавливаете его в системе Windows для целевого дисплея. В более ранних версиях Windows для этого использовались функции управления профилями Windows Color System (WCS). Хотя вы можете продолжать использовать эти существующие API, Windows 10 версии 2004 добавляет набор новых модернизированных API в WCS, которые предназначены для управления профилями цвета дисплея ICC. Все эти API имеют префикс ColorProfile:
- ColorProfileAddDisplayAssociation
- ColorProfileRemoveDisplayAssociation
- ColorProfileSetDisplayDefaultAssociation
- ColorProfileGetDeviceCapabilities
Примечание
Приведенный выше API предоставляет функциональные возможности, для которых не существует эквивалента API WCS.
- ColorProfileGetDisplayList
- ColorProfileGetDisplayDefault
- ColorProfileGetDisplayUserScope
Типичный рабочий процесс, использующий API ColorProfile для подготовки профиля MHC ICC в системе:
- Используйте ColorProfileGetDeviceCapabilities , чтобы определить, поддерживает ли система новый конвейер преобразования цвета. Даже если это не так, может быть полезно подготовить профиль для предоставления дополнительных метаданных ST.2086.
- Используйте InstallColorProfile (существующий API WCS) для установки цветового профиля. При этом профиль добавляется в список профилей, доступных для использования в системе.
- Используйте ColorProfileGetDisplayUserScope , чтобы определить, переопределен ли пользователь Windows сопоставления профилей по умолчанию и использует ли он собственные списки сопоставлений для каждого пользователя.
- Используйте ColorProfileAddDisplayAssociation , чтобы связать цветной профиль с дисплеем (сделать установленный профиль выбранным для этого дисплея) и при необходимости задайте профиль по умолчанию (текущий активный профиль).
Расширенный загрузчик калибровки дисплея Windows
Windows предлагает загрузчик калибровки цвета для отображения в папке "Входящие" с Windows 7. Этот загрузчик калибровки поддерживает чтение профилей ICC с данными конвейера гамма-рампы , хранящимися в тегах профилей VCGT или MS00. Загрузчик гамма-рампы должен быть явно включен путем вызова WcsSetCalibrationManagementState.
В Windows 10 версии 2004 улучшен загрузчик калибровки папки "Входящие", добавлена поддержка профилей MHC ICC и нового конвейера преобразования цвета. Запись и подготовка профиля MHC ICC и применение загрузчика Windows к его состоянию — единственный способ доступа приложений к конвейеру преобразования цвета: api прямого доступа отсутствуют. В отличие от профилей гамма-пандуса , чтение из профилей MHC ICC всегда включено, поэтому, когда профиль MHC ICC установлен по умолчанию в системе с поддержкой, его состояние калибровки загружается автоматически.
Сценарии HDR и расширенных цветов с автоматическим управлением цветом системы
Новые технологии расширенного цвета, такие как HDR и автоматическое управление цветом, добавляют новые возможности в Windows, в том числе превосходную точность цвета и доступ к гораздо более крупным цветовым гамме дисплея; Дополнительные сведения см. в статье Использование DirectX с расширенным цветом на дисплеях с высоким или стандартным динамическим диапазоном.
Расширенное управление цветом и автоматическое управление цветом обеспечивают согласованное и цветоустойчивое цветообразуемое отображение для всех приложений: как устаревших, так и современных. Однако некоторые приложения могут выполнять собственное явное управление цветом с помощью цветовых профилей Международного консорциума цветов (ICC).
Если параметр Advanced Color активен на дисплеях SDR или HDR, поведение профилей ICC отображения меняется способами, не совместимыми с обратной совместимостью. Если приложение работает с профилями ОТОБРАЖЕНИЯ ICC, Windows предлагает режим совместимости, чтобы обеспечить правильное поведение приложения.
Сведения об изменениях в поведении профиля ICC и о том, как можно адаптировать приложение для обеспечения максимальной совместимости с расширенным цветом, см. в статье Поведение профиля ICC с помощью расширенного цвета.