utils: added exponential shaping functions from flong
This commit is contained in:
@@ -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);
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user