shaders-oneshot 0.0.81-shared.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (129) hide show
  1. package/LICENSE +201 -0
  2. package/NOTICE +5 -0
  3. package/README.md +7 -0
  4. package/dist/empty-pixel.d.ts +1 -0
  5. package/dist/empty-pixel.js +10 -0
  6. package/dist/empty-pixel.js.map +7 -0
  7. package/dist/get-shader-color-from-string.d.ts +3 -0
  8. package/dist/get-shader-color-from-string.js +101 -0
  9. package/dist/get-shader-color-from-string.js.map +7 -0
  10. package/dist/get-shader-color-from-string.test.d.ts +1 -0
  11. package/dist/get-shader-color-from-string.test.js +69 -0
  12. package/dist/get-shader-noise-texture.d.ts +1 -0
  13. package/dist/get-shader-noise-texture.js +18 -0
  14. package/dist/get-shader-noise-texture.js.map +7 -0
  15. package/dist/index.d.ts +68 -0
  16. package/dist/index.js +194 -0
  17. package/dist/index.js.map +7 -0
  18. package/dist/shader-color-spaces.d.ts +6 -0
  19. package/dist/shader-color-spaces.js +96 -0
  20. package/dist/shader-color-spaces.js.map +7 -0
  21. package/dist/shader-mount.d.ts +199 -0
  22. package/dist/shader-mount.js +735 -0
  23. package/dist/shader-mount.js.map +7 -0
  24. package/dist/shader-sizing.d.ts +30 -0
  25. package/dist/shader-sizing.js +38 -0
  26. package/dist/shader-sizing.js.map +7 -0
  27. package/dist/shader-utils.d.ts +10 -0
  28. package/dist/shader-utils.js +131 -0
  29. package/dist/shader-utils.js.map +7 -0
  30. package/dist/shaders/color-panels.d.ts +70 -0
  31. package/dist/shaders/color-panels.js +224 -0
  32. package/dist/shaders/color-panels.js.map +7 -0
  33. package/dist/shaders/dithering.d.ts +62 -0
  34. package/dist/shaders/dithering.js +271 -0
  35. package/dist/shaders/dithering.js.map +7 -0
  36. package/dist/shaders/dot-grid.d.ts +65 -0
  37. package/dist/shaders/dot-grid.js +110 -0
  38. package/dist/shaders/dot-grid.js.map +7 -0
  39. package/dist/shaders/dot-orbit.d.ts +57 -0
  40. package/dist/shaders/dot-orbit.js +123 -0
  41. package/dist/shaders/dot-orbit.js.map +7 -0
  42. package/dist/shaders/fluted-glass.d.ts +112 -0
  43. package/dist/shaders/fluted-glass.js +361 -0
  44. package/dist/shaders/fluted-glass.js.map +7 -0
  45. package/dist/shaders/gem-smoke.d.ts +96 -0
  46. package/dist/shaders/gem-smoke.js +573 -0
  47. package/dist/shaders/gem-smoke.js.map +7 -0
  48. package/dist/shaders/god-rays.d.ts +67 -0
  49. package/dist/shaders/god-rays.js +133 -0
  50. package/dist/shaders/god-rays.js.map +7 -0
  51. package/dist/shaders/grain-gradient.d.ts +80 -0
  52. package/dist/shaders/grain-gradient.js +301 -0
  53. package/dist/shaders/grain-gradient.js.map +7 -0
  54. package/dist/shaders/halftone-cmyk.d.ts +104 -0
  55. package/dist/shaders/halftone-cmyk.js +295 -0
  56. package/dist/shaders/halftone-cmyk.js.map +7 -0
  57. package/dist/shaders/halftone-dots.d.ts +80 -0
  58. package/dist/shaders/halftone-dots.js +321 -0
  59. package/dist/shaders/halftone-dots.js.map +7 -0
  60. package/dist/shaders/heatmap.d.ts +66 -0
  61. package/dist/shaders/heatmap.js +384 -0
  62. package/dist/shaders/heatmap.js.map +7 -0
  63. package/dist/shaders/image-dithering.d.ts +64 -0
  64. package/dist/shaders/image-dithering.js +199 -0
  65. package/dist/shaders/image-dithering.js.map +7 -0
  66. package/dist/shaders/lens-distortion.d.ts +97 -0
  67. package/dist/shaders/lens-distortion.js +276 -0
  68. package/dist/shaders/lens-distortion.js.map +7 -0
  69. package/dist/shaders/liquid-metal.d.ts +89 -0
  70. package/dist/shaders/liquid-metal.js +633 -0
  71. package/dist/shaders/liquid-metal.js.map +7 -0
  72. package/dist/shaders/mesh-gradient.d.ts +52 -0
  73. package/dist/shaders/mesh-gradient.js +131 -0
  74. package/dist/shaders/mesh-gradient.js.map +7 -0
  75. package/dist/shaders/metaballs.d.ts +51 -0
  76. package/dist/shaders/metaballs.js +111 -0
  77. package/dist/shaders/metaballs.js.map +7 -0
  78. package/dist/shaders/neuro-noise.d.ts +47 -0
  79. package/dist/shaders/neuro-noise.js +77 -0
  80. package/dist/shaders/neuro-noise.js.map +7 -0
  81. package/dist/shaders/paper-texture.d.ts +109 -0
  82. package/dist/shaders/paper-texture.js +527 -0
  83. package/dist/shaders/paper-texture.js.map +7 -0
  84. package/dist/shaders/perlin-noise.d.ts +52 -0
  85. package/dist/shaders/perlin-noise.js +167 -0
  86. package/dist/shaders/perlin-noise.js.map +7 -0
  87. package/dist/shaders/pulsing-border.d.ts +98 -0
  88. package/dist/shaders/pulsing-border.js +239 -0
  89. package/dist/shaders/pulsing-border.js.map +7 -0
  90. package/dist/shaders/simplex-noise.d.ts +45 -0
  91. package/dist/shaders/simplex-noise.js +92 -0
  92. package/dist/shaders/simplex-noise.js.map +7 -0
  93. package/dist/shaders/smoke-ring.d.ts +61 -0
  94. package/dist/shaders/smoke-ring.js +133 -0
  95. package/dist/shaders/smoke-ring.js.map +7 -0
  96. package/dist/shaders/spiral.d.ts +61 -0
  97. package/dist/shaders/spiral.js +83 -0
  98. package/dist/shaders/spiral.js.map +7 -0
  99. package/dist/shaders/static-mesh-gradient.d.ts +63 -0
  100. package/dist/shaders/static-mesh-gradient.js +131 -0
  101. package/dist/shaders/static-mesh-gradient.js.map +7 -0
  102. package/dist/shaders/static-radial-gradient.d.ts +72 -0
  103. package/dist/shaders/static-radial-gradient.js +188 -0
  104. package/dist/shaders/static-radial-gradient.js.map +7 -0
  105. package/dist/shaders/swirl.d.ts +63 -0
  106. package/dist/shaders/swirl.js +104 -0
  107. package/dist/shaders/swirl.js.map +7 -0
  108. package/dist/shaders/voronoi.d.ts +65 -0
  109. package/dist/shaders/voronoi.js +139 -0
  110. package/dist/shaders/voronoi.js.map +7 -0
  111. package/dist/shaders/warp.d.ts +70 -0
  112. package/dist/shaders/warp.js +130 -0
  113. package/dist/shaders/warp.js.map +7 -0
  114. package/dist/shaders/water.d.ts +59 -0
  115. package/dist/shaders/water.js +122 -0
  116. package/dist/shaders/water.js.map +7 -0
  117. package/dist/shaders/waves.d.ts +53 -0
  118. package/dist/shaders/waves.js +66 -0
  119. package/dist/shaders/waves.js.map +7 -0
  120. package/dist/shared-webgl-renderer.d.ts +63 -0
  121. package/dist/shared-webgl-renderer.js +262 -0
  122. package/dist/shared-webgl-renderer.js.map +7 -0
  123. package/dist/types.d.ts +3 -0
  124. package/dist/types.js +6 -0
  125. package/dist/types.js.map +7 -0
  126. package/dist/vertex-shader.d.ts +2 -0
  127. package/dist/vertex-shader.js +160 -0
  128. package/dist/vertex-shader.js.map +7 -0
  129. package/package.json +29 -0
@@ -0,0 +1,110 @@
1
+ /* * * * * * * * * * * * * * * * * * * * * * * * * * * *
2
+ * Paper Shaders *
3
+ * https://github.com/paper-design/shaders *
4
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * */
5
+
6
+ import {} from "../shader-sizing.js";
7
+ import { declarePI, simplexNoise } from "../shader-utils.js";
8
+ const dotGridFragmentShader = `#version 300 es
9
+ precision mediump float;
10
+
11
+ uniform vec4 u_colorBack;
12
+ uniform vec4 u_colorFill;
13
+ uniform vec4 u_colorStroke;
14
+ uniform float u_dotSize;
15
+ uniform float u_gapX;
16
+ uniform float u_gapY;
17
+ uniform float u_strokeWidth;
18
+ uniform float u_sizeRange;
19
+ uniform float u_opacityRange;
20
+ uniform float u_shape;
21
+
22
+ in vec2 v_patternUV;
23
+
24
+ out vec4 fragColor;
25
+
26
+ ${declarePI}
27
+ ${simplexNoise}
28
+
29
+ float polygon(vec2 p, float N, float rot) {
30
+ float a = atan(p.x, p.y) + rot;
31
+ float r = TWO_PI / float(N);
32
+
33
+ return cos(floor(.5 + a / r) * r - a) * length(p);
34
+ }
35
+
36
+ void main() {
37
+
38
+ // x100 is a default multiplier between vertex and fragmant shaders
39
+ // we use it to avoid UV presision issues
40
+ vec2 shape_uv = 100. * v_patternUV;
41
+
42
+ vec2 gap = max(abs(vec2(u_gapX, u_gapY)), vec2(1e-6));
43
+ vec2 grid = fract(shape_uv / gap) + 1e-4;
44
+ vec2 grid_idx = floor(shape_uv / gap);
45
+ float sizeRandomizer = .5 + .8 * snoise(2. * vec2(grid_idx.x * 100., grid_idx.y));
46
+ float opacity_randomizer = .5 + .7 * snoise(2. * vec2(grid_idx.y, grid_idx.x));
47
+
48
+ vec2 center = vec2(0.5) - 1e-3;
49
+ vec2 p = (grid - center) * vec2(u_gapX, u_gapY);
50
+
51
+ float baseSize = u_dotSize * (1. - sizeRandomizer * u_sizeRange);
52
+ float strokeWidth = u_strokeWidth * (1. - sizeRandomizer * u_sizeRange);
53
+
54
+ float dist;
55
+ if (u_shape < 0.5) {
56
+ // Circle
57
+ dist = length(p);
58
+ } else if (u_shape < 1.5) {
59
+ // Diamond
60
+ strokeWidth *= 1.5;
61
+ dist = polygon(1.5 * p, 4., .25 * PI);
62
+ } else if (u_shape < 2.5) {
63
+ // Square
64
+ dist = polygon(1.03 * p, 4., 1e-3);
65
+ } else {
66
+ // Triangle
67
+ strokeWidth *= 1.5;
68
+ p = p * 2. - 1.;
69
+ p *= .9;
70
+ p.y = 1. - p.y;
71
+ p.y -= .75 * baseSize;
72
+ dist = polygon(p, 3., 1e-3);
73
+ }
74
+
75
+ float edgeWidth = fwidth(dist);
76
+ float shapeOuter = 1. - smoothstep(baseSize - edgeWidth, baseSize + edgeWidth, dist - strokeWidth);
77
+ float shapeInner = 1. - smoothstep(baseSize - edgeWidth, baseSize + edgeWidth, dist);
78
+ float stroke = shapeOuter - shapeInner;
79
+
80
+ float dotOpacity = max(0., 1. - opacity_randomizer * u_opacityRange);
81
+ stroke *= dotOpacity;
82
+ shapeInner *= dotOpacity;
83
+
84
+ stroke *= u_colorStroke.a;
85
+ shapeInner *= u_colorFill.a;
86
+
87
+ vec3 color = vec3(0.);
88
+ color += stroke * u_colorStroke.rgb;
89
+ color += shapeInner * u_colorFill.rgb;
90
+ color += (1. - shapeInner - stroke) * u_colorBack.rgb * u_colorBack.a;
91
+
92
+ float opacity = 0.;
93
+ opacity += stroke;
94
+ opacity += shapeInner;
95
+ opacity += (1. - opacity) * u_colorBack.a;
96
+
97
+ fragColor = vec4(color, opacity);
98
+ }
99
+ `;
100
+ const DotGridShapes = {
101
+ circle: 0,
102
+ diamond: 1,
103
+ square: 2,
104
+ triangle: 3
105
+ };
106
+ export {
107
+ DotGridShapes,
108
+ dotGridFragmentShader
109
+ };
110
+ //# sourceMappingURL=dot-grid.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/shaders/dot-grid.ts"],
4
+ "sourcesContent": ["import { type ShaderSizingParams, type ShaderSizingUniforms } from '../shader-sizing.js';\r\nimport { declarePI, simplexNoise } from '../shader-utils.js';\r\n\r\n/**\r\n * Static grid pattern made of circles, diamonds, squares or triangles.\r\n *\r\n * Fragment shader uniforms:\r\n * - u_colorBack (vec4): Background color in RGBA\r\n * - u_colorFill (vec4): Shape fill color in RGBA\r\n * - u_colorStroke (vec4): Shape stroke color in RGBA, needs strokeWidth > 0\r\n * - u_dotSize (float): Base size of each shape in pixels (1 to 100)\r\n * - u_gapX (float): Pattern horizontal spacing in pixels (2 to 500)\r\n * - u_gapY (float): Pattern vertical spacing in pixels (2 to 500)\r\n * - u_strokeWidth (float): Outline stroke width in pixels, needs colorStroke alpha > 0 (0 to 50)\r\n * - u_sizeRange (float): Random variation in shape size, 0 = uniform, higher = random up to base size (0 to 1)\r\n * - u_opacityRange (float): Random variation in shape opacity, 0 = opaque, higher = semi-transparent (0 to 1)\r\n * - u_shape (float): Shape type (0 = circle, 1 = diamond, 2 = square, 3 = triangle)\r\n *\r\n * Vertex shader outputs (used in fragment shader):\r\n * - v_patternUV (vec2): UV coordinates in pixels (scaled by 0.01 for precision), with scale, rotation and offset applied\r\n *\r\n * Vertex shader uniforms:\r\n * - u_resolution (vec2): Canvas resolution in pixels\r\n * - u_pixelRatio (float): Device pixel ratio\r\n * - u_originX (float): Reference point for positioning world width in the canvas (0 to 1)\r\n * - u_originY (float): Reference point for positioning world height in the canvas (0 to 1)\r\n * - u_worldWidth (float): Virtual width of the graphic before it's scaled to fit the canvas\r\n * - u_worldHeight (float): Virtual height of the graphic before it's scaled to fit the canvas\r\n * - u_fit (float): How to fit the rendered shader into the canvas dimensions (0 = none, 1 = contain, 2 = cover)\r\n * - u_scale (float): Overall zoom level of the graphics (0.01 to 4)\r\n * - u_rotation (float): Overall rotation angle of the graphics in degrees (0 to 360)\r\n * - u_offsetX (float): Horizontal offset of the graphics center (-1 to 1)\r\n * - u_offsetY (float): Vertical offset of the graphics center (-1 to 1)\r\n *\r\n */\r\n\r\n// language=GLSL\r\nexport const dotGridFragmentShader: string = `#version 300 es\r\nprecision mediump float;\r\n\r\nuniform vec4 u_colorBack;\r\nuniform vec4 u_colorFill;\r\nuniform vec4 u_colorStroke;\r\nuniform float u_dotSize;\r\nuniform float u_gapX;\r\nuniform float u_gapY;\r\nuniform float u_strokeWidth;\r\nuniform float u_sizeRange;\r\nuniform float u_opacityRange;\r\nuniform float u_shape;\r\n\r\nin vec2 v_patternUV;\r\n\r\nout vec4 fragColor;\r\n\r\n${ declarePI }\r\n${ simplexNoise }\r\n\r\nfloat polygon(vec2 p, float N, float rot) {\r\n float a = atan(p.x, p.y) + rot;\r\n float r = TWO_PI / float(N);\r\n\r\n return cos(floor(.5 + a / r) * r - a) * length(p);\r\n}\r\n\r\nvoid main() {\r\n\r\n // x100 is a default multiplier between vertex and fragmant shaders\r\n // we use it to avoid UV presision issues\r\n vec2 shape_uv = 100. * v_patternUV;\r\n\r\n vec2 gap = max(abs(vec2(u_gapX, u_gapY)), vec2(1e-6));\r\n vec2 grid = fract(shape_uv / gap) + 1e-4;\r\n vec2 grid_idx = floor(shape_uv / gap);\r\n float sizeRandomizer = .5 + .8 * snoise(2. * vec2(grid_idx.x * 100., grid_idx.y));\r\n float opacity_randomizer = .5 + .7 * snoise(2. * vec2(grid_idx.y, grid_idx.x));\r\n\r\n vec2 center = vec2(0.5) - 1e-3;\r\n vec2 p = (grid - center) * vec2(u_gapX, u_gapY);\r\n\r\n float baseSize = u_dotSize * (1. - sizeRandomizer * u_sizeRange);\r\n float strokeWidth = u_strokeWidth * (1. - sizeRandomizer * u_sizeRange);\r\n\r\n float dist;\r\n if (u_shape < 0.5) {\r\n // Circle\r\n dist = length(p);\r\n } else if (u_shape < 1.5) {\r\n // Diamond\r\n strokeWidth *= 1.5;\r\n dist = polygon(1.5 * p, 4., .25 * PI);\r\n } else if (u_shape < 2.5) {\r\n // Square\r\n dist = polygon(1.03 * p, 4., 1e-3);\r\n } else {\r\n // Triangle\r\n strokeWidth *= 1.5;\r\n p = p * 2. - 1.;\r\n p *= .9;\r\n p.y = 1. - p.y;\r\n p.y -= .75 * baseSize;\r\n dist = polygon(p, 3., 1e-3);\r\n }\r\n\r\n float edgeWidth = fwidth(dist);\r\n float shapeOuter = 1. - smoothstep(baseSize - edgeWidth, baseSize + edgeWidth, dist - strokeWidth);\r\n float shapeInner = 1. - smoothstep(baseSize - edgeWidth, baseSize + edgeWidth, dist);\r\n float stroke = shapeOuter - shapeInner;\r\n\r\n float dotOpacity = max(0., 1. - opacity_randomizer * u_opacityRange);\r\n stroke *= dotOpacity;\r\n shapeInner *= dotOpacity;\r\n\r\n stroke *= u_colorStroke.a;\r\n shapeInner *= u_colorFill.a;\r\n\r\n vec3 color = vec3(0.);\r\n color += stroke * u_colorStroke.rgb;\r\n color += shapeInner * u_colorFill.rgb;\r\n color += (1. - shapeInner - stroke) * u_colorBack.rgb * u_colorBack.a;\r\n\r\n float opacity = 0.;\r\n opacity += stroke;\r\n opacity += shapeInner;\r\n opacity += (1. - opacity) * u_colorBack.a;\r\n\r\n fragColor = vec4(color, opacity);\r\n}\r\n`;\r\n\r\nexport interface DotGridUniforms extends ShaderSizingUniforms {\r\n u_colorBack: [number, number, number, number];\r\n u_colorFill: [number, number, number, number];\r\n u_colorStroke: [number, number, number, number];\r\n u_dotSize: number;\r\n u_gapX: number;\r\n u_gapY: number;\r\n u_strokeWidth: number;\r\n u_sizeRange: number;\r\n u_opacityRange: number;\r\n u_shape: (typeof DotGridShapes)[DotGridShape];\r\n}\r\n\r\nexport interface DotGridParams extends ShaderSizingParams {\r\n colorBack?: string;\r\n colorFill?: string;\r\n colorStroke?: string;\r\n size?: number;\r\n gapX?: number;\r\n gapY?: number;\r\n strokeWidth?: number;\r\n sizeRange?: number;\r\n opacityRange?: number;\r\n shape?: DotGridShape;\r\n}\r\n\r\nexport const DotGridShapes = {\r\n circle: 0,\r\n diamond: 1,\r\n square: 2,\r\n triangle: 3,\r\n} as const;\r\n\r\nexport type DotGridShape = keyof typeof DotGridShapes;\r\n"],
5
+ "mappings": ";;;;;AAAA,eAAmE;AACnE,SAAS,WAAW,oBAAoB;AAoCjC,MAAM,wBAAgC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAkB1C,SAAU;AAAA,EACV,YAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAoGT,MAAM,gBAAgB;AAAA,EAC3B,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,UAAU;AACZ;",
6
+ "names": []
7
+ }
@@ -0,0 +1,57 @@
1
+ import type { vec4 } from '../types.js';
2
+ import type { ShaderMotionParams } from '../shader-mount.js';
3
+ import { type ShaderSizingParams, type ShaderSizingUniforms } from '../shader-sizing.js';
4
+ export declare const dotOrbitMeta: {
5
+ readonly maxColorCount: 10;
6
+ };
7
+ /**
8
+ * Animated multi-color dots pattern with each dot orbiting around its cell center.
9
+ * Supports up to 10 colors and various shape and motion controls.
10
+ *
11
+ * Fragment shader uniforms:
12
+ * - u_time (float): Animation time
13
+ * - u_colorBack (vec4): Background color in RGBA
14
+ * - u_colors (vec4[]): Up to 10 base colors in RGBA
15
+ * - u_colorsCount (float): Number of active colors
16
+ * - u_stepsPerColor (float): Number of extra colors between base colors, 1 = N colors, 2 = 2×N, etc., needs 2+ colors (1 to 4)
17
+ * - u_size (float): Dot radius relative to cell size (0 to 1)
18
+ * - u_sizeRange (float): Random variation in shape size, 0 = uniform, higher = random up to base size (0 to 1)
19
+ * - u_spreading (float): Maximum orbit distance around cell center, dots are static at 0 (0 to 1)
20
+ * - u_noiseTexture (sampler2D): Pre-computed randomizer source texture
21
+ *
22
+ * Vertex shader outputs (used in fragment shader):
23
+ * - v_patternUV (vec2): UV coordinates in pixels (scaled by 0.01 for precision), with rotation and offset applied
24
+ *
25
+ * Vertex shader uniforms:
26
+ * - u_resolution (vec2): Canvas resolution in pixels
27
+ * - u_pixelRatio (float): Device pixel ratio
28
+ * - u_originX (float): Reference point for positioning world width in the canvas (0 to 1)
29
+ * - u_originY (float): Reference point for positioning world height in the canvas (0 to 1)
30
+ * - u_worldWidth (float): Virtual width of the graphic before it's scaled to fit the canvas
31
+ * - u_worldHeight (float): Virtual height of the graphic before it's scaled to fit the canvas
32
+ * - u_fit (float): How to fit the rendered shader into the canvas dimensions (0 = none, 1 = contain, 2 = cover)
33
+ * - u_scale (float): Overall zoom level of the graphics (0.01 to 4)
34
+ * - u_rotation (float): Overall rotation angle of the graphics in degrees (0 to 360)
35
+ * - u_offsetX (float): Horizontal offset of the graphics center (-1 to 1)
36
+ * - u_offsetY (float): Vertical offset of the graphics center (-1 to 1)
37
+ *
38
+ */
39
+ export declare const dotOrbitFragmentShader: string;
40
+ export interface DotOrbitUniforms extends ShaderSizingUniforms {
41
+ u_colorBack: [number, number, number, number];
42
+ u_colors: vec4[];
43
+ u_colorsCount: number;
44
+ u_size: number;
45
+ u_sizeRange: number;
46
+ u_spreading: number;
47
+ u_stepsPerColor: number;
48
+ u_noiseTexture?: HTMLImageElement;
49
+ }
50
+ export interface DotOrbitParams extends ShaderSizingParams, ShaderMotionParams {
51
+ colorBack?: string;
52
+ colors?: string[];
53
+ size?: number;
54
+ sizeRange?: number;
55
+ spreading?: number;
56
+ stepsPerColor?: number;
57
+ }
@@ -0,0 +1,123 @@
1
+ /* * * * * * * * * * * * * * * * * * * * * * * * * * * *
2
+ * Paper Shaders *
3
+ * https://github.com/paper-design/shaders *
4
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * */
5
+
6
+ import {} from "../shader-sizing.js";
7
+ import { declarePI, rotation2, textureRandomizerR, textureRandomizerGB } from "../shader-utils.js";
8
+ const dotOrbitMeta = {
9
+ maxColorCount: 10
10
+ };
11
+ const dotOrbitFragmentShader = `#version 300 es
12
+ precision mediump float;
13
+
14
+ uniform float u_time;
15
+
16
+ uniform sampler2D u_noiseTexture;
17
+
18
+ uniform vec4 u_colorBack;
19
+ uniform vec4 u_colors[${dotOrbitMeta.maxColorCount}];
20
+ uniform float u_colorsCount;
21
+ uniform float u_stepsPerColor;
22
+ uniform float u_size;
23
+ uniform float u_sizeRange;
24
+ uniform float u_spreading;
25
+
26
+ in vec2 v_patternUV;
27
+
28
+ out vec4 fragColor;
29
+
30
+ ${declarePI}
31
+ ${rotation2}
32
+ ${textureRandomizerR}
33
+ ${textureRandomizerGB}
34
+
35
+
36
+ vec3 voronoiShape(vec2 uv, float time) {
37
+ vec2 i_uv = floor(uv);
38
+ vec2 f_uv = fract(uv);
39
+
40
+ float spreading = .25 * clamp(u_spreading, 0., 1.);
41
+
42
+ float minDist = 1.;
43
+ vec2 randomizer = vec2(0.);
44
+ for (int y = -1; y <= 1; y++) {
45
+ for (int x = -1; x <= 1; x++) {
46
+ vec2 tileOffset = vec2(float(x), float(y));
47
+ vec2 rand = randomGB(i_uv + tileOffset);
48
+ vec2 cellCenter = vec2(.5 + 1e-4);
49
+ cellCenter += spreading * cos(time + TWO_PI * rand);
50
+ cellCenter -= .5;
51
+ cellCenter = rotate(cellCenter, randomR(vec2(rand.x, rand.y)) + .1 * time);
52
+ cellCenter += .5;
53
+ float dist = length(tileOffset + cellCenter - f_uv);
54
+ if (dist < minDist) {
55
+ minDist = dist;
56
+ randomizer = rand;
57
+ }
58
+ }
59
+ }
60
+
61
+ return vec3(minDist, randomizer);
62
+ }
63
+
64
+ void main() {
65
+
66
+ vec2 shape_uv = v_patternUV;
67
+ shape_uv *= 1.5;
68
+
69
+ const float firstFrameOffset = -10.;
70
+ float t = u_time + firstFrameOffset;
71
+
72
+ vec3 voronoi = voronoiShape(shape_uv, t) + 1e-4;
73
+
74
+ float radius = .25 * clamp(u_size, 0., 1.) - .5 * clamp(u_sizeRange, 0., 1.) * voronoi[2];
75
+ float dist = voronoi[0];
76
+ float edgeWidth = fwidth(dist);
77
+ float dots = 1. - smoothstep(radius - edgeWidth, radius + edgeWidth, dist);
78
+
79
+ float shape = voronoi[1];
80
+
81
+ float mixer = shape * (u_colorsCount - 1.);
82
+ mixer = (shape - .5 / u_colorsCount) * u_colorsCount;
83
+ float steps = max(1., u_stepsPerColor);
84
+
85
+ vec4 gradient = u_colors[0];
86
+ gradient.rgb *= gradient.a;
87
+ for (int i = 1; i < ${dotOrbitMeta.maxColorCount}; i++) {
88
+ if (i >= int(u_colorsCount)) break;
89
+ float localT = clamp(mixer - float(i - 1), 0.0, 1.0);
90
+ localT = round(localT * steps) / steps;
91
+ vec4 c = u_colors[i];
92
+ c.rgb *= c.a;
93
+ gradient = mix(gradient, c, localT);
94
+ }
95
+
96
+ if ((mixer < 0.) || (mixer > (u_colorsCount - 1.))) {
97
+ float localT = mixer + 1.;
98
+ if (mixer > (u_colorsCount - 1.)) {
99
+ localT = mixer - (u_colorsCount - 1.);
100
+ }
101
+ localT = round(localT * steps) / steps;
102
+ vec4 cFst = u_colors[0];
103
+ cFst.rgb *= cFst.a;
104
+ vec4 cLast = u_colors[int(u_colorsCount - 1.)];
105
+ cLast.rgb *= cLast.a;
106
+ gradient = mix(cLast, cFst, localT);
107
+ }
108
+
109
+ vec3 color = gradient.rgb * dots;
110
+ float opacity = gradient.a * dots;
111
+
112
+ vec3 bgColor = u_colorBack.rgb * u_colorBack.a;
113
+ color = color + bgColor * (1. - opacity);
114
+ opacity = opacity + u_colorBack.a * (1. - opacity);
115
+
116
+ fragColor = vec4(color, opacity);
117
+ }
118
+ `;
119
+ export {
120
+ dotOrbitFragmentShader,
121
+ dotOrbitMeta
122
+ };
123
+ //# sourceMappingURL=dot-orbit.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/shaders/dot-orbit.ts"],
4
+ "sourcesContent": ["import type { vec4 } from '../types.js';\r\nimport type { ShaderMotionParams } from '../shader-mount.js';\r\nimport { type ShaderSizingParams, type ShaderSizingUniforms } from '../shader-sizing.js';\r\nimport { declarePI, rotation2, textureRandomizerR, textureRandomizerGB } from '../shader-utils.js';\r\n\r\nexport const dotOrbitMeta = {\r\n maxColorCount: 10,\r\n} as const;\r\n\r\n/**\r\n * Animated multi-color dots pattern with each dot orbiting around its cell center.\r\n * Supports up to 10 colors and various shape and motion controls.\r\n *\r\n * Fragment shader uniforms:\r\n * - u_time (float): Animation time\r\n * - u_colorBack (vec4): Background color in RGBA\r\n * - u_colors (vec4[]): Up to 10 base colors in RGBA\r\n * - u_colorsCount (float): Number of active colors\r\n * - u_stepsPerColor (float): Number of extra colors between base colors, 1 = N colors, 2 = 2\u00D7N, etc., needs 2+ colors (1 to 4)\r\n * - u_size (float): Dot radius relative to cell size (0 to 1)\r\n * - u_sizeRange (float): Random variation in shape size, 0 = uniform, higher = random up to base size (0 to 1)\r\n * - u_spreading (float): Maximum orbit distance around cell center, dots are static at 0 (0 to 1)\r\n * - u_noiseTexture (sampler2D): Pre-computed randomizer source texture\r\n *\r\n * Vertex shader outputs (used in fragment shader):\r\n * - v_patternUV (vec2): UV coordinates in pixels (scaled by 0.01 for precision), with rotation and offset applied\r\n *\r\n * Vertex shader uniforms:\r\n * - u_resolution (vec2): Canvas resolution in pixels\r\n * - u_pixelRatio (float): Device pixel ratio\r\n * - u_originX (float): Reference point for positioning world width in the canvas (0 to 1)\r\n * - u_originY (float): Reference point for positioning world height in the canvas (0 to 1)\r\n * - u_worldWidth (float): Virtual width of the graphic before it's scaled to fit the canvas\r\n * - u_worldHeight (float): Virtual height of the graphic before it's scaled to fit the canvas\r\n * - u_fit (float): How to fit the rendered shader into the canvas dimensions (0 = none, 1 = contain, 2 = cover)\r\n * - u_scale (float): Overall zoom level of the graphics (0.01 to 4)\r\n * - u_rotation (float): Overall rotation angle of the graphics in degrees (0 to 360)\r\n * - u_offsetX (float): Horizontal offset of the graphics center (-1 to 1)\r\n * - u_offsetY (float): Vertical offset of the graphics center (-1 to 1)\r\n *\r\n */\r\n\r\n// language=GLSL\r\nexport const dotOrbitFragmentShader: string = `#version 300 es\r\nprecision mediump float;\r\n\r\nuniform float u_time;\r\n\r\nuniform sampler2D u_noiseTexture;\r\n\r\nuniform vec4 u_colorBack;\r\nuniform vec4 u_colors[${ dotOrbitMeta.maxColorCount }];\r\nuniform float u_colorsCount;\r\nuniform float u_stepsPerColor;\r\nuniform float u_size;\r\nuniform float u_sizeRange;\r\nuniform float u_spreading;\r\n\r\nin vec2 v_patternUV;\r\n\r\nout vec4 fragColor;\r\n\r\n${ declarePI }\r\n${ rotation2 }\r\n${ textureRandomizerR }\r\n${ textureRandomizerGB }\r\n\r\n\r\nvec3 voronoiShape(vec2 uv, float time) {\r\n vec2 i_uv = floor(uv);\r\n vec2 f_uv = fract(uv);\r\n\r\n float spreading = .25 * clamp(u_spreading, 0., 1.);\r\n\r\n float minDist = 1.;\r\n vec2 randomizer = vec2(0.);\r\n for (int y = -1; y <= 1; y++) {\r\n for (int x = -1; x <= 1; x++) {\r\n vec2 tileOffset = vec2(float(x), float(y));\r\n vec2 rand = randomGB(i_uv + tileOffset);\r\n vec2 cellCenter = vec2(.5 + 1e-4);\r\n cellCenter += spreading * cos(time + TWO_PI * rand);\r\n cellCenter -= .5;\r\n cellCenter = rotate(cellCenter, randomR(vec2(rand.x, rand.y)) + .1 * time);\r\n cellCenter += .5;\r\n float dist = length(tileOffset + cellCenter - f_uv);\r\n if (dist < minDist) {\r\n minDist = dist;\r\n randomizer = rand;\r\n }\r\n }\r\n }\r\n\r\n return vec3(minDist, randomizer);\r\n}\r\n\r\nvoid main() {\r\n\r\n vec2 shape_uv = v_patternUV;\r\n shape_uv *= 1.5;\r\n\r\n const float firstFrameOffset = -10.;\r\n float t = u_time + firstFrameOffset;\r\n\r\n vec3 voronoi = voronoiShape(shape_uv, t) + 1e-4;\r\n\r\n float radius = .25 * clamp(u_size, 0., 1.) - .5 * clamp(u_sizeRange, 0., 1.) * voronoi[2];\r\n float dist = voronoi[0];\r\n float edgeWidth = fwidth(dist);\r\n float dots = 1. - smoothstep(radius - edgeWidth, radius + edgeWidth, dist);\r\n\r\n float shape = voronoi[1];\r\n\r\n float mixer = shape * (u_colorsCount - 1.);\r\n mixer = (shape - .5 / u_colorsCount) * u_colorsCount;\r\n float steps = max(1., u_stepsPerColor);\r\n\r\n vec4 gradient = u_colors[0];\r\n gradient.rgb *= gradient.a;\r\n for (int i = 1; i < ${ dotOrbitMeta.maxColorCount }; i++) {\r\n if (i >= int(u_colorsCount)) break;\r\n float localT = clamp(mixer - float(i - 1), 0.0, 1.0);\r\n localT = round(localT * steps) / steps;\r\n vec4 c = u_colors[i];\r\n c.rgb *= c.a;\r\n gradient = mix(gradient, c, localT);\r\n }\r\n\r\n if ((mixer < 0.) || (mixer > (u_colorsCount - 1.))) {\r\n float localT = mixer + 1.;\r\n if (mixer > (u_colorsCount - 1.)) {\r\n localT = mixer - (u_colorsCount - 1.);\r\n }\r\n localT = round(localT * steps) / steps;\r\n vec4 cFst = u_colors[0];\r\n cFst.rgb *= cFst.a;\r\n vec4 cLast = u_colors[int(u_colorsCount - 1.)];\r\n cLast.rgb *= cLast.a;\r\n gradient = mix(cLast, cFst, localT);\r\n }\r\n\r\n vec3 color = gradient.rgb * dots;\r\n float opacity = gradient.a * dots;\r\n\r\n vec3 bgColor = u_colorBack.rgb * u_colorBack.a;\r\n color = color + bgColor * (1. - opacity);\r\n opacity = opacity + u_colorBack.a * (1. - opacity);\r\n\r\n fragColor = vec4(color, opacity);\r\n}\r\n`;\r\n\r\nexport interface DotOrbitUniforms extends ShaderSizingUniforms {\r\n u_colorBack: [number, number, number, number];\r\n u_colors: vec4[];\r\n u_colorsCount: number;\r\n u_size: number;\r\n u_sizeRange: number;\r\n u_spreading: number;\r\n u_stepsPerColor: number;\r\n u_noiseTexture?: HTMLImageElement;\r\n}\r\n\r\nexport interface DotOrbitParams extends ShaderSizingParams, ShaderMotionParams {\r\n colorBack?: string;\r\n colors?: string[];\r\n size?: number;\r\n sizeRange?: number;\r\n spreading?: number;\r\n stepsPerColor?: number;\r\n}\r\n"],
5
+ "mappings": ";;;;;AAEA,eAAmE;AACnE,SAAS,WAAW,WAAW,oBAAoB,2BAA2B;AAEvE,MAAM,eAAe;AAAA,EAC1B,eAAe;AACjB;AAoCO,MAAM,yBAAiC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAQrB,aAAa,aAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWjD,SAAU;AAAA,EACV,SAAU;AAAA,EACV,kBAAmB;AAAA,EACnB,mBAAoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAsDE,aAAa,aAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;",
6
+ "names": []
7
+ }
@@ -0,0 +1,112 @@
1
+ import type { ShaderMotionParams } from '../shader-mount.js';
2
+ import { type ShaderSizingParams, type ShaderSizingUniforms } from '../shader-sizing.js';
3
+ /**
4
+ * Fluted glass image filter that transforms an image into streaked, ribbed distortions,
5
+ * giving a mix of clarity and obscurity.
6
+ *
7
+ * Fragment shader uniforms:
8
+ * - u_resolution (vec2): Canvas resolution in pixels
9
+ * - u_pixelRatio (float): Device pixel ratio
10
+ * - u_image (sampler2D): Source image texture
11
+ * - u_imageAspectRatio (float): Aspect ratio of the source image
12
+ * - u_colorBack (vec4): Background color in RGBA
13
+ * - u_colorShadow (vec4): Shadows color in RGBA, needs shadows > 0
14
+ * - u_colorHighlight (vec4): Highlights color in RGBA, needs highlights > 0
15
+ * - u_shadows (float): Color gradient added over image and background, following distortion shape, needs colorShadow alpha > 0 (0 to 1)
16
+ * - u_highlights (float): Thin strokes along distortion shape, useful for antialiasing on small grid (0 to 1)
17
+ * - u_size (float): Size of the distortion shape grid (0 to 1)
18
+ * - u_shape (float): Grid shape (1 = lines, 2 = linesIrregular, 3 = wave, 4 = zigzag, 5 = pattern)
19
+ * - u_angle (float): Direction of the grid relative to the image in degrees (0 to 180)
20
+ * - u_distortionShape (float): Shape of distortion (1 = prism, 2 = lens, 3 = contour, 4 = cascade, 5 = flat)
21
+ * - u_distortion (float): Power of distortion applied within each stripe (0 to 1)
22
+ * - u_shift (float): Texture shift in direction opposite to the grid, needs distortion > 0 (-1 to 1)
23
+ * - u_stretch (float): Extra distortion along the grid lines (0 to 1)
24
+ * - u_blur (float): One-directional blur over the image and extra blur around edges (0 to 1)
25
+ * - u_edges (float): Glass distortion and softness on the image edges (0 to 1)
26
+ * - u_marginLeft (float): Distance from the left edge to the effect (0 to 1)
27
+ * - u_marginRight (float): Distance from the right edge to the effect (0 to 1)
28
+ * - u_marginTop (float): Distance from the top edge to the effect (0 to 1)
29
+ * - u_marginBottom (float): Distance from the bottom edge to the effect (0 to 1)
30
+ * - u_grainMixer (float): Strength of grain distortion applied to shape edges, needs distortion > 0 (0 to 1)
31
+ * - u_grainOverlay (float): Post-processing black/white grain overlay (0 to 1)
32
+ *
33
+ * Vertex shader outputs (used in fragment shader):
34
+ * - v_imageUV (vec2): Image UV coordinates with global sizing (rotation, scale, offset, etc) applied
35
+ *
36
+ * Vertex shader uniforms:
37
+ * - u_resolution (vec2): Canvas resolution in pixels
38
+ * - u_pixelRatio (float): Device pixel ratio
39
+ * - u_originX (float): Reference point for positioning world width in the canvas (0 to 1)
40
+ * - u_originY (float): Reference point for positioning world height in the canvas (0 to 1)
41
+ * - u_fit (float): How to fit the rendered shader into the canvas dimensions (0 = none, 1 = contain, 2 = cover)
42
+ * - u_scale (float): Overall zoom level of the graphics (0.1 to 4)
43
+ * - u_rotation (float): Overall rotation angle of the graphics in degrees (0 to 360)
44
+ * - u_offsetX (float): Horizontal offset of the graphics center (-1 to 1)
45
+ * - u_offsetY (float): Vertical offset of the graphics center (-1 to 1)
46
+ * - u_imageAspectRatio (float): Aspect ratio of the source image
47
+ *
48
+ */
49
+ export declare const flutedGlassFragmentShader: string;
50
+ export interface FlutedGlassUniforms extends ShaderSizingUniforms {
51
+ u_image: HTMLImageElement | string | undefined;
52
+ u_colorBack: [number, number, number, number];
53
+ u_colorShadow: [number, number, number, number];
54
+ u_colorHighlight: [number, number, number, number];
55
+ u_shadows: number;
56
+ u_size: number;
57
+ u_angle: number;
58
+ u_distortion: number;
59
+ u_shift: number;
60
+ u_blur: number;
61
+ u_edges: number;
62
+ u_marginLeft: number;
63
+ u_marginRight: number;
64
+ u_marginTop: number;
65
+ u_marginBottom: number;
66
+ u_stretch: number;
67
+ u_distortionShape: (typeof GlassDistortionShapes)[GlassDistortionShape];
68
+ u_highlights: number;
69
+ u_shape: (typeof GlassGridShapes)[GlassGridShape];
70
+ u_grainMixer: number;
71
+ u_grainOverlay: number;
72
+ }
73
+ export interface FlutedGlassParams extends ShaderSizingParams, ShaderMotionParams {
74
+ image?: HTMLImageElement | string;
75
+ colorBack?: string;
76
+ colorShadow?: string;
77
+ colorHighlight?: string;
78
+ shadows?: number;
79
+ size?: number;
80
+ angle?: number;
81
+ distortion?: number;
82
+ shift?: number;
83
+ blur?: number;
84
+ edges?: number;
85
+ margin?: number;
86
+ marginLeft?: number;
87
+ marginRight?: number;
88
+ marginTop?: number;
89
+ marginBottom?: number;
90
+ stretch?: number;
91
+ distortionShape?: GlassDistortionShape;
92
+ highlights?: number;
93
+ shape?: GlassGridShape;
94
+ grainMixer?: number;
95
+ grainOverlay?: number;
96
+ }
97
+ export declare const GlassGridShapes: {
98
+ readonly lines: 1;
99
+ readonly linesIrregular: 2;
100
+ readonly wave: 3;
101
+ readonly zigzag: 4;
102
+ readonly pattern: 5;
103
+ };
104
+ export declare const GlassDistortionShapes: {
105
+ readonly prism: 1;
106
+ readonly lens: 2;
107
+ readonly contour: 3;
108
+ readonly cascade: 4;
109
+ readonly flat: 5;
110
+ };
111
+ export type GlassDistortionShape = keyof typeof GlassDistortionShapes;
112
+ export type GlassGridShape = keyof typeof GlassGridShapes;