Wydzielenie jednego obiektu w compingu wygląda na najprostszą rzecz pod słońcem: nadaj każdemu obiektowi numer, zapisz numery do bufora, gotowe. Ten dodatek pokazuje, dlaczego to nie działa — i to nie z powodu implementacji, tylko z powodu antyaliasingu z Rozdziału 8.
Rozdział 8 ustalił, że piksel na krawędzi obiektu nie należy do żadnego z nich w całości — kilka podpróbek trafia w jeden obiekt, kilka w drugi, a wynik jest ich średnią. Dla koloru to jest dokładnie to, czego chcemy: gładka krawędź.
Dla identyfikatora to katastrofa. Numer obiektu jest etykietą, nie wielkością — nie ma czegoś takiego jak „obiekt pomiędzy”. Uśrednienie ID 3 i ID 7 z wagami pół na pół daje 5, czyli wskazuje na zupełnie inny obiekt sceny. Im ładniejszy antyaliasing, tym gorsze maski.
Historyczne obejścia sprowadzały się do rezygnacji z antyaliasingu w ID passie: jedna próbka na piksel, twarde krawędzie, ręczne dopasowywanie masek. Działało średnio, a przy motion blurze i głębi ostrości przestawało działać w ogóle — tam „krawędzią” jest cała rozmyta smuga, nie jedna linia.
Cryptomatte zapisuje dla każdego piksela to, co renderer faktycznie zaobserwował: które obiekty go pokryły i w jakim ułamku. Nic nie jest uśredniane między identyfikatorami — sumowane są tylko pokrycia, każde przy swoim identyfikatorze.
Identyfikator nie jest kolejnym numerem, tylko skrótem nazwy. Renderer bierze nazwę obiektu albo materiału, przepuszcza ją przez funkcję haszującą i zapisuje wynik jako liczbę zmiennoprzecinkową. Ma to dwie zalety: nie trzeba prowadzić żadnej centralnej numeracji, a maska przetrwa przenumerowanie sceny — dopóki nazwa się nie zmieni, skrót jest ten sam.
Odwzorowanie skrótów na czytelne nazwy ląduje w metadanych pliku, więc program do compingu może pokazać listę obiektów zamiast liczb. To dlatego wybierasz obiekt, klikając w niego w obrazie: kliknięcie odczytuje skrót spod kursora i szuka go w tej tablicy.
Najładniejsza cecha tego rozwiązania jest taka, że nie wymagało niczego dodatkowego dla trudnych przypadków. Waga to zwykłe pokrycie podpikselowe — a wszystko, co renderer już robi przez próbkowanie, wpływa na nie automatycznie:
Ograniczenie warto znać: to jest maska pokrycia, nie maska oświetlenia. Cryptomatte powie Ci, gdzie obiekt jest widoczny, ale nie oddzieli światła, które on rzuca na innych — od tego jest LPE z Dodatku AJ. Te dwa mechanizmy odpowiadają na dwa różne pytania i w praktyce używa się ich razem.
Cryptomatte jest otwartym standardem, nie funkcją jednego silnika — Arnold, RenderMan, Karma, V-Ray i Cycles zapisują ten sam format, a Nuke, Fusion i After Effects go czytają. Renderery wystawiają zwykle trzy warianty naraz: po obiekcie, po materiale i po nazwie węzła — bo w compingu raz potrzebujesz „ten konkretny model”, a raz „wszystko, co ma ten shader”.
Typowy objaw za małej liczby warstw: maska wygląda dobrze na płaskich powierzchniach, ale gubi się na futrze albo w listowiu, zostawiając dziury. To nie jest błąd wyboru w compingu, tylko informacja, że najsłabsze udziały zostały przycięte przy zapisie — i naprawia się to po stronie renderu, nie kompozycji.
Zostaje trzecia oś podziału obrazu: nie po typie odbicia i nie po obiekcie, tylko po źródle światła. Dodatek AL zajmuje się organizacją świateł — i tym, gdzie celowo łamie się dla niej fizykę z Rozdziału 5.