Cg 3.1 Toolkit Documentation Cg / Standard Library / smoothstep

## 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.