HDR是一个复杂的概念,完全不同于SDR的理解,我走了一些弯路。这里面的一些概念理解必须精确,否则这个体系即便是码农能写代码,也不能理解。
- 何为“线性空间”?
线性空间就是 CIE XYZ的三维体系。这个线性其实说的是在 CIE XYZ 三个维度上的线性。其实就是人眼三色视觉函数的横坐标必须是线性。这个线性就是“卢瑟观测条件”,这个线性决定了“混色”符合“卢瑟观测条件”,也就是不会偏色,确保颜色的准确性。
但问题是,这个“线性”是确保混色成功的“线性”,符合“人眼”(CIE 1931的观测),但不符合“人脑”,比如麦克亚当的椭圆。我们可以通过数学工具炮制一种“色貌模型”,比如CIE LAB或者CIE CAM02。不过我们不可能用 CIE LAB/CIECAM02 去定义标准色彩空间(sRGB、Bt.709、DCI-P3、ProPhoto RGB、ACSE...)之类的。
所以,这个“线性”说的是在 CIE XYZ空间内,划分的标准色域(sRGB、Bt.709、DCI-P3、ProPhoto RGB、ACSE...)在这个三维体内的混色是线性的,并不代表亮度、色度是线性的。后两者另外计算处理,比如各种曲线工具等等。这个线性,本质上是计算线性,而不是观看线性。这个搞游戏引擎的同学深有体会。其他的要记住理解这个抽象概念就行。
- 何为 EOTF、OETF、Gamma等等?
有了以上的“线性”理解,这三者是等同的,我也是被 optical 光学的困扰了很久。感觉是一个“客观的物理概念”,其实不是。这里的Optical其实是perceptual,是一种人眼感觉。这个光不是灯光,而是人眼识别光的感觉,用数学工具来“人为约定”。因为人眼是对数关系,具体怎么对数,我们码农不用管,交给各种组织处理。我们只知道,E(Electrical)和O(Optical)的关系,E(Electrical电子的)就是线性的;而O(Optical光学的)就是非线性的、对数的、gamma的或者分段的(sRGB/HLG)。具体怎么非线性,根据各类标准套用即可。反正统一到线性就可以方便计算和转换了。
- 何为亮度,以及亮度转换?以及ToneMapping,以及曝光概念。
这个也非常复杂混淆,各类概念复杂混淆。
“曝光”其实用来记录原始摄影场景的光学信息,其实是一个“区分度”的概念。区分度分为“可视区分度”和“非可视区分度”。可视区分度就是前面提到的Optical人眼感觉的概念,比如JPG 8bit,HDR 10bit的概念。非可视区分度,主要用来保存和中间计算,最后得出“可视区分度”。
简单来说,非可视区分度就是高考成绩或者考试成绩,可视区分度就是 5分制或者 985、211、一本、二本、三本、职高。曝光基本上是处理“非可视区分度”,而Tonemapping curve曲线就是连接不同区分度的工具。这个没啥“客观规律”,靠话语权,我们码农只关注公式,你说这个Tonemapping好,我无所谓。我只关注具体公式描述。
所谓“HDR”,其实分为“HDR效果”和“HDR硬件”。HDR效果在SDR设备上(比如纸张印刷冲印、莫奈的绘画)也能表现电焊、阳光、日出、日落这些HDR场景,这就是叫“HDR效果”。而“HDR硬件”,则是具体的显示器硬件。比如高亮度的大屏幕电视。而HDR标准是指HDR硬件。
所谓 HDR硬件,就是亮度更高的显示设备。比如iMAX屏幕就是HDR硬件,而展厅放置的大幅摄影照片就是SDR设备。那么更高亮度的设备HDR所表达“对比度”和SDR是不同的。这就是HDR/SDR的不同的表达关系。在“HDR HLG”的概念里,有一个优势叫“图像劣化比较小”。这句话的实际意思就是,如果把HLG当作SDR的内容直接“错误播放”,其错误偏差程度比较小,人眼觉得差不多就算了。而 HDR PQ当作 SDR的内容直接“错误播放”就不行了,图像发会,人眼不可接受。
本质上,HDR / SDR 是两种不可兼容的对比度/亮度体系。必须通过ToneMap的转换。但具体算法,你们喜欢啥就是啥,你们爱用哪个就哪个。
- HDR硬件的亮度体系。比如HDR PQ/HDR HLG。
其亮度体系大量使用 RGB-->YUV的转换,使用 Y分量来代表“亮度”。因为这个计算简单。也就是说,计算的时候,先获取像素的Y分量(一般这个时候是线性的ACSE、BT2020、DCP-P3)计算亮度,再返回RGB数据根据这个Y分量获取一个转换ToneMap算法,得出三个新的R'G'B'。这就是不同HDR亮度体系,或者HDR到SDR的转换方法。
- 由此得知,其实HDR/HLG标准不能完全算HDR,因为HLG标准可以根据目标显示亮度是一个不固定的曲线。不同显示设备的亮度,有着不同的实际转换曲线(取决于目标亮度),只不过HLG定义了实际转换曲线的生成统一标准。这个亮度可以就仅仅是SDR,也可以是HDR的高亮度。如果是前者,那么HDR hlg(sdr 100cd/m2)的实际转换曲线和Rec.709差别不大了,只不过色域是Bt.2020。而HDR PQ才是真HDR。
- 基于上一点,HDR-->SDR首先要HDR的归一化,归一化以后才能套用Tonemap的曲线,否则损失亮度或色彩的精度。
先想这么多,想到再补充。其实读懂这些才能知道这些公式的含义,否则就陷入色彩管理的泥潭,不能自拔。