马绪怡 顾晓娟
(北京电影学院中国电影高新技术研究院,北京 100088)
图1 LUT在影视领域中的应用
数字电影在拍摄制作的过程中,无论是现场导演和摄影用来监看的监视器,DIT制作代理文件需要做的画面色彩还原,还是后期DI调色要用到的色彩空间转换、画面风格塑造以及监视器的校色,都会去使用LUT(lookup table,色彩查找表)。如图1,通过使用不同的LUT,可以高效地获得创作者所要实现的创作意图。
图2 1DLUT公式及作用
在使用LUT的时候,可以根据画面风格的转换,分为技术LUT和风格LUT;也可以根据索引出一个输出值,需要的输入值索引数,分为1DLUT和3DLUT。1DLUT可以被用来简单地调整画面整体亮度、伽马校正、对比度、色彩平衡。其公式及效果如图2。
1DLUT的优点是简单且运算效率高,可以直接在电路上完成,缺点是无法完成复杂的画面色彩的调整,且存在精度不够的问题;3DLUT则可以在调整画面亮度的同时调整色彩,其公式及效果如图3。
图3 3DLUT公式及作用
3DLUT中的RGB三个通道数据共同构成一组输入,从而完成复杂的画面色彩调整。3DLUT的优点是可以同时调整画面亮度和色彩,缺点是存在精度不够,需要插值,以及输入范围有限制的问题。
虽然LUT已经被广泛地运用在各个制作环节,但是受限于LUT本身存储数据的有限性、LUT存在精度不够以及输入范围有限制的问题。对此,美国电影艺术与科学学院科学与技术委员会(The Academy of Motion Picture Arts and Sciences,AMPAS)发布了CTL(The Color Transformation Language,色彩转换语言),旨在实现电影成像流程中的色彩变换和其他基于像素的操作,用来解决LUT存在的精度不够和输入范围有限制的问题,并用来编写ACES(Academy Color Encoding System,学院色彩编码系统)。本文主要通过介绍CTL的工作原理及简单应用,对比了LUT优缺点的同时,并以CTL在ACES中的应用为例,介绍IDT(Input Device Transform,输入设备转换)的代码构成。最后,提出了一种通过多项式拟合的方法,使用数学函数来拟合任意一个1DLUT,提供了一种没有公式的前提下,LUT转换成CTL的思路。
因为不同软件调用CTL的方式不同,且都有一定程度修改,本文主要以Baselight软件为例。
图4 测试图原图
图5 加载了CTL程序1的测试图
CTL本质上是一种小型的编程语言,其本质为一段代码,用简洁明确的方式来精准地描述色彩转换的程序。AMPAS设计CTL的目的就是为了帮助色彩管理,弥补LUT目前存在的不足。同样的色彩转换,除了使用LUT,也可以通过分发CTL,来实现同样的色彩空间转换。
下面是一个通过CTL来实现“曝光”参数调整图像整体亮度的CTL程序1代码,测试图原图及效果见图4和图5。
void
adjust Exposure
(output varying half r Out,
output varying half g Out,
output varying half b Out,
input varying half r,
input varying half g,
input varying half b,
input uniform float e=0)
{float f=pow(2,e); //pow是次方
r Out=r*f;
gOut=g*f;
b Out=b*f;
}
在CTL中,色彩空间转换被认为是必须在每个像素上执行操作的函数,为了让转换应用于图像,CTL编译器会对每个像素调用色彩转换函数一次。
正如上述的CTL程序1,其作用是:输入一个图像,它有三个通道的输入参数:r、g、b和一个曝光参数e。该函数将所有的像素都乘以2,来使得图像变得更暗或者更亮。此函数的结果是一个新的图像,有着新的r、g、b。
可以从CTL程序1看出,相比于LUT,CTL可以自行编写数学函数,因为是以函数的形式,所以不会出现因为LUT采用插值方式进行色彩映射所带来的误差。
很多风格化LUT很难用函数形式表达,无法使用CTL准确实现。对此,CTL也可以直接调用现有的LUT。例如Baselight官网提供的ARRI ALF-2 v5 DRT family中的CTL文件(后缀名为fltransform),见图6和图7。
图6 ARRI_ALF-2.fltransform部分代码
图7 Baselight使用的CTL文件调用的LUT
可以看出,在Baselight CTL文件编写的时候,可以同时使用不止一个LUT,还可以使用反向LUT。使用反向LUT的这种设计主要是保证了当操作者需要进行或者由于错误的操作,例如由显示参考转换为场景参考时,通过使用反向LUT来确保画面的正常。如图8,这样的设计使得调色师无需思考色彩空间大小的关系,只需要明确由哪个色彩空间转换到哪个色彩空间。
图8 由显示参考到场景参考会调用反向LUT
对于CTL而言,如果要实现技术LUT所实现的色彩空间转换,只需要知道色彩空间转换的矩阵即可,例如从Rec.709转换到YUV,已知矩阵为:
那么便可以编写CTL程序2(具体代码见图9)。
可以从上述代码看出,相比于LUT所需要存储的海量映射数据,CTL只需要明确色彩空间转换矩阵即可,大幅节省了数据存储所需的必要空间。
图9 由Rec.709转换到YUV的CTL程序2代码
学院色彩编码系统(The Academy Color Encoding System,ACES)是由AMPAS推广的一种色彩管理工作流程,如图10,其工艺流程转换主要包含以下四个过程: (1)IDT;(2)ACEScsc(AP0→AP1) ;(3)ACEScct(AP1→AP0);(4)RRT+ODT。
图10 ACES色彩管理工作流程
图11 佳能C700 Clog3的IDT代码
这四个过程,都采用了CTL编写,其中IDT可以在设备厂商的官网下载。如图11,在这里笔者以佳能C700 Clog3的IDT(Input Device Transform)为例。
对于佳能C700 Clog3的官方IDT而言,可以分为以下四个部分:(1)IDT名称版本和版权信息;(2)摄影机型号;(3)伽马曲线函数转换;(4)ACES转换。
在这四个部分中,第一部分和第二部分是以注释形式出现,主要介绍了该CTL的基本信息;第三部分则是定义了Clog3伽马校正函数的逆函数,以用来还原摄影机伽马曲线带来的非线性影响,将其伽马值转换为线性;第四部分则是将非线性的像素首先校正为线性之后,再将其转换至ACES的色彩空间中。其转换过程可见图12-图14。
图12 佳能C700原始画面
图13 佳能C700伽马=1.0画面
图14 佳能C700 Rec.709/Gamma2.4画面
从使用摄影机官方提供技术LUT的方式,来进行非线性还原摄影机LOG画面的方法,可以看出,使用CTL的三大优势和一个明显缺点:
(1)文件体积小,一个CTL可以只有1kb到2kb;
(2)不需要通过插值的方式来还原画面,几乎是无限高的精度;
(3)可以根据需求直接进行修改CTL;
(4)因为可以随意修改,所以无法保证安全性。
使用1DLUT进行亮度调整,它会通过LUT中的离散样点进行插值,来实现亮度映射的目的。但是,插值会带来计算误差,如果能够直接获得1DLUT本身的计算函数,便可以编写一个CTL来代替该LUT以便获得更高的精度。但是在大部分情况下,在制作的过程中无法直接拿到其数学表达式,可以使用多项式拟合的方式来近似。多项式拟合的公式为:
其意义为,通过人为的认定该LUT为n阶函数,使用LUT本身的数值反求出函数本身。对于一个12bit的1DLUT,理论上可以通过此公式得出4096个函数拟合式。
图15 Grapher中做出的LUT全览图
在此,如图15,笔者选定一个1DLUT“Gamma 2.6 to Linear”为拟合对象进行多项式拟合,拟合阶数分别为2、5、10、30、50。
图16 拟合函数与不同阶数数值对比图
图17 拟合函数不同阶数百分比偏差对比图
图16和图17是使用LUT原始数据和拟合函数的数值进行的客观对比图数据(30阶因误差较大故舍去)。
拟合函数的选取会直接影响亮度映射的结果,如何选取拟合函数成为了一个核心问题。可以从图17和图18看出,笔者使用多项式拟合去拟合LUT,当拟合阶数越高时,拟合效果未必越逼近原始LUT数值;同时还可以观察到,随着阶数的增加,一方面,因为多项式函数本身的长度增加,这给文件的编写带来了一定压力的同时,还大幅度影响了计算机运算出结果的效率;另一方面,综合对比多个拟合效果发现,在拟合阶数很高的时候,其拟合匹配度反而存在着急速变化的情况。所以,选取一个合适的拟合函数成为了拟合LUT的关键所在。
根据公式(1)拟合得出的函数,写成不同的色彩转换语言文件,除了客观数据的对比,还可以进行拟合LUT的主观对比。图18到图23是直接加载LUT和拟合阶数变化的主观效果对比。
图18 直接加载了LUT的测试图
图19 拟合阶数为2时
图20 拟合阶数为5时
图21 拟合阶数为10时
图22 拟合阶数为30时
图23 拟合阶数为50时
通过主观效果对比可以发现,越是色彩映射复杂的LUT,用多项式函数这种简单函数形式去拟合出的CTL,拟合效果越差;同时,多项式拟合的方法并不适用于3DLUT,因为大部分3DLUT都属于极其复杂的映射,单纯使用此公式无法拟合。
本文所述内容是基于使用非ACES色彩管理前提下,对当下部分电影工作流程的改善。事实上,ACES本身便是使用CTL去编写。目前,无论是否是影视行业,查找表都已经被大量使用在各个方面,一些校色平台软件也针对单独的硬件做LUT来校色收费。色彩转换语言的优点在于,对于纯数学函数的编写,十分简单且效果好。对于那些纯伽马变换和色彩空间转换的,可以直接取代1DLUT或者“技术LUT”;但是其缺点也是明显的,目前只能应用在支持色彩转换语言的软件里,加密性不强的同时,对于那些具有复杂色彩变换效果的3DLUT编写难度较高,且运算效率远低于LUT。