@paper-design/shaders 0.0.30 → 0.0.31
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.
- package/README.md +7 -4
- package/dist/index.d.ts +25 -23
- package/dist/index.js +35 -22
- package/dist/index.js.map +2 -2
- package/dist/shaders/color-panels.d.ts +48 -0
- package/dist/shaders/color-panels.js +213 -0
- package/dist/shaders/color-panels.js.map +7 -0
- package/dist/shaders/dithering.d.ts +8 -8
- package/dist/shaders/dithering.js +15 -7
- package/dist/shaders/dithering.js.map +2 -2
- package/dist/shaders/dot-grid.d.ts +1 -1
- package/dist/shaders/dot-grid.js +4 -4
- package/dist/shaders/dot-grid.js.map +1 -1
- package/dist/shaders/dot-orbit.d.ts +6 -3
- package/dist/shaders/dot-orbit.js +14 -10
- package/dist/shaders/dot-orbit.js.map +2 -2
- package/dist/shaders/god-rays.d.ts +9 -6
- package/dist/shaders/god-rays.js +15 -16
- package/dist/shaders/god-rays.js.map +2 -2
- package/dist/shaders/grain-gradient.d.ts +5 -3
- package/dist/shaders/grain-gradient.js +50 -36
- package/dist/shaders/grain-gradient.js.map +2 -2
- package/dist/shaders/liquid-metal.d.ts +27 -12
- package/dist/shaders/liquid-metal.js +63 -66
- package/dist/shaders/liquid-metal.js.map +2 -2
- package/dist/shaders/mesh-gradient.d.ts +3 -3
- package/dist/shaders/mesh-gradient.js +6 -6
- package/dist/shaders/mesh-gradient.js.map +1 -1
- package/dist/shaders/metaballs.d.ts +6 -3
- package/dist/shaders/metaballs.js +11 -10
- package/dist/shaders/metaballs.js.map +2 -2
- package/dist/shaders/neuro-noise.d.ts +12 -6
- package/dist/shaders/neuro-noise.js +26 -11
- package/dist/shaders/neuro-noise.js.map +2 -2
- package/dist/shaders/perlin-noise.d.ts +10 -10
- package/dist/shaders/perlin-noise.js +29 -21
- package/dist/shaders/perlin-noise.js.map +2 -2
- package/dist/shaders/pulsing-border.d.ts +3 -3
- package/dist/shaders/pulsing-border.js +25 -25
- package/dist/shaders/pulsing-border.js.map +1 -1
- package/dist/shaders/simplex-noise.d.ts +3 -3
- package/dist/shaders/simplex-noise.js +12 -12
- package/dist/shaders/simplex-noise.js.map +1 -1
- package/dist/shaders/smoke-ring.d.ts +3 -3
- package/dist/shaders/smoke-ring.js +6 -6
- package/dist/shaders/smoke-ring.js.map +1 -1
- package/dist/shaders/spiral.d.ts +8 -8
- package/dist/shaders/spiral.js +15 -7
- package/dist/shaders/spiral.js.map +2 -2
- package/dist/shaders/swirl.d.ts +5 -3
- package/dist/shaders/swirl.js +29 -18
- package/dist/shaders/swirl.js.map +2 -2
- package/dist/shaders/voronoi.d.ts +8 -8
- package/dist/shaders/voronoi.js +11 -11
- package/dist/shaders/voronoi.js.map +1 -1
- package/dist/shaders/warp.d.ts +3 -3
- package/dist/shaders/warp.js +31 -27
- package/dist/shaders/warp.js.map +2 -2
- package/dist/shaders/waves.d.ts +7 -7
- package/dist/shaders/waves.js +16 -8
- package/dist/shaders/waves.js.map +2 -2
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -13,10 +13,13 @@ myDiv.style.width = '600px';
|
|
|
13
13
|
myDiv.style.height = '400px';
|
|
14
14
|
|
|
15
15
|
const shaderParams = {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
16
|
+
u_colorsCount: 4,
|
|
17
|
+
u_colors: [
|
|
18
|
+
getShaderColorFromString("#283bfc"),
|
|
19
|
+
getShaderColorFromString("#ff2828"),
|
|
20
|
+
getShaderColorFromString("#dddddd"),
|
|
21
|
+
getShaderColorFromString("#800080")
|
|
22
|
+
],
|
|
20
23
|
};
|
|
21
24
|
|
|
22
25
|
const speed = 0.25;
|
package/dist/index.d.ts
CHANGED
|
@@ -1,43 +1,45 @@
|
|
|
1
1
|
/** The core Shader Mount class. Pass it a parent element and a fragment shader to get started. */
|
|
2
|
-
export { ShaderMount, isPaperShaderElement } from './shader-mount';
|
|
3
|
-
export type { PaperShaderElement, ShaderMotionParams, ShaderMountUniforms, ShaderPreset } from './shader-mount';
|
|
2
|
+
export { ShaderMount, isPaperShaderElement } from './shader-mount.js';
|
|
3
|
+
export type { PaperShaderElement, ShaderMotionParams, ShaderMountUniforms, ShaderPreset } from './shader-mount.js';
|
|
4
4
|
/** Shader sizing options and uniforms */
|
|
5
|
-
export { defaultObjectSizing, defaultPatternSizing, ShaderFitOptions, type ShaderFit, type ShaderSizingParams, type ShaderSizingUniforms, } from './shader-sizing';
|
|
5
|
+
export { defaultObjectSizing, defaultPatternSizing, ShaderFitOptions, type ShaderFit, type ShaderSizingParams, type ShaderSizingUniforms, } from './shader-sizing.js';
|
|
6
6
|
/** A shader that renders a mesh gradient with a rotating noise pattern and several layers of fractal noise */
|
|
7
|
-
export { meshGradientFragmentShader, meshGradientMeta, type MeshGradientParams, type MeshGradientUniforms, } from './shaders/mesh-gradient';
|
|
7
|
+
export { meshGradientFragmentShader, meshGradientMeta, type MeshGradientParams, type MeshGradientUniforms, } from './shaders/mesh-gradient.js';
|
|
8
8
|
/** Fractional Brownian motion (fBm) noise over the polar coordinates, masked with ring shape */
|
|
9
|
-
export { smokeRingMeta, smokeRingFragmentShader, type SmokeRingParams, type SmokeRingUniforms, } from './shaders/smoke-ring';
|
|
9
|
+
export { smokeRingMeta, smokeRingFragmentShader, type SmokeRingParams, type SmokeRingUniforms, } from './shaders/smoke-ring.js';
|
|
10
10
|
/** A shader rendering a fractal-like structure made of several layers of since-arches */
|
|
11
|
-
export { neuroNoiseFragmentShader, type NeuroNoiseParams, type NeuroNoiseUniforms } from './shaders/neuro-noise';
|
|
11
|
+
export { neuroNoiseFragmentShader, type NeuroNoiseParams, type NeuroNoiseUniforms } from './shaders/neuro-noise.js';
|
|
12
12
|
/** A shader rendering an animated dot pattern based on Voronoi diagram */
|
|
13
|
-
export { dotOrbitMeta, dotOrbitFragmentShader, type DotOrbitParams, type DotOrbitUniforms } from './shaders/dot-orbit';
|
|
13
|
+
export { dotOrbitMeta, dotOrbitFragmentShader, type DotOrbitParams, type DotOrbitUniforms, } from './shaders/dot-orbit.js';
|
|
14
14
|
/** A shader rendering a static dot pattern */
|
|
15
|
-
export { dotGridFragmentShader, DotGridShapes, type DotGridShape, type DotGridParams, type DotGridUniforms, } from './shaders/dot-grid';
|
|
15
|
+
export { dotGridFragmentShader, DotGridShapes, type DotGridShape, type DotGridParams, type DotGridUniforms, } from './shaders/dot-grid.js';
|
|
16
16
|
/** A shader that calculates a combination of 2 simplex noises with result rendered as a gradient */
|
|
17
|
-
export { simplexNoiseMeta, simplexNoiseFragmentShader, type SimplexNoiseParams, type SimplexNoiseUniforms, } from './shaders/simplex-noise';
|
|
17
|
+
export { simplexNoiseMeta, simplexNoiseFragmentShader, type SimplexNoiseParams, type SimplexNoiseUniforms, } from './shaders/simplex-noise.js';
|
|
18
18
|
/** A number of circlular shapes blened in a gooey way */
|
|
19
|
-
export { metaballsMeta, metaballsFragmentShader, type MetaballsParams, type MetaballsUniforms, } from './shaders/metaballs';
|
|
19
|
+
export { metaballsMeta, metaballsFragmentShader, type MetaballsParams, type MetaballsUniforms, } from './shaders/metaballs.js';
|
|
20
20
|
/** 2d noise with max number of parameters to be exposed to users */
|
|
21
|
-
export { perlinNoiseFragmentShader, type PerlinNoiseParams, type PerlinNoiseUniforms } from './shaders/perlin-noise';
|
|
21
|
+
export { perlinNoiseFragmentShader, type PerlinNoiseParams, type PerlinNoiseUniforms } from './shaders/perlin-noise.js';
|
|
22
22
|
/** Voronoi diagram: classic + rounded edges */
|
|
23
|
-
export { voronoiMeta, voronoiFragmentShader, type VoronoiParams, type VoronoiUniforms } from './shaders/voronoi';
|
|
23
|
+
export { voronoiMeta, voronoiFragmentShader, type VoronoiParams, type VoronoiUniforms } from './shaders/voronoi.js';
|
|
24
24
|
/** Waves pattern */
|
|
25
|
-
export { wavesFragmentShader, type WavesParams, type WavesUniforms } from './shaders/waves';
|
|
25
|
+
export { wavesFragmentShader, type WavesParams, type WavesUniforms } from './shaders/waves.js';
|
|
26
26
|
/** Warp: distortion + swirl + underlying shapes */
|
|
27
|
-
export { warpMeta, warpFragmentShader, WarpPatterns, type WarpParams, type WarpUniforms, type WarpPattern, } from './shaders/warp';
|
|
27
|
+
export { warpMeta, warpFragmentShader, WarpPatterns, type WarpParams, type WarpUniforms, type WarpPattern, } from './shaders/warp.js';
|
|
28
28
|
/** Radial shape made of randomized stripes */
|
|
29
|
-
export { godRaysMeta, godRaysFragmentShader, type GodRaysParams, type GodRaysUniforms } from './shaders/god-rays';
|
|
29
|
+
export { godRaysMeta, godRaysFragmentShader, type GodRaysParams, type GodRaysUniforms } from './shaders/god-rays.js';
|
|
30
30
|
/** Single-color spiral shape */
|
|
31
|
-
export { spiralFragmentShader, type SpiralParams, type SpiralUniforms } from './shaders/spiral';
|
|
31
|
+
export { spiralFragmentShader, type SpiralParams, type SpiralUniforms } from './shaders/spiral.js';
|
|
32
32
|
/** Multi-color radial swirl */
|
|
33
|
-
export { swirlMeta, swirlFragmentShader, type SwirlParams, type SwirlUniforms } from './shaders/swirl';
|
|
33
|
+
export { swirlMeta, swirlFragmentShader, type SwirlParams, type SwirlUniforms } from './shaders/swirl.js';
|
|
34
34
|
/** Dithering effect applied over abstract shapes */
|
|
35
|
-
export { ditheringFragmentShader, DitheringShapes, DitheringTypes, type DitheringParams, type DitheringUniforms, type DitheringShape, type DitheringType, } from './shaders/dithering';
|
|
35
|
+
export { ditheringFragmentShader, DitheringShapes, DitheringTypes, type DitheringParams, type DitheringUniforms, type DitheringShape, type DitheringType, } from './shaders/dithering.js';
|
|
36
36
|
/** N-color gradient applied to the abstract shapes w/ grainy overlay & distortion */
|
|
37
|
-
export { grainGradientFragmentShader, grainGradientMeta, GrainGradientShapes, type GrainGradientParams, type GrainGradientUniforms, type GrainGradientShape, } from './shaders/grain-gradient';
|
|
37
|
+
export { grainGradientFragmentShader, grainGradientMeta, GrainGradientShapes, type GrainGradientParams, type GrainGradientUniforms, type GrainGradientShape, } from './shaders/grain-gradient.js';
|
|
38
38
|
/** Liquid metal effect applied to the abstract shapes */
|
|
39
|
-
export { liquidMetalFragmentShader, type LiquidMetalParams, type LiquidMetalUniforms } from './shaders/liquid-metal';
|
|
39
|
+
export { liquidMetalFragmentShader, LiquidMetalShapes, type LiquidMetalParams, type LiquidMetalUniforms, type LiquidMetalShape, } from './shaders/liquid-metal.js';
|
|
40
40
|
/** Border with configurable size & radius ade of rotating pulsing light spots */
|
|
41
|
-
export { pulsingBorderMeta, pulsingBorderFragmentShader, type PulsingBorderParams, type PulsingBorderUniforms, } from './shaders/pulsing-border';
|
|
42
|
-
|
|
43
|
-
export {
|
|
41
|
+
export { pulsingBorderMeta, pulsingBorderFragmentShader, type PulsingBorderParams, type PulsingBorderUniforms, } from './shaders/pulsing-border.js';
|
|
42
|
+
/** */
|
|
43
|
+
export { colorPanelsFragmentShader, colorPanelsMeta, type ColorPanelsParams, type ColorPanelsUniforms, } from './shaders/color-panels.js';
|
|
44
|
+
export { getShaderColorFromString } from './get-shader-color-from-string.js';
|
|
45
|
+
export { getShaderNoiseTexture } from './get-shader-noise-texture.js';
|
package/dist/index.js
CHANGED
|
@@ -3,70 +3,83 @@
|
|
|
3
3
|
* https://github.com/paper-design/shaders *
|
|
4
4
|
* * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
|
5
5
|
|
|
6
|
-
import { ShaderMount, isPaperShaderElement } from "./shader-mount";
|
|
6
|
+
import { ShaderMount, isPaperShaderElement } from "./shader-mount.js";
|
|
7
7
|
import {
|
|
8
8
|
defaultObjectSizing,
|
|
9
9
|
defaultPatternSizing,
|
|
10
10
|
ShaderFitOptions
|
|
11
|
-
} from "./shader-sizing";
|
|
11
|
+
} from "./shader-sizing.js";
|
|
12
12
|
import {
|
|
13
13
|
meshGradientFragmentShader,
|
|
14
14
|
meshGradientMeta
|
|
15
|
-
} from "./shaders/mesh-gradient";
|
|
15
|
+
} from "./shaders/mesh-gradient.js";
|
|
16
16
|
import {
|
|
17
17
|
smokeRingMeta,
|
|
18
18
|
smokeRingFragmentShader
|
|
19
|
-
} from "./shaders/smoke-ring";
|
|
20
|
-
import { neuroNoiseFragmentShader } from "./shaders/neuro-noise";
|
|
21
|
-
import {
|
|
19
|
+
} from "./shaders/smoke-ring.js";
|
|
20
|
+
import { neuroNoiseFragmentShader } from "./shaders/neuro-noise.js";
|
|
21
|
+
import {
|
|
22
|
+
dotOrbitMeta,
|
|
23
|
+
dotOrbitFragmentShader
|
|
24
|
+
} from "./shaders/dot-orbit.js";
|
|
22
25
|
import {
|
|
23
26
|
dotGridFragmentShader,
|
|
24
27
|
DotGridShapes
|
|
25
|
-
} from "./shaders/dot-grid";
|
|
28
|
+
} from "./shaders/dot-grid.js";
|
|
26
29
|
import {
|
|
27
30
|
simplexNoiseMeta,
|
|
28
31
|
simplexNoiseFragmentShader
|
|
29
|
-
} from "./shaders/simplex-noise";
|
|
32
|
+
} from "./shaders/simplex-noise.js";
|
|
30
33
|
import {
|
|
31
34
|
metaballsMeta,
|
|
32
35
|
metaballsFragmentShader
|
|
33
|
-
} from "./shaders/metaballs";
|
|
34
|
-
import { perlinNoiseFragmentShader } from "./shaders/perlin-noise";
|
|
35
|
-
import { voronoiMeta, voronoiFragmentShader } from "./shaders/voronoi";
|
|
36
|
-
import { wavesFragmentShader } from "./shaders/waves";
|
|
36
|
+
} from "./shaders/metaballs.js";
|
|
37
|
+
import { perlinNoiseFragmentShader } from "./shaders/perlin-noise.js";
|
|
38
|
+
import { voronoiMeta, voronoiFragmentShader } from "./shaders/voronoi.js";
|
|
39
|
+
import { wavesFragmentShader } from "./shaders/waves.js";
|
|
37
40
|
import {
|
|
38
41
|
warpMeta,
|
|
39
42
|
warpFragmentShader,
|
|
40
43
|
WarpPatterns
|
|
41
|
-
} from "./shaders/warp";
|
|
42
|
-
import { godRaysMeta, godRaysFragmentShader } from "./shaders/god-rays";
|
|
43
|
-
import { spiralFragmentShader } from "./shaders/spiral";
|
|
44
|
-
import { swirlMeta, swirlFragmentShader } from "./shaders/swirl";
|
|
44
|
+
} from "./shaders/warp.js";
|
|
45
|
+
import { godRaysMeta, godRaysFragmentShader } from "./shaders/god-rays.js";
|
|
46
|
+
import { spiralFragmentShader } from "./shaders/spiral.js";
|
|
47
|
+
import { swirlMeta, swirlFragmentShader } from "./shaders/swirl.js";
|
|
45
48
|
import {
|
|
46
49
|
ditheringFragmentShader,
|
|
47
50
|
DitheringShapes,
|
|
48
51
|
DitheringTypes
|
|
49
|
-
} from "./shaders/dithering";
|
|
52
|
+
} from "./shaders/dithering.js";
|
|
50
53
|
import {
|
|
51
54
|
grainGradientFragmentShader,
|
|
52
55
|
grainGradientMeta,
|
|
53
56
|
GrainGradientShapes
|
|
54
|
-
} from "./shaders/grain-gradient";
|
|
55
|
-
import {
|
|
57
|
+
} from "./shaders/grain-gradient.js";
|
|
58
|
+
import {
|
|
59
|
+
liquidMetalFragmentShader,
|
|
60
|
+
LiquidMetalShapes
|
|
61
|
+
} from "./shaders/liquid-metal.js";
|
|
56
62
|
import {
|
|
57
63
|
pulsingBorderMeta,
|
|
58
64
|
pulsingBorderFragmentShader
|
|
59
|
-
} from "./shaders/pulsing-border";
|
|
60
|
-
import {
|
|
61
|
-
|
|
65
|
+
} from "./shaders/pulsing-border.js";
|
|
66
|
+
import {
|
|
67
|
+
colorPanelsFragmentShader,
|
|
68
|
+
colorPanelsMeta
|
|
69
|
+
} from "./shaders/color-panels.js";
|
|
70
|
+
import { getShaderColorFromString } from "./get-shader-color-from-string.js";
|
|
71
|
+
import { getShaderNoiseTexture } from "./get-shader-noise-texture.js";
|
|
62
72
|
export {
|
|
63
73
|
DitheringShapes,
|
|
64
74
|
DitheringTypes,
|
|
65
75
|
DotGridShapes,
|
|
66
76
|
GrainGradientShapes,
|
|
77
|
+
LiquidMetalShapes,
|
|
67
78
|
ShaderFitOptions,
|
|
68
79
|
ShaderMount,
|
|
69
80
|
WarpPatterns,
|
|
81
|
+
colorPanelsFragmentShader,
|
|
82
|
+
colorPanelsMeta,
|
|
70
83
|
defaultObjectSizing,
|
|
71
84
|
defaultPatternSizing,
|
|
72
85
|
ditheringFragmentShader,
|
package/dist/index.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/index.ts"],
|
|
4
|
-
"sourcesContent": ["/** The core Shader Mount class. Pass it a parent element and a fragment shader to get started. */\nexport { ShaderMount, isPaperShaderElement } from './shader-mount';\nexport type { PaperShaderElement, ShaderMotionParams, ShaderMountUniforms, ShaderPreset } from './shader-mount';\n\n/** Shader sizing options and uniforms */\nexport {\n defaultObjectSizing,\n defaultPatternSizing,\n ShaderFitOptions,\n type ShaderFit,\n type ShaderSizingParams,\n type ShaderSizingUniforms,\n} from './shader-sizing';\n\n// ----- Mesh gradient ----- //\n/** A shader that renders a mesh gradient with a rotating noise pattern and several layers of fractal noise */\nexport {\n meshGradientFragmentShader,\n meshGradientMeta,\n type MeshGradientParams,\n type MeshGradientUniforms,\n} from './shaders/mesh-gradient';\n\n// ----- Smoke ring ----- //\n/** Fractional Brownian motion (fBm) noise over the polar coordinates, masked with ring shape */\nexport {\n smokeRingMeta,\n smokeRingFragmentShader,\n type SmokeRingParams,\n type SmokeRingUniforms,\n} from './shaders/smoke-ring';\n\n// ----- Neuro noise ----- //\n/** A shader rendering a fractal-like structure made of several layers of since-arches */\nexport { neuroNoiseFragmentShader, type NeuroNoiseParams, type NeuroNoiseUniforms } from './shaders/neuro-noise';\n\n// ----- Animated dot pattern: orbit type of animation ----- //\n/** A shader rendering an animated dot pattern based on Voronoi diagram */\nexport {
|
|
5
|
-
"mappings": ";;;;;AACA,SAAS,aAAa,4BAA4B;AAIlD;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OAIK;AAIP;AAAA,EACE;AAAA,EACA;AAAA,OAGK;AAIP;AAAA,EACE;AAAA,EACA;AAAA,OAGK;AAIP,SAAS,gCAAgF;AAIzF,
|
|
4
|
+
"sourcesContent": ["/** The core Shader Mount class. Pass it a parent element and a fragment shader to get started. */\nexport { ShaderMount, isPaperShaderElement } from './shader-mount.js';\nexport type { PaperShaderElement, ShaderMotionParams, ShaderMountUniforms, ShaderPreset } from './shader-mount.js';\n\n/** Shader sizing options and uniforms */\nexport {\n defaultObjectSizing,\n defaultPatternSizing,\n ShaderFitOptions,\n type ShaderFit,\n type ShaderSizingParams,\n type ShaderSizingUniforms,\n} from './shader-sizing.js';\n\n// ----- Mesh gradient ----- //\n/** A shader that renders a mesh gradient with a rotating noise pattern and several layers of fractal noise */\nexport {\n meshGradientFragmentShader,\n meshGradientMeta,\n type MeshGradientParams,\n type MeshGradientUniforms,\n} from './shaders/mesh-gradient.js';\n\n// ----- Smoke ring ----- //\n/** Fractional Brownian motion (fBm) noise over the polar coordinates, masked with ring shape */\nexport {\n smokeRingMeta,\n smokeRingFragmentShader,\n type SmokeRingParams,\n type SmokeRingUniforms,\n} from './shaders/smoke-ring.js';\n\n// ----- Neuro noise ----- //\n/** A shader rendering a fractal-like structure made of several layers of since-arches */\nexport { neuroNoiseFragmentShader, type NeuroNoiseParams, type NeuroNoiseUniforms } from './shaders/neuro-noise.js';\n\n// ----- Animated dot pattern: orbit type of animation ----- //\n/** A shader rendering an animated dot pattern based on Voronoi diagram */\nexport {\n dotOrbitMeta,\n dotOrbitFragmentShader,\n type DotOrbitParams,\n type DotOrbitUniforms,\n} from './shaders/dot-orbit.js';\n\n// ----- Dot Grid ----- //\n/** A shader rendering a static dot pattern */\nexport {\n dotGridFragmentShader,\n DotGridShapes,\n type DotGridShape,\n type DotGridParams,\n type DotGridUniforms,\n} from './shaders/dot-grid.js';\n\n// ----- Simplex noise ----- //\n/** A shader that calculates a combination of 2 simplex noises with result rendered as a gradient */\nexport {\n simplexNoiseMeta,\n simplexNoiseFragmentShader,\n type SimplexNoiseParams,\n type SimplexNoiseUniforms,\n} from './shaders/simplex-noise.js';\n\n// ----- Metaballs ----- //\n/** A number of circlular shapes blened in a gooey way */\nexport {\n metaballsMeta,\n metaballsFragmentShader,\n type MetaballsParams,\n type MetaballsUniforms,\n} from './shaders/metaballs.js';\n\n// ----- Perlin noise ----- //\n/** 2d noise with max number of parameters to be exposed to users */\nexport { perlinNoiseFragmentShader, type PerlinNoiseParams, type PerlinNoiseUniforms } from './shaders/perlin-noise.js';\n\n// ----- Voronoi Diagram ----- //\n/** Voronoi diagram: classic + rounded edges */\nexport { voronoiMeta, voronoiFragmentShader, type VoronoiParams, type VoronoiUniforms } from './shaders/voronoi.js';\n\n// ----- Waves ----- //\n/** Waves pattern */\nexport { wavesFragmentShader, type WavesParams, type WavesUniforms } from './shaders/waves.js';\n\n// ----- Warping Distortion ----- //\n/** Warp: distortion + swirl + underlying shapes */\nexport {\n warpMeta,\n warpFragmentShader,\n WarpPatterns,\n type WarpParams,\n type WarpUniforms,\n type WarpPattern,\n} from './shaders/warp.js';\n\n// ----- God Rays Effect ----- //\n/** Radial shape made of randomized stripes */\nexport { godRaysMeta, godRaysFragmentShader, type GodRaysParams, type GodRaysUniforms } from './shaders/god-rays.js';\n\n// ----- Spiral Shape ----- //\n/** Single-color spiral shape */\nexport { spiralFragmentShader, type SpiralParams, type SpiralUniforms } from './shaders/spiral.js';\n\n// ----- Swirl gradient ----- //\n/** Multi-color radial swirl */\nexport { swirlMeta, swirlFragmentShader, type SwirlParams, type SwirlUniforms } from './shaders/swirl.js';\n\n// ----- Dithering ----- //\n/** Dithering effect applied over abstract shapes */\nexport {\n ditheringFragmentShader,\n DitheringShapes,\n DitheringTypes,\n type DitheringParams,\n type DitheringUniforms,\n type DitheringShape,\n type DitheringType,\n} from './shaders/dithering.js';\n\n// ----- Grainy Gradient ----- //\n/** N-color gradient applied to the abstract shapes w/ grainy overlay & distortion */\nexport {\n grainGradientFragmentShader,\n grainGradientMeta,\n GrainGradientShapes,\n type GrainGradientParams,\n type GrainGradientUniforms,\n type GrainGradientShape,\n} from './shaders/grain-gradient.js';\n\n// ----- Liquid Metal ----- //\n/** Liquid metal effect applied to the abstract shapes */\nexport {\n liquidMetalFragmentShader,\n LiquidMetalShapes,\n type LiquidMetalParams,\n type LiquidMetalUniforms,\n type LiquidMetalShape,\n} from './shaders/liquid-metal.js';\n\n// ----- Pulsing Border ----- //\n/** Border with configurable size & radius ade of rotating pulsing light spots */\nexport {\n pulsingBorderMeta,\n pulsingBorderFragmentShader,\n type PulsingBorderParams,\n type PulsingBorderUniforms,\n} from './shaders/pulsing-border.js';\n\n// ----- Color Gradient Panels ----- //\n/** */\nexport {\n colorPanelsFragmentShader,\n colorPanelsMeta,\n type ColorPanelsParams,\n type ColorPanelsUniforms,\n} from './shaders/color-panels.js';\n\n// ----- Utils ----- //\nexport { getShaderColorFromString } from './get-shader-color-from-string.js';\nexport { getShaderNoiseTexture } from './get-shader-noise-texture.js';\n"],
|
|
5
|
+
"mappings": ";;;;;AACA,SAAS,aAAa,4BAA4B;AAIlD;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OAIK;AAIP;AAAA,EACE;AAAA,EACA;AAAA,OAGK;AAIP;AAAA,EACE;AAAA,EACA;AAAA,OAGK;AAIP,SAAS,gCAAgF;AAIzF;AAAA,EACE;AAAA,EACA;AAAA,OAGK;AAIP;AAAA,EACE;AAAA,EACA;AAAA,OAIK;AAIP;AAAA,EACE;AAAA,EACA;AAAA,OAGK;AAIP;AAAA,EACE;AAAA,EACA;AAAA,OAGK;AAIP,SAAS,iCAAmF;AAI5F,SAAS,aAAa,6BAAuE;AAI7F,SAAS,2BAAiE;AAI1E;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OAIK;AAIP,SAAS,aAAa,6BAAuE;AAI7F,SAAS,4BAAoE;AAI7E,SAAS,WAAW,2BAAiE;AAIrF;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OAKK;AAIP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OAIK;AAIP;AAAA,EACE;AAAA,EACA;AAAA,OAIK;AAIP;AAAA,EACE;AAAA,EACA;AAAA,OAGK;AAIP;AAAA,EACE;AAAA,EACA;AAAA,OAGK;AAGP,SAAS,gCAAgC;AACzC,SAAS,6BAA6B;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -0,0 +1,48 @@
|
|
|
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 colorPanelsMeta: {
|
|
5
|
+
readonly maxColorCount: 7;
|
|
6
|
+
};
|
|
7
|
+
/**
|
|
8
|
+
* Animated, pseudo-3D color panels with dynamic layering and directional blur
|
|
9
|
+
* by Ksenia Kondrashova
|
|
10
|
+
*
|
|
11
|
+
* Uniforms include:
|
|
12
|
+
* - u_colors (vec4[]): Input RGBA colors for panels
|
|
13
|
+
* - u_colorsCount (float): Number of active colors (`u_colors` length)
|
|
14
|
+
* - u_density (float): Panels to show
|
|
15
|
+
* - u_colorBack (vec4): Background color to blend behind panels
|
|
16
|
+
* - u_angle (float): Panel skew angle to morph rect to triangle panels
|
|
17
|
+
* - u_length (float): Length of panels (relative to total height)
|
|
18
|
+
* - u_blur (float): Horizontal blur amount along panel edges
|
|
19
|
+
* - u_fadePosition (float): Controls transparency toward the center of panels
|
|
20
|
+
* - u_colorShuffler (float): Affects how panel colors cycle
|
|
21
|
+
* - u_singleColor (float): Controls blending of adjacent colors per panel
|
|
22
|
+
*/
|
|
23
|
+
export declare const colorPanelsFragmentShader: string;
|
|
24
|
+
export interface ColorPanelsUniforms extends ShaderSizingUniforms {
|
|
25
|
+
u_colors: vec4[];
|
|
26
|
+
u_colorsCount: number;
|
|
27
|
+
u_colorBack: [number, number, number, number];
|
|
28
|
+
u_angle1: number;
|
|
29
|
+
u_angle2: number;
|
|
30
|
+
u_length: number;
|
|
31
|
+
u_blur: number;
|
|
32
|
+
u_fadeIn: number;
|
|
33
|
+
u_fadeOut: number;
|
|
34
|
+
u_density: number;
|
|
35
|
+
u_gradient: number;
|
|
36
|
+
}
|
|
37
|
+
export interface ColorPanelsParams extends ShaderSizingParams, ShaderMotionParams {
|
|
38
|
+
colors?: string[];
|
|
39
|
+
colorBack?: string;
|
|
40
|
+
angle1?: number;
|
|
41
|
+
angle2?: number;
|
|
42
|
+
length?: number;
|
|
43
|
+
blur?: number;
|
|
44
|
+
fadeIn?: number;
|
|
45
|
+
fadeOut?: number;
|
|
46
|
+
density?: number;
|
|
47
|
+
gradient?: number;
|
|
48
|
+
}
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
/* * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
|
2
|
+
* Paper Shaders *
|
|
3
|
+
* https://github.com/paper-design/shaders *
|
|
4
|
+
* * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
|
5
|
+
|
|
6
|
+
import { sizingVariablesDeclaration } from "../shader-sizing.js";
|
|
7
|
+
import { declarePI, colorBandingFix } from "../shader-utils.js";
|
|
8
|
+
const colorPanelsMeta = {
|
|
9
|
+
maxColorCount: 7
|
|
10
|
+
};
|
|
11
|
+
const colorPanelsFragmentShader = `#version 300 es
|
|
12
|
+
precision lowp float;
|
|
13
|
+
|
|
14
|
+
uniform vec2 u_resolution;
|
|
15
|
+
|
|
16
|
+
uniform float u_time;
|
|
17
|
+
uniform float u_scale;
|
|
18
|
+
|
|
19
|
+
uniform vec4 u_colors[${colorPanelsMeta.maxColorCount}];
|
|
20
|
+
uniform float u_colorsCount;
|
|
21
|
+
uniform vec4 u_colorBack;
|
|
22
|
+
uniform float u_angle1;
|
|
23
|
+
uniform float u_angle2;
|
|
24
|
+
uniform float u_length;
|
|
25
|
+
uniform float u_blur;
|
|
26
|
+
uniform float u_fadeIn;
|
|
27
|
+
uniform float u_fadeOut;
|
|
28
|
+
uniform float u_density;
|
|
29
|
+
uniform float u_gradient;
|
|
30
|
+
|
|
31
|
+
${sizingVariablesDeclaration}
|
|
32
|
+
|
|
33
|
+
out vec4 fragColor;
|
|
34
|
+
|
|
35
|
+
${declarePI}
|
|
36
|
+
|
|
37
|
+
vec2 getPanel(float angle, vec2 uv, float invLength) {
|
|
38
|
+
float sinA = sin(angle);
|
|
39
|
+
float cosA = cos(angle);
|
|
40
|
+
|
|
41
|
+
float denom = sinA - uv.y * cosA;
|
|
42
|
+
if (abs(denom) < 1e-5) return vec2(0.);
|
|
43
|
+
|
|
44
|
+
float z = uv.y / denom;
|
|
45
|
+
float zLimit = 0.5;
|
|
46
|
+
|
|
47
|
+
if (z < 0. || z > zLimit) return vec2(0.);
|
|
48
|
+
|
|
49
|
+
float zRatio = z / zLimit;
|
|
50
|
+
float panelMap = 1.0 - zRatio;
|
|
51
|
+
float x = uv.x * (cosA * z + 1.) * invLength;
|
|
52
|
+
|
|
53
|
+
float zOffset = zRatio - .5;
|
|
54
|
+
float left = -.5 + zOffset * u_angle1;
|
|
55
|
+
float right = .5 - zOffset * u_angle2;
|
|
56
|
+
|
|
57
|
+
float blurFactor = (1. - panelMap) * clamp((abs(angle / TWO_PI - .5) - .01) / (-.01), 0., 1.);;
|
|
58
|
+
float blurX = .15 * blurFactor + panelMap * u_blur;
|
|
59
|
+
|
|
60
|
+
float leftEdge1 = left - .5 * blurX;
|
|
61
|
+
float leftEdge2 = left + blurX;
|
|
62
|
+
float rightEdge1 = right - blurX;
|
|
63
|
+
float rightEdge2 = right + .5 * blurX;
|
|
64
|
+
|
|
65
|
+
float panel = smoothstep(leftEdge1, leftEdge2, x) * (1.0 - smoothstep(rightEdge1, rightEdge2, x));
|
|
66
|
+
|
|
67
|
+
return vec2(panel, clamp(panelMap, 0., 1.));
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
vec4 blendColor(vec4 colorA, float panelMask, float panelMap) {
|
|
71
|
+
float fade = smoothstep(-.2 * (1. - u_fadeOut), u_fadeOut, panelMap)
|
|
72
|
+
* (1. - smoothstep(1. - u_fadeIn, 1., panelMap));
|
|
73
|
+
|
|
74
|
+
vec3 blendedRGB = mix(vec3(0.), colorA.rgb, fade);
|
|
75
|
+
float blendedAlpha = mix(0., colorA.a, fade);
|
|
76
|
+
|
|
77
|
+
return vec4(blendedRGB, blendedAlpha) * panelMask;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
void main() {
|
|
81
|
+
vec2 uv = v_objectUV;
|
|
82
|
+
uv *= 1.25;
|
|
83
|
+
|
|
84
|
+
float t = .05 * u_time;
|
|
85
|
+
t = fract(t);
|
|
86
|
+
bool reverseTime = (t < 0.5);
|
|
87
|
+
|
|
88
|
+
vec3 color = vec3(0.);
|
|
89
|
+
float opacity = 0.;
|
|
90
|
+
|
|
91
|
+
int colorsCount = int(u_colorsCount);
|
|
92
|
+
|
|
93
|
+
vec4 premultipliedColors[${colorPanelsMeta.maxColorCount}];
|
|
94
|
+
for (int i = 0; i < ${colorPanelsMeta.maxColorCount}; i++) {
|
|
95
|
+
if (i >= colorsCount) break;
|
|
96
|
+
vec4 c = u_colors[i];
|
|
97
|
+
c.rgb *= c.a;
|
|
98
|
+
premultipliedColors[i] = c;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
float invLength = 1.5 / (u_length + 0.001);
|
|
102
|
+
|
|
103
|
+
float totalColorWeight = 0.;
|
|
104
|
+
int panelsNumber = 12;
|
|
105
|
+
|
|
106
|
+
float densityNormalizer = 1.;
|
|
107
|
+
if (colorsCount == 4) {
|
|
108
|
+
panelsNumber = 16;
|
|
109
|
+
densityNormalizer = 1.34;
|
|
110
|
+
} else if (colorsCount == 5) {
|
|
111
|
+
panelsNumber = 20;
|
|
112
|
+
densityNormalizer = 1.67;
|
|
113
|
+
} else if (colorsCount == 7) {
|
|
114
|
+
panelsNumber = 14;
|
|
115
|
+
densityNormalizer = 1.17;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
float fPanelsNumber = float(panelsNumber);
|
|
119
|
+
|
|
120
|
+
float totalPanelsShape = 0.;
|
|
121
|
+
float panelGrad = 1. - clamp(u_gradient, 0., 1.);
|
|
122
|
+
|
|
123
|
+
for (int set = 0; set < 2; set++) {
|
|
124
|
+
bool isForward = (set == 0 && !reverseTime) || (set == 1 && reverseTime);
|
|
125
|
+
if (!isForward) continue;
|
|
126
|
+
|
|
127
|
+
for (int i = 0; i <= 20; i++) {
|
|
128
|
+
if (i >= panelsNumber) break;
|
|
129
|
+
|
|
130
|
+
int idx = panelsNumber - 1 - i;
|
|
131
|
+
|
|
132
|
+
float offset = float(idx) / fPanelsNumber;
|
|
133
|
+
if (set == 1) {
|
|
134
|
+
offset += .5;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
float densityFract = densityNormalizer * fract(t + offset);
|
|
138
|
+
float angleNorm = densityFract / u_density;
|
|
139
|
+
if (densityFract >= .5 || angleNorm >= .3) continue;
|
|
140
|
+
|
|
141
|
+
float smoothDensity = clamp((.5 - densityFract) / .1, 0., 1.) * clamp(densityFract / .01, 0., 1.);
|
|
142
|
+
float smoothAngle = clamp((.3 - angleNorm) / .05, 0., 1.);
|
|
143
|
+
if (smoothDensity * smoothAngle < .001) continue;
|
|
144
|
+
|
|
145
|
+
vec2 panel = getPanel(angleNorm * TWO_PI + PI, uv, invLength);
|
|
146
|
+
float panelMask = panel[0] * smoothDensity * smoothAngle;
|
|
147
|
+
if (panelMask <= .001) continue;
|
|
148
|
+
float panelMap = panel[1];
|
|
149
|
+
|
|
150
|
+
int colorIdx = idx % colorsCount;
|
|
151
|
+
int nextColorIdx = (idx + 1) % colorsCount;
|
|
152
|
+
|
|
153
|
+
vec4 colorA = premultipliedColors[colorIdx];
|
|
154
|
+
vec4 colorB = premultipliedColors[nextColorIdx];
|
|
155
|
+
|
|
156
|
+
colorA = mix(colorA, colorB, max(0., smoothstep(.0, .45, panelMap) - panelGrad));
|
|
157
|
+
vec4 blended = blendColor(colorA, panelMask, panelMap);
|
|
158
|
+
color = blended.rgb + color * (1. - blended.a);
|
|
159
|
+
opacity = blended.a + opacity * (1. - blended.a);
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
|
|
163
|
+
for (int i = 0; i <= 20; i++) {
|
|
164
|
+
if (i >= panelsNumber) break;
|
|
165
|
+
|
|
166
|
+
int idx = panelsNumber - 1 - i;
|
|
167
|
+
|
|
168
|
+
float offset = float(idx) / fPanelsNumber;
|
|
169
|
+
if (set == 0) {
|
|
170
|
+
offset += .5;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
float densityFract = densityNormalizer * fract(-t + offset);
|
|
174
|
+
float angleNorm = -densityFract / u_density;
|
|
175
|
+
if (densityFract >= .5 || angleNorm < -.3) continue;
|
|
176
|
+
|
|
177
|
+
float smoothDensity = clamp((.5 - densityFract) / .1, 0., 1.) * clamp(densityFract / .01, 0., 1.);
|
|
178
|
+
float smoothAngle = clamp((angleNorm + .3) / .05, 0., 1.);
|
|
179
|
+
if (smoothDensity * smoothAngle < .001) continue;
|
|
180
|
+
|
|
181
|
+
vec2 panel = getPanel(angleNorm * TWO_PI + PI, uv, invLength);
|
|
182
|
+
float panelMask = panel[0] * smoothDensity * smoothAngle;
|
|
183
|
+
if (panelMask <= .001) continue;
|
|
184
|
+
float panelMap = panel[1];
|
|
185
|
+
|
|
186
|
+
int colorIdx = (colorsCount - (idx % colorsCount)) % colorsCount;
|
|
187
|
+
if (colorIdx < 0) colorIdx += colorsCount;
|
|
188
|
+
int nextColorIdx = (colorIdx + 1) % colorsCount;
|
|
189
|
+
|
|
190
|
+
vec4 colorA = premultipliedColors[colorIdx];
|
|
191
|
+
vec4 colorB = premultipliedColors[nextColorIdx];
|
|
192
|
+
|
|
193
|
+
colorA = mix(colorA, colorB, max(0., smoothstep(.0, .45, panelMap) - panelGrad));
|
|
194
|
+
vec4 blended = blendColor(colorA, panelMask, panelMap);
|
|
195
|
+
color = blended.rgb + color * (1. - blended.a);
|
|
196
|
+
opacity = blended.a + opacity * (1. - blended.a);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
vec3 bgColor = u_colorBack.rgb * u_colorBack.a;
|
|
201
|
+
color = color + bgColor * (1.0 - opacity);
|
|
202
|
+
opacity = opacity + u_colorBack.a * (1.0 - opacity);
|
|
203
|
+
|
|
204
|
+
${colorBandingFix}
|
|
205
|
+
|
|
206
|
+
fragColor = vec4(color, opacity);
|
|
207
|
+
}
|
|
208
|
+
`;
|
|
209
|
+
export {
|
|
210
|
+
colorPanelsFragmentShader,
|
|
211
|
+
colorPanelsMeta
|
|
212
|
+
};
|
|
213
|
+
//# sourceMappingURL=color-panels.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/shaders/color-panels.ts"],
|
|
4
|
+
"sourcesContent": ["import type { vec4 } from '../types.js';\nimport type { ShaderMotionParams } from '../shader-mount.js';\nimport { sizingVariablesDeclaration, type ShaderSizingParams, type ShaderSizingUniforms } from '../shader-sizing.js';\nimport { declarePI, colorBandingFix } from '../shader-utils.js';\n\nexport const colorPanelsMeta = {\n maxColorCount: 7,\n} as const;\n\n/**\n * Animated, pseudo-3D color panels with dynamic layering and directional blur\n * by Ksenia Kondrashova\n *\n * Uniforms include:\n * - u_colors (vec4[]): Input RGBA colors for panels\n * - u_colorsCount (float): Number of active colors (`u_colors` length)\n * - u_density (float): Panels to show\n * - u_colorBack (vec4): Background color to blend behind panels\n * - u_angle (float): Panel skew angle to morph rect to triangle panels\n * - u_length (float): Length of panels (relative to total height)\n * - u_blur (float): Horizontal blur amount along panel edges\n * - u_fadePosition (float): Controls transparency toward the center of panels\n * - u_colorShuffler (float): Affects how panel colors cycle\n * - u_singleColor (float): Controls blending of adjacent colors per panel\n */\n\nexport const colorPanelsFragmentShader: string = `#version 300 es\nprecision lowp float;\n\nuniform vec2 u_resolution;\n\nuniform float u_time;\nuniform float u_scale;\n\nuniform vec4 u_colors[${colorPanelsMeta.maxColorCount}];\nuniform float u_colorsCount;\nuniform vec4 u_colorBack;\nuniform float u_angle1;\nuniform float u_angle2;\nuniform float u_length;\nuniform float u_blur;\nuniform float u_fadeIn;\nuniform float u_fadeOut;\nuniform float u_density;\nuniform float u_gradient;\n\n${sizingVariablesDeclaration}\n\nout vec4 fragColor;\n\n${declarePI}\n\nvec2 getPanel(float angle, vec2 uv, float invLength) {\n float sinA = sin(angle);\n float cosA = cos(angle);\n\n float denom = sinA - uv.y * cosA;\n if (abs(denom) < 1e-5) return vec2(0.);\n\n float z = uv.y / denom;\n float zLimit = 0.5;\n\n if (z < 0. || z > zLimit) return vec2(0.);\n\n float zRatio = z / zLimit;\n float panelMap = 1.0 - zRatio;\n float x = uv.x * (cosA * z + 1.) * invLength;\n\n float zOffset = zRatio - .5;\n float left = -.5 + zOffset * u_angle1;\n float right = .5 - zOffset * u_angle2;\n\n float blurFactor = (1. - panelMap) * clamp((abs(angle / TWO_PI - .5) - .01) / (-.01), 0., 1.);;\n float blurX = .15 * blurFactor + panelMap * u_blur;\n\n float leftEdge1 = left - .5 * blurX;\n float leftEdge2 = left + blurX;\n float rightEdge1 = right - blurX;\n float rightEdge2 = right + .5 * blurX;\n\n float panel = smoothstep(leftEdge1, leftEdge2, x) * (1.0 - smoothstep(rightEdge1, rightEdge2, x));\n\n return vec2(panel, clamp(panelMap, 0., 1.));\n}\n\nvec4 blendColor(vec4 colorA, float panelMask, float panelMap) {\n float fade = smoothstep(-.2 * (1. - u_fadeOut), u_fadeOut, panelMap)\n * (1. - smoothstep(1. - u_fadeIn, 1., panelMap));\n\n vec3 blendedRGB = mix(vec3(0.), colorA.rgb, fade);\n float blendedAlpha = mix(0., colorA.a, fade);\n\n return vec4(blendedRGB, blendedAlpha) * panelMask;\n}\n\nvoid main() {\n vec2 uv = v_objectUV;\n uv *= 1.25;\n\n float t = .05 * u_time;\n t = fract(t);\n bool reverseTime = (t < 0.5);\n\n vec3 color = vec3(0.);\n float opacity = 0.;\n\n int colorsCount = int(u_colorsCount);\n\n vec4 premultipliedColors[${colorPanelsMeta.maxColorCount}];\n for (int i = 0; i < ${colorPanelsMeta.maxColorCount}; i++) {\n if (i >= colorsCount) break;\n vec4 c = u_colors[i];\n c.rgb *= c.a;\n premultipliedColors[i] = c;\n }\n\n float invLength = 1.5 / (u_length + 0.001);\n\n float totalColorWeight = 0.;\n int panelsNumber = 12;\n\n float densityNormalizer = 1.;\n if (colorsCount == 4) {\n panelsNumber = 16;\n densityNormalizer = 1.34;\n } else if (colorsCount == 5) {\n panelsNumber = 20;\n densityNormalizer = 1.67;\n } else if (colorsCount == 7) {\n panelsNumber = 14;\n densityNormalizer = 1.17;\n }\n\n float fPanelsNumber = float(panelsNumber);\n\n float totalPanelsShape = 0.;\n float panelGrad = 1. - clamp(u_gradient, 0., 1.);\n\n for (int set = 0; set < 2; set++) {\n bool isForward = (set == 0 && !reverseTime) || (set == 1 && reverseTime);\n if (!isForward) continue;\n\n for (int i = 0; i <= 20; i++) {\n if (i >= panelsNumber) break;\n\n int idx = panelsNumber - 1 - i;\n\n float offset = float(idx) / fPanelsNumber;\n if (set == 1) {\n offset += .5;\n }\n\n float densityFract = densityNormalizer * fract(t + offset);\n float angleNorm = densityFract / u_density;\n if (densityFract >= .5 || angleNorm >= .3) continue;\n\n float smoothDensity = clamp((.5 - densityFract) / .1, 0., 1.) * clamp(densityFract / .01, 0., 1.);\n float smoothAngle = clamp((.3 - angleNorm) / .05, 0., 1.);\n if (smoothDensity * smoothAngle < .001) continue;\n\n vec2 panel = getPanel(angleNorm * TWO_PI + PI, uv, invLength);\n float panelMask = panel[0] * smoothDensity * smoothAngle;\n if (panelMask <= .001) continue;\n float panelMap = panel[1];\n\n int colorIdx = idx % colorsCount;\n int nextColorIdx = (idx + 1) % colorsCount;\n\n vec4 colorA = premultipliedColors[colorIdx];\n vec4 colorB = premultipliedColors[nextColorIdx];\n\n colorA = mix(colorA, colorB, max(0., smoothstep(.0, .45, panelMap) - panelGrad));\n vec4 blended = blendColor(colorA, panelMask, panelMap);\n color = blended.rgb + color * (1. - blended.a);\n opacity = blended.a + opacity * (1. - blended.a);\n }\n\n\n for (int i = 0; i <= 20; i++) {\n if (i >= panelsNumber) break;\n\n int idx = panelsNumber - 1 - i;\n\n float offset = float(idx) / fPanelsNumber;\n if (set == 0) {\n offset += .5;\n }\n\n float densityFract = densityNormalizer * fract(-t + offset);\n float angleNorm = -densityFract / u_density;\n if (densityFract >= .5 || angleNorm < -.3) continue;\n\n float smoothDensity = clamp((.5 - densityFract) / .1, 0., 1.) * clamp(densityFract / .01, 0., 1.);\n float smoothAngle = clamp((angleNorm + .3) / .05, 0., 1.);\n if (smoothDensity * smoothAngle < .001) continue;\n\n vec2 panel = getPanel(angleNorm * TWO_PI + PI, uv, invLength);\n float panelMask = panel[0] * smoothDensity * smoothAngle;\n if (panelMask <= .001) continue;\n float panelMap = panel[1];\n\n int colorIdx = (colorsCount - (idx % colorsCount)) % colorsCount;\n if (colorIdx < 0) colorIdx += colorsCount;\n int nextColorIdx = (colorIdx + 1) % colorsCount;\n\n vec4 colorA = premultipliedColors[colorIdx];\n vec4 colorB = premultipliedColors[nextColorIdx];\n\n colorA = mix(colorA, colorB, max(0., smoothstep(.0, .45, panelMap) - panelGrad));\n vec4 blended = blendColor(colorA, panelMask, panelMap);\n color = blended.rgb + color * (1. - blended.a);\n opacity = blended.a + opacity * (1. - blended.a);\n }\n }\n\n vec3 bgColor = u_colorBack.rgb * u_colorBack.a;\n color = color + bgColor * (1.0 - opacity);\n opacity = opacity + u_colorBack.a * (1.0 - opacity);\n\n ${colorBandingFix}\n\n fragColor = vec4(color, opacity);\n}\n`;\n\nexport interface ColorPanelsUniforms extends ShaderSizingUniforms {\n u_colors: vec4[];\n u_colorsCount: number;\n u_colorBack: [number, number, number, number];\n u_angle1: number;\n u_angle2: number;\n u_length: number;\n u_blur: number;\n u_fadeIn: number;\n u_fadeOut: number;\n u_density: number;\n u_gradient: number;\n}\n\nexport interface ColorPanelsParams extends ShaderSizingParams, ShaderMotionParams {\n colors?: string[];\n colorBack?: string;\n angle1?: number;\n angle2?: number;\n length?: number;\n blur?: number;\n fadeIn?: number;\n fadeOut?: number;\n density?: number;\n gradient?: number;\n}\n"],
|
|
5
|
+
"mappings": ";;;;;AAEA,SAAS,kCAAsF;AAC/F,SAAS,WAAW,uBAAuB;AAEpC,MAAM,kBAAkB;AAAA,EAC7B,eAAe;AACjB;AAmBO,MAAM,4BAAoC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAQzB,gBAAgB,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYnD,0BAA0B;AAAA;AAAA;AAAA;AAAA,EAI1B,SAAS;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,6BA0DkB,gBAAgB,aAAa;AAAA,wBAClC,gBAAgB,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;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,IA8GjD,eAAe;AAAA;AAAA;AAAA;AAAA;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import type { ShaderMotionParams } from '../shader-mount';
|
|
2
|
-
import { type ShaderSizingParams, type ShaderSizingUniforms } from '../shader-sizing';
|
|
1
|
+
import type { ShaderMotionParams } from '../shader-mount.js';
|
|
2
|
+
import { type ShaderSizingParams, type ShaderSizingUniforms } from '../shader-sizing.js';
|
|
3
3
|
/**
|
|
4
4
|
* Dithering Fragment Shader by Ksenia Kondrashova
|
|
5
5
|
* Applies dithering (4 dithering types available) over the
|
|
6
6
|
* abstract shapes animation (7 animated shapes available)
|
|
7
7
|
*
|
|
8
8
|
* Uniforms include:
|
|
9
|
-
* -
|
|
10
|
-
* -
|
|
9
|
+
* - u_colorBack: background color, RGBA
|
|
10
|
+
* - u_colorFront: pixels color, RGBA
|
|
11
11
|
*
|
|
12
12
|
* - u_shape (float, used as int, 1 to 7):
|
|
13
13
|
* --- shape = 1: Simplex noise pattern
|
|
@@ -29,15 +29,15 @@ import { type ShaderSizingParams, type ShaderSizingUniforms } from '../shader-si
|
|
|
29
29
|
*/
|
|
30
30
|
export declare const ditheringFragmentShader: string;
|
|
31
31
|
export interface DitheringUniforms extends ShaderSizingUniforms {
|
|
32
|
-
|
|
33
|
-
|
|
32
|
+
u_colorBack: [number, number, number, number];
|
|
33
|
+
u_colorFront: [number, number, number, number];
|
|
34
34
|
u_shape: (typeof DitheringShapes)[DitheringShape];
|
|
35
35
|
u_type: (typeof DitheringTypes)[DitheringType];
|
|
36
36
|
u_pxSize: number;
|
|
37
37
|
}
|
|
38
38
|
export interface DitheringParams extends ShaderSizingParams, ShaderMotionParams {
|
|
39
|
-
|
|
40
|
-
|
|
39
|
+
colorBack?: string;
|
|
40
|
+
colorFront?: string;
|
|
41
41
|
shape?: DitheringShape;
|
|
42
42
|
type?: DitheringType;
|
|
43
43
|
pxSize?: number;
|
|
@@ -7,8 +7,8 @@ import {
|
|
|
7
7
|
sizingUniformsDeclaration,
|
|
8
8
|
sizingUV,
|
|
9
9
|
drawSizingHelpers
|
|
10
|
-
} from "../shader-sizing";
|
|
11
|
-
import { declareSimplexNoise, declarePI, declareRandom } from "../shader-utils";
|
|
10
|
+
} from "../shader-sizing.js";
|
|
11
|
+
import { declareSimplexNoise, declarePI, declareRandom } from "../shader-utils.js";
|
|
12
12
|
const ditheringFragmentShader = `#version 300 es
|
|
13
13
|
precision mediump float;
|
|
14
14
|
|
|
@@ -18,8 +18,8 @@ uniform float u_pixelRatio;
|
|
|
18
18
|
|
|
19
19
|
${sizingUniformsDeclaration}
|
|
20
20
|
|
|
21
|
-
uniform vec4
|
|
22
|
-
uniform vec4
|
|
21
|
+
uniform vec4 u_colorBack;
|
|
22
|
+
uniform vec4 u_colorFront;
|
|
23
23
|
uniform float u_shape;
|
|
24
24
|
uniform float u_type;
|
|
25
25
|
uniform float u_pxSize;
|
|
@@ -174,8 +174,16 @@ void main() {
|
|
|
174
174
|
dithering -= .5;
|
|
175
175
|
float res = step(.5, shape + dithering);
|
|
176
176
|
|
|
177
|
-
vec3
|
|
178
|
-
float
|
|
177
|
+
vec3 fgColor = u_colorFront.rgb * u_colorFront.a;
|
|
178
|
+
float fgOpacity = u_colorFront.a;
|
|
179
|
+
vec3 bgColor = u_colorBack.rgb * u_colorBack.a;
|
|
180
|
+
float bgOpacity = u_colorBack.a;
|
|
181
|
+
|
|
182
|
+
vec3 color = fgColor * res;
|
|
183
|
+
float opacity = fgOpacity * res;
|
|
184
|
+
|
|
185
|
+
color += bgColor * (1. - opacity);
|
|
186
|
+
opacity += bgOpacity * (1. - opacity);
|
|
179
187
|
|
|
180
188
|
#ifdef ADD_HELPERS
|
|
181
189
|
vec2 helperBox = objectHelperBox;
|
|
@@ -200,7 +208,7 @@ const DitheringShapes = {
|
|
|
200
208
|
sphere: 7
|
|
201
209
|
};
|
|
202
210
|
const DitheringTypes = {
|
|
203
|
-
random: 1,
|
|
211
|
+
"random": 1,
|
|
204
212
|
"2x2": 2,
|
|
205
213
|
"4x4": 3,
|
|
206
214
|
"8x8": 4
|