From cb46e2a6024688456fff0f76601e88502b404438 Mon Sep 17 00:00:00 2001 From: hellerve Date: Mon, 5 Jun 2017 19:52:05 -0400 Subject: [PATCH] utils: added exponential shaping functions from flong --- utilities/flong.glsl | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/utilities/flong.glsl b/utilities/flong.glsl index 386af4b..935ef27 100644 --- a/utilities/flong.glsl +++ b/utilities/flong.glsl @@ -92,3 +92,47 @@ float quad_through_point(float x, vec2 ab) { 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); +}