一次猜测如何计分
Color Hunch 里的每一次猜测,都按你的颜色与真实颜色相差多远来计分——不是按你拖动了多少滑块,而是按人眼看这两个颜色有多不同。尺度是 CIEDE2000,这一页解释它是什么意思,以及为什么这个区别重要。
之所以重要,是因为最容易想到的替代方案,错得让玩家能感觉出来。
为什么滑块距离是错的尺度
给颜色猜测计分最省事的办法,是比较滑块的位置:你的色相离目标有多远,饱和度差多少。一行代码就够,而它做出的游戏,人们会悄悄不再信任。
原因是滑块上相等的移动,对眼睛并不是相等的变化。色相偏十度,在绿色里刺眼,在深蓝里几乎看不出来。在浅色上把明度挪一点,人人都看得见;在深色上挪同样多,几乎没人看得见。按滑块距离计分,会因为你从色相的另一侧靠近而扣你分,又会奖励一次明明看着不对的走运命中。
色差究竟是什么
色差的测量方式,是把两个颜色都放进一个专门构造的空间——空间里的距离对应眼睛看到的差别——再量它们之间的距离。这个数叫 ΔE,即 delta E,其中的 E 来自德语 Empfindung,意思是「感觉」。
第一个这样的公式 CIE76,是 Lab 空间里两点之间的直线。它是实实在在的进步,也有已知的弱点:在饱和色上夸大差别,在蓝色上又低估。CIEDE2000 是那次修正,为明度、彩度和色相加上加权项,并为旧公式表现最差的蓝色区域加上一个交互项。
Color Hunch 拿它做什么
你提交猜测时,你调出的颜色和那里本该有的颜色都会从 sRGB 转到 Lab,由 CIEDE2000 给出两者之间的距离。这个距离就是该回合的得分,而关卡的星数来自各回合的得分。
你看到的数字是接近度百分比,而不是 ΔE 本身。这是刻意的:ΔE 等于 4.2 并不能告诉你该怎么办,而「接近度 87」用你能与上一次比较的形式说了同一件事。ΔE 留在它该在的地方——计分内部。
为什么各处跑的是同一个公式
应用、游戏服务器和这个网站,用的是同一套实现,并对照同一批参考值核对过。在浏览器里得 87 的猜测,在应用里也得 87。
这听着理所当然,却很容易走样:三种语言里的三份代码,如果没有东西把它们拴在一起,就会各走各的。这里拴住它们的是一个测试,输入对固定,期望输出固定——一旦某个移植偏离参考,构建就会失败,而不是让排行榜悄悄失去意义。
ΔE 数值意味着什么
作为粗略参考,在像样的光线下,色觉正常的人看到给定的色差大致是这样:
| ΔE | 你会注意到什么 |
|---|---|
| 小于 1 | 肉眼分辨不出。两者读作同一个颜色。 |
| 1 到 2 | 训练过的眼睛凑近看得出来,通常要并排比较。 |
| 2 到 10 | 一眼就能察觉。多数人会说这是同一颜色的两种色调。 |
| 11 到 49 | 明显不同但仍有亲缘的颜色——一个红,和一个略偏橙的红。 |
| 50 及以上 | 完全不同的颜色。没人会弄混。 |
这些区间是惯例而非规范:业内就是这么谈论这些数字的,不同资料划的界线也略有出入。请把它当作读分数的方式,而不是标准。
CIEDE2000 由国际照明委员会(CIE)在 CIE 142-2001 中定义。这里的实现遵循 Sharma、Wu 与 Dalal(2005)的《The CIEDE2000 Color-Difference Formula》——多数实现都以这篇论文为核对基准,用于核对的测试数据也记录在其中。