色彩管理

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

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

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

Blender的颜色管理基于 OpenColorIO 库。通过在多个应用进程中使用相同的 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中使用。这些色彩管理设置是特定于场景的,因此可以在每个场景中自定义设置。色彩管理也可以在保存图像时被覆盖;这种行为可以在 导出色彩管理属性 中设置。

显示设备

The color space for the display that Blender is being viewed on.

Most displays are sRGB by default with some newer displays having the option to use Rec. 2020. These displays have a wider color gamut and can display high dynamic range content. If you have an Apple display you probably will want to use Display P3.

It is important to check your OS and display setting to make sure they all match the display in use to view the most accurate image.

sRGB:

被大多数显示器使用。

Display P3:

被多数Apple设备使用。

Rec. 1886:

被许多旧式电视使用。

Rec. 2020:

被新式的广色域HDR显示设备使用。

查看变换

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

标准:

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

Khronos PBR Neutral:

A tone mapping transform designed specifically for PBR color accuracy, to get sRGB colors in the output render that match as faithfully as possible the input sRGB base color in materials, under gray-scale lighting. This is aimed toward product photography use cases, where the scene is well-exposed and HDR color values are mostly restricted to small specular highlights.

AgX:

A tone mapping transform that improves on Filmic, giving more photorealistic results. AgX offers 16.5 stops of dynamic range and unsaturates highly exposed colors to mimic film's natural response to light.

Filmic:

A tone mapping transform designed to handle high dynamic range colors. Filmic is deprecated and is superseded by AgX which improves handling of saturated colors.

Filmic Log:

转换为 Filmic log 色彩空间。这可用于导出到颜色分级应用程序,或通过展平很暗和很亮的区域来检查图像。

假彩色:

Shows a heat map of image intensities, to visualize the dynamic range, and help properly expose an image.

Below is a table that represents how normalized linear color data is represented with False Color.

亮度值

颜色

低位裁剪

黑色

0.0001% 至 0.05%

蓝色

0.05% 至 0.5%

蓝色-青色

0.5% 至 5%

青色

5% 至 16%

绿色-青色

16% 至 22%

Grey

22% 至 35%

绿色-黄色

35% 至 55%

黄色

55% 至 80%

橙色

80% 至 97%

红色

高位裁剪

白色

原始:

用于检查图像,但不用于最终输出。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)}\)

伽玛

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

序列容器

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

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

显示

高动态范围(HDR)

在渲染的视口中启用高动态范围显示,取消显示亮度,这需要一个支持HDR的显示器和为HDR设计的视图变换(Filmic不生成HDR颜色)。

该功能目前仅支持 macOS。

使用曲线

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

白平衡

Adjusts colors so that a given white point (expressed in color temperature and tint) ends up as white on the display.

As an alternative to manually specifying the values, there's also a color picker. When a color is selected, temperature and tint are set such that this color ends up being balanced to white. This only works if the color is close enough to a blackbody emitter.

温度

The blackbody temperature of the primary illuminant. By default a D65 white point is used.

染色

The amount of green/magenta shift of the blackbody curve.

../_images/render_color-management_white-balance-curve.png

Blackbody temperature curve.

Tip

White balancing can also be accomplished as part of the compositing pipeline by using the 色彩平衡节点

图像文件

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

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

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

预览为渲染结果

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

另存为渲染图

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

OpenColorIO配置

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

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

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代码和文档)色彩空间保存和加载图像。然而,ACES 的色域比 Rec.709 的色域要大,所以为了获得最佳效果,应该使用 ACES 特定的配置文件。OpenColorIO 提供了一个 ACES 配置 文件,尽管它可能需要再做一些调整才能在生产中使用。

默认的 OpenColorIO 配置

色彩空间

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

sRGB:

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

Rec.2020:

BT.2020 2.4 指数 EOTF 显示。

Rec.1886:

BT.1886 2.4 指数 EOTF 显示器,常用于电视。

非颜色:

非色彩常规数据,不会对该数据使用任何色彩变换(例如法线贴图)。

线性 Rec.709:

线性 BT.709 色度,D65 白点。

线性 Rec.2020:

线性 BT.2020,光源为 D65 白点。

线性 FilmLight E-Gamut:

具有 D65 白点光源的线性 E-Gamut 。

线性 DCI-P3 D65:

光源为 D65白点下的线性 DCI-P3 。

线性 CIE-XYZ E:

假定为能E光源白点下的标准1931 CIE XYZ。

线性 CIE-XYZ D65:

带有D65光源白点适应的 1931 CIE XYZ。

Filmic sRGB:

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

Filmic Log:

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

Display P3:

苹果的Display P3色域带有sRGB分段函数的色彩编码传输功能,常见于Mac设备。

ACEScg:

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

ACES2065-1:

ACES 色彩空间使用 AP0 色彩基色、D60 白点和线性传递函数。该色彩空间旨在以尽可能多的色彩信息来存储和传输数据。