Wolfram Research

Function Repository Resource:

SmootherStep

Source Notebook

An improved sigmoidal interpolation function

Contributed by: Flip Phillips (FlipPhillips.com)  |  Flip Phillips

ResourceFunction["SmootherStep"][x]

returns a sigmoidal, Hermite interpolation between [0,1] for x on [0,1].

ResourceFunction["SmootherStep"][x,{min,max}]

returns a sigmoidal, Hermite interpolation between [0,1] for x on [min,max].

Details and Options

ResourceFunction["SmootherStep"] is an interpolation function commonly used in computer graphics.
ResourceFunction["SmootherStep"][x] clamps to 0 or 1 for x less than or greater than 0 or 1, respectively.
The original Perlin smoothstep is not second-order continuous at either x=0 or x=1. This creates discontinuities. ResourceFunction["SmootherStep"] solves this problem.

Examples

Basic Examples (2) 

The function is sigmoidal, and inputs less than 0.5 underestimate the input:

In[1]:=
ResourceFunction["SmootherStep"][0.1]
Out[1]=

Values greater than 0.5 do the opposite:

In[2]:=
ResourceFunction["SmootherStep"][0.7]
Out[2]=

Plot the function:

In[3]:=
Plot[ResourceFunction["SmootherStep"][x], {x, -1, 2}]
Out[3]=

Scope (2) 

The single-argument form of SmootherStep passes through the point {0.5,0.5}:

In[4]:=
ResourceFunction["SmootherStep"][0.5]
Out[4]=

Specify an input domain by giving a second argument:

In[5]:=
Plot[ResourceFunction["SmootherStep"][x, {-1, 1}], {x, -2, 2}]
Out[5]=

Applications (2) 

Smoothly interpolate with more gradual changes at the start and stop of the interpolation domain:

In[6]:=
Plot[{x, ResourceFunction["SmoothStep"][x], ResourceFunction["SmootherStep"][x]}, {x, 0, 1}]
Out[6]=

Interpolate colors:

In[7]:=
Table[Hue[x], {x, 0, 1, .1}]
Out[7]=
In[8]:=
Table[Hue[ResourceFunction["SmootherStep"][x]], {x, 0, 1, .1}]
Out[8]=

Properties and Relations (1) 

The resource function SmoothSkip is second-order discontinuous at x=0 and x=1, creating artifacts in some uses. SmootherStep addresses this:

In[9]:=
Plot[ResourceFunction["SmootherStep"]''[x], {x, -1, 2}]
Out[9]=

Neat Examples (1) 

SmootherStep approximates the animation technique of "ease-in / ease-out":

In[10]:=
Animate[Graphics[
  Text["Zoom!", {ResourceFunction["SmootherStep"][x], 0}], PlotRange -> {{-.1, 1.1}, {-.1, .1}}], {x, -1, 2}]
Out[10]=

Resource History

Source Metadata

Related Resources

License Information