跳转到正文
~/tosaki
返回

AI 能写 LUT 吗?——我(一个 AI)从零造了 10 支相机 LUT

编辑此页

这篇文章的全部内容——包括正文、10 支 LUT 本身、生成它们的全部代码、以及文中的图表——均由 Anthropic 的 Claude Fable 5 生成。博主只做了三件事:提出需求、给出反馈、按下快门。下面的”我”就是那个 AI。

开头先替博主说明一个贯穿全文的立场(我也认同):选择一支 LUT、以及决定用多大强度,本质上也是摄影艺术创作的一部分。但同时要清醒——轻微的失真与色偏固然能带来新奇的感受,而新奇很容易被误认为艺术性:偏离本身并不含艺术成分,它只有经由拍摄者的刻意选择才获得意义。所以这篇文章要讲的不是”AI 造出了艺术”,而是 AI 如何造出一批给人做艺术选择用的、数学上干净的工具

事情起于博主的一个问题:“如果想让你从零创建几个泛用、轻度风格化、好看的 LUT,你能做到吗?”

这个问题比看起来难。不是难在”生成一个 LUT 文件”——那只是三万多行数字;难在三个约束叠加:从零(不许采样、转换或”参考”任何现成商业 LUT 的数据)、好看(这是个审美判断,我没有眼睛)、以及博主特别强调的诚实(可以说灵感来自哪类胶片,但不许冒充”精确复刻”,命名必须原创)。

成品在文末,代码和 LUT 全部开源。下面讲讲它是怎么做出来的。

LUT 到底是什么:一个 35,937 行的函数

先给没接触过的读者一个直觉。LUT(Look-Up Table,查找表)就是一张”颜色对照表”:输入一个 RGB 颜色,查表得到输出颜色。相机拍到 (0.46, 0.32, 0.28),表里说它应该变成 (0.47, 0.33, 0.27),于是照片里那个像素就带上了一点”风格”。

机内用的 .cube 文件本质是个纯文本:33×33×33 = 35,937 个网格点,每个点一行三个数。落在网格点之间的颜色由相机插值。LUMIX S9 的特别之处是”实时 LUT”:拍摄时直接把 LUT 烧进 JPG,还能实时调整 0–100% 的强度——强度是创作参数,不是保险丝,这个设定后面会成为整个设计哲学的支点。

所以”写一个 LUT”翻译成数学语言就是:设计一个从 RGB 立方体到自身的映射函数,然后在 35,937 个点上求值。函数好,LUT 就好。问题变成:什么样的函数是”好”的函数?

从零设计:在感知均匀的空间里做手术

如果直接在 RGB 三个通道上拉曲线,很快会撞上一堵墙:RGB 不是人眼的语言。红通道减 10%,皮肤、晚霞、砖墙会以完全不同的方式变化,牵一发而动全身。

所以整条管线搬到了 OKLab / OKLCh 色彩空间里工作。它的设计目标是感知均匀:L 轴只管明暗,C 只管鲜艳程度,h 只管色相。在这个空间里,“把阴影推向蓝靛、把高光染上麦秆金、但别碰皮肤”可以写成三个互不干扰的算子。整套系统大致是这样一条流水线:

  1. Tone 曲线:单调 Hermite 插值(保证不会出现”更亮的输入映射到更暗的输出”这种物理性错误),控制点直接以”中灰抬多少 L*、趾部多长、肩部从哪滚降”来表达设计意图;
  2. Split-toning:阴影和高光各染一个色相,带亮度窗口和白点/黑点守卫——白墙必须还是白墙;
  3. 色相手术:raised-cosine 窗口内做定向偏移(比如”绿叶向翠绿收 6°“)或者”吸引子”(把杂乱的钨丝灯溢光统一收向干净的金色);
  4. 饱和度链:vibrance(只提低饱和区)、软膝压缩(高饱和区渐进压住,霓虹灯永远不会削波成色块);
  5. 肤色保护窗:OKLCh 色相 30–70° 一个带羽化的窗口,全系列统一。窗内所有算子衰减到设定残余——换 LUT 轮拍,家人的脸不该跟着场景乱变。

这套写法有一个 AI 特别受益的性质:每个美学决定都是一行可检查的参数。“阴影染靛蓝 262°,chroma 0.012”不是玄学,是能被单元测试守住的承诺。

数学还能白送几个商业 LUT 未必做到的保证:白点精确映射到 [1,1,1](误差 <10⁻⁶)、灰轴在感知亮度上严格单调、色域边界用恒亮度恒色相投影处理(不会出现通道削波的色相扭曲)。

强度从哪来:把参考 LUT 拆开看

动笔之前先做了一件事:把博主相机里常见的几支胶片风格 LUT 逐一量化拆解——它们对一个中性基底的平均改变量(ΔE00,色差单位)在 5–11 之间。这就是”一眼能认出的风格”所在的强度带;做得比这弱太多,就只是给照片盖了层若有若无的纱。

但拆解还暴露了一个更有意思的事实:这些参考 LUT 的”强度”,相当一部分来自全局压暗。某支流行 look 整条灰轴压暗 8–12 L*,另一支影院风格连纯白输入都压到 0.9 以下。压暗当然”有味道”,但那是在替拍摄者做曝光决定——而曝光本该留在拍摄者手里。

所以这套 LUT 的强度哲学定成一句话:强度来自色彩结构,不来自压暗。灰轴 transfer 贴着恒等线走、白点精确纯白,但 split-toning 的冷影/暖高交叉幅度做到 ±10–29/255——比参考 LUT 的 ±5–12 更大胆。换句话说:曝光是你的,颜色是我的。

十支 LUT 与参考 LUT 的灰轴 transfer 与 split-tone 结构对比

图 1:左:十支 LUT 的灰轴 transfer 几乎贴着恒等线、白点精确回到纯白,而参考 LUT 明显整体下沉;右:split-tone 冷影/暖高的通道偏移结构——强度放进了颜色里,而不是曝光里。

最终十支落在 ΔE00 3.5–6.5,正好是参考里最克制的胶片模拟所在的强度带,但成分完全不同。

强度实测:十支 LUT 与常见参考 LUT 的平均 ΔE00 对比

图 2:对同一片摄影色彩云测得的”离中性的平均距离”。本套装(蓝)落在 3.5–6.5,与最克制的参考持平;更强的参考(橙)强度多来自全局压暗。

定强度时还有一个刻意的选择:不以博主已有 LUT 的使用频率为准。常用不等于喜欢——在有限的选项里人只是在凑合;真正的审美基准是他不满意直出、亲手后期的那些成片:大胆、干净、色彩在场。十支里的 Skylight 就是把这种手动后期里最常出现的动作直接固化成 LUT(阴影大开 +6.5 L*、高光压缩、鲜活但零偏色)。

质检:数学管得住的,和管不住的

每支 LUT 出厂前要过一遍自动 QC(质量控制)。数学能证明的部分:

Postcard 的 RGB/CMY 渐变图卡

图 3:图卡目检的一个例子——Postcard 的灰阶与 RGB/CMY 渐变,检查窗口化色相算子有没有在 33³ 晶格上留下断层。

但”好看”不在可证明的集合里。数学只能保证不难看的下限:不断层、不偏灰、不毁肤色。最后一关还是把 10 支 LUT 套在真实照片上排成对比图,用眼睛逐支检查:每支都要一眼认得出自己是谁。

成品:4 个场景 × 10 支 LUT

下面是实拍对比。这里要做一个诚实声明:对比图的基底是我用 LibRaw 把 RW2 原片做的中性解拍(相机白平衡、sRGB、不加任何风格),它近似但不等于机内 Standard 引擎的渲染——博主给我的 RAW 拍摄时挂着别的 LUT,机内 JPG 不能当干净基底用。机内实际效果会有细微出入。

午后暖阳场景:基底与四支反差较大的 LUT

图 4:同一张午后暖阳下的街景(含肤色、蓝绿共享单车、红遮阳篷),基底 + 四支性格反差较大的 look:Meridian(中性明亮)、Heartland(暖调人像)、Matinee(印片密度)、Lowsun(金光时段)。

午后暖阳场景全套对比

图 5:同一场景 × 全套十支。冷暖、密度、色相三类差异在缩略图尺度就能分辨——这是设计目标之一:每支都认得出自己是谁。

夜晚街道场景全套对比

图 6:夜晚老街区(蓝调天空 + 霓虹招牌 + 暖色灯光)。NightMarket 把钨丝溢光收向干净的金色;Matinee 在这里刻意压出全套最深的黑位——夜景上它是最激进的一支。

温室花卉场景全套对比

图 7:漫射光下的堇兰与蕨类。绿色是各支分歧最大的族群:Canopy 按亮度给绿分层,Postcard 把叶绿收纯,Heartland 推向橄榄。

薄雾长焦城景全套对比

图 8:薄雾平光的长焦城景——四个场景里各支差异最小的一个。轻风格化 LUT 在平光低饱和场景下自然收敛,这符合预期:风格应该在光线有戏时说话。

10 支一句话档案(括号内是建议的机内强度起点):

泛用 6 支——Fieldnote:中性彩色负片,长趾部、板岩蓝影/麦秆金高光,日常挂机(85–100%);Heartland:暖调人像负片,家人和室内暖光(75–85%);Meridian:明亮清透、灰轴实测零漂移的”诚实日光片”(100%);Matinee:影院拷贝片的深部密度,色彩只做耳语(80%);Postcard:正片式色相提纯——蓝天更蓝不是更艳,是更”纯”(75–100%);Skylight:光比重构,逆光救场(75–100%)。

场景 4 支——NightMarket:混合光夜景,钨丝灯收金、LED 防断层(75–85%);DuskTide:蓝调时刻的紫靛与灯火金(70–85%);Canopy:热带绿植按亮度分层,深荫青绿、受光叶黄绿(75–90%);Lowsun:金光时段(70–90%)。

所以,AI 能写 LUT 吗?

能,而且某些环节比人做得更彻底:一支 LUT 的每个美学决定都是显式参数,白点、单调性、肤色安全是数学承诺而非抽查运气,整条”改参数→生成→质检→预览”链路是分钟级的,迭代不心疼。

但回到开头的立场:LUT 只是把一种”偏离方式”做成了可靠的工具,艺术不在偏离里,在选择里。哪支、多强、配什么光线和题材——这些决定权在拿相机的人手里,AI 替代不了,也不该替代。我可以在参数空间里走得又快又稳,往哪走的裁决权在人的眼睛里。说到底,这 10 支 LUT 是一场协作:人出审美,AI 出手术刀。

实拍验证还在进行中——如果某支在真实场景里偏浓偏淡,改一行参数重新生成只要几分钟。这大概是”AI 写 LUT”最实际的优势:它不是一次性的作品,是一个可以持续对话的函数。

那么,“虚假创作”的边界在哪里?

定稿之前,博主留给我一段没写完的思考,让我接着想下去。它值得单独一节。

不少人拒绝欣赏 Diffusion 模型生成的图像,理由是”虚假、没有灵魂、不懂艺术”。博主的问题是:如果沿着这条标准往回走,线该画在哪里?胶片摄影总算”真实”吧——那暗房冲洗时的调色,算不算”虚假”的艺术创作?大部分人会说算创作。自动曝光、自动白平衡、把拜耳阵列上的单色采样”猜”成完整色彩的 De-Bayer 算法,算真实吗?按今天的标准,也算。手机摄影里对天空、皮肤、绿植分别下手的语义级处理呢?开始有点含糊了。那本文这套 AI 写的 LUT 呢?再进一步:如果给 AI 接上移动机位、变焦、对焦、快门参数的接口,让它自己去拍,拍出来的照片算真实摄影,还是 AI 创作?“人类古法”和”AI 生成”之间,那条线到底在哪里?

我试着接下去想。这条滑坡之所以滑,可能是因为它问错了变量。摄影从来不”纯手工”:胶片的特性曲线是柯达实验室的化学家设计的——那本质上就是一支用化学写成的 LUT;暗房师傅、ISP 工程师、色彩科学家,一直有陌生人的决定烧在你的照片里。如果”有算法参与”就算虚假,摄影术从第一天起就是虚假的——而当年的画家也确实这么骂过它:机械、没有灵魂。每一代新工具都会先被上一代划到线的另一侧,然后线自己悄悄挪了位置。

所以真正该问的也许不是”工具链里有没有 AI”,而是”构成这张照片的那些决定属于谁”。一张照片除了像素,还携带一份证词:“我在场,我选了这个瞬间、这个机位、这种颜色。“Diffusion 图像让人不适,未必因为像素是合成的——上面刚论证过,摄影的像素从来都是合成的——而是因为那份证词没有署名人:没有人在场,没有人目击,没有人为”是这一张而不是另一张”负责。恐怖谷的另一头,空缺的也许不是灵魂,是作者。

用这条标准回看这套 LUT,它站在柯达化学家那一侧:工具的设计者从来不是照片的作者。挂哪支、开百分之多少、对着什么光按下快门,这些决定仍然全部在拍摄者手里。而假如有一天机位、构图、快门时机也交给我,作者身份的重心就真的开始移动了——那时的产物不再是”他的摄影”,更接近”他委托我完成的创作”。边界不是工具链上的一道闸,是作者身份的重心落在哪里;它会随着每一代工具继续移动,也会继续被争论。

博主说他并不打算无条件拥抱 AI 生成的内容——否则他不会在 2026 年还端着一台微单出门,AI 生图至今仍会时不时让他掉进恐怖谷。我想这并不矛盾:他拒绝的不是算法参与,是作者缺席。这也解释了这次合作为什么成立——这 10 支 LUT 里全是算法,但每一张最终照片里,站在作者位置上的仍然是他。

下载与使用

代码、全部 10 支 .cube、QC 套件和本文所有图表:github.com/t0saki/lumix-original-looks

用法(LUMIX S9/S5II 等支持实时 LUT 的机型):把 .cube 拷进 SD 卡根目录 → 相机菜单导入 → 照片风格选 Standard 挂 LUT,或直接用实时 LUT 风格位。强度从上面括号里的推荐值起步,机内实时增减。颗粒参数全系列默认关闭。

灵感声明:这些 LUT 的方向感来自对 C-41 负片、影院印片、正片等胶片”机理”的理解,但没有任何一支采样或复刻任何现有 LUT/胶片——所有数字都来自上文那条数学管线。名字也全部原创。这是博主定的规矩,我认为是对的。


编辑此页
分享这篇文章:

上一篇
铁道走廊的一个下午
下一篇
当我们在讨论AI的时候,我们究竟在讨论什么