utils: added exponential shaping functions from flong

This commit is contained in:
2017-06-05 19:52:05 -04:00
parent 669dd314fa
commit cb46e2a602

View File

@@ -92,3 +92,47 @@ float quad_through_point(float x, vec2 ab) {
return y; return y;
} }
// exponential shaping
float exp_easing(float x, float a) {
float e = 0.00001;
a = clamp(a, 0.+e, 1.-e);
if (a < 0.5) {
a = 2.0*(a);
return pow(x, a);
}
a = 2.*(a-.5);
return pow(x, 1./(1.-a));
}
float double_exp_seat(float x, float a) {
float e = 0.00001;
a = clamp(a, .0+e, 1.-e);
if (x<=0.5) {
return pow(2.*x, 1.-a)/2.0;
}
return 1. - pow(2.*(1.-x), 1.-a)/2.;
}
float double_exp_sigmoid(float x, float a) {
float e = 0.00001;
a = 1.-clamp(a, .0+e, 1.-e);
if (x<=0.5){
return pow(2.0*x, 1.0/a)/2.0;
}
return 1.0 - (pow(2.0*(1.0-x), 1.0/a))/2.0;
}
float normalized_log_sigmoid(float x, float a) {
float e = 0.0001;
a = 1./(1.-clamp(a, 0.+e, 1.-e)) - 1.;
float b = 1.0 / (1.0 + exp(a));
float c = 1.0 / (1.0 + exp(0.-a));
a = 1. / (1. + exp(0. -((x-.5)*a*2.)));
return (a-b)/(c-b);
}