| 边长 N | 格点总数 | float32 体积 | 文本体积 | 色彩步长 |
|---|
LUT 是什么,为什么用「立方体」
LUT(Look-Up Table,查找表)回答的问题只有一个:给定这个颜色,它应该变成什么颜色。一维 LUT 每条通道各一根曲线,只能做亮度、对比、色彩平衡;三维 LUT 把 R、G、B 三个输入一起映射,因此能完成换色相、调饱和度、胶片模拟、色彩空间转换这些「跨通道」的操作。
所谓 33³,意思是红色轴取 33 个采样点、绿色 33 个、蓝色 33 个,总共 33 × 33 × 33 = 35,937 个格点。任意输入颜色都会落在这张网格的某个小立方体里,由周围 8 个格点做三线性插值(更讲究的做法是把小立方体切成 6 个四面体做四面体插值,精度更高)。
常见网格尺寸与代价
| 边长 | 格点总数 | 色彩步长 | 典型用途 |
|---|---|---|---|
| 9 | 729 | 0.125 | 低配设备、草稿预览 |
| 17 | 4,913 | 0.0625 | 温和的创意调色 |
| 33 | 35,937 | 0.03125 | 事实标准,绝大多数创意 LUT |
| 65 | 274,625 | 0.015625 | 技术转换、相机 Log 转换 |
| 129 | 2,146,689 | 0.0078125 | 高精度技术转换,体积已很可观 |
表中「色彩步长」= 1 ÷ (N − 1),它决定两个相邻格点之间要插值多大一段。注意 8 bit 素材本身的量化步长是 1 ÷ 255 ≈ 0.00392,也就是 N ≈ 256 才能精确表达每个 8 bit 值——但没人会做 256³ 的 LUT(那是 1600 万个格点)。实用结论:33³ 足以覆盖绝大多数创意调色,65³ 用于技术转换,再密下去肉眼收益极小、代价却按立方上涨。
体积为什么比想象中大
二进制 float32 的 33³ LUT 是 35,937 × 3 × 4 ≈ 421 KB;但常见的 .cube 是纯文本文件,一行一组 RGB,每行二十多个字符,于是同样的 33³ 会变成 1 MB 左右——文本比二进制大三倍以上。这也是为什么移动端和实时渲染管线更愿意用二进制或 float16 版本。
另外别忽略显存与加载时间:GPU 侧通常需要把整张 LUT 传成 3D 纹理,float32 的 65³ 就是约 3.1 MB 显存、并且每次加载都要解析完整文件。如果一个页面同时挂十几个 LUT 做预览,显存和首帧时间都会明显吃紧。
怎么选
- 创意调色(风格化):17³–33³。曲线柔和,小网格完全够用。
- 技术转换(Log → Rec.709、色彩空间转换):65³。这类变换曲线陡、跨通道耦合强,网格太粗会出现可见的色阶断层。
- 移动端 / 实时渲染:17³–33³ + float16,兼顾体积与显存。
- 需要精确还原 8 bit 输入:不必盲目加大网格,改用1D 曲线 + 3D LUT 组合通常更划算——用 1D 处理逐通道曲线,用较小的 3D 处理跨通道部分。
你可能还想问
精度越高越好吗?
精度越高过渡越细腻但体积与内存占用越大;多数场景常见中等精度已足够,过高精度收益有限。
体积怎么估?
体积随每通道的格点数呈立方增长,再乘每格数据字节数;升一档精度可能让体积大幅增加,升级前先算清楚。
和画质是什么关系?
高精度能减少色阶与过渡断层,但最终效果还取决于源素材位深与显示能力;低质量素材上高精度收益有限。
速查在线工具箱