Część efektów z tej książki da się udać po renderze i nikt nie zauważy. Część nie da się nigdy, bo wymaga informacji, której na płaskim obrazie już nie ma. Ten rozdział rysuje tę granicę.
Rozdział 33 zostawił listę zjawisk, które trzeba dołożyć, bo kamera renderera ich nie ma. Zostaje pytanie, gdzie je dołożyć — a odpowiedzi udziela się zwykle nawykiem albo tym, co akurat jest wygodniejsze. Tymczasem istnieje kryterium, i jest ostre.
Wyrenderowany obraz jest siatką pikseli, z których każdy niesie jedną wartość na kanał. Ta wartość jest wynikiem uśrednienia wszystkiego, co przez ten piksel przeszło: wszystkich kierunków, wszystkich odległości i wszystkich powierzchni, które się w nim zmieściły. Uśrednienie jest operacją nieodwracalną — po nim nie da się już ustalić, co się na nie złożyło.
Stąd kryterium: jeśli zjawisko wymaga rozdzielenia rzeczy, które piksel już uśrednił, musi powstać w rendererze. Jeśli operuje na tym, co piksel niesie, wolno je zrobić w compie — i wtedy warto, bo comp jest kilkadziesiąt razy szybszy i pozwala poprawiać bez powtarzania obliczeń.
Warto zauważyć, że utrata informacji nie jest wadą renderu ani błędem formatu. Jest tym, czym obraz jest — prostokątną siatką wartości. Ta sama utrata dotyczy plate'u z kamery, i to nawet bardziej dotkliwie, bo tam nie ma żadnych kanałów pomocniczych. Kiedy więc mówimy, że czegoś „nie da się zrobić w compie”, mówimy w istocie, że tej rzeczy nie da się odtworzyć z fotografii — a to jest twierdzenie o fotografii, nie o narzędziu.
Ma to jedną pociechę, wartą zapamiętania przy pracy z materiałem zdjęciowym. Wszystko, co zrobiła prawdziwa kamera, zrobiła na płaskim obrazie — flara, halacja, ziarno, winieta i rozmycie nośnika działały na obrazie już spłaszczonym przez optykę. Dlatego odtworzenie ich w compie nie jest przybliżeniem: jest odtworzeniem tego samego kroku w tym samym miejscu łańcucha. Przybliżeniem staje się dopiero to, co w prawdziwej kamerze zdarzyło się przed spłaszczeniem, czyli głębia ostrości i rozmycie ruchu.
Warto zwrócić uwagę, że kryterium nie mówi nic o jakości ani o „fizycznej poprawności”. Mówi o dostępności danych. Comp wykonany tam, gdzie dane są, jest tak samo poprawny jak render — a często bardziej użyteczny, bo daje się zmienić po obejrzeniu.
Przełóżmy kryterium na konkrety. Poniższy widget przechodzi przez zjawiska z tej książki i pokazuje, jakiej informacji każde z nich potrzebuje.
Trzy wnioski z tego przeglądu zasługują na nazwanie osobno.
Flara zawsze w compie. Jest to jedyne zjawisko z tej książki, które potrzebuje mniej informacji niż piksel niesie — działa na jasnościach obrazu, i to na jasnościach po zsumowaniu. Renderowanie flary oznacza modelowanie wnętrza tubusa, czego żaden renderer nie robi, i zamyka drogę do poprawek.
Rozmycie ruchu warunkowo. Ruch prostoliniowy wystarcza opisać wektorem na piksel, więc comp go udźwignie. Ruch obrotowy i przecięcia planów wymagają czasu jako wymiaru, a nie jako wektora — i wtedy jest to render, zgodnie z rachunkiem z Dodatku R.
Głębia ostrości jest przypadkiem granicznym i to ona najczęściej bywa źle rozstrzygnięta. Mapa głębi daje jedną odległość na piksel, więc krawędź, na której spotykają się bliski i daleki plan, dostaje jedną z nich — a potrzebowałaby obu.
Granica nie jest nieruchoma. Render potrafi zapisać obok obrazu dodatkowe warstwy, z których każda przywraca kawałek utraconej informacji — i każda przesuwa jedno zjawisko z lewej strony na prawą.
Wynika stąd praktyczna hierarchia, którą warto stosować. Rozbicie na składowe oświetlenia jest zawsze bezpieczne i daje w compie ogromną swobodę bez żadnego ryzyka — bo ich suma odtwarza obraz dokładnie. Pozostałe kanały są przybliżeniami i działają dobrze wszędzie poza krawędziami, przezroczystościami i przenikaniem.
Stąd też bierze się reguła, która brzmi banalnie, a rozstrzyga większość sporów o to, co gdzie robić: jeśli element ma dużo krawędzi na tle o innej odległości — włosy, liście, siatka, dym — to głębię i rozmycie ruchu robi się w rendererze. Jeśli jest zwarty i wyraźnie oddzielony od tła, comp poradzi sobie i będzie tańszy.
Kryterium z pierwszej sekcji rozstrzyga, co jest możliwe. Zostaje spora grupa przypadków, w których możliwe jest jedno i drugie — i tam decyduje druga oś, o której warto myśleć osobno.
Render jest ścisły i zamrożony. Liczy zjawisko z pełnej sceny, więc wynik jest poprawny na krawędziach, w przezroczystościach i w przenikaniu. Kosztuje jednak czas maszyny i — co ważniejsze — czas człowieka: zmiana o dziesięć procent wymaga policzenia wszystkiego od nowa.
Comp jest przybliżony i żywy. Działa na tym, co zostało, więc na krawędziach zgaduje. Za to zmiana jest natychmiastowa, a reżyser oglądający wynik może poprosić o inny — i dostanie go w tym samym posiedzeniu, a nie następnego dnia.
Praktyka pokazuje, że druga oś przeważa częściej, niż wypada przyznać. Element, który przeszedł osiem rund poprawek w compie, jest zwykle bliżej celu niż element policzony raz, dokładnie, i obejrzany dwa razy. Nie dlatego, że przybliżenie jest lepsze od ścisłości — dlatego, że liczba obejrzeń jest tym, co naprawdę poprawia obraz.
Warto przy tym pamiętać o rzeczy, która zwykle przesądza sprawę w praktyce: decyzję można odłożyć. Wyrenderowanie kanałów pomocniczych kosztuje niewiele i nie zobowiązuje do niczego. Element z zapisaną głębią, wektorami ruchu i składowymi oświetlenia daje się zrobić w compie albo dorenderować później, jeśli comp zawiedzie — a element bez nich zamyka drugą drogę.
Wybór po złej stronie granicy nie daje komunikatu o błędzie. Daje obraz, który wygląda prawie dobrze — i warto znać trzy objawy, po których poznaje się, że przyczyna leży tutaj, a nie w ustawieniach.
Obwódka wokół nieostrego elementu. Rozmycie z mapy głębi rozmywa piksele, ale nie rozmywa kształtu maski — więc na granicy elementu zostaje wąski pasek o ostrej krawędzi albo, przy odwrotnym błędzie, ciemna obwódka z tła. Objaw jest tym wyraźniejszy, im większy kontrast między elementem a tłem, i znika całkowicie przy głębi renderowanej.
Przedmiot, który nie odsłania tego, co za nim. Rozmycie ruchu z wektorów przesuwa piksele, których nie ma czym zastąpić — więc za szybko poruszającym się przedmiotem zostaje ślad w kolorze przedmiotu zamiast tła. W rendererze tło jest widoczne, bo w połowie czasu otwarcia przedmiotu tam nie było.
Flara, która nie reaguje na scenę. Flara zrobiona w rendererze albo doklejona jako gotowy obrazek trzyma się kamery, a nie źródła — więc przy ruchu przesuwa się nie tak, jak powinna, a przy zmianie jasności źródła nie zmienia się wcale. Objaw jest odwrotny do dwóch poprzednich: tu render jest błędem, a comp poprawnością.
Wszystkie trzy mają wspólną cechę, którą warto nazwać, bo pozwala je szybko rozpoznać: psują się przy ruchu, nie na zatrzymanej klatce. Element oceniony na jednej klatce potrafi wyglądać bez zarzutu i rozsypać się w odtworzeniu — i dlatego rozstrzygnięcia z tego rozdziału podejmuje się przed renderem, a nie po obejrzeniu pierwszego wyniku.
Zapytaj o dane, nie o wygodę. „Zrobimy to w compie” jest odpowiedzią na pytanie o harmonogram, a nie o obraz. Właściwe pytanie brzmi: czy w płaskim obrazie została informacja, której to zjawisko potrzebuje. Jeśli nie została, comp da wynik, który da się poprawiać w nieskończoność i nigdy nie będzie poprawny.
Wyrenderuj składowe oświetlenia zawsze. Kosztują niewiele, a dają w compie możliwość zmiany siły odbić i rozproszenia bez powtarzania rendera. Jest to jedyny kanał, przy którym nie ma haczyka.
Sprawdź krawędzie, nie środek. Element rozmyty z mapy głębi wygląda dobrze wszędzie poza obwódką — a obwódka jest tym, na co oko patrzy w pierwszej kolejności. Test zajmuje sekundę: powiększ krawędź na tle o innej odległości.
Zostało pytanie o samą scenę: skąd wiadomo, gdzie stała kamera i jak wyglądała przestrzeń, którą sfilmowała. Następny rozdział pokazuje, że plate niesie na to więcej dowodów, niż się wydaje — i że większość z nich to zjawiska optyczne z pierwszych części tej książki, czytane wstecz.
Rozmycie z mapy głębi zawodzi zawsze w tym samym miejscu i z tego samego powodu. Warto ten mechanizm zobaczyć krok po kroku, bo jego zrozumienie od razu podpowiada, kiedy wolno go użyć.
Krok pierwszy: piksel krawędziowy niesie mieszankę. Na granicy gałęzi i nieba piksel ma wartość będącą średnią ważoną obu — powiedzmy w 40 procentach gałąź, w 60 niebo. Jest to prawidłowy, dokładny wynik renderowania.
Krok drugi: mapa głębi musi wybrać jedną liczbę. Nie ma czegoś takiego jak „odległość 40 procent cztery metry, 60 procent nieskończoność”. Kanał głębi zapisuje albo cztery metry, albo nieskończoność — zwykle to, co trafił promień środkowy. Już tutaj informacja przestaje być zgodna z barwą tego piksela.
Krok trzeci: rozmycie stosuje jeden promień do całego piksela. Jeśli mapa wybrała cztery metry, piksel dostaje rozmycie gałęzi — czyli sześćdziesiąt procent nieba zostaje rozmazane tak, jakby leżało na gałęzi. Jeśli wybrała nieskończoność, czterdzieści procent gałęzi zostaje rozmazane po niebie.
Objaw zależy od tego, która strona wygrała, i dlatego bywa mylący: raz jest to ostra obwódka wokół rozmytego elementu, raz ciemny albo jasny halo. Obie postacie mają jedną przyczynę.
Czego to nie psuje. W obszarach jednorodnych — środek gałęzi, otwarte niebo — mapa głębi jest dokładna i rozmycie wychodzi poprawnie. Dlatego reguła praktyczna brzmi: błąd jest proporcjonalny do długości krawędzi w kadrze. Zwarty przedmiot na tle o zbliżonej odległości ma ich mało i comp da wynik nie do odróżnienia. Włosy, liście albo siatka mają ich tysiące i wynik będzie zły w każdym miejscu naraz.
Częściowym ratunkiem jest zapisanie krycia osobno i rozmywanie elementu razem z nim, przed złożeniem z tłem. Nie usuwa to problemu tam, gdzie przedmiot przecina sam siebie na różnych odległościach, ale usuwa go na granicy z tłem — czyli w większości ujęć wystarczy. Szczegóły w Dodatku U.