
我把尼康 RAW 往底层挖了一遍,翻出了一个藏了二十年的“祖传屎山”
我顺着 D850 RAW 里一排“消失的数字”,挖到了尼康二十年的祖传小动作
我一直觉得很多 Nikon 相机有一种很奇怪的感觉。
正常曝光的时候特别好。
颜色扎实,层次清楚,中间调尤其漂亮。
但一旦照片走到两个极端——特别深的暗部,或者快要爆掉的高光——那种舒服的感觉有时候突然就没了。
暗部的颜色容易变得有点僵。
高光则偶尔会出现一种很难描述的“死法”。
最奇怪的是:
D810、D850 这种机器,偏偏又是出了名的动态范围怪兽。
一个低感动态范围这么强的相机,为什么越往动态范围两头用,我反而越容易觉得颜色不对?
以前我也把它归结成“尼康色彩”“Adobe 解 RAW”“个人口味”。
直到最近,我本来只是想测试一块几十年前的 CC 品红色彩补偿滤镜。
结果顺着 RAW 一路往下挖,最后碰到了 Nikon 从 D2X 时代就已经存在的一个“小动作”。
然后很多事情突然连起来了。
一、先看 D850 RAW 里那几个“消失的数字”
很多摄影师对 RAW 的理解,大概是:
光 → 传感器 → ADC → RAW
也就是说,传感器读到多少,RAW 就记录多少。
但 Nikon 很早就不是完全这么干的。
Jim Kasson 对 D850 做 Photon Transfer Curve 测试时,测出了非常明确的 RAW prescaling:
R′ = 1.1636 × R
G′ = 1.0000 × G
B′ = 1.1317 × B
也就是说:
绿色基本不动。
红色先乘 1.1636。
蓝色先乘 1.1317。
然后再写进 NEF。
换算成摄影师熟悉的 EV:
R ≈ +0.22 EV
B ≈ +0.18 EV
这个动作一般叫 prescaling,或者 color-channel preconditioning。
名字不重要。
真正重要的是:
这不是你后来在 Lightroom 里做的白平衡。
在 NEF 真正写下来以前,R/B 数据就已经被 Nikon 动过了。
而且这不是 D850 一台机器的特殊行为。
RawDigger 对 Nikon RAW 的研究认为,这类 color-channel preconditioning 至少可以追溯到 D2X 时代。
D3X、D800 等后来的机器上也能观察到类似特征。
所以标题里说它“祖传”,并不只是为了骂街。
它确实是一套延续了很多代的 Nikon RAW 处理思路。
二、乘个 1.16 而已,有什么大不了?
一开始我也是这么想的。
问题是:
RAW 最后还是要存整数。
举个最简单的例子。
假设 ADC 原来给你的数据是:
100,101,102,103,104……
现在全部乘 1.1636,然后重新取整数。
结果可能变成:
116,118,119,120,121……
发现了吗?
117 没了。
可以把它想象成一把尺子。
原来的刻度是:
100、101、102、103、104……
Nikon 把整把尺子拉长了 1.1636 倍。
但最后又规定:
所有刻度必须落在整数上。
于是有些整数刻度自然永远不会出现。
所以真的去看一些 Nikon RAW 的 R/B histogram,会看到非常规律的“梳子”。
一个数有。
下一个数没有。
然后又有。
这就是所谓的 missing codes。
所以这里第一个可以确定的事实是:
Nikon NEF 里的 R/B,并不总是未经处理的 ADC 整数序列。
而且这个过程不能完美倒推。
因为即使后来知道:
R = R′ ÷ 1.1636
那些已经在重新取整过程中消失的整数,也不可能被完整恢复。
这不代表 Nikon RAW 被“毁了”。
1.16 也不是一个多么恐怖的数字。
但它证明了一件很重要的事情:
RAW 并不一定等于传感器 ADC 的原始整数流。
三、真正让我觉得有意思的,是 Nikon 偏偏动了 R/B
为什么不动 G?
为什么偏偏是 R 和 B?
继续往下挖,就碰到了 Nikon 自己二十多年前的一份专利。
这份专利讨论的恰好就是:
RGB 三个通道原始感光能力不平衡怎么办?
Nikon 在专利里举过一个传统传感器的例子。
大约 5000K 光源下拍摄中性物体,原始 RGB 信号可能是:
R : G : B ≈ 0.45 : 1 : 0.55
翻译成人话:
假设绿色收到 100,
红色可能只有 45,
蓝色可能只有 55。
最后想把这个灰色物体真正变成灰色怎么办?
只能做白平衡。
大约需要:
R × 2.22
G × 1
B × 1.82
所以摄影师平时看到 Lightroom 里的“白平衡”,底下并不只是把照片调黄一点、调蓝一点。
它还意味着:
原本比较弱的颜色通道,需要被更大幅度地放大。
这里必须说严谨一点。
上面的 0.45 : 1 : 0.55,是 Nikon 专利用来说明传统传感器问题的例子。
不是说 D850 实测就是这个数字。
但它至少证明:
Nikon 的工程师二十多年前就已经非常认真地考虑过 RGB 原始响应不平衡这个问题。
四、而且 Nikon 还很在乎“颜色分得开”
这份专利里还有一个很有意思的思路。
Nikon 在讨论提高红色感光能力的时候,特别考虑了 R、G 光谱响应之间的重叠。
说白了就是:
不只是要收到光,还希望 R、G、B 分得足够开。
这其实很好理解。
如果 R、G、B 三个通道的光谱响应全部糊成一团,当然容易喂,白平衡也容易。
但颜色之间的区别也会变弱。
反过来,比较强的 color separation,可以得到更加明确的颜色信息。
所以很多 Nikon 为什么正常曝光时颜色会让人觉得很扎实?
这并不矛盾。
甚至可能恰恰和这种设计取向有关。
红是红。
绿是绿。
颜色之间不容易糊成一锅。
所以这里并不是说:
“Nikon 做错了。”
真正有意思的是:
这套东西在中间可能很好,但到了两头,代价开始出现。
五、先往暗部走
曝光越来越少以后,最基本的事情先发生:
R/B 收到的 photons 越来越少。
光子噪声有一个很简单的规律:
Noise ≈ √N
而信噪比大约是:
SNR ≈ √N
N 就是收到的 photons 数量。
不用记公式。
只记一句话:
真实收到的光越少,后面越难救。
如果 R/B 原始信号本来就相对较弱,那么到了深暗部,它们自然比中间调更加脆弱。
而 Nikon 的数据还要经历:
弱 R/B 信号
↓
ADC
↓
R/B prescaling
↓
重新取整
↓
RAW 软件再做 WB amplification
这里我要故意把结论说轻一点。
目前没有证据证明 Nikon 的暗部“怪感”就是 prescaling 单独造成的。
Prescaling 不会凭空制造几档噪声。
但它确实做了一件并不漂亮的事情:
在本来已经比较弱的 R/B 数据上,又增加了一次不可逆的数字变换和重新量化。
信号很强的时候,这件事几乎无所谓。
假设一个通道有几千甚至上万个有效 code,少几个整数谁都看不出来。
但如果已经接近黑场呢?
当有效信号只剩几十个 code 时,同样的离散化误差占整个信号的比例就完全不同了。
所以我现在更愿意把 R/B prescaling 看成:
暗部颜色问题的一个潜在污染源。
不是唯一元凶。
但越靠近黑场,越值得怀疑。
六、然后往另外一头走
Prescaling 在高光端也不是完全免费的。
因为把 R/B 先乘大,再塞回有限的 RAW 数字空间,本质上是在提前消耗一部分 numerical headroom。
D850 的量级大约就是:
R:0.22 EV
B:0.18 EV
换句话说,Nikon 为了提前整理 R/B 数据,主动交换掉了一小部分 R/B 数字余量。
这点损失并不巨大。
问题在于,它并不是孤立存在的。
因为与此同时,真实世界很多宽谱、中性场景下还有另一个问题:
G 的原始信号往往比 R/B 强。
于是不断增加真实曝光以后,可能发生:
G → physical saturation
而此时:
R/B → still alive
也就是说,高光端可能同时存在两种不同的限制:
一边是 R/B 被 prescaling 改变了 numerical headroom;
另一边是 G 因为收到更多有效信号,先发生真正的 physical clipping。
于是所谓“RAW 顶部”,其实没有想象中那么整齐。
七、绿色先爆,也不是理论脑补
Jim Kasson 用 Nikon Z9 做过一组非常有意思的 RAW bracket 测试。
同一个场景,每次增加 1/3 EV。
结果大概是:
ETTR:RAW 还没有真正 clipping。
ETTR + 1/3 EV:绿色通道开始 clipping。
ETTR + 2/3 EV:高光纹理已经开始明显损失,但 R/B RAW 通道仍然没有全部爆掉。
于是 RAW 顶部其实存在这么一个区域:
RGB 全部正常
↓
G 开始死亡,R/B 仍然活着
↓
RGB 全部死亡
问题来了。
中间这一小截算不算动态范围?
当然算。
因为 R/B 里面确实还有信息。
但从颜色角度看:
它已经不是完整的 RGB 信息了。
八、所谓“高光恢复”,也不是时间倒流
这时候 Lightroom 可能还能把高光“救回来”。
所以摄影师经常会觉得:
“Nikon 高光恢复真牛。”
但如果 G 已经 clipping:
真实的绿色细节就已经不存在了。
RAW converter 能做的是参考:
R、B、周围像素、颜色关系……
然后推测:
“这里的绿色原来大概应该是什么。”
好的 RAW converter 可以猜得非常漂亮。
但:
猜出来的信息,不等于传感器实际测到的信息。
所以我现在看动态范围,已经不太愿意只问:
“这个 RAW 还能不能拉回来?”
我更想问:
R、G、B 三个通道是不是都还活着?
这是两个完全不同的问题。
九、然后 Nikon 偏偏又造出了 ISO 64
到这里,整个故事终于连起来了。
D810、D850 为什么封神?
一个非常重要的原因就是:
低 ISO 动态范围。
尤其 D850。
原生 ISO 64。
暗部能拉得非常狠。
于是 Nikon 的产品特性实际上给摄影师提供了一个巨大的诱惑:
放心往右曝。
摄影圈后来又把 ETTR 讲得越来越深入人心:
只要高光没爆,就继续增加真实曝光。
从最基本的物理规律看,这当然有道理。
真实曝光增加一档:
N → 2N
光子信噪比从:
√N
提高到:
√(2N)
所以:
只要没有 clipping,真实曝光越充分,通常越好。
问题恰恰就在这句话的前半句:
“只要没有 clipping。”
谁没有 clipping?
JPEG 没爆?
亮度直方图没爆?
照片看起来没爆?
还是:
R、G、B 三个 RAW channel 全都没有爆?
如果 G 已经先死了,那么继续往右得到的最后那一点所谓“动态范围”,已经不是完整的 RGB 动态范围。
十、我觉得真正的问题,其实不是 Nikon 动态范围不够
恰恰相反。
是 Nikon 的动态范围太大了。
大到摄影师舍不得不用。
14 EV。
14.5 EV。
最后 0.3 EV 都觉得扔了可惜。
厂家给了多少,我就一定要用满多少。
于是大家会天然认为:
越接近传感器极限,越是在发挥这台机器的性能。
但这背后偷偷藏了一个未经证明的前提:
动态范围里的每一档,质量都是一样的。
实际上并不是。
最下面的一点,可能已经进入极低信号区域。
R/B 很弱。
Prescaling、重新量化、WB amplification 的相对影响越来越值得在意。
最上面的一点,又可能已经进入:
某个通道 numerical headroom 被消耗;
某个通道开始 physical clipping;
RAW converter 开始做 highlight reconstruction。
这些区域当然都可以算进“动态范围”。
但:
能用,不等于值得用。
这是我研究到这里以后最大的观念变化。
十一、我对少一档动态范围,其实一点意见都没有
假设一台相机纸面上有:
14.5 EV
如果为了把这 14.5 EV 一滴不剩地榨干,我必须同时忍受:
最下面 R/B 进入非常弱的信号区;
最上面 G 开始单通道 clipping;
RAW converter 越来越依赖 reconstruction;
那我为什么一定要这 14.5 EV?
如果我主动扔掉上下两头最不舒服的一点,最后只剩:
13.5 EV
但是这 13.5 EV 里面:
R/B 有足够真实信号;
三个通道都没有进入 clipping;
颜色主要来自 measurement,而不是 reconstruction;
那我会毫不犹豫地选:
13.5 EV。
因为动态范围只是一个长度指标。
它不是质量指标。
一条路有 100 公里,不代表 100 公里都是柏油路。
最后 5 公里是烂泥路,当然也可以算进总里程。
问题是:
你为什么非要开进去?
十二、所以我现在更在乎一个东西:Clean Color DR
这是我为了方便讨论自己使用的概念,不是什么行业标准。
普通 Dynamic Range 问的是:
从最暗到最亮,还能记录多少档?
我更关心的是:
其中有多少档,是 R、G、B 三个通道都还处在值得使用的工作区?
我暂且把它叫:
Clean Color DR。
也就是:
干净的彩色动态范围。
它不追求把传感器最后一个电子都榨出来。
它追求的是:
R/B 不要掉进最脆弱的低信号区域。
G 不要进入 clipping。
R/B 也不要因为数字处理撞到 numerical limit。
三个通道尽可能都待在舒服的位置。
如果为了做到这些,需要主动扔掉 0.5 EV,甚至 1 EV:
我一点意见都没有。
十三、这也是为什么我开始重新考虑 D850 的 ISO 400
D850 在 ISO 320 → 400 左右会发生一次 conversion gain 切换。
实测可以看到 input-referred read noise 明显下降。
所以 ISO 400 对 D850 来说是一个很有意思的工作点。
注意:
我不是说:
“ISO 400 动态范围比 ISO 64 大。”
当然不是。
我的想法恰恰相反:
我主动不要 ISO 64 给我的全部动态范围。
我要的是换一个合适的 conversion-gain 工作状态,然后把真正重要的数据放在 RAW 最舒服的位置。
所以可以尝试:
ISO 400 + 充分的真实曝光。
如果使用自动曝光模式,可以通过正曝光补偿实现。
如果使用 M 档,本质就是自己增加真实 sensor exposure。
目标只有两个:
不要让 R/B 饿死。
不要让 G 撑死。
十四、为什么会想到 ISO 400 +1,甚至 +2?
ISO 64 到 ISO 400 相差:
log₂(400 ÷ 64) ≈ 2.64 EV
所以在相同测光逻辑下:
ISO 400 / 0 EV
相对于:
ISO 64 / 0 EV
会少大约 2.64 EV 的实际 sensor exposure。
那么:
ISO 400 / +1 EV
仍然少:
2.64 - 1 = 1.64 EV
而:
ISO 400 / +2 EV
仍然少:
2.64 - 2 = 0.64 EV
于是 ISO 400 +2 EV 就变得很有意思。
它已经进入 D850 的 high-conversion-gain 工作区。
同时又给了 R/B 相当充分的真实曝光。
但相对于 ISO 64 的常规测光曝光,仍然保留大约 0.64 EV 的曝光差。
这块空间可能恰好可以用来远离 G 最危险的顶部区域。
注意:
这不是说 D850 的标准答案就是 ISO 400 +2 EV。
+1、+1.3、+1.7、+2,都只是具体场景可能出现的结果。
真正的原则只有一句:
选择合适的 conversion-gain 工作区,然后尽可能增加真实曝光,但提前离开 RAW 两头最不舒服的区域。
十五、但我后来发现,还有一个更邪门的办法
前面的办法,本质上还是:
我主动少用一点动态范围。
但是有没有可能直接改变 R、G、B 三个通道的关系?
也就是:
在 RAW 出生以前动手。
于是我找来了一块几十年前的东西:
CC40M Magenta Color Compensating Filter。
然后真的测了一遍。
测试机不是 Nikon,而是一台 Canon EOS-1Ds Mark III。
同一个场景。
同样 ISO。
同样光圈。
同样快门。
然后直接解两张 CR2 的 Bayer RAW 数据。
结果是:
R:-0.80 EV
G:-1.21 EV
B:-0.80 EV
所以真正关键的数字不是:
“它损失了一档光。”
而是:
-1.21 - (-0.80) ≈ -0.41 EV
也就是说:
CC40M 让 G 相对于 R/B 少了大约 0.4 EV。
十六、然后把损失的曝光真正补回来
假设 CC40M 总体损失大约一档。
我们不用 ISO,也不用 Lightroom Exposure 去补。
而是真的把快门放慢一档。
也就是:
Physical Exposure +1 EV
那么粗略来看:
R:-0.8 + 1 = +0.2 EV
B:-0.8 + 1 = +0.2 EV
G:-1.2 + 1 = -0.2 EV
于是相对于裸机:
R/B ≈ +0.2 EV
G ≈ -0.2 EV
看到这里,这块滤镜真正干的事情就很清楚了。
它不是简单把照片染成品红。
它是在:
重新分配进入传感器的 photon budget。
原来相对吃亏的 R/B:
多吃一点。
原来最容易先碰到上限的 G:
少吃一点。
而且这一切发生在:
ADC 以前。
不是 Lightroom。
不是 LUT。
不是 Profile。
甚至 RAW 文件都还没有出生。
十七、这和“增加动态范围”其实没有什么关系
这一点我现在反而想说得特别清楚。
CC40M 并不会神奇地把:
14 EV
变成:
14.4 EV。
Sensor 的 full well 没有凭空变大。
Read noise 也没有凭空消失。
我甚至完全接受:
用了它以后,某些意义上的总效率或者可用动态范围少一点。
我不在乎。
我真正想换的是:
剩下来的范围更干净。
所以 CC40M 的价值不是:
“增加 0.4 EV 动态范围。”
而是:
牺牲一部分总透射率,换取更合理的 RGB photon distribution。
这和前面的 ISO 400 思路,本质上其实是一回事:
我不再追求把 Nikon 的纸面动态范围一滴不剩地榨出来。
我开始主动取舍。
十八、最有意思的是:Nikon 自己二十年前就想过这条路
继续翻前面那份 Nikon 专利,会看到一个非常有意思的方案。
Nikon 明确讨论过:
降低绿色通道的 optical transmission。
目的就是让:
R : G : B
更加接近。
换句话说:
如果 G 太强,那就把 G 压一点。
然后 Nikon 紧接着指出了这个办法最大的缺点:
Sensitivity 会下降。
所以 Nikon 更倾向于增强 R/B,而不是主动砍 G。
从商品相机的角度看,这个决定完全合理。
一台相机要卖给:
体育摄影师。
新闻摄影师。
婚礼摄影师。
普通消费者。
谁愿意平白损失 sensitivity?
但二十多年以后,如果换成我的使用场景:
风光。
静物。
建筑。
产品。
棚拍。
相机就在三脚架上。
1/125 秒变成 1/60 秒,又有什么关系?
如果损失这一档总透射率,可以换来更合理的 RGB photon allocation:
这一档光我愿意付。
十九、所以现在还差最后一个实验
到目前为止,真正可以确认的证据其实已经不少。
第一:
Nikon 长期存在 R/B RAW prescaling。
D850 实测大约:
R′ = 1.1636 × R
B′ = 1.1317 × B
第二:
这种非整数 digital multiplication 会在 RAW 中留下规律性的 missing codes。
第三:
D850 的 prescaling 大约相当于:
R:+0.22 EV
B:+0.18 EV
也就是说,它确实改变了 R/B 的数字尺度和 numerical headroom。
第四:
Nikon Z9 的 RAW bracket 实测证明,在特定自然场景里,G 可以比 R/B 更早发生 clipping。
第五:
Nikon 自己二十多年前的专利明确讨论过 RGB sensitivity imbalance、光谱分离,以及降低 G optical transmission 的解决路线。
第六:
我们自己的 CC40M + 1Ds Mark III RAW 对照实测得到:
R:-0.80 EV
G:-1.21 EV
B:-0.80 EV
也就是:
G relative ≈ -0.4 EV
现在真正缺的只有最后一块拼图:
D850 + CC40M。
裸机拍一组。
CC40M 拍一组。
把滤镜损失用真实快门补回来。
然后直接看:
R 什么时候 clipping。
G 什么时候 clipping。
B 什么时候 clipping。
再看深暗部 R/B 的实际表现。
如果最终真的能够让三个通道更接近自己的最佳工作区,同时减少对 RAW 两端的依赖,那么这块几十年前的老滤镜就干了一件非常有意思的事情:
它没有给 Nikon 增加动态范围。
它只是帮我把那些我真正想要的动态范围,变得更干净。
现在还不能宣布它成功。
但这个实验已经非常值得做。
二十、研究到这里,我反而开始没那么在乎“14.5 档动态范围”了
不是说动态范围测试是假的。
而是这个数字只告诉了我们一部分事情。
以前看到:
14.2 EV。
14.5 EV。
差 0.3 EV,我都会觉得这是技术差距。
现在我会先多问一句:
这 14.5 EV 里面,到底有多少是我真正想用的?
最下面那一点:
R/B 还有多少真实信号?
Prescaling、重新量化和 WB amplification 相对于真实信号还占多少?
最上面那一点:
R、G、B 三个通道都还活着吗?
还是已经有一个通道 clipping,剩下的东西开始交给 RAW converter 猜?
如果最后 0.5 EV 是:
G 已经死了,
R/B 还活着,
那这 0.5 EV 当然仍然可以计入动态范围。
但它和:
R、G、B 全部完整的 0.5 EV,
对我来说不是同一种东西。
最后
以前我看曝光,只看一件事:
亮不亮。
后来开始拍 RAW,学会看:
爆没爆。
再后来学 ETTR,开始想:
还能不能再往右一点。
而 Nikon 恰恰特别容易让人产生这种欲望。
ISO 64。
巨大的低感动态范围。
暗部随便拉。
于是慢慢地,我们开始舍不得浪费任何一丁点纸面性能。
厂家给 14.5 EV,
我就一定要用满 14.5 EV。
最后 0.3 EV 也舍不得扔。
但研究到这里,我越来越觉得:
这可能才是真正需要改掉的习惯。
摄影从来没有规定:
一台 14.5 EV 的相机,
你就必须使用全部 14.5 EV。
如果主动放弃上下两头最不舒服的一点,最后只剩 13.5 EV,
但换来的是:
更稳定的 R/B;
更完整的高光 RGB;
更少依赖 RAW converter 猜颜色;
那我会毫不犹豫地选 13.5 EV。
因为:
动态范围是长度指标,不是质量指标。
一条路有 100 公里,不代表 100 公里都是柏油路。
最后 5 公里是烂泥路,当然也可以算进总里程。
但你没有义务非得开进去。
所以现在再有人告诉我:
“这台相机有 15 档动态范围。”
我的第一反应已经不是:
“牛逼。”
而是会多问一句:
15 档我知道。
干净的有几档?
当别人还在比较 14.2 EV 和 14.6 EV 的时候,如果你已经开始关心:
R、G、B 分别收到了多少 photons;
哪个通道最先碰到墙;
RAW 文件出生以前,厂家又对数据做过什么;
以及为了最后那半档纸面动态范围,到底值不值得付出颜色上的代价——
那么你看“动态范围”这三个字的时候,其实已经是在看另外一个东西了。
我现在真正想要的,不是:
最大的动态范围。
而是:
最大的干净动态范围。
说到底,原则还是那句特别土的话:
别让红蓝饿死,也别让绿色撑死。
至于厂家送我的最后那半档?
不好吃,我可以不吃。
参考资料
Jim Kasson:More D850 PTCs —— D850 R/B prescaling 系数,以及 ISO 400 附近 conversion-gain / read-noise 变化。
Jim Kasson:Nikon D850 photon transfer curves / D850 EDR 系列测试 —— Nikon factory WB prescaling、各颜色通道表现。
Jim Kasson:Lightroom highlight recovery —— Nikon Z9 以 1/3 EV 为间隔的高光 bracket 测试,可观察到绿色通道先开始 clipping。
RawDigger:RawDigger Histograms, Part 3: Overexposure Shapes —— Nikon 从 D2X 时代开始的 color-channel preconditioning,以及 D800、D3X 等 RAW histogram 实例。
RawDigger / LibRaw:关于 Nikon white-balance preconditioning 的讨论 —— RAW 数据在写入以前已经被改变,事后不能无损恢复原始整数序列。
Nikon Corporation:EP1494487,Color photographing device —— Nikon 对 RGB sensitivity imbalance、R/G spectral separation、R/B sensitivity,以及降低 G optical transmission 等方案的讨论。
本文 CC40M 实测:Canon EOS-1Ds Mark III,相同 ISO、光圈、快门条件下直接比较 Bayer RAW;测得 R ≈ -0.80 EV,G ≈ -1.21 EV,B ≈ -0.80 EV,即 G 相对 R/B 约 -0.4 EV。