顾春华 王少云 秦 尧
1.上海电影艺术学院,上海 201203
2.北京策玛文化传播有限公司,北京 101100
线性工作流(Linear Workflow)是线性化数据工作流程的简称。这里的数据特指计算机用来记录和描述画面中明暗和色彩的数据,简称颜色数据[1]。“线性化”不仅要求图像颜色数据所表达的画面亮度必须是线性的,而且图像颜色数据在计算机处理过程中也必须是基于线性工作流程,即图像颜色数据在数字处理过程中输入值与输出值始终保持相同。
线性工作流旨在使图像获得准确的亮度显示结果,其核心是确保输入的颜色数据是线性的,其本质是通过正确校正伽马(Gamma)偏差使图像以正确的线性化效果显示,从而使得图像的明暗看起来更具真实光影感,更符合人眼观感[2]。
虽然线性工作流已在影视视效中广泛使用,但是人们对其原理和理解较为片面。在充分讲解线性工作流原理之前,笔者首先从图像传感器对光的线性响应特性、人眼视觉对光的非线性反应特性、色深与存储资源、伽马与伽马校正等方面进行展开说明。
无论是主流的电影摄影机(例如,ARRI ALEXA Mini、RED DRAGON、SONY F65)还是数码手机,在光电转换过程中图像传感器对光的响应几乎都是线性的,我们将其称为“线性光”。例如,在一间漆黑的屋子中,如果不点亮任何蜡烛,即X 值(蜡烛数量)为0,那么图像传感器采集到的光线数量为0,即Y 值(图像传感器输出量)为0;如果点亮1 支蜡烛,即X 值为1,那么图像传感器采集到的光线数量为1,即Y 值为1。以此类推,如果点亮100 支蜡烛,即X 值为100,那么图像传感器采集到的光线数量为100,即Y 值为100。结合图1 读者可以非常直观地看到:图像传感器对光的响应呈现为线性特性。
图1 图像传感器对光的响应呈现线性特性①
人类视觉系统(HVS)采集光线与观察世界的方式与数字摄影机完全不同,所有的媒介(例如绘画、摄影、影视以及印刷等)都需经过人眼的视觉感知才能转化为大脑可理解的图像信息。研究表明:人眼对自然界光线变化的感知是非线性的,人眼具有对弱光线更敏感的特性,这就意味着人眼在黑暗环境下的辨识能力要强于明亮环境(图2)。
图2 在较暗环境下人眼对亮度的辨识能力要强于较亮环境②
为便于理解,读者仍可设想以下生活场景。同时,为便于表现人眼视觉对光的非线性反应特性,笔者仍将以参数数值作辅助解说。在漆黑的屋子里点亮1 支蜡烛,即X 值(蜡烛数量)为1,那么人眼感知到1 支蜡烛的亮度,即Y 值(人眼视觉感知亮度值)为1;如果点亮2 支蜡烛,人眼可能会感知到2 个数量的亮度,即Y 值为2;但是,如果此时让人眼感知到3 个数量的亮度则需点亮4支或更多蜡烛。以此类推,当在点亮100 支蜡烛的屋子里再多加1 支蜡烛时,人眼基本上是感受不到其亮度变化的;此时,为了让人眼感受亮度增加的变化,可能需要再增加100 支蜡烛(图3(a))。
图3 人眼对自然光线的感知度曲线③
因此,对于人眼视觉而言,当环境光比较弱时,微弱的光源也能带给人较强的亮度感受;当环境光已经很亮时,即使再增加更多的光源,人眼感知亮度的增幅却不大。根据韦伯-费希纳定律,当人体感官所接收到的感觉以算术级数增加时,外界刺激强度需要以更大的几何级数增加人们才能感觉其差异,这是由于人眼对自然光线亮度的感知是非线性的。因此,自然界真实的亮度信息与人眼所“看到”的信息是有区别的。总而言之,人眼对暗部的光线变化更为敏感,对亮部的光线变化不敏感。
实验证明:如果定义0 为纯黑(物理亮度为0),1为纯白(物理亮度为100%),那么亮度从0 上升到21.8%左右时,此时人眼就会感觉灰度已经达到了白色的50%,即人眼视觉上感知的中灰色是物理上白色亮度的21.8%左右。该渐变计算方式通过伽马曲线来表示,其值接近于1/2.2。因此,人眼视觉特性接近于伽马值为1/2.2的曲线(上曲线),如图3(b)所示。
色深(Colour Depth),顾名思义是指“色彩深度”,这里的“深度”是描述色彩的精细程度,色深又叫“色彩位深”。色深与位深(Bit Depth)是两个不同的概念,色深仅用于数字图像领域对色彩概念的描述;位深则更宽泛,通常用于描述模拟信号的量化程度或模数转换中的精细程度。因此,色深是位深的一部分[3]。
在数字图像中,像素(Pixel)是最小的单位,每个像素都有自己独立完整的参数设置。在RGB(红绿蓝)三通道图像中,每个像素都由红、绿和蓝三个通道组成,其中每个通道又由若干个二进制位来表示其“含量”。 因此,人们使用色深来表示该颜色的二进制位数。另外,虽然色深用于描述所有颜色的二进制位数,但是这并不意味着图像一定会使用所有颜色,而是表明可以指定的颜色精度级别。因此,色深位元数越高,编码颜色信息越丰富,色彩之间的过渡也越细腻,从而更贴近真实图像的颜色信息[4]。
通常,色深使用n 位元颜色(N-bit Colour)作为单位,若色彩深度是n 位元,即有2n种颜色可供选择,而储存每种像素所用的位数目即为n[5],例如:21表示RGB 每个通道可含有2 种颜色( 黑和白),28表示RGB 每个通道可以细分为为256 种灰度层次(灰阶)。
简而言之,图像色深越大,颜色信息越丰富。但是,随之产生的是存储和传输等方面的诸多问题。例如,在主流的8 位色深图像中(如.jpg 文件格式图像),由于RGB 每个通道只有256 个色阶,如果线性地记录或保存图像的亮度信息,即亮色和暗色均匀分布,那么对于颜色或细节要求较高的图片,其高光区域就会灰阶精度过剩而暗部区域则会灰阶精度不足,从而造成存储资源的浪费,这将严重影响图像的观感和表现。因此,人们需要研究更好的图像存储方式以兼顾图像信息与图像大小。
在上文中,我们已经了解到人眼对自然界光线明亮程度的主观感受是非线性的且遵循指数规律。同时,人眼对图像中的暗部区域更为敏感。因此,可以在有限的存储资源中通过记录更多有价值的暗部信息从而改善图像的观感。因此,根据人眼的感知,我们使用伽马和对数转换优化比例标准以更好地平衡颜色亮度等级,旨在使用同样数量的编码值量化每个亮度等级,如图4所示。
图4 根据人眼感知使用伽马曲线优化亮度分布
图像传感器对光的响应是线性的,获得的是原始数据(Raw Data),但是线性的图像数据不便于直接观看。因此,在数字图像处理过程中,图像信息流要经过两个重要的非线性映射才能使图像在显示设备上正常显示。在拍摄环节,我们将相机的非线性映射称为光电转换函数(Optical-Electro Transfer Function,OETF),主要用于定义输入景物亮度的对数(单位为lg cd/ m2)和光电数字摄像系统的数字输出信号值之间的关系,即描述线性可见光的亮度颜色值与非线性数字编码的颜色值之间的函数关系[6];在显示环节,我们将显示器的非线性映射称为电光转换函数(Electro-Optical Transfer Function,EOTF),主要用于描述输入显示器的非线性颜色值和显示器所显示的线性颜色值之间的关系。
在图像获取、存储与显示发展过程中,虽然光电转换函数与电光转换函数也经历了多次进化,但是纵观整个发展过程,最具指导意义即是伽马校正(Gamma Correction)。
伽马(Gamma)是线性工作流中最为重要也最难理解的概念之一。在计算机图形图像领域,伽马的初始定义是用于描述显示设备非线性信号损耗程度的参数,伽马的最终目的是为了模拟人眼的视觉特性以最大程度地协调自然光线亮度和人眼视觉特性的函数映射关系。一方面伽马校正的原因是为了在有限的存储资源情况下存储更多有价值的暗部信息,另一方面则由于显示设备输入电压与输出亮度呈非线性关系的物理特性。因此,之所以存有光电转换函数(OETF)和电光转换函数(EOTF)主要还是为了高效利用存储资源,在人眼对光线亮度更为敏感的暗部区域分配更多的数值来表达光线的程度[7]。
由于伽马将在线性工作流的不同地方都需要被提及,为便于读者理解,笔者参照人眼观察数字图像的主要过程将其详细描述为图像存储过程中的编码伽马校正、图像读取过程中的解码伽马校正、显示设备固有伽马属性以及软件视图窗口施加的反向补偿伽马校正。
2.4.1 图像存储过程中的编码伽马校正
在上文中,我们已经了解到人眼对自然光线亮度的感知不仅呈现为非线性,而且人眼对暗部的光线变化更为敏感,人眼视觉特性接近于伽马值为1/2.2 的曲线(上曲线)。同时,图像传感器(或图像软件渲染器)对光的响应呈现为线性特性,即伽马值为1。因此,数字图像在生成或保存过程中,图像传感器(或图像软件渲染器)执行了光电转换函数(OETF)转换。光电转换函数(OETF)是将可见光的亮度转换为电子信号数值的“编码函数”,即对原始图像数据作了编码伽马校正(上曲线)以在有限的存储资源中存储更多有价值的暗部信息。其目的是为了让亮度分级与人类的视觉观感相似,从而解决在有限的存储空间中尽可能多地保存人眼感受敏感的色彩内容,以便人眼观察显示器时能得到与观察现实世界时相近的视觉感受并以此达到心理预期。
因此,图像数字都是以非线性编码形式进行存储输出,图像数据所描述的画面亮度,相对于现实中的物理相对亮度分布来说是偏亮的,所以此时的图像数据不具备物理真实性。从图5也可以看出:图像存储过程中编码伽马曲线在数值较低区域(即对应图像的暗部区域)其函数的曲率更高,一方面说明此部分区域存储更多信息,另一方面也符合人眼对暗部变化感受更为敏感的特性。
图5 图像存储过程进行编码伽马校正处理
2.4.2 图像读取过程中的解码伽马校正
由于数字图像在存储过程中使用了编码伽马校正(上曲线),此时虽然图像呈现为整体偏亮,但是最大限度地保留了图像暗部区域的细节。在数字图像处理过程中,为了确保图像的后期处理都是基于线性工作流程,因此图形图像软件会根据数字图像自身特性在图像读取过程中对图像作解码伽马校正(下曲线)。由于编码校正伽马(上曲线)与解码校正伽马(下曲线)正好相互抵消,从而实现了(理论上)线性工程流程并确保人眼所看到的是符合物理现实世界的亮度信息。
2.4.3 显示设备固有伽马属性
早期阴极射线管(Cathode Ray Tube,CRT)显示器存在输入电压与输出亮度并非线性关系的物理响应,该曲线正好与人眼视觉特性和编码伽马校正曲线(近似值为1/2.2,上曲线)相反。1996年,微软和惠普在特定的光照条件下测试人们观看显示器的感受并制定了sRGB 色彩空间标准,即标准RGB(Standard RGB)。在提出sRGB 标准的时候,其实很大程度上也参考了当时市场上主流摄影机、显示器和扫描仪等色彩标准;同时,也参考了韦伯-费希纳定律,即人眼的感光曲线其实是对数曲线,对于人的感觉来说同样的物理增量,永远是总量小的时候增量最为明显[8]。sRGB 色彩空间作为行业规范,规定了用于编码的伽马近似值为1/2.2(上曲线),用于解码的伽马近似值为2.2(下曲线)。
如今,平板液晶显示器虽然没有早期阴极射线管显示器非线性关系的物理响应,但是为了得到同样的显示效果,硬件厂商仍会为显示器配置数值近似为2.2(下曲线)的伽马曲线以获得正确的图像显示效果。虽然显示设备固有伽马属性的设计参照当时主流硬件设备的物理属性而来,但是更主要的原因仍是基于人眼对自然光线亮度感知的非线性特性。因此,显示设备固有伽马属性并不是显示器发展过程中的历史遗留问题或显示失真原因,而是为了合理地利用有限的灰阶存储资源,最大限度地记录颜色信息。
2.4.4 软件视图窗口施加反向补偿伽马校正
在图像显示过程中,显示器执行电光转换函数(EOTF)转换,电光转换函数(EOTF)是显示设备根据电子信号所显示出的实际亮度与信号数值所原本表达的亮度之间的“解码函数”。受目前主流显示设备固有伽马属性影响,伽马近似值为2.2(下曲线)时,图像整体会呈现偏暗的结果。因此,为了补偿显示器带来的亮度偏差,支持线性工作流程的软件都会通过视图窗口施加近似值为1/2.2(上曲线)的反向伽马进行补偿校正,从而为图像暗部带来更多细节的同时提升画面真实感。
通过以上步骤,不仅能够使数字图像处理基于线性工作流,而且显示图像的亮度也更具真实光影感。同时,一旦数字艺术家在线性工作流中完成对图像的色彩校正、图像叠加或滤镜添加等数字图像处理后,就可以再按照图像存储过程中的编码校正对数字图像进行渲染输出,从而形成闭环线性工作流程。正确实施线性工作流程的核心是确保输入的颜色是线性,线性工作流的本质就在于通过正确地校正伽马偏差,使图像以正确的线性化效果显示,从而图像达到更符合人眼的观感,如图6所示[9]。
图6 线性工作流程图
由于人眼的非线性光线感知特征以及显示设备固有伽马属性等原因,摄像机是以非线性方式进行图像存储。但是,在影视视效环节,计算机则是完全以线性方式进行图像的数字化处理。此时,如果对明暗分布非线性的图像执行线性化的数字图像运算将会导致错误的计算结果。因此,在视效制作中,数字艺术家需要确保所有参与后期处理的图像素材必须都是线性的[10]。
在线性工作流中,所有参与计算的数据都是基于线性的,遵循线性化工作流程,即意味着在处理图像时要全部使用线性色彩空间。例如,在数字合成过程中,默认情况下三维渲染输出的分层是线性色彩空间,但是合成所用的图像素材有可能是sRGB 色彩空间、AlexaV3LogC 色彩空间(ARRI 摄影机LogC对数模式)或Cineon 色彩空间(Log 对数模式)等。因此,多种不同色彩空间的合成素材相互叠加后会导致不正确的合成画面颜色结果(该问题尤其会在后续的调色环节放大呈现)。
Nuke 是一款基于32 位浮点线性(32-bit Float Linear)高端数字合成软件。这使得Nuke 不仅可以无损地、高精度地处理颜色信息,而且还能够保证所有合成运算都处于线性工作流。Nuke 在处理不同色彩空间的图像素材时非常友好:为了对不同色彩空间的文件素材进行统一管理和运算,默认设置下Nuke 会将导入的图像素材全部转换为32 位浮点线性,从而保证线性工作流程的开展[11]。
下面,笔者将从图像读取过程中的解码伽马校正、视图窗口施加反向伽马补偿校正以及图像输出过程中的编码伽马校正这三个方面对Nuke 中的线性工作流程进行详细说明。
为了对不同色彩空间的图像素材进行统一管理并确保所有的合成操作都处于线性工作流,例如,叠加运算、模糊效果、滤镜添加等,在使用读取(Read)节点读取图像素材时,Read 节点会根据导入图像素材格式最大可能地猜测其编码校正伽马并套用最为匹配的反向解码校正伽马,从而去除图像在存储或渲染输出过程中的编码伽马校正并将其最大可能地转换回RGB 原始数据(线性数据)[12]。因此,在素材导入阶段,Nuke 对不同图像素材套用的各类伽马选项其实对应着不同的光电转换函数(OETF)的反函数,从而实现去伽马或达到线性化。
例如,如果导入的为.dpx 文件格式图像素材,Read 节点会自动将其设置为Log 对数色彩空间,即自动套用Log 对数模式下光电转换函数(OETF)的反函数进行转换;如果导入的为.jpg 文件格式图像素材,Read 节点会自动将其设置为sRGB 色彩空间,即自动套用sRGB 标准下光电转换函数(OETF)的反函数进行转换。另外,如果导入的为.exr文件格式图像素材,Read 节点仍为保留其为线性色彩空间。因此,在读取环节,Nuke 对各类图像素材实现了亮度转换,从而保证了线性工作流的开展。
默认设置下Nuke 对8 位和16 位图像素材套用sRGB 反向伽马进行解码校正;对Log 对数色彩空间图像素材套用Cineon 反向伽马进行解码校正;对线性色彩空间图像素材则不作任何图像颜色处理。
需要注意的是,虽然在影视视效制作中目前普遍使用10 位或更高位色彩深度的图像,但是对于8位或更低色彩深度图像而言,Nuke 会在默认设置下将其全部自动转换为32 位浮点线性,从而保证了后续高精度的制作要求。
因此,在图像读取过程中,由于Read 节点所猜测的解码校正伽马(下曲线)基本与图像素材在存储或渲染输出过程中所添加的编码校正伽马(上曲线)相互抵消,所以Nuke 支持的图像素材格式都会被转换成线形数据,从而保证接下来的数字合成都能够基于线性工作环境,如图7所示。
图7 Read 节点对读取图像施加反向解码伽马校正
在Nuke 中,通过Read 节点在图像读取过程中的解码伽马校正,此时图像素材已最大可能地转换回RGB 原始数据(线性数据),即后续的合成操作已基于线性工作流环境。但是,由于显示器固有伽马(近似值为2.2,下曲线)影响,图像会呈现整体偏暗的结果。因此,为了使合成师能够看到真实的画面颜色(亮度),Nuke 中的视图窗口(Viewer)面板将通过显示校正(ViewerProcess)属性控件套用颜色查找表(LUT)进行画面颜色的预览查看,默认设置下Nuke会自动套用sRGB 色彩空间,即施加反向伽马(近似值为1/2.2,上曲线)补偿显示器带来的亮度偏差。另外,Viewer 面板施加的反向伽马补偿不会对图像数据本身产生任何影响或更改,仅影响图像画面的预览显示效果,如图8所示。
图8 视图窗口施加反向伽马补偿进行校正
在数字合成过程中尤其是实拍画面的合成处理,数字合成师需要确保除了合成处理的像素可以有别于原始镜头画面之外,其余像素都应该与原始镜头画面保持完全一致。因此,在图像输出过程中,数字合成师还需要将线性环境下合成的最终画面再次转换回相机保存时的默认色彩空间。
在三维素材与实拍素材合成过程中,由于各类合成素材的色彩空间不尽相同,更需要在最终合成镜头渲染输出过程中准确处理色彩空间。例如,ARRI 相机拍摄素材的色彩空间为AlexaV3LogC,三维分层渲染的色彩空间为线性,照片和视频素材的色彩空间为sRGB。为了达到“看起来”像是在同一场景、同一相机拍摄而成的画面效果,数字合成师需要在渲染输出前将含有原始镜头以及各类合成素材的色彩空间由线性色彩空间统一转换回ARRI 相机拍摄存储时所设定的AlexaV3LogC 色彩空间,从而保证下游调色环节镜头色彩空间的正确并避免合成画面颜色方面的问题。
在图像读取过程中,Read 节点已经根据导入图像素材格式最大可能地猜测并套用解码伽马校正(下曲线)。因此,在图像输出过程中,输出(Write)节点需套用与Read 节点解码伽马校正(下曲线)相反的编码伽马校正(上曲线)以将合成处理后的图像素材再次转换回相机保存时的默认色彩空间。
Nuke 中的线性流可简单总结为:首先,在图像读取过程中,Read 节点根据导入图像素材格式最大可能地猜测编码校正伽马并套用反向解码校正伽马以将其转换回RGB 原始数据(线性数据);然后,在图像显示过程中,Viewer 面板将通过ViewerProcess 属性控件套用LUT 进行画面颜色的预览查看以补偿显示器带来的亮度偏差;最后,在图像输出过程中,Write节点套用Read 节点根据导入图像素材格式所猜测的解码校正伽马的反函数以将合成处理后的图像素材再次转换回相机保存时的默认色彩空间,如图9所示[13]。
图9 Nuke线性工作流示意图
本文从图像传感器对光的线性响应特性、人眼视觉对光的非线性反应特性、色深与存储资源、伽马与伽马校正等方面较为详细地分析了影视视效制作中的线性工作流程。同时,以目前主流数字合成软件Nuke 为例,从图像读取过程中的解码伽马校正、视图窗口施加反向伽马补偿校正以及图像输出过程中的编码伽马校正等方面对Nuke 中的线性工作流程进行详细说明。本文较为完整地介绍了伽马校正与线性工作流,在影视视效制作中(尤其是数字合成领域),线性工作流是最为重要也是最难理解的概念之一,本文不仅为读者深入理解线性工作流程提供了一定的理论参考,而且也规范了数字合成中Nuke 软件的线性工作制作流程。与此同时,在影视视效制作中,除了需要在数字合成环节注意线性工作流程外,数字艺术家还需要在材质贴图以及灯光渲染等环节注意线性工作流程的规范操作。
虽然线性工作流保证了图像在亮度层面实现物理还原,但是无法实现图像在色彩方面的还原与统一。因此,为了在影视视效制作各环节实现数字图像在亮度、颜色以及显示方面的统一性,数字艺术家还需了解ACES 相关知识,即学院色彩编码系统(Academy Color Encoding System,ACES)。ACES 工艺流程的开发和应用,在技术层面上具有前瞻性。在影视制作中,ACES 不仅可以使多种不同的数字拍摄源文件之间的色彩空间转换更加方便和简单,而且可以针对不同的输出方式保证色彩的一致性和高效性,其目的是为行业提供标准化的色彩管理系统[14]。
作者贡献声明:
顾春华:设计论文框架,撰写和修订全文,全文文字贡献70%;
王少云:设计论文框架,参与优化论文表述,提供全文技术指导,全文文字贡献20%;
秦尧:参与优化论文表述,提供全文技术指导,全文文字贡献10%。
注释
①图1 来源于https://www.youtube.com/watch?v=rhaLWZgx2Sg 网站相关视频内容。
②图2 来源于http://www.cgarena.com/freestuff/tutorials/max/linearworkflow/linear-gamma.html网站相关视频内容。
③图3(a)来源于https://www.youtube.com/watch?v=rhaLWZgx2Sg网站相关视频内容;(b)来源于https://www.zhihu.com/question/27467127/answer/37555901网站相关图片。