// Seung Joon Choi // http://epicure.graffity.net // epicure@hanmail.net // 2005.10.14. float LOG05 = -0.693137180; float step(float a, float x) { return x >= a ? 1 : 0; } float smoothstep(float a, float b, float x) { if(x < a) return 0; if(x >= b) return 1; x = (x - a) / (b - a); return x*x*(3-2*x); } float pulse(float a, float b, float fuzz, float x) { return smoothstep(a, a + fuzz, x) - smoothstep(b - fuzz, b, x); } float clamp(float x, float a, float b) { return (x < a ? a : (x > b ? b : x)); } float boxstep(float a, float b, float x) { return clamp((x - a) / (b - a), 0, 1); } float mod(float a, float b) { int n = (int)(a/b); a -= n * b; if(a < 0) a += b; return a; } float bias(float b, float x) { return pow(x, (float)Math.log(b)/LOG05); } float gain(float g, float x) { if (x < 0.5) return bias(1-g, 2*x)/2; else return 1 - bias(1-g, 2 - 2*x)/2; } float gammacorrect(float gamma, float x) { return pow(x, 1 / gamma); } float repeat(float x, float freq) { return mod(x * freq, 1.0); }