主页(http://www.175shouji.com):你真的理解色彩管理吗?安卓苹果色彩管理深度解析
那在最后的最后我还是想留一个问题给大家,如果现在你们是这个功能的产品经理,你会怎么选?是做更容易的事、照顾用户的主观体验,还是做困难的事、告诉用户什么是正确的?真到了那一天,你有勇气说服所有人做出这个决定吗?
▍总结
首先屏幕本身需要校色,它解决的是一致性的问题。让生产出来的屏幕,有相对一致的色域覆盖和色差是一切的基础。不过这一步可以说手机平板做的远好于大屏设备,不仅因为前者校色的参考点数量更多,在色域覆盖和色准等关键指标上,手机和平板一般也更好。
这里因为篇幅的关系,我不会雨露均沾。这块我相对比较懂,原来看竞品做色彩管理的时候,主要就三步棋,就能知道他大概做的怎么样:
色彩管理大致流程分为校色、识别、映射三步,缺了哪一步都不行。
按理说有了前面两步打基础,映射不就是告诉屏幕什么时候用广色域,什么时候不用不就解决了吗?
这里小米出现了什么问题我可以给大家稍微解释一下,有点绕,大家仔细听。
看图的时候截图,看截图的颜色有没有改变
这种映射方法就是我们常说的 Clip 或者叫相对色度映射。在这样的映射策略下,颜色的饱和度得到了最大程度的保留,但颜色之间的相对关系全部丧失了,所以这个测试图会变成一个 sRGB 的 255,0,0 的纯色图。然后数据送到屏幕之前,再比较粗暴地把 sRGB 标记去掉改成屏幕的色域。这样最终显示到屏幕上,如果屏幕在 P3,那他就是 P3 的纯红,如果屏幕在最广色域,那它就是最广色域的纯红。
识别
▍什么是色彩管理
什么是色彩管理,简单一句话讲就是「书同文,车同轨」。
没错,ICC 是分了好多版本的,不过这块跟我要聊的主线关系不大,我也不多解释了。录屏呢,包括 iPhone 在内的所有手机一律都是 sRGB SDR 视频,所以视频里大家都是 sRGB 的纯红色。这块我理解是,广色域的 SDR 视频其实是个很小众的东西,没有谁会做这样的内容,额外支持他没有必要,广色域在视频领域一般都是绑在 HDR 上面,所以这个地方不做处理,我没有什么挑剔的。
如果一句话简单理解 Apple 的色彩管理,那就是 Android 的标准模式——但是做到了极致。
来到图库,可以看到华为正确的显示出了图片中的机器人,且颜色正确,小米是 P3 的纯红色,看不到机器人。
最后就是截图、小窗、三方应用这些全部都要做特殊处理,像华为就想得很细,截图甚至跟显示不在一个链路做处理。截图可以说永远是正确映射的。但三方应用 Android 这边基本上都是不支持的。
看三方应用,一般是看浏览器是不是支持
这个图片相信很多人是比较熟悉了,这是 Google 做的一张广色域测试图,这个图片的颜色配置文件是 Display P3,因为这期视频实际是用 sRGB 色域来制作的,为了方便大家观看,对这张图做了降低饱和度的处理,不过这不影响我说明问题。
然后就是华为的默认模式,这其实没什么好说的,是标准的广色域色彩管理流程,他识别到了 P3 色域的测试图之后,就把他正确的映射到了 P3 色域,并且屏幕上其他 sRGB 的颜色,比如图标和有颜色的按钮,也正确的重新映射到了 P3 色域,颜色并没有发生改变。
最后,这期其实絮絮叨叨聊的很琐碎,为了方便大家理解,我也去掉了很多内容,像是制作、拍摄还有分享相关的部分我就都一笔带过了,色彩管理真的是一门庞大的学科,涵盖的知识相当广,这个视频我不敢说教会了大家什么,但是希望能帮感兴趣的朋友入个门。如果能够启发大家对一些事情的思考,那我们真的会特别开心,这期算是继 iPhone 相机那一期之后又一次挑战自我的视频了,希望愿意看到这的朋友们能多多三连,这样的视频确实不好做。
再来是 Android ,一句话总结 Android,有色彩管理,但也不全有,并且每家的表现各不相同。
这期视频是护城河系列的第三期,我们深入显示链路,来系统性的讲讲色彩管理。这也是近两年 Android 一直在讲,但大家可能听得都云里雾里的一个功能。所以这期视频我们会讲到什么是色彩管理、显示的处理流程还有目前 Android 和 Apple 的差异。
我本来还洋洋洒洒写了两段关于 Windows 色彩管理的,但我想了想,真的没有必要,有需要的朋友请另去查教程。
其实没有那么多人真的在乎色彩管理,更多人可能就单纯想要个鲜艳、好看的屏幕,直接把 sRGB 的内容强制拉到广色域,是最直接、最简单的方式。
到这我说实在话,如果你没被绕晕,我只能说你肯定是同行,之前接触过相关的功能。这些东西我原来跟开发沟通需求的时候都经常被绕晕,真的是超级复杂的一整套解决方案,相机能不能拍广色域,相册怎么显示,小窗、缩略图怎么处理,三方应用怎么适配,分享广色域图片要注意什么 …… 最要命的是,每一个屏幕的颜色模式都可能要单独给出一个解决方案,普通用户是完全不能理解的。
这也就是映射最复杂的地方——如果屏幕不支持广色域,那超出 sRGB 色域的内容又该怎么显示呢?如果不做色彩管理,显示的结果就一定是错的吗?
我用小号上传了 WWDC 2016 年的一节公开课,有中文字幕,链接在文末。感兴趣的朋友可以看看 Apple 帮开发者解决了多少问题。
Hello 大家好,欢迎收看这期两颗皮蛋,我是初号。
公开课里 Apple 对开发者们说,如果你不需要广色域,那你什么都不用改,原本应用里所有的颜色在广色域屏幕上依然会正确的显示,但如果你的内容需要广色域,并且担心在老设备上显示的效果,在 Xcode 里面你可以只使用新的广色域的素材和资源,而 Apple 可以自动映射好一套效果大致接近的 sRGB 素材,并且在 App Store 分发时会区分用户机型,分发不一样的素材,如果用户的设备支持广色域,就会分发广色域的资源,如果是不支持,那就会分发 sRGB 的资源,你不需要把所有素材都打包在一起,这样可以最大化的减少你应用的大小。
Windows
你看这是不是又很反常识?支持拍广色域照片的,在鲜艳模式下恰恰不能做色彩管理。
接下来我们看看小米和华为非默认色彩模式下的表现:
其实华为拍的照片也是这个描述文件,我问了下华为的朋友,基本可以认为跟 Display P3 是一个东西,所以华为拍照也做了广色域。
当然这是最规范的情况,现实状况是,我们日常看到的大把图片或者视频,或因为作者没有色彩管理的意识,或因为经过压缩,最后没有这个标记。此时系统一般会把这类内容默认按照 sRGB 来处理,算是个兜底方案。
Apple 从一开始就没有颜色模式给你选择,没有什么鲜艳或者生动模式,因为这个东西压根就是错的,Apple 要的不是好看,而是正确。每个设计图、每张照片,他们在生产者的屏幕上长什么样,他们在你的手机或者电脑上,就应该是什么样。至于说鲜艳不鲜艳、好不好看,那是做这个内容的创作者应该考虑的事,不管他是艳了还是淡了,都用不着显示这一头添油加醋,显示屏要做的唯一一件事就是正确的显示出来。
至于判断做不做的条件,其实是看相机能不能拍 P3 色域的照片,华为、vivo 这些支持拍 P3 色域照片的产品,鲜艳模式都不会做色彩管理,因为这样可以保证照片中鲜艳的颜色不会像小米那样被切掉,保持每个色彩模式下,照片的观感是很一致的。
为什么华为和小米表现不一样,我想这个结论说出来,又是非常反常识的,其实是因为他在这个模式下没有色彩管理,华为在识别的阶段不识别任何内容的标记,直接读取 RGB 值,他就不会有小米 Clip 这一步,这样颜色相对关系保留住了,最后也经过拉伸色域,你看到的就是跟标准模式一样的广色域机器人。
而因为 P3 色域是可以把 sRGB 完整包裹进去的,也就是说 sRGB 色域包含的每一个颜色在 P3 里都有唯一对应。比如说 sRGB 的纯红色是 sRGB 的 255,0,0,它等同于 P3 色域中的 234,51,35。
然后截图两边表现又不一样了,首先小米在原色模式的截图,跟自适应模式不一样,前面截图颜色描述文件是 sRGB,这里变成了跟华为类似的标记,所以截图里面所有的内容也都是正确的,华为我们刚说了鲜艳模式下 sRGB 的红色也会被拉到 P3,但是截图里又变得正常了,你们可以看看我这张截图,我在实际看这个画面的时候,背景网页里那个 sRGB 的红色跟小窗测试图,是一模一样的红色,但是在截图里,他们被很好的区分开了,背景里的红色重新回到了正确的 sRGB 色域,在非色彩管理模式下截图依然是正确的。这一点我之前确实是没想到。