add step() to complement smoothstep()