色彩管理

色彩管理对于创建物理上准确且在多个显示设备上看起来很棒的渲染和资源非常重要。它既用于确保管道的所有部分正确解释颜色,也用于进行曝光和颜色分级等艺术变化。

../_images/render_color-management_different-exposures.jpg

同一张渲染图像的不同曝光情况。

Blender的颜色管理基于 “开放色彩IO<https://opencolorio.org/>`__库。通过在多个应用进程中使用相同的 OpenColorIO 配置,将使用相同的色彩空间和转换来获得一致的结果。

工作流程

场景线性色彩空间

为了获得正确的结果,需要不同的 色彩空间 来渲染,显示和存储图像。渲染和合成最好在 场景线性 色彩空间中完成,该空间更接近自然,并使计算在物理上更准确。

../_images/render_color-management_linear-workflow.svg

线性工作流程的一个示例。

如果颜色是线性的,则意味着如果实际上我们将光子数加倍,则颜色值也会加倍。换句话说,如果我们有两张照片/渲染器,每张照片/渲染器都有两个灯光中的一个,并将这些图像添加到一起,结果将与两个灯光都打开的渲染/照片相同。由此得出,这种辐射测量线性空间最适合照片级渲染和合成。

然而,这些值并不直接对应于人类感知或显示设备的工作方式。和图像文件通常存储在不同的色彩空间中。所以我们必须小心地进行这种场景线性色彩空间的正确转换。

显示变换

将场景线性颜色转换为显示涉及技术和艺术选择。

正确显示渲染需要转换到显示设备色彩空间。计算机显示器与数字电影放映机或HDTV的工作方式不同,因此需要不同的转换。

还有艺术选择。部分原因是显示设备无法显示全部色彩,只有有限的亮度,因此我们可以挤出颜色以适应设备的色域。除此之外,给渲染器一个特定的外观也是有用的,例如好像它们已经印在真实的相机胶片上。默认的电影转换执行此操作。

../_images/render_color-management_linear-display-space.svg

从线性空间到显示设备空间的转换。

图像色彩空间

在加载和保存媒体格式时,记住色彩管理非常重要。诸如PNG或JPEG之类的文件格式通常将颜色存储在准备显示的色彩空间中,而不是存储在线性空间中。当它们在渲染中用作纹理时,它们需要首先转换为线性,当保存渲染以在Web上显示时,它们也需要转换为显示空间。

对于生产中的中间文件,建议使用OpenEXR文件。它们始终存储在场景线性色彩空间中,不会丢失任何数据。这使它们适合存储以后可以合成,颜色分级并转换为不同输出格式的渲染。

图像还可以包含实际上不是颜色的数据。例如,法线图或位移图仅包含矢量和偏移。此类图像应标记为非彩色数据,以便不会在其上进行色彩空间转换。

渲染设置

参考

编辑器:

属性

面板:

渲染属性 ‣色彩管理

../_images/render_color-management_panel.png

颜色管理属性。

这些是色彩管理设置,在整个Blender中使用。这些颜色管理设置是特定于场景的,因此可以在每个场景中自定义设置。颜色管理也可以在保存图像时被覆盖;这种行为可以在 导出颜色管理属性 中设置。

显示设备

正在查看的图像的设备。

大多数计算机显示器都配置为sRGB色彩空间,因此在计算机上工作时,通常应将此选项保留为默认值。当在连接到计算机的另一个显示设备上查看图像时,或者当写出要在另一个设备上显示的图像文件时,通常会改变它。

  • sRGB:

    被大多数显示器使用。

    XYZ:

    常用于数字投影仪。

    无:

    禁用颜色管理。

查看变换

这些是在同一显示设备上查看图像的不同方式。

  • 标准:

    除了显示设备的转换之外,没有额外的转换。通常用于非照片级真实结果或视频编辑,其中特定外观已经烘焙到输入视频中。

    电影:

    用于逼真的结果和更好地处理高动态范围的颜色。可以通过更改电影视图变换的Look选项来调整对比度。

    电影日志:

    转换为电影日志色彩空间。这可用于导出到颜色分级应用程序,或通过展平非常黑暗和明亮的区域来检查图像。

    原始:

    用于检查图像,但不用于最终输出。Raw在没有任何色彩空间转换的情况下提供图像。

    假色彩:

    显示图像强度的热图,以显示动态范围。

胶片效果

从一组测量的胶片响应数据中选择艺术效果,这些数据大致模拟某些胶片类型的外观。在色彩空间转换之前应用。

曝光

Used to control the image brightness (in stops) applied before color space conversion. It is calculated as follows: \(output\_value = render\_value × 2^{(exposure)}\)

Gamma

在色彩空间转换后应用额外的伽马校正。请注意,默认显示变换已经执行了适当的转换,因此这主要作为艺术调整的附加效果。

序列容器

排序器 运行的色彩空间。默认情况下,Sequencer 在 sRGB 空间中运行,但也可以将其设置为在线性空间中工作,如合成节点或其他颜色空间。不同的色彩空间将为颜色校正、交叉淡入淡出和其他操作提供不同的结果。

颜色空间列表取决于活动 Ocio 配置 。此处详细描述了默认支持的颜色空间 默认 OpenColorIO 配置

使用曲线

调整 RGB 曲线以在颜色空间转换之前控制图像颜色。阅读有关使用 曲线部件 的更多信息。

图像文件

使用图像文件时,默认色彩空间通常是正确的色彩空间。如果不是这种情况,可以在图像设置中配置图像文件的色彩空间。例如,需要手动更改的常见情况是使用或烘焙法线贴图或置换贴图。这样的地图实际上不存储颜色,只是编码为颜色的数据。这些图像应标记为非彩色数据。

图像数据块将始终将浮点缓冲区存储在场景线性色彩空间的内存中,而内存中的字节缓冲区和驱动器中的文档存储在指定的 色彩空间 设置中。

默认情况下,仅显示和保存渲染,并应用了渲染 视图转换。这些图像是 “渲染结果” 和 “查看器” 图像数据块,以及使用渲染动画操作员直接保存到驱动器中的文档。但是,当加载保存到中间OpenEXR文档的渲染时,Blender无法自动检测到这是渲染(例如,它可能是图像纹理或置换贴图)。我们需要指定这是一个渲染,并且我们希望应用转换,使用以下两个设置:

预览为渲染结果

使用视图变换,曝光,伽马,RGB曲线显示图像数据块(不仅仅是渲染)。用于查看线性OpenEXR文件中的渲染帧与直接渲染时相同。

另存为渲染图

图像保存操作符中的选项可应用视图变换,曝光,伽玛,RGB曲线。这对于将线性OpenEXR保存为显示空间中的PNG或JPEG文件非常有用。

OpenColorIO配置

Blender 带有标准的 OpenColorIO 配置,其中包含许多有用的显示设备和视图转换。使用的参考线性 色彩空间 是具有 Rec.709 色度和 D65 白点的线性色彩空间。

然而,OpenColorIO的设计也是为了在 “多个应用程序 <https://opencolorio.org/#supported_apps>`__中提供一致的用户体验,为此,可以使用一个单一的共享配置文件。Blender会使用标准的OCIO环境变量来读取Blender默认配置以外的OpenColorIO配置。关于如何设置这样一个工作流程的更多信息,可以在`OpenColorIO网站 <https://opencolorio.org/>`__上找到。

Blender目前使用以下色彩空间规则:

scene_linear

用于在内存中渲染,合成和存储所有浮点精度图像的色彩空间。

data

非颜色数据的色彩空间。

aces_interchange

ACES2065-1色彩空间。用于导出 scene_linear 颜色空间的色度,用于黑体发射等效果。

color_picking

Defines the distribution of colors in color pickers. It is expected to be approximately perceptually linear, have the same gamut as the scene_linear color space, map 0..1 values to 0..1 values in the scene linear color space for predictable editing of materials’ albedo.

default_sequencer

序列编辑中使用默认的色彩显示空间。如未指定,则为 scene_linear

default_byte

字节精度图像和文件的默认色彩空间,如果未指定,则为 texture_paint

default_float

浮点精度图像和文件的默认色彩空间,如未指定,则为 scene_linear

标准的Blender配置包括支持以`ACES <https://www.oscars.org/science-technology/sci-tech-projects/aces>`__(代码和文档)色彩空间保存和加载图像。然而,ACES的色域比Rec.709的色域要大,所以为了获得最佳效果,应该使用ACES特定的配置文件。OpenColorIO提供了一个`ACES配置 <https://opencolorio.readthedocs.io/en/latest/configurations/_index.html>`__文件,尽管它可能需要再做一些调整才能在生产中使用。

默认的开放式颜色IO配置

色彩空间

Blender的OCIO配置文件默认配备了在这些颜色空间中读/写文件。

  • sRGB:

    使用Rec.709色度和D65白点的标准RGB显示空间。

    线性:

    Blender的本地线性空间意味着没有伽玛映射,使用线性Rec.709色度和D65白点。

    Linear ACES:

    也被称为ACES2065-1,这是一个ACES色彩空间,使用AP0色彩原色、D60白点和线性传递函数。这个色彩空间是为了以最多的色彩信息来存储和传输数据。

    线性断续器:

    一个ACES色彩空间,被设计用于渲染和合成。它使用AP1颜色原色,D60白点和线性传递函数。虽然与ACES2065-1相似,但这个色彩空间的色域较小。较小的色域使它能更好地代表符合CIE 1931色度图的颜色。位于CIE 1931色度之外的颜色对于渲染和合成来说通常并不重要,因为人类的刺激无法表现这些颜色。

    XYZ:

    标准线性XYZ空间。

    Non-Color:

    用于包含非色彩数据的图像的色彩空间 (如法线贴图)。

    原始:

    不自动转换为线性;与非彩色相同。

    电影日志:

    Filmic视图变换的中间日志颜色空间。

    薄膜式sRGB:

    sRGB 类似,但使用Filmic视图转换。