DODATEK · EKOMPRESJA · ZIP / PIZ / DWAAEXT OF · Rozdział 13
Dodatek E / Głębiej: Wymiana danych

OpenEXR od środka: kompresja, multipart, deep pixels

Jeden plik, który potrafi ważyć dwa megabajty albo dwa gigabajty w zależności od jednego ustawienia kompresji — i dlaczego „deep" EXR to zupełnie inny plik niż zwykły.

TL;DR

Rozdział 13 pokazał, dlaczego jeden plik OpenEXR niesie dziesiątki kanałów zamiast płaskiego obrazka. Ten dodatek schodzi niżej — do tego, jak te dane są fizycznie zapisane na dysku, i dlaczego dwa pliki EXR o identycznej zawartości wizualnej mogą różnić się rozmiarem stukrotnie.

Etap: Kompresja — bezstratna albo bardzo mała

ZIP, PIZ, DWAA — trzy różne kompromisy

OpenEXR pozwala wybrać schemat kompresji osobno dla każdego pliku. ZIP i PIZ są bezstratne — żaden piksel nie traci precyzji — co czyni je właściwym wyborem dla plików, które będą jeszcze wielokrotnie przetwarzane, np. w kompozycji. PIZ, oparty na kompresji falkowej, sprawdza się szczególnie dobrze na obrazach z naturalnym ziarnem czy szumem renderu, typowym dla materiału filmowego. DWAA i DWAB (opracowane przez DreamWorks Animation) są stratne, ale osiągają znacznie wyższy stopień kompresji przy stracie niezauważalnej gołym okiem — dobry wybór dla finalnej dostawy, gdzie plik nie będzie już dalej przetwarzany, tylko obejrzany. Wybór złego schematu w złym miejscu łańcucha — stratnego tam, gdzie ktoś jeszcze będzie grade'ował obraz — to cichy, skumulowany błąd, trudny do wyśledzenia post factum.

Etap: Multipart — kilka obrazów w jednym pliku

Nie każdy odbiorca musi czytać wszystko

Plik multipart EXR mieści w sobie kilka niezależnych „części" — każda ze swoją własną rozdzielczością i własnym zestawem kanałów — zamiast wymuszać, żeby wszystko dzieliło jeden wspólny układ. W praktyce pozwala to np. zapisać w jednym pliku beauty w pełnej rozdzielczości obok osobnej, mniejszej części z danymi technicznymi — identyfikatorami obiektów do maskowania w kompozycji, czy dodatkową kamerą stereo — i pozwolić programowi odczytującemu wziąć tylko tę część, której akurat potrzebuje, zamiast wczytywać cały plik do pamięci za każdym razem.

Etap: Deep pixels

Więcej niż jedna wartość na piksel

Zwykły plik EXR trzyma jedną wartość koloru (i głębi) na piksel — czyli zakłada, że w danym pikselu widać dokładnie jedną powierzchnię. To założenie łamie się przy dymie, włosach czy listowiu, gdzie w jednym pikselu nakłada się na siebie wiele częściowo przezroczystych warstw na różnych głębokościach. Deep pixel rozwiązuje to, trzymając nie jedną, a wiele próbek na piksel, każdą z własną głębokością i przezroczystością. Dzięki temu kompozytor może wstawić nowy element gdzieś pomiędzy te warstwy — na przykład cząstkę iskier za dymem, ale przed drzewem w tle — bez ponownego renderowania sceny, bo dane o głębi każdej warstwy wciąż istnieją, zamiast zostać spłaszczone do jednej liczby przy renderze.