pellets.sksl 1.0 KB

123456789101112131415161718192021222324252627282930313233
  1. uniform vec3 iForeground;
  2. float smoothstep(float a, float b, float x) {
  3. float t = clamp((x - a) / (b - a), 0.0, 1.0);
  4. return t * t * (3.0 - 2.0 * t);
  5. }
  6. float A(vec2 p, float a) {
  7. a *= 3.14159;\
  8. vec2 s = vec2(sin(a), cos(a));
  9. p.x = abs(p.x);
  10. return ((s.y * p.x > s.x * p.y) ? length(p - s * .6) :
  11. abs(length(p) - .6)) - .07;
  12. }
  13. mat2 D(float a) {
  14. a *= 3.14159;\
  15. vec2 s = vec2(sin(a), cos(a));
  16. return mat2(s.y, -s.x, s.x, s.y);
  17. }
  18. vec4 main(vec2 fragCoord) {
  19. vec2 r = iResolution.xy, p = (2. * fragCoord - r) / r.y;
  20. float T = iTime * 1.0;
  21. float d = A(p * D(1. - 0.125 * floor(T)), 0.4375); // distance to longest arc
  22. float i;
  23. for (i = 0.0; i < 1.0; i += 0.5)
  24. d = min(A(p * D(mix(-0.5, 0.625, fract(T / 2.0 + i)) - 0.125 * T), 0.0625), d); // distance to shorter arcs ("pellets")
  25. // Ajustement de la largeur de la ligne
  26. float widthReduction = 0.02; // Réduit la largeur de la ligne
  27. return vec4(smoothstep(widthReduction, 0.0, d)) * vec4(iForeground, iAlpha);
  28. }