Smoothstep

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, motori grafici, e apprendimento automatico.

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 x≤a sono mappati in zero, e tutti i valori x≥b 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:

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,3x2−2x3,0≤x≤1,1,x>1.

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

S1−1(x)=12−sin⁡(sin−1(1−2x)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+1n−k)(−x)k0≤x≤1,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,0≤x≤1,1,x>1.

La funzione smoothstep di secondo ordine S2(x), anche nota come smootherstep e popolarizzata in computer grafica da Ken Perlin, ha forma:

smootherstep⁡(x)=S2(x)={0,x<0,6x5−15x4+10x3,0≤x≤1,1,x>1.

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

S3(x)=−20x7+70x6−84x5+35x4;S4(x)=70x9−315x8+540x7−420x6+126x5;S5(x)=−252x11+1386x10−3080x9+3465x8−1980x7+462x6;S6(x)=924x13−6006x12+16380x11−24024x10+20020x9−9009x8+1716x7.

Note

  1. ↑ Smoothstep at Microsoft Developer Network.
  2. ↑ GLSL Language Specification, Version 1.40.
  3. ↑ Unity game engine SmoothStep documentation.
  4. ↑ Hussein Hazimeh, Natalia Ponomareva, Petros Mol, Zhenyu Tan e Rahul Mazumder, The Tree Ensemble Layer: Differentiability meets Conditional Computation (PDF), International Conference on Machine Learning, PMLR, 2020. URL consultato il 30 gennaio 2022 (archiviato dall'url originale il 2 gennaio 2021).
  5. ↑ tfp.math.smootherstep | Tensorflow, su tensorflow.org (archiviato dall'url originale il 2 novembre 2021).
  6. ↑ SmootherStep | Wolfram Function Repository, su resources.wolframcloud.com (archiviato dall'url originale il 18 febbraio 2021).
  7. ↑ Ken Perlin, An Image Synthesizer, ACM SIGGRAPH, vol. 24, n. 3, 1985.
  8. ↑ Ken Perlin, Improving noise, ACM transactions on graphics, vol. 21, n. 3, luglio 2002, pp. 681-682.
  9. ↑ Ken Perlin, Texturing and Modeling, Third Edition: A Procedural Approach.