探秘Windows 11:将HDR的虚拟SDR曲线转化为Gamma 2.2
Windows 11在HDR体验上取得了显著的进步,现在允许在整个桌面环境中持续启用HDR。这是通过在原生HDR10合成空间中模拟SDR色彩空间实现的,使得两种类型的内容可以并存。然而,对于“SDR”的定义有时却并不明确,因为它依赖于不同的观看条件。
通常我们有以下标准:
- Gamma 2.4 — 标准参考。暗室观看(5勒克斯)。家庭影院用途。
- Gamma 2.2 — 非标准,在不受控制的光照下(>50勒克斯)。计算机用途。
在22H2版本之后,Windows 11并未让用户选择用于SDR的色调曲线,而是使用了一种称为“分段式sRGB传输函数”的方法,原本是为电脑/网络使用设计的。虽然这个曲线理论上是gamma 2.2的近似,但在实际显示器的EOTF中并不常用。相反,gamma 2.2成为了事实上的标准,几乎所有的电脑显示器至今仍然使用它。
由于它的普及性,几乎所有网页内容和电脑游戏都以gamma-2.2输出的显示器为基础进行色彩校正,不论是有意还是无意。微软决定在HDR模式下采用分段式sRGB作为虚拟SDR曲线,这是一个失误。这会强制几乎所有应用和网页内容看起来不正确,有些甚至更加明显。
让我们以《暗黑破坏神IV》为例,一个本应黑暗且充满质感的游戏:
| |
| | ------------------------------------------- | ------------------------------------------------------- |
当HDR开启时,游戏的深阴影细节丢失,整体氛围变得灰暗,失去了深度。主要原因是——没错——Windows 11使用了分段式sRGB色调曲线。
我们可以比较sRGB与gamma 2.2的输出亮度差异:
| | | ---------------------------------------------- |
这里,gamma 2.2与sRGB之间的差异显而易见。sRGB曲线在中低调区明显更亮,使基于gamma-2.2制作的内容看起来平坦。
macOS提供了一个很好的解决方案,用户可以在显示设置中创建自定义参考模式,包括了SDR转移功能的调整。用户可以选择BT.1886(电影),纯伽玛2.2(PC用途),或者分段式sRGB(为了适应)。
解决方案:临时变通
这是一个最终需要微软来完全解决的问题。目前,我们只能通过一种临时补救办法。通过使用MHC2 ICC配置文件,我们可以将SDR的sRGB曲线转换为伽玛2.2曲线。
这种方法的一个缺点是,所有内容都会受到同样的变换,包括不需要该转换的原生HDR10内容;这些内容可能会看到略深的阴影,可能丧失一些阴影细节。你可以选择在查看原生HDR内容时禁用颜色配置文件,或者为了方便而接受稍高的对比度。
准确的曲线映射确实取决于Windows的“SDR内容亮度”值,因此我提供了几个配置文件供你选择,选择最接近你的设置的那个。转换也基于理想的映射,所以其准确性也会依赖于你的显示器及其校准质量。
下载 srgb_to_gamma2p2 颜色配置文件
操作指南
- 下载上面提供的颜色配置文件之一
- 打开Windows的“颜色管理”工具
- 点击底部左下角的“添加”
- 点击“浏览...”,然后选择你下载的颜色配置文件
- 勾选“添加为HDR配置文件”复选框(有时称为“高级颜色”)
- 点击“确定”
- 选择你添加的配置文件,然后点击“设为默认配置文件”
- 完成
备用程序/自定义配置文件
除了使用MHC2颜色配置文件外,我们还可以利用ArghyllCMS的dispwin
工具加载任意转换。这样做的好处是我们可以生成和应用任何自定义LUT,独立于颜色配置文件。这让你可以根据自己的SDR白点和伽玛功率创建转换,并且我们可以依赖Windows HDR校准工具生成的配置文件,以获得正确的HDR元数据信号。
- 下载此repo的发布.zip并解压缩到一个永久位置的文件夹。
- 使用我的在线工具生成LUT文件。
- 打开
lut.cal
,然后将从第2步生成的LUT文件内容粘贴到该文件中,完全替换原始内容。- 默认情况下,该文件包含从白点为200、伽玛功率为2.2的转换。
- 运行
srgb-to-gamma.bat
以应用转换。- 运行
revert.bat
以撤销转换。
- 运行
- 以管理员身份运行
auto-start.bat
以便在启动时自动应用转换。- 如果移动文件夹,则需要重新运行此命令,但更改
.cal
文件时不需再次运行。
- 如果移动文件夹,则需要重新运行此命令,但更改
在Windows 11的最新构建中,从某些待机状态恢复时,伽玛转换会被撤销。作为一个额外步骤,我们可以创建一个自动化任务,以便从休眠或屏幕保护器恢复后重新应用转换。
(可选)在从睡眠/屏幕保护器恢复时重新应用转换:
- 打开Windows任务计划程序(Win+R,
taskschd.msc
),双击任务名称“应用sRGB到Gamma LUT” - 在“触发器”选项卡中,点击“新建...”来添加新的触发器:
- 将“开始任务”设置为“事件发生时”
- 设置“日志”为“系统”
- 设置“源”为“Power-Troubleshooter”
- 设置“事件ID”为“1”
- 点击“确定”创建触发器,再次点击“确定”完成任务更改。
此外,@mspeedo 创建了一个AutoHotkey脚本来按需应用不同SDR白点和伽玛功率的转换,还添加了一个热键来切换转换,这对于查看原生HDR内容非常有用。你可以在这里查看它:链接。
附录
Windows SDR 内容亮度表格
| SDR 亮度值 | SDR 白屏亮度 | | -------------- | -------------- | | 0 | 80 nit | | 5 | 100 nit | | 10 | 120 nit | | 30 | 200 nit | | 55 | 300 nit | | 80 | 400 nit | | 100 | 480 nit |
注意事项
- 伽玛修正会在关闭HDR(包括通过键盘快捷键)时保留,使SDR显得更暗。关闭HDR时,请确保在“颜色管理”工具中重新应用你的SDR颜色配置文件(“设为默认配置文件”)。同样,重新启用HDR时,确保重新应用纠正的颜色配置文件。如果你没有SDR颜色配置文件,请点击“添加”并选择_sRGB IEC61966-2.1_作为你的默认配置文件。
- 如果你有NVIDIA GPU,请确保NVCP桌面颜色设置设为“精确”或“增强”模式;转换不会在“参考”模式下应用。
- 所有配置文件标记为峰值亮度800 nit,黑色水平0。
- 超过分散式SDR白色的像素值保持不变;在接近1的地方添加了一个软肩,以使曲线映射与HDR值平滑过渡。
- 已在LG C2 OLED上测试。