关于 OpenEXR, 你应该要知道的几件事
2014-10-14 16:13
246 查看
在像 Pixar 这样的 animation studio,或是像 ILM 这样大规模的 VFX studio 里头,OpenEXR 扮演了一个非常重要的角色:工作过程中,可以用来预览或是再加工(合成)的图片文件。我们就如同其它的 studio 一样,也是使用
EXR 作为内部的图档使用。公司里头,绝大部分的 exr 文件,都是 renderer 的产物。OpenEXR 是个可以用来乘载 HDR 的图片格式,在 ILM 的推波助澜,加上其它 studio 的跟进以及动画软件的支持下,几乎成了某种 de facto 标准。然后,它终究只是一个“够开放“的图档格式,如何有效且正确的善用它,才是更重要的事。
以下几点,是我们在太极影音的工作过程中,发展出来的一些经验:
EXR 档案里头没有任何标头或 tag 指出它存的
color space 是线性(linear)、gamma 2.2(1.8, 2.6, ...)等,而是由使用的人或是软件自行解释。
EXR 鼓励以 linear color space 的方式来存内容 (scene-referred)。这样不管是人、机器或是软件,都不用去猜测别的可能性,而且对于后期合成来说,既不用对拿到的影像想太多就直接操作,也不需要先做个转换,是比较省事且安全有效率的 pipeline。但这点不是强制性的,只能说是大家约定成俗的一种习惯性用法。就像我们现在都认为相机出来的 JPEG 一般是 sRGB (~ gamma2.2) 或 Adobe RGB,但其实
JPEG spec 并没有定义这个。
EXR 以 linear 储存后,在显示时才去根据不同的 display device,使用不同的 transformation 或是 LUT 来转换。要求比较严苛的工作环境,会就每个 display device 有一组 LUT (1D? 2D? 3D? 这部分我还没有作完研究各种 LUT 表示法的适用状况,只能说,理论上 3D LUT 比较厉害。),且会定时根据 device 的状况来更新那组 LUT。这种作法是非常非常严苛的要求下的作法。
EXR 可以有任意的 metadata,所以是可以在里头存个 'colorspace' 的 meta 来用,不过这样得确认所有接触到此
exr 的程序,都有去“尊重“这个 meta 才有用,不然反而会落得不三不四的。
EXR 储存的数值,只有 16-bit 或是 32-bit 的这两种,并没有 8-bit, 10-bit, 12-bit, 24-bit, ... 等此说法。当有人这样说时,可以假设是只用了比较少的 bit(ex, 16 bits 中,只用了 14 bits,另外两个 bits 为零),但存在档案里时,一样是 16 或是 32 bits。
同样的图片,以 linear 与 log 的方式来存的话(这边指的是单纯的 log,并非 REDlog 或是 panalog 这类特定的 preset),log 存的档案的确是会小一点点,约节省了 10%~20%。但它仍旧是以 16 bits 或是 32 bits 来存。
压缩方法中,有 loseless 与 lossy 两种。PIZ, ZIP, ZIP (16 scanline), RLE 属于 loseless。其中 ZIP (16 scanline) 对于 CG image 的压缩率最大;而 PIZ 对于有 film grain 的 image 有最好的表现(因为使用了 wavelet)。B44 或是 B44A 为 lossy,我们现有的工作环境不会使用到,也不应该使用到才是。
像素(pixel) 存的方式,又分为 scanline 与 tiled。后者适合以一张 .exr 来存一整个 mipmaps,就像 .tex 一样(.tex 是 .tif 的一种小变型)。prman(Pixar's RenderMan)的 texture 这个 shader op,也许已经有支持 .tiff 或 .exr 了(我没去确认),但我相信对于 .tex 的支持应该仍旧是最好的。
further reading:
ILM 于 SIGGRAPH 2004 发表的 OpenEXR Color Management 是个很好的参考,不过其中的 CTL 已经开始由 OpenColorIO 取代掉了。
Understanding Nuke's unique Layer and Channel system (including the Shuffle Nodes).
EXR 作为内部的图档使用。公司里头,绝大部分的 exr 文件,都是 renderer 的产物。OpenEXR 是个可以用来乘载 HDR 的图片格式,在 ILM 的推波助澜,加上其它 studio 的跟进以及动画软件的支持下,几乎成了某种 de facto 标准。然后,它终究只是一个“够开放“的图档格式,如何有效且正确的善用它,才是更重要的事。
以下几点,是我们在太极影音的工作过程中,发展出来的一些经验:
EXR 档案里头没有任何标头或 tag 指出它存的
color space 是线性(linear)、gamma 2.2(1.8, 2.6, ...)等,而是由使用的人或是软件自行解释。
EXR 鼓励以 linear color space 的方式来存内容 (scene-referred)。这样不管是人、机器或是软件,都不用去猜测别的可能性,而且对于后期合成来说,既不用对拿到的影像想太多就直接操作,也不需要先做个转换,是比较省事且安全有效率的 pipeline。但这点不是强制性的,只能说是大家约定成俗的一种习惯性用法。就像我们现在都认为相机出来的 JPEG 一般是 sRGB (~ gamma2.2) 或 Adobe RGB,但其实
JPEG spec 并没有定义这个。
EXR 以 linear 储存后,在显示时才去根据不同的 display device,使用不同的 transformation 或是 LUT 来转换。要求比较严苛的工作环境,会就每个 display device 有一组 LUT (1D? 2D? 3D? 这部分我还没有作完研究各种 LUT 表示法的适用状况,只能说,理论上 3D LUT 比较厉害。),且会定时根据 device 的状况来更新那组 LUT。这种作法是非常非常严苛的要求下的作法。
EXR 可以有任意的 metadata,所以是可以在里头存个 'colorspace' 的 meta 来用,不过这样得确认所有接触到此
exr 的程序,都有去“尊重“这个 meta 才有用,不然反而会落得不三不四的。
EXR 储存的数值,只有 16-bit 或是 32-bit 的这两种,并没有 8-bit, 10-bit, 12-bit, 24-bit, ... 等此说法。当有人这样说时,可以假设是只用了比较少的 bit(ex, 16 bits 中,只用了 14 bits,另外两个 bits 为零),但存在档案里时,一样是 16 或是 32 bits。
同样的图片,以 linear 与 log 的方式来存的话(这边指的是单纯的 log,并非 REDlog 或是 panalog 这类特定的 preset),log 存的档案的确是会小一点点,约节省了 10%~20%。但它仍旧是以 16 bits 或是 32 bits 来存。
压缩方法中,有 loseless 与 lossy 两种。PIZ, ZIP, ZIP (16 scanline), RLE 属于 loseless。其中 ZIP (16 scanline) 对于 CG image 的压缩率最大;而 PIZ 对于有 film grain 的 image 有最好的表现(因为使用了 wavelet)。B44 或是 B44A 为 lossy,我们现有的工作环境不会使用到,也不应该使用到才是。
像素(pixel) 存的方式,又分为 scanline 与 tiled。后者适合以一张 .exr 来存一整个 mipmaps,就像 .tex 一样(.tex 是 .tif 的一种小变型)。prman(Pixar's RenderMan)的 texture 这个 shader op,也许已经有支持 .tiff 或 .exr 了(我没去确认),但我相信对于 .tex 的支持应该仍旧是最好的。
further reading:
ILM 于 SIGGRAPH 2004 发表的 OpenEXR Color Management 是个很好的参考,不过其中的 CTL 已经开始由 OpenColorIO 取代掉了。
Understanding Nuke's unique Layer and Channel system (including the Shuffle Nodes).
相关文章推荐
- 关于 OpenEXR, 你应该要知道的几件事
- 在微服务的世界里, 你应该要知道的几件事
- 关于Imagine Cup2017 微软创新杯 你可能要知道的几件事情
- 你应该知道的10件关于Java 6的事情
- 关于测试代码必须做以下几件事情的下厨做菜理解法。
- Tips_只言片语(关于所有认为值得记录的...应该是精辟的/断言式的...在几句话之内...不限于它的领域...)
- 关于手机必须知道的几件事(含SP陷阱)。
- 作为一个程序员,有些知识你应该知道----关于并发和数据库封锁
- 关于progame反驳字段是否应该不为空的论点
- 第一次进入红旗后,应该做的几件事
- 关于SPECjAppServer评测,您应该知道的“故事”
- 关于MTS和COM+的区别.(个人理解dotnet是windows DNA和com+的延续,那么MTS应该逐渐退出舞台了)
- 关于 Java EE 开发,有哪些最佳实践应该采纳? (developerworks)
- Java开发人员应该知道的关于Ruby的10点内容
- 你应该知道的10件关于Java 6的事情
- 关于栈的弹出函数设计是否应该有两个返回值,一个表示数据,一个表示是否栈为空
- 一个关于重定向的问题研究,应该具有实用性
- 关于面向构件和EOS的一些思考-软件开发和传统行业应该怎么对比
- 关于建立分布式应用程序应该了解的知识
- 关于《2007年程序员最应该知道的十件事》