天天看點

你了解OpenEXR嗎?



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

很多人對 OpenEXR 這種圖像格式的了解僅限于:它是 32bit 的,它可以支援多通道,VFX 公司都在使用 EXR。這些都沒錯,但如果你的渲染器生成的是 tile 方式的多通道 EXR,則會降低 Nuke 的合成的效率。

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)。

壓縮方式

    OpenEXR 支援無損和有損的圖像壓縮:32bit 檔案會占用大量的磁盤空間,壓縮能大大減少檔案尺寸,減輕網絡負荷。Zip 壓縮的 scanline EXR 是 Nuke 推薦的。

Half float vs. Float

    合理選擇輸出半浮點還是全浮點的 EXR,很多通道(高光、反射、陰影等)使用半浮點即可,精度要求高的通道(depth、motion vector、incidence 等)可以使用全浮點。

單通道 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 合成一遍才能看到大緻結果)。這裡隻是一些參考,并不一定适合所有的情況。渲染合成之前先測試一幀,看看有沒有明顯的速度問題,有的話就要找找問題的根源了。