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
|