Un gráfico de las funciones smoothstep( x ) y smootherstep( x ), usando 0 como borde izquierdo y 1 como borde derecho. Smoothstep es una familia de funciones de interpolación y ...
Hispanopedia WikiContenido en espanolLectura gratuita
Un gráfico de las funciones smoothstep( x ) y smootherstep( x ), usando 0 como borde izquierdo y 1 como borde derecho.
La función depende de tres parámetros: la entrada x , el borde izquierdo y el borde derecho, asumiendo que el borde izquierdo es menor que el derecho. La función recibe un número real x como argumento. Devuelve 0 si x es menor o igual que el borde izquierdo y 1 si x es mayor o igual que el borde derecho. En caso contrario, interpola suavemente mediante la interpolación de Hermite y devuelve un valor entre 0 y 1. La pendiente de la función smoothstep es cero en ambos bordes. Esto resulta útil para crear una secuencia de transiciones utilizando smoothstep para interpolar cada segmento, como alternativa a técnicas de interpolación más sofisticadas o costosas.
La curva sigmoide característica en forma de S se obtiene conSolo para enteros n ≥ 1. El orden del polinomio en el paso suave general es 2 n + 1. Con n = 1, las pendientes o primeras derivadas del paso suave son iguales a cero en los bordes izquierdo y derecho ( x = 0 y x = 1), donde la curva se une a los niveles constantes o saturados . Con enteros n mayores , las segundas y superiores derivadas son cero en los bordes, lo que hace que las funciones polinómicas sean lo más planas posible y la unión a los valores límite de 0 o 1 sea más fluida.
Variaciones
Ken Perlin sugirió [ 6 ] una versión mejorada de la función smoothstep de primer orden comúnmente utilizada, equivalente al segundo orden de su forma general. Tiene derivadas de primer y segundo orden nulas en x = 0 y x = 1:
Aplicando los valores deseados para la función en ambos extremos:
Aplicando los valores deseados para la primera derivada de la función en ambos extremos:
Aplicando los valores deseados para la segunda derivada de la función en ambos extremos:
Al resolver el sistema de 6 incógnitas formado por las últimas 6 ecuaciones, se obtienen los valores de los coeficientes del polinomio:
Esto da como resultado la función "smootherstep" de quinto orden :
ecuación de séptimo orden
Aplicando técnicas similares, se obtiene la ecuación de séptimo orden:
Generalización a ecuaciones de orden superior
Los polinomios Smoothstep se generalizan, con 0 ≤ x ≤ 1 como
donde N determina el orden de la función polinómica resultante, que es 2 N + 1. Los primeros siete polinomios de paso suave, con 0 ≤ x ≤ 1, son
El derivado dees
Se puede demostrar que los polinomios de paso suaveque la transición de 0 a 1 cuando x transiciona de 0 a 1 se puede mapear simplemente a polinomios de simetría impar
dónde
y
El argumento de R N ( x ) es −1 ≤ x ≤ 1 y se agrega a la constante −1 a la izquierda y +1 a la derecha.
// Función de paso suave generalizada generalSmoothStep ( N , x ) { x = clamp ( x , 0 , 1 ); // x debe ser igual o estar entre 0 y 1 var result = 0 ; for ( var n = 0 ; n <= N ; ++ n ) result += pascalTriangle ( - N - 1 , n ) * pascalTriangle ( 2 * N + 1 , N - n ) * Math . pow ( x , N + n + 1 ); return result ; }// Devuelve el coeficiente binomial sin el uso explícito de factoriales, // que no se pueden usar con enteros negativos. function pascalTriangle ( a , b ) { var result = 1 ; for ( var i = 0 ; i < b ; ++ i ) result *= ( a - i ) / ( i + 1 ); return result ; }función clamp ( x , límite inferior , límite superior ) { si ( x < límite inferior ) x = límite inferior ; si ( x > límite superior ) x = límite superior ; retornar x ; }
Propiedades del dominio de frecuencia
Nuestra función smoothstep original se puede reescribir de la siguiente manera, en términos de la función escalón de Heaviside :
Esto tiene una atenuación asintótica de 60 dB/década (proveniente de latérmino), en contraposición a los 20 dB/década de un paso de Heavyside, o a los 40 dB/década de una interpolación lineal () - mostrando que los órdenes superiores de continuidad dan como resultado un espectro de frecuencia más localizado. Esto puede ser importante para sistemas discretos, donde estar limitado en banda es importante para reducir el aliasing , según el teorema de muestreo de Nyquist-Shannon .
Se puede realizar un análisis similar para cada uno.donde la atenuación es de 20(2 + N) dB/década.
Paso suave inverso
La inversa de smoothstep() puede ser útil al realizar ciertas operaciones en gráficos por computadora cuando su efecto necesita ser revertido o compensado. En el caso de la ecuación de tercer orden, existe una solución analítica para la inversa, que es:
Esto surge debido a la funciónes equivalente a la funciónen el rangoPor otro lado, la inversa no tiene un equivalente polinómico exacto.
En GLSL:
float inverse_smoothstep ( float x ) { return 0.5 - sin ( asin ( 1.0 - 2.0 * x ) / 3.0 ); }
↑ Especificación del lenguaje GLSL, versión 1.40 .
↑ Documentación de SmoothStep, el motor de juegos de Unity .
↑ Hazimeh, Hussein; Ponomareva, Natalia; Mol, Petros; Tan, Zhenyu; Mazumder, Rahul (2020). La capa de conjunto de árboles: la diferenciabilidad se encuentra con la computación condicional (PDF) . Conferencia internacional sobre aprendizaje automático. PMLR.
↑ Natalya Tatarchuk (2003). "Técnicas avanzadas de sombreado en tiempo real" . AMD . pág. 94. Archivado del original el 30 de mayo de 2021. Consultado el 16 de abril de 2022 .
↑ Texturizado y modelado, tercera edición: un enfoque procedimental .