Teraz to Ty decydujesz, za co płacisz przy zapisie sceny
W poprzednim wpisie o nowym zapisie scen animacji było jedno zdanie, które zostało nam w głowie: rysunki zapisują się bez strat, ceną jest większy plik.
To prawda — ale przy bliższym spojrzeniu okazało się, że nie jest to konieczność. To był nasz wybór, podjęty za użytkownika. A skoro wybór, to powinien należeć do niego. Tak jak przy zapisywaniu zdjęcia wybiera się jakość, a przy PNG — przeplot.
Nowe okno: Opcje zapisu sceny
Pojawia się przy pierwszym zapisie sceny i przy „Zapisz jako…". Do nastawienia są cztery rzeczy:
Dokładność rysunków — pełna albo 16 bitów. W normalnym zakresie kolorów różnicy nie widać, a plik jest zwykle około dwa razy mniejszy. Zwykle — bo to akurat sprawdziliśmy pomiarem i wyszło ciekawiej, o czym niżej.
Kompresja — od żadnej (najszybszy zapis, największy plik) po maksymalną. Dotąd była przybita na sztywno do jednego ustawienia.
Materiały w pliku albo referencje — scena samowystarczalna, którą można komuś wysłać, albo mały plik trzymający tylko odwołania do plików na tym komputerze.
Miniatura podglądu — ta, którą widać na ekranie startowym.
Trzy decyzje, które uważamy za ważniejsze od samej listy opcji
Okno nie pojawia się przy Ctrl+S ani przy autozapisie. Zapis sceny trwa teraz dziesiątki milisekund — pytanie przy każdym odebrałoby cały powód, dla którego ten format powstał. Pytamy raz, wtedy, gdy scena dostaje swoją nazwę.
Wybór zapisuje się w pliku, nie w ustawieniach programu. To własność sceny, nie sesji. Kolejne zapisy trzymają się go bez pytania, a osoba, która dostanie plik, dostaje go takim, jakim został zapisany. Ma to też praktyczny skutek, o którym łatwo zapomnieć: scena zapisana w 16 bitach nie wypełnia się po cichu 32-bitowymi fragmentami w miarę dalszego rysowania. Plik w połowie jednego formatu, a w połowie drugiego, byłby najgorszym możliwym wynikiem — bo to, co byś odzyskał, zależałoby od tego, których fragmentów akurat dotknąłeś.
Skutki są pokazane uczciwie. Okno na bieżąco podaje szacunek — i jest podpisany jako szacunek, z wyjaśnieniem dlaczego: ile ubędzie po kompresji, zależy od tego, co narysowano. Jednolite wypełnienie skurczy się niemal do zera, gęsta faktura prawie wcale. Kto chce liczby, a nie przewidywania, naciska „Zmierz naprawdę" — program wykonuje próbny zapis i podaje rzeczywisty rozmiar pliku oraz czas zapisu i odczytu.
A przy 16 bitach okno mówi wprost, co tracisz: wartości spoza zakresu 0–1, czyli przejaskrawienia i ujemne kanały, które powstają przy niektórych trybach mieszania i pracy z kolorem. I że tej straty nie da się cofnąć po zapisaniu. Opcja, która nie nazywa swojej ceny, jest pułapką, a nie wyborem.
Czego świadomie nie ma
Rozważaliśmy trzecią pozycję — „8 bitów, najmniejszy plik". Nie ma jej, i wolimy powiedzieć dlaczego, niż wystawić przełącznik, który nie robi tego, co obiecuje.
Wewnętrzny format, w którym rysunek spoczywa na dysku, po prostu nie ma wariantu ośmiobitowego. Zrobienie tego naprawdę oznacza dodanie nowego formatu i czytnika, który jest wspólny z formatem dokumentów graficznych — czyli zmianę o zasięgu znacznie większym niż „jedna opcja przy zapisie sceny". Wróci jako osobna praca, gdy przyjdzie na to czas.
Pomiar, który obalił nasze własne zdanie
Pisząc to okno, napisaliśmy przy szesnastu bitach po prostu „mniejszy plik". Potem zmierzyliśmy — i okazało się, że to zależy od tego, co narysujesz, w stopniu, którego nikt z nas się nie spodziewał.
Porównanie nowego formatu ze starym archiwum na tej samej scenie:
| co jest narysowane | stosunek rozmiaru | |---|---| | jednolite wypełnienie | 35× | | gładki gradient | 176× | | drobna faktura, kreska, szum | 1,6× |
Powód jest prosty, kiedy się go zobaczy: obrazy PNG, których używało archiwum, mają przewidywanie sąsiednich pikseli. Na gładkim gradiencie robi ono cuda, bo każdy następny piksel da się zgadnąć z poprzedniego. Na drobnej fakturze nie pomaga wcale — i tam jesteśmy niemal na równi.
A teraz część, która nas zaskoczyła: przy drobnej fakturze zapis w 16 bitach daje plik większy niż w pełnej dokładności. Liczby zmiennoprzecinkowe mają powtarzalne fragmenty, które kompresja potrafi wykorzystać; szesnastobitowy szum jest po prostu szumem.
Dlatego okno nie obiecuje już „mniejszy plik", tylko „zwykle mniejszy" — i dopisaliśmy zdanie, że jeśli to rozmiar jest powodem wyboru, warto nacisnąć „Zmierz naprawdę" i sprawdzić na swoim rysunku. Obietnica w interfejsie, której pomiar nie potwierdza, jest kłamstwem nawet wtedy, gdy sprawdza się w większości przypadków.
Wiemy też teraz, gdzie leży największy niewykorzystany zysk: brakuje nam tego przewidywania pikseli przed kompresją. To ono, a nie liczba bitów, odpowiada za całą przewagę starego formatu w gładkiej treści. Zapisaliśmy to jako osobną pracę.
Jedna rzecz, którą sprawdzamy najuważniej
Że domyślne ustawienia nie zmieniają niczego. Kto nie dotknie tego okna, dostaje dokładnie to, co dostawał wcześniej — i jest na to osobny test, który sprawdza to nie po ustawieniu w programie, lecz po tym, co faktycznie wylądowało w pliku.
Opcja, która po cichu zmienia zachowanie domyślne, nie jest opcją. Jest regresją z checkboxem.