cells.sksl 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. vec3 blendOverlay(vec3 base, vec3 blend) {
  2. return vec3(
  3. base.r < 0.5 ? (2.0 * base.r * blend.r) : (1.0 - 2.0 * (1.0 - base.r) * (1.0 - blend.r)),
  4. base.g < 0.5 ? (2.0 * base.g * blend.g) : (1.0 - 2.0 * (1.0 - base.g) * (1.0 - blend.g)),
  5. base.b < 0.5 ? (2.0 * base.b * blend.b) : (1.0 - 2.0 * (1.0 - base.b) * (1.0 - blend.b))
  6. );
  7. }
  8. vec2 ran(vec2 uv) {
  9. uv *= vec2(dot(uv, vec2(127.1, 311.7)), dot(uv, vec2(227.1, 521.7)));
  10. return 1.0 - fract(tan(cos(uv) * 123.6) * 3533.3) * fract(tan(cos(uv) * 123.6) * 3533.3);
  11. }
  12. vec2 pt(vec2 id) {
  13. return sin(iTime * 0.5 * (ran(id + .5) - 0.5) + ran(id - 20.1) * 8.0) * 0.5;
  14. }
  15. vec4 main(vec2 fragCoord)
  16. {
  17. float SIZE = 10.;
  18. vec2 uv = (fragCoord - .5 * iResolution.xy) / iResolution.x;
  19. vec2 off = iTime / vec2(200., 120.);
  20. uv += off;
  21. uv *= SIZE;
  22. vec2 gv = fract(uv) - .5;
  23. vec2 id = floor(uv);
  24. float mindist = 1e9;
  25. vec2 vorv = vec2(0);
  26. for (float i = -1.;i <= 1.; i++) {
  27. for (float j = -1.;j <= 1.; j++) {
  28. vec2 offv = vec2(i, j);
  29. float dist = length(gv + pt(id + offv) - offv);
  30. if (dist < mindist) {
  31. mindist = dist;
  32. vorv = (id + pt(id + offv) + offv) / SIZE - off;
  33. }
  34. }
  35. }
  36. vec3 col = mix(iPrimary, iAccent, clamp(vorv.x * 2.2 + vorv.y, -1., 1.) * 0.5 + 0.5);
  37. vec3 comp = blendOverlay(iBase, col);
  38. return vec4(comp, iAlpha);
  39. }