线性工作流和颜色管理

线性工作流是一种进行着色、照明和渲染的方法,与直接使用原始的非线性视频值相比,它具有许多优势。颜色管理通过正确转化输入、渲染、显示和输出颜色实现线性工作流。

但是,有关“线性工作流”的许多可用信息实际上描述了简单的“de-gamma 和 re-gamma”工作流。从渲染空间准备颜色值以进行显示的正确视图变换应包括具有摄影响应的色调贴图。

关于场景线性工作流

在现实世界中,灯光以线性方式相加。这意味着,如果使用两个光源,则总亮度为每个灯光亮度直接相加之和。

几乎所有 3D 渲染器使用的算法都按照同样的方式工作。线性工作流通过确保渲染过程中使用的所有颜色值与场景中的亮度成正比,确认了这一事实。这解决了许多照明和着色问题。例如,可以更轻松地实现宜人的照明效果,保持高光和阴影之间的良好平衡,而无需使用额外灯光等技巧。此外,线性输出适合合成等进一步的处理,而无需额外的调整和校正。

线性工作流的一个问题是,已准备好显示的图像(如,用作纹理的 .png 文件)不是线性的。换句话说,数字颜色值与亮度不成比例。这意味着必须对其进行转化或变换,然后才能用于线性工作流。

反过来,线性工作流的渲染结果是线性的,不适合直接显示。也需要对其进行变换,然后才能在显示器上正确显示。

颜色管理适用对象

颜色管理包括应用适当的变换以根据需要在颜色空间之间进行转化。在预览和渲染过程中的特定点应用这些变换:
  • 输入时,应用变换以将图像从对其进行保存的颜色空间转化为渲染空间。
  • 当您工作时,视图和显示处理功能将对渲染空间的颜色进行转化,以在视口、“渲染视图”(Render View)“UV 编辑器”(UV Editor)中提供有用的预览。
  • (可选)您可以将输出变换应用于经过渲染的图像文件,以在外部查看器中显示它们。

处理图像输入

处理输入图像(如纹理)的正确方法取决于在场景中如何使用图像。还取决于图像本身,包括图像当前的颜色空间、编码和图像状态(图像的颜色值是与场景相关的亮度值成比例,还是与显示相关的亮度值成比例)。

用于非颜色数据的图像不应应用任何变换。这包括凹凸、法线、置换贴图,以及用于其他属性(如半透明、镜面反射度、反射率等)的贴图。

对于用于表示颜色的图像,存在几种可能性。已经场景线性的图像不需要任何转化,只是可能需要从输入空间的主颜色转化为渲染空间的主颜色(如果它们不同)。这包括大多数高动态范围图像,如 OpenEXR、HDR 和一些 TIFF 文件。

使用特定设备捕捉的图像应该应用特定于该设备的输入变换。这包括数字电影摄影机拍摄的片段,以及来自 ADX 校准的扫描仪的胶片板。其他类型的扫描胶片板通常需要某种形式的对数到线性变换。

已经准备好显示的图像应移除 Gamma。这适用于许多常用的图形格式,包括 JPEG、PNG、BMP、Targa 和一些 TIFF 文件。但是,请务必注意,在移除 Gamma 后,颜色值与显示的亮度成线性正比,而非与场景的亮度成线性正比。在某些情况下,还需要通过应用反向色调贴图,使值成为场景线性。在其他情况下,反向色调贴图可能会创建大于 1.0 的值,这不适用于漫反射率(漫反射系数)、透明度和其他贴图的颜色。

显示渲染的输出

若要显示场景线性图像,必须对它进行转化以供查看或输出。此变换通常涉及两个步骤:

  • 第一步是,将场景相关的值转化为显示相关的空间。例如,这可能需要通过色调贴图将颜色从高动态范围转化为 [0, 1],并更改主颜色。颜色管理首选项中的“视图”(View)设置用于控制所应用的色调贴图。
  • 第二步是,针对特定显示转化值。这可能需要再次更改主颜色和相应 Gamma,并将其编码为适当的整数值。首选项中的“显示”(Display)设置用于确定使用哪些主颜色和 Gamma 对整数值进行编码。

3D 场景模拟真实世界,主要体现在存在范围非常广泛的亮度值。另一方面,由于最大值编码为 1.0,因此显示设备可以输出的亮度值范围有限。另外,通常在比户外场景更暗或者比明亮的电影布景更暗的照明环境下查看显示设备。出于此原因,通过生成合适图像的摄影响应,使用色调贴图将高动态范围值压缩到显示范围内。通常色调贴图应用 S 形曲线,提高对比度和饱和度以补偿较低动态范围和暗淡的查看环境。

只应用 Gamma 不足以充分准备场景线性图像以供显示。不使用色调贴图,大于 1.0 的颜色值将保持大于 1.0,并且被显示器剪裁。

1. 正确转化以供显示
通过颜色管理,可对渲染空间中的线性输出进行正确变换,以用于查看。
2. 无转化
如果没有通过视图和显示变换进行转化,图像将过暗并且阴影中的细节将丢失。
3. 已错误补偿
如果增加曝光以补偿未变换图像的黑暗度,则高光将出现过爆现象。更糟糕的是,如果增加场景中的灯光以进行补偿,则渲染结果将出错。