Graf funkcí smoothstep (x) a smootherstep (x) s použitím 0 jako levého okraje a 1 jako pravého okraje
Hladký krok je rodina sigmoidní interpolace a upínání funkce běžně používané v počítačová grafika[1][2], motory videoher[3], a strojové učení[4].
Funkce závisí na třech parametrech, vstupu X, „levý okraj“ a „pravý okraj“, přičemž se předpokládá, že levý okraj je menší než pravý okraj. Funkce přijímá reálné číslo X jako argument a vrátí 0, pokud X je menší nebo rovný levému okraji, 1 je-li x větší nebo rovno pravému okraji, a plynule interpoluje pomocí Poustevnický polynom, mezi 0 a 1 jinak. Přechod hladký krok funkce je na obou okrajích nulová. To je výhodné pro vytvoření sekvence přechodů pomocí hladký krok interpolovat každý segment jako alternativu k použití sofistikovanějších nebo nákladnějších interpolačních technik.
v HLSL a GLSL, hladký krok realizuje
, kubický Hermitova interpolace po upínání:

Za předpokladu, že levá hrana je 0, pravá hrana je 1, přičemž přechod mezi hranami probíhá tam, kde 0 ≤ X ≤ 1.
Ukázková implementace C / C ++ poskytovaná společností AMD[5] následuje.
plovák hladký krok(plovák edge0, plovák edge1, plovák X) { // Měřítko, zkreslení a saturace x na rozsah 0..1 X = svorka((X - edge0) / (edge1 - edge0), 0.0, 1.0); // Vyhodnocení polynomu vrátit se X * X * (3 - 2 * X);}plovák svorka(plovák X, plovák spodní limit, plovák horní limit) { -li (X < spodní limit) X = spodní limit; -li (X > horní limit) X = horní limit; vrátit se X;}
Obecný formulář pro hladký krok, opět za předpokladu, že levý okraj je 0 a pravý okraj je 1, je

je totožný s upínací funkce:

Charakteristická sigmoidní křivka ve tvaru písmene "S" se získá s
pouze pro celá čísla n ≥ 1. Pořadí polynomu v obecném hladkém kroku je 2n + 1. S n = 1, sklon nebo první derivace hladký krok se rovnají nule na levém a pravém okraji (X = 0 a X = 1), kde je křivka připojena ke konstantě nebo nasycený úrovně. S vyšším celým číslem n, druhá a vyšší derivace jsou na okrajích nulové, takže polynomiální funkce jsou co nejplošší a spoj k mezním hodnotám 0 nebo 1 je plynulejší.
Variace
Ken Perlin navrhuje[6] vylepšená verze funkce smoothstep, která má nulu 1. a 2. řádu deriváty na X = 0 a X = 1:

Referenční implementace C / C ++:
plovák hladší krok(plovák edge0, plovák edge1, plovák X) { // Měřítko a upněte x na rozsah 0..1 X = svorka((X - edge0) / (edge1 - edge0), 0.0, 1.0); // Vyhodnocení polynomu vrátit se X * X * X * (X * (X * 6 - 15) + 10);}plovák svorka(plovák X, plovák spodní limit, plovák horní limit) { -li (X < spodní limit) X = spodní limit; -li (X > horní limit) X = horní limit; vrátit se X;}
Původ
Rovnice 3. řádu
Počínaje obecným třetím řádem polynomiální funkce a její první derivát:

Použití požadovaných hodnot pro funkci v obou koncových bodech:

Aplikování požadovaných hodnot pro první derivaci funkce v obou koncových bodech:

Řešení soustavy 4 neznámých tvořené posledními 4 rovnicemi vede k hodnotám polynomiálních koeficientů:

To má za následek třetího řádu "smoothstep" funkce:

Rovnice 5. řádu
Počínaje obecnou pátou objednávkou polynomiální funkce, její první derivace a její druhá derivace:

Použití požadovaných hodnot pro funkci v obou koncových bodech:

Aplikování požadovaných hodnot pro první derivaci funkce v obou koncových bodech:

Aplikování požadovaných hodnot pro druhou derivaci funkce v obou koncových bodech:

Řešení systému 6 neznámých vytvořených posledními 6 rovnicemi vede k hodnotám polynomiálních koeficientů:

Výsledkem je pátý řád "hladší krok" funkce:

Rovnice 7. řádu
Použitím podobných technik se zjistí, že rovnice 7. řádu je:

Zobecnění na rovnice vyššího řádu
Hladké polynomy jsou zobecněny s 0 ≤ X ≤ 1 as

kde N určuje pořadí výsledné polynomiální funkce, které je 2N + 1. Prvních sedm hladkých polynomů s 0 ≤ X ≤ 1, jsou

Je možné ukázat, že polynomy s hladkým krokem
ten přechod z 0 na 1, když X přechody od 0 do 1 lze jednoduše namapovat na lichá symetrie polynomy

kde

a

Argument R.N(X) je −1 ≤ X ≤ 1 a připojuje se ke konstantě −1 nalevo a +1 napravo.
Implementace
ve skriptu Javascript:[7]
// Zobecněný hladký krokfunkce generalSmoothStep(N, X) { X = svorka(X, 0, 1); // x musí být rovno nebo mezi 0 a 1 var výsledek = 0; pro (var n = 0; n <= N; ++n) výsledek += pascalTriangle(-N - 1, n) * pascalTriangle(2 * N + 1, N - n) * Matematika.prášek(X, N + n + 1); vrátit se výsledek;}// Vrací binomický koeficient bez explicitního použití faktoriálů,// které nelze použít se zápornými celými číslyfunkce pascalTriangle(A, b) { var výsledek = 1; pro (var i = 0; i < b; ++i) výsledek *= (A - i) / (i + 1); vrátit se výsledek;}funkce svorka(X, spodní limit, horní limit) { -li (X < spodní limit) X = spodní limit; -li (X > horní limit) X = horní limit; vrátit se X;}
Inverzní Smoothstep
Inverzní metoda smoothstep () může být užitečná při provádění určitých operací v počítačové grafice, kdy je třeba její účinek zvrátit nebo kompenzovat. V případě rovnice 3. řádu existuje analytické řešení inverzní funkce, které je:

To vzniká jako inverzní k
, jehož Řada Maclaurin končí v
, význam
a
vyjádřit stejnou funkci. Sériová expanze inverze naopak nekončí.
V GLSL:
plovák inverse_smoothstep(plovák X) { vrátit se 0.5 - hřích(jako v(1.0 - 2.0 * X) / 3.0);}
Reference
externí odkazy