simple.sksl 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. uniform vec3 iForeground;
  2. const float pi = 3.14159265358979323846;
  3. float smoothstep(float a, float b, float x) {
  4. float t = clamp((x - a) / (b - a), 0.0, 1.0);
  5. return t * t * (3.0 - 2.0 * t);
  6. }
  7. float atan(float y, float x) {
  8. // Constants for the series expansion
  9. const float pi_2 = pi / 2.0;
  10. // Handle special cases
  11. if (x == 0.0) {
  12. if (y > 0.0) return pi_2;
  13. if (y < 0.0) return -pi_2;
  14. return 0.0; // Undefined, but return 0
  15. }
  16. float abs_y = abs(y) + 1e-10; // Avoid division by zero
  17. // Compute the arctangent of y/x
  18. float angle;
  19. if (abs(x) > abs_y) {
  20. float z = y / x;
  21. float zz = z * z;
  22. angle = z * (0.999866 + zz * (-0.3302995 + zz * (0.180141 + zz * (-0.085133 + zz * 0.020835))));
  23. if (x < 0.0) {
  24. if (y < 0.0) {
  25. angle -= pi;
  26. } else {
  27. angle += pi;
  28. }
  29. }
  30. } else {
  31. float z = x / y;
  32. float zz = z * z;
  33. angle = pi_2 - z * (0.999866 + zz * (-0.3302995 + zz * (0.180141 + zz * (-0.085133 + zz * 0.020835))));
  34. if (y < 0.0) {
  35. angle -= pi;
  36. }
  37. }
  38. return angle;
  39. }
  40. vec4 main(vec2 fragCoord) {
  41. float radius = 0.3;
  42. float lineWidth = 1.0; // en pixels
  43. float glowSize = 1.0; // en pixels
  44. float pixelSize = 1.0 / min(iResolution.x, iResolution.y);
  45. lineWidth *= pixelSize;
  46. glowSize *= pixelSize;
  47. glowSize *= 2.0;
  48. vec2 uv = (fragCoord.xy / iResolution.xy) - 0.5;
  49. uv.x *= iResolution.x / iResolution.y;
  50. float len = length(uv);
  51. float angle = atan(uv.y, uv.x);
  52. // Garde le fallOff pour l'animation mais n'affecte pas la largeur de la ligne
  53. float fallOff = fract(-0.5 * (angle / pi) - iTime * 0.5);
  54. // Garde une largeur de ligne constante
  55. float color = smoothstep(pixelSize, 0.0, abs(radius - len) - lineWidth) * fallOff;
  56. color += smoothstep(glowSize, 0.0, abs(radius - len) - lineWidth) * fallOff * 0.5;
  57. return vec4(color) * vec4(iForeground, iAlpha);
  58. }