COAT · druga warstwa specularuSHEEN/FUZZ · kąt, nie roughnessTRANSMISSION · 1 suwak → 2 gainy
Rozdział 15 / Shading produkcyjny

Warstwy: coat, sheen, transmission

Ułożenie coatu nad bazowym BRDF-em w złej kolejności łamie zachowanie energii tak subtelnie, że zobaczysz to dopiero na turntable'u pod ostrym światłem.

TL;DR
Etap: Coat / Clearcoat

Druga warstwa specularu, nie kosmetyczny dodatek

Lakier samochodowy, poler na drewnie, cienka warstwa potu na skórze — mają przezroczystą warstwę nad materiałem bazowym, z własnym, zwykle bardzo gładkim specularem. Produkcyjne shadery nie symulują tego w pełni fizycznie (pełna symulacja dwuwarstwowa z dwoma Fresnelami i śledzeniem promienia między warstwami jest w raytracing-book, Dodatku A) — zamiast tego po prostu dodają drugi, niezależny lob specular na wierzch pełnego BRDF-u bazy, ważony własnym Fresnelem. Prostsze niż prawdziwa symulacja, wizualnie bardzo bliskie.

↓ raytracing-book, Dodatek A — pełny model dwuwarstwowy: dwa Fresnele, przekrój warstw

coat (Arnold) i Clearcoat (PxrSurface) mają własny Face/Edge Color, roughness i IOR (domyślnie ≈1,5 w obu) — całkowicie niezależne od głównej warstwy specular. To właśnie ta niezależność jest źródłem błędu z zajawki tego rozdziału: coat leży nad bazowym BRDF-em, więc każdy foton, który dociera do bazy i wraca, przechodzi przez coat dwukrotnie. Jeśli coat jest ułożony w stosie poniżej bazy zamiast powyżej — albo jeśli jego własny Fresnel jest źle skalibrowany — całość nadal renderuje się bez błędu, tylko subtelnie łamie bilans energii: powierzchnia oddaje więcej światła, niż na nią padło. Różnicy nie widać na pojedynczym, statycznym renderze pod miękkim światłem; widać ją dopiero na turntable'u, pod ostrym kierunkowym światłem, gdzie błysk coatu i błysk bazy nakładają się pod różnymi kątami.

Osobna pułapka domyślnych wartości: coat_roughness w Arnoldzie domyślnie wynosi 0,1, ale Clearcoat Roughness w PxrSurface domyślnie to 0,0 — idealne lustro. Na chropowatej bazie to często niezauważalne (chropowatość bazy i tak dominuje odbiór), ale na gładkiej, gdzie coat ma być głównym źródłem połysku, idealnie ostry coat wygląda nienaturalnie szklano, dopóki nie ustawisz roughness ręcznie.

Etap: Sheen / Fuzz

Ta sama poświata, inna jednostka

sheen/sheen_color w Arnoldzie i Fuzz Gain/Fuzz Color w PxrSurface robią dokładnie to samo: symulują delikatną, rozproszoną poświatę na krawędziach cienkich włókien (aksamit, kurz, wełna) pod kątem, którego zwykły specular nie łapie — to bezpośrednia zamiana 1:1. Różnica siedzi w kontrolowaniu jej „miękkości”. Arnold używa sheen_roughness, tej samej jednostki co reszta warstw. PxrSurface używa Fuzz Cone Angle — nie roughness, tylko kąt w stopniach (domyślnie 8°), opisujący, jak daleko od powierzchni „odchylają się” umowne włókna: wąski stożek = włókna postawione prosto, ciasna, wyraźna poświata na krawędzi; szeroki stożek = włókna leżące płasko, szeroka, rozmyta łuna.

Fuzz Cone Angle ≈ 32 · Sheen Roughnessprzybliżone przeliczenie między jednostkami Arnolda i PxrSurface — punkt startowy do dalszego strojenia na oko, nie gwarancja identycznego wyglądu
Policzone: sheen_roughness = 0,3 jako Fuzz Cone Angle
sheen_roughness = 0,3
Fuzz Cone Angle = 32 × 0,3 = 9,6°
Blisko domyślnego 8° PxrSurface — dobry punkt startowy dla wełny i podobnych tkanin, dalej strojony na oko pod docelowym oświetleniem (Rozdział 19 wraca do tego przy tkaninach).
Etap: Transmission / szkło

Jeden suwak, dwa gainy

W Arnoldzie transmission to jeden suwak, bo odbicie i załamanie na granicy dwóch ośrodków to dosłownie ten sam event fizyczny — Fresnel decyduje, jaki ułamek się odbija, a reszta się załamuje (raytracing-book, Rozdział 7). PxrSurface rozdziela to na dwa niezależne gainy: Reflection Gain (światło odbite) i Refraction Gain (światło przechodzące na wylot). To rozdzielenie jest wygodne przy stylizacji, ale kryje najczęstszą pułapkę tej warstwy: ustawienie tylko Refraction Gain, bez Reflection Gain, daje szkło, które nic nie odbija — i wygląda fałszywie natychmiast, bo każde realne szkło ma choćby słaby błysk odbicia na krawędziach. Konwertując wartość z Arnolda, oba gainy trzeba ustawić na tę samą liczbę co dawny transmission.

Thin Walled (Arnold) i Glass → Thin (PxrSurface, thinGlass) to ten sam przełącznik: nadal rozdziela odbicie i załamanie poprawnie, ale przestaje zaginać promień przez obiekt — różnica między szybą okienną (thin) a pełną bryłą szkła, przez którą promień faktycznie się łamie po drodze.

Kolor transmisji to osobna pułapka. transmission_color zamienia się wprost na Refraction Color tylko wtedy, gdy transmission_depth (głębokość absorpcji) wynosi zero. Gdy głębokość jest ustawiona, kolor przestaje być zwykłym barwieniem, a staje się barwą, jaką przyjmuje białe światło po przebyciu tego dystansu w ośrodku — to jest absorpcja rządząca się prawem Beera-Lamberta (raytracing-book, Rozdział 18 — wolumetria), i w PxrSurface trafia do zupełnie innego pola: Interior → Extinction. Ta sama butelka szkła w cienkiej i grubej wersji potrzebuje różnych wartości Extinction, żeby dać ten sam kolor — jedna wartość transmission_depth w Arnoldzie robiła to automatycznie dla obu grubości; w PxrSurface trzeba przeliczyć ręcznie.

Etap: Energia raz jeszcze

Coat przyciemnia, transmission zmniejsza diffuse — kto o tym pamięta

Rozdział 13 wprowadził zasadę: Arnold pilnuje bilansu energii między warstwami automatycznie, PxrSurface nie. Tu widać to konkretnie na dwóch przykładach z tego rozdziału. Dołożenie coat w Arnoldzie automatycznie przyciemnia to, co jest pod spodem (część światła zostaje zużyta przez samą warstwę coatu, zanim dotrze do bazy) — dołożenie Clearcoat w PxrSurface tego nie robi samo, warstwy są policzone niezależnie i się sumują. Włączenie transmission w Arnoldzie automatycznie zmniejsza wagę diffuse (światło, które przechodzi na wylot, nie może jednocześnie rozproszyć się jako diffuse) — w PxrSurface znowu trzeba to zrobić ręcznie. Ta sama reguła z Rozdziału 13 stosuje się tu bez wyjątku: za każdym razem, gdy podnosisz gain jednej warstwy, sprawdź, czy któraś warstwa pod nią nie powinna zejść w dół.

Słowniczek
Coat / Clearcoat
Druga, niezależna warstwa specularu nad bazowym BRDF-em; leży nad bazą, więc światło przechodzi przez nią dwukrotnie.
Sheen / Fuzz
Rozproszona poświata na krawędziach cienkich włókien pod kątem; Arnold steruje roughness, PxrSurface kątem stożka (Fuzz Cone Angle).
Transmission / Glass
Warstwa przepuszczająca światło na wylot; Arnold jednym suwakiem, PxrSurface osobnymi gainami odbicia i załamania.
Extinction (Interior)
PxrSurface: absorpcja światła wewnątrz ośrodka wg prawa Beera-Lamberta, odpowiednik transmission_depth + transmission_color Arnolda po przeliczeniu.