Skip to content

games101 七、颜色

光的谱功率密度

光的谱功率密度(Spectral Power Distribution,SPD)是指光在不同波长上的功率分布情况,通常用一个函数 \(S(\lambda)\) 来表示,其中 \(\lambda\) 是波长,单位为纳米(nm),\(S(\lambda)\) 的单位是瓦特每纳米(W/nm)。

不同光源的 SPD 曲线不同:

spd-curve.png

人眼的感光原理

人的视网膜感光细胞分为视杆细胞和视锥细胞,视杆细胞负责感应灰度,视锥细胞负责感应颜色,视锥细胞又分为三种,分别对红、绿、蓝三种颜色敏感,这就是我们常说的 RGB 颜色模型。

视锥细胞并不是只能感应纯红、绿、蓝三种颜色,而是对不同波长的光有不同的敏感度,如图所示,三种视锥细胞的敏感度曲线不同:

cone-sensitivity.png

视锥细胞的感光敏感度曲线因人而异,每个人都是不同的。

视锥细胞的感光结果用数学可以描述为光线SPD曲线和视锥细胞敏感度曲线的乘积积分:

\[ S=\int r_S(\lambda)s(\lambda)\,d\lambda \]
\[ M=\int r_M(\lambda)s(\lambda)\,d\lambda \]
\[ L=\int r_L(\lambda)s(\lambda)\,d\lambda \]

其中,\(S\)\(M\)\(L\) 分别表示三种视锥细胞的感光结果,\(r_S(\lambda)\)\(r_M(\lambda)\)\(r_L(\lambda)\) 分别表示三种视锥细胞的敏感度曲线,\(s(\lambda)\) 表示光线的 SPD 曲线。

由此可见,视锥细胞是对全波长的光都进行感光的,只是对不同波长的光有不同的敏感度。

同色异谱

根据前面提到的人眼感光原理,我们可以发现有可能存在这种情况,光源的 SPD 曲线不同,但人眼感受到的颜色却是一样的,这就是同色异谱现象(Metamerism)。

这就给不同颜色的人造光源提供了可能性,我们可以用不同的颜色混合得到新的颜色。

颜色混合

单纯的 RGB 混合并不能得到所有的颜色,有时候需要将某个颜色的光谱调整为负值才能得到某些颜色。

颜色空间

Standard RGB (sRGB) 是一种常用的颜色空间。

CIE XYZ 是一种基于人眼感光原理的颜色空间,Y 表示亮度,X 和 Z 表示颜色信息,将 X、Y、Z 归一化后可以得到色度表示:

\[ x = \frac{X}{X+Y+Z}\\ y = \frac{Y}{X+Y+Z}\\ z = \frac{Z}{X+Y+Z}\\ \]

HSV 是一种基于色相、饱和度、亮度的颜色空间。

CIELAB(Lab*)是一种基于人眼感光原理的颜色空间,L 表示亮度,a 和 b 表示颜色信息,a 表示红绿轴,b 表示黄蓝轴。

色域(Gamut)

颜色空间能够表示的颜色范围叫做色域,不同的颜色空间有不同的色域,sRGB 的色域比 CIE XYZ 的色域小。

CMYK:一种减色颜色空间

上面提到的颜色空间都是加色系统,不同颜色的光线混合在一起会得到更亮的颜色,最终会变成白色。

而 CMYK 是一种减色系统,不同颜色的颜料混合在一起会得到更暗的颜色,最终会变成黑色。

CMYK 颜色空间中的 C、M、Y 分别表示青色、品红色、黄色,K 表示黑色,CMY 混合会得到 K,也就是黑色。