包含我玩过的画面格式支持高动态范围(HDR)的电脑游戏。
关于排序:网络游戏和已停售的产品放在最后。画质较差的以及有问题的会排在较后的位置。

大多数游戏的纹理素材依然在 BT.709 色域内。
大多数旧游戏不支持窗口模式。独占全屏意味着无法使用 Xbox 游戏栏和 OBS Studio 之类的软件进行截图和录像。
HDR元数据可能会使GPU上的显示输出单元(DPU)或显示器驱动单元(IC)进行动态范围压缩(色调映射)导致颜色发生变化和不准确。在禁用MPO并设置置顶窗口时,或使用触摸版切换桌面时,将临时停用HDR元数据。目前 eDP 连接三星面板的情况 AMD iGPU 的动态范围压缩会导致整体色彩发生偏色,Intel iGPU 和 Nvidia 只会对高亮度内容进行压缩。

基于虚幻引擎大概是4.15以后版本但不受开发者支持的游戏可以尝试手动编辑设置文件以及运行时修改 CVar(控制台变量) 来启用 HDR 显示。可能发生的问题:游戏启动崩溃;画面或UI颜色异常,明显的色带;由于渲染管线问题没有 HDR 信息,只打开输出开关没有效果。
DX12 支持窗口模式,UE4似乎只能使用 HDR10 格式输出。(在源码Engine¥Source¥Runtime¥D3D12¥RHI¥Private¥Windows¥WindowsD3D12Device.cpp文件的 void FD3D12DynamicRHI::Init() 函数中 GRHIHDRDisplayOutputFormat 对于编辑器构建硬编码为 PF_FloatRGBA,非编辑器构建硬编码为 PF_A2B10G10R10;)scRGB的好处是数据精度更高,未来有12位显示设备时效果会更好。
DX11 似乎只能使用 scRGB 格式输出,在一些游戏中只支持独占全屏,且仅支持 NVIDIA 和 AMD 显卡,这意味着 Intel、高通等等其它品牌的显卡连接的 HDR 屏幕将无法正常显示。使用 SpecialK 外挂软件的 HDR 输出功能,修改游戏窗口的 DXGI 交换链的格式信息,可以解决这个问题。使用操作系统图形接口的输出而不是使用GPU厂商专有的独占全屏,兼容性更好,可以进行截图和录像。(SpecialK 还有其它各种功能:亮度和对比度调整;将8位、10位、11位渲染着色器和计算着色器数据格式更改到16位;窗口调整;垂直同步开关和帧率限制器;DirectX 交换链的部分参数修改等等。)
DX11 HDR 显示功能运行在没有直连显示器的GPU上时兼容性不好:在部分游戏中,使用抗锯齿和分辨率缩放功能时,高光会被裁切变暗。在另一部分游戏中不明的其它因素也会导致高光会被裁切变暗。

手动编辑或创建[存档目录]¥Saved¥Config¥WindowsNoEditor¥Engine.ini
[SystemSettings]
r.HDR.EnableHDROutput=1 (如果想要在 UE5 DX12 使用 scRGB 输出,可以不用这行,使用 SpecialK 来设置窗口输出格式,问题是UI颜色会变淡且无法调整亮度。)
r.HDR.UI.CompositeMode=1(UI合成模式。需要设置 r.HDR.EnableHDROutput=1才能生效。UE4 中启用的话 UI 会由于伽马错误导致颜色发白,使用 scRGB 输出时可以禁用。HDR10 中必须启用,否则 UI 会非常亮。默认启用)
r.HDR.UI.Level=1(UI元素亮度倍数,默认1。最终UI亮度为80*1=80)
r.HDR.Display.OutputDevice=6
(像素格式。对于大部分游戏这个设置无效,会随 r.HDR.EnableHDROutput=1 的设置过程被覆盖,UE4默认为5,UE5 DX12默认为3,这是个麻烦的问题。参数值3和5为ACES调色峰值亮度1000尼特,4和6为2000尼特,UE5中不再有亮度区别。3和4使用10位PQ (RGB10A2),参数5和6使用16位浮点 scRGB (RGBA16f)。UE5编辑器中默认只能使用5或6)(如果颜色不准确,可能需要GPU直连显示器、独占全屏或使用 SpecialK 设置输出 HDR10 或 scRGB 的原始帧缓冲 Raw Framebuffer)
r.HDR.Display.ColorGamut=2(颜色范围。对于大部分游戏没有必要设置,会随 r.HDR.EnableHDROutput=1 的设置过程被覆盖为2。参数值2使用BT.2100色域,D65色温。scRGB 本应使用BT.709 色域(参数值0),但实际上旧版本引擎这样设置的话会导致颜色过饱和。)
r.AllowHDR=1(不必要的设置)

一些虚幻5新版增加的设置。在虚幻编辑器的控制台上输入help可以获取帮助。
r.HDR.Display.MaxLuminance=10000 (亮度峰值,默认1000尼特,可设置超过10000但目前没有设备能支持)
r.HDR.Display.MinLuminanceLog10=-4 (亮度谷值以10为底的对数,默认0.0001尼特的Log10为-4,0.01的Log10为-2)
r.HDR.Display.MidLuminance=14.4 (18%灰的亮度,50%灰的心理亮度,白色中点。默认15尼特。80尼特SDR峰值对应值为14.4尼特,203则对应36.54。推荐和Windows系统设置保持相同,滑块值为10的话对应值为120*18%=21.6)
r.HDR.UI.Luminance=80 (SDR UI元素亮度峰值,默认80尼特。推荐和Windows系统HDR内容亮度设置保持相同)
r.HDR.Aces.SceneColorMultiplier=1 (ACES色调映射器的场景颜色倍数,默认1.5。调整会影响场景整体亮度。)

GameUserSettings.ini(默认的设置文件,一些修改过的引擎不会有)
[/Script/Engine.GameUserSettings]
FullscreenMode=0 (设置独占全屏,可能无效。DX12无效)
bUseHDRDisplayOutput=True
HDRDisplayOutputNits=2000(和r.AllowHDR=1搭配使用,大部分游戏无效)

手动编辑设置文件可能需要使用 UnrealPak 工具打包 ini 设置文件到 pak,放到 Content¥Paks¥~mods 文件夹来覆盖原来的 ini 文件。pak 可能会有加密和签名校验,主程序可能会有防篡改防护,此时就很麻烦。在无法提取pak中的文件的情况下,覆盖文件可能会出现问题。
UnrealPak 工具获取方法有两种但都比较麻烦:首先需要 Epic Games 帐户。从 Epic Games 启动器下载和安装数十GB的虚幻引擎;有和Epic Games 帐户关联的GitHub 帐户,从 GitHub 虚幻引擎源码仓库下载编译。高版本的引擎工具对于读取pak能向下兼容,但创建pak可能不能兼容旧版游戏。UnrealPak 创建 pak 包的命令 -create=<ResponseFile> 需要输入一个文本文件,内容为磁盘文件夹路径和素材逻辑路径的列表。最简单的一行列表是 “[新建文件夹]¥*.* ..¥..¥..¥*.*”。(关于“..¥..¥..¥”这个返回上3层奇怪的路径,因为虚幻引擎主程序默认在主路径下3层“[项目名]¥Binaries¥[平台]”文件夹中,所以这个路径就是包含所有文件的主路径了。)

修改 CVars 的方法除了编辑配置文件以外, 还可以使用 UE4SS 修改框架注入到引擎进程,启用控制台或使用Lua、蓝图脚本进行动态修改。

基于Unity引擎使用HDRP但不受开发者支持的游戏可能可以使用一些注入修改工具(例如UnityExplorer)来启用HDR输出。需要修改的地方:场景使用线性颜色空间,替换色调映射器。
如果一个Unity引擎游戏文件夹的“游戏名_Data”目录下的 boot.config 文件中有 "hdr-display-enabled=1" 这行字,那么这款游戏可能支持 HDR 显示。如果值为 0 那么需要一些改造,单纯修改这个文本文件没有作用。一些反例:《CrisTales》、《RPG Time 光之传说》这两款游戏其实在HDR显示器上不能正确显示。
参考开发文档https://docs.unity3d.com/Package ... ual/HDR-Output.html

magsom 创建于 2022-9-24 11:59 / 1 人收藏
#1 - 2024-1-25 18:58
(理想时薪114514)
有用的目录+1