關於 OpenEXR, 你應該要知道的幾件事

在像 Pixar 這樣的 animation studio,或是像 ILM 這樣大規模的 VFX studio 裏頭,OpenEXR 扮演了一個很是重要的角色:工做過程當中,能夠用來預覽或是再加工(合成)的圖片文件咱們就如同其它的 studio 同樣,也是使用 EXR 做爲內部的圖檔使用。公司裏頭,絕大部分的 exr 文件,都是 renderer 的產物。OpenEXR 是個能夠用來乘載 HDR 的圖片格式,在 ILM 的推波助瀾,加上其它 studio 的跟進以及動畫軟件的支持下,幾乎成了某種 de facto 標準。而後,它終究只是一個「夠開放「的圖檔格式,如何有效且正確的善用它,纔是更重要的事。node


如下幾點,是咱們在太極影音的工做過程當中,發展出來的一些經驗:安全


  1. EXR 檔案裏頭沒有任何標頭或 tag 指出它存的 color space 是線性(linear)、gamma 2.2(1.8, 2.6, ...)等,而是由使用的人或是軟件自行解釋。
  2. EXR 鼓勵以 linear color space 的方式來存內容 (scene-referred)。這樣無論是人、機器或是軟件,都不用去猜想別的可能性,並且對於後期合成來講,既不用對拿到的影像想太多就直接操做,也不須要先作個轉換,是比較省事且安全有效率的 pipeline。但這點不是強制性的,只能說是你們約定成俗的一種習慣性用法。就像咱們如今都認爲相機出來的 JPEG 通常是 sRGB  (~ gamma2.2) 或 Adobe RGB,但其實 JPEG spec 並無定義這個。
  3. EXR 以 linear 儲存後,在顯示時纔去根據不一樣的 display device,使用不一樣的 transformation 或是 LUT 來轉換。要求比較嚴苛的工做環境,會就每一個 display device 有一組 LUT (1D? 2D? 3D? 這部分我尚未做完研究各類 LUT 表示法的適用情況,只能說,理論上 3D LUT 比較厲害。),且會定時根據 device 的情況來更新那組 LUT。這種做法是很是很是嚴苛的要求下的做法。
  4. EXR 能夠有任意的 metadata,因此是能夠在裏頭存個 'colorspace' 的 meta 來用,不過這樣得確認全部接觸到此 exr 的程序,都有去「尊重「這個 meta 纔有用,否則反而會落得不倫不類的。
  5. EXR 儲存的數值,只有 16-bit 或是 32-bit 的這兩種,並無 8-bit, 10-bit, 12-bit, 24-bit, ... 等此說法。當有人這樣說時,能夠假設是隻用了比較少的 bit(ex, 16 bits 中,只用了 14 bits,另外兩個 bits 爲零),但存在檔案裏時,同樣是 16 或是 32 bits。
  6. 一樣的圖片,以 linear 與 log 的方式來存的話(這邊指的是單純的 log,並不是 REDlog 或是 panalog 這類特定的 preset),log 存的檔案的確是會小一點點,約節省了 10%~20%。但它仍舊是以 16 bits 或是 32 bits 來存。
  7. 壓縮方法中,有 loseless 與 lossy 兩種。PIZ, ZIP, ZIP (16 scanline), RLE 屬於 loseless。其中 ZIP (16 scanline) 對於 CG image 的壓縮率最大;而 PIZ 對於有 film grain 的 image 有最好的表現(由於使用了 wavelet)。B44 或是 B44A 爲 lossy,咱們現有的工做環境不會使用到,也不該該使用到纔是。
  8. 像素(pixel) 存的方式,又分爲 scanline 與 tiled。後者適合以一張 .exr 來存一整個 mipmaps,就像 .tex 同樣(.tex 是 .tif 的一種小變型)。prman(Pixar's RenderMan)的 texture 這個 shader op,也許已經有支持 .tiff 或 .exr 了(我沒去確認),但我相信對於 .tex 的支持應該仍舊是最好的。


further reading:less


  1. ILM 於 SIGGRAPH 2004 發表的 OpenEXR Color Management 是個很好的參考,不過其中的 CTL 已經開始由 OpenColorIO 取代掉了。
  2. Understanding Nuke's unique Layer and Channel system (including the Shuffle Nodes).

相關文章
相關標籤/搜索