DODATEK · BARC · LIVRPSEXT OF · Rozdział 11
Dodatek B / Głębiej: USD

USD w głębi: warstwy, referencje, payloads, warianty

Rozdział 11 pokazał USD jako czarną skrzynkę, która „jakoś" składa scenę. Ten dodatek otwiera composition arcs krok po kroku, na konkretnym przykładzie.

TL;DR

Rozdział 11 celowo uprościł mechanizm USD do trzech pojęć — referencji, warstw i wariantów — żeby dało się zrozumieć ideę kompozycji bez grzęźnięcia w szczegółach. W praktyce USD definiuje sześć różnych rodzajów composition arcs, każdy z inną siłą pierwszeństwa, i to właśnie ta precyzyjna hierarchia sprawia, że złożenie tysięcy warstw daje przewidywalny, powtarzalny wynik za każdym razem.

Etap: Kolejność siły — LIVRPS

Sześć arcs, jedna, sztywna hierarchia

Kiedy dwie warstwy USD mają sprzeczną opinię o tym samym atrybucie tego samego obiektu, coś musi rozstrzygnąć, która wygrywa. USD robi to według stałej kolejności, od najsilniejszej do najsłabszej, zapamiętywanej akronimem LIVRPS:

LLocal — bezpośrednie opinie zapisane wprost w tej warstwie.
IInherits — dziedziczenie z „klasy" prima, propagujące zmiany do wszystkich instancji.
VVariantSets — aktywnie wybrany wariant spośród zapisanych w assecie opcji.
RReferences — dane włączone z innego pliku, wczytywane od razu.
PPayload — jak reference, ale z możliwością odroczenia wczytania.
SSpecializes — najsłabsza forma dziedziczenia, dla „miękkich" wartości domyślnych.

W praktyce artysta rzadko musi pamiętać tę kolejność na pamięć — narzędzia pipeline'u (Rozdział 15) budują warstwy tak, żeby zachowanie było intuicyjne. Warto jednak wiedzieć, że kolejność istnieje i jest sztywna, bo to ona tłumaczy sytuacje pozornie niezrozumiałe: dlaczego zmiana w jednej warstwie „nie działa", mimo że plik na pewno się zapisał — zwykle dlatego, że inna warstwa, wyżej w LIVRPS, ma silniejszą opinię o tym samym atrybucie.

Etap: Reference kontra payload

Ta sama idea, inny moment wczytania

Reference i payload robią dokładnie to samo w sensie strukturalnym — włączają dane z innego pliku w bieżącą scenę — różnią się wyłącznie momentem, w którym te dane faktycznie trafiają do pamięci. Reference wczytuje się razem z resztą sceny, natychmiast. Payload zostaje w stanie „nierozwiniętym", dopóki ktoś (artysta albo skrypt) jawnie nie zażąda jego rozwinięcia. Środowisko z dziesięcioma tysiącami drzew z Rozdziału 3 typowo używa payloadów dla samych drzew — layout widzi ich lekkie „bounding boxy" i może rozstawiać kompozycję kadru, nie czekając, aż każde z dziesięciu tysięcy drzew wczyta swoją pełną geometrię. Dopiero lighting, tuż przed renderem, rozwija payloady do pełnych danych.

Etap: Warianty w praktyce

Jeden asset, wiele zamkniętych w nim opcji

Variant set to nazwany zestaw alternatyw zapisanych wewnątrz tego samego assetu — na przykład costume_variant z opcjami default, torn, armored dla tej samej postaci. Wybór wariantu nie kopiuje niczego — to tylko przełącznik mówiący USD, którą z już istniejących, zapisanych opcji aktywować przy składaniu stage'u. Dzięki temu shot może pokazać postać w podartym stroju, a shot obok — tę samą postać w standardowym, bez utrzymywania dwóch osobnych kopii całego assetu na dysku.