上文中,我们有度量单位类比了色彩空间。“50”没有绝对的物理特征,“50厘米”有。将一个值和一个度量单位相结合才能赋予它更多的意义,并消除歧义。颜色空间比长度单位要复杂一些,但是这个类比可以用来理解颜色管理的许多方面。
然而,与其将颜色空间与度量单位进行比较,不如将它们想象成一把尺子。一种有长度的尺子,上面有许多刻痕。
色域
色彩空间的色域定义了色彩空间可以表示的色彩范围。它定义了颜色的强度和纯色的极限。
在我们的类比中,色域就像尺子的长度。假设我们有两个尺子,它们代表了两个不同的颜色空间——一个单位是1英尺长,另一个单位是1米长。
如上图所示,两个标尺的长度不一样。并且这两个尺子从0到1有相同数量的刻度线,但刻度线的物理间距是非常不同的;同样是数字“1”在两个尺子上的在空间上是完全不同的。
更宽的色域就类似那个更长的尺子。
你可以将1英尺的标尺类比为sRGB(标准色域空间),将1米的标尺类比为Display P3(宽色域空间)。1英尺尺子上最大的数值只是1米尺子的中间部分。当把sRGB中最极端的颜色转换为Display P3时也是这样——sRGB中的#ff0000在Display P3中仅为#ea3323。sRGB中的最大数值的红色只是Display P3中的纯红色“标尺”的中间部分。
给定相同数量的刻度线,越长的尺子物理精确度就越低。颜色空间也是如此——更宽的色域在更大的空间上拉伸颜色值,所以它们更容易产生梯度带。故提高色彩的精度对宽色域空间和色域转换很有帮助。
色彩精度
基于计算机存储数字的方法,当计算机存储颜色值时具有固有的精度。用尺子作为类比,如果假设一个值必须落在一个刻度线上,精度就可以类比为刻度线。更多的刻度线意味着更精确。
如果你熟悉十六进制CSS颜色,就会知道#ff0000是最鲜艳的纯红色,#fe0000是第二鲜艳的纯红色。在#ff0000和#fe0000之间没有任何色彩。红色在十六进制中从00到ff,如果表示为十进制数,就是从0到255,只有256个可能的色阶。你不可能得到一个值为254.5的色彩,这个值必须向上或向下取整。
这看起来似乎有很多色彩,但当涉及到绘制平滑渐变、颜色空间转换和其他步骤时,很容易造成肉眼容易看到的误差。当需要经过多个步骤的变换时更是如此,累计的误差导致更大的超过半个精度刻度的误差。
四舍五入的误差通常以条带、色调分离或明显的噪点的方式展现。广色域显示加剧了对更高精度的需求——如果我们的标尺变长,创建平滑渐变所需的刻度数量就会增加。
考虑到这一点,将来我们可能不会使用十六进制值表示颜色——它们本来就是低精度的,每个通道只允许8位(每个颜色通道允许256个数值)。更高精度的浮点值更有意义;额外的好处是,浮点数可以扩展到颜色空间的范围之外。sRGB中最亮的红色可以写成“1.0 0 0”,如果颜色空间允许的话,sRGB范围之外的红色可以写成“1.2 0 0”。
色彩精度不被定义为色彩空间的一部分,它是渲染引擎或设计工具的实现细节。这意味着不同的工具对色彩精度的关注程度不同,色彩精度取决于你使用的工具以及你的使用方法。
伽马值
色彩空间的伽马值(不是色域)可以理解为尺子刻度线的间距。相同间距的刻度线称为线性伽马。
和大多数尺子不同,色彩的伽马值不是总是等距的,大多数时候都是间隔不均匀的。sRGB使用非线性伽马曲线,如下图所示。其他常见的色彩空间也使用非线性的伽马曲线。Display P3的伽马曲线与sRGB的伽马曲线完全相同。
注意在尺子的左边有更多的刻度线。这提高了深色的精确度,因为人类对深色的感知更敏感。
伽玛通常被描述为指数曲线,根据上图可以看出,较高的值意味着较深的颜色精度更高,而较浅的颜色精度更低。sRGB的伽马曲线比这复杂一点——有很短的一部分线性线段,然后是指数曲线。sRGB的伽马值是2.2,但指数部分实际上是2.4(平均是2.2)。
虽然了解色彩管理不需要理解sRGB的伽马曲线,但如果你用苹果的ColorSync工具来深入研究颜色配置文件,这是一个有趣的话题,你需要考虑这个问题。重要的是尺子上的刻度线的间距,非线性的间距是很常见的。
色彩空间转换
我们已经了解了足够多的基础知识来进一步学习色彩转换。给出某一色彩空间内的色值,并给出要转换的目标色彩空间,怎样得到转换后的色值?或者说,如下图所示,给出一个尺子上的数值,怎样确定这个数值在另一个尺子上的位置?
源尺子上的数值会映射到目标尺子上最近的刻度上,如下图,如果源尺子上的数值超出目标尺子上的最大值,则映射到目标尺子上最近的刻度也就是最大值上。
这就是颜色空间转换的基本原理。在第3部分中,我们将为一些流行的设计工具提供屏幕设计所需的颜色管理设置。
-- 翻译自 bjango --