• 2009-10-17

    OpenEXR - [Study]

    版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
    http://carli.blogbus.com/logs/48605864.html

    工业光魔基于流行的高动态范围图像格式优缺点提出自己的HDRI格式——OpenEXR,高动态、高精度、无损压缩、高扩展性、开放源代码等多种优点,使得它成为极佳的图像存储格式,在影视动画、工业设计以及游戏开发等方面极有前途。 关键字 高动态范围 基于图像的光照 浮点 高精度动态范围 中图法分类号: TP391 文献标识码: A Abstract: ILM evaluated existing file formats and developed its own HDRI format ---OpenEXR ,it has many outstanding features such as high dynamic range、high color fidelity、lossless compression、Flexible Extensibility、Open Source and so on.All this makes it become a perfect store fomat for computer imaging applications. So it enjoys a good future for the films and animations、industry design and game development. Key words: High Dynamic Range ; Image-Based Lighting; floating-point; High-Precision Dynamic-Range 动态范围是指图像中最大象素值(最高光强度)与最小象素值(最低光强度)的比,即Dynamic Range=log10(max_intensity/min_intensity)。传统24bit RGB图像用整数来代表象素值,象素值与实际亮度不是线性比例关系,只能表示256个亮度级,超出的部分在屏幕上是显示不出来的,而实际自然场景中动态范围高达100,000,000:1,这在传统图像中无法表示,而且如果利用这种低动态范围图象合成Radiosity来照亮场景,这样,渲染结果就是作品比较平淡而缺乏对比。 高动态范围图像HDRI作为一种带有颜色亮度信息或光线信息的图片格式,用浮点数来表示象素值,可以完全表示出自然场景中的动态范围,而且其象素值是实际场景亮度的线性映射,在计算机图形学中基于图像建模和绘制、图像拼接、图像处理(例如运动模糊)等领域都比传统图像有很大的优势。基于图像的光照IBL(Image-Based Lighting) 是合成Radiosity(辐射度渲染算法)来重建自然真实的光照系统的解决方案,它可以使场景非常接近真实世界的亮度范围,同时也给动态反射带来突破性的效果,它能比普通的纹理产生更明亮的反射。在影视动画领域HDRI因此在近几年成为CG行业当中的热点。 一HDR常见格式与OpenEXR的提出 不同的公司采用不同的HDR格式,常见的有: Pixar Log Encoding (TIFF) Pixar采用11位对数编码、zip无损entropy压缩法提出纪录电影以及渲染图片的标准,能以0.4%的步幅记录大致为3.6个单位的能量光域值的动态,但是它不能覆盖全部可见色域,对调和映射(tone mapping)来说动态范围也是边际性的。 Radiance RGBE Encoding (HDR) Lawrence Berkeley国家实验室在辐射——自然物理为基础渲染系统(physically-based rendering system)中提出增加一个8位的公共曝光值通道,支持20 %的RLE压缩,以1%的精度覆盖76个单位的能量光域值。RGBE同样也不能覆盖全部可见色域,而且大动态是以精度的损失最少为代价的,此外还有色彩量子化问题、解码效率问题等缺陷,因此目前这个数据格式的应用并不多。 SGI 24位和32位LogLuv (TIFF) 基于Radiance RGBE格式的不足,开发者提出对数解码的三个衍生。第一个衍生是把10位对数亮度值和14位 CIE (u´,v´)访问值(lookup)挤压形成标准的24位。以1.1%步幅值扩展了全部的可见光域和4.8个单位的能量光域值,它没有压缩算法。第二个衍生采用16 bits用于纯亮度解码,允许负亮度值,以及0.3%的步幅值覆盖了38个单位的能量光域值。第三个衍生同样采用16位用于标记亮度值,另外为每个CIE (u´v´)坐标增加8位来包括所有的32 位/像素的可见色彩,支持30 %的RLE压缩。尽管这种LogLuv格式具有很多优点,然而加上人们不愿意放弃习惯的色彩空间以及没有工业合作者的加盟,它仍未获得广泛应用。 ILM OpenEXR EXR采用S5E10(1个符号位、10位尾数以及5位指数)48bits/pixe的编码,覆盖所有可见光域,10.7个单位的能量光域值和0.1%的相对精确度,OpenEXR规范也支持阿尔法、深度、光谱采样等额外的通道。半浮点类型被主流显卡NVidia 和ATI所采用。 Microsoft/HP scRGB 微软和惠普合作开发的scRGB64格式,2001年WinHEC年会上被确定为IEC标准(61966-2-2)。scRGB格式分为两部分,一部分采用48位/像素作为RGB解码,另一部分采用36位/像素作为RGB或YCC。它扩展了色域的同时减少了动态范围,作为一种图像存储的格式,ScRGB拟用于新型的数码相机、显卡和微软的Longhorn操作系统中。 格式 全色域 位/像素 动态范围 量子化步幅 sRGB 否 24 1.6 (1.0:0.025) 可变 Pixar Log 否 33 3.8(25.0:0.004) 0.4% RGBE /XYZE 否/是 32 76 (1038:10-38) 1% LogLuv 24 是 24 4.8(15.9:0.00025) 1.1% LogLuv 32 是 32 38 (1019:10-20) 0.3% EXR 是 48 10.7(65000:0.0000012) 0.1% scRGB 是 48 3.5 (7.5:0.0023) 可变 许多应用软件都开始支持hdr,然而不是所有的图片格式能很好的提供所需要的性能。图中明显可以看到对数和浮点表示法比线性和伽马解码法优越得多。RGBE以适度的精度(1%)覆盖了大量的动态范围,TIFF32位LogLuv仅仅以32 bits就提供了RGBE一半的动态范围和2倍的精度,OpenEXR提供了LogLuv四分之一的动态范围和四倍的精度,并以同样的48位提供了比scRGB三倍的动态范围和更高的精度。新的IEC标准 (61966-2-2)虽然扩展了光域却不太适合做HDR。 二OpenEXR的基本特性 OpenEXR由工业光魔在制作“时光机器”中为了解决Morlock在黑暗的洞穴里飞跑时地底世界的阴暗部分和明亮部分的细节问题而首次提出,并在哈里波特和魔法石、黑衣人II、纽约黑帮和灵异象限等四部动画片中得到运用。在2004年5月首次发布官方版(包括源代码),并在8月的Siggraph 2004 作"OpenEXR, Film and Color"的报告。 2000年,ILM对现存的图形格式进行了评估,但是基于下面几个原因最终放弃了他们: 8bit--10bit缺乏足够的动态范围,16bit整数格式无法容纳那些电影负片和其他HDR设备捕捉的数据,32bit浮点tiff会占用太多的内存和硬盘容量。因此,ILM决定自己开发16bit浮点色彩值的新的HDR格式,OpenEXR定义的FP16是参照IEEE 754中FP32格式进行精简后定义的,因此FP16也被称为“半精度”(FP32是单精度,FP64是双精度)。半精度的表达式是SM10E5,主要是存储光线的数据与信息。这种格式与NVIDIA's Cg 图形语言所采用的半数据类型兼容,并支持开发者在GeForce FX and Quadro FX 3D 等GPUs 上处理OpenEXR的图象。 OpenEXR的基本特性: ①30 f-stops的无损压缩,加上低端额外的10 f-stops(有损),16位浮点每f-stops 1024的步幅,超过现存的8- and 10位图像的高动态范围和色彩精度。 ②当前支持三种数据类型:半16位浮点、32位 IEEE-754浮点、32位整数像素。16位浮点与新型显卡的16位帧缓存数据格式完全兼容,NVIDIA's Cg语言的半数据类型兼容,在图形卡硬件中转换时不会有数据损失。 ③支持多种无损压缩运算法则,甚至是2:1胶片颗粒的无损压缩率。支持流行的PIZ(35%--55%的最佳无损压缩率,压缩与解压速度相当,适合扫描线为基础的文件),ZIP(35%--55%的无损压缩率,解压比压缩快,是材质贴图的最佳方法)、RLE(60%---75%的压缩率,快速,比较适合大平面区域)等无损压缩方式,最近又增加了新的压缩代码——Pixar动画工作室的Pxr24,能精确的保留典型的“半”和整数类型的图片的通道,但浮点数据相对误差会有所增加,适合于深度缓冲图片的有损压缩; ④OpenEXR可以包含任意数量的通道或者通道的组合,除了通常的RGBA, 还有Y, U, V (亮度和两个二次取样色度通道), 深度, 曲面法线方向, 运动矢量等。 ⑤具有可扩展性。能储存额外数据,有时需要额外数据来注释图片,诸如色彩平衡信息、处理跟踪数据、摄像机位和方向等。OpenEXR 允许储存任意数量的额外属性,如为了实现场景相关scene-referred,增加了inputMedium, sceneReferredSpace, outputMedium,reference Display等属性。新的压缩类型、图片类型、图片属性很易于增加到 C 类库和头文件中。 三 OpenEXR的应用 OpenEXR 作为一种很有前途的HDR格式,引起电影制作、计算机游戏开发、建筑可视化、商业以及工业设计公司的极大兴趣,很多公司都相继开发了接口程序。 (一)OpenEXR看图软件与制作软件 常用的看图软件都不能正确识别OpenEXR,ILM的Exrdisplay可简单调整曝光值、去雾、及白水平。Deep Exploration提供了类似功能以及文件基本信息(大小、色彩、深度、压缩方式与压缩率)。Hdr Shop2.0版也开始支持OpenEXR、RAW图像格式,并支持批处理功能,在制作上和普通的Hdr一样。在Siggraph 2002上,Idruna 发布的Photogenics HDR,每通道32bit的绘图,兼容众多HDR格式(包括10-14bit 佳能和柯达的线性RAW数码相机格式),而且支持多种手写版,多图层操作,也可以进行曝光混合来制作HDR。Photomatix Pro则提供了曝光融合和调和映射等两种制作方法。 (二)Adobe Photoshop8中OpenEXR 采用浮点像素的OpenEXR包含更多的色彩,为了减少导入图片的像素损失,Photoshop中打开OpenEXR文件时设置了一个对话框: 曝光值:采用默认值0时图片无变化,曝光值为1时亮度增加两倍,低端显示出更多的细节,曝光值为-1时亮度减少两倍,显示出在高曝光值时被忽略的高光。 Gamma值:OpenEXR 图片没有gamma校正,而JPEG、TIFF等大多数图片均有2.2的固定Gamma值。当图片导入Photoshop时,OpenEXR默认为2.2,以便能正确显示,并与其他图片的色彩空间匹配。 不预乘:OpenEXR 习惯上使用预乘,而Photoshop中不使用麦特时操作方便些,根据需要决定。 尽管Photoshop表明该图片是16 bits的,但是显示器只能显示出每通道8位的信息, 当我们打开色阶命令时,柱状图表明最亮像素和图片中大部分色彩间有很大的间隔,调整白点时,高光部分被曝光的同时暗部也呈现出更多的细节。 在Photoshop中使用16位模式时,绘画和图层等操作不能使用,只能转为8位,这和前面的曝光值、Gamma值、以及色阶Levels值一样,都会给图片带来一定的损失,需要谨慎调整。如果必须使用16位绘画模式,可以使用CinePaint1.9或Photogenics HDR2。CinePaint源于著名的运行于Linux、SGI的GIMP软件,Rhythm & Hues 、Sony Pictures Imageworks 、DreamWorks 、ILM等公司在哈里波特、猫狗大战、怪医杜里特、第六日、鼠小弟、人猿星球、鼠小弟2等影片中都使用过该视频工具,是35mm 电影和其他的高分辨率的HDR图片处理的好工具,不过目前只用OSX版支持EXR。 (三)非线性编辑系统的应用 一直以来电影胶片以Cineon/DPX的格式扫描和存储,每通道10bit的精度,在合成和输出中尽管采用非线性色域、色保护、色彩校正,依然有色彩的损失。OpenEXR超过30 f-stops而无精度损失的动态以及在低端确保最小损失精度时能提供额外的10 f-stops的动态,近乎完美的无损压缩,具有很高的色彩保真度,使得它极有潜力成为CG电影以及数码相机的存储的替代格式。 PC平台的几个主要编辑和合成软件中,Speedrazor5.5 、5D Cyborg、liberty8.3因为发布较早不支持OpenEXR,其他的主流软件基本都能很好的使用。Combustion3、Shake3.5 (osx)、Commotion4.1、D2 Nuke4、Digital Fusion4、SGI平台的高清合成软件 Piranha HD都通过支持OpenEXR,实现大范围图像处理和存储,提升色彩精度,降低压缩精度损失。 (四)三维动画平台的OpenEXR Softimage|XSI4.2、Houdini 7、Lightwave 3d 8、3Dmax6、Cinema 4D R9等三维软件以及Pixar's RenderMan Pro Server12、Messiah studio2.0、Brazil 等渲染器纷纷采用OpenEXR图片作为环境贴图,既避免了传统的反复放置和调整普通灯光的麻烦,又可以通过360度的照明或反射来实现自然真实的光照。OpenEXR的一系列特征使得它能被广泛用于影视动画行业。 1.3ds max SplutterFish开发支持3ds max5插件MaxOpenEXR.bmi,作为其Brazil渲染器反射和天光的环境贴图。和一般的HDR文件一样,导入时同样也有一些比较复杂的参数。 在对话框最上部是一个对数直方图,和Photoshop里的很像,它直观的表达了图象的亮度分布情况和交互式调整黑白点。 直方图横轴显示亮度值,纵轴显示该亮度的像素覆盖的百分比。直方图支持线性或对数显示,自动或手动显示,不同通道显示等自由选项,黑白点之间采用不同的灰度表示亮度与动态范围。在存储缓冲格式里面,提供了4种整数、4种浮点格式,每种又有带与不带alpha之分,选择不同的方法会对内存占用以及效果有很大影响。32位Real Pixels格式是处理HDRI最合适的格式,当然运算速度就要慢一些。 在 Color Transform栏,可以根据需要设置曝光值、黑白点、RGB Level (控制着HDRI的最终亮度)及偏移值,右下角的预览窗口可以得到及时的反馈。 在这里RGB Level 1.0 相当于f-Stop 8,RGB Level 2.0相当于f-Stop 7, 4.0 = f-Stop 6 ,8.0 = f-Stop 5 ,16.0 = f-Stop 4 等。更大的f-stops包含更多细节的色彩和光线强度数据,导致更明显的明暗对比。 对话框的下面还有文件信息选项。文件信息给出了所选用的EXR图片的大小、尺寸、压缩方式、数据窗、显示窗、属性列表、通道列表等重要参考数据便于调整。 对话框右边的File saving parameters栏为保存OpenEXR的几个参数。 可以选择存储格式及RGBA通道。此外还可以在Color Transform栏设置曝光Exponent 和预乘Alpha,在Compression Type栏选择压缩方式,在Frame Numbering Override栏设置图片序列的记数方式。 Half Float - 64 bpp以16位方式存储四个通道的信息,这是标准的OpenEXR文件。Float - 128 bpp,用标准的OpenEXR通道标记可以解码和读这种32-bpc全浮点格式。Integer - 32 bpp: 32-bpp整数格式完全不是OpenEXR。为了支持Targa等旧式类型图片的位深,SplutterFish创造了新的包裹整数RGBA图片类型,可以把数据打包进EXR格式中单独的INT32 通道。只有通过这个插件才能理解这些文件。 下面的Extra Attributes and Channels栏是选择存储额外属性和通道的参数。这些字符串类型属性,被嵌入头文件中,能很容易读取。 主要属性包括:注释、计算机名、系统时间、3dsMax 版本。通道属性包括:Z-缓冲(16位 或32位浮点)、物体ID(32位无符号整数)、材质ID(32位无符号整数)、渲染节点ID(32位无符号整数)、 UV坐标(1个 UV通道,2个片断, 16位 或32位浮点)、速度矢量(2个片断, 16位 或32位浮点)、法线(3个片断, 16位 或32位浮点)、像素覆盖(32位无符号整数、16位 或32位浮点) 2.Softimage|XSI4.2 新发布的XSI4.2可以直接支持传统的HDR、MAP、CT等三种高动态图象格式,另外还增加了Exr格式的读写。XSI可以将OpenEXR图片作为image clips, 可以导入道Fx Tree并用flipbook预览,以及将场景渲染成Exr格式。并可以在相关的属性编辑器调整曝光值和gamma 显示值。 以前的版本一般设定HDRI时都会需要用到一个大型的球体当作环境或天空物件,XSI 3预置了一个基于图像照明IBL的通道Pass以简化设定流程。XSI4.2对于OpenEXR的控制参数基本上在Environment 內,Background可以控制HDRI影像的曝光程度(exposure),Reflection设定物件反射HDR影像的程度,Final Gathering則控制场景的亮度。 3.Houdini 7 Houdini的全局光照明比较简易,同样可以采用环境贴图实现典型的IBL,在以前只能支持将HDR转化为RAT格式的高动态范围贴图,然而新的7.0版本已经完全解决了这个问题,可以直接使用EXR格式了,并且可以调用Mental Ray 、Renderman等高级渲染器实现更好效果。 (五) nVidia的HPDR——游戏领域内完全的OpenEXR浮点渲染操作支持 目前的游戏大多采用sRGB(CCIR-709)来做“HDR”效果,能够支持纹理过滤、色彩混合,但是毕竟动态范围才3.5,游戏中的效果并不理想。RGBE虽然有足够的动态范围,但是缺乏色彩混合、纹理过滤的支持,因此目前这个数据格式的在游戏中应用并不多。Half-Life 2的HDR采用16位整数数据格式,虽然这个格式能够使用纹理过滤,但是在双线性和三线性过滤的时候,消耗的运算资源达到了24Ops和50 Ops。由于缺乏帧缓存混合操作,因此这个数据格式获得应用的例子其实也是非常稀少的。 NVidia的动态高范围技术HPDR(High-Precision Dynamic-Range)渲染效果就是对存储高精度色彩信息和在高动态灯光范围下渲染场景的能力的一个最好应用。针对电脑对图形处理时对非整数颜色值进行取整的操作造成图像色彩细节的丢失问题,NV40在运算的过程中采用了精确度更高的高精度浮点值来存储颜色。传统的用来存储颜色的32位寄存器不够用了,NV40会自动采用更大的非标准寄存器来存储颜色数据。只是在最后显示的步骤再转换成标准的颜色数据。采用这种技术的好处就是能够让图像中的细节始终保持很高的水平。基于OpenEXR标准开发的光照计算技术,可以改善静态与动态图像质量与画面效果,得到更为平滑和高细节的效果,让视觉效果处理呈现前所未有的渲染图像品质。孤岛惊魂中黑暗入射口附近的泛光、光源周边的眩光和在不同材质上对光源的反射,透射等效果均是由于色彩储存精度的提高而产生。 OpenEXR做为HDR运算的缓存格式,支持16bit浮点、32bit浮点以及32bit整数格式,给NV40在着色渲染、混合渲染以及滤波操作的时候都提供了广泛的数据精度。OpenEXR在材质过滤与像素混合方面的支持,能有效率地建置高动态范围着色技术,通过浮点运算过滤技术增进动态影像质量,实时生成诸如逆光、散射、多重光线透射叠加等场景。这类场景在极品飞车—地下狂飙、波斯王子-时之沙、马克思 佩恩2 中被广泛运用。浮点纹理技术在清晰度和图象细节上,将超越整数的计算模式,可以将画面提高到新的水平。 EXR提供了一种等同于专业摄影棚品质的16位浮点渲染格式,解决了高动态范围渲染的难题。HPDR渲染任务可以分为为3个环节——光线传递、光调影射、色彩及伽玛纠正:1、光线传递:负责计算几何物体、纹理贴图、光线位置和辐射率,为每个像素输出一个高级动态辐射值,并使用SM10e5来编码光线参数信息,把这些数据记录到帧缓存中。几何位置、贴图映射、光源位置、光的反射率等必不可少的众多繁杂信息,意味着采用越高的精度来存储数据,就能够表示越高的动态范围,到最后就能显示出越高的细节,让用户看到丰富真实的细节。2、光调影射:用高动态范围把图像转换成LDRI格式(RGBA或sRGB)。3、色彩及伽玛纠正:通过最终的色调映射过程,将这些颜色转换成显示设备的色彩范围(CRT或LCD等。高精度和高动态范围算法都需要很大的存储空间,NV40可以灵活地在此阶段进行OpenEXR与sRGB之间转换,保证获得最大动态范围的同时,不增加过多的存储量。 四 结论与展望——OpenEXR的未来 当前流行HDR格式有很多,比如Alias|WaveFront IFF、Cineon/DPX、mental ray map、mental ray .ct 、Lightwave FLX、Radiance RGBE、32 bit LogLUV Ttiff ,以及来自佳能或尼康等数码相机的RAW CCD 文件。它们各有优劣,最通行的应该是普通的HDR,它以RGBE对的形式、RLE的压缩方法存储高动态信息。RGB三个通道共享同样的曝光值,这意味着它的色彩保真度很低,而且它不能存储Alpha通道。即使采用单独的360度26 f-stops的图片合成的最佳效果的HDR图片也是如此。与此形成对比的是,OpenEXR每个通道以半或全浮点的方式存储信息,在原始数据上占用更多的空间,近乎完美的无损压缩,具有很高的色彩保真度。OpenEXR不仅能存储Alpha 、G-Buffer还能根据需要存储任何你所想要的通道。HDR在头文件里只能存储少量信息,OpenEXR以字符串的形式存储,可以有无限量。ISO 标准的 C 使它很易于跨操作系统平台,OpenEXR 基于Linux上开发,现在已经被移植到SGI、Windows以及MAC OS10,工业光魔开放原代码的方式引起很多组织和个人的兴趣,很多人正在着手开发应用程序,例如Billy Biggs编写了批量处理OpenEXR的小工具Exrtools,用于调和映射(tone mapping)以及PPM、JPEG、PNG等格式转换等。在Siggraph 2004上,工业光魔提出场景相关scene-referred的标准替代输出相关output referred,从数码相机或扫描电影胶片等不同途径获取的原始数据通过“媒体——场景相关转换IMSR——输出媒体转换SROM——相关显示转换OMRD——预览显示转换RDPD”等过程中,色彩转换语言CTL(color transformation language)在读写OpenEXR头文件中的等相关属性时,通过调和映射自动还原为最初的色彩空间,从而更好的管理色彩。随着时间的推移,越来越多的公司支持OpenEXR,对于HDR来说,它也许会在新的时代走完它的历史。 参考文献: 1 High Dynamic Range Imaging Greg Ward May 21, 2001 2 High Dynamic Range Image Encodings Greg Ward, Anyhere Software www.openexr.com 3 The OpenEXR File Format www.openexr.com 4 Siggraph 2001 Course #14 - Image-Based Lighting http://www.debevec.org/IBL2001 5 Rendering Synthetic Objects into Real Scenes:Bridging Traditional and Image-based Graphics with Global Illuminationand High Dynamic Range Photography Paul Debevec Siggraph98 6 OpenEXR Bitmap I/O Plugin for 3dsMax SplutterFish LLC Legal Stuff 7 从单幅高动态范围图像恢复环境中物体的材质 孙其民, 吴恩华 软件学报2002 Vol.13, No.9 8 The opengl shading language bill licea-kane ATI reseach, inc.

    历史上的今天:

    lp 2009-10-17




    引用地址: