react-native-webrtc-kaleidoscope 2.7.0 → 2.7.2

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 (55) hide show
  1. package/android/src/main/java/com/simiancraft/kaleidoscope/gpu/ShadersGenerated.kt +40 -28
  2. package/catalog/shaders/README.md +56 -0
  3. package/catalog/shaders/anamorphic-lensflare/anamorphic-lensflare.ts +3 -0
  4. package/catalog/shaders/aurora-silk/aurora-silk.ts +3 -0
  5. package/catalog/shaders/clouds/clouds.ts +3 -0
  6. package/catalog/shaders/corporate-blobs/corporate-blobs.ts +3 -0
  7. package/catalog/shaders/data-mesh/data-mesh.ts +3 -0
  8. package/catalog/shaders/fireflies/fireflies.ts +3 -0
  9. package/catalog/shaders/godrays/godrays.ts +3 -0
  10. package/catalog/shaders/halftone-waves/halftone-waves.ts +3 -0
  11. package/catalog/shaders/kaleidoscope/kaleidoscope.ts +3 -0
  12. package/catalog/shaders/light-beams-and-motes/light-beams-and-motes.ts +3 -0
  13. package/catalog/shaders/nebula/nebula.ts +3 -0
  14. package/catalog/shaders/neo-memphis/neo-memphis.ts +3 -0
  15. package/catalog/shaders/outrun-grid/outrun-grid.frag +48 -36
  16. package/catalog/shaders/outrun-grid/outrun-grid.ts +5 -2
  17. package/catalog/shaders/plasma/plasma.ts +3 -0
  18. package/catalog/shaders/simianlights/simianlights.ts +3 -0
  19. package/dist/catalog/shaders/anamorphic-lensflare/anamorphic-lensflare.d.ts.map +1 -1
  20. package/dist/catalog/shaders/anamorphic-lensflare/anamorphic-lensflare.js.map +1 -1
  21. package/dist/catalog/shaders/aurora-silk/aurora-silk.d.ts.map +1 -1
  22. package/dist/catalog/shaders/aurora-silk/aurora-silk.js.map +1 -1
  23. package/dist/catalog/shaders/clouds/clouds.d.ts.map +1 -1
  24. package/dist/catalog/shaders/clouds/clouds.js.map +1 -1
  25. package/dist/catalog/shaders/corporate-blobs/corporate-blobs.d.ts.map +1 -1
  26. package/dist/catalog/shaders/corporate-blobs/corporate-blobs.js.map +1 -1
  27. package/dist/catalog/shaders/data-mesh/data-mesh.d.ts.map +1 -1
  28. package/dist/catalog/shaders/data-mesh/data-mesh.js.map +1 -1
  29. package/dist/catalog/shaders/fireflies/fireflies.d.ts.map +1 -1
  30. package/dist/catalog/shaders/fireflies/fireflies.js.map +1 -1
  31. package/dist/catalog/shaders/godrays/godrays.d.ts.map +1 -1
  32. package/dist/catalog/shaders/godrays/godrays.js.map +1 -1
  33. package/dist/catalog/shaders/halftone-waves/halftone-waves.d.ts.map +1 -1
  34. package/dist/catalog/shaders/halftone-waves/halftone-waves.js.map +1 -1
  35. package/dist/catalog/shaders/kaleidoscope/kaleidoscope.d.ts.map +1 -1
  36. package/dist/catalog/shaders/kaleidoscope/kaleidoscope.js.map +1 -1
  37. package/dist/catalog/shaders/light-beams-and-motes/light-beams-and-motes.d.ts.map +1 -1
  38. package/dist/catalog/shaders/light-beams-and-motes/light-beams-and-motes.js.map +1 -1
  39. package/dist/catalog/shaders/nebula/nebula.d.ts.map +1 -1
  40. package/dist/catalog/shaders/nebula/nebula.js.map +1 -1
  41. package/dist/catalog/shaders/neo-memphis/neo-memphis.d.ts.map +1 -1
  42. package/dist/catalog/shaders/neo-memphis/neo-memphis.js.map +1 -1
  43. package/dist/catalog/shaders/outrun-grid/outrun-grid.d.ts.map +1 -1
  44. package/dist/catalog/shaders/outrun-grid/outrun-grid.js +2 -2
  45. package/dist/catalog/shaders/outrun-grid/outrun-grid.js.map +1 -1
  46. package/dist/catalog/shaders/plasma/plasma.d.ts.map +1 -1
  47. package/dist/catalog/shaders/plasma/plasma.js.map +1 -1
  48. package/dist/catalog/shaders/simianlights/simianlights.d.ts.map +1 -1
  49. package/dist/catalog/shaders/simianlights/simianlights.js.map +1 -1
  50. package/dist/web-driver/shaders.generated.d.ts +1 -1
  51. package/dist/web-driver/shaders.generated.d.ts.map +1 -1
  52. package/dist/web-driver/shaders.generated.js +40 -28
  53. package/dist/web-driver/shaders.generated.js.map +1 -1
  54. package/ios/KaleidoscopeModule/shaders/outrun-grid.metalsrc +13 -14
  55. package/package.json +1 -1
@@ -565,34 +565,46 @@ void main() {
565
565
 
566
566
  col = mix(col, sunCol, sunBody);
567
567
  } else {
568
- // --- FLOOR --- perspective grid. Guard the divide; shade only below horizon.
569
- float depth = 1.0 / max(h - fy, 1.5e-3); // large near the horizon
570
- float depthMin = 1.0 / h; // depth at the very front (fy = 0)
571
-
572
- // Grid coordinates: x widens with depth (perspective); uGridDensity sets the
573
- // cell count; the scroll is in cell units so its rate is density-independent.
574
- vec2 g = vec2(fx * depth, depth) * uGridDensity;
575
- g.y += uTime * uSpeed * 2.0;
576
- vec2 cell = abs(fract(g) - 0.5); // 0 on a line .. 0.5 mid-cell, per axis
577
-
578
- // Per-axis, depth-scaled line half-width: the rungs (g.y) compress toward the
579
- // horizon as depth^2 and the verticals (g.x) ~linearly, so widening each axis'
580
- // line band at its own compression rate holds the on-screen line width roughly
581
- // constant. Far lines fuse into a band instead of a sub-pixel sheet that
582
- // shimmers as it scrolls; near lines stay crisp. Written 1 - smoothstep(0, w, .)
583
- // (NOT the reversed-edge smoothstep(w, 0, .), which is undefined on GLSL ES /
584
- // Metal) and derivative-free, so it is portable and mobile-precision safe.
585
- vec2 w = max(vec2(depth, depth * depth * 0.2) * uGridDensity * 0.0013, vec2(1e-4));
586
- vec2 core = 1.0 - smoothstep(vec2(0.0), w, cell);
587
- vec2 halo = (1.0 - smoothstep(vec2(0.0), w * 6.0, cell)) * (0.5 * uGridGlow);
588
- float gridVal = clamp(core.x + core.y + halo.x + halo.y, 0.0, 1.5);
589
-
590
- // Distance fog: fade the grid out toward the horizon for the converging look.
591
- float fog = clamp(1.0 - (depth - depthMin) / (depthMin * 10.0), 0.0, 1.0);
592
- fog *= fog;
593
-
594
- vec3 floorBase = mix(vec3(0.0), uSkyHorizon * 0.16, fog * 0.6);
595
- col = floorBase + uGridColor * gridVal * fog * calm;
568
+ // --- FLOOR --- perspective grid, a faithful port of a known-good community
569
+ // outrun grid (prior versions read as a too-dense, flickering sheet). Work in
570
+ // the reference's centered frame: cx is full-width centered x, dy is the
571
+ // centered distance BELOW the horizon. The additive offset caps the depth at
572
+ // the horizon, and putting big cells in the near field (low min depth) is what
573
+ // keeps the line spacing above a pixel, so it neither sheets nor shimmers.
574
+ float cx = 2.0 * fx; // = (2*vUv.x - 1) * aspect
575
+ float dy = 2.0 * (h - fy); // centered distance below the horizon (> 0)
576
+
577
+ // Cell count: uGridDensity 4 -> numerator 1.0 (sparse, big near cells). x
578
+ // widens with depth (the 0.7 factor); scroll is a slow drift toward the viewer.
579
+ float num = uGridDensity * 0.25;
580
+ float depth = num / (dy + 0.05);
581
+ vec2 g = vec2(cx * depth * 0.7, depth);
582
+ g.y += uTime * uSpeed * 0.3;
583
+ vec2 e = abs(fract(g) - 0.5);
584
+
585
+ // PIXEL-CALIBRATED line width: each line core is a fixed ~px wide in SCREEN
586
+ // PIXELS (via uResolution), the same at every depth and every resolution. The
587
+ // old depth^2*const width was constant in theory but landed sub-pixel, so
588
+ // discrete sampling rendered some rungs thick and others thin -> the uneven
589
+ // rungs that read as flicker. Solving sz so screen thickness == px: the rungs
590
+ // (g.y, compression ~depth^2/num) need sz.y = depth^2 * pf / num; the verticals
591
+ // (g.x) need sz.x = depth * 0.7 * pf. uGridGlow sets px (0.5 -> 2 px).
592
+ float pf = (uGridGlow * 4.0) / uResolution.y;
593
+ vec2 sz = vec2(depth * 0.7 * pf, depth * depth * pf / num);
594
+ vec2 lines = 1.0 - smoothstep(vec2(0.0), sz, e);
595
+ lines += (1.0 - smoothstep(vec2(0.0), sz * 4.0, e)) * 0.5;
596
+ float gridVal = clamp(lines.x + lines.y, 0.0, 1.0);
597
+
598
+ // Fade the grid out BEFORE rung spacing goes sub-pixel near the horizon: that
599
+ // zone moires/shimmers as it scrolls no matter how clean each line is (a second
600
+ // flicker source, separate from line width). subpx is the depth at which rungs
601
+ // are ~2 px apart, derived from uResolution; the seam glow below covers the
602
+ // faded edge so the horizon still reads as a bright line.
603
+ float subpx = sqrt(num * uResolution.y * 0.25);
604
+ gridVal *= 1.0 - smoothstep(subpx * 0.55, subpx, depth);
605
+
606
+ vec3 floorBase = uSkyHorizon * 0.06;
607
+ col = mix(floorBase, uGridColor, gridVal * calm);
596
608
  }
597
609
 
598
610
  // Glowing horizon seam where floor meets sky.
@@ -112,3 +112,59 @@ If you do edit a `.frag`:
112
112
 
113
113
  - Debian/Ubuntu/WSL: `sudo apt install -y glslang-tools spirv-tools spirv-cross`
114
114
  - macOS: `brew install glslang spirv-tools spirv-cross`
115
+
116
+ ## Cost (relative GPU budget)
117
+
118
+ Each shader carries a `// Cost:` line in its `<name>.ts` so the price is visible
119
+ where you pick presets. Use it to decide what to ship, and to drop the expensive
120
+ ones on mobile or slow devices (e.g. "nothing above MODERATE on phones").
121
+
122
+ **The portable number is `x plasma`, not the milliseconds.** Plasma is the
123
+ cheapest shader and is re-measured as the anchor on every bench run, so the ratio
124
+ is roughly device-independent; the absolute ms is one desktop iGPU at one
125
+ resolution and does **not** transfer to a phone. Rank and budget by the ratio.
126
+
127
+ **Rubric** (multiples of plasma, the floor):
128
+
129
+ | Tier | x plasma | Read it as |
130
+ |------|---------:|------------|
131
+ | CHEAP | < 5x | ship anywhere, including low-end mobile |
132
+ | MODERATE | 5–25x | fine on most devices; one at a time on weak GPUs |
133
+ | HEAVY | 25–100x | desktop / strong mobile; gate behind a capability check |
134
+ | VERY-HEAVY | > 100x | desktop-class only, or accept a low frame rate |
135
+
136
+ **Ranking** (shader:view GPU-time meter, 1920x1080, Intel UHD 770, each at its
137
+ `.ts` default uniforms, 2026-06-14; plasma anchor held ~0.29 ms across all runs):
138
+
139
+ | Shader | ms/draw | x plasma | Tier |
140
+ |--------|--------:|---------:|------|
141
+ | light-beams-and-motes | 142 | ~490x | VERY-HEAVY |
142
+ | clouds | 70 | ~240x | VERY-HEAVY |
143
+ | fireflies | 18 | ~61x | HEAVY |
144
+ | nebula | 15 | ~51x | HEAVY |
145
+ | corporate-blobs | 12 | ~42x | HEAVY |
146
+ | simianlights | 11 | ~39x | HEAVY |
147
+ | data-mesh | 6.4 | ~22x | MODERATE |
148
+ | aurora-silk | 1.9 | ~6.5x | MODERATE |
149
+ | neo-memphis | 1.0 | ~3.4x | CHEAP |
150
+ | kaleidoscope | 0.96 | ~3.3x | CHEAP |
151
+ | anamorphic-lensflare | 0.91 | ~3.1x | CHEAP |
152
+ | godrays | 0.68 | ~2.4x | CHEAP |
153
+ | outrun-grid | 0.53 | ~1.8x | CHEAP |
154
+ | halftone-waves | 0.45 | ~1.6x | CHEAP |
155
+ | plasma | 0.35 | 1x | CHEAP |
156
+
157
+ **Caveats.** The meter runs each `.frag` at full meter resolution; at runtime,
158
+ effects render at the resolution tier (much lower) and some run reduced-resolution
159
+ passes (clouds is half-res in the live pipeline), so real device cost is a
160
+ fraction of these numbers. Cost also moves with uniforms (mote count, raymarch
161
+ steps, grid density), so a specific preset can land in a neighbouring tier. The
162
+ `composite-*` and `blur` primitives are excluded: they sample the camera texture,
163
+ so they cannot be metered standalone (`blur` is a full-res 13-tap in the pipeline).
164
+
165
+ **Keeping it current.** These numbers are filled in by hand today. The intent is a
166
+ `bench` tool (the analog of the thumbnail maker) that drives the shader:view meter
167
+ headless, co-measures plasma, derives the ratio and tier, and writes the `Cost:`
168
+ line — so a new shader gets benched the same way it gets a thumbnail. Because the
169
+ ms is GPU-specific, the tool stamps the rig and date and the committed signal is
170
+ the ratio.
@@ -4,6 +4,9 @@
4
4
  // be color-matched to whatever sits behind it (e.g. the simianlights field in the
5
5
  // observation-deck composite). Shader source is ./anamorphic-lensflare.frag.
6
6
 
7
+ // Cost: CHEAP -- ~0.91 ms/draw, ~3.1x plasma (shader:view meter
8
+ // @1920, Intel UHD 770, default uniforms, 2026-06-14).
9
+ // Rubric + full ranking: ../README.md ("Cost").
7
10
  import type { RGB } from '../../../src/lib/primitives.types';
8
11
  import type { UniformControl } from '../_shared/types';
9
12
 
@@ -5,6 +5,9 @@
5
5
  // these uniforms; the palette and uStyle are the big levers. Shader source is
6
6
  // shaders/aurora-silk.frag.
7
7
 
8
+ // Cost: MODERATE -- ~1.9 ms/draw, ~6.5x plasma (shader:view meter
9
+ // @1920, Intel UHD 770, default uniforms, 2026-06-14).
10
+ // Rubric + full ranking: ../README.md ("Cost").
8
11
  import type { RGB } from '../../../src/lib/primitives.types';
9
12
  import type { UniformControl } from '../_shared/types';
10
13
 
@@ -4,6 +4,9 @@
4
4
  // shows up in editors and for LLMs). This is the first of the per-shader type
5
5
  // files; the shader source is shaders/clouds.frag.
6
6
 
7
+ // Cost: VERY-HEAVY -- ~70 ms/draw, ~240x plasma (shader:view meter
8
+ // @1920, Intel UHD 770, default uniforms, 2026-06-14). 32-step fbm raymarch; the live pipeline runs it half-res (~1/4 this); scales with step size and octaves.
9
+ // Rubric + full ranking: ../README.md ("Cost").
7
10
  import type { RGB } from '../../../src/lib/primitives.types';
8
11
  import type { UniformControl } from '../_shared/types';
9
12
 
@@ -5,6 +5,9 @@
5
5
  // blobs' positions and colors are fixed in the shader; the tunables below grade,
6
6
  // scale, and pace the field. Defaults reproduce the stock prototype look.
7
7
 
8
+ // Cost: HEAVY -- ~12 ms/draw, ~42x plasma (shader:view meter
9
+ // @1920, Intel UHD 770, default uniforms, 2026-06-14). Eight-blob loop.
10
+ // Rubric + full ranking: ../README.md ("Cost").
8
11
  import type { RGB } from '../../../src/lib/primitives.types';
9
12
  import type { UniformControl } from '../_shared/types';
10
13
 
@@ -5,6 +5,9 @@
5
5
  // big lever (gradient + line/crest/haze/accent), the structural dials set
6
6
  // composition and motion. Shader source is shaders/data-mesh/data-mesh.frag.
7
7
 
8
+ // Cost: MODERATE -- ~6.4 ms/draw, ~22x plasma (shader:view meter
9
+ // @1920, Intel UHD 770, default uniforms, 2026-06-14). Per-pixel row loop; scales with ROWS, uGridX, uParticles.
10
+ // Rubric + full ranking: ../README.md ("Cost").
8
11
  import type { RGB } from '../../../src/lib/primitives.types';
9
12
  import type { UniformControl } from '../_shared/types';
10
13
 
@@ -2,6 +2,9 @@
2
2
  // transparent overlay of drifting glowing dots (use blend 'additive'). Shader
3
3
  // source is ./fireflies.frag.
4
4
 
5
+ // Cost: HEAVY -- ~18 ms/draw, ~61x plasma (shader:view meter
6
+ // @1920, Intel UHD 770, default uniforms, 2026-06-14).
7
+ // Rubric + full ranking: ../README.md ("Cost").
5
8
  import type { RGB } from '../../../src/lib/primitives.types';
6
9
  import type { UniformControl } from '../_shared/types';
7
10
 
@@ -2,6 +2,9 @@
2
2
  // additive overlay (premultiplied), reusable on any target. Shader source is
3
3
  // ./godrays.frag.
4
4
 
5
+ // Cost: CHEAP -- ~0.68 ms/draw, ~2.4x plasma (shader:view meter
6
+ // @1920, Intel UHD 770, default uniforms, 2026-06-14).
7
+ // Rubric + full ranking: ../README.md ("Cost").
5
8
  import type { RGB } from '../../../src/lib/primitives.types';
6
9
  import type { UniformControl } from '../_shared/types';
7
10
 
@@ -5,6 +5,9 @@
5
5
  // ripple) by varying these uniforms; the two-tone palette is the big lever.
6
6
  // Shader source is shaders/halftone-waves.frag.
7
7
 
8
+ // Cost: CHEAP -- ~0.45 ms/draw, ~1.6x plasma (shader:view meter
9
+ // @1920, Intel UHD 770, default uniforms, 2026-06-14).
10
+ // Rubric + full ranking: ../README.md ("Cost").
8
11
  import type { RGB } from '../../../src/lib/primitives.types';
9
12
  import type { UniformControl } from '../_shared/types';
10
13
 
@@ -5,6 +5,9 @@
5
5
  // segment count and palette are the big levers. Shader source is
6
6
  // shaders/kaleidoscope.frag.
7
7
 
8
+ // Cost: CHEAP -- ~0.96 ms/draw, ~3.3x plasma (shader:view meter
9
+ // @1920, Intel UHD 770, default uniforms, 2026-06-14).
10
+ // Rubric + full ranking: ../README.md ("Cost").
8
11
  import type { RGB } from '../../../src/lib/primitives.types';
9
12
  import type { UniformControl } from '../_shared/types';
10
13
 
@@ -5,6 +5,9 @@
5
5
  // 4-point quad (row-major TL, TR, BL, BR; y-up), a color, a fill strength, and an
6
6
  // on/off flag; the motes are shared. Defaults reproduce the stock prototype look.
7
7
 
8
+ // Cost: VERY-HEAVY -- ~142 ms/draw, ~490x plasma (shader:view meter
9
+ // @1920, Intel UHD 770, default uniforms, 2026-06-14). Per-pixel mote loop dominates; scales with uMoteCount and uGlowSize. An overlay (not always on).
10
+ // Rubric + full ranking: ../README.md ("Cost").
8
11
  import type { RGB } from '../../../src/lib/primitives.types';
9
12
  import type { UniformControl } from '../_shared/types';
10
13
 
@@ -4,6 +4,9 @@
4
4
  // composite runs it full-frame behind the masked subject). Shader source is
5
5
  // ./nebula.frag.
6
6
 
7
+ // Cost: HEAVY -- ~15 ms/draw, ~51x plasma (shader:view meter
8
+ // @1920, Intel UHD 770, default uniforms, 2026-06-14). Layers x a 3x3 cell sweep; scales with STARFIELD_LAYERS_COUNT.
9
+ // Rubric + full ranking: ../README.md ("Cost").
7
10
  import type { RGB } from '../../../src/lib/primitives.types';
8
11
  import type { UniformControl } from '../_shared/types';
9
12
 
@@ -5,6 +5,9 @@
5
5
  // confetti) by varying these uniforms; the palette is the big lever. Shader
6
6
  // source is shaders/neo-memphis.frag.
7
7
 
8
+ // Cost: CHEAP -- ~1.0 ms/draw, ~3.4x plasma (shader:view meter
9
+ // @1920, Intel UHD 770, default uniforms, 2026-06-14).
10
+ // Rubric + full ranking: ../README.md ("Cost").
8
11
  import type { RGB } from '../../../src/lib/primitives.types';
9
12
  import type { UniformControl } from '../_shared/types';
10
13
 
@@ -16,14 +16,14 @@
16
16
  // top-right. fragCoord-free; reads vUv directly. Fully procedural: no input
17
17
  // texture, so ZERO net texture flips on every runtime (web/Android/Metal alike).
18
18
  //
19
- // Cross-target correctness: the floor's depth is 1 / (uHorizon - y), which would
20
- // blow to Inf/NaN exactly at the horizon and diverges between desktop highp and
21
- // mobile mediump. The denominator is clamped (max(..., 1.5e-3)) and the floor is
22
- // shaded only BELOW the horizon. Grid anti-aliasing is per-axis, depth-scaled line
23
- // width (NOT fwidth, NOT reversed-edge smoothstep): each axis' line band widens at
24
- // its own screen-space compression rate, so far lines never go sub-pixel and the
25
- // grid does not shimmer as it scrolls. No derivative-precision question on the
26
- // Android/Metal targets. No variable-exponent pow, no gl_FragCoord, no arrays.
19
+ // Cross-target correctness: the floor's depth is num / (dy + 0.05) where dy is the
20
+ // centered distance below the horizon. The ADDITIVE offset caps the depth at the
21
+ // horizon (no Inf/NaN, bounded line frequency); big cells in the near field keep
22
+ // the line spacing above a pixel, so the grid neither sheets nor shimmers. The
23
+ // floor is shaded only BELOW the horizon. Line width is depth-scaled (verticals
24
+ // ~linear, rungs ~depth^2) so far lines fill the cell instead of going sub-pixel.
25
+ // 1 - smoothstep(0, sz, .), NOT fwidth and NOT the reversed-edge smoothstep (which
26
+ // is undefined on GLSL ES / Metal). No variable-exponent pow, no gl_FragCoord.
27
27
  //
28
28
  // Precision: highp float throughout; the depth divide and grid coordinate need
29
29
  // the range and the front-to-horizon dynamic range.
@@ -90,34 +90,46 @@ void main() {
90
90
 
91
91
  col = mix(col, sunCol, sunBody);
92
92
  } else {
93
- // --- FLOOR --- perspective grid. Guard the divide; shade only below horizon.
94
- float depth = 1.0 / max(h - fy, 1.5e-3); // large near the horizon
95
- float depthMin = 1.0 / h; // depth at the very front (fy = 0)
96
-
97
- // Grid coordinates: x widens with depth (perspective); uGridDensity sets the
98
- // cell count; the scroll is in cell units so its rate is density-independent.
99
- vec2 g = vec2(fx * depth, depth) * uGridDensity;
100
- g.y += uTime * uSpeed * 2.0;
101
- vec2 cell = abs(fract(g) - 0.5); // 0 on a line .. 0.5 mid-cell, per axis
102
-
103
- // Per-axis, depth-scaled line half-width: the rungs (g.y) compress toward the
104
- // horizon as depth^2 and the verticals (g.x) ~linearly, so widening each axis'
105
- // line band at its own compression rate holds the on-screen line width roughly
106
- // constant. Far lines fuse into a band instead of a sub-pixel sheet that
107
- // shimmers as it scrolls; near lines stay crisp. Written 1 - smoothstep(0, w, .)
108
- // (NOT the reversed-edge smoothstep(w, 0, .), which is undefined on GLSL ES /
109
- // Metal) and derivative-free, so it is portable and mobile-precision safe.
110
- vec2 w = max(vec2(depth, depth * depth * 0.2) * uGridDensity * 0.0013, vec2(1e-4));
111
- vec2 core = 1.0 - smoothstep(vec2(0.0), w, cell);
112
- vec2 halo = (1.0 - smoothstep(vec2(0.0), w * 6.0, cell)) * (0.5 * uGridGlow);
113
- float gridVal = clamp(core.x + core.y + halo.x + halo.y, 0.0, 1.5);
114
-
115
- // Distance fog: fade the grid out toward the horizon for the converging look.
116
- float fog = clamp(1.0 - (depth - depthMin) / (depthMin * 10.0), 0.0, 1.0);
117
- fog *= fog;
118
-
119
- vec3 floorBase = mix(vec3(0.0), uSkyHorizon * 0.16, fog * 0.6);
120
- col = floorBase + uGridColor * gridVal * fog * calm;
93
+ // --- FLOOR --- perspective grid, a faithful port of a known-good community
94
+ // outrun grid (prior versions read as a too-dense, flickering sheet). Work in
95
+ // the reference's centered frame: cx is full-width centered x, dy is the
96
+ // centered distance BELOW the horizon. The additive offset caps the depth at
97
+ // the horizon, and putting big cells in the near field (low min depth) is what
98
+ // keeps the line spacing above a pixel, so it neither sheets nor shimmers.
99
+ float cx = 2.0 * fx; // = (2*vUv.x - 1) * aspect
100
+ float dy = 2.0 * (h - fy); // centered distance below the horizon (> 0)
101
+
102
+ // Cell count: uGridDensity 4 -> numerator 1.0 (sparse, big near cells). x
103
+ // widens with depth (the 0.7 factor); scroll is a slow drift toward the viewer.
104
+ float num = uGridDensity * 0.25;
105
+ float depth = num / (dy + 0.05);
106
+ vec2 g = vec2(cx * depth * 0.7, depth);
107
+ g.y += uTime * uSpeed * 0.3;
108
+ vec2 e = abs(fract(g) - 0.5);
109
+
110
+ // PIXEL-CALIBRATED line width: each line core is a fixed ~px wide in SCREEN
111
+ // PIXELS (via uResolution), the same at every depth and every resolution. The
112
+ // old depth^2*const width was constant in theory but landed sub-pixel, so
113
+ // discrete sampling rendered some rungs thick and others thin -> the uneven
114
+ // rungs that read as flicker. Solving sz so screen thickness == px: the rungs
115
+ // (g.y, compression ~depth^2/num) need sz.y = depth^2 * pf / num; the verticals
116
+ // (g.x) need sz.x = depth * 0.7 * pf. uGridGlow sets px (0.5 -> 2 px).
117
+ float pf = (uGridGlow * 4.0) / uResolution.y;
118
+ vec2 sz = vec2(depth * 0.7 * pf, depth * depth * pf / num);
119
+ vec2 lines = 1.0 - smoothstep(vec2(0.0), sz, e);
120
+ lines += (1.0 - smoothstep(vec2(0.0), sz * 4.0, e)) * 0.5;
121
+ float gridVal = clamp(lines.x + lines.y, 0.0, 1.0);
122
+
123
+ // Fade the grid out BEFORE rung spacing goes sub-pixel near the horizon: that
124
+ // zone moires/shimmers as it scrolls no matter how clean each line is (a second
125
+ // flicker source, separate from line width). subpx is the depth at which rungs
126
+ // are ~2 px apart, derived from uResolution; the seam glow below covers the
127
+ // faded edge so the horizon still reads as a bright line.
128
+ float subpx = sqrt(num * uResolution.y * 0.25);
129
+ gridVal *= 1.0 - smoothstep(subpx * 0.55, subpx, depth);
130
+
131
+ vec3 floorBase = uSkyHorizon * 0.06;
132
+ col = mix(floorBase, uGridColor, gridVal * calm);
121
133
  }
122
134
 
123
135
  // Glowing horizon seam where floor meets sky.
@@ -5,6 +5,9 @@
5
5
  // three color pairs (grid, sun, sky) are the big levers. Shader source is
6
6
  // shaders/outrun-grid/outrun-grid.frag.
7
7
 
8
+ // Cost: CHEAP -- ~0.53 ms/draw, ~1.8x plasma (shader:view meter
9
+ // @1920, Intel UHD 770, default uniforms, 2026-06-14). Loop-free perspective grid.
10
+ // Rubric + full ranking: ../README.md ("Cost").
8
11
  import type { RGB } from '../../../src/lib/primitives.types';
9
12
  import type { UniformControl } from '../_shared/types';
10
13
 
@@ -61,8 +64,8 @@ export const OUTRUN_GRID_CONTROLS: readonly UniformControl[] = [
61
64
  {
62
65
  name: 'uGridDensity',
63
66
  kind: 'float',
64
- default: 4,
65
- min: 4,
67
+ default: 3,
68
+ min: 1,
66
69
  max: 32,
67
70
  step: 1,
68
71
  doc: 'Grid cells across the floor.',
@@ -4,6 +4,9 @@
4
4
  // `plasma` book presets (ocean/sunset/mint/fast) via ShaderOptionsMap; this file
5
5
  // is the layer-side type + control surface. Shader source is shaders/plasma.frag.
6
6
 
7
+ // Cost: CHEAP -- ~0.35 ms/draw, ~1x plasma (shader:view meter
8
+ // @1920, Intel UHD 770, default uniforms, 2026-06-14). The cost floor: a bare sum of sines.
9
+ // Rubric + full ranking: ../README.md ("Cost").
7
10
  import type { RGB } from '../../../src/lib/primitives.types';
8
11
  import type { UniformControl } from '../_shared/types';
9
12
 
@@ -3,6 +3,9 @@
3
3
  // scale), same opaque BACKGROUND-layer role and same uniform surface. Shader
4
4
  // source is ./simianlights.frag.
5
5
 
6
+ // Cost: HEAVY -- ~11 ms/draw, ~39x plasma (shader:view meter
7
+ // @1920, Intel UHD 770, default uniforms, 2026-06-14).
8
+ // Rubric + full ranking: ../README.md ("Cost").
6
9
  import type { RGB } from '../../../src/lib/primitives.types';
7
10
  import type { UniformControl } from '../_shared/types';
8
11
 
@@ -1 +1 @@
1
- {"version":3,"file":"anamorphic-lensflare.d.ts","sourceRoot":"","sources":["../../../../catalog/shaders/anamorphic-lensflare/anamorphic-lensflare.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,mCAAmC,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvD,kEAAkE;AAClE,MAAM,MAAM,2BAA2B,GAAG;IACxC,6DAA6D;IAC7D,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,2CAA2C;IAC3C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,qCAAqC;IACrC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,gDAAgD;IAChD,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,wDAAwD;IACxD,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,mDAAmD;IACnD,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,+BAA+B;IAC/B,QAAQ,CAAC,UAAU,EAAE,GAAG,CAAC;IACzB,+BAA+B;IAC/B,QAAQ,CAAC,UAAU,EAAE,GAAG,CAAC;IACzB,qCAAqC;IACrC,QAAQ,CAAC,UAAU,EAAE,GAAG,CAAC;CAC1B,CAAC;AAEF,mGAAmG;AACnG,eAAO,MAAM,6BAA6B,EAAE,SAAS,cAAc,EAyElE,CAAC"}
1
+ {"version":3,"file":"anamorphic-lensflare.d.ts","sourceRoot":"","sources":["../../../../catalog/shaders/anamorphic-lensflare/anamorphic-lensflare.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,mCAAmC,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvD,kEAAkE;AAClE,MAAM,MAAM,2BAA2B,GAAG;IACxC,6DAA6D;IAC7D,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,2CAA2C;IAC3C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,qCAAqC;IACrC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,gDAAgD;IAChD,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,wDAAwD;IACxD,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,mDAAmD;IACnD,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,+BAA+B;IAC/B,QAAQ,CAAC,UAAU,EAAE,GAAG,CAAC;IACzB,+BAA+B;IAC/B,QAAQ,CAAC,UAAU,EAAE,GAAG,CAAC;IACzB,qCAAqC;IACrC,QAAQ,CAAC,UAAU,EAAE,GAAG,CAAC;CAC1B,CAAC;AAEF,mGAAmG;AACnG,eAAO,MAAM,6BAA6B,EAAE,SAAS,cAAc,EAyElE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"anamorphic-lensflare.js","sourceRoot":"","sources":["../../../../catalog/shaders/anamorphic-lensflare/anamorphic-lensflare.ts"],"names":[],"mappings":";AAAA,yEAAyE;AACzE,4EAA4E;AAC5E,gFAAgF;AAChF,kFAAkF;AAClF,6EAA6E;;;AA2B7E,mGAAmG;AACtF,QAAA,6BAA6B,GAA8B;IACtE;QACE,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,IAAI;QACb,GAAG,EAAE,CAAC;QACN,GAAG,EAAE,CAAC;QACN,IAAI,EAAE,IAAI;QACV,GAAG,EAAE,wCAAwC;KAC9C;IACD;QACE,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,IAAI;QACb,GAAG,EAAE,CAAC;QACN,GAAG,EAAE,CAAC;QACN,IAAI,EAAE,IAAI;QACV,GAAG,EAAE,gCAAgC;KACtC;IACD;QACE,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,IAAI;QACb,GAAG,EAAE,CAAC;QACN,GAAG,EAAE,CAAC;QACN,IAAI,EAAE,IAAI;QACV,GAAG,EAAE,qBAAqB;KAC3B;IACD;QACE,IAAI,EAAE,eAAe;QACrB,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,IAAI;QACb,GAAG,EAAE,CAAC;QACN,GAAG,EAAE,GAAG;QACR,IAAI,EAAE,IAAI;QACV,GAAG,EAAE,0BAA0B;KAChC;IACD;QACE,IAAI,EAAE,cAAc;QACpB,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,GAAG;QACZ,GAAG,EAAE,EAAE;QACP,GAAG,EAAE,GAAG;QACR,IAAI,EAAE,CAAC;QACP,GAAG,EAAE,0CAA0C;KAChD;IACD;QACE,IAAI,EAAE,gBAAgB;QACtB,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,IAAI;QACb,GAAG,EAAE,CAAC;QACN,GAAG,EAAE,GAAG;QACR,IAAI,EAAE,IAAI;QACV,GAAG,EAAE,yBAAyB;KAC/B;IACD;QACE,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC;QAC1B,GAAG,EAAE,0BAA0B;KAChC;IACD;QACE,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC;QAC1B,GAAG,EAAE,0BAA0B;KAChC;IACD;QACE,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC;QAC1B,GAAG,EAAE,gCAAgC;KACtC;CACF,CAAC","sourcesContent":["// Anamorphic lens-flare layer-shader interface: typed uniforms + control\n// descriptor. A cinematic camera-lens artifact, a transparent OVERLAY layer\n// (use blend 'additive'). All three palette colors are exposed so the flare can\n// be color-matched to whatever sits behind it (e.g. the simianlights field in the\n// observation-deck composite). Shader source is ./anamorphic-lensflare.frag.\n\nimport type { RGB } from '../../../src/lib/primitives.types';\nimport type { UniformControl } from '../_shared/types';\n\n/** Typed uniforms for the `anamorphic-lensflare` layer shader. */\nexport type AnamorphicLensFlareUniforms = {\n /** Flare X position, 0..1 (it drifts slowly around this). */\n readonly uFlareX: number;\n /** Flare Y position, 0..1 (0 = bottom). */\n readonly uFlareY: number;\n /** Overall brightness multiplier. */\n readonly uIntensity: number;\n /** Horizontal streak reach; higher = longer. */\n readonly uStreakLength: number;\n /** Main streak vertical tightness; higher = thinner. */\n readonly uStreakWidth: number;\n /** Optical-ghost strength along the flare axis. */\n readonly uGhostStrength: number;\n /** Core / warm streak tint. */\n readonly uWarmColor: RGB;\n /** Halo / wide-streak tint. */\n readonly uBlueColor: RGB;\n /** Secondary streak / ghost tint. */\n readonly uPinkColor: RGB;\n};\n\n/** The `anamorphic-lensflare` shader's tunable uniforms; defaults are the stock cinematic look. */\nexport const ANAMORPHIC_LENSFLARE_CONTROLS: readonly UniformControl[] = [\n {\n name: 'uFlareX',\n kind: 'float',\n default: 0.68,\n min: 0,\n max: 1,\n step: 0.01,\n doc: 'Flare X position (drifts around this).',\n },\n {\n name: 'uFlareY',\n kind: 'float',\n default: 0.34,\n min: 0,\n max: 1,\n step: 0.01,\n doc: 'Flare Y position (0 = bottom).',\n },\n {\n name: 'uIntensity',\n kind: 'float',\n default: 0.85,\n min: 0,\n max: 2,\n step: 0.01,\n doc: 'Overall brightness.',\n },\n {\n name: 'uStreakLength',\n kind: 'float',\n default: 0.55,\n min: 0,\n max: 1.5,\n step: 0.01,\n doc: 'Horizontal streak reach.',\n },\n {\n name: 'uStreakWidth',\n kind: 'float',\n default: 210,\n min: 20,\n max: 400,\n step: 5,\n doc: 'Main streak tightness; higher = thinner.',\n },\n {\n name: 'uGhostStrength',\n kind: 'float',\n default: 0.55,\n min: 0,\n max: 1.5,\n step: 0.01,\n doc: 'Optical-ghost strength.',\n },\n {\n name: 'uWarmColor',\n kind: 'color',\n default: [1.0, 0.82, 0.58],\n doc: 'Core / warm streak tint.',\n },\n {\n name: 'uBlueColor',\n kind: 'color',\n default: [0.35, 0.55, 1.0],\n doc: 'Halo / wide-streak tint.',\n },\n {\n name: 'uPinkColor',\n kind: 'color',\n default: [1.0, 0.45, 0.95],\n doc: 'Secondary streak / ghost tint.',\n },\n];\n"]}
1
+ {"version":3,"file":"anamorphic-lensflare.js","sourceRoot":"","sources":["../../../../catalog/shaders/anamorphic-lensflare/anamorphic-lensflare.ts"],"names":[],"mappings":";AAAA,yEAAyE;AACzE,4EAA4E;AAC5E,gFAAgF;AAChF,kFAAkF;AAClF,6EAA6E;;;AA8B7E,mGAAmG;AACtF,QAAA,6BAA6B,GAA8B;IACtE;QACE,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,IAAI;QACb,GAAG,EAAE,CAAC;QACN,GAAG,EAAE,CAAC;QACN,IAAI,EAAE,IAAI;QACV,GAAG,EAAE,wCAAwC;KAC9C;IACD;QACE,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,IAAI;QACb,GAAG,EAAE,CAAC;QACN,GAAG,EAAE,CAAC;QACN,IAAI,EAAE,IAAI;QACV,GAAG,EAAE,gCAAgC;KACtC;IACD;QACE,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,IAAI;QACb,GAAG,EAAE,CAAC;QACN,GAAG,EAAE,CAAC;QACN,IAAI,EAAE,IAAI;QACV,GAAG,EAAE,qBAAqB;KAC3B;IACD;QACE,IAAI,EAAE,eAAe;QACrB,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,IAAI;QACb,GAAG,EAAE,CAAC;QACN,GAAG,EAAE,GAAG;QACR,IAAI,EAAE,IAAI;QACV,GAAG,EAAE,0BAA0B;KAChC;IACD;QACE,IAAI,EAAE,cAAc;QACpB,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,GAAG;QACZ,GAAG,EAAE,EAAE;QACP,GAAG,EAAE,GAAG;QACR,IAAI,EAAE,CAAC;QACP,GAAG,EAAE,0CAA0C;KAChD;IACD;QACE,IAAI,EAAE,gBAAgB;QACtB,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,IAAI;QACb,GAAG,EAAE,CAAC;QACN,GAAG,EAAE,GAAG;QACR,IAAI,EAAE,IAAI;QACV,GAAG,EAAE,yBAAyB;KAC/B;IACD;QACE,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC;QAC1B,GAAG,EAAE,0BAA0B;KAChC;IACD;QACE,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC;QAC1B,GAAG,EAAE,0BAA0B;KAChC;IACD;QACE,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC;QAC1B,GAAG,EAAE,gCAAgC;KACtC;CACF,CAAC","sourcesContent":["// Anamorphic lens-flare layer-shader interface: typed uniforms + control\n// descriptor. A cinematic camera-lens artifact, a transparent OVERLAY layer\n// (use blend 'additive'). All three palette colors are exposed so the flare can\n// be color-matched to whatever sits behind it (e.g. the simianlights field in the\n// observation-deck composite). Shader source is ./anamorphic-lensflare.frag.\n\n// Cost: CHEAP -- ~0.91 ms/draw, ~3.1x plasma (shader:view meter\n// @1920, Intel UHD 770, default uniforms, 2026-06-14).\n// Rubric + full ranking: ../README.md (\"Cost\").\nimport type { RGB } from '../../../src/lib/primitives.types';\nimport type { UniformControl } from '../_shared/types';\n\n/** Typed uniforms for the `anamorphic-lensflare` layer shader. */\nexport type AnamorphicLensFlareUniforms = {\n /** Flare X position, 0..1 (it drifts slowly around this). */\n readonly uFlareX: number;\n /** Flare Y position, 0..1 (0 = bottom). */\n readonly uFlareY: number;\n /** Overall brightness multiplier. */\n readonly uIntensity: number;\n /** Horizontal streak reach; higher = longer. */\n readonly uStreakLength: number;\n /** Main streak vertical tightness; higher = thinner. */\n readonly uStreakWidth: number;\n /** Optical-ghost strength along the flare axis. */\n readonly uGhostStrength: number;\n /** Core / warm streak tint. */\n readonly uWarmColor: RGB;\n /** Halo / wide-streak tint. */\n readonly uBlueColor: RGB;\n /** Secondary streak / ghost tint. */\n readonly uPinkColor: RGB;\n};\n\n/** The `anamorphic-lensflare` shader's tunable uniforms; defaults are the stock cinematic look. */\nexport const ANAMORPHIC_LENSFLARE_CONTROLS: readonly UniformControl[] = [\n {\n name: 'uFlareX',\n kind: 'float',\n default: 0.68,\n min: 0,\n max: 1,\n step: 0.01,\n doc: 'Flare X position (drifts around this).',\n },\n {\n name: 'uFlareY',\n kind: 'float',\n default: 0.34,\n min: 0,\n max: 1,\n step: 0.01,\n doc: 'Flare Y position (0 = bottom).',\n },\n {\n name: 'uIntensity',\n kind: 'float',\n default: 0.85,\n min: 0,\n max: 2,\n step: 0.01,\n doc: 'Overall brightness.',\n },\n {\n name: 'uStreakLength',\n kind: 'float',\n default: 0.55,\n min: 0,\n max: 1.5,\n step: 0.01,\n doc: 'Horizontal streak reach.',\n },\n {\n name: 'uStreakWidth',\n kind: 'float',\n default: 210,\n min: 20,\n max: 400,\n step: 5,\n doc: 'Main streak tightness; higher = thinner.',\n },\n {\n name: 'uGhostStrength',\n kind: 'float',\n default: 0.55,\n min: 0,\n max: 1.5,\n step: 0.01,\n doc: 'Optical-ghost strength.',\n },\n {\n name: 'uWarmColor',\n kind: 'color',\n default: [1.0, 0.82, 0.58],\n doc: 'Core / warm streak tint.',\n },\n {\n name: 'uBlueColor',\n kind: 'color',\n default: [0.35, 0.55, 1.0],\n doc: 'Halo / wide-streak tint.',\n },\n {\n name: 'uPinkColor',\n kind: 'color',\n default: [1.0, 0.45, 0.95],\n doc: 'Secondary streak / ghost tint.',\n },\n];\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"aurora-silk.d.ts","sourceRoot":"","sources":["../../../../catalog/shaders/aurora-silk/aurora-silk.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,mCAAmC,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvD,yDAAyD;AACzD,MAAM,MAAM,kBAAkB,GAAG;IAC/B,6CAA6C;IAC7C,QAAQ,CAAC,SAAS,EAAE,GAAG,CAAC;IACxB,8CAA8C;IAC9C,QAAQ,CAAC,UAAU,EAAE,GAAG,CAAC;IACzB,kEAAkE;IAClE,QAAQ,CAAC,YAAY,EAAE,GAAG,CAAC;IAC3B,kCAAkC;IAClC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,oEAAoE;IACpE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,iCAAiC;IACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,6BAA6B;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,yDAAyD;IACzD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,8DAA8D;IAC9D,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,mFAAmF;AACnF,eAAO,MAAM,oBAAoB,EAAE,SAAS,cAAc,EA0DzD,CAAC"}
1
+ {"version":3,"file":"aurora-silk.d.ts","sourceRoot":"","sources":["../../../../catalog/shaders/aurora-silk/aurora-silk.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,mCAAmC,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvD,yDAAyD;AACzD,MAAM,MAAM,kBAAkB,GAAG;IAC/B,6CAA6C;IAC7C,QAAQ,CAAC,SAAS,EAAE,GAAG,CAAC;IACxB,8CAA8C;IAC9C,QAAQ,CAAC,UAAU,EAAE,GAAG,CAAC;IACzB,kEAAkE;IAClE,QAAQ,CAAC,YAAY,EAAE,GAAG,CAAC;IAC3B,kCAAkC;IAClC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,oEAAoE;IACpE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,iCAAiC;IACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,6BAA6B;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,yDAAyD;IACzD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,8DAA8D;IAC9D,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,mFAAmF;AACnF,eAAO,MAAM,oBAAoB,EAAE,SAAS,cAAc,EA0DzD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"aurora-silk.js","sourceRoot":"","sources":["../../../../catalog/shaders/aurora-silk/aurora-silk.ts"],"names":[],"mappings":";AAAA,2EAA2E;AAC3E,6EAA6E;AAC7E,0EAA0E;AAC1E,0EAA0E;AAC1E,8EAA8E;AAC9E,4BAA4B;;;AA2B5B,mFAAmF;AACtE,QAAA,oBAAoB,GAA8B;IAC7D,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,qBAAqB,EAAE;IAC7F,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,sBAAsB,EAAE;IAC/F,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,cAAc,EAAE;IACzF;QACE,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,CAAC;QACV,GAAG,EAAE,CAAC;QACN,GAAG,EAAE,CAAC;QACN,IAAI,EAAE,CAAC;QACP,GAAG,EAAE,uBAAuB;KAC7B;IACD;QACE,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,GAAG;QACZ,GAAG,EAAE,CAAC;QACN,GAAG,EAAE,CAAC;QACN,IAAI,EAAE,IAAI;QACV,GAAG,EAAE,sCAAsC;KAC5C;IACD;QACE,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,GAAG;QACZ,GAAG,EAAE,CAAC;QACN,GAAG,EAAE,IAAI;QACT,IAAI,EAAE,IAAI;QACV,GAAG,EAAE,0BAA0B;KAChC;IACD;QACE,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,GAAG;QACZ,GAAG,EAAE,CAAC;QACN,GAAG,EAAE,CAAC;QACN,IAAI,EAAE,IAAI;QACV,GAAG,EAAE,wBAAwB;KAC9B;IACD;QACE,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,GAAG;QACZ,GAAG,EAAE,CAAC;QACN,GAAG,EAAE,CAAC;QACN,IAAI,EAAE,IAAI;QACV,GAAG,EAAE,mCAAmC;KACzC;IACD;QACE,IAAI,EAAE,OAAO;QACb,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,CAAC;QACV,GAAG,EAAE,CAAC;QACN,GAAG,EAAE,CAAC;QACN,IAAI,EAAE,IAAI;QACV,GAAG,EAAE,4CAA4C;KAClD;CACF,CAAC","sourcesContent":["// Aurora-silk layer-shader interface: typed uniforms + control descriptor.\n// Noise-warped ribbon bands over a two-stop gradient (OS-swoosh through SaaS\n// gradient), an opaque BACKGROUND layer (issue #61). One aurora-silk.frag\n// fans out into the book presets (corporate-silk, dusk, polar) by varying\n// these uniforms; the palette and uStyle are the big levers. Shader source is\n// shaders/aurora-silk.frag.\n\nimport type { RGB } from '../../../src/lib/primitives.types';\nimport type { UniformControl } from '../_shared/types';\n\n/** Typed uniforms for the `aurora-silk` layer shader. */\nexport type AuroraSilkUniforms = {\n /** Gradient color at the flow's low side. */\n readonly uColorLow: RGB;\n /** Gradient color at the flow's high side. */\n readonly uColorHigh: RGB;\n /** Ribbon tint; back-of-stack ribbons shade toward uColorHigh. */\n readonly uRibbonColor: RGB;\n /** Visible ribbon count, 1..5. */\n readonly uRibbons: number;\n /** Ribbon edge softness; 0 = paper-cut crisp, 1 = fully diffuse. */\n readonly uSoftness: number;\n /** Flow direction in radians. */\n readonly uAngle: number;\n /** Drift rate; 0 freezes. */\n readonly uSpeed: number;\n /** Aesthetic morph: 0 flat paper-cut, 1 glowing silk. */\n readonly uStyle: number;\n /** Eases ribbons at frame center (the face zone); 0 = off. */\n readonly uCalm: number;\n};\n\n/** The `aurora-silk` shader's tunables; defaults are the \"corporate silk\" look. */\nexport const AURORA_SILK_CONTROLS: readonly UniformControl[] = [\n { name: 'uColorLow', kind: 'color', default: [0.08, 0.11, 0.22], doc: 'Gradient low color.' },\n { name: 'uColorHigh', kind: 'color', default: [0.16, 0.29, 0.48], doc: 'Gradient high color.' },\n { name: 'uRibbonColor', kind: 'color', default: [0.36, 0.62, 0.85], doc: 'Ribbon tint.' },\n {\n name: 'uRibbons',\n kind: 'float',\n default: 4,\n min: 1,\n max: 5,\n step: 1,\n doc: 'Visible ribbon count.',\n },\n {\n name: 'uSoftness',\n kind: 'float',\n default: 0.7,\n min: 0,\n max: 1,\n step: 0.01,\n doc: 'Ribbon edge softness; 0 = paper-cut.',\n },\n {\n name: 'uAngle',\n kind: 'float',\n default: 0.5,\n min: 0,\n max: 6.28,\n step: 0.01,\n doc: 'Flow direction, radians.',\n },\n {\n name: 'uSpeed',\n kind: 'float',\n default: 0.6,\n min: 0,\n max: 2,\n step: 0.01,\n doc: 'Drift rate; 0 freezes.',\n },\n {\n name: 'uStyle',\n kind: 'float',\n default: 0.8,\n min: 0,\n max: 1,\n step: 0.01,\n doc: '0 flat paper-cut, 1 glowing silk.',\n },\n {\n name: 'uCalm',\n kind: 'float',\n default: 0,\n min: 0,\n max: 1,\n step: 0.01,\n doc: 'Eases ribbons at frame center (face zone).',\n },\n];\n"]}
1
+ {"version":3,"file":"aurora-silk.js","sourceRoot":"","sources":["../../../../catalog/shaders/aurora-silk/aurora-silk.ts"],"names":[],"mappings":";AAAA,2EAA2E;AAC3E,6EAA6E;AAC7E,0EAA0E;AAC1E,0EAA0E;AAC1E,8EAA8E;AAC9E,4BAA4B;;;AA8B5B,mFAAmF;AACtE,QAAA,oBAAoB,GAA8B;IAC7D,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,qBAAqB,EAAE;IAC7F,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,sBAAsB,EAAE;IAC/F,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,cAAc,EAAE;IACzF;QACE,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,CAAC;QACV,GAAG,EAAE,CAAC;QACN,GAAG,EAAE,CAAC;QACN,IAAI,EAAE,CAAC;QACP,GAAG,EAAE,uBAAuB;KAC7B;IACD;QACE,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,GAAG;QACZ,GAAG,EAAE,CAAC;QACN,GAAG,EAAE,CAAC;QACN,IAAI,EAAE,IAAI;QACV,GAAG,EAAE,sCAAsC;KAC5C;IACD;QACE,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,GAAG;QACZ,GAAG,EAAE,CAAC;QACN,GAAG,EAAE,IAAI;QACT,IAAI,EAAE,IAAI;QACV,GAAG,EAAE,0BAA0B;KAChC;IACD;QACE,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,GAAG;QACZ,GAAG,EAAE,CAAC;QACN,GAAG,EAAE,CAAC;QACN,IAAI,EAAE,IAAI;QACV,GAAG,EAAE,wBAAwB;KAC9B;IACD;QACE,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,GAAG;QACZ,GAAG,EAAE,CAAC;QACN,GAAG,EAAE,CAAC;QACN,IAAI,EAAE,IAAI;QACV,GAAG,EAAE,mCAAmC;KACzC;IACD;QACE,IAAI,EAAE,OAAO;QACb,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,CAAC;QACV,GAAG,EAAE,CAAC;QACN,GAAG,EAAE,CAAC;QACN,IAAI,EAAE,IAAI;QACV,GAAG,EAAE,4CAA4C;KAClD;CACF,CAAC","sourcesContent":["// Aurora-silk layer-shader interface: typed uniforms + control descriptor.\n// Noise-warped ribbon bands over a two-stop gradient (OS-swoosh through SaaS\n// gradient), an opaque BACKGROUND layer (issue #61). One aurora-silk.frag\n// fans out into the book presets (corporate-silk, dusk, polar) by varying\n// these uniforms; the palette and uStyle are the big levers. Shader source is\n// shaders/aurora-silk.frag.\n\n// Cost: MODERATE -- ~1.9 ms/draw, ~6.5x plasma (shader:view meter\n// @1920, Intel UHD 770, default uniforms, 2026-06-14).\n// Rubric + full ranking: ../README.md (\"Cost\").\nimport type { RGB } from '../../../src/lib/primitives.types';\nimport type { UniformControl } from '../_shared/types';\n\n/** Typed uniforms for the `aurora-silk` layer shader. */\nexport type AuroraSilkUniforms = {\n /** Gradient color at the flow's low side. */\n readonly uColorLow: RGB;\n /** Gradient color at the flow's high side. */\n readonly uColorHigh: RGB;\n /** Ribbon tint; back-of-stack ribbons shade toward uColorHigh. */\n readonly uRibbonColor: RGB;\n /** Visible ribbon count, 1..5. */\n readonly uRibbons: number;\n /** Ribbon edge softness; 0 = paper-cut crisp, 1 = fully diffuse. */\n readonly uSoftness: number;\n /** Flow direction in radians. */\n readonly uAngle: number;\n /** Drift rate; 0 freezes. */\n readonly uSpeed: number;\n /** Aesthetic morph: 0 flat paper-cut, 1 glowing silk. */\n readonly uStyle: number;\n /** Eases ribbons at frame center (the face zone); 0 = off. */\n readonly uCalm: number;\n};\n\n/** The `aurora-silk` shader's tunables; defaults are the \"corporate silk\" look. */\nexport const AURORA_SILK_CONTROLS: readonly UniformControl[] = [\n { name: 'uColorLow', kind: 'color', default: [0.08, 0.11, 0.22], doc: 'Gradient low color.' },\n { name: 'uColorHigh', kind: 'color', default: [0.16, 0.29, 0.48], doc: 'Gradient high color.' },\n { name: 'uRibbonColor', kind: 'color', default: [0.36, 0.62, 0.85], doc: 'Ribbon tint.' },\n {\n name: 'uRibbons',\n kind: 'float',\n default: 4,\n min: 1,\n max: 5,\n step: 1,\n doc: 'Visible ribbon count.',\n },\n {\n name: 'uSoftness',\n kind: 'float',\n default: 0.7,\n min: 0,\n max: 1,\n step: 0.01,\n doc: 'Ribbon edge softness; 0 = paper-cut.',\n },\n {\n name: 'uAngle',\n kind: 'float',\n default: 0.5,\n min: 0,\n max: 6.28,\n step: 0.01,\n doc: 'Flow direction, radians.',\n },\n {\n name: 'uSpeed',\n kind: 'float',\n default: 0.6,\n min: 0,\n max: 2,\n step: 0.01,\n doc: 'Drift rate; 0 freezes.',\n },\n {\n name: 'uStyle',\n kind: 'float',\n default: 0.8,\n min: 0,\n max: 1,\n step: 0.01,\n doc: '0 flat paper-cut, 1 glowing silk.',\n },\n {\n name: 'uCalm',\n kind: 'float',\n default: 0,\n min: 0,\n max: 1,\n step: 0.01,\n doc: 'Eases ribbons at frame center (face zone).',\n },\n];\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"clouds.d.ts","sourceRoot":"","sources":["../../../../catalog/shaders/clouds/clouds.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,mCAAmC,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvD,oDAAoD;AACpD,MAAM,MAAM,cAAc,GAAG;IAC3B,kCAAkC;IAClC,QAAQ,CAAC,YAAY,EAAE,GAAG,CAAC;IAC3B,0BAA0B;IAC1B,QAAQ,CAAC,aAAa,EAAE,GAAG,CAAC;IAC5B,+BAA+B;IAC/B,QAAQ,CAAC,gBAAgB,EAAE,GAAG,CAAC;IAC/B,oCAAoC;IACpC,QAAQ,CAAC,eAAe,EAAE,GAAG,CAAC;IAC9B,uDAAuD;IACvD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,+EAA+E;IAC/E,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,iDAAiD;IACjD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,+EAA+E;IAC/E,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,kEAAkE;IAClE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,uEAAuE;IACvE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,mDAAmD;IACnD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,eAAe,EAAE,SAAS,cAAc,EAmFpD,CAAC"}
1
+ {"version":3,"file":"clouds.d.ts","sourceRoot":"","sources":["../../../../catalog/shaders/clouds/clouds.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,mCAAmC,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvD,oDAAoD;AACpD,MAAM,MAAM,cAAc,GAAG;IAC3B,kCAAkC;IAClC,QAAQ,CAAC,YAAY,EAAE,GAAG,CAAC;IAC3B,0BAA0B;IAC1B,QAAQ,CAAC,aAAa,EAAE,GAAG,CAAC;IAC5B,+BAA+B;IAC/B,QAAQ,CAAC,gBAAgB,EAAE,GAAG,CAAC;IAC/B,oCAAoC;IACpC,QAAQ,CAAC,eAAe,EAAE,GAAG,CAAC;IAC9B,uDAAuD;IACvD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,+EAA+E;IAC/E,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,iDAAiD;IACjD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,+EAA+E;IAC/E,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,kEAAkE;IAClE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,uEAAuE;IACvE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,mDAAmD;IACnD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,eAAe,EAAE,SAAS,cAAc,EAmFpD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"clouds.js","sourceRoot":"","sources":["../../../../catalog/shaders/clouds/clouds.ts"],"names":[],"mappings":";AAAA,wEAAwE;AACxE,4EAA4E;AAC5E,2EAA2E;AAC3E,8EAA8E;AAC9E,mDAAmD;;;AA+BnD;;;;GAIG;AACU,QAAA,eAAe,GAA8B;IACxD;QACE,IAAI,EAAE,cAAc;QACpB,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;QAC3B,GAAG,EAAE,6BAA6B;KACnC;IACD,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,qBAAqB,EAAE;IAChG;QACE,IAAI,EAAE,kBAAkB;QACxB,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC;QACzB,GAAG,EAAE,0BAA0B;KAChC;IACD;QACE,IAAI,EAAE,iBAAiB;QACvB,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;QAC3B,GAAG,EAAE,+BAA+B;KACrC;IACD;QACE,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,GAAG;QACZ,GAAG,EAAE,GAAG;QACR,GAAG,EAAE,GAAG;QACR,IAAI,EAAE,IAAI;QACV,GAAG,EAAE,qBAAqB;KAC3B;IACD;QACE,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,GAAG;QACZ,GAAG,EAAE,IAAI;QACT,GAAG,EAAE,GAAG;QACR,IAAI,EAAE,IAAI;QACV,GAAG,EAAE,0CAA0C;KAChD;IACD;QACE,IAAI,EAAE,aAAa;QACnB,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,GAAG;QACZ,GAAG,EAAE,GAAG;QACR,GAAG,EAAE,GAAG;QACR,IAAI,EAAE,IAAI;QACV,GAAG,EAAE,yBAAyB;KAC/B;IACD;QACE,IAAI,EAAE,aAAa;QACnB,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,IAAI;QACb,GAAG,EAAE,GAAG;QACR,GAAG,EAAE,GAAG;QACR,IAAI,EAAE,IAAI;QACV,GAAG,EAAE,4CAA4C;KAClD;IACD;QACE,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,IAAI;QACb,GAAG,EAAE,IAAI;QACT,GAAG,EAAE,GAAG;QACR,IAAI,EAAE,KAAK;QACX,GAAG,EAAE,0CAA0C;KAChD;IACD;QACE,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,IAAI;QACb,GAAG,EAAE,GAAG;QACR,GAAG,EAAE,GAAG;QACR,IAAI,EAAE,IAAI;QACV,GAAG,EAAE,sCAAsC;KAC5C;IACD;QACE,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,IAAI;QACb,GAAG,EAAE,GAAG;QACR,GAAG,EAAE,GAAG;QACR,IAAI,EAAE,IAAI;QACV,GAAG,EAAE,sBAAsB;KAC5B;CACF,CAAC","sourcesContent":["// Clouds layer-shader interface: the typed uniforms + a runtime control\n// descriptor. The descriptor is the single source the demo generates tuning\n// controls from, and it documents every uniform (GLSL can't carry this; TS\n// shows up in editors and for LLMs). This is the first of the per-shader type\n// files; the shader source is shaders/clouds.frag.\n\nimport type { RGB } from '../../../src/lib/primitives.types';\nimport type { UniformControl } from '../_shared/types';\n\n/** Typed uniforms for the `clouds` layer shader. */\nexport type CloudsUniforms = {\n /** Sky color near the horizon. */\n readonly uSkyLowColor: RGB;\n /** Sky color overhead. */\n readonly uSkyHighColor: RGB;\n /** Lit (upper) cloud color. */\n readonly uCloudLightColor: RGB;\n /** Shadowed (lower) cloud color. */\n readonly uCloudDarkColor: RGB;\n /** Overall brightness; lower for night, ~1 for day. */\n readonly uExposure: number;\n /** Raymarch step distance; smaller = finer/slower, larger = coarser/faster. */\n readonly uStepSize: number;\n /** How fast the clouds drift. 0 freezes them. */\n readonly uCloudSpeed: number;\n /** Cloud noise frequency; smaller = larger/broader shapes, larger = busier. */\n readonly uCloudScale: number;\n /** Opacity contributed per sample; higher = more solid clouds. */\n readonly uDensity: number;\n /** Noise threshold; lower = more cloud cover, higher = clearer sky. */\n readonly uCoverage: number;\n /** Cloud edge softness; higher = mistier edges. */\n readonly uSoftness: number;\n};\n\n/**\n * The `clouds` shader's tunable uniforms. Drives the demo's generated control\n * panel. Defaults here are the \"bright day\" look; composites override them (the\n * wizard tower runs a sunset palette, the fairy cave a moonlit-night one).\n */\nexport const CLOUDS_CONTROLS: readonly UniformControl[] = [\n {\n name: 'uSkyLowColor',\n kind: 'color',\n default: [0.48, 0.68, 0.95],\n doc: 'Sky color near the horizon.',\n },\n { name: 'uSkyHighColor', kind: 'color', default: [0.85, 0.93, 1.0], doc: 'Sky color overhead.' },\n {\n name: 'uCloudLightColor',\n kind: 'color',\n default: [1.0, 0.97, 0.9],\n doc: 'Lit (upper) cloud color.',\n },\n {\n name: 'uCloudDarkColor',\n kind: 'color',\n default: [0.62, 0.67, 0.76],\n doc: 'Shadowed (lower) cloud color.',\n },\n {\n name: 'uExposure',\n kind: 'float',\n default: 1.0,\n min: 0.2,\n max: 1.5,\n step: 0.01,\n doc: 'Overall brightness.',\n },\n {\n name: 'uStepSize',\n kind: 'float',\n default: 0.2,\n min: 0.05,\n max: 0.4,\n step: 0.01,\n doc: 'Raymarch step distance; smaller = finer.',\n },\n {\n name: 'uCloudSpeed',\n kind: 'float',\n default: 0.2,\n min: 0.0,\n max: 1.0,\n step: 0.01,\n doc: 'Drift speed; 0 freezes.',\n },\n {\n name: 'uCloudScale',\n kind: 'float',\n default: 0.45,\n min: 0.2,\n max: 2.0,\n step: 0.01,\n doc: 'Cloud frequency; smaller = broader shapes.',\n },\n {\n name: 'uDensity',\n kind: 'float',\n default: 0.07,\n min: 0.01,\n max: 0.3,\n step: 0.005,\n doc: 'Opacity per sample; higher = more solid.',\n },\n {\n name: 'uCoverage',\n kind: 'float',\n default: 0.44,\n min: 0.0,\n max: 0.9,\n step: 0.01,\n doc: 'Threshold; lower = more cloud cover.',\n },\n {\n name: 'uSoftness',\n kind: 'float',\n default: 0.15,\n min: 0.0,\n max: 0.5,\n step: 0.01,\n doc: 'Cloud edge softness.',\n },\n];\n"]}
1
+ {"version":3,"file":"clouds.js","sourceRoot":"","sources":["../../../../catalog/shaders/clouds/clouds.ts"],"names":[],"mappings":";AAAA,wEAAwE;AACxE,4EAA4E;AAC5E,2EAA2E;AAC3E,8EAA8E;AAC9E,mDAAmD;;;AAkCnD;;;;GAIG;AACU,QAAA,eAAe,GAA8B;IACxD;QACE,IAAI,EAAE,cAAc;QACpB,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;QAC3B,GAAG,EAAE,6BAA6B;KACnC;IACD,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,qBAAqB,EAAE;IAChG;QACE,IAAI,EAAE,kBAAkB;QACxB,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC;QACzB,GAAG,EAAE,0BAA0B;KAChC;IACD;QACE,IAAI,EAAE,iBAAiB;QACvB,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;QAC3B,GAAG,EAAE,+BAA+B;KACrC;IACD;QACE,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,GAAG;QACZ,GAAG,EAAE,GAAG;QACR,GAAG,EAAE,GAAG;QACR,IAAI,EAAE,IAAI;QACV,GAAG,EAAE,qBAAqB;KAC3B;IACD;QACE,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,GAAG;QACZ,GAAG,EAAE,IAAI;QACT,GAAG,EAAE,GAAG;QACR,IAAI,EAAE,IAAI;QACV,GAAG,EAAE,0CAA0C;KAChD;IACD;QACE,IAAI,EAAE,aAAa;QACnB,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,GAAG;QACZ,GAAG,EAAE,GAAG;QACR,GAAG,EAAE,GAAG;QACR,IAAI,EAAE,IAAI;QACV,GAAG,EAAE,yBAAyB;KAC/B;IACD;QACE,IAAI,EAAE,aAAa;QACnB,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,IAAI;QACb,GAAG,EAAE,GAAG;QACR,GAAG,EAAE,GAAG;QACR,IAAI,EAAE,IAAI;QACV,GAAG,EAAE,4CAA4C;KAClD;IACD;QACE,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,IAAI;QACb,GAAG,EAAE,IAAI;QACT,GAAG,EAAE,GAAG;QACR,IAAI,EAAE,KAAK;QACX,GAAG,EAAE,0CAA0C;KAChD;IACD;QACE,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,IAAI;QACb,GAAG,EAAE,GAAG;QACR,GAAG,EAAE,GAAG;QACR,IAAI,EAAE,IAAI;QACV,GAAG,EAAE,sCAAsC;KAC5C;IACD;QACE,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,IAAI;QACb,GAAG,EAAE,GAAG;QACR,GAAG,EAAE,GAAG;QACR,IAAI,EAAE,IAAI;QACV,GAAG,EAAE,sBAAsB;KAC5B;CACF,CAAC","sourcesContent":["// Clouds layer-shader interface: the typed uniforms + a runtime control\n// descriptor. The descriptor is the single source the demo generates tuning\n// controls from, and it documents every uniform (GLSL can't carry this; TS\n// shows up in editors and for LLMs). This is the first of the per-shader type\n// files; the shader source is shaders/clouds.frag.\n\n// Cost: VERY-HEAVY -- ~70 ms/draw, ~240x plasma (shader:view meter\n// @1920, Intel UHD 770, default uniforms, 2026-06-14). 32-step fbm raymarch; the live pipeline runs it half-res (~1/4 this); scales with step size and octaves.\n// Rubric + full ranking: ../README.md (\"Cost\").\nimport type { RGB } from '../../../src/lib/primitives.types';\nimport type { UniformControl } from '../_shared/types';\n\n/** Typed uniforms for the `clouds` layer shader. */\nexport type CloudsUniforms = {\n /** Sky color near the horizon. */\n readonly uSkyLowColor: RGB;\n /** Sky color overhead. */\n readonly uSkyHighColor: RGB;\n /** Lit (upper) cloud color. */\n readonly uCloudLightColor: RGB;\n /** Shadowed (lower) cloud color. */\n readonly uCloudDarkColor: RGB;\n /** Overall brightness; lower for night, ~1 for day. */\n readonly uExposure: number;\n /** Raymarch step distance; smaller = finer/slower, larger = coarser/faster. */\n readonly uStepSize: number;\n /** How fast the clouds drift. 0 freezes them. */\n readonly uCloudSpeed: number;\n /** Cloud noise frequency; smaller = larger/broader shapes, larger = busier. */\n readonly uCloudScale: number;\n /** Opacity contributed per sample; higher = more solid clouds. */\n readonly uDensity: number;\n /** Noise threshold; lower = more cloud cover, higher = clearer sky. */\n readonly uCoverage: number;\n /** Cloud edge softness; higher = mistier edges. */\n readonly uSoftness: number;\n};\n\n/**\n * The `clouds` shader's tunable uniforms. Drives the demo's generated control\n * panel. Defaults here are the \"bright day\" look; composites override them (the\n * wizard tower runs a sunset palette, the fairy cave a moonlit-night one).\n */\nexport const CLOUDS_CONTROLS: readonly UniformControl[] = [\n {\n name: 'uSkyLowColor',\n kind: 'color',\n default: [0.48, 0.68, 0.95],\n doc: 'Sky color near the horizon.',\n },\n { name: 'uSkyHighColor', kind: 'color', default: [0.85, 0.93, 1.0], doc: 'Sky color overhead.' },\n {\n name: 'uCloudLightColor',\n kind: 'color',\n default: [1.0, 0.97, 0.9],\n doc: 'Lit (upper) cloud color.',\n },\n {\n name: 'uCloudDarkColor',\n kind: 'color',\n default: [0.62, 0.67, 0.76],\n doc: 'Shadowed (lower) cloud color.',\n },\n {\n name: 'uExposure',\n kind: 'float',\n default: 1.0,\n min: 0.2,\n max: 1.5,\n step: 0.01,\n doc: 'Overall brightness.',\n },\n {\n name: 'uStepSize',\n kind: 'float',\n default: 0.2,\n min: 0.05,\n max: 0.4,\n step: 0.01,\n doc: 'Raymarch step distance; smaller = finer.',\n },\n {\n name: 'uCloudSpeed',\n kind: 'float',\n default: 0.2,\n min: 0.0,\n max: 1.0,\n step: 0.01,\n doc: 'Drift speed; 0 freezes.',\n },\n {\n name: 'uCloudScale',\n kind: 'float',\n default: 0.45,\n min: 0.2,\n max: 2.0,\n step: 0.01,\n doc: 'Cloud frequency; smaller = broader shapes.',\n },\n {\n name: 'uDensity',\n kind: 'float',\n default: 0.07,\n min: 0.01,\n max: 0.3,\n step: 0.005,\n doc: 'Opacity per sample; higher = more solid.',\n },\n {\n name: 'uCoverage',\n kind: 'float',\n default: 0.44,\n min: 0.0,\n max: 0.9,\n step: 0.01,\n doc: 'Threshold; lower = more cloud cover.',\n },\n {\n name: 'uSoftness',\n kind: 'float',\n default: 0.15,\n min: 0.0,\n max: 0.5,\n step: 0.01,\n doc: 'Cloud edge softness.',\n },\n];\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"corporate-blobs.d.ts","sourceRoot":"","sources":["../../../../catalog/shaders/corporate-blobs/corporate-blobs.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,mCAAmC,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvD,6DAA6D;AAC7D,MAAM,MAAM,sBAAsB,GAAG;IACnC,kFAAkF;IAClF,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC;IACrB,6CAA6C;IAC7C,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC;IAC1B,6CAA6C;IAC7C,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC;IAC1B,yCAAyC;IACzC,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC;IAC1B,yCAAyC;IACzC,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC;IAC1B,8CAA8C;IAC9C,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC;IAC1B,0CAA0C;IAC1C,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC;IAC1B,wCAAwC;IACxC,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC;IAC1B,4CAA4C;IAC5C,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC;IAC1B,wCAAwC;IACxC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,+CAA+C;IAC/C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,oDAAoD;IACpD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,0DAA0D;IAC1D,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,kEAAkE;IAClE,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,uDAAuD;IACvD,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,sCAAsC;IACtC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC,CAAC;AAEF,0FAA0F;AAC1F,eAAO,MAAM,wBAAwB,EAAE,SAAS,cAAc,EAwF7D,CAAC"}
1
+ {"version":3,"file":"corporate-blobs.d.ts","sourceRoot":"","sources":["../../../../catalog/shaders/corporate-blobs/corporate-blobs.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,mCAAmC,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvD,6DAA6D;AAC7D,MAAM,MAAM,sBAAsB,GAAG;IACnC,kFAAkF;IAClF,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC;IACrB,6CAA6C;IAC7C,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC;IAC1B,6CAA6C;IAC7C,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC;IAC1B,yCAAyC;IACzC,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC;IAC1B,yCAAyC;IACzC,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC;IAC1B,8CAA8C;IAC9C,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC;IAC1B,0CAA0C;IAC1C,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC;IAC1B,wCAAwC;IACxC,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC;IAC1B,4CAA4C;IAC5C,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC;IAC1B,wCAAwC;IACxC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,+CAA+C;IAC/C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,oDAAoD;IACpD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,0DAA0D;IAC1D,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,kEAAkE;IAClE,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,uDAAuD;IACvD,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,sCAAsC;IACtC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC,CAAC;AAEF,0FAA0F;AAC1F,eAAO,MAAM,wBAAwB,EAAE,SAAS,cAAc,EAwF7D,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"corporate-blobs.js","sourceRoot":"","sources":["../../../../catalog/shaders/corporate-blobs/corporate-blobs.ts"],"names":[],"mappings":"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","sourcesContent":["// Corporate-blobs layer-shader interface: typed uniforms + control descriptor. A\n// transparent overlay of large decorative edge/vignette blobs in flat brand\n// colors, drifting and morphing (premultiplied output; the blobs sit over\n// whatever is beneath). Shader source is ./corporate-blobs.frag. The eight\n// blobs' positions and colors are fixed in the shader; the tunables below grade,\n// scale, and pace the field. Defaults reproduce the stock prototype look.\n\nimport type { RGB } from '../../../src/lib/primitives.types';\nimport type { UniformControl } from '../_shared/types';\n\n/** Typed uniforms for the `corporate-blobs` layer shader. */\nexport type CorporateBlobsUniforms = {\n /** Overall tint / color grade, multiplied over every blob; [1,1,1] = no grade. */\n readonly uColor: RGB;\n /** Blob 1 base color (stock: light blue). */\n readonly uBlobColor1: RGB;\n /** Blob 2 base color (stock: dark green). */\n readonly uBlobColor2: RGB;\n /** Blob 3 base color (stock: yellow). */\n readonly uBlobColor3: RGB;\n /** Blob 4 base color (stock: orange). */\n readonly uBlobColor4: RGB;\n /** Blob 5 base color (stock: light green). */\n readonly uBlobColor5: RGB;\n /** Blob 6 base color (stock: magenta). */\n readonly uBlobColor6: RGB;\n /** Blob 7 base color (stock: brown). */\n readonly uBlobColor7: RGB;\n /** Blob 8 base color (stock: dark blue). */\n readonly uBlobColor8: RGB;\n /** Overall blob opacity; stock 0.58. */\n readonly uGlobalAlpha: number;\n /** Global blob size multiplier; stock 2.55. */\n readonly uScale: number;\n /** Pushes blobs outward from center; stock 0.32. */\n readonly uEdgePull: number;\n /** Radius around center that repels blobs; stock 0.42. */\n readonly uCenterClear: number;\n /** Positional drift magnitude; 1 = stock, 0 holds blobs still. */\n readonly uMotionAmount: number;\n /** Drift + morph rate; 1 = stock, 0 freezes motion. */\n readonly uMotionSpeed: number;\n /** Blob edge falloff; stock 0.024. */\n readonly uEdgeSoftness: number;\n};\n\n/** The `corporate-blobs` shader's tunable uniforms; defaults reproduce the stock look. */\nexport const CORPORATE_BLOBS_CONTROLS: readonly UniformControl[] = [\n { name: 'uColor', kind: 'color', default: [1, 1, 1], doc: 'Overall tint / color grade.' },\n {\n name: 'uBlobColor1',\n kind: 'color',\n default: [0.376, 0.647, 0.98],\n doc: 'Blob 1 (light blue).',\n },\n {\n name: 'uBlobColor2',\n kind: 'color',\n default: [0.063, 0.725, 0.506],\n doc: 'Blob 2 (dark green).',\n },\n { name: 'uBlobColor3', kind: 'color', default: [0.984, 0.749, 0.141], doc: 'Blob 3 (yellow).' },\n { name: 'uBlobColor4', kind: 'color', default: [0.976, 0.451, 0.086], doc: 'Blob 4 (orange).' },\n {\n name: 'uBlobColor5',\n kind: 'color',\n default: [0.133, 0.773, 0.369],\n doc: 'Blob 5 (light green).',\n },\n { name: 'uBlobColor6', kind: 'color', default: [0.851, 0.275, 0.937], doc: 'Blob 6 (magenta).' },\n { name: 'uBlobColor7', kind: 'color', default: [0.341, 0.325, 0.306], doc: 'Blob 7 (brown).' },\n { name: 'uBlobColor8', kind: 'color', default: [0.008, 0.518, 0.78], doc: 'Blob 8 (dark blue).' },\n {\n name: 'uGlobalAlpha',\n kind: 'float',\n default: 0.58,\n min: 0,\n max: 1,\n step: 0.01,\n doc: 'Overall blob opacity.',\n },\n {\n name: 'uScale',\n kind: 'float',\n default: 2.55,\n min: 1,\n max: 4,\n step: 0.01,\n doc: 'Global blob size.',\n },\n {\n name: 'uEdgePull',\n kind: 'float',\n default: 0.32,\n min: 0,\n max: 1,\n step: 0.01,\n doc: 'Outward push from center.',\n },\n {\n name: 'uCenterClear',\n kind: 'float',\n default: 0.42,\n min: 0,\n max: 1,\n step: 0.01,\n doc: 'Center clear radius.',\n },\n {\n name: 'uMotionAmount',\n kind: 'float',\n default: 1,\n min: 0,\n max: 3,\n step: 0.01,\n doc: 'Drift magnitude; 0 holds still.',\n },\n {\n name: 'uMotionSpeed',\n kind: 'float',\n default: 1,\n min: 0,\n max: 3,\n step: 0.01,\n doc: 'Drift + morph rate; 0 freezes.',\n },\n {\n name: 'uEdgeSoftness',\n kind: 'float',\n default: 0.024,\n min: 0.005,\n max: 0.1,\n step: 0.001,\n doc: 'Blob edge falloff.',\n },\n];\n"]}
1
+ {"version":3,"file":"corporate-blobs.js","sourceRoot":"","sources":["../../../../catalog/shaders/corporate-blobs/corporate-blobs.ts"],"names":[],"mappings":";AAAA,iFAAiF;AACjF,4EAA4E;AAC5E,0EAA0E;AAC1E,2EAA2E;AAC3E,iFAAiF;AACjF,0EAA0E;;;AA4C1E,0FAA0F;AAC7E,QAAA,wBAAwB,GAA8B;IACjE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,6BAA6B,EAAE;IACzF;QACE,IAAI,EAAE,aAAa;QACnB,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;QAC7B,GAAG,EAAE,sBAAsB;KAC5B;IACD;QACE,IAAI,EAAE,aAAa;QACnB,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;QAC9B,GAAG,EAAE,sBAAsB;KAC5B;IACD,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,GAAG,EAAE,kBAAkB,EAAE;IAC/F,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,GAAG,EAAE,kBAAkB,EAAE;IAC/F;QACE,IAAI,EAAE,aAAa;QACnB,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;QAC9B,GAAG,EAAE,uBAAuB;KAC7B;IACD,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,GAAG,EAAE,mBAAmB,EAAE;IAChG,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,GAAG,EAAE,iBAAiB,EAAE;IAC9F,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,qBAAqB,EAAE;IACjG;QACE,IAAI,EAAE,cAAc;QACpB,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,IAAI;QACb,GAAG,EAAE,CAAC;QACN,GAAG,EAAE,CAAC;QACN,IAAI,EAAE,IAAI;QACV,GAAG,EAAE,uBAAuB;KAC7B;IACD;QACE,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,IAAI;QACb,GAAG,EAAE,CAAC;QACN,GAAG,EAAE,CAAC;QACN,IAAI,EAAE,IAAI;QACV,GAAG,EAAE,mBAAmB;KACzB;IACD;QACE,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,IAAI;QACb,GAAG,EAAE,CAAC;QACN,GAAG,EAAE,CAAC;QACN,IAAI,EAAE,IAAI;QACV,GAAG,EAAE,2BAA2B;KACjC;IACD;QACE,IAAI,EAAE,cAAc;QACpB,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,IAAI;QACb,GAAG,EAAE,CAAC;QACN,GAAG,EAAE,CAAC;QACN,IAAI,EAAE,IAAI;QACV,GAAG,EAAE,sBAAsB;KAC5B;IACD;QACE,IAAI,EAAE,eAAe;QACrB,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,CAAC;QACV,GAAG,EAAE,CAAC;QACN,GAAG,EAAE,CAAC;QACN,IAAI,EAAE,IAAI;QACV,GAAG,EAAE,iCAAiC;KACvC;IACD;QACE,IAAI,EAAE,cAAc;QACpB,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,CAAC;QACV,GAAG,EAAE,CAAC;QACN,GAAG,EAAE,CAAC;QACN,IAAI,EAAE,IAAI;QACV,GAAG,EAAE,gCAAgC;KACtC;IACD;QACE,IAAI,EAAE,eAAe;QACrB,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,KAAK;QACd,GAAG,EAAE,KAAK;QACV,GAAG,EAAE,GAAG;QACR,IAAI,EAAE,KAAK;QACX,GAAG,EAAE,oBAAoB;KAC1B;CACF,CAAC","sourcesContent":["// Corporate-blobs layer-shader interface: typed uniforms + control descriptor. A\n// transparent overlay of large decorative edge/vignette blobs in flat brand\n// colors, drifting and morphing (premultiplied output; the blobs sit over\n// whatever is beneath). Shader source is ./corporate-blobs.frag. The eight\n// blobs' positions and colors are fixed in the shader; the tunables below grade,\n// scale, and pace the field. Defaults reproduce the stock prototype look.\n\n// Cost: HEAVY -- ~12 ms/draw, ~42x plasma (shader:view meter\n// @1920, Intel UHD 770, default uniforms, 2026-06-14). Eight-blob loop.\n// Rubric + full ranking: ../README.md (\"Cost\").\nimport type { RGB } from '../../../src/lib/primitives.types';\nimport type { UniformControl } from '../_shared/types';\n\n/** Typed uniforms for the `corporate-blobs` layer shader. */\nexport type CorporateBlobsUniforms = {\n /** Overall tint / color grade, multiplied over every blob; [1,1,1] = no grade. */\n readonly uColor: RGB;\n /** Blob 1 base color (stock: light blue). */\n readonly uBlobColor1: RGB;\n /** Blob 2 base color (stock: dark green). */\n readonly uBlobColor2: RGB;\n /** Blob 3 base color (stock: yellow). */\n readonly uBlobColor3: RGB;\n /** Blob 4 base color (stock: orange). */\n readonly uBlobColor4: RGB;\n /** Blob 5 base color (stock: light green). */\n readonly uBlobColor5: RGB;\n /** Blob 6 base color (stock: magenta). */\n readonly uBlobColor6: RGB;\n /** Blob 7 base color (stock: brown). */\n readonly uBlobColor7: RGB;\n /** Blob 8 base color (stock: dark blue). */\n readonly uBlobColor8: RGB;\n /** Overall blob opacity; stock 0.58. */\n readonly uGlobalAlpha: number;\n /** Global blob size multiplier; stock 2.55. */\n readonly uScale: number;\n /** Pushes blobs outward from center; stock 0.32. */\n readonly uEdgePull: number;\n /** Radius around center that repels blobs; stock 0.42. */\n readonly uCenterClear: number;\n /** Positional drift magnitude; 1 = stock, 0 holds blobs still. */\n readonly uMotionAmount: number;\n /** Drift + morph rate; 1 = stock, 0 freezes motion. */\n readonly uMotionSpeed: number;\n /** Blob edge falloff; stock 0.024. */\n readonly uEdgeSoftness: number;\n};\n\n/** The `corporate-blobs` shader's tunable uniforms; defaults reproduce the stock look. */\nexport const CORPORATE_BLOBS_CONTROLS: readonly UniformControl[] = [\n { name: 'uColor', kind: 'color', default: [1, 1, 1], doc: 'Overall tint / color grade.' },\n {\n name: 'uBlobColor1',\n kind: 'color',\n default: [0.376, 0.647, 0.98],\n doc: 'Blob 1 (light blue).',\n },\n {\n name: 'uBlobColor2',\n kind: 'color',\n default: [0.063, 0.725, 0.506],\n doc: 'Blob 2 (dark green).',\n },\n { name: 'uBlobColor3', kind: 'color', default: [0.984, 0.749, 0.141], doc: 'Blob 3 (yellow).' },\n { name: 'uBlobColor4', kind: 'color', default: [0.976, 0.451, 0.086], doc: 'Blob 4 (orange).' },\n {\n name: 'uBlobColor5',\n kind: 'color',\n default: [0.133, 0.773, 0.369],\n doc: 'Blob 5 (light green).',\n },\n { name: 'uBlobColor6', kind: 'color', default: [0.851, 0.275, 0.937], doc: 'Blob 6 (magenta).' },\n { name: 'uBlobColor7', kind: 'color', default: [0.341, 0.325, 0.306], doc: 'Blob 7 (brown).' },\n { name: 'uBlobColor8', kind: 'color', default: [0.008, 0.518, 0.78], doc: 'Blob 8 (dark blue).' },\n {\n name: 'uGlobalAlpha',\n kind: 'float',\n default: 0.58,\n min: 0,\n max: 1,\n step: 0.01,\n doc: 'Overall blob opacity.',\n },\n {\n name: 'uScale',\n kind: 'float',\n default: 2.55,\n min: 1,\n max: 4,\n step: 0.01,\n doc: 'Global blob size.',\n },\n {\n name: 'uEdgePull',\n kind: 'float',\n default: 0.32,\n min: 0,\n max: 1,\n step: 0.01,\n doc: 'Outward push from center.',\n },\n {\n name: 'uCenterClear',\n kind: 'float',\n default: 0.42,\n min: 0,\n max: 1,\n step: 0.01,\n doc: 'Center clear radius.',\n },\n {\n name: 'uMotionAmount',\n kind: 'float',\n default: 1,\n min: 0,\n max: 3,\n step: 0.01,\n doc: 'Drift magnitude; 0 holds still.',\n },\n {\n name: 'uMotionSpeed',\n kind: 'float',\n default: 1,\n min: 0,\n max: 3,\n step: 0.01,\n doc: 'Drift + morph rate; 0 freezes.',\n },\n {\n name: 'uEdgeSoftness',\n kind: 'float',\n default: 0.024,\n min: 0.005,\n max: 0.1,\n step: 0.001,\n doc: 'Blob edge falloff.',\n },\n];\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"data-mesh.d.ts","sourceRoot":"","sources":["../../../../catalog/shaders/data-mesh/data-mesh.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,mCAAmC,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvD,uDAAuD;AACvD,MAAM,MAAM,gBAAgB,GAAG;IAC7B,qDAAqD;IACrD,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC;IACrB,wDAAwD;IACxD,QAAQ,CAAC,SAAS,EAAE,GAAG,CAAC;IACxB,uDAAuD;IACvD,QAAQ,CAAC,UAAU,EAAE,GAAG,CAAC;IACzB,yDAAyD;IACzD,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC;IAC1B,6CAA6C;IAC7C,QAAQ,CAAC,UAAU,EAAE,GAAG,CAAC;IACzB,6DAA6D;IAC7D,QAAQ,CAAC,YAAY,EAAE,GAAG,CAAC;IAC3B,mEAAmE;IACnE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,qDAAqD;IACrD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,6CAA6C;IAC7C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,0DAA0D;IAC1D,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,8DAA8D;IAC9D,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,sEAAsE;IACtE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,mEAAmE;IACnE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,4DAA4D;IAC5D,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,sEAAsE;IACtE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,iEAAiE;IACjE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,mDAAmD;IACnD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,qCAAqC;IACrC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,yDAAyD;IACzD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,iDAAiD;IACjD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,wEAAwE;IACxE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,iFAAiF;AACjF,eAAO,MAAM,kBAAkB,EAAE,SAAS,cAAc,EAuKvD,CAAC"}
1
+ {"version":3,"file":"data-mesh.d.ts","sourceRoot":"","sources":["../../../../catalog/shaders/data-mesh/data-mesh.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,mCAAmC,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvD,uDAAuD;AACvD,MAAM,MAAM,gBAAgB,GAAG;IAC7B,qDAAqD;IACrD,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC;IACrB,wDAAwD;IACxD,QAAQ,CAAC,SAAS,EAAE,GAAG,CAAC;IACxB,uDAAuD;IACvD,QAAQ,CAAC,UAAU,EAAE,GAAG,CAAC;IACzB,yDAAyD;IACzD,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC;IAC1B,6CAA6C;IAC7C,QAAQ,CAAC,UAAU,EAAE,GAAG,CAAC;IACzB,6DAA6D;IAC7D,QAAQ,CAAC,YAAY,EAAE,GAAG,CAAC;IAC3B,mEAAmE;IACnE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,qDAAqD;IACrD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,6CAA6C;IAC7C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,0DAA0D;IAC1D,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,8DAA8D;IAC9D,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,sEAAsE;IACtE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,mEAAmE;IACnE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,4DAA4D;IAC5D,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,sEAAsE;IACtE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,iEAAiE;IACjE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,mDAAmD;IACnD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,qCAAqC;IACrC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,yDAAyD;IACzD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,iDAAiD;IACjD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,wEAAwE;IACxE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,iFAAiF;AACjF,eAAO,MAAM,kBAAkB,EAAE,SAAS,cAAc,EAuKvD,CAAC"}