You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

LUT中负值的含义与使用方法——.cube纹理片元着色器疑问

.cube查找纹理负值处理与应用逻辑解析

为什么.cube LUT会包含负值?

.cube格式支持浮点精度的颜色数据,负值并非错误,通常用于:

  • 色彩空间转换时的补偿(比如宽色域转窄色域时,部分颜色超出目标色域范围,会用负值记录偏移量);
  • 风格化调色效果(比如模拟胶片暗部的色彩偏移、增强对比度后的暗部细节调整);
  • HDR场景下的颜色信息(HDR管线允许颜色值超出0-1范围,负值可用于记录暗部的色彩偏差)。

你的计算假设是否正确?

这取决于你使用的.cube LUT类型:

1. 绝对型LUT(最常见的标准类型)

这类LUT直接存储输入颜色到输出颜色的完整映射,逻辑是:用原始outputColour作为3D纹理的采样坐标(UVW范围为[0,1],和常规纹理一致),采样得到的LUT值就是最终输出颜色,不需要额外混合。
比如你的例子中,若这是绝对型LUT,用vec3(0.5, 0.5, 0.5)采样得到vec3(0.1201138, 0.0, -0.0063639),直接输出该值即可(HDR管线可保留负值,sRGB管线需做 clamp 或色调映射)。

2. 增量型LUT(特殊用途)

这类LUT存储的是相对于输入颜色的增益/偏移量,你的计算逻辑才成立:

vec3 lutValue = texture(sampler3D cubeLut, outputColour).rgb;
vec3 finalColour = outputColour + outputColour * lutValue;
// 等价于 outputColour * (1.0 + lutValue)

按此计算,你的例子最终颜色为:

  • R通道:0.5 + 0.5 * 0.1201138 ≈ 0.5600569
  • G通道:0.5 + 0.5 * 0.0 = 0.5
  • B通道:0.5 + 0.5 * (-0.0063639) ≈ 0.496818

负值的处理方式

  • HDR渲染管线:负值是合法的,可直接保留,用于后续后期效果(如 bloom、色彩分级);
  • sRGB/LDR管线:需要将负值 clamp 到0,或通过色调映射算法(如Reinhard、ACES)将浮点颜色压缩到0-1的可显示范围。

内容的提问来源于stack exchange,提问作者CJ_Notned

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 04:55:24