#include inc_time.glsl #ifndef INC_MAGIC #define INC_MAGIC vec2 magic_f(vec2 f, vec3 b, float i) { return vec2( mix(f.x, randTime(i + 1.), min(1., b.z)), mix(f.y, randTime(i + 2.), min(1., b.z)) ); } vec2 magic_f(float i) { return magic_f(vec2(0.), vec3(0., 0., 1.), i); } vec3 magic_b(vec3 b, float i) { return vec3( mix(b.x, step(.2, randTime(i + 3.)), min(1., b.z)), mix(b.y, step(.5, randTime(i + 4.)), min(1., b.z)), min(1., b.z) ); } vec3 magic_b(float i) { return magic_b(vec3(0., 0., 1.), i); } bool magic_trigger(vec3 b, float i) { return magic_b(b, i).x > 0.; } bool magic_trigger(float i) { return magic_b(i).x > 0.; } float magic(vec2 f, vec3 b, float i) { vec2 mf = magic_f(f, b, i); vec3 mb = magic_b(b, i); return mix(0., mf.x * mix(1. - modTime(mf.y), cosTime(mf.y) * .5 + .5, mb.y), mb.x); } float fmagic(vec2 f, vec3 b, float i) { vec2 mf = magic_f(f, b, i); vec3 mb = magic_b(b, i); return mf.x * mix(1. - modTime(mf.y), cosTime(mf.y) * .5 + .5, mb.y); } float magic(float i) { return magic(vec2(0.), vec3(0., 0., 1.), i); } float magic_reverse(vec2 f, vec3 b, float i) { vec2 mf = magic_f(f, b, i); vec3 mb = magic_b(b, i); return mix(0., mf.x * mix(1. - modTime(mf.y), modTime(mf.y), mb.y), mb.x); } float magic_reverse(float i) { return magic_reverse(vec2(0.), vec3(0., 0., 1.), i); } #endif