WARSTWY · 8 kontra 8WSPÓLNY MIANOWNIK · GGX + FresnelRÓŻNI SIĘ · kto pilnuje energii
Rozdział 13 / Shading produkcyjny

aiStandardSurface / PxrSurface warstwa po warstwie

GGX i Fresnel z poprzedniej książki nie znikają w produkcyjnym shaderze — chowają się pod nazwami parametrów, które trzeba umieć odczytać z powrotem jako wzór.

TL;DR
Etap: Stos warstw

Ten sam stos, dwie etykiety

Żaden z tych shaderów nie każe Ci budować materiału z osobnych node'ów BRDF połączonych w graf — GGX i Fresnel z poprzedniej książki (raytracing-book, Rozdziały 10–11) siedzą już w środku, jako gotowe warstwy jednego node'a, którym możesz sterować pojedynczymi parametrami. Kolejność warstw w obu jest niemal identyczna, licząc od góry (najbardziej zewnętrznej) w dół:

Layer.stackaiStandardSurface vs PxrSurface
AISTANDARDSURFACE PXRSURFACE Coat Thin Film Sheen Specular + Metalness Transmission Subsurface Base (Diffuse) Emission Clearcoat Iridescence Fuzz Specular + Rough Specular Glass Subsurface Diffuse Glow Rough Specular (PxrSurface) nie ma odpowiednika w Arnoldzie — zostaw wyłączony przy migracji
Ten sam porządek: warstwy zewnętrzne (coat/clearcoat) na górze, dyfuzja/emisja na dole. Pomarańczowa warstwa specular to jedyne miejsce, gdzie mechanizm, nie tylko nazwa, naprawdę się różni.

Większość wierszy w tabeli niżej to zwykła zamiana nazwy — ten sam parametr, ta sama jednostka, można wpisać bez myślenia. Kilka wierszy jest oznaczonych, bo kryje w sobie prawdziwą pułapkę koncepcyjną, nie tylko nazewniczą.

aiStandardSurfacePxrSurfaceUwaga
base_colorDiffuse Colorproste 1:1
base (weight)Diffuse Gainproste 1:1
diffuse_roughnessDiffuse Roughnessta sama idea — spłaszcza Lamberta, „proszkowy” wygląd
specular_colorSpecular Face/Edge ColorPxrSurface rozdziela kolor na wprost i pod kątem — patrz Rozdział 14
specular_roughnessSpecular Roughnessta sama idea, ale Arnold podnosi roughness do kwadratu wewnętrznie
metalnessbrak bezpośredniego odpowiednikaosiągane przez Face/Edge Color — patrz Rozdział 14
specular_anisotropyAnisotropyArnold 0→1, PxrSurface −1→1 (ujemna połowa = te same elipsy obrócone o 90°)
specular_rotationShading Tangentbrak suwaka — tylko wejście-połączenie, trzeba odbudować mapą tangent
(zawsze GGX)Specular ModelPxrSurface: Beckmann (domyślnie) albo GGX — patrz Rozdział 14
coatClearcoatosobny Face/Edge Color, roughness, IOR ≈ 1,5 w obu — Rozdział 15
sheen / sheen_colorFuzz Gain / Fuzz Colorproste 1:1 — Rozdział 15
sheen_roughnessFuzz Cone Anglenie roughness — kąt w stopniach; Cone Angle ≈ 32 × Sheen Roughness
subsurface_radiusMean Free Path Colorpromień staje się kolorem — Rozdział 16
subsurface_scaleMean Free Path Distanceskala staje się dystansem, dodatkowo mnożonym przez Unit Length — Rozdział 16
emission / emission_colorGlow Gain / Glow Colorproste przemianowanie
transmissionReflection Gain i Refraction Gainjeden suwak staje się dwoma — Rozdział 15
opacity (RGB)Presence (float)kolorowa opacity nie ma dokąd trafić — Presence chce 0 albo 1

Pełna mapa parametr-na-parametr, oba shadery, stan na RenderMan 24–26 / Arnold aktualne wydania.

Etap: Specular i metalness

Warstwa, która różni się mechanizmem, nie tylko nazwą

W Arnoldzie metalness to jeden suwak, który po cichu robi dwie rzeczy naraz: barwi specular kolorem z base_color i wygasza diffuse (metal nie ma rozproszenia podpowierzchniowego — światło albo się odbija, albo zostaje pochłonięte, nic nie ucieka spod powierzchni). PxrSurface nie ma tego suwaka w ogóle. Zamiast tego dajesz wprost dwa kolory Fresnela: Specular Face Color (odbicie patrząc wprost) i Specular Edge Color (odbicie pod kątem, przy grazing angle). Dielektryk dostaje niski, prawie neutralny Face Color i biały Edge Color; metal dostaje oba kolory przesunięte w stronę rzeczywistej barwy metalu — i, co łatwo pominąć, ręcznie wyzerowany Diffuse Gain. Pominięcie tego drugiego kroku to najczęstszy powód, dla którego przekonwertowany metal wygląda jak szary plastik, nie jak metal.

Do tego dochodzi Specular Model: Arnold zawsze liczy GGX, PxrSurface domyślnie startuje z Beckmanna — różnica widoczna w tym, jak gwałtownie gaśnie brzeg poświaty (Beckmann urywa się ostro, GGX ciągnie miękki „ogon”), najbardziej zauważalna na lakierze samochodowym i wypolerowanej podłodze. Trzeba przełączyć na GGX osobno na warstwie Specular i osobno na Clearcoat — to dwa niezależne ustawienia, nie jedno globalne.

↓ Rozdział 14 — pełny wywód: Fresnel dielektryka kontra metalu, edge tint, energia
Etap: Bilans energii

Kto pilnuje, żeby materiał nie odbił więcej światła, niż dostał

aiStandardSurface prowadzi księgowość energii automatycznie i po cichu: podniesienie metalness wygasza diffuse, włączenie transmission je zmniejsza, dołożenie coat przyciemnia to, co jest pod spodem — wszystko dzieje się w tle, bez Twojego udziału. PxrSurface oddaje Ci ten budżet i ufa, że sam go rozliczysz: warstwy są niezależne, podniesienie specular nie obniża diffuse, nic Cię nie ostrzeże, jeśli warstwy razem odbijają więcej światła, niż w ogóle padło. To nie jest niedopatrzenie w konstrukcji PxrSurface — to świadomy wybór większej kontroli kosztem większej odpowiedzialności.

Sam oficjalny konwerter Pixara, tłumaczący materiały z Arnolda na PxrSurface, ręcznie domnaża: Diffuse Gain × (1 − metalness) × (1 − subsurface) oraz Subsurface Gain × (1 − sheen) — właśnie dlatego, że PxrSurface tego sam nie zrobi. Praktyczna reguła, która oszczędza najwięcej czasu przy budowie warstwowego materiału w PxrSurface: za każdym razem, gdy podnosisz jeden gain, zapytaj, który inny powinien w zamian zejść w dół. Podniesienie Subsurface Gain do 1 bez obniżenia Diffuse Gain oświetla materiał podwójnie — i dokładnie ten sam błąd powtarza się przy Fuzz nałożonym na materiał z aktywnym subsurface.

Etap: Pierwsze 15 minut

Dlaczego świeży PxrSurface wygląda jak szara kula, a nie jak plastik

Świeży aiStandardSurface od razu wygląda jak używalny biały plastik — domyślne wartości są dobrane tak, żeby coś sensownego było widać od pierwszej klatki. Świeży PxrSurface wygląda jak matowa, ciemnoszara kula bez żadnego połysku. To nie błąd — PxrSurface startuje z niemal wszystkim wyłączonym, tam gdzie Arnold startuje z gotowym materiałem:

ParametraiStandardSurfacePxrSurfaceZnaczenie różnicy
Base/Diffuse Color0,80,18PxrSurface startuje dużo ciemniej (18% szarości)
Specularwaga 1, białyFace i Edge Color czarnebrak jakiegokolwiek specularu, dopóki nie ustawisz koloru
Specular Modelzawsze GGXBeckmannprzełącz na GGX, żeby dopasować kształt poświaty
Clearcoat Roughness0,10,0domyślnie idealne lustro — łatwo przeoczyć na chropowatej bazie
Subsurface DistanceScale 1MFP 10liczba dziesięciokrotnie większa — kopiowanie promienia bez poprawki zamienia skórę w wosk
Kolejność budowy materiału w PxrSurface od zera
1. Najpierw diffuse: Diffuse Color/Gain, oceń wygląd bez żadnego specularu
2. Specular Model → GGX, na warstwie Specular i osobno na Clearcoat
3. Dopiero teraz kolor specularu — Face/Edge Color, bo domyślnie są czarne
4. Zapłać rachunek za energię — zeruj Diffuse Gain dla metalu, obniż go, jeśli podniosłeś subsurface
5. Roughness — potraktuj starą wartość z Arnolda jako punkt startowy, nie gotowy wynik (Arnold podnosi roughness do kwadratu wewnętrznie, PxrSurface nie)
6. Na końcu Clearcoat, potem bump (globalny, nie per-warstwa) i Presence dla wycięć
Ta kolejność (diffuse → model → kolor specularu → energia → roughness → detal) unika najczęstszych „dlaczego to wygląda jak plastik/dlaczego nic nie widać” pytań przy pierwszym kontakcie z PxrSurface.
Z praktyki

Zanim uznasz, że renderer „kłamie”: czy Specular Face Color wciąż jest czarny (brak specularu)? Czy Specular Model wciąż jest na Beckmannie (zły kształt poświaty)? Dla metalu — czy Diffuse Gain wciąż jest powyżej zera? Dla szkła — czy ustawiłeś oba Reflection i Refraction Gain, nie tylko jeden? Dla skóry — czy Mean Free Path Distance wciąż stoi na domyślnym 10? Ta lista wyłapuje większość pierwszych błędów szybciej niż grzebanie w losowych suwakach.

Słowniczek
Warstwa (lob)
Jeden komponent światła w stosie shadera (diffuse, specular, coat...), mieszany z resztą według własnej wagi/gain.
Fresnel Face/Edge Color
PxrSurface: kolor odbicia specularnego patrząc wprost (Face) i pod kątem, przy grazing angle (Edge) — zastępuje suwak metalness.
Metalness workflow
Arnold: jeden suwak jednocześnie barwiący specular i wygaszający diffuse.
Bilans energii (energy conservation)
Zasada, że suma odbitego/przepuszczonego światła nie może przekroczyć tego, co padło — Arnold pilnuje automatycznie, PxrSurface nie.
Beckmann kontra GGX
Dwa modele rozkładu mikrofasetek — różnią się głównie tym, jak gwałtownie gaśnie brzeg poświaty specularnej.