@lijiang

Sculpting in time

Do one thing and do it well.
Every story has a beginning and an end.

1 分钟

参考文章

https://docs.blender.org/manual/en/latest/render/color_management.html

https://rmanwiki.pixar.com/display/REN24/Color+Management

https://www.arri.com/en/learn-help/learn-help-camera-system/camera-workflow/image-science/aces

https://github.com/colour-science/OpenColorIO-Configs

https://acescentral.com/knowledge-base-2/using-aces-reference-images/

https://opencolorio.readthedocs.io/en/latest/configurations/aces_1.0.3.html

聊聊Gamma修正(Gamma Correction)

Table[x^2.2, {x, 0, 1, 0.1}]
{0., 0.00630957, 0.0289912, 0.0707403, 0.133209, 0.217638, 0.325037, \
0.456263, 0.612066, 0.79311, 1.}

Table[x, {x, 0, 1, 0.1}]
{0., 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.}

Table[x^(1/2.2), {x, 0, 1, 0.1}]
{0., 0.351119, 0.481157, 0.578533, 0.659353, 0.72974, 0.792793, \
0.850335, 0.903545, 0.953238, 1.}

#^2.2 & /@ Table[x^(1/2.2), {x, 0, 1, 0.1}]
{0., 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.}

初步了解下gamma函数,从上述的表达式中可以看出,通过gamma函数2.2得到的变换,我们可以通过反gamma函数 1/2.2,将输入和输出保持在线性关系上。

对于早期的电子显像管而言,随着输入电压的增加,屏幕的亮度与电压并非是成线性关系,而是非线性,我们称之为伽玛压缩(gamma compression),图片中的亮度如果没有做伽玛扩增(gamma expansion),那么我们在显示器上看到的图像比现实中看到的实际拍摄物体要暗些,为什么呢,现实中的光线亮度是线性的。强度增加一倍,亮度也会随之增加一倍,为了得到正确的线性图像,我们需要在图像的存储中增加伽玛修正(Gamma Correction)函数,也就是上面gamma expansion函数,那么在经过CRT显示器的gamma compression处理之后,得到的图像就是线性伽玛修正图像,我们就能看到图像不再偏暗,和现实中物体的亮度保持了一致,有了对于linear和gamma的解释,我们后面介绍有关线性空间的内容时,读者就很容易理解了。

我们以Blender中的色彩管理举例:

OpenEXR Image:

sRGB Texture Image:

Blender工作在线性空间中,任何输入的图片都需要经过Blender的色彩管理系统转换到线性空间中进行计算,上图EXR的展示中,我们可以看到线性空间的曝光增加一档,亮度是简单的线性增加,在右面的非线性空间中,我们的眼睛看图片感觉曝光增加了好几档。在Texture的展示中,当曝光增加两倍时,左边非线性空间的图片已经开始过曝,而右面的线性空间图片我们在高光处还可以看到一些细节,这就是工作在线性空间中的好处,我们可以精细的调整图片参数,以及正确的处理物理世界的光照计算。

ACES 色彩空间

这里需要提到几个概念的定义:

  • 场景色度描述:使用真实或虚拟摄影机拍摄的真实或合成对象的亮度和色相。

  • 显示色度描述:描述设备还原该场景给观看者时呈现的亮度和色相。

  • 色域:色彩显示的范围,人类眼睛所能捕捉到的色彩范围与我们制造的电子设备所能呈现的色彩范围是不一样的,这也就有了对不同的colorspace的定义。

在传统的光化学电影制作过程中,肉眼观察到场景色彩是场景色度,冲印底片的图像状态称为场景参考,胶片拷贝的图像状态称为显示参考,而在电影院银幕上向观影者呈现的是显示色度。

ACES(Academy Color Encoding System) 学院派的色彩管理系统,主要用于数字图像的色彩管理。在拍摄电影的过程中,摄影师可能会用到不同类型的电影摄影机,对于同一个场景,不同的摄影机捕捉场景色度的范围都有不同,还有后期的特效合成是在计算机上完成的,那么如何统一这些设备的色彩输出,从而达到统一的显示色度,这就需要色彩管理,而ACES就是这种色彩管理的实现。

当显示参考的亮度远低于场景参考的亮度时,仅仅缩放颜色的亮度并不能产生一个吸引人的图像,为了使得图像更具吸引力,需要使用渲染变换的方式来使得场景色度转换为显示色度,这种渲染的方式我们可以从博客的封面伦勃朗《夜巡》中看到一个非现实但视觉上令人愉悦的画面,阴影变暗,高光增强的效果。在ACES出现之前,还没有如此明确的转换步骤,传统的胶片摄影师会通过后期对胶片的化学处理来完成从场景参考到显示参考,并让画面显示出艺术的美感。ACES提供了两步渲染处理,场景参考到显示参考是通过观察变换完成的,观察变换通过两个串联处理,第一个是参考渲染变换(Reference Rendering Transform)简称RRT,第二个是显示输出变换(OutPut Display Transform)简称ODT,RRT负责为一个没有色域,亮度限制的假象设备的输出赋予像胶片成像一样的美学属性,ODT使这种理想的图像适应特定类型的显示器,如电影院银幕,计算机屏幕,监看屏幕,手机等。

以下就是ACES与其他色域的对比范围,我们平常的计算机屏幕手机都是Rec709或者sRGB色域,电影院的银幕具有DCI-P3的显示色域,而ACES2065几乎囊括了所有的色域范围。

ACES的核心是对摄影机和计算机生成的图像工具所能捕获的全部视觉信息进行编码,与相机和显示器的有限色彩空间不同,ACES的核心色彩空间包括人眼所能见到的所有色彩,以及超过30个亮度动态范围的档位(宽容度)。ACES所能存储的色彩及亮度信息可以包括人眼所见的每一种色彩和亮度信息,这在电影历史上,任何创作者都无法将色彩细节存储到这种程度。但是看到和存储与捕获和掌握是不同的。

在早期的胶片电影中,拍摄的影像质量会随着制作工艺的流水线不断下降,摄影机底片具有最好的影像质量,然后随着每一步的光化学处理以及发行拷贝,都会损失图像质量,在数字前期时代,图像质量也会随着每一步的数字化处理呈现陡坡式下降。当在ACES工作流中进行处理时,每一步的图像处理及输出都能保证与摄影机捕捉到的场景数据保持最大的色彩保真度和动态范围,直到图像需要被分配到特定的输出设备上进行观看时,图像质量才会有所损失。

后期制作

首先我们需要介绍下LUT(lookup table),在数字世界里,尤其是影视后期的合成中,通常是在线性的色彩空间中进行色彩匹配和图像合成的,在艺术家的监看器上看到的图像将是昏暗的图像,这是由于我们的显示器具有Gamma 2.2的变换,使得图像的整体亮度变暗,这个时候我们就需要保持图片依旧工作在线性空间,而监看器上看到的是正常亮度和色彩的图像,这就需要添加一个显示LUT,在不改变图片数据的情况下,给显示器添加一个Gamma 1/2.2的反向变换,这个LUT叫做显示Gamma修正LUT。

ACES色彩管理有点像LUT,但是ACES可以处理超出预期的色彩空间的颜色,在ACES的工作流中,所有的摄影机拍摄的图像或者计算机生成的图像首先都将转换到一个统一的ACES2065色彩空间中,当这些数据需要在特定的设备上观看时,ACES会将图像转换到与观看设备一致的色彩空间中,这一步就是上面介绍的ODT。

在同一个电脑屏幕上观察上述相同的场景但包含不同色域信息的图像,你会看到不一样的画面,因为电脑屏幕是sRGB色域,无法正确显示DCI-P3和REC.2020HDR色域的图像。

ACES ODT 的具体步骤:

  1. 一个可选的外观转换,比如对图像做一个胶片模拟。

  2. 将图像转换到一个理想化的设备上,一个具有巨大动态范围和ACES2065那样大的色彩空间设备上,RRT将数据转换到这个色彩空间,这一步为当前和未来显示器准备了图像数据。

  3. 对RRT的输出进行最后一次转换,使其符合目标显示器的特定动态范围和特定色域。

现在我们来介绍下IDT(Input Device Transform),电影场景在银幕上的呈现,首先要靠我们的摄影机进行记录拍摄,摄影机拍摄的画面数据将通过转换或者映射到ACES2065色彩空间,在这个最大化的色彩空间中囊括了人眼所能看到的所有颜色范围,并且记录大约30档的亮度动态范围,目前最好的摄影机所能记录的亮度动态范围在15档。ACES也可以捕捉到任何胶片中的色彩细节,记住是任何细节,我们可以认为将胶片画面转换到ACES2065色彩空间的数字媒体中,这个转换是无损的。在电影制作的拍摄现场,可能会有不同品牌的摄影机在现场拍摄,最后得到的影像的色彩空间可能都是不一样的,像用Alexa摄影机则输出是Alexa WideGamut空间,而使用RED摄影机拍摄则输出是RED Wide Gamut RGB色彩空间,如何将这些不同的色彩空间影像数据转换到同一个色彩空间,从而方便后期进行统一的处理,这里就需要借助ACES色彩管理系统了。

如何将不同的摄影机色彩空间转换到ACES色彩空间,需要IDT的协助,摄影机的开发商会为特定的摄影机开发IDT,将芯片的色彩空间准确的映射到ACES2065中。

术语

ACES(system): Academy Color Encoding System的缩写,是一个自由,开放,独立于设备的色彩管理和图像交换框架。

ACES Reference Input Capture Device: 基于数学建立起来的一个假象摄影机模型,可以看到所有人类可以看到的色彩信息。

ACES2065: ACES的核心色彩编码,所有的其他编码都由它衍生出来的,这个色彩空间能够对人眼可见的每种颜色进行编码。

ACEScc: 对数的色彩编码,为调色工具优化了ACES,它是一个暂时性的工作空间,不建议将其存储在文件中或者进行交换。

ACEScg: 线性编码的色彩空间,用于计算机图形渲染和合成工具,在对文件进行交换时,需要将ACEScg图像转换到ACES2065。

ACESproxy: 对数色彩编码,为了在视频传输的媒体下工作,在视频设备之间移动视频图像。

Camera Raw Data: 摄影机的原生图像,也称为RAW,未经处理的图像数据。

实践

电影的拍摄少不了手动去实践,后面我将会使用BMPPC(blackmagic pocket cinema camera)去拍摄一些场景,并将基本的ACES色彩管理流程应用在这些短片上,每次做完一个短片都会写一篇博客用于讲解制作技巧,以及制作过程中遇到的困难和解决方案。

补充

ACES的目标:

  1. 构建一种数字文件格式用于存储和交换,文件中的色彩管理不依赖于任何摄影机,显示设备,以及后期制作中的工具。

  2. 这套色彩管理系统能够兼容新的技术,比如HDR,以及宽色域。

  3. 能够应用于标准的工作流从而降低制作成本。

  4. 这套系统是自由开放的。

ACES的优点在于从摄影机开机拍摄到后期制作影片镜头,再到最后的电影院发行放映,都能保证影片镜头色彩的一致性,不会出现错误的色彩偏移。

重点:不管是渲染输出还是文件交换,我们需要关注的是ACEScc,ACEScct,ACEScg都是工作色彩空间,不适用于最终文件的色彩空间,我们在这些色彩空间中进行工作,最后输出渲染的色彩空间都需要回到ACES2065-1,这是非常重要的一点。

接下来介绍下关于线性工作空间。我们人眼对看到的物体的光亮感知是非线性的,在影像的后期制作中,尤其是特效合成,需要生成大量的CG影像与实拍影像进行合成时,对图像的计算需要是线性的,比如亮度增加一倍那么整个场景的光照就是增加一倍,而由于人眼的非线性特性,在低光照情况下,人眼对场景的反馈像是增加了一倍多,而在高亮度的情况下,人眼感觉整个场景的光照并没有因为多加了一盏灯而使得场景变得更亮了。物理世界是线性的而人眼的感知世界是非线性的,那么如何让图像在显示器上看起来和真实环境一样呢,这就需要用到Gamma,摄影机在拍摄场景画面时,为了能够更好的保留低光和高光区的信息,模拟人眼的非线性感光性,将图像做一个gamma压缩,即扩展高光和暗部区域的范围,如有疑问可见开头部分的gamma介绍,在显示器显示图像的时候,显示器需要对该Gamma压缩做一个反向的gamma解码,这样图像就回到了真实世界的线性空间,人眼看到的图像和显示器上显示的图像就匹配了,如果不做gamma解码,图像就会显示的特别亮,反过来,如果摄影机拍摄的图像没有做特定的gamma压缩,也就是图像直接保存在线性空间中,那么经过显示器的gamma修正之后,人眼在显示器上看到图像比实际场景暗很多。那么为什么要工作在线性空间,因为这样能够获得物理真实的光照,并且不同的gamma值会导致图像色彩偏移。具体如何将具有gamma压缩的图像转换到线性空间,但又要让人眼能够看到正常的图像,我们可以按照以下步骤完成,由工业光魔开发的EXR文件格式保存的图像是线性空间的即Gamma=1.0。图像虽然工作在线性空间,但是我们给显示器添加了一个sRGB的Lut,这个Lut等效于Gamma压缩,重新将我们的显示图片恢复到正常亮度,但是记住图片经过第二步的线性处理之后一直工作在线性空间,Lut只是作用在显示器上的。

那么有没有一种工具可以帮我们自动管理这些色彩空间,比如当视效部门得到sRGB, EXR等文件时,加载这些图片时工具自动帮我们转到线性空间,包括加载显示Lut,这个工具就是色彩管理系统,我们来简单介绍下ACES色彩管理,通过一个简单的例子来结束本章。

我们使用Renderman自带的It工具,加载一张sRGB线性空间下的HDR图像,如果没有色彩管理我们直接通过系统自带的图像查看器打开,就会发现整个高光区域是过曝的,没有任何细节。

正常的HDR图像显示:

没有色彩管理的图像显示:

ACES色彩管理下的图像显示:

我们再来看下标准色卡,在线性空间中对色卡曝光量增加一档,看下具体的RGB色值(灰色方框标记处)是如何变化的。

sRGB显示器显示:

标记处的灰色方块RGB值变化为(138,139,139) -> (188,188,188),因为有sRGB显示Lut的加载所以我们看到的RGB色值是非线性的。

Raw显示(表示不加载显示Lut):

标记处的灰色方块RGB值变化为(90,90,90) -> (179,179,179),可以看出曝光增加一倍之后,RGB也随之增加一倍,也就是我们工作在线性空间中的结果。

最新文章

分类

关于

Keep thinking, Stay curious
Always be sensitive to new things