Show HN:用简单算法与色彩空间生成多样化的肤色

查看原文 HN 讨论

文章摘要

作者 automatoney 在做数字绘画和游戏开发时遇到一个具体的麻烦:要挑出一批既合理、又足够多样的肤色,出乎意料地困难。他好奇能不能定义一个色彩空间来让这件事变简单,于是有了这个项目——一个交互式的肤色取色器、一套配套的程序化生成算法,以及一篇把整个构造过程完整摊开的长文。全文标题里那句自嘲的定语很关键:这不是「正确的」色彩空间,而是一个「足够好的」(good enough)色彩空间。

文章开篇给出了问题的量级:emoji 说我们有 5 种肤色(或者干脆是卡通黄);化妆品牌可能说有 50 种;而角色创建器往往两手一摊让你从 16,777,216 个 RGB 值里自己挑。作者认为真正有用的答案应该落在「几种」和「几百万种」之间。他在动手之前先诚实列出了这项工作的局限:皮肤远不止一个颜色,身体不同部位差异极大,还受血流、黑色素浓度、光在皮肤各层中的复杂散射,以及白癜风、雀斑、色素沉着、疤痕等等影响;某些健康状况(银中毒会让皮肤呈蓝灰色、高胆红素会让皮肤发黄发绿)会产生「看起来不合理」的真实肤色;而且他只是一个人、不是研究者,所有判断都带着他个人的偏见和色觉;最后,颜色在不同显示器和不同光照环境下根本不会被一致地感知。

方法论部分他自己打了个「非科学方法预警」,但流程本身相当清晰,只有三步:手工标注 RGB 颜色以得到数据集的粗略形状 → 对数据集做 N=3 的主成分分析(PCA)把形状变成好处理的样子 → 用画图软件手工凑出一组方程,把目标空间里的一个球面映射到 PCA 空间里的数据上。

手工标注环节他做了一个简单的网页 UI:点击就把一张脸在「是」和「否」两侧之间移动。最初只是色块,后来他干脆画了张脸把颜色贴上去——他说盯着这个「粗糙的研究助手」的眼睛,会更容易迅速判断「嗯,我能想象这个人在街上走」。把标注数据画出来,得到的是一个在 (0,0,0) 与 (255,255,255) 之间摆荡的香蕉形,曲线偏红、远离蓝。他在这里卡了最久,试过凸包、各种回归、四次多项式,写出了他这辈子最难看的代码,最后是学到 PCA 才破的局。PCA 把那根悬在空中的香蕉「放平在地上」并沿坐标轴对齐,同时给出一个能在 RGB 与 PCA 空间之间来回转换的矩阵。

最后一步是拟合。他从一个球面方程 R² = t² + u² + v² 出发,把 t、u、v 用 x、y、z 表达,然后不断修改这些定义直到球被拉伸成与数据吻合,再把关系反解回去。他坦承:这里没有任何回归,纯粹是在 Desmos 3D 里手工试错、肉眼判断拟合效果。他说自己不背书这套具体做法,但确实认可整体方法——「标注数据 → PCA → 拟合一个球形方程」这条路。

结果最迷人的部分在于三个控制轴的语义是 PCA 自己长出来的,而不是他事先设定的:T 轴控制深/浅(deep/fair),U 轴控制潮红/赭黄(flushed/ochre),V 轴控制冷/暖(cool/warm)。他自己也是做完取色器之后才发现这三个方向各自对应什么概念,并把这当作 PCA 作用的一次漂亮演示。他也解释了为什么它不等同于 HSL/HSV:T 和 U 看似接近 Value 和 Hue 但并不完全吻合,而 V 与 Saturation 的差别最大——V 是从蓝到橙,而 Saturation 更像是从灰到橙。

R² 参数是这套方案最实用的设计。因为空间构造中用了球,所以只需一个半径就能定义采样范围。作者给了一张对照表:0.1 几乎没有变化;1.0 是随机取色要有像样多样性的下限;1.5「在保持真实感的同时有不错的多样性」;2.0「可能有点卡通,随机取样偶尔会出现离群值」;2.5 适合取色器 UI 但不适合自动生成;10 则「大概适合奇幻设定」。关键性质在于:缩小半径不是把深色或浅色一刀切掉,而是让深肤色、浅肤色、潮红、赭黄、冷调、暖调六个方向均匀地减少变化。把 R² 一路降到 0 得到空间原点,如果这套空间构造得当,这个原点应该是一个非常中性、含混的色调——换句话说,原点可以用来检测这套映射本身有没有偏向

文章中间还专门插了一节「人文中场」,作者停下数学,直言技术存在于社会语境中:浅肤色在历史与当下都被推崇和优先,深肤色则被边缘化和污名化。他在这里推荐了一批相关作品,包括 Nyma Tang 的《The Darkest Shade》系列(评测各品牌最深色号)、Vox 关于美妆业如何辜负有色人种女性的视频、Austin Walker 关于《动物森友会》中种族呈现的随笔,以及 Angélica Dass 的摄影项目 Humanae——后者用 Pantone 色号记录人类真实的肤色,作者说这与自己的工作精神相通,只是一个偏记录与对话,一个偏描述。

HN 评论精华

这条 Show HN 拿到 625 分、89 条评论,讨论的质量相当高,且大量集中在色彩科学的技术细节上。