02 - 颜色与感知

这篇文章会说说有关图形学中有关颜色的内容.

颜色

颜色是人的一种感知,它不是光的普遍性质。不同波长的光不是“颜色”。

物理基础

牛顿通过三棱镜,发现白光是由多种颜色的光混合出来的。

光谱(Spectrum):光线在不同波长/频率上的分布。

图形学上更关心的是可见光的光谱,波长大约在400~700nm之间.

谱功率密度(SPD,Spectra Power Distribution):光线强度在不同波长的分布。

SPD具有线性性质,例如下面两束光的SPD可以综合起来:

生物基础

人眼睛的结构如下:

和相机类比,瞳孔类似光圈,晶状体类似透镜,视网膜类似感受器。

视网膜上有感光细胞(Retinal Photoreceptor Cell):

  • 视杆细胞(Rod):感知光的强度,得到灰度图
  • 视锥细胞(Cone):分为S,M,L三种,用来感知不同波长的光,形成颜色

人眼看到的结果,也就是不同视锥细胞感知的 S,M,L 这三个值可通过 色彩三色理论(Tristimulus Theory of Color) 来计算,方法是其光谱响应曲线与光强曲线对应位置相乘再积分起来:

颜色重建与匹配

同色异谱:两种不同的光谱,最终得到的S,M,L值(看到的颜色)却是相同的。

我们可以用这个理论去进行颜色重建与匹配。

首先,需要了解计算机的成像系统——加色系统。定义三种原色,然后用三个系数分别乘以三种原色,将它们混合在一起得到。这样就能用去描述任意一种颜色了。注意,系数也有可能是负的。

完成颜色的重建后,就能开始颜色的匹配工作了。可以利用 CIE RGB 来进行匹配工作。

CIE组织定义了RGB的系统,和上边的加色系统差不多,它给出RGB三原光和目标测试光,它们都是单波长的,通过测试来测量多少强度的三种原色加起来与测试光相同。

它们的测试结果如下,我们要混合某种单波长的光,只需按下图取不同的r,g,b就行:

当然,现实世界的光线SPD是由很多波长组合而成,所以还要进行积分操作:

颜色空间

标准 RGB

标准RGB系统(sRGB,Standardized RGB), 是一种被广泛运用于各种设备的色彩系统,但是RGB所能形成的色域是有限的。

CIE XYZ 系统

使用X,Y,Z三个值表示颜色。其中,Y也表示亮度(Luminance)。他们的匹配函数跟RGB的不一样:

有人想直观的看X,Y,Z这三个值做可视化,参数是三维的,不好搞。因此,人们将X,Y,Z归一化,引出x,y,z这三个色度(Chromaticity),固定Y,可视化x和y,就能显示出下图:

而这张图也叫做 色域(Gamut) ,即一个颜色空间所有可能表示的颜色。

不同颜色空间显示的颜色范围也不同,如下图所示:

HSV/HSL颜色空间

基于感知的颜色空间(Hue-Saturation-Value),被广泛用于“拾色器”。

CIELAB 空间

L为亮度、a表示红绿、b表示蓝黄,这个空间认为轴的两端都是互补色。

互补色是通过实验得到的,我们可以通过视觉暂留效果验证,比如先看一张反色的图,一段时间后换成空白,就能“看”到互补色。

CMYK 检测系统

用于印刷的颜色空间:

未提到的

HDR,伽马校正。。。

参考资料

  • GAMES101-现代计算机图形学入门

  • 20 光场、颜色与感知 (yuque.com)