色彩的差异与搭配
色彩的差异与搭配
图文来自:偃思明
色彩的差异与搭配
起因是在逛微博时看到了吉庐掌柜的配色,心生欢喜,因而想要定制同一配色的汉服,但由于种种原因,最终我的贴里与衬袍并不是图上的颜色,所以我在定制褡护时纠结了很长时间,到底应该选择哪种颜色的布料。在思考过程中我发现,颜色与颜色之间是存在着一种差异的,如果我能把这种差异具象化,那么只要我提供另一种颜色,我就能迅速得到与其搭配的另一种颜色。
以下是吉庐掌柜的配色:

配色1

配色2
颜色的差异
一、HSB颜色模式
HSB又称HSV,表示一种颜色模式:在HSB模式中,H(hues)表示色相,S(saturation)表示饱和度,B(brightness)表示亮度。
色相(H,hue):在0~360°的标准色轮上,色相是按位置度量的。在通常的使用中,色相是由颜色名称标识的,比如红、绿或橙色。黑色和白色无色相。饱和度(S,saturation):表示色彩的纯度,为0时为灰色。白、黑和其他灰色色彩都没有饱和度的。在最大饱和度时,每一色相具有最纯的色光。取值范围0~100%。亮度(B,brightness或V,value):是色彩的明亮度。为0时即为黑色。最大亮度是色彩最鲜明的状态。取值范围0~100%。
一开始我最先研究的就是HSB颜色模式,因为色相参数能最直观改变颜色,并且我起先单纯得以为这些颜色之间的差异仅仅只有色相,但是随着我对这几种颜色进行取色的时候,我发现他们的饱和度和亮度都有差异,并且是毫无规律的,所以比较单独某个参数是得不到彼此之间的差异的。之后我尝试了进行十六进制的加减,在进行这项研究的过程中我发现了一个问题,颜色是有上限的,黑色是000000,白色是FFFFFF,假设你想要一个搭配是000000x000001,他们之间的差异是1,你想要白色也有这种搭配,但是FFFFFF已经是最大的了,不能再加一了,[十六进制不像色相一样是一个循环的环,起点是红色,终点也是红色,361就代表1,]他是一条线,有头有尾,并且现在的我看来十六进制还有更局限的理由,所以我放弃了这个方法。
通过对十六进制的研究与我和一些美术朋友的交流,我发现了3D模型。将颜色的三个参数看作是圆形的三个环形轴,就像是3dsmax旋转模型时那样,如下图。我尝试着用HSB的三个参数建立模型,但随后我发现是不可能的,因为S和B都是线性,根本无法构成一个环。也就是这时候我放弃了HSB颜色模式,开始研究RGB颜色模式。

球体坐标系
二、RGB颜色模式
RGB颜色模式是工业界的一种颜色标准,是通过对红(R)、绿(G)、蓝(B)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的,RGB即是代表红、绿、蓝三个通道的颜色。
在研究之初我并没有考虑球体模型,将重点放在了颜色差异上,我将其想象为空间直角坐标系,每一个参数都是线性的、不成环的。我们把颜色想象为起点是(0, 0, 0),终点是(R, G, B)的一个向量,很容易就可以得出两个颜色彼此间的距离为:

但是随着我深入研究我发现,因为RGB空间是线性的并且相互正交,而人眼的视觉系统并不是线性的,RGB空间并不能反映人眼对颜色的感知,相对应的颜色距离也不能很好的反映两个颜色是否相近。大多数人采用了加权的算法来计算颜色距离,年幼的我顿时退缩了,在不断地寻找中,我发现了LAB颜色空间。
三、LAB颜色模式
LAB颜色模式是根据Commission International Eclairage(CIE)在1931年所制定的一种测定颜色的国际标准建立的。于1976年被改进,并且命名的一种色彩模式。Lab颜色模型弥补了RGB和CMYK两种色彩模式的不足。它是一种设备无关的颜色模型,也是一种基于生理特征的颜色模型。[1] Lab颜色模型由三个要素组成,一个要素是亮度(L),a 和b是两个颜色通道。a包括的颜色是从深绿色(低亮度值)到灰色(中亮度值)再到亮粉红色(高亮度值);b是从亮蓝色(低亮度值)到灰色(中亮度值)再到黄色(高亮度值)。因此,这种颜色混合后将产生具有明亮效果的色彩。

LAB颜色空间
可以了解到LAB颜色空间是基于人眼的颜色模式,因此我们不再需要加权,直接使用最直观的欧几里得距离公式就能得到两个颜色彼此间的距离,并且LAB颜色空间是可以完美使用球体坐标系的,所以解决了上限的问题。
随后我进行了编程,得到了吉庐配色中两个颜色的距离,又将我的布料颜色进行传参,但是我发现结果有无数种,一瞬间我就明白了,为了解释方便我先用空间直角坐标系来进行解释:

一个3d空间中可以找到无数个点与一个点距离相同,这些无数的点组成了一个球体。如果仅仅要研究颜色差异的话,到这里已经结束了,可是我的题目是色彩的差异与搭配,我的需求是为了得到相同风格的准确的另外一种颜色,而不是与其差异相同的无数种颜色,因而从这里开始,话题转向色彩的搭配。
色彩的搭配
一、颜色间的夹角
如果要确定另一种颜色,我们除了要计算出距离外,还必须计算出角度,只有特定的角度才能确定唯一的颜色。所以我回去温习了向量和弧度[捂脸],预习后我得出了两个颜色的夹角公式:

编程过程中我弃用了c,原因是没有对象真的太麻烦了,这也成为了一个伏笔,改用其他引擎后,运行效率十分低下,耗费了大量的时间。最后的结果出来了,仍然是无数种,仔细一想我又明白了,依然是用空间直角坐标系解释:

光确定夹角是足足不够的,还需要其他的限制。我采用的是两个颜色所组成的面与xoy面之间的夹角来作为限制。
二、面的夹角
其实两个颜色所组成的面与xoy面之间的夹角仍然是不严谨的,但对于我的研究来说是足够了。首先要得出两个颜色所组成的面的法向量,这又是一个难点,我一开始把他当成了三元一次方程,由于引擎的原因我算一个颜色就需要8个小时,这显然是不可能的,在优化算法的时候我发现他仅仅只是一个二元一次方程,但他又不是普通的二元一次方程,x、y、z都可能是1也可能不是,通过程序来判断是困难的,成也效率,败也效率,又是因为优化算法的原因,我将计算过程分成了三部,由此解决了效率问题与答案偏差的问题,具体我就不多做赘述。
通过面夹角的限制,我最终可以得到唯一的颜色了。
后记
下面是一些调色后的样本:

样本1

样本2
总体来说,我还是非常满意的,得到了我想要风格的配色,不用再纠结布料颜色与风格配色不同的麻烦,并且由于单品色差导致的问题以及其他问题,以后都可以通过这个办法来进行修正。对于我个人来说,我是一个色弱,所以这辈子的绘画梦就没有了,但是能通过数据层面来观察颜色,也算是老天赐予我的礼物吧。
这篇文章希望可以启发一些正在研究色彩的人,同时各位同袍也可以把想要的风格和自己单品的颜色发给我,届时我会在闲暇之时为你们匹配颜色,希望可以帮助到你们,谢谢。
更多资讯信息,欢迎大家加入汉服资讯群:713298055,关注汉服资讯头条号https://www.toutiao.com/c/user/102423477838/、新浪微博、微信公众号:hanfuzx、抖音号:1739103214、B站号:398540086!也欢迎在下面的评论中写下您的看法,谢谢!
特别声明:本号除原创文章外,其余文章为原作者观点,发布主要是为了方便大家互相交流。