Apple EDR + Metal

Andy Guo原创2021年11月17日
  • Color
  • 三十分钟系列
  • Color
  • Color Science
  • 色彩空间
  • 色彩科学
  • ACES
  • EDR
  • Apple
  • Metal
大约 11 分钟

Apple EDR + Metal

最近被M1 Max 的新款MacBook Pro 搞得心里痒痒的,看到家里那台MBP(2012年中款),开始越来越慢,新系统也不能安装了(停留在10.15 了),就很想买一台……无奈,真的很贵!

众多更新特性中,最让大家觉得好评的就是那块mini-LED 的屏幕了!(不是刘海,是屏幕本身!)

HDR 了,又没有完全HDR

现在大多数的显示设备能力都是超过标准SDR( >100nit) 的,但是又没有完全达到HDR(≥1000nit)。对于多出来的这部分显示能力如何去使用,通常就有两种策略:

我们假设显示设备的能力是400 nit,那么这两种策略可以用下面的图示进行说明。

直接映射

尽可能准确

对于专业的内容创作者,肯定是希望尽可能的减少不确定性,那么如果想要准确还原SDR 的色彩,使用“尽可能准确” 这个策略。这样做的好处是,即使更换了其他显示设备,只要经过校准后,理论上可以看到“一致的颜色”。

不过这样,对于观众会有一些问题:

动态的调整?

那有没有一种方法,可以尽可能用上超出SDR 的部分,同时还让SDR(0~100nit)中间的色彩保持“看起来一致”?很明显,这就需要使用到动态的调整方法。

一说到 Apple 的动态调整,估计第一个就会让人想起那个又爱又恨的 True Tone 技术。

这个技术就是利用感应环境,动态的调整显示的色彩。希望用户可以在不同条件下得到“相似的观感”。

让我们想象晚上关灯看手机的场景,可能屏幕0~50 nit 的范围就可以满足SDR 的“观感”,那么超出50 nit 的部分,我们是不是可以当作超过SDR 的部分使用?那么对应的code value 是不是可以 > 1.0 了?

Apple EDR

在消费领域,Apple 可是很会的。所以,他们推出了Apple EDR 这项技术。

刚看到这个技术的时候,我认为这也是某种将SDR 变成 HDR 的算法。通常这种算法都会(效果不太好):

来源:https://ai.baidu.com/forum/topic/show/990953

通常这些“增强”算法,往往都会让颜色发生比较大的变化,而不能忠实还原创作者的意图。

好在我冷静下来,看了WWDC 2021 对于Apple EDR 的介绍open in new window

定义

Apple EDR 是高动态范围的一种数值表现方式,也是一套色彩渲染管线

嗯,听起来是不是有点不知所云?嗯,我第一次看的时候也是这样,所以非常推荐好好看看 WWDC 的视频。

总之,Apple EDR 不是想象中那种“色彩增强动态范围” 的算法。

数值表现方法(code value)

实在懒得看也没有关系,其实主要的思路,在前面已经说出来啦。Apple EDR 作为数值表现最核心的几点:

这里举个官方的例子A。

如果有一台Pro Display XR 的显示器,然后将reference white 设定在500 nit,由于Pro Display XR 的显示器的峰值亮度是1600nit,因此EDR

code value = 1600 / 500 = 3.2

再举一个例子B。

如果你的显示器极限亮度 600nit,你把reference white 设定为100 nit,那么EDR

code value = 600 / 100 = 6.0

由于 > 1.0 的部分是headroom(超过SDR 的亮度范围)。因此例子B中 EDR 范围是 0~6.0 的显示设备,理论可以显示的动态范围甚至会超过例子A 中的Pro Display XR

这种动态EDR code value 的方式,个人觉得很棒!充分利用了显示设备的能力,也照顾到了环境监看的变化!

渲染管线

光有数值是没用的,还需要好的渲染管线进行支撑。这就好比 ACES 的图像也是float,但是使用不同的DRT 最终会得到不同的观感。此时,可以认为EDR 就是一种色彩渲染管线,将EDR 的数值计算得到最终应该显示的亮度值。

个人感觉使用公式说明,更加准确有效!

第一步,通过函数f,将PQ 的码值转换到EDR code value

第二步,函数g 完成e 到最终显示亮度的转换。这个时候,我们可以认为函数g 就是某种tone-mapping 算法。

有趣的是,Apple 对于影视行业常用的色彩空间,提供了默认的函数g。同时,也留下了很多自由给开发人员,你可以自定义tone mapping 函数g,来实现自己的DRT

【要不要开坑,写一个自己的DRT?】

继续深入!Metal!

既然Apple EDR 看起来不错,那么如何才能使用上呢?为了加大难度,这里选择Metal

Apple 因为不能使用N卡,所以就和CUDA 无缘了…… 加上Apple 对于OpenGL也是不怎么上心维护,所以要想发挥M1 Max 的GPU 实力,可能需要去研究一下Metal

https://developer.apple.com/documentation/metal/open in new window

Metal 作为一个现代GPU 框架,可以非常高效的完成渲染、计算、并行化等处理工作。我们认为图像其实就是2D Texture,那么通过编写各种Shader,就可以实现各种有趣的事情:

前段时间,Davinci Resolve 17.4 适配 M1 之后,提升4x 性能,好像就是利用Metal 重写了引擎。

Metal 有点难,需要的技能树还是有点多的……所以我也没有太搞清楚,只能稍微搞一搞,写一个用于验证Apple EDR 的demo 程序。希望自己以后可以学明白,把以前很多CPU 上需要跑很久的算法通过GPU 稍微加速一下。

使用2018年的 Macbook Pro,就能够在屏幕上看到 2.0 的数值和 1.0 是有区别的。但是系统的取色却没有区别……如果同时再调整 Mac 的屏幕亮度,会发现 2.0 和1.0 之间的区别还会变化……

总之,挺神奇的。

最后

曾经都认为不可能在显示器上看到“比白更白”,随着科技的变化,这变成了现实。

这个能力我们可以辩证的来看。对于内容创作,还是应该在标准可控的环境中进行。但是对于观看来说,如果不管什么环境下,你都能够体验到和内容创作者接近的色彩,那么这就是一项好的技术!

二者并不矛盾。

凑足26999 赞,我就去买一台M1 Max 的 Macbook Pro

温馨提示

现在有 Andy 十分钟色彩科学合集售卖open in new window

十分钟色彩科学面包多二维码

购买后加微信muyanru345,拉入Andy 铁粉儿群,可在群里对学习工作中的色彩疑问进行讨论。