SMOOTHSTEP(3Cg)

NAME
smoothstep - interpolate smoothly between two input values based on a third

SYNOPSIS
  float  smoothstep(float  a, float  b, float  x);
  float1 smoothstep(float1 a, float1 b, float1 x);
  float2 smoothstep(float2 a, float2 b, float2 x);
  float3 smoothstep(float3 a, float3 b, float3 x);
  float4 smoothstep(float4 a, float4 b, float4 x);

  half   smoothstep(half  a, half  b, half  x);
  half1  smoothstep(half1 a, half1 b, half1 x);
  half2  smoothstep(half2 a, half2 b, half2 x);
  half3  smoothstep(half3 a, half3 b, half3 x);
  half4  smoothstep(half4 a, half4 b, half4 x);

  fixed  smoothstep(fixed  a, fixed  b, fixed  x);
  fixed1 smoothstep(fixed1 a, fixed1 b, fixed1 x);
  fixed2 smoothstep(fixed2 a, fixed2 b, fixed2 x);
  fixed3 smoothstep(fixed3 a, fixed3 b, fixed3 x);
  fixed4 smoothstep(fixed4 a, fixed4 b, fixed4 x);

PARAMETERS

a   Scalar or vector minimum reference value(s).

b   Scalar or vector minimum reference value(s).

x   Scalar or vector.

DESCRIPTION
Interpolates smoothly from 0 to 1 based on x compared to a and b.

•   1) Returns 0 if <x < a < b> or <x a > b>>

•   1) Returns 1 if <x < b < a> or <x b > a>>

•   3) Returns a value in the range [0,1] for the domain [a,b].

The slope of "smoothstep(a,b,a)" and "smoothstep(a,b,b)" is zero.

For vectors, the returned vector contains the smooth interpolation of each element of the vector x.

REFERENCE IMPLEMENTATION
smoothstep for float scalars could be implemented this way:

  float smoothstep(float a, float b, float x)
  {
      float t = saturate((x - a)/(b - a));
      return t*t*(3.0 - (2.0*t));
  }

PROFILE SUPPORT
smoothstep is supported in all profiles except fp20.

SEE ALSO
clamp, saturate, step