What a specular model actually isCzym właściwie jest model odbicia
A shiny surface is not smooth. Under a microscope it is a landscape of tiny facets, each one a perfect little mirror pointing in a slightly different direction. You see a highlight where enough of those facets happen to be angled to bounce the light straight at your eye.
Błyszcząca powierzchnia nie jest gładka. Pod mikroskopem to krajobraz drobnych fasetek, z których każda jest idealnym lusterkiem skierowanym w nieco innym kierunku. Rozbłysk widzisz tam, gdzie wystarczająco wiele z nich jest ustawionych tak, by odbić światło prosto do twojego oka.
Roughness says how wildly those facets are tilted. The specular model says something different and much easier to overlook: given that amount of tilt, how are the facets distributed? Are they clustered tightly around the average, or do a stubborn few point far away from it?
Chropowatość mówi, jak mocno te fasetki są poprzechylane. Model odbicia mówi coś innego i o wiele łatwiejszego do przeoczenia: przy takim rozrzucie nachyleń, jak fasetki są rozłożone? Czy skupiają się ciasno wokół średniej, czy może uparta mniejszość celuje daleko od niej?
Think of it asPomyśl o tym tak
Two archery targets with the same number of arrows in them. Both groups have the same average spread — but on one target every arrow is inside a neat ring, and on the other most arrows are in a tighter ring with a handful scattered right out to the edge of the hay bale. Same "spread", completely different picture. Beckmann is the neat target. GGX is the one with strays.
Dwie tarcze łucznicze z tą samą liczbą strzał. Oba skupienia mają ten sam średni rozrzut — ale na jednej tarczy wszystkie strzały mieszczą się w równym pierścieniu, a na drugiej większość siedzi ciaśniej, za to kilka poleciało aż na skraj beli siana. Ten sam „rozrzut”, zupełnie inny obrazek. Beckmann to ta równa tarcza. GGX to ta ze strzałami w krzakach.
The formulas, if you want themWzory, jeśli ich potrzebujesz
θ is the angle between a facet's normal and the surface normal, and
α is the roughness after the renderer's internal remap (commonly
α = roughness²). Beckmann's exp decays faster than any
polynomial; GGX's squared denominator decays like 1/θ⁴. That single
difference is the entire subject of this page.
θ to kąt między normalną fasetki a normalną powierzchni, a α to
chropowatość po wewnętrznym przemapowaniu renderera (zwykle
α = chropowatość²). exp Beckmanna zanika szybciej niż
jakikolwiek wielomian; kwadrat w mianowniku GGX zanika jak 1/θ⁴. Ta
jedna różnica to cały temat tej strony.
The two shapesDwa kształty
Here are both distributions plotted against facet angle, at whatever roughness you choose. In the linear view they look almost like the same curve. Switch the vertical axis to logarithmic and the argument ends: GGX simply refuses to reach zero.
Poniżej oba rozkłady w funkcji kąta fasetki, przy dowolnie wybranej chropowatości. W widoku liniowym wyglądają niemal jak ta sama krzywa. Przełącz oś pionową na logarytmiczną i dyskusja się kończy: GGX po prostu nie chce dojść do zera.
Facet distribution D(θ)Rozkład fasetek D(θ)
Horizontal: how far a facet is tilted from the surface normal. Vertical: how many facets are tilted that far.Poziomo: jak mocno fasetka jest odchylona od normalnej. Pionowo: ile fasetek ma takie odchylenie.
Both curves are normalised to the same peak so you are comparing shape, not brightness. In the log view, every gridline down is a factor of ten fewer facets.
Obie krzywe są znormalizowane do tego samego szczytu, więc porównujesz kształt, a nie jasność. W widoku logarytmicznym każda linia siatki w dół to dziesięć razy mniej fasetek.
Beckmann's curve falls off a cliff. Past a certain tilt there are effectively no facets left, so the highlight has an edge you could almost trace. GGX's curve never quite lands — there is always a thin population of facets pointing far off-axis, and they put light everywhere.
Krzywa Beckmanna spada jak z urwiska. Powyżej pewnego nachylenia praktycznie nie ma już fasetek, więc rozbłysk ma krawędź, którą dałoby się obrysować. Krzywa GGX nigdy do końca nie ląduje — zawsze zostaje cienka populacja fasetek celujących daleko w bok, i to one rozsiewają światło wszędzie.
Same sphere, both modelsTa sama kula, oba modele
One sphere, split down the middle. Same roughness on both halves, same light, same everything — the only difference across that seam is which distribution the renderer is asking. Drag the light size up and watch the seam become invisible; drag it back down and the two halves part company again.
Jedna kula, przecięta na pół. Ta sama chropowatość po obu stronach, to samo światło, wszystko takie samo — jedyną różnicą po dwóch stronach szwu jest to, o który rozkład pyta renderer. Zwiększ rozmiar światła i patrz, jak szew znika; zmniejsz go z powrotem, a połówki znów się rozjeżdżają.
Live render — Beckmann (left) · GGX (right)Render na żywo — Beckmann (lewo) · GGX (prawo)
Real microfacet maths in a fragment shader, lit by one spherical area light.Prawdziwa matematyka mikrofasetek w shaderze fragmentów, oświetlona jedną kulistą lampą powierzchniową.
The right half is what Arnold has always shown you. If you have spent years building an eye for how a highlight should fall off, that eye is calibrated to GGX — which is exactly why a ported material lit in PxrSurface can feel subtly hard before you've changed a single value.
Prawa połówka to dokładnie to, co Arnold zawsze ci pokazywał. Jeśli latami wyrabiałeś sobie oko na to, jak rozbłysk powinien zanikać, to oko jest wykalibrowane na GGX — i właśnie dlatego przeniesiony materiał oświetlony w PxrSurface potrafi wydać się subtelnie twardy, zanim jeszcze zmienisz jakąkolwiek wartość.
The tail is the whole storyCała rzecz w ogonie
At default exposure both highlights clip to white, and the cores look identical because clipped white is clipped white. Push the exposure slider above and the difference walks out into the open: a faint, wide halo bleeding away from the GGX core that the Beckmann side simply doesn't have.
Przy domyślnej ekspozycji oba rozbłyski obcinają się do bieli, a rdzenie wyglądają identycznie, bo obcięta biel to obcięta biel. Podbij suwak ekspozycji powyżej, a różnica sama wychodzi na wierzch: słaba, szeroka poświata rozlewająca się wokół rdzenia GGX, której strona Beckmanna po prostu nie ma.
That halo is why GGX won. Measured data from real materials — polished metal, car paint, plastic — nearly always shows more light out at wide angles than Beckmann predicts. GGX was adopted precisely because its long tail matches what real surfaces do.
Ta poświata jest powodem, dla którego GGX wygrał. Zmierzone dane prawdziwych materiałów — polerowanego metalu, lakieru samochodowego, plastiku — niemal zawsze pokazują więcej światła pod szerokimi kątami, niż przewiduje Beckmann. GGX przyjął się właśnie dlatego, że jego długi ogon odpowiada temu, co robią prawdziwe powierzchnie.
You are almost certainly looking at a clipped highlight on a mid-grey background, where the two models genuinely do agree. Look at a dark material, a wide light source, or a grazing angle instead — anywhere the tail has room to show. Or just raise the exposure until the core stops blowing out.
Prawie na pewno patrzysz na obcięty rozbłysk na średnio szarym tle, gdzie oba modele faktycznie się zgadzają. Spójrz zamiast tego na ciemny materiał, szerokie źródło światła albo kąt muskający — wszędzie tam, gdzie ogon ma miejsce, by się pokazać. Albo po prostu podnieś ekspozycję, aż rdzeń przestanie się przepalać.
A roughness value doesn't transferWartość chropowatości się nie przenosi
This is the part that costs people a day. Copying Specular Roughness 0.3 from Arnold into PxrSurface's Roughness 0.3 is not a translation, because the two models spend that roughness differently. GGX puts some of it into the tail, so its core ends up tighter than a Beckmann lobe of the same nominal roughness.
To ten fragment, który kosztuje ludzi cały dzień. Przepisanie Specular Roughness 0.3 z Arnolda do Roughness 0.3 w PxrSurface nie jest tłumaczeniem, bo oba modele wydają tę chropowatość inaczej. GGX część z niej przeznacza na ogon, więc jego rdzeń wychodzi ciaśniejszy niż płat Beckmanna o tej samej nominalnej chropowatości.
Try it: leave the GGX half alone and hunt for the Beckmann roughness whose core looks the same size. You will find one — and it won't be the same number. Then look at the outer edge, and you'll find you can never match both at once.
Spróbuj: zostaw połówkę GGX w spokoju i poszukaj takiej chropowatości Beckmanna, przy której rdzeń wygląda na tak samo duży. Znajdziesz ją — i nie będzie to ta sama liczba. Potem spójrz na zewnętrzną krawędź i przekonasz się, że jednego z drugim nigdy nie dopasujesz naraz.
Try to match them — Beckmann (left) · GGX (right)Spróbuj je dopasować — Beckmann (lewo) · GGX (prawo)
Independent roughness per half.Niezależna chropowatość dla każdej połówki.
Don't convert the number — remove the need to. Set PxrSurface's Specular Model to GGX and your Arnold roughness values carry over directly. Matching Beckmann to GGX by eye is only worth doing when something else forces you to stay on Beckmann.
Nie przeliczaj liczby — usuń potrzebę przeliczania. Ustaw Specular Model w PxrSurface na GGX, a wartości chropowatości z Arnolda przeniosą się bezpośrednio. Dopasowywanie Beckmanna do GGX na oko ma sens tylko wtedy, gdy coś innego zmusza cię do pozostania przy Beckmannie.
Which one, whenKtóry i kiedy
| QuestionPytanie | BeckmannBeckmann | GGXGGX |
|---|---|---|
| Highlight edgeKrawędź rozbłysku | Defined, stopsWyraźna, kończy się | Fades foreverZanika bez końca |
| Matches measured materialsZgodność z pomiarami materiałów | Under-predicts wide anglesZaniża szerokie kąty | Close, which is why it wonBlisko — i dlatego wygrał |
| Render noiseSzum w renderze | Slightly cheaper to sampleNieco tańszy w próbkowaniu | Tail costs samples on rough metalOgon kosztuje próbki na chropowatym metalu |
| In AiStandardSurfaceW AiStandardSurface | not offeredniedostępny | always, no switchzawsze, bez przełącznika |
| In PxrSurfaceW PxrSurface | the defaultdomyślny | one enum awayjedno pole enum dalej |
In practice: use GGX. It is what every other renderer in your pipeline is doing, what your references were shot against, and what your muscle memory expects. Beckmann earns its place in the narrow case where you actively want a highlight to stop — a stylised look, or killing a glow that reads as a lens artefact rather than a surface.
W praktyce: używaj GGX. To robi każdy inny renderer w twoim pipelinie, na tym nakręcono twoje referencje i tego oczekuje twoja pamięć mięśniowa. Beckmann zarabia na swoje miejsce w wąskim przypadku, gdy świadomie chcesz, by rozbłysk się kończył — przy stylizowanym looku albo gdy trzeba zabić poświatę czytaną jako artefakt obiektywu, a nie własność powierzchni.
Common pitfallsTypowe pułapki
A rough metal without its GGX tail loses the broad, dirty glow that sells it as metal, and what's left is a clean blob — which is what plastic looks like. Check Specular Model first, before you start pushing roughness around.
Chropowaty metal bez swojego ogona GGX traci szeroką, brudną poświatę, która sprzedaje go jako metal, a to, co zostaje, to czysta plama — czyli dokładnie to, jak wygląda plastik. Sprawdź najpierw Specular Model, zanim zaczniesz przesuwać chropowatość.
PxrSurface has more than one specular lobe. The rough specular has its own model setting, and it also defaults to Beckmann. If you are using both lobes, both need switching.
PxrSurface ma więcej niż jeden płat odbicia. Rough specular ma własne ustawienie modelu i również domyślnie stoi na Beckmannie. Jeśli używasz obu płatów, oba trzeba przełączyć.
Because you matched one thing and the models differ in two. A roughness tuned to match GGX's core under a small light will be too broad under a large one, and the tail was never going to match at all. Any eyeball match is valid for one lighting setup only.
Bo dopasowałeś jedną rzecz, a modele różnią się na dwóch. Chropowatość dostrojona do rdzenia GGX przy małym świetle będzie za szeroka przy dużym, a ogon i tak nigdy nie miał się zgodzić. Każde dopasowanie na oko obowiązuje tylko dla jednego ustawienia świateł.
Specular Rotation vs Shading TangentSpecular Rotation kontra Shading Tangent
Once the highlight shape is right, the next argument is which way it points. Arnold hands you an angle; PxrSurface hands you a vector — and underneath they are the same machine.
Gdy kształt rozbłysku już się zgadza, kolejny spór dotyczy tego, w którą stronę jest skierowany. Arnold daje ci kąt, PxrSurface wektor — a pod spodem to ta sama maszyneria.