Smoothstep

Da testwiki.
Vai alla navigazione Vai alla ricerca
Grafico delle funzioni di primo ordine (smoothstep) e secondo ordine (smootherstep) normalizzate nell'intervallo [0,1]

Smoothstep è una famiglia di funzioni sigmoidee usate per l'interpolazione hermitiana e per il clamping in computer grafica,[1][2] motori grafici,[3] e apprendimento automatico.[4]

Le smoothstep sono funzioni di una variabile reale a valori in [0,1], caratterizzate da due parametri a e b rappresentanti gli estremi di un intervallo [a,b] di valori nel dominio. Per ogni x, smoothstep mappa i valori x(a,b) all'intervallo (0,1), mentre tutti i valori xa sono mappati in zero, e tutti i valori xb sono mappati in 1. Una funzione smoothstep normalizzata ha parametri a=0 e b=1. Nel seguito, quando non differentemente specificato, si assume che la funzione smoothstep sia normalizzata.

La funzione smoothstep di ordine n interpola i valori tra 0 e 1 in modo tale che:

  • quando la variabile è all'estremo sinistro dell'intervallo, l'immagine della funzione sia 0;
  • quando la variabile è all'estremo destro dell'intervallo, l'immagine della funzione sia 1;
  • le derivate (fino all'ordine n) della funzione presso gli estremi destro e sinistro abbiano valore zero.

Una funzione polinomiale che soddisfi tali vincoli può essere definita tramite l'interpolazione di Hermite. La funzione smoothstep per antonomasia è quella di primo ordine S1(x), definita da un polinomio di terzo grado:

smoothstep(x)=S1(x)={0,x<0,3x22x3,0x1,1,x>1.

Restringendo il dominio in [0,1], la sua inversa può essere espressa analiticamente come:

S11(x)=12sin(sin1(12x)3).

La funzione smoothstep di ordine n è rappresentata nella porzione centrale da un polinomio di Hermite di grado 2n+1 e ha forma:

Sn(x)={0,x<0,xn+1,k=0n(n+kk)(2n+1nk)(x)k0x1,1,x>1.

La funzione smoothstep di ordine zero S0(x) è equivalente alla funzione identità troncata (nota in alcuni contesti, ad esempio in computer grafica, come funzione clamp):

S0(x)={0,x<0,x,0x1,1,x>1.

La funzione smoothstep di secondo ordine S2(x), anche nota come smootherstep[5][6] e popolarizzata in computer grafica da Ken Perlin,[7][8][9] ha forma:

smootherstep(x)=S2(x)={0,x<0,6x515x4+10x3,0x1,1,x>1.

Le successive funzioni smoothstep fino al sesto ordine sono rappresentate nell'intervallo [0,1] dai seguenti polinomi:

S3(x)=20x7+70x684x5+35x4;S4(x)=70x9315x8+540x7420x6+126x5;S5(x)=252x11+1386x103080x9+3465x81980x7+462x6;S6(x)=924x136006x12+16380x1124024x10+20020x99009x8+1716x7.

Note

Template:Portale