CUDAAccelerated 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的尺寸是可以的,不过一样也有上限。

Marcie_LAD_original_HD

1DLUT

lc lc_ref
Marcie_LAD_original_HD

3DLUT

lch lch_ref

注意:此测试图片裁剪自KODAK Digital LAD Test Image,原始格式为10bit Log DPX

我同时做了Win32和X64 Linux两个版本,感兴趣的朋友可以向我索取。

原文地址:https://www.cnblogs.com/Jedimaster/p/1424566.html