先对这一篇文字的 HDR(High Dynamic Range,高动态范围)进行一下消歧义。

目前一般情况下摄影领域的 HDR 是指通过将同一场景不同曝光的多张照片合成的形式,创建一张容纳较大光比场景内容的图像的一种处理方式,这种方式生成的照片会比普通拍摄的照片包含更多的亮部细节和暗部细节,但毕竟色彩空间还是被映射到 SDR 的范围内,对比真实场景的视觉效果会有偏差。

本文指的更接近于视频领域的 HDR,在受支持的显示设备上以更宽广的色域和亮度范围显示照片,使得照片可以更准确地反应原来的场景。这是视觉效果的一场技术革命,真正优质的 HDR 内容带来的观看体验是震撼性的。

下面来自 av1-avif 文档 的两张样片展示了 HDR 与 SDR 的对比。

两张照片都采用 AVIF 格式保存,部分浏览器可能无法加载,相关内容会在后文作说明。

HDR 照片需要设备与操作系统支持与正确设置才能正常显示,否则显示效果将与 SDR 一致或出现过曝等异常。

HDR Image

HDR

SDR Image

SDR

显示 HDR 内容不仅需要支持 HDR 的设备与操作系统,同时也需要支持 HDR 的内容格式,并使用 HDR 的后期处理流程。

后期处理

如果你使用的是支持 HDR 显示的 Apple 设备,可以通过一个名为 Radiance+ 的应用构建 HDR 照片。该应用可以基于普通的 SDR 照片,通过自动计算或手动参数调整的方式构造对应 HEIC 格式的 HDR 照片(应用中称为 EDR 照片)。

EDR(Extended Dynamic Range,扩展动态范围)是 Apple 处理显示 HDR 内容的一种技术,详见该文档

Radiance+ Interface

Radiance+ 进行图片处理的样例

更不戳的是,Radiance+ 支持直接处理由 iPhone 拍摄的 DNG 格式 Raw,借助完整的动态范围信息处理出效果更好的 HDR 照片。不过就实验结果看,目前暂不支持其它主流相机 Raw 的处理,如 Nikon 的 NEF。

除了 Radiance+ 这样的辅助工具外,现在如 Photoshop、Affinity Photo 等主流的后期处理工具其实也能支持照片的 HDR 后期工作,不过需要将图像文件转为 32 位处理。以 Affinity Photo 为例,可以看看官方推出的 HDR 照片后期流程相关教程

光照强度是 HDR 的其中一个指标,这里以此作一些说明:

一般 8 位图像采用伽马校正(Gamma Correction)处理亮度,这是一种基于人眼对自然亮度感知创造的针对影像系统内容光照强度处理的非线性运算,普通记录 HDR 信息的 10 位或 16 位图像也采用了如 PQHLG 等转换函数以在有限位数中记录光照信息,而 32 位图像能够存储的光照变化信息远比一般的图像更多,因此直接采用线性运算,也正因为此,32 位图像能够获得更大的后期空间。

有关伽马校正相关的说明推荐看看韩世麟大大的知乎回答

Web 上的 HDR

视频领域存在着 HDR10、HDR10+、HLG、Dolby Vision 等格式,但相比视频领域较为成熟的体系,图像领域在这条道路上行走的步伐明显要缓慢一点。

2016 年 国际电信联盟 推出了确定 HDR 内容制作与传输的 BT.2100 标准,之后 2017 年 W3C 推出了 针对网络的 PNG 格式图像应用 BT.2100 的规范,显然,目前这个规范并没有被很好地应用

下面是一张 HDR PNG 图片,现阶段大部分浏览器都无法正常显示,高光细节几乎丢失殆尽:

Sample HDR PNG Image

Netflix 一直是 HDR 图像方面的拓荒者之一,在 2018 年的时候他们就 将 HDR 图像应用到了自家产品的界面设计上,此后将成果引入到了新一代图像格式 —— AVIF 中,这是 开放媒体联盟 所开发的一个基于 AV1 编码且开源免费的图像格式,目前开放媒体联盟的成员包括如 Google、Nvidia、ARM 等大量科技巨头(甚至 Apple 也在其中),且格式本身无论是在压缩率或是压缩后观感上都足够优秀,因此未来可期。

AVIF 与上文提及的 BT.2100 PNG 成为了 W3C 所讨论的 Web HDR 图像显示的两个候选方案,而如果不考虑其它通过 JavaScript 等方式实现解码的非原生方案,在当前能够真正在浏览器上展现 HDR 效果的图像格式,仅有 AVIF。

不过 AVIF 作为一个新出现的格式,目前并不是所有浏览器都支持,需要在非 iOS / iPadOS 上的 Chrome 或 Firefox 上才能正常显示(毕竟那俩操作系统上的浏览器都是 Safari 套壳 😅)。

AVIF 格式的兼容问题可以通过 Kagami Hiiragi 的 Polyfill 方案解决,但该 Polyfill 当前并不支持 HDR 内容,色彩空间会被映射到 SDR。

iOS / iPad 16 和 macOS Ventura 即将开始支持原生 AVIF 显示。

导出

AVIF 图像可以通过官方提供的 avifenc 工具进行编码:

avifenc -c aom --speed 0 --jobs 12 --depth 10 --ignore-icc --lossless --cicp 9/16/0 <input image path> <output avif path>

各参数含义可见工具文档,这里说一下 --cicp 参数。该参数指定了图像 CICP 色彩空间信号的信息,示例中的各值表示输出图像采用 BT.2020 PQ,其定义来源可查看 avif.h

avifenc 支持的 HDR 图像输入为 PNG,但目前如 Affinity Photo 等后期处理应用并不支持直接导出 HDR PNG,如果遇到这类情况,需要稍走一些弯路:先导出为 OpenEXR 或 Radiance HDR 等 HDR 图像格式,之后通过 Krita 进行转码。

Krita 是一款开源的位图图像编辑器,同时也是一款数字绘画软件。在 Krita 4.2 后,官方加入了 HDR PNG 导出的支持,且在 Krita 5.0 后支持直接导出 AVIF。在 Krita 中载入从其它应用中处理完成的 HDR 图像后,在 PNG 导出窗口中勾选 “保存为 HDR 图像” 即可将照片保存为遵守 W3C 规范的 PNG 图像。

Save

Krita 目前仅在 Windows 下支持 HDR 显示,但不影响正常导出。

参考链接