Apple EDR + Metal
- Color
- 三十分钟系列
Apple EDR + Metal
最近被M1 Max 的新款MacBook Pro 搞得心里痒痒的,看到家里那台MBP(2012年中款),开始越来越慢,新系统也不能安装了(停留在10.15 了),就很想买一台……无奈,真的很贵!
众多更新特性中,最让大家觉得好评的就是那块mini-LED 的屏幕了!(不是刘海,是屏幕本身!)
HDR 了,又没有完全HDR
现在大多数的显示设备能力都是超过标准SDR( >100nit)
的,但是又没有完全达到HDR(≥1000nit)
。对于多出来的这部分显示能力如何去使用,通常就有两种策略:
直接映射:
0 = 显示器的“最暗”;1 = 显示器的“最亮”
尽可能的“准确”(假设显示器的设置是BT 1886)
0 = 显示器能够显示出来并且最接近BT 1886 的亮度; 1 = 100nit
我们假设显示设备的能力是400 nit,那么这两种策略可以用下面的图示进行说明。
直接映射
尽可能准确
对于专业的内容创作者,肯定是希望尽可能的减少不确定性,那么如果想要准确还原SDR
的色彩,使用“尽可能准确” 这个策略。这样做的好处是,即使更换了其他显示设备,只要经过校准后,理论上可以看到“一致的颜色”。
不过这样,对于观众会有一些问题:
我的显示设备其实已经超过了100nit,经过这样的校准之后,相当于 >100 nit 的部分就浪费了?
(那我为什么要为这额外的能力花钱?)
前面说过可以看到“一致的颜色”,只能在固定的监看条件下。而实际用户在观看的时候,环境还是比较恶劣的……
(太阳下面看不清;晚上又会太刺眼;环境灯光色温偏差很大……)
动态的调整?
那有没有一种方法,可以尽可能用上超出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 的介绍
定义
Apple EDR
是高动态范围的一种数值表现方式,也是一套色彩渲染管线。
嗯,听起来是不是有点不知所云?嗯,我第一次看的时候也是这样,所以非常推荐好好看看 WWDC 的视频。
总之,Apple EDR
不是想象中那种“色彩增强动态范围” 的算法。
数值表现方法(code value)
实在懒得看也没有关系,其实主要的思路,在前面已经说出来啦。Apple EDR
作为数值表现最核心的几点:
- 使用
float
,本质是linear intensity
- 覆盖了人眼可见的所有的色彩范围
black = 0.0
,reference_white = 1.0
- [0, 1] 范围内,对应的是
SDR
的亮度范围 - > 1.0 的数值,对应的是
HDR
的亮度范围
这里举个官方的例子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
的数值计算得到最终应该显示的亮度值。
个人感觉使用公式说明,更加准确有效!
- x 表示
PQ
的code value
- R 表示的监看环境
- D 表示显示器的极限能力
- e 表示得到的
EDR
code value
- y 表示最终的亮度
第一步,通过函数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
!
Metal
作为一个现代GPU 框架,可以非常高效的完成渲染、计算、并行化等处理工作。我们认为图像其实就是2D Texture
,那么通过编写各种Shader
,就可以实现各种有趣的事情:
- 图像处理
LUT
计算- 视频编解码
前段时间,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