Stretched along what?Rozciągnięty wzdłuż czego?
An isotropic highlight is round because the surface is equally rough in every direction. Anisotropy says the surface is rougher one way than the other — brushed metal, hair, vinyl, a machined face — and the highlight smears out perpendicular to the grain.
Rozbłysk izotropowy jest okrągły, bo powierzchnia jest tak samo chropowata w każdym kierunku. Anizotropia mówi, że powierzchnia jest bardziej chropowata w jedną stronę niż w drugą — szczotkowany metal, włosy, winyl, toczona powierzchnia — a rozbłysk rozmazuje się prostopadle do słojów.
Which immediately raises a question the shader cannot answer on its own: rougher along which direction? A point on a surface has a normal, and that's all geometry gives you for free. Every anisotropic shader in every renderer therefore needs a second piece of information — a direction lying in the surface. That direction is called the tangent, and the entire Arnold-versus-Pixar difference is just how you're asked to supply it.
Co natychmiast rodzi pytanie, na które shader nie odpowie sam: bardziej chropowata wzdłuż którego kierunku? Punkt na powierzchni ma normalną i to wszystko, co geometria daje za darmo. Każdy anizotropowy shader w każdym rendererze potrzebuje więc drugiej informacji — kierunku leżącego w powierzchni. Ten kierunek nazywa się styczną (tangent), a cała różnica między Arnoldem a Pixarem sprowadza się do tego, jak masz go podać.
Think of it asPomyśl o tym tak
Brushing a steel worktop. The normal tells you which way is "up out of the counter". It says nothing about which way you dragged the scourer — and that's the only thing that decides where the streaks go. Somebody has to tell the shader which way you brushed.
Szczotkowanie stalowego blatu. Normalna mówi, gdzie jest „w górę od blatu”. Nie mówi nic o tym, w którą stronę ciągnąłeś zmywak — a to jedyna rzecz decydująca, gdzie pójdą smugi. Ktoś musi powiedzieć shaderowi, w którą stronę szczotkowałeś.
Arnold: one angle on top of an assumed directionArnold: jeden kąt na założonym kierunku
AiStandardSurface assumes a starting direction for you — the geometric tangent that comes from the surface's own parameterisation, the same thing your UVs run along. Then it gives you Specular Rotation to spin that assumed direction around the normal until the streaks point where you want.
AiStandardSurface zakłada za ciebie kierunek startowy — styczną geometryczną wynikającą z parametryzacji powierzchni, czyli to samo, wzdłuż czego biegną twoje UV. Potem daje ci Specular Rotation, żeby obrócić ten założony kierunek wokół normalnej, aż smugi pójdą tam, gdzie chcesz.
The parameter runs 0 to 1, and that range covers a full 360°. Which sounds generous until you remember that a stretched highlight looks identical when you flip it end for end. Half a turn brings you back to where you started, so everything above 0.5 is a repeat of the bottom half.
Parametr biegnie od 0 do 1, a ten zakres pokrywa pełne 360°. Brzmi hojnie, dopóki nie przypomnisz sobie, że rozciągnięty rozbłysk wygląda identycznie po obróceniu go o pół obrotu. Połowa obrotu wraca do punktu wyjścia, więc wszystko powyżej 0.5 jest powtórką dolnej połowy.
Live render — anisotropic highlightRender na żywo — rozbłysk anizotropowy
Drag inside the direction map to steer the tangent, or use the sliders.Przeciągnij po mapie kierunku, aby obrócić styczną, albo użyj suwaków.
Uniform is the field Arnold's rotation dial can reach. Radial and Swirl are fields it cannot — no single rotation value produces them, because the required angle is different at every point.
Jednorodne to pole, do którego pokrętło rotacji Arnolda potrafi dojść. Promieniste i wirowe to pola, do których nie potrafi — żadna pojedyncza wartość rotacji ich nie da, bo wymagany kąt jest inny w każdym punkcie.
It does, and it always will. 0.25 is 90°, 0.75 is 270°, and a grain direction has no head or tail — 270° is 90° seen from the other end. If you are animating or texturing a rotation, use 0 to 0.5 and treat the top half as wasted range.
I zawsze będzie. 0.25 to 90°, 0.75 to 270°, a kierunek słojów nie ma początku ani końca — 270° to 90° widziane z drugiej strony. Jeśli animujesz lub teksturujesz rotację, używaj 0 do 0.5 i traktuj górną połowę jako zmarnowany zakres.
PxrSurface: one vector, no assumptionsPxrSurface: jeden wektor, bez założeń
PxrSurface doesn't offer a rotation dial. It offers
Shading Tangent (specularAnisotropyDirection),
which is a vector input: you connect a pattern that produces a
direction, and that direction is the grain. There is no default
angle to nudge, because you supplied the whole answer rather than a
correction to somebody else's guess.
PxrSurface nie oferuje pokrętła rotacji. Oferuje
Shading Tangent (specularAnisotropyDirection),
czyli wejście wektorowe: podłączasz pattern produkujący kierunek i ten
kierunek jest słojem. Nie ma domyślnego kąta do poprawienia, bo
podałeś całą odpowiedź, a nie korektę do cudzego założenia.
That is the whole philosophical difference, and it is the same difference you meet everywhere else in RenderMan: PxrSurface expects to be fed by a pattern graph, so anywhere a value could plausibly vary across a surface, it takes the general form rather than the convenient one. A scalar rotation is the special case where the answer happens to be the same everywhere.
To cała różnica filozoficzna i ta sama, którą spotykasz wszędzie indziej w RenderManie: PxrSurface zakłada, że karmi go graf patternów, więc wszędzie tam, gdzie wartość mogłaby sensownie zmieniać się po powierzchni, przyjmuje postać ogólną, a nie wygodną. Skalarna rotacja to przypadek szczególny, w którym odpowiedź akurat wszędzie jest taka sama.
Underneath, it's the same machinePod spodem to ta sama maszyneria
Here is the part that surprises people. Arnold's
standard_surface also has a
tangent vector input — it is right there
in the shader's parameter list, defaulting to (0, 0, 0), which means
"use the geometric tangent". And specular_rotation isn't a
separate mechanism at all: the shader takes that tangent, rotates it
about the normal, and feeds the result to exactly the same anisotropic
BRDF that PxrSurface uses.
Oto część, która ludzi zaskakuje. standard_surface
Arnolda też ma wejście wektorowe tangent —
jest wprost na liście parametrów shadera, domyślnie (0, 0, 0), co
znaczy „użyj styczne geometrycznej”. A specular_rotation
wcale nie jest osobnym mechanizmem: shader bierze tę styczną, obraca ją
wokół normalnej i podaje wynik dokładnie temu samemu anizotropowemu
BRDF, którego używa PxrSurface.
The actual graph, from Arnold's own definitionPrawdziwy graf, z definicji Arnolda
Taken from the standard_surface MaterialX node definition
shipped with Arnold for Maya 2025. The equivalent PxrSurface setup is
the middle line on its own: build the vector, plug it into Shading
Tangent. Note also the last line — when
Specular Anisotropy is 0, the rotation is bypassed
entirely.
Zaczerpnięte z definicji węzła MaterialX standard_surface
dostarczanej z Arnoldem dla Maya 2025. Odpowiednik w PxrSurface to
sama środkowa linia: zbuduj wektor, podłącz go do Shading Tangent.
Zwróć też uwagę na ostatnią linię — gdy
Specular Anisotropy wynosi 0, rotacja jest całkowicie
pomijana.
So the honest summary is not "Arnold has rotation, Pixar has vectors". It is: both renderers need a tangent vector, and both let you supply one. Arnold additionally wraps a convenience dial around it, and most DCC interfaces show you the dial instead of the socket.
Uczciwe podsumowanie nie brzmi więc „Arnold ma rotację, Pixar wektory”. Brzmi: oba renderery potrzebują wektora stycznej i oba pozwalają go podać. Arnold dodatkowo owija to pokrętłem dla wygody, a większość interfejsów DCC pokazuje ci pokrętło zamiast gniazda.
This is good news for porting. You are not learning a new concept when you move to Shading Tangent — you are being handed the socket that was always behind Arnold's dial. Anything you built with a rotation value can be rebuilt as a vector; the reverse is not generally true.
To dobra wiadomość przy przenoszeniu. Przechodząc na Shading Tangent nie uczysz się nowego pojęcia — dostajesz gniazdo, które zawsze było za pokrętłem Arnolda. Wszystko, co zbudowałeś wartością rotacji, da się odtworzyć wektorem; w drugą stronę zwykle nie.
What a vector buys youCo daje wektor
A single rotation value can only say "rotate everything by this much". That is fine for a brushed panel where the grain runs one way across the whole surface. It falls apart the moment the grain has to curve.
Pojedyncza wartość rotacji może powiedzieć tylko „obróć wszystko o tyle”. To wystarcza przy szczotkowanym panelu, gdzie słoje biegną w jedną stronę po całej powierzchni. Rozsypuje się w chwili, gdy słoje muszą się zakrzywić.
| You wantChcesz | With a rotation scalarSkalarem rotacji | With a tangent vectorWektorem stycznej |
|---|---|---|
| Brushed flat panelSzczotkowany płaski panel | One value. Done.Jedna wartość. Gotowe. | One constant vectorJeden stały wektor |
| Brake disc, turned metalTarcza hamulcowa, toczony metal | Needs a painted rotation mapWymaga malowanej mapy rotacji | A radial pattern, procedurallyPattern promienisty, proceduralnie |
| Hair, fur, fibre flowWłosy, futro, przepływ włókien | Awkward — the angle wrapsNiewygodnie — kąt się zawija | The curve tangent, directlyStyczna krzywej, wprost |
| Painted flow map from Mari/SubstanceMalowana mapa przepływu z Mari/Substance | Must be baked down to an angleTrzeba zapiec do kąta | Plugs straight inPodłącza się wprost |
The awkward row is hair. An angle has to wrap from 359° back to 0°, and anything that interpolates or filters across that seam — mipmapping a rotation texture, blending between two values — produces a visible swipe where the grain briefly spins the wrong way. Vectors don't have that seam. That alone is a decent argument for the vector being the better primitive.
Niewygodny wiersz to włosy. Kąt musi zawinąć się z 359° z powrotem do 0°, a wszystko, co interpoluje lub filtruje przez ten szew — mipmapowanie tekstury rotacji, blendowanie dwóch wartości — daje widoczne przetarcie, gdzie słoje na moment kręcą się w złą stronę. Wektory nie mają takiego szwu. Już samo to jest niezłym argumentem za tym, że wektor jest lepszym prymitywem.
The UV catchHaczyk z UV
Arnold's assumed starting direction comes from the geometry's own parameterisation. On a polygon mesh that means it follows your UV layout. Which has a consequence people discover late and painfully: re-laying-out the UVs rotates your anisotropy.
Założony kierunek startowy Arnolda pochodzi z parametryzacji samej geometrii. Na siatce wielokątowej oznacza to, że idzie za twoim rozłożeniem UV. Ma to konsekwencję, którą ludzie odkrywają późno i boleśnie: przerobienie UV obraca twoją anizotropię.
A shell rotated 30° in the UV editor to pack better is a shell whose brushed-metal grain is now 30° off, on that shell only, with no change to any shader value. If the model comes back from another department re-unwrapped, the look develops a patchwork of grain directions that nobody edited.
Wyspa obrócona o 30° w edytorze UV dla lepszego upakowania to wyspa, której słoje szczotkowanego metalu są teraz przekręcone o 30° — tylko na niej i bez zmiany jakiejkolwiek wartości w shaderze. Jeśli model wraca z innego działu po ponownym rozwinięciu, look dostaje patchwork kierunków, których nikt nie edytował.
An explicitly supplied tangent — computed from object space, from a
projection, or from a curve — doesn't move when the UVs do. This is a
real robustness argument in PxrSurface's favour, and it's worth
knowing even if you never leave Arnold: plug the
tangent input and you get the same immunity.
Jawnie podana styczna — liczona z przestrzeni obiektu, z projekcji albo
z krzywej — nie rusza się, gdy ruszają się UV. To realny argument za
odpornością PxrSurface i warto go znać, nawet jeśli nigdy nie odejdziesz
od Arnolda: podłącz wejście tangent, a dostaniesz tę samą
odporność.
Converting a rotation to a tangentPrzenoszenie rotacji na styczną
- Read the rotation as degrees. Odczytaj rotację jako stopnie. Multiply Arnold's value by 360. A Specular Rotation of 0.125 is 45°. Pomnóż wartość z Arnolda przez 360. Specular Rotation 0.125 to 45°.
- Get a starting tangent in RenderMan. Zdobądź styczną startową w RenderManie. A manifold or tangent-field pattern gives you the surface's own direction — the equivalent of what Arnold was assuming. Pattern manifoldu lub pola stycznych da ci własny kierunek powierzchni — odpowiednik tego, co Arnold zakładał.
-
Rotate it about the normal by that angle.
Obróć ją wokół normalnej o ten kąt.
This is literally the
rotate3dstep from Arnold's graph above. To dosłownie krokrotate3dz grafu Arnolda powyżej. - Plug it into Shading Tangent, then check the sign. Podłącz do Shading Tangent i sprawdź znak. PxrSurface's Anisotropy runs −1 to 1 where Arnold's runs 0 to 1; the negative half stretches the other way, which can save you a 90° correction. Anisotropy w PxrSurface biegnie od −1 do 1, a w Arnoldzie od 0 do 1; ujemna połowa rozciąga w drugą stronę, co potrafi oszczędzić poprawkę o 90°.
- Sanity check on a sphere, not the hero asset. Sprawdź na kuli, nie na finalnym assecie. Anisotropy direction errors are far easier to see on a primitive than on a model whose silhouette hides them. Błędy kierunku anizotropii dużo łatwiej zobaczyć na prymitywie niż na modelu, którego sylwetka je ukrywa.
Common pitfallsTypowe pułapki
Check the anisotropy amount first. With anisotropy at 0 the highlight is round, and a round highlight looks identical no matter which way you point the grain. Arnold makes this explicit — its graph skips the rotation entirely when Specular Anisotropy is 0.
Sprawdź najpierw siłę anizotropii. Przy anizotropii równej 0 rozbłysk jest okrągły, a okrągły rozbłysk wygląda identycznie niezależnie od kierunku słojów. Arnold robi to wprost — jego graf całkowicie pomija rotację, gdy Specular Anisotropy wynosi 0.
Two UV shells laid out with opposite winding give you tangents pointing opposite ways, and the highlight visibly steps at the border. With an object-space or projected tangent the seam disappears, because the direction no longer knows the UVs exist.
Dwie wyspy UV rozłożone z przeciwnym zwrotem dają styczne skierowane w przeciwne strony, a rozbłysk widocznie przeskakuje na granicy. Przy stycznej z przestrzeni obiektu albo z projekcji szew znika, bo kierunek przestaje wiedzieć, że UV w ogóle istnieją.
A vector texture that hasn't been normalised, or one stored in the wrong colour space so the values were gamma-shifted, gives you a direction that wobbles per-pixel. Vectors want linear data and unit length — the same discipline you already apply to normal maps.
Tekstura wektorowa bez normalizacji albo zapisana w złej przestrzeni barw, przez co wartości przesunęła gamma, daje kierunek chwiejący się piksel po pikselu. Wektory potrzebują danych liniowych i jednostkowej długości — tej samej dyscypliny, którą stosujesz już do map normalnych.
Why fuzz has a cone angleDlaczego fuzz ma kąt stożka
Another parameter that looks like a naming quirk and turns out to be a different model underneath.
Kolejny parametr, który wygląda na dziwactwo nazewnicze, a okazuje się innym modelem pod spodem.