自适应亮度
自适应亮度是系统自动设置的屏幕亮度,以响应环境光传感器读数。 自适应亮度为用户提供更响应的显示体验,其中亮度会自动适应用户的环境。
Windows 11 中的新增功能
对于希望将光传感器集成到 Windows 11 的 OEM 来说,通过采用一种分桶化环境光响应 (ALR) 曲线的全新模式,自动亮度的实现已被彻底简化。 有关详细信息,请参阅 Windows 11 的环境光响应曲线变化。
新方法不再依赖于之前可由 OEM 配置的光照度与亮度曲线。 默认曲线更稳定且更可靠,并且更易于集成。
设置页面有了新的视觉效果。 本文介绍了“显示设置”页的更新。 用户可以切换内容自适应亮度控制(CABC)。
Windows 10 版本 1903(19H1)中的以下改进仍在进行中:
- 默认情况下启用自动亮度
- 用户可以使用操作中心滑块控制亮度
- 自适应亮度注册表配置参数
优化显示亮度的调节步骤和过渡
显示设备提供的亮度级别数量很重要。 可以使用两种方法:
- 基于百分比:使用百分比值控制亮度,支持 101 级别(零到 100)的反光控制。
- 基于尼特(推荐):使用尼特值控制亮度可以更精细地控制背光级别。 因此,可实现非常平滑和准确的亮度转换。
Windows 会检测显示驱动程序公开的亮度接口类型,并选择最合适的界面。 如果显示驱动程序仅公开DXGK_BRIGHTNESS_INTERFACE_2接口,系统将使用百分比值控制亮度。 如果显示驱动程序公开 DXGK_BRIGHTNESS_INTERFACE_3 接口,Windows 10 版本 1809 及更高版本将使用尼特值控制亮度。 DXGK_BRIGHTNESS_INTERFACE_3 接口在较旧版本的 Windows 上将被忽略。 如果显示驱动程序同时公开 DXGK_BRIGHTNESS_INTERFACE_2 和 DXGK_BRIGHTNESS_INTERFACE_3 接口,Windows 10 版本 1809 及更高版本将使用尼特值控制亮度。 下层 Windows 版本将使用百分比值控制亮度。
亮度和显示注意事项
如果系统支持通过显示驱动程序公开 DXGK_BRIGHTNESS_INTERFACE_3 接口来设置亮度(以尼特为单位),则应正确校准显示器。 校准应在各种强度下进行,在显示白色背景时,使用高质量的亮度计在显示器的不同位置测量亮度值。 测量显示亮度的工具称为亮度计量或亮度表,可从电子设备供应商和在线零售商购买。
必须仔细优化显示实现。 具体说来:
- 确保显示器能够在所有可访问的亮度级别上顺利调暗。
- 应公开足够的显示亮度级别,以确保平滑变暗。 建议至少 101 个级别。
使用尼特值控制亮度
从 Windows 10 版本 1809 开始,在显示驱动程序公开 DXGK_BRIGHTNESS_INTERFACE_3 接口的设备上,系统将使用尼特值控制亮度。 尼特(坎德拉每平方米)是一个国际单位制(SI)亮度单位。 当设备具有正确校准的显示器和正确校准的传感器时,亮度控制应开箱即用。 这些设备上不需要任何 ALR 曲线。
对于这些系统,光传感器和显示器必须准确校准。 Windows 10 版本 1809 可容忍在这些系统的制造过程中可能发生的小不准确。 组件的放置、玻璃的透明度以及类似因素可以极大地影响光照度和亮度。 因此,基于尼特亮度的系统应至少在最终外形规格设计完成后进行一次校准,而不是在设计外形规格时进行校准,然后将结果应用于最终外形规格。
每个设备生产期间的按设备校准可提供最佳的最终结果。
使用百分比值控制亮度
不支持尼特亮度控制的系统必须支持百分比值。 在百分比系统上,需要反光百分比和亮度值之间的映射。 反光百分比到亮度值的映射应遵循指数模式。 在基于尼特亮度的系统上,由于每个尼特级别预计都经过校准,因此会提供一个默认的百分比到尼特的映射。 这个默认的百分比到尼特的映射利用人类视觉和色彩科学研究,提供了一个感知线性的亮度调节滑块。 只要按照 DXGK_BRIGHTNESS_INTERFACE_3中所述正确校准 nit 水平,零%和 1% 之间的感知亮度差将自动等效于 1% 和 2%之间的感知亮度差,依此类推。
人类视觉对低光级别的屏幕亮度输出小变化更敏感,因此应将更多的反光级别分配给较低的亮度范围,以适应更流畅的过渡。 例如,1% 和 2% 之间的尼特差异应小于 10% 和 11% 之间的差异。 这意味着,屏幕最大亮度的 50% 不会映射到 50% 的背光级别。
对于可接受的用户体验,最低级别的亮度(0%)必须导致低但可读的显示。 用户可能会在将亮度设置为 0% 时陷入难以摆脱的情况,尤其是在那些将该值映射到 0 nits 的设备上,因为用于调节屏幕亮度的控件将不再可见。 屏幕在亮度为 0% 时,必须足够亮,用户才能与屏幕上的 UI 交互。 在支持 DXGK_BRIGHTNESS_INTERFACE_3 接口的设备上,Windows 会自动将 0% 限制为最低 5 尼特。
Windows 11 的环境光响应曲线的变化
对自适应亮度的 Windows 10 实现提出了一些担忧:
- 环境光传感器读数不佳,尤其是在非常黑暗或非常明亮的环境中
- 显示面板无法适应每个百分比或尼特值
- 难以找到最佳光照度和亮度的映射关系
这些问题会导致:
- 由于环境光传感器(ALS)不准确,显示亮度不断波动
- 在低光环境中,尼特值的细微变化尤为明显
为了解决这些问题,环境光响应已更改为使用桶状曲线。 勒克斯区间与屏幕亮度百分比之间的默认值映射关系如下表所示。 OEM 可以通过自定义选项选择退出分区曲线并使用旧曲线。
区间 | 最小勒克斯 | 最大勒克斯 | 百分比 |
---|---|---|---|
1 | 0 | 10 | 10 |
2 | 5 | 50 | 25 |
3 | 15 | 100 | 40 |
4 | 60 | 300 | 55 |
5 | 150 | 400 | 70 |
6 | 250 | 650 | 85 |
7 | 350 | 2000 | 100 |
8 | 1000 | 7000 | 115 |
9 | 5000 | 一万 | 130 |
下图比较了从 Windows 10 到 Windows 11 的默认 ALR 曲线的更改。 默认曲线的示例位于左侧,Windows 11 的桶化默认曲线位于右侧。 下面所示的曲线只是可以设置为默认值的曲线示例。 设备的实际默认曲线取决于多种因素,可能会因设备制造商而异。
注意
从 Windows 10 升级到 Windows 11 的系统:在现有 Windows 10 自适应亮度要求之外,不会对硬件或固件进行更改,这些是 Windows 11 的内部更改。 更新到 Windows 11 时,现有的支持 Windows 10 自适应亮度的系统将体验新的分桶式曲线。
分区亮度自动调节功能概述
为了减少由于 ALS(环境光传感器)读数波动而导致的频繁显示亮度波动,我们引入了分区亮度自动调节。 一系列勒克斯值映射到单个目标亮度百分比值。 然后,显示亮度将转换为目标百分比值。 在基于 DXGK_BRIGHTNESS_INTERFACE_2 接口的设备上,目标百分比按原样使用。 在基于 DXGK_BRIGHTNESS_INTERFACE_3 接口的设备上,目标百分比转换为相应的尼特值加以使用。 根据我们在不同光照条件下的实验,勒克斯范围被划分为七个不同的重叠区间,每个区间分配有相应的显示亮度目标。 ALS 的读数通过此查找表映射到目标亮度。 这些区间引入了必要的滞后效应,以防止在 ALS 读数变化不显著时,显示亮度出现波动。 重叠区间有助于在 ALS 读数发生大幅变化时,各区间之间实现平滑过渡。
分区亮度自动调节总是从第二个区间开始,即 55% 的目标显示亮度,因为这是用户最常遇到的光照条件。 随着亮度变化,目标过渡会移动到相应的更高或更低的区间。 滑块会根据区间过渡进行动画显示。
下面是使用默认分区亮度自动调节 (ALR) 曲线的事件示例序列:
BucketedALRCurve 从第二个区间开始,亮度目标为 55%。传感器报告 40 勒克斯;传感器报告 90 勒克斯;传感器报告 40 勒克斯;传感器报告 90 勒克斯;传感器报告 20 勒克斯;BucketedALRCurve 从第二个区间切换到第一个区间。 亮度目标现在为 40%;用户看到亮度下降了 15%;传感器报告 60 勒克斯;传感器报告 90 勒克斯;传感器报告 40 勒克斯;传感器报告 200 勒克斯;BucketedALRCurve 从第一个区间切换到第二个区间。 亮度目标现在为 55%。 用户看到亮度上升了 15%
对于此序列,即使环境光频繁波动,亮度也只上升和下降两次。
设备从第二个区间开始。 当传感器在40到90照度范围内波动时,亮度百分比不会改变,因为40和90照度都属于第二个区间。
当传感器报告 20 勒克斯时,由于 20 勒克斯不再属于第二个区间,因此设备将切换到第一个区间。 然后,亮度在几个勒克斯值之间保持稳定。 请注意,90 和 40 照度值不会将亮度移回第二个存储桶,因为这些值存在于第一个存储桶中。
当传感器报告 200 勒克斯时,由于 200 勒克斯超过了第一个区间的最大勒克斯值,因此设备将切换到第二个区间。
户外情景
某些尼特设备支持增强范围。 这意味着,如果允许亮度自动调节,亮度可以超过 100%。 通过将第六和第七个区间设置为超过 100%,当用户进入直射阳光时,这些区间将在支持增强范围的设备上被触发。
极其黑暗的情景
许多传感器无法很好地处理非常黑暗的环境,导致 ALS 值波动。 由于最低的区间最大值为 100 勒克斯,因此在这些昏暗的环境中,亮度不应频繁变化。
亮度自动调节注册表项
本节中提到的 OEM 自定义项与 Windows 11 中的以下注册表项有关:
Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AdaptiveDisplayBrightness\{23B44AF2-78CE-4943-81DF-89817E8D23FD}
键 | 格式 | 用法 |
---|---|---|
AutobrightnessLuxToNitsCurve | REG_SZ | 将 ALS 勒克斯读数转换为目标尼特值的 LUT。 示例:“1:8,2:25,5:35,10:60,20:90,40:90,100:130 ,400:170,700:200,2000:400,3000:500,4500:700” |
Windows 11 中自定义 ALR 曲线的亮度滞后
大多数系统将在 Windows 11 中默认利用桶化自动亮度曲线。 在默认的分区曲线中,将不会使用滞后和过渡。 当 OEM 选择使用自定义 ALR 曲线时,应使用以下参数。
键 | 格式 | 用法 |
---|---|---|
UpperBrightnessHysteresisLut | REG_SZ | 上限亮度滞后阈值的 LUT。 示例:“10000:50000,20000:40000,50000:10000”表示一个查找表 (LUT),其定义如下:输入为 10000 毫尼特时,对应的滞后是 50000 毫尼特,输入为 20000 毫尼特时,对应的滞后是 40000 毫尼特,输入为 50000 毫尼特时,对应的滞后是 100000 毫尼特(按此特定顺序排列) |
LowerBrightnessHysteresisLut | REG_SZ | 下限亮度滞后阈值的 LUT。 |
Windows 11 中自定义 ALR 曲线的亮度转换
键 | 格式 | 用法 |
---|---|---|
MinBrightnessTransitionNitDelta | REG_DWORD | 触发亮度过渡所需的最小亮度增量(以毫尼特为单位) |
DefaultBrightnessTransitionInterval | REG_DWORD | 两个转换点之间的默认亮度转换内部时间(以毫秒为单位) |
MinBrightnessTransitionInterval | REG_DWORD | 两个转换点之间的最小亮度转换内部时间(以毫秒为单位) |
MaxBrightnessTransitionInterval | REG_DWORD | 两个转换点之间的最大亮度转换内部时间(以毫秒为单位) |
测试用例
本部分讨论测试环境光传感器。
ALS 校准
确保环境光传感器在给定的环境光条件下经过正确的校准。 验证传感器照度读数是否准确。
ALS 校准适用于
支持自适应亮度的所有系统
ALS 校准设置和工具
- 一种可控(可调光)的光源,能够生成不同的光照度(勒克斯)级别
- 以勒克斯为单位测量光照的光照计
- MonitorBrightnessApp 或 SensorExplorer 用于可视化环境光传感器所报告的数值
ALS 校准测试过程
- 将光表放置在设备旁边。 光表应尽可能接近环境光传感器,而不会与环境光传感器进行负交互。
- 启动 MonitorBrightnessApp
- 在昏暗的房间里,使用光源将环境光的强度调节到不同的勒克斯级别
- 读取光照计的数值以及 MonitorBrightnessApp 报告的亮度值。 值应相同
ALS 校准测试变化
- 使用不同类型的可控制灯,例如白灰灯、CFL 和 LED
- 使用不同的角度
ALS 校准评估(通过或失败)
监控亮度应用程序报告的光照度值应与光表报告的值相同。
ALS 校准分类说明
请与传感器硬件制造商合作,了解如何校准传感器。
ALS 粒度
确保环境光传感器的变化是精细的,并且没有延迟
ALS 粒度应用于
支持自适应亮度的所有系统
ALS 粒度设定和工具
- 使用带有可调光装置的光源来精细调节环境光的亮度。 光源应能够顺利调节光线强度。
- 使用 BrightnessTests 文件夹中的 MonitorBrightnessApp 来可视化环境光传感器的响应。
ALS 粒度测试过程
- 在黑暗的房间中,使用调光器平稳地调节光线亮度高低。
- 使用 MonitorBrightnessApp 以实现环境光传感器响应的可视化。 响应应与调光器上应用的更改一致。
ALS 粒度评估(通过或失败)
环境光传感器响应应与应用于变暗器的更改密切相关。 对调光器的线性更改应导致环境光传感器的线性响应。 ALS 的响应不应是离散的。 对变暗器所做的更改应在 MonitorBrightnessApp 中立即可见,且不会延迟。
ALS 粒度分级说明
请与传感器硬件制造商合作,了解环境光传感器的转换如何平滑化,以及如何降低延迟。
睡眠过渡
确保环境光传感器在从睡眠模式恢复或打开盖子时仍然正常工作。
睡眠过渡适用于
支持自适应亮度的所有系统
睡眠过渡设置和工具
- 使用光源打开和关闭环境光。
- 使用 BrightnessTests 文件夹中的 MonitorBrightnessApp 来可视化环境光传感器响应。
睡眠转换测试过程
- 在黑暗的房间里,启动设备或打开盖子。
- 使用 MonitorBrightnessApp 可视化环境光传感器读数。 确保传感器能够读取低照度值。
- 在接下来的步骤中,请保持 MonitorBrightnessApp 持续运行
- 关闭盖子或关闭设备
- 打开灯,确保环境光亮
- 打开盖子或打开设备
- 连接到桌面并观察 MonitorBrightnessApp 中的值。 勒克斯值应立即反映实际的环境光照条件。
睡眠转换评估(通过或失败)
环境光传感器应在退出连接待机或盖子打开时发送样本读数。
睡眠过渡分级说明
请与传感器硬件制造商协作,了解如何修复环境光传感器。
平滑过渡
确保显示面板平滑地调整亮度。
平滑过渡适用于
支持自适应亮度的所有系统
平滑过渡设置和工具
- 使用 BrightToDim.ps1 脚本(在 BrightnessTests 文件夹中找到)以线性方式增加亮度上下。 将设备切换到手动亮度。 该脚本会将屏幕亮度从 100 降低到 0。
- 可选:使用亮度(尼特)计量来测量屏幕亮度
平滑转换测试过程
- 确保屏幕上显示尽可能多的白色。例如,打开记事本并将其最大化显示。
- 启动 BrightToDim.ps1 脚本并观察屏幕行为。 屏幕应尽可能流畅地切换,且不会有任何亮度跳跃。
平滑过渡评估(通过或失败)
屏幕亮度应平稳地上下过渡,不应在亮度中出现任何可见的跳跃。
平滑过渡分级说明
请与硬件制造商合作,了解如何使显示面板的亮度变化更加平滑。
另请参阅
- 传感器设备驱动程序参考
- 环境光传感器组件指南
- 概述 通用传感器驱动程序模型
- Windows 传感器驱动程序示例