Guest User

Untitled

a guest
Dec 11th, 2018
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.47 KB | None | 0 0
  1. #version 410 core
  2.  
  3. uniform float fGlobalTime; // in seconds
  4. uniform vec2 v2Resolution; // viewport resolution (in pixels)
  5.  
  6. layout(location = 0) out vec4 out_color; // out_color must be written in order to see anything
  7.  
  8. #define PI 3.141592
  9. #define TAU (2*PI)
  10. #define PHI (.5*PI)
  11.  
  12. float BPM = 110; // BPM of music your DJ is playing
  13. float NB_CHANNEL = 3;
  14. float t = fGlobalTime * BPM / (60. * NB_CHANNEL);
  15.  
  16. // Ease time into a nice S Curve
  17. // ease(int) == int
  18. float ease(float t)
  19. {
  20. return floor(t) + sin(fract(t) * PI - PHI) * .5 + .5;
  21. }
  22.  
  23. // Transition form floor(t) to floor(t+1) with an overshoot of "b" magnitude
  24. // kick(int) == int
  25. float kick(float t, float b)
  26. {
  27. float ft = fract(t);
  28. return floor(t) + ft + sin(ft * PI) * b;
  29. }
  30.  
  31. // transition from floor(t) to floor(t+1)
  32. // create "n" channels who will do their transition in sequence
  33. // ("c" is the selected channel)
  34. // multiplex(int,...) == int
  35. float multiplex(float t,float c, float n)
  36. {
  37. return floor(t) + clamp(fract(t) * n - c,0,1);
  38. }
  39.  
  40. mat2 rot(float a)
  41. {
  42. float ca = cos(a);
  43. float sa = sin(a);
  44. return mat2(sa,-ca,ca,sa);
  45. }
  46.  
  47. float map(vec3 p)
  48. {
  49. float dist = 1000.;
  50.  
  51.  
  52. // Using half channels allows you to have a nice pause between steps
  53. float t1 = ease(multiplex(t,0,NB_CHANNEL * 2)) * PHI / 2.;
  54. float t2 = ease(multiplex(t,2,NB_CHANNEL * 2)) * PHI / 2.;
  55. float t3 = kick((multiplex(t,4,NB_CHANNEL * 2)), .75) * PHI / 2.;
  56.  
  57. p.xy *= rot(t1);
  58. p.xz *= rot(t2);
  59. p.yz *= rot(t3);
  60.  
  61. p = abs(p);
  62. float c1 = max(p.x,max(p.y,p.z)) - 1.;
  63. dist = min(dist, c1);
  64.  
  65. return dist;
  66. }
  67.  
  68. void main(void)
  69. {
  70. vec2 uv = vec2(gl_FragCoord.x / v2Resolution.x, gl_FragCoord.y / v2Resolution.y);
  71. uv -= 0.5;
  72. uv /= vec2(v2Resolution.y / v2Resolution.x, 1);
  73.  
  74. vec3 cam = vec3(0.,0.,-10.);
  75. vec3 rd = normalize(vec3(uv+vec2(-.4,.2),1));
  76. vec3 cp = cam;
  77.  
  78. float st = 0.;
  79. float cd = 0.;
  80.  
  81. for(;st < 1.; st += 1./128.)
  82. {
  83. cd = map(cp);
  84. if(cd < .01) break;
  85. cp += rd * cd * .5;
  86. }
  87.  
  88. uv *= 10.;
  89. float r = ease(multiplex(uv.x, 0, NB_CHANNEL));
  90. float g = ease(multiplex(uv.x, 1, NB_CHANNEL));
  91. float b = kick(multiplex(uv.x, 2, NB_CHANNEL), .75);
  92.  
  93. out_color = vec4(
  94. step(distance(r,uv.y),.02),
  95. step(distance(g,uv.y),.02),
  96. step(distance(b,uv.y),.02),
  97. 1.
  98. );
  99.  
  100. float f = step(distance(uv.x,uv.y), .02);
  101. if(f > .5)
  102. {
  103. out_color = vec4(1.);
  104. }
  105. vec2 grid = fract(vec2(uv.x * 3, uv.y));
  106. if(grid.x < .05)
  107. out_color += .05;
  108. if(fract(uv.x) < .025)
  109. out_color += .05;
  110.  
  111. if(cd < .01)
  112. out_color = vec4(1 - st);
  113.  
  114. }
Add Comment
Please, Sign In to add comment