CUDA-Accelerated LUT Converter for DI Workflow
名词缩写
- DI Digital Intermediate
- SP Stream Processor
- CM Color Management
- LUT Lookup-table
- NF Negtive Film
- PCS Profile Connection Space
- IMSR input medium to scene-referred transform
- SROM scene-referred to output medium transform
- OMRD output medium to reference display transform
- RDPD reference display to preview display transform
推荐阅读材料
- A Proposal for OpenEXR Color Management
- Color and Mastering for Digital Cinema
- Digital Color Management
- Digital Color Imaging Handbook
- Digital Video and HDTV Algorithms and Interfaces
DI引入电影制作流程之后,可以直接用数字设备以及软件对胶片采集到的原始画面进行修改。首先是IMSR过程,将胶片使用扫描设备(如Thomson's Grass Valley Spirit 4K Film Scanner)生成DPX储存到SAN中。但是不同设备与设备之间存在差异,即NF颜色密度数值到DPX对数空间的映射关系往往是不同的,而且这是个严格和设备相关的参数。对这个过程的矫正往往是设备内部的1D LUT来扮演的。而色彩空间的变换则直接运用矩阵或者用3D LUT进行变换。当然,这些都可以在CM相关的资料中找到。
LUT的优势在于,快速与可移植。因为后期软件内部的计算节点往往可以通过输入数值确立LUT,但是网格本身是无法复制的,比如Shake的合成网格就无法和Fusion的互相导出导入,虽然它们的本质都是极其简单的DAG节点。当生成LUT之后,只需要经过简单的文本处理操作就可以实现互相通用。预计未来AMPAS/ASC的推荐的通用LUT格式普及开来之后,后期软件之间的LUT也就可以通用,这样在使用多种后期软件配合生产的流程中CM的效率会更高。
首先是数值转换过程,即根据LUT设定的输入输出数值范围将整数转换为浮点数字。在这个过程中,经过高度优化过(主要是OpenMP与SIMD)的CPU代码的执行速度是超过GPU的,原因是CPU的主频高,不像GPU分为核心频率和SP频率两个部分。现有的OpenEXR FP16由于没有硬件和编译器的原生支持导致转换效率比较低下。然后就是3D LUT的数值生成。由于3D LUT的体积相对于1D LUT一般来说都比较大,对于32^3*3*4这样的一个3D LUT来说占用空间为0.375M。这里是测试对比。左边是用CUDA计算的结果,右边的一列是使用Houdini Apprentice计算的结果,通过比较原始HD版本的图像发现两者的差异极小。这种差异来自GPU差值,也来自LUT源(这里的LUT都生成自Houdini)输出时采样变换函数造成的降采样,提高3D LUT的尺寸是可以的,不过一样也有上限。
1DLUT |
|||
3DLUT |
注意:此测试图片裁剪自KODAK Digital LAD Test Image,原始格式为10bit Log DPX
我同时做了Win32和X64 Linux两个版本,感兴趣的朋友可以向我索取。