OpenEXR 高動態範圍 (.exr)
Academy 標準OpenEXR (EXR) 是一種專業的高動態範圍(HDR)圖片格式,用於電影與視覺特效工作流程。它支援 16 位元半浮點數與 32 位元浮點數畫素、多重通道以及圖層。
檢查與中繼資料
作業系統與檔案分析工具透過檢查開頭的二進位位元組序列來識別 EXR 檔案:
位元組層級標頭簽章(檔案簽章)
作業系統與檔案分析工具透過檢查開頭的二進位位元組序列來識別 EXR 檔案:
十六進位簽章(偏移量 0):
76 2F 31 01ASCII 表示法: v/1.
標準化: Academy Software Foundation (ASWF) 開放標準
技術規格
| 容器架構 | 可擴充的區塊式容器,支援任意通道、部分與深度資料圖層 |
| 壓縮 | PIZ(小波)、ZIP/ZIPS、RLE、B44/B44A、DWAA/DWAB(有損 DCT)以及未壓縮 |
| 位元組序 | 小端序(Intel x86) |
| 色彩空間 | 線性 ACEScg, ACES2065-1, 線性 Rec.709, 任意色度座標 |
| 色版與結構 | 任意通道名稱(R、G、B、A、Z 深度、法線、世界座標、動態向量、Cryptomatte) |
| 最大尺寸 | 實際上無限制(支援圖塊式深度縮放與數十億畫素的畫布邊界) |
| 透明度 | 完整的浮點數透明度通道與深度合成體積取樣陣列 |
| 串流與漸進式 | 掃描線或圖塊式區塊串流,可實現快速的局部畫面讀取與代理算繪 |
技術比較矩陣:EXR 對比競爭格式
| 技術屬性 | EXR (目前) | HDR | TIFF | PNG |
|---|---|---|---|---|
| 動態範圍 | 16 位元 half 與 32 位元 float 線性 | 8 位元共用指數(RGBE) | 整數 8/16 位元或 32 位元 float | 標準 8 位元 / 16 位元整數 |
| 多通道算繪層 | 無限的任意命名通道與部分 | 僅限 RGB | 圖層支援有限 | 僅限 RGBA |
| 產業採用率 | 廣泛應用於視覺特效與 3D 製片工作流程 | 傳統 3D 打光 / 全景圖 | 印前製版與攝影 | 支援情形因軟體而異。 |
| 色彩管理 | 原生整合 ACES 與 OpenColorIO | 臨時指定的 gamma / 線性 | ICC 設定檔標籤 | sRGB / ICC 標籤 |
常見損壞模式與十六進位修復指南
圖片顯示時完全偏暗,或出現大片過曝的死白區塊。
根本原因: 缺少線性到 sRGB 顯示轉換,或是指定了錯誤的 ACES 色彩空間。
修復: 在 File2File.app HDR 檢視器中套用 ACEScg 或線性到 sRGB 色調曲線轉換。
安全性分析與解析器攻擊向量
複雜的基於區塊(chunk)之 OpenEXR 解析器必須嚴格驗證通道定義與圖塊邊界,以預防記憶體安全問題。
已知攻擊向量
- libopenexr 中的多通道緩衝區跨距(stride)計算發生整數溢位。
- 在解壓縮 PIZ 或 DWAA 壓縮串流時發生堆積(heap)超出範圍讀取。
- 透過深度巢狀的多部分區塊標頭遞迴造成阻斷服務。
防禦最佳實務: 使用記憶體安全的沙箱 WebAssembly 建置版本來解碼 EXR 檔案,並設定嚴格的圖塊尺寸限制。
歷史起源與里程碑
2020OpenEXR 3.0 在 Academy Software Foundation 下發布,實現多執行緒現代化。
2013OpenEXR 2.0 引入深度資料合成與多部分圖片結構。
2003工業光魔(Industrial Light & Magic)在《哈利波特》中使用 OpenEXR 後,以修改版的 BSD 授權條款將其開放原始碼。
1999由工業光魔工程師 Florian Kainz、Rod Bogart 和 Drew Hess 共同建立,旨在取代 8 位元的 Cineon/DPX。
主要優勢與優點
- 原生支援 16 位元半浮點數(FP16)與 32 位元浮點數(FP32),可保留從直射陽光到黑暗陰影的極端明暗度。
- 任意多通道架構將所有 3D 算繪通道(Beauty、Diffuse、Specular、Depth、Cryptomatte)封裝在單一檔案中。
- DWAA 與 DWAB 是專為視覺上高效的圖片壓縮所設計的有損編解碼器;根據設定和內容的不同,視覺上的差異可能是微乎其微的或是顯而易見的。
技術限制與缺點
- 儲存未壓縮的多圖層 4K/8K 32 位元算繪通道時,會產生龐大的檔案大小。
- 在消費級軟體進行多通道解壓縮期間,會產生高 CPU 與記憶體負擔。
- 需要色彩管理轉換(ACES 或 OCIO)才能在標準 sRGB 顯示器上正確呈現。
有趣的技術冷知識
- 工業光魔專為 OpenEXR 格式發明了 16 位元「半」浮點資料類型。
- 每個 EXR 檔案的前四個檔案簽章(magic bytes)為 0x76 0x2F 0x31 0x01,在 ASCII 中會轉譯為「v/1\x01」。
- OpenEXR 支援「Deep Data」,單一像素可在透過半透明煙霧與雲霧的不同距離處,儲存多個顏色與深度取樣。
常見技術問題
為什麼有些視覺特效工作流程會使用 OpenEXR?
它能保留高精度 HDR 圖片資料,並支援合成工作流程中使用的多個通道、部分與深度資料。
EXR 中的半浮點數與浮點數有什麼區別?
半精度浮點數每個色彩通道使用 16 位元,在檔案大小僅為完整 32 位元浮點數一半的情況下,提供 30 格(stop)的動態範圍,使其成為美術算繪(beauty render)的產業首選。
如何將 EXR 轉換為標準的 PNG 或 JPG?
您可以直接在網頁瀏覽器中使用 File2File.app,將 EXR 檔案轉換為經過色調對應(tone-mapped)的 PNG 或 JPG 圖片。