你了解OpenEXR吗?



原文地址:http://www.x-graf.com/2012/07/more-about-exr/网络

不少人对 OpenEXR 这种图像格式的了解仅限于:它是 32bit 的,它能够支持多通道,VFX 公司都在使用 EXR。这些都没错,但若是你的渲染器生成的是 tile 方式的多通道 EXR,则会下降 Nuke 的合成的效率。ide

Tile vs. Scanline

    不少人都不知道在输出 EXR 文件的时候有两种方式:tile 和 scanline,而 Nuke 读取图像是以 scanline 方式从上至下读取,若是读取 tile EXR,速度会很是慢(单通道文件没有感受,多通道文件感受明显),转换成 scanline 之后,速度能够提高 5-10 倍。工具

    渲染器大都以 tile 方式输出 EXR(Arnold 和 Vray 缺省为 tile;Softimage 的 mental ray 和 3delight 在界面内没法选择,只能用 tile;Maya 2013 开始将缺省的 EXR 和 TIFF 输出方式改为 scanline),渲染一般是分红图块来处理的,tile 方式容许渲染器将当前处理的图块存盘,这样能够节省 framebuffer 资源,而 scanline 方式则要等整个图像处理完毕后才能存盘,若是渲染图片尺寸大的话,就会有明显的效率差异。测试

    正由于大部分渲染器输出的是 tile EXR,因此不少 VFX 公司都有专门的工具来转换生成的 EXR 文件。我也更倾向于渲染的时候不要直接输出多通道(multi-channel)EXR,而是每一个通道单独输出,而后在 Nuke 里将这些通道序列结合成多通道的 EXR(可使用 gizmo)。spa

压缩方式

    OpenEXR 支持无损和有损的图像压缩:32bit 文件会占用大量的磁盘空间,压缩能大大减小文件尺寸,减轻网络负荷。Zip 压缩的 scanline EXR 是 Nuke 推荐的。3d

Half float vs. Float

    合理选择输出半浮点仍是全浮点的 EXR,不少通道(高光、反射、阴影等)使用半浮点便可,精度要求高的通道(depth、motion vector、incidence 等)可使用全浮点。orm

单通道 vs. 多通道

    一堆单通道 EXR 文件和单个多通道的 EXR 文件,很难说是谁的合成效率高,这和我的习惯有关。图片

    把全部通道放到一个文件中,会致使文件尺寸变大,增长网络负担。我经常使用的合成通道有:diffuse, indirect diffuse, specular, indirect specular (reflection), shadow, depth, normal, fresnel, point position, RGB matte, occlusion, (reflect occlusion), (refraction), (RGB light)。有些材质会使用更多的合成通道,例如 SSS。若是可能,我还会渲染 beauty 通道,以供快速预合(这样就不须要等待全部 pass 合成一遍才能看到大体结果)。这里只是一些参考,并不必定适合全部的状况。渲染合成以前先测试一帧,看看有没有明显的速度问题,有的话就要找找问题的根源了。ip