芝士雪豹 发表于 2025-6-28 22:50

windows HDR游戏指北 -内含hdr常识/hdr常驻相关/reshade/renoDX

前言
    当前HDR的内容相对于之前有了长足的进展,越来越多的游戏玩家换上了支持HDR的mini-led或者oled显示器,与之对应的,越来越多的游戏也开始支持hdr,即使不支持的游戏,也可以通过一些其他的手段玩到获得hdr的观感。
    但是由于各种各样的原因,目前的hdr对玩家来说并不是一个开箱即用的状态,可能简简单单打开hdr,在默认的情况下并不能获得最好的效果,所以才有了这个帖子,这个帖子的初衷是尽可能简单易懂的阐述一些hdr的基本常识,如何在windows系统下获得一个相对优秀的hdr体验。当然我也不是专业从事相关行业的人,只是一个做了一些功课的玩家,也是希望能够抛砖引玉,和大家一起交流进步,如果有错误的地方,还请斧正。
提示:
1. 我手头的适合hdr的显示器是qd-oled面板的屏幕,所以后续的一些具体数据可能是以oled为基础的,不过mini-led也可以参考。
2. 文中很多参考链接可能来自外网,需要各位八仙过海各显神通。
hdr简单常识
    hdr的明确定义大家肯定可以在网上各种百科找到很多,我就不搬运了,说说自己的理解。首先,我们为什么要用hdr呢?这和硬件的发展息息相关,现在mini-led和oled的显示器在色域,峰值亮度上相对于几年前的显示器有了巨大的提升,但是sdr无法发挥出这些优势,为了榨取我们显示器的能力,获得更好的视觉体验,hdr是必需的。
亮度
    首先人眼的感知是非线性的,我们对更接近黑暗的地方更敏感,而对于更接近明亮的地方更愚钝 (非常像个抖M) 。量化的说接近log函数,所以在计算机里面输出的均匀的亮度值,需要经过一个近似指数函数的变换显示到显示器上,在SDR下通常是gamma2.2曲线(y = x^2.2),在hdr下通常是PQ曲线(很复杂不写了)。有兴趣的可以看看这个视频
    另外需要明确的一个点是,sdr和hdr下的输出亮度逻辑不同,sdr下是是相对亮度的逻辑,而hdr是绝对亮度的逻辑,具体反映到这两个曲线上,gamma2.2曲线的定义域是0-1,值域同样是0-1,代表着相对亮度值,而PQ曲线定义域是0-1,值域同样是0-1000,代表着nit值。举个例子,当计算机要输出0.581亮度时,当你的显示器处于sdr模式,所设置的亮度是300nit,经过gamma2.2的计算,显示器要输出相对亮度0.3,显示器会输出0.3*300=90nit;当你的显示器处于hdr模式并且完全遵循pq曲线,此时输出的亮度可以直接计算得到203nit。所以你会发现很多显示器在sdr下可以调整亮度,到了hdr下反而不能调整亮度了,就是这个原因。对于sdr的亮度应该设置为多少,倒是有一些标准,不过这个其实和使用环境有关,标准的100nit,120nit都是要求在暗室中,日常使用中200-300nit应该是比较合适的值。
色域
    sdr下标准色域是srgb,hdr下是rec2020,两者的差距也非常巨大,现阶段的显示器几乎都可以覆盖完全srgb色域,但是几乎没有能覆盖完全rec2020色域的。
hdr应该如何开启/hdr常驻
    首先建议升级到最新的Windows11系统,对hdr的支持比window10好很多。然后开启hdr很简单,首先可以win+alt+b一键开启hdr,其次在windows设置里的显示页面里面也有开启hdr选项,开启后,如果没有意外,显示器也会进入hdr模式,osd中会锁定一些sdr选项,解锁一些hdr选项。当你开启hdr之后,可能会发现桌面有一些变化,这是正常的,我可以为你解释原因:此时的显示器和系统都是工作在hdr模式了,对应的曲线就不再是gamma2.2,而是pq曲线(理论上,事实上显示器不会完全贴合pq曲线),但是显示的内容未必是hdr标准的,比如桌面,Chrome,等一系列内容都是sdr标准,这时候我们根据常识里面发现,其实sdr内容是可以显示在hdr中的,只需要做一些对应的亮度变换就好了。因为hdr下要求的是绝对亮度,所以windows在设置里提供了一个sdr亮度滑块,这个就定义了sdr的亮度会显示为多少,0刻度的滑块对应的是80nit,100刻度的滑块对应的是480nit。但是hdr下显示sdr内容还会有一些问题,如果你不能接受,我不建议你常驻hdr:
    1.显示器通常宣传色域容积达到了130甚至140srgb,sdr的默认模式下通常是过饱和的,这样的坏处是色准很差,单好处是颜色非常讨喜。你可以在sdr模式下切换默认模式和srgb模式(或者就色域限缩)就可以看出区别。而常驻则会将sdr内容强制限制在srgb,如果你已经习惯了过饱和的画面,会觉得开启hdr后,所有的sdr内容都变得暗淡了。
    2. 第二点这是Windows的问题,Windows在进行hdr to sdr映射的时候遵循的是分段srgb曲线,而绝大多数显示器的sdr模式都遵循gamma2.2曲线,这两者很相近,但是在黑暗段有区别,这些区别导致暗场中hdr下的sdr内容会比sdr下的sdr内容更“白”。这个链接里面有图。这个链接同样也是一种不完美的解决方式,他加载了一个icm文件,这个文件可以让hdr下的sdr内容变得正确,但是同时会让hdr下的hdr内容变得错误。所以你在玩hdr内容是,反而需要禁用掉icm文件,很麻烦。另外一种方法是这个,原理是未所有dwm进程修正曲线,缺点是未必所有sdr内容都是dwm进程,如果你想辨别,可以在修正时填入一个逆天gamma参数比如1.0,这样你就可一眼看出来那些被赋予了1.0的gamma。
总而言之,你可以根据自己的情况选择是否hdr常驻,我个人是不用的,因为win+alt+b就可以一键切换,我并不想在hdr下观看有奇怪暗场的sdr内容。
hdr校准
    你会发现在设置hdr选项卡里面会有一个hdr校准选项,也有很多人教过开了hdr一定要校准。但其实这个的必要性并没有很大,其实这个校准程序很简单,他只是让你测试你的显示器能显示的最低亮度和窗口峰值亮度以及全屏峰值亮度,以及可以让你选择加一点饱和度的味精。而事实上很多游戏都不会读取系统所生成的这个亮度,所以你可以校准,但是它未必用的到,这个要视游戏而定。
hdr游戏
    终于到了hdr游戏阶段!在这个阶段,我将按照优先级在游戏中实现hdr的方式。不过在这之前,我先讲一下游戏的亮度是如何呈现在显示器上的。pq曲线允许输出的最大亮度是10000nit,也就是说游戏可以输出10000nit的亮度,但因为目前的显示器达不到这么搞的亮度,所以显示器会怎么做呢?假设有一台峰值亮度1000nit的显示器,一种做法就是亮度滚降,在低亮度的时候,游戏让我输出多少nit我就输出多少nit,在高亮度的时候就开始滚降,游戏让我输出1000nit,我输出800nit,游戏让我输出2000nit,我输出900nit,游戏让我输出5000nit,我输出1000nit。这样的好处是虽然没有忠实的还原,但是保留了高光的细节。另一种做法就是亮度阶段,有些显示器或者电视里的hgig模式就是这样,就是游戏让我输出多少我就输出多少,没能力输出的一律按最高亮度算,这样的好处是在能力范围内忠实还原亮度,但是会损失高光细节,毕竟超过1000nit的都是完全一样的无法辨认了。oled还涉及到另一个东西就是abl机制,因为oled虽然峰值亮度很高,但是一旦高光面积增大,就会触发abl全屏一起降亮度,所以最终输出的亮度还和apl(平均图像亮度等级)相关。这个就不展开细讲了。
峰值亮度和纸白亮度
    这两个亮度是下面的renoRX,和原生hdr中可能都会涉及到的参数,所以先讲一下。
    峰值亮度的定义是游戏中最亮的亮度所能达到的nit,比如一些强光源,上面说的pq允许10000nit,但游戏也知道我们的显示器可能达不到这么亮,所以游戏也可以做亮度滚降,让游戏里面的最高亮度限定在设定的峰值亮度。值得注意的一点是,只有的显示器支持hgig这种完全贴合pq曲线的模式时,把峰值亮度设置成显示器能达到的峰值亮度才不会有亮度损失。道理很简单,沿用我上面的例子,如果你的显示器峰值亮度是1000nit,但做了亮度滚降,此时如果你将游戏的峰值亮度设置为1000nit,那显示器可能会输出800nit,在所有的游戏画面里面就不会有让你的显示器达到1000nit的场景了。所以这个峰值亮度可以设的比你的显示器峰值亮度稍微高一点,具体需要你在游戏里找到高光细节没有损失的点来判断。
    纸白亮度,这个亮度你可以理解为一张白纸在光源下应该达到的亮度,你的直观感受是游戏里的平均的亮度水平,游戏hub亮度也与这个有关。其实是有一个推荐纸白亮度的,58%pq亮度/75%hlg亮度。这个链接可以计算不同峰值亮度应该设置多少纸白亮度,比如1000nit峰值亮度可以设置203nit纸白亮度。
renoRX
    这个是我强烈建议的一个hdr的实现方式。renoRX可以看成一个mod,他依赖于reshade。reshade则是一个大名鼎鼎的开源游戏画质增强工具。renoRX可以为部分游戏添加hdr(例如黑神话悟空),可以替代游戏原生hdr(例如2077,剑星)。他的优点是的效果非常好,它使用 reshade 插件系统重新设计引擎渲染管道,类似原生hdr,而不是像autohdr rtxhdr specialK,后者本质上是游戏滤镜,而且他不像rtxhdr,几乎不降低帧数,另外他也有丰富的预设可以微调hdr的效果,他也会修复一些原生hdr的问题,比如2077的黑位不为0的问题。当然他也是有缺点的,不是所以游戏都可以使用renodx,有一部分可能是开发者没做,有一部分可能是线上游戏,有严格的反作弊机制,他的安装方式和支持的游戏在这个列表中。我推荐加入他的Discord社群,里面不仅有开发者,而且还有很多艺术家分享一些renoRx的画面预设。
    b站我确实没怎么找到详尽的安装范例,这里放一个法国老哥的油管链接,可以配合翻译观看。
原生hdr
    原生hdr我通常作为第二顺位,没有renoRX的情况下我会选择原生hdr,原生hdr可调节的选项不多,通常就是峰值亮度和纸白亮度。有一种玩法是用reshade里面的一些工具来调整原生hdr。这个up的视频,就是通过ReShade_HDR_shaders接管了游戏里面的亮度滚降处理(专业叫法叫tone mapping)。用Highly advanced Color Effects来调整黑位,解决oled上黑不下去,或者mini-led过暗的问题。另外还可以参考这个链接里面renodx社群的大佬对很多游戏原生hdr的锐评,已经一些设置建议。点过去之前需要提前加一下这个社群
rtxhdr
    我个人其实不怎么喜欢rtxhdr,因为他基本上相当与一个游戏滤镜,如果你要使用rtxhdr的话,可以参考这个红迪链接,饱和度-25是sRGB原色的真正中性,当对比度为0时,基色调曲线为Gamma2.0。如果希望rtxhdr具有与传统SDR匹配的gamma,可以将对比度设置为+25,这与gamma2.2匹配。这样的话,相当于在保持sdr色域不变的情况下,多了hdr的高光表现。可以看出来,nv默认的饱和度其实相当于加了些味精,让色彩更艳丽。这个见仁见智吧,还是眼睛为准。我自己尝试过dota2开rtxhdr,给我的观感是还不如sdr下默认过饱和画面好看,可能dota2这种moba,高光亮不亮并不是特别重要吧
最后
    这篇其实是在公司值班写的,主力游戏机不再手里,所以没有自己操作的图,公司的网传图还有些问题,所以基本上都是链接,还请见谅。有什么问题也欢迎回复交流讨论。

xy. 发表于 2025-6-28 23:02

而不是像autohdr rtxhdr specialK,后者本质上是游戏滤镜
其实 special k 和 renodx 是一类东西

弧菌 发表于 2025-6-28 23:21

LZ说的WIN11 HDR菜单里的SDR亮度滑块是从80到480nits的,这个应该只限于LZ自己用的设备情况吧。WIN的“高级显示器”设置里能看到HDR的峰值亮度(显示器报告的数值,和显示器的HDR模式选择也有关),我的理解是拉到100%的话,就等于是设定在这个峰值的满亮度了,至于显示器实际能不能显示这么亮、有没有ABL,系统就不管了,只管输出。我这日常用在75以内效果都没问题,这个值目测也差不多就是全屏250左右的最大亮度了,再往高拉的话暗部继续提亮,但高亮内容会开始过曝丢失细节。
也是QD OLED,常驻HDR下除了上述的亮度滑块问题,还有轻微的SDR内容10bit色阶损失,倒没发现泛白问题,具体型号FO32U2。

芝士雪豹 发表于 2025-6-28 23:40

弧菌 发表于 2025-6-28 23:21
LZ说的WIN11 HDR菜单里的SDR亮度滑块是从80到480nits的,这个应该只限于LZ自己用的设备情况吧。WIN的“高级 ...

不是的,这个值和我的设备无关,是微软写死的。可以看这个
https://learn.microsoft.com/en-us/windows/win32/api/wingdi/ns-wingdi-displayconfig_sdr_white_level

jaycty 发表于 2025-6-29 01:25

感谢分享,收藏了

linkzero 发表于 2025-6-29 01:37

mark,学习一下。

ghgfhghj 发表于 2025-6-29 02:01

xy. 发表于 2025-6-28 23:02
其实 special k 和 renodx 是一类东西

只说hdr部分是完全不一样的,sk的作者之前也在这个discord(后来他跑了,因为经常不兼容他觉得没必要用)
页: [1]
查看完整版本: windows HDR游戏指北 -内含hdr常识/hdr常驻相关/reshade/renoDX