为什么我在使用 JPEG 图片时必须使用 2.2 的 gamma?

平面设计 颜色 3d 色域
2022-02-05 14:45:02

在渲染过程中,纹理文件的 gamma 为 2.2。但是纯色不需要这种伽马校正,特别是如果 RGB 值来自光谱特征。

那么为什么我必须在我的纹理文件中使用 2.2 的 gamma?为什么我们在 CG 世界中使用 2.2 的 gamma?为什么我们不对具有真实颜色的图像使用 1 的 gamma?

2个回答

TL;博士; 因为您的显示器不是线性显示颜色

这是一个文化问题

使用 1 的 gamma 会很浪费。人眼不是线性敏感的,因此数据是有偏差的,因此在您的眼睛更敏感的地方会有更多数据。说话更划算。因此,监视器和输出设备的设置假设颜色本质上不是线性的。Gamma 2.2 是 sRGB 使用的,也是 Windows 所采用的。(苹果经常使用不同的伽玛设置)。

但是,如果您想在图像之上进行计算,您可能需要使用线性空间,因为它更容易将值相加。现在,如果您假设图像是线性的,那么当显示在假设伽马不是 1 的监视器上时,您的结果是错误的。因此您需要再次补偿图像。这意味着更关心其计算引擎的系统可能会假设进行预处理以使负载更小。

没有理由不能自动处理

它只是在 3D 图形应用程序中不常见*。如果您渲染 3D 图形,您更关心计算。图像是否真的经过伽马校正的问题通常很难知道。没有真正的方法可以从图片元数据中读取此信息,因为即使使用假定线性应用的方法,它们也会错误地报告图像已得到纠正。这通常发生在合成图像上,如凹凸贴图或其他处理过的图像。因为您需要从校正过的线性开始并返回,所以如果您处理错误,最终会出现 2 倍的错误。更糟糕的是,即使在反复尝试解释这一点之后,大多数资产创建者也不知道我在说什么。所以最好手动处理。

2.2 不是这个 gamma 讨论的结束,但它是最常见的设置。您还可以使用配置文件转换比伽马校正更准确。但这取决于您的系统是如何设置的。

数学解释

这是一个更简单的解释。您的显示器有 g(x) 的显示错误,如果您的数据符合 g(x),这没有问题,但是如果您想计算

a+b+c+d

a, b, c, d 符合您实际需要计算的 g(x) 的误差。

g(g -1 (a)+g -1 (b)+g -1 (c)+g -1 (d))

您需要一遍又一遍地为每个子元素执行此操作。因此,不是每次将所有转换为线性然后再转换一次时都运行转换。问题:并非所有来源都需要覆盖,有些来源本质上是线性的。

* 这正在慢慢改变。但是问题仍然存在,您不知道图像是否需要补偿。并非所有来源都是平等的。

这只是我对这个概念的理解,所以如果您是该领域的专家,如果需要,请随时更正/修改答案。

伽玛值为 1 是线性的,因为像素值每翻一番就等于亮度翻倍。这就是数字设备处理光线的方式。然而,人类对这些亮度变化的敏感度要低得多,尤其是在场景中较亮的部分。来自Cambridge In Color 的这个优秀的伽马教程,“......伽马是我们眼睛的光敏感度和[数字设备]的光敏感度之间的转换。”

所以 2.2 的 gamma 比 1 的 gamma 更接近于我们对光的感知。并且一致地使用 2.2 gamma 使所有元素具有“苹果对苹果”的关系。