色彩管理

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

../_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_post-process_color-management_panel.png

色彩管理渲染设置。

显示

显示设备

正在查看的图像的设备。

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

Rec709通常用于高清电视,而XYZ和DCI-P3通常用于数字投影仪。

通过将设备设置为无,可以禁用颜色管理。

渲染

视图

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

标准
除了显示设备的转换之外,没有额外的转换。通常用于非照片级真实结果或视频编辑,其中特定外观已经烘焙到输入视频中。
电影
用于逼真的结果和更好地处理高动态范围的颜色。可以通过更改电影视图变换的Look选项来调整对比度。
电影日志
转换为电影日志色彩空间。这可用于导出到颜色分级应用程序,或通过展平非常黑暗和明亮的区域来检查图像。
Raw
用于检查图像,但不用于最终输出。Raw在没有任何色彩空间转换的情况下提供图像。
假色彩
显示图像强度的热图,以显示动态范围。
曝光
用于控制在色彩空间转换之前应用的图像亮度(停止)。计算方法为: \(output\_value = render\_value × 2^{(exposure)}\)
伽玛
在色彩空间转换后应用额外的伽马校正。请注意,默认显示变换已经执行了适当的转换,因此这主要作为艺术调整的附加效果。
效果
从一组测量的胶片响应数据中选择艺术效果,这些数据大致模拟某些胶片类型的外观。在色彩空间转换之前应用。
使用曲线
调整RGB曲线以在色彩空间转换之前控制图像颜色。阅读有关使用 曲线部件 小组件的更多信息。

序列编辑器

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

图像文件

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

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

色彩空间
驱动器上图像文件的色彩空间。这取决于文件格式,例如,PNG或JPEG图像通常存储在sRGB中,而OpenEXR图像存储在线性色彩空间中。某些图像(例如法线,凹凸或模板贴图)不严格包含“颜色”,并且在此类值上,不应应用任何色彩空间转换。对于此类图像,色彩空间应设置为“ 无”。

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

预览渲染结果
使用视图变换,曝光,伽马,RGB曲线显示图像数据块(不仅仅是渲染)。用于查看线性OpenEXR文件中的渲染帧与直接渲染时相同。
另存为渲染图
图像保存操作符中的选项可应用视图变换,曝光,伽玛,RGB曲线。这对于将线性OpenEXR保存为显示空间中的PNG或JPEG文件非常有用。

OpenColorIO配置

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

但是,OpenColorIO还旨在为 多个应用程序,提供一致的用户体验 ,为此,可以使用单个共享配置文件。Blender将使用标准OCIO环境变量来读取除默认Blender之外的OpenColorIO配置。有关如何设置此类工作流的更多信息,请访问 OpenColorIO网站

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

scene_linear
用于在内存中渲染,合成和存储所有浮点精度图像的色彩空间。
data
非颜色数据的色彩空间。
XYZ
标准线性XYZ色彩空间。用于将黑体发射等效果从物理单位转换为 scene_linear 色彩空间。
color_picking
定义颜色选择器中的颜色分布。预期它在近似上是线性的,具有与场景线性色彩空间相同的色域,在场景线性色彩空间中将0..1值映射到0..1值,以便可预测地编辑材料反照率。
default_sequencer
序列编辑中使用默认的色彩显示空间。如未指定,则为 scene_linear
default_byte
字节精度图像和文件的默认色彩空间,如果未指定,则为 texture_paint
default_float
浮点精度图像和文件的默认色彩空间,如未指定,则为 scene_linear

标准Blender配置包括支持在 ACES (代码和文档) 色彩空间中保存和加载图像 。但是,ACES色域比Rec大。709色域,因此为了获得最佳结果,应使用ACES特定的配置文件。OpenColorIO提供了一个 ACES配置 文件,但可能需要进行一些调整才能在生产中使用。