想要动态范围的你,戴上了 Log 的面具
// 1
说到底,
这个 Linear,它不好吗?
不难理解,「亮度」的概念落到根本,就是以光子为基准存在的,一个光子就是一个光子,不能继续分割了。相应的,CCD 和 CMOS 传感器也都是靠鉴定一个时间段内积累的光子总数[1]来确定明度值的。
但不巧的是,人类意识的感知都是基于对数尺度的 [2],其中包括各种味觉、压力、重量、响度,而明度感知显然也不例外。人眼对于明度阶调的感知大致是一个接近于 Gamma 2.3 的幂函数 [3]。于是这就出现了一个问题, CCD/CMOS Sensor 直出的线性编码并不匹配于人眼观察的 Gamma。这样如果编码精度不够高的话,暗部会分配不到足够多的码值来记录信息,而出现断层和细节丢失;而如果全局暴力提高精度,虽然舒缓了暗部的问题,但是却又浪费了太多数据用于记录主观不敏感的高光部分。
对于静止画而言,即使大力出奇迹全局提高精度,16bit Linear Raw 直接吐出来保存,也不至于对于存储和处理造成过大的压力,毕竟拍摄速度和拍摄总数的要求并不是太高。但对于视频应用而言,情况就不太一样了。视频工作对于拍摄速度要求很高,而且每分钟随随便便就可以有两千帧。在此高压之下,对于高效记录的需求可谓迫在眉睫,哪怕每一帧省下一粒雪花也能在成片中滚出雪球来,存储和处理都要求效率最大化。
那对此冲突的显然的解法就是想办法让高光部分少占一点编码空间,多留点地方给暗部用,看起来就能皆大欢喜了。虽然说目前的 CMOS 传感器仍然无法直接按照对数尺度来记录信息[4],但至少将Linear 信息按照相比人眼更加平直的函数在中途变换一下,也可以舒缓中间文件的存储和处理压力。于是,就有了 Log Gamma。
// 2
首先,Log Gamma
并不会提供额外的「动态范围」
像左边这张图一样,按照斜率排布的,Log Gamma 相比于 Rec.709 能多延长三五档动态范围的图,都是厂商画出来骗人的。Log Gamma 又不是神油,没法让你传感器的满阱凭空提高七八倍,也不能无端压低底噪到几分之一(甚至有些 Log 不知道为什么输出来 Noise Floor 还要高许多)。那既然高光宽度和暗部深度都没有提高,无论如何都不可能平白无故多出一大截动态范围。
就像拍照环境中常见的 Gamma 2.2,它的斜率按说比 Gamma 2.4 更高,应该更早撞墙才对。事实上这件事情有发生吗?并没有。Gamma 2.2 仍然能良好的记录超过 16EV 的宽广动态范围。
几乎所有现行的明度传递函数,无论是 Rec.709、Rec. 2100 HLG 还是 ST.2084 PQ,以及 Log Gamma 都是 Scene-Referred Transfer Functions。意思是,它会把传感器能输出的最高和最低电平分别定在函数的两头,然后把一切中间调按曲线挤进来。至于多少明度对应多少电平那是传感器的事情,而且不随于传递函数变化。
而刚好传统意义上的「动态范围」量度的就是最大和最低可用(不失真)电平的差,因此只要没有截掉记录范围的头尾,无论你中间调是横着摆竖着摆九曲十八弯地摆,测出来的「动态范围」就应当是一样的。不同的传递函数只影响具体阶调的局部对比度和局部信噪比。
总之,事实如此:咱没有从下图任何一台机身的两个模式里看到谁多出几个格子来。
三台不同厂商的视频向(?)无反机身,S1H、α7 III 和 EOS R5,分别用提供的 Log Gamma 和最接近 Gamma 2.4 的模式录制 Xyla 21 标版。(真可惜 α7S III 没早两个月发售,但结论不会因此有任何差异)左边一列是未调色的 Log 原案,右边是 Gamma 2.4(加了少量 Lift,方便看清暗部)。
做出来动态范围完全一致。
而 Log 录制模式下多出来的高光,完全是机身骗你欠曝了。它把实际运行在 ISO 100 的增益,比如说,显示成 ISO 800 给你并按照 ISO 800 的速度曝光,这样中灰的位置就低了三档,可用高光自然就多了三档。至于阴影是不是也少了三档,看起来没有人在意。
那如果不能提供更多的动态范围,Log Gamma 到底干了什么?
数字编码是离散的,把无论多少东西挤进一个编码值里面以后,它就永远是一个单一的编码值了,里面的东西再也无法分离了。即使通过炼丹或者其他魔法猜出来了信息,它也不再是真实的了 —— 因为数学上没法证明它和原始存在的信息一致。
而为了把连续的模拟数据塞到离散的取值里面,关键就是量化。所谓量化,其实就是舍入的意思,在 0 和 1 之间,你不能拥有 0.8。即使你输入了 0.8,它也不得不会被记录成一个 1,就是这么简单。
在任意一个格子范围内的所有数据,哪怕只碰到了一点,都只能被记录成这个值 [5]。而更加不幸的是,取决于操作空间,码值只能在有限的格子数量之间滑动。一块东西就是一块。如果很不幸一些微反差之类的细节被挤进去了,那很抱歉就是永远地消失了。
正因于此,由于 Linear Encoding 环境下有大量的暗部都是贴近于 0 存在,如果记录下来就会有很多有用的数据变成了 0,再也恢复不出来。如果把暗部稍微拉起来一点,让它多占用一些码值,即使「动态范围」没有改变,但用于描述暗部的码值显著增加了,因而「信噪比」明显提升了。这两点并不冲突。
这就是 Log Gamma 背后的核心逻辑。
相比于第一张图,Log Gamma 追求各明度都分摊到类似数量的码值,不会出现像 Linear 一样多占少吃的问题。而正因为暗部信息显著增加了记录空间,微小的细节和画面差异也能被以良好的可用性记录下来。上面那张 Xyla 对比图是良好的例子,最暗部附近 Gamma 2.4 虽然数得出格子,但是已经断成一块一块的了,虽然能计入动态范围但不具备可用性。而 Log 的最后几个格子依然保存完好,这就是宽容度优势。
因此,咱认为对于Log Gamma 功能的合理表述是它「提供了更多的暗部宽容度」。
// 3
但这个看似完美的方案
并不是没有副作用的
在以低规格录制的 Log Gamma 视频里面,添加对应的 CST/LUT 以后非常常见这样一件事:
中间调,尤其是肤色,看起来非常脏。泥糊糊的,没有立体感,总之哪哪都不好看。
造成这个现象的原因有很多,但不可推脱的重中之重,就是码值分配造成量化误差。而误差累积到一个程度就会明显吃掉画面细节和阶调细腻程度。
如果横向做一个 Raw、Rec. 709、Log 的对比就能很明显地发现,恰巧是肤色区域,出现了肉眼可见的断层。即使是上图认真观察也不难发现它的亮部存在为数不少的断层,只不过真人的皮肤显然没有粘土人好(?),因而就算断了也没有很明显,只有在墙壁和衣服这种具备平缓过渡的地方才会露馅。
如果看一眼 Scopes 就更加明显了,从波形到色谱,没有一个地方是完整连续的。非常不好。
要细究起来,这事其实也不复杂。码值分配就是堆积木,一个萝卜一个坑,坑少了萝卜就会挤在一起,要吃亏。
更高的 Gamma 函数,譬如 Log,在提升暗部的时候,不可避免地从中间调和高光抢来了码值,而不可避免地挤压了这些地方的对比度。一个固定范围内的对比度就是转换函数的导数。转换函数局部曲线的斜率越高,其对应输出的对比度就越高。对比度越高的图像,在低精度下失真就越少,因为高斜率需要更猛烈的挤压才能把斜坡的头尾塞到一起去。就像曲线平直的 Linear 暗部会被编码吞掉、而高斜率的亮部则没什么事一样。
简单地说,就是在有限的空间里,Log Gamma 把高光的连续性抢走给了暗部。中间调和高光的局部对比度自然就没有了。如果很不幸地太多的高光被记录成了一个单一的值,那非常抱歉,它们被转换出来也会是同一个值了。
在低精度环境下添加 LUT 或者使用 CST 恢复成适宜于观看的 Gamma 2.4 时,会因为数字编码的离散性而不得不舍入,而进一步损失阶调。对于比较蠢的处理管线来说,它就直接吐出来断层了;而如果添加了一些适当的 Dithering 操作,虽然断层不会很明显,但是也会失去细腻度,中间调本应描绘的图像变得平而灰,缺乏立体感;更别说 Dithering 本身也会额外消耗信息量,输出时需要提高码率才能得到较好的效果。
或者应该这么说,Log Gamma 是用来改善明度值记录效率的,但并不能用以抵消记录精度缺失这一根本的问题。
观察一个使用 8bit Log Gamma 编码的灰阶就很明显:恢复回 Gamma 2.4 以后,明显可以看到有效码值集中在阴影区,中间调和高光明显就是大台阶前进。实拍的 Xyla 21 在 CST 以后也能观察到一样的现象,不再赘述。
数字编码是离散的,把无论多少东西挤进一个编码值里面以后,它就永远是一个单一的编码值了,再也无法分离了。而为了把连续的模拟数据塞到离散的取值里面,关键就是量化。在 0 和 1 之间,你不能拥有 0.8。即使你输入了 0.8,它也不得不会被记录成一个 1。
因为这个原因,一旦快门落下,此后任何对于图像的调整,无论是相机 ISP 还是编解码器还是用户调色做出的改动,本质上都是在损失原始信息。只不过无非不同的操作在不同的环境中损失的程度不一样罢了。而具体取决于量化精度的高低,超过一个阈值以后,其内禀的暗部压缩,就会被 Linear → Log → Gamma 2.4 这额外变换中产生的各项损耗超过。在这个情况下,继续使用 Log Gamma 就是得不偿失的了,应该直接录制与输出格式相符的转换函数。
这就是 Log Gamma 的风险所在。
人眼观感函数再怎么变,也不能改变人就是对中灰附近的阶调最为敏感的这个事实。如果量化精度低到会侵染中间调的细腻程度,那这就是捡了暗部丢了观感了。
// 4
因地制宜,
某些 OETF 只在某些环境最好用
实拍场景将围绕上面这张图展开,其包含充足数量的明暗过渡,且包含人像拍摄这个挑战性较高的环境,应该具有相当的代表度。它被以 Z 7 + Otus 1.4/85 ZF.2 以最低原生 ISO 摄制 14bit Linear Raw,以求保证最大的原生动态范围和量化性能。获得的图片经由后期超采成 3840×2160 16bit TIFF 后在 DaVinci Resolve 经由 32bit 空间执行后续操作,避免二次引入量化误差。
另外的室内场景(粘土人+色卡,α7R IV + FE 135mm F1.8 GM,14bit),和与之对应的 Xyla 21 标版场景(主要作 Waveform 观察用,具体摄制参数见具体图片)
总之无可争议的是这两套东西拍出来的东西无论是光学还是传感器性能,肯定比包括电影机在内的很大一部分视频设备画质好。
采集的图像通过官方提供的转换函数变换成:
Gamma 2.4 & Rec. 709 [6]
S-Log3 & S-Gamut3.Cine [7]
ARRI Log C & ALEXA Wide Gamut [8]
Rec. 2100 Hybrid Log Gamma [9]
Linear Encoding & ProPhoto RGB [10]
如其名所示,Sony S-Log3 和 ARRI Log C 均为 Log Gamma 的具体实现方案,只不过两者采用的转换参数略有不同,这两个会是接下来的测试重点关注的对象。
HLG 则是一个比较特殊的情况,它从 0% 到 80% 明度的曲线都非常贴近于 Gamma 2.4,而剩余高光的 20% 加入了一个非常平缓且接近于 Log 的 Soft Rolloff,相当于官方正规化了一个 Knee Point [9]。这样做的目的是在广播等来不及针对 PQ 标定亮度或者做其他转换的场景,提供一个能在有限码值内大部贴近 Gamma 2.4 SDR 而又提供适用于 HDR 的 Highlight Rolloff 的方案。
Gamma 2.4 & Rec. 709 是当今最常见的视频输出与配信的转换函数,应该不需要额外解释(不选择 Rec. 709 Gamma 的原因详见文末 5.2 章节)
而未经转换的 Linear Encoding 同样不言自明。
不选择测试 ST.2084 Perceptual Quantizer 是因为 PQ 并不是一个主流的摄录格式 [11],摄录出来也比较意义不明,其更为常见的用途是作 DI 和输出文件的 EOTF 之用。
转换完成后分别使用 14/12/10/8bit 重新量化,并在尽可能不引入其他压缩和 Dithering 处理的情况下使用 DNxUncompressed (14/12/10bit) 和 DNxHR HQ 688Mbps (8bit) 封装输出图像。经由转换和量化压缩以后的出片再反向导入回 DaVinci Resolve,并通过对应的逆转换函数恢复成 Gamma 2.4 & Rec. 709。重建完成后再次输出16bit TIFF,与原图直接转成的Gamma 2.4 图像进行比对读取 SSIM Indices
需要注意由于几乎没有引入压缩和其他额外处理,这个情况相比实际拍摄已经优越很多了。绝大多数人都不太可能遇到能吐出来未处理 4.66Gbps DNxUncompressed Float 信息流的设备。在常见的 100-200Mbps H.264 压缩下情况会比测试结果糟糕得多,这个心里有数就行了。
Structural Similarity Index (SSIM Index) 是一种计量多张图像之间差异的方法,其相比于 PSNR 和 MSE 被设计得更加贴近人眼实际的观察特性,因此更加适合来衡量「给人看」的图像画质。SSIM Index 是一个 0-1 之间的无量纲,1代表其于参考原图毫无差异,0 则代表没有一个像素是一样的。一般而言,两幅图像的 SSIM Index 如果低于 0.85,则大多数人可以观察出差异;而 0.90 以上被认为是相似度良好;达到 0.95 以上时人眼则难以辨认画质区别。
// 4.1
Gamma 2.4 & Rec. 709
也就是最单纯的转换
可以看到在 8bit 下,除了 Gamma 2.4 本身不用转换拔得头筹,也就 HLG 因为与前者足够的相似度,保持了较好的还原度,其他三个转换函数全军覆没,尤其是 Linear 因为损失了太多暗部,根本惨不忍睹。
你问咱为什么会有人用 8bit Linear 啊,想想都不合理。咱怎么会知道这种事情,可是真的有人用啊,而且真的有厂商提供了这个选项(此处特指某没手柄没快门的全幅无反)。总之如果在大街上看到了 8bit Linear,请绕着走。如果在摄影棚里看到有人在用 8bit Linear 记录,请替 DIT 去把他的头盖骨给撬了。
8bit Log Gamma 转换成 Gamma 2.4 的效果则比较相反,断层出现在了高光,尤其是面部下颚部分那一条阴影存在比较明显的断层,而脸颊部分的高光则因为缺乏描述而不如 Gamma 2.4 那么明显。
10bit 下总体情况有所改观,两个 Log Gamma 追平第一梯队,显示出了突出的可用性,不过仍然不尽完美。Linear 依旧不理想,只赶上了 8bit Log 的性能。这也并不奇怪,毕竟在某些连拍时会降低精度的机身上,12bit Linear 都会被人抱怨后期空间有所降低。
12bit 时 Gamma 2.4,Log 和 HLG 的性能优秀,尤其是 ARRI Log C 快马加鞭直接追平 HLG。Linear 终于变得可用,但还是拖后腿。
14bit 大家大差不差,此时的画质损失可以忽略。因为实验参考图制成 Gamma 2.4 的处理管线与测试图制成 Gamma 2.4 的管线显然是一样的,因此它占了便宜,拥有了 1.00 的完美结果。
基本上实际使用也与这个计算结果相符,在影视工业的实际制作中,12bit Log 被认为拥有与 16bit Linear 基本一致的后期空间,比如 ARRI ALEXA 系列,就是使用16bit Linear 数据来合成一个 12bit Log C,也没有人抱怨过什么。最近的 α7S III 也采用了类似的操作,按说疗效应该是类似的。
8bit 下按照各个函数记录,输出并转换回 Gamma 2.4 灰阶波形也是与其印证的。Linear 暗部直接消失掉了,Log 的明度马马虎虎,剩下 HLG 和 Gamma 2.4 表现良好。
具体的 SSIM Map 上也看得出来,Log 记录主要损失了中灰和高光(此处距离 Ground Truth 差距最大),而 Linear 的暗部完全被吞掉了。
// 4.2
当然,生活中可不止「最单纯的转换」
所以,做了一套调色
由于个人调色口味不能代表普遍情况,因此采用了一个简单的 Kodak VISION3 5207 Negative + Kodak VISION3 2383 Positive + Film Features 的模拟来代表相对常见(?)的一套 Print Film Emulation 过程。
PFE 操作相对于普通 Rec. 709 & Gamma 2.4 来说差得足够远,可以代表相当重程度的调色流程。另一方面 PFE 总体来说做法相对固定,按说比随便来的重口味更具备代表性和普适性。
总之调色后的结果相比于直接输出 Gamma 2.4,趋势是一样的,但是差距反而被缩小了。
本来就不能用的 Linear 在低精度区甚至反超了 Log,而 Gamma 2.4 和 HLG 大部分码值不需要转换的这一条也被削减了一番。两只 Log 总体来说还是在 10bit 才表现出了可用,8bit 虽然比上面好一点,但仍然差强人意。
究其原因,是因为胶片的动态范围普遍很小。35mm 的 VISION3 5207 250D 按标准可以提供10EV 左右的总动态范围 [12],实际宽容度经常只有 8-9EV 左右。而正统的 Gamma 2.4 原则上是用满两台机身接近 15EV 的动态范围的,就算是被低精度转换踩了一脚,说宽容度有 11-12EV 也不过分。
因此,高动态范围到低动态范围的转换通常会产生一部分的挤压。一般而言都是选择以中灰为准往两头走。数字传感器一般提供略少于 3EV 的高光,即使是相机机内 Log 骗你欠曝,总共 5-6EV 映射到胶片也没有太多需要处理的部分。而数字系统能往下延申到 -10EV 以外的阴影,不可避免地就被挤压了。
对于 Linear 来说这是重大利好。如下面所印证的,Linear 最缺乏精度的阴影段反而被挤在了一起,没有造成非常显著的问题,而正是依赖其丰富的高光段,相对于在此处明显缺乏信息的 Log Gamma 则实现了反超。
类似的事情也有点影响到了 HLG,它 Rolloff 的部分刚好既是高光又没占几个码值,自然受了一些打击。Gamma 2.4 没了「自己转换自己等同于不需要转换」这一条 Buff 以后表现得马马虎虎,但是也不糟糕。
下图 Linear 这边的暗部仔细看,其实是看得到断层的。但是正因为暗部都被挤在一起了,无论是视觉上还是测量上都不明显。
至于 Log 这边的情况有一些复杂。在高光部分确实损失了大量的码值,8bit SSIM 测出来拖后腿。
但其实因为 PFE 一般不会用满整个码值范围,高光其实还是会有一些 Rolloff 和挤压,导致 Log 这边的问题主要体现在差不多最亮的那几块,而且不太仔细看其实也不至于像 Log → Gamma 2.4 那样的泥浆肤色那么扎眼。具体到这个情况的话,个人认为 8bit Log Gamma 可用性虽然不好,但说不上糟糕,做一下 Dithering 或者平滑应该尚能蒙混过关。
当然这次测试是在实用中非常罕见的低 bit 高码率下进行的,很可能如果码率一低就会立刻显露。不能排除这一点。
稍微拉多一点对比度 Log 的高光断层就非常明显,而 8bit Linear 就跟没事人一样展现着源源不断的充沛过渡阶调。考虑到拉爆了对比度和锐化的面部肤色比较有碍观瞻,因此下图只选取了一块焦外高光。
当然同样不能保证低码率下 Linear 可用性仍然能保持。
另外一个事情是,一个很容易犯的思想错误是,因为 PFE 流程需要模拟负片,而 Cineon Log 本质上就是负片的感光特性,再又许多 Log Gamma(比如 S-Log3 和 Log C)都是按照 Cineon 设计的,所以使用 Log 比较有优势。
实际情况则不太是这样。许多调色软件均提供了高深度浮点环境(譬如 DaVinci Resolve 的运算管线是 32bit Float)[13][14]。既然输入以后的所有节点的精度都远高于原片,这个时候调色过程中的损失便可以忽略不计,因为从负片到正片它吐出来吃进去都是 32bit 的。这个时候会影响成效的则是另一个低精度场景,也就是输出。
说白了就是中间过程长啥样无所谓,只取决于输入和输出长得有多像。
至于 VISION3 2383(和其他一大票 PFE 的输出)的明度反馈很明显长得就不像 Log,它不是一个无曲率的斜坡下去,那即使 Log 本身和负片感光特性长得再像,也不能根本性改变结果了。
甚至它的斜率还要比 Gamma 2.4 高许多,EOTF Gamma 看起来是接近于 1.8 左右的样子,也难免 Linear 能在其中取得一些优势。
再观察一下具体波形。
8bit 环境下 Gamma 2.4 全明度域都出现了断层,但都很均匀而且缝隙不大。Log Gamma 和之前观察到的一样主要是高光大断层,暗部比较绵密(但可惜没什么用)。Linear 暗部比较稀疏,但不怎么看得到。
10bit 其实三者可用性都差不太多了。SSIM 跑出来也都是在 0.95 及以上,符合理论环境。
12bit 当然还是不如 14bit 的原始文件那样绵密,不过应该从图片本身出发是观察不出什么区别了。
// 5
总结
还有其他一些杂事
// 5.1 螺蛳壳里做道场,明确需求,再选择工具
根据本文中的实验数据,认为 8bit 直接 Rec. 709 & Gamma 2.4 一把梭即可。对于 Soft Highlight Rolloff 有特殊偏爱的话,用一下 Rec. 2100 HLG 也没什么所谓,但要注意色域的表现。10bit 可以允许使用 Log Gamma 进行范围不错的调色,尤其是提供了充足的暗部信息,为后期调整预备了丰富的空间,因而此时其实没有什么使用 Gamma 2.4 的必要了。12bit 可以允许 Log Gamma 进行相当程度的凶猛调色,并且 Linear 此时也具备相当的可用度了。
在低码率环境下(一般只有能力使用低规格摄录的制作一般规模也不大),最紧要的就是保证信息还原度。这个时候就需要制作者提前预见成品的 EOTF 长啥样,然后选择与之相近的 OETF。
在只能支撑起 8bit 摄录和后期处理的环境下,就别想着什么调色了,拉一拉白平衡看着差不多就行了,更别整什么 Log 有的没的。就像正常人其实不会去对着 JPEG 调色一样,8bit 100Mbps AVC 匀到地面每一帧只有 500KB,单张 JPEG 随便大几 MB 起码还能容纳一些额外的 Dithering 和冗余色相信息,这种规格拍出来的短片基本上就是长那样了。这种码率下无论怎么 Dither 都很有限,一拉就断别骗自己。
说白了就是「有效信息量最大化」,这个时候中灰是有效的信息,暗部反正拍什么格式都拯救不了,那不如直接选择最不需要调的那一种 OETF,把精力挪出来前期打光打好一点。
至于既然 8bit Log 这么没用,为啥厂商还提供它。那这点属实是非常奇怪的,可能是想欺骗用户让他们自觉很专业吧。毕竟 8bit Linear 都有人提供,何况更加无害的 Log。不如说为什么厂商给了你 Log 却只限制使用 8bit,这才是罪大恶极。
而能允许摄制和处理 10bit 甚至 12bit 的环境,应该或多或少也算是入了多机位和系统化工作流的门了。这种情况下各式 OETF 能提供的宽容度不至于差很多,此时应该选择统一标准化且适配于具体工作流的 OETF,方便批量制作和管理。具体此时为何不建议使用 Rec. 709 下一个小节有论述。
8bit 单纯建议使用 Gamma 2.4 那是因为已经没有调色空间了,除了前期一步到位没有别的办法。10bit 以上推荐使用 Log 同样是「有效信息量最大化」的另一个体现,因为 10bit Log Gamma 可以在通常不明显影响亮部的情况下提供远远高于 Linear、Gamma 2.4 和 HLG 的暗部信噪比,为了后期空间做这样一点取舍此时就是值得的,甚至如果后期对暗部有要求的话称为一本万利也不为过。
入到 12bit 基本上可以肯定就是 Log Gamma 的天下了,而具体到什么 Log 所谓不是太大,大家在形式上大差不差。12bit Log 可以媲美 16bit Linear 的暗部精度,而高光损失也可以忽略了。这种情况下 Log 的使用就是有效且优良的。ALEXA 和 α7S III 对此的应用,就是最好的证明。
说到底,还是因地制宜,干什么活用什么工具,有多大的碗吃多少饭。
// 5.2 关于 Rec. 709 Gamma / Gamma 2.4 的有效性边界
高深度环境下不推荐使用 Rec. 709 Gamma 乃至于 Gamma 2.4 原因不仅仅是暗部保留问题,还有其他一些流程上的劣势。
首先各个相机吐出来的 Rec. 709 也好,Rec 709 (800%) 也好,Gamma 2.4 也好,咱可以非常肯定地说都不符合 ITU 建议书上面的标准。各种加了 Knee、Toe、Rolloff 的简直是家常便饭,而各个厂商自己定义的 Log,总体而言,不会与他们提供的标准相差太远。而能够统一标准,尤其是如果同时使用多品牌多型号的设备的情况下,可以显著减少后期处理的工作量。
其次,因为一些历史遗留原因,Rec. 709 Gamma 相对于 Gamma 2.4 存在 Toe 问题并且 Rolloff 的处理方式不太一样。Rec. 709 按标准是一个 Hard Clip,当然具体厂商具体机身的处理方法存在不同,也有很多现代机身选择了 Normalization 或者其他的高光处理手段。一般来讲,Gamma 2.4 中间段和 Rec. 709 几乎一致,但是一般会把整个明度范围都塞进来,暗部处理和高光 Rolloff 没有那么多复杂处理和截断,更加纯粹。这是本文选择 Gamma 2.4 而非 Rec. 709 Gamma 的关键原因之一。
但即便如此,Gamma 2.4 的暗部存在和 Rec. 709 Gamma 一样的问题,会有大量的信息被挤在大概 0-40 IRE 这个区间。这一条也成为了大幅度调色的一条严重阻碍。在能经得起 Log to Gamma 2.4 变换的情况下(也就是 10bit 以上),便没有必要保留原初观感而放弃调色空间了。
// 5.3 关于所谓「广色域」
色值只是码值,RGB Primaries 具体的 (x,y) 坐标只是人为定义的一个点。这就是为什么色彩管理这么重要。
很多 Log 都会附送某种程度上的广色域,比如 S-Gamut,V-Gamut,ALEXA Wide Gamut,DRAGON Color 等其他一些标准,本质上都是试图使用有限的码值记录更丰富更饱和的色彩信息。
当然实际上恢复到 Rec. 709(甚至是 P3 或者 Rec. 2020),这个输出色域只占据这些广色域所提供的一小部分,因此后期匹配过程中必然经历一些程度的拉伸。而这个拉伸过程本质上和 Log Gamma 本身一样,在低精度环境下反而容易造成色阶断层等不理想产物。
下图是 α7 III 拍摄的一条显示上充满 Rec. 709 的 Hue Sweep。设置过程中使用了 S-Gamut3.Cine 录制,然后后期变换回 Rec. 709。不知道为什么实际饱和度还是比框框多了一点,总之道理是这个道理,色阶被割裂成一节一节的,实际调色也是充满断层的。
// 5.4 关于码率
录制上 Bit Depth 的提升通常也伴随着码率的提升,或者编码规格的提升(比如 AVC → HEVC),或者两者皆有。这是因为毕竟相机还是想想办法给你填满码值的。
但是输出上则不一定,甚至对于 DI 来说也不一定。任何比流媒体常见的个位数 Mbps 苦海更高规格的输出,都能从高色深上受益。主要来源是,第一,色调连续性本身能大幅度提升,因而能大幅度减轻甚至免去 Dithering 的使用。而 Dithering 本身是高频噪波,在不需要描述大量无用高频以后实际需要的码率反而会下降,造成同码率下 10bit 反而编码效果比 8bit 好。其二是 Banding 减少以后也能相应的减轻编解码器效果器和特殊模块的使用,进而降低编解码负担。
特别鸣谢
光的白龙 提供的关键技术支持和答疑
兰拓俊俊 提供的 Xyla 21 和实拍协力
附录,注解与参考文献
[1] 实际上 CCD/CMOS 衡量的是光电二极管转换后积累的电荷量,但由于转换比率(量子效率)相对固定,因而本质可以被等效为是同一个过程
[2] Weber-Fechner Law
[3] P. G. J. Barten, Contrast Sensitivity of the Human Eye and its Effects onImage Quality, SPIE PRESS, 1999.
[4] 各式光子计数器设计,如 SPAD 结构的传感器可以比较方便地直接按照对数坐标记录光强,但反正咱是没见到有人卖 SPAD 传感器的成像相机
[5] 其实不难注意到,按说如果量化噪声大到一个程度,它是可以通过侵吞暗部的方式来影响动态范围的。只不过这个效应在 8bit 就已经不太显著了,因此本文选择忽略这个问题。
[6] International Telecommunication Union, Recommendation ITU-R BT.709-6
[7] Sony Imaging Solutions, Technical Summary for S-Gamut3.Cine/S-Log3 and S-Gamut3/S-Log3, 2018
[8] ARRI, ALEXA Log C Curve, Usage in VFX
[9] International Telecommunication Union, Recommendation ITU-R BT.2100-2, May 2020
[10] American National Standards Institute, ANSI/I3A IT 10.7666:2003 Specifications of ROMM RGB
[11] SMPTE, ST 2084:2014 - SMPTE Standard - High Dynamic Range Electro-Optical Transfer Function of Mastering Reference Displays
[12] Kodak, KODAK VISION3 250D Color Negative Film 5207 / 7207 Technical Data
[13] DaVinci Resolve 11 Essential Training, Understanding Resolve's 32-bit image-processing pipeline
[14] Adobe 那边不太确定怎么回事,Pr 主要管线貌似是 16bit Float,Ae 有提供大面积的 32bit Float 处理。总之不要用左边没有色彩管理右边没有位深度的软件调色。是真的。
[15] International Telecommunication Union, Recommendation ITU-R BT.2390-8, March 2020
Copyright © Wavechaser 2019-2020