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
@@ -1 +1 @@
1
- {"version":3,"file":"data-mesh.js","sourceRoot":"","sources":["../../../../catalog/shaders/data-mesh/data-mesh.ts"],"names":[],"mappings":"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","sourcesContent":["// Data-mesh layer-shader interface: typed uniforms + control descriptor. A mid-\n// 2000s corporate wireframe-wave background, an opaque BACKGROUND layer. One\n// data-mesh.frag fans out into the book presets (datafield, boardroom, acid,\n// cobalt, and slate) by varying these uniforms; the color set is the\n// big lever (gradient + line/crest/haze/accent), the structural dials set\n// composition and motion. Shader source is shaders/data-mesh/data-mesh.frag.\n\nimport type { RGB } from '../../../src/lib/primitives.types';\nimport type { UniformControl } from '../_shared/types';\n\n/** Typed uniforms for the `data-mesh` layer shader. */\nexport type DataMeshUniforms = {\n /** Background gradient color at the top of frame. */\n readonly uBgTop: RGB;\n /** Background gradient color at the bottom of frame. */\n readonly uBgBottom: RGB;\n /** Mid wireframe-line tint (the trough/body color). */\n readonly uLineColor: RGB;\n /** Crest highlight color (brightest along the peaks). */\n readonly uCrestColor: RGB;\n /** Atmospheric haze tint on the far rows. */\n readonly uHazeColor: RGB;\n /** The one restrained accent color (e.g. enterprise red). */\n readonly uAccentColor: RGB;\n /** Wave-field spatial frequency; lower = looser, broader hills. */\n readonly uWaveScale: number;\n /** Vertical wave displacement amount (near rows). */\n readonly uWaveAmp: number;\n /** Animation rate; 0 freezes the surface. */\n readonly uWaveSpeed: number;\n /** Column-grid density across the surface; keep loose. */\n readonly uGridX: number;\n /** Horizon height in uv.y units (rows converge toward it). */\n readonly uHorizon: number;\n /** Perspective scale of the farthest row; > 0 (guards the divide). */\n readonly uFarScale: number;\n /** Diagonal tilt; raises the right side for corner composition. */\n readonly uSlant: number;\n /** Wireframe line half-width (smaller = finer, sharper). */\n readonly uLineWidth: number;\n /** Emphasis of glowing intersection nodes (the dot reading), 0..1. */\n readonly uNodeMix: number;\n /** Emphasis of vertical struts (the wireframe reading), 0..1. */\n readonly uStrutMix: number;\n /** Overall additive mesh-glow / bloom strength. */\n readonly uGlow: number;\n /** Atmospheric far-haze strength. */\n readonly uHaze: number;\n /** Floating-particle intensity; 0 disables the field. */\n readonly uParticles: number;\n /** Lone accent-mote intensity; 0 disables it. */\n readonly uAccent: number;\n /** Eases the additive glow at frame center (the face zone); 0 = off. */\n readonly uCalm: number;\n};\n\n/** The `data-mesh` shader's tunables; defaults are the cyan \"datafield\" look. */\nexport const DATA_MESH_CONTROLS: readonly UniformControl[] = [\n {\n name: 'uBgTop',\n kind: 'color',\n default: [0.01, 0.02, 0.05],\n doc: 'Background color at top of frame.',\n },\n {\n name: 'uBgBottom',\n kind: 'color',\n default: [0.02, 0.05, 0.12],\n doc: 'Background color at bottom of frame.',\n },\n {\n name: 'uLineColor',\n kind: 'color',\n default: [0.1, 0.55, 0.75],\n doc: 'Mid wireframe-line tint.',\n },\n { name: 'uCrestColor', kind: 'color', default: [0.85, 0.97, 1.0], doc: 'Crest highlight color.' },\n {\n name: 'uHazeColor',\n kind: 'color',\n default: [0.05, 0.25, 0.4],\n doc: 'Far-row atmospheric haze tint.',\n },\n {\n name: 'uAccentColor',\n kind: 'color',\n default: [0.9, 0.15, 0.12],\n doc: 'The one restrained accent color.',\n },\n {\n name: 'uWaveScale',\n kind: 'float',\n default: 1.2,\n min: 0.4,\n max: 4,\n step: 0.05,\n doc: 'Wave frequency; lower = looser, broader hills.',\n },\n {\n name: 'uWaveAmp',\n kind: 'float',\n default: 0.14,\n min: 0,\n max: 0.4,\n step: 0.005,\n doc: 'Vertical wave displacement (near rows).',\n },\n {\n name: 'uWaveSpeed',\n kind: 'float',\n default: 0.25,\n min: 0,\n max: 2,\n step: 0.01,\n doc: 'Animation rate; 0 freezes.',\n },\n {\n name: 'uGridX',\n kind: 'float',\n default: 7,\n min: 1,\n max: 24,\n step: 0.5,\n doc: 'Column-grid density; keep loose.',\n },\n {\n name: 'uHorizon',\n kind: 'float',\n default: 0.16,\n min: -0.2,\n max: 0.45,\n step: 0.01,\n doc: 'Horizon height (rows converge toward it).',\n },\n {\n name: 'uFarScale',\n kind: 'float',\n default: 0.12,\n min: 0.05,\n max: 0.5,\n step: 0.01,\n doc: 'Perspective scale of the farthest row.',\n },\n {\n name: 'uSlant',\n kind: 'float',\n default: 0.18,\n min: -0.6,\n max: 0.6,\n step: 0.01,\n doc: 'Diagonal tilt for corner composition.',\n },\n {\n name: 'uLineWidth',\n kind: 'float',\n default: 0.018,\n min: 0.004,\n max: 0.06,\n step: 0.001,\n doc: 'Wireframe line half-width; smaller = finer.',\n },\n {\n name: 'uNodeMix',\n kind: 'float',\n default: 0.5,\n min: 0,\n max: 1,\n step: 0.01,\n doc: 'Glowing-node (dot) emphasis.',\n },\n {\n name: 'uStrutMix',\n kind: 'float',\n default: 0.35,\n min: 0,\n max: 1,\n step: 0.01,\n doc: 'Vertical-strut (wireframe) emphasis.',\n },\n {\n name: 'uGlow',\n kind: 'float',\n default: 1,\n min: 0,\n max: 3,\n step: 0.01,\n doc: 'Overall mesh-glow / bloom strength.',\n },\n {\n name: 'uHaze',\n kind: 'float',\n default: 0.6,\n min: 0,\n max: 2,\n step: 0.01,\n doc: 'Atmospheric far-haze strength.',\n },\n {\n name: 'uParticles',\n kind: 'float',\n default: 0.5,\n min: 0,\n max: 2,\n step: 0.01,\n doc: 'Floating-particle intensity; 0 disables.',\n },\n {\n name: 'uAccent',\n kind: 'float',\n default: 0,\n min: 0,\n max: 2,\n step: 0.01,\n doc: 'Lone accent-mote intensity; 0 disables.',\n },\n {\n name: 'uCalm',\n kind: 'float',\n default: 0,\n min: 0,\n max: 1,\n step: 0.01,\n doc: 'Eases the additive glow at frame center (face zone).',\n },\n];\n"]}
1
+ {"version":3,"file":"data-mesh.js","sourceRoot":"","sources":["../../../../catalog/shaders/data-mesh/data-mesh.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,6EAA6E;AAC7E,6EAA6E;AAC7E,qEAAqE;AACrE,0EAA0E;AAC1E,6EAA6E;;;AAsD7E,iFAAiF;AACpE,QAAA,kBAAkB,GAA8B;IAC3D;QACE,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;QAC3B,GAAG,EAAE,mCAAmC;KACzC;IACD;QACE,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;QAC3B,GAAG,EAAE,sCAAsC;KAC5C;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,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,wBAAwB,EAAE;IACjG;QACE,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC;QAC1B,GAAG,EAAE,gCAAgC;KACtC;IACD;QACE,IAAI,EAAE,cAAc;QACpB,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC;QAC1B,GAAG,EAAE,kCAAkC;KACxC;IACD;QACE,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,GAAG;QACZ,GAAG,EAAE,GAAG;QACR,GAAG,EAAE,CAAC;QACN,IAAI,EAAE,IAAI;QACV,GAAG,EAAE,gDAAgD;KACtD;IACD;QACE,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,IAAI;QACb,GAAG,EAAE,CAAC;QACN,GAAG,EAAE,GAAG;QACR,IAAI,EAAE,KAAK;QACX,GAAG,EAAE,yCAAyC;KAC/C;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,4BAA4B;KAClC;IACD;QACE,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,CAAC;QACV,GAAG,EAAE,CAAC;QACN,GAAG,EAAE,EAAE;QACP,IAAI,EAAE,GAAG;QACT,GAAG,EAAE,kCAAkC;KACxC;IACD;QACE,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,IAAI;QACb,GAAG,EAAE,CAAC,GAAG;QACT,GAAG,EAAE,IAAI;QACT,IAAI,EAAE,IAAI;QACV,GAAG,EAAE,2CAA2C;KACjD;IACD;QACE,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,IAAI;QACb,GAAG,EAAE,IAAI;QACT,GAAG,EAAE,GAAG;QACR,IAAI,EAAE,IAAI;QACV,GAAG,EAAE,wCAAwC;KAC9C;IACD;QACE,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,IAAI;QACb,GAAG,EAAE,CAAC,GAAG;QACT,GAAG,EAAE,GAAG;QACR,IAAI,EAAE,IAAI;QACV,GAAG,EAAE,uCAAuC;KAC7C;IACD;QACE,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,KAAK;QACd,GAAG,EAAE,KAAK;QACV,GAAG,EAAE,IAAI;QACT,IAAI,EAAE,KAAK;QACX,GAAG,EAAE,6CAA6C;KACnD;IACD;QACE,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,GAAG;QACZ,GAAG,EAAE,CAAC;QACN,GAAG,EAAE,CAAC;QACN,IAAI,EAAE,IAAI;QACV,GAAG,EAAE,8BAA8B;KACpC;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,sCAAsC;KAC5C;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,qCAAqC;KAC3C;IACD;QACE,IAAI,EAAE,OAAO;QACb,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,GAAG;QACZ,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,GAAG;QACZ,GAAG,EAAE,CAAC;QACN,GAAG,EAAE,CAAC;QACN,IAAI,EAAE,IAAI;QACV,GAAG,EAAE,0CAA0C;KAChD;IACD;QACE,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,CAAC;QACV,GAAG,EAAE,CAAC;QACN,GAAG,EAAE,CAAC;QACN,IAAI,EAAE,IAAI;QACV,GAAG,EAAE,yCAAyC;KAC/C;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,sDAAsD;KAC5D;CACF,CAAC","sourcesContent":["// Data-mesh layer-shader interface: typed uniforms + control descriptor. A mid-\n// 2000s corporate wireframe-wave background, an opaque BACKGROUND layer. One\n// data-mesh.frag fans out into the book presets (datafield, boardroom, acid,\n// cobalt, and slate) by varying these uniforms; the color set is the\n// big lever (gradient + line/crest/haze/accent), the structural dials set\n// composition and motion. Shader source is shaders/data-mesh/data-mesh.frag.\n\n// Cost: MODERATE -- ~6.4 ms/draw, ~22x plasma (shader:view meter\n// @1920, Intel UHD 770, default uniforms, 2026-06-14). Per-pixel row loop; scales with ROWS, uGridX, uParticles.\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 `data-mesh` layer shader. */\nexport type DataMeshUniforms = {\n /** Background gradient color at the top of frame. */\n readonly uBgTop: RGB;\n /** Background gradient color at the bottom of frame. */\n readonly uBgBottom: RGB;\n /** Mid wireframe-line tint (the trough/body color). */\n readonly uLineColor: RGB;\n /** Crest highlight color (brightest along the peaks). */\n readonly uCrestColor: RGB;\n /** Atmospheric haze tint on the far rows. */\n readonly uHazeColor: RGB;\n /** The one restrained accent color (e.g. enterprise red). */\n readonly uAccentColor: RGB;\n /** Wave-field spatial frequency; lower = looser, broader hills. */\n readonly uWaveScale: number;\n /** Vertical wave displacement amount (near rows). */\n readonly uWaveAmp: number;\n /** Animation rate; 0 freezes the surface. */\n readonly uWaveSpeed: number;\n /** Column-grid density across the surface; keep loose. */\n readonly uGridX: number;\n /** Horizon height in uv.y units (rows converge toward it). */\n readonly uHorizon: number;\n /** Perspective scale of the farthest row; > 0 (guards the divide). */\n readonly uFarScale: number;\n /** Diagonal tilt; raises the right side for corner composition. */\n readonly uSlant: number;\n /** Wireframe line half-width (smaller = finer, sharper). */\n readonly uLineWidth: number;\n /** Emphasis of glowing intersection nodes (the dot reading), 0..1. */\n readonly uNodeMix: number;\n /** Emphasis of vertical struts (the wireframe reading), 0..1. */\n readonly uStrutMix: number;\n /** Overall additive mesh-glow / bloom strength. */\n readonly uGlow: number;\n /** Atmospheric far-haze strength. */\n readonly uHaze: number;\n /** Floating-particle intensity; 0 disables the field. */\n readonly uParticles: number;\n /** Lone accent-mote intensity; 0 disables it. */\n readonly uAccent: number;\n /** Eases the additive glow at frame center (the face zone); 0 = off. */\n readonly uCalm: number;\n};\n\n/** The `data-mesh` shader's tunables; defaults are the cyan \"datafield\" look. */\nexport const DATA_MESH_CONTROLS: readonly UniformControl[] = [\n {\n name: 'uBgTop',\n kind: 'color',\n default: [0.01, 0.02, 0.05],\n doc: 'Background color at top of frame.',\n },\n {\n name: 'uBgBottom',\n kind: 'color',\n default: [0.02, 0.05, 0.12],\n doc: 'Background color at bottom of frame.',\n },\n {\n name: 'uLineColor',\n kind: 'color',\n default: [0.1, 0.55, 0.75],\n doc: 'Mid wireframe-line tint.',\n },\n { name: 'uCrestColor', kind: 'color', default: [0.85, 0.97, 1.0], doc: 'Crest highlight color.' },\n {\n name: 'uHazeColor',\n kind: 'color',\n default: [0.05, 0.25, 0.4],\n doc: 'Far-row atmospheric haze tint.',\n },\n {\n name: 'uAccentColor',\n kind: 'color',\n default: [0.9, 0.15, 0.12],\n doc: 'The one restrained accent color.',\n },\n {\n name: 'uWaveScale',\n kind: 'float',\n default: 1.2,\n min: 0.4,\n max: 4,\n step: 0.05,\n doc: 'Wave frequency; lower = looser, broader hills.',\n },\n {\n name: 'uWaveAmp',\n kind: 'float',\n default: 0.14,\n min: 0,\n max: 0.4,\n step: 0.005,\n doc: 'Vertical wave displacement (near rows).',\n },\n {\n name: 'uWaveSpeed',\n kind: 'float',\n default: 0.25,\n min: 0,\n max: 2,\n step: 0.01,\n doc: 'Animation rate; 0 freezes.',\n },\n {\n name: 'uGridX',\n kind: 'float',\n default: 7,\n min: 1,\n max: 24,\n step: 0.5,\n doc: 'Column-grid density; keep loose.',\n },\n {\n name: 'uHorizon',\n kind: 'float',\n default: 0.16,\n min: -0.2,\n max: 0.45,\n step: 0.01,\n doc: 'Horizon height (rows converge toward it).',\n },\n {\n name: 'uFarScale',\n kind: 'float',\n default: 0.12,\n min: 0.05,\n max: 0.5,\n step: 0.01,\n doc: 'Perspective scale of the farthest row.',\n },\n {\n name: 'uSlant',\n kind: 'float',\n default: 0.18,\n min: -0.6,\n max: 0.6,\n step: 0.01,\n doc: 'Diagonal tilt for corner composition.',\n },\n {\n name: 'uLineWidth',\n kind: 'float',\n default: 0.018,\n min: 0.004,\n max: 0.06,\n step: 0.001,\n doc: 'Wireframe line half-width; smaller = finer.',\n },\n {\n name: 'uNodeMix',\n kind: 'float',\n default: 0.5,\n min: 0,\n max: 1,\n step: 0.01,\n doc: 'Glowing-node (dot) emphasis.',\n },\n {\n name: 'uStrutMix',\n kind: 'float',\n default: 0.35,\n min: 0,\n max: 1,\n step: 0.01,\n doc: 'Vertical-strut (wireframe) emphasis.',\n },\n {\n name: 'uGlow',\n kind: 'float',\n default: 1,\n min: 0,\n max: 3,\n step: 0.01,\n doc: 'Overall mesh-glow / bloom strength.',\n },\n {\n name: 'uHaze',\n kind: 'float',\n default: 0.6,\n min: 0,\n max: 2,\n step: 0.01,\n doc: 'Atmospheric far-haze strength.',\n },\n {\n name: 'uParticles',\n kind: 'float',\n default: 0.5,\n min: 0,\n max: 2,\n step: 0.01,\n doc: 'Floating-particle intensity; 0 disables.',\n },\n {\n name: 'uAccent',\n kind: 'float',\n default: 0,\n min: 0,\n max: 2,\n step: 0.01,\n doc: 'Lone accent-mote intensity; 0 disables.',\n },\n {\n name: 'uCalm',\n kind: 'float',\n default: 0,\n min: 0,\n max: 1,\n step: 0.01,\n doc: 'Eases the additive glow at frame center (face zone).',\n },\n];\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"fireflies.d.ts","sourceRoot":"","sources":["../../../../catalog/shaders/fireflies/fireflies.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,mCAAmC,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvD,uDAAuD;AACvD,MAAM,MAAM,iBAAiB,GAAG;IAC9B,0CAA0C;IAC1C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,qCAAqC;IACrC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,4BAA4B;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,mCAAmC;IACnC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,gFAAgF;IAChF,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC;CACtB,CAAC;AAEF,mFAAmF;AACnF,eAAO,MAAM,kBAAkB,EAAE,SAAS,cAAc,EAsCvD,CAAC"}
1
+ {"version":3,"file":"fireflies.d.ts","sourceRoot":"","sources":["../../../../catalog/shaders/fireflies/fireflies.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,iBAAiB,GAAG;IAC9B,0CAA0C;IAC1C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,qCAAqC;IACrC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,4BAA4B;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,mCAAmC;IACnC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,gFAAgF;IAChF,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC;CACtB,CAAC;AAEF,mFAAmF;AACnF,eAAO,MAAM,kBAAkB,EAAE,SAAS,cAAc,EAsCvD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"fireflies.js","sourceRoot":"","sources":["../../../../catalog/shaders/fireflies/fireflies.ts"],"names":[],"mappings":";AAAA,2EAA2E;AAC3E,8EAA8E;AAC9E,8BAA8B;;;AAmB9B,mFAAmF;AACtE,QAAA,kBAAkB,GAA8B;IAC3D;QACE,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,KAAK;QACd,GAAG,EAAE,KAAK;QACV,GAAG,EAAE,GAAG;QACR,IAAI,EAAE,KAAK;QACX,GAAG,EAAE,cAAc;KACpB;IACD;QACE,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,KAAK;QACd,GAAG,EAAE,KAAK;QACV,GAAG,EAAE,IAAI;QACT,IAAI,EAAE,KAAK;QACX,GAAG,EAAE,qBAAqB;KAC3B;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,iBAAiB;KACvB;IACD;QACE,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,GAAG;QACZ,GAAG,EAAE,CAAC;QACN,GAAG,EAAE,CAAC;QACN,IAAI,EAAE,GAAG;QACT,GAAG,EAAE,oBAAoB;KAC1B;IACD,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,eAAe,EAAE;CACpF,CAAC","sourcesContent":["// Fireflies layer-shader interface: typed uniforms + control descriptor. A\n// transparent overlay of drifting glowing dots (use blend 'additive'). Shader\n// source is ./fireflies.frag.\n\nimport type { RGB } from '../../../src/lib/primitives.types';\nimport type { UniformControl } from '../_shared/types';\n\n/** Typed uniforms for the `fireflies` layer shader. */\nexport type FirefliesUniforms = {\n /** Radius of each firefly's soft glow. */\n readonly uGlowSize: number;\n /** Size of the bright center dot. */\n readonly uDotSize: number;\n /** Drift movement speed. */\n readonly uSpeed: number;\n /** Twinkle (fade in/out) speed. */\n readonly uTwinkle: number;\n /** Firefly tint, RGB each channel 0..1 (the warm default is the amber look). */\n readonly uColor: RGB;\n};\n\n/** The `fireflies` shader's tunable uniforms; defaults are the warm amber look. */\nexport const FIREFLIES_CONTROLS: readonly UniformControl[] = [\n {\n name: 'uGlowSize',\n kind: 'float',\n default: 0.035,\n min: 0.005,\n max: 0.1,\n step: 0.001,\n doc: 'Glow radius.',\n },\n {\n name: 'uDotSize',\n kind: 'float',\n default: 0.006,\n min: 0.001,\n max: 0.02,\n step: 0.001,\n doc: 'Bright center size.',\n },\n {\n name: 'uSpeed',\n kind: 'float',\n default: 0.35,\n min: 0,\n max: 1,\n step: 0.01,\n doc: 'Movement speed.',\n },\n {\n name: 'uTwinkle',\n kind: 'float',\n default: 2.5,\n min: 0,\n max: 5,\n step: 0.1,\n doc: 'Fade in/out speed.',\n },\n { name: 'uColor', kind: 'color', default: [1.0, 0.82, 0.32], doc: 'Firefly tint.' },\n];\n"]}
1
+ {"version":3,"file":"fireflies.js","sourceRoot":"","sources":["../../../../catalog/shaders/fireflies/fireflies.ts"],"names":[],"mappings":";AAAA,2EAA2E;AAC3E,8EAA8E;AAC9E,8BAA8B;;;AAsB9B,mFAAmF;AACtE,QAAA,kBAAkB,GAA8B;IAC3D;QACE,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,KAAK;QACd,GAAG,EAAE,KAAK;QACV,GAAG,EAAE,GAAG;QACR,IAAI,EAAE,KAAK;QACX,GAAG,EAAE,cAAc;KACpB;IACD;QACE,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,KAAK;QACd,GAAG,EAAE,KAAK;QACV,GAAG,EAAE,IAAI;QACT,IAAI,EAAE,KAAK;QACX,GAAG,EAAE,qBAAqB;KAC3B;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,iBAAiB;KACvB;IACD;QACE,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,GAAG;QACZ,GAAG,EAAE,CAAC;QACN,GAAG,EAAE,CAAC;QACN,IAAI,EAAE,GAAG;QACT,GAAG,EAAE,oBAAoB;KAC1B;IACD,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,eAAe,EAAE;CACpF,CAAC","sourcesContent":["// Fireflies layer-shader interface: typed uniforms + control descriptor. A\n// transparent overlay of drifting glowing dots (use blend 'additive'). Shader\n// source is ./fireflies.frag.\n\n// Cost: HEAVY -- ~18 ms/draw, ~61x 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 `fireflies` layer shader. */\nexport type FirefliesUniforms = {\n /** Radius of each firefly's soft glow. */\n readonly uGlowSize: number;\n /** Size of the bright center dot. */\n readonly uDotSize: number;\n /** Drift movement speed. */\n readonly uSpeed: number;\n /** Twinkle (fade in/out) speed. */\n readonly uTwinkle: number;\n /** Firefly tint, RGB each channel 0..1 (the warm default is the amber look). */\n readonly uColor: RGB;\n};\n\n/** The `fireflies` shader's tunable uniforms; defaults are the warm amber look. */\nexport const FIREFLIES_CONTROLS: readonly UniformControl[] = [\n {\n name: 'uGlowSize',\n kind: 'float',\n default: 0.035,\n min: 0.005,\n max: 0.1,\n step: 0.001,\n doc: 'Glow radius.',\n },\n {\n name: 'uDotSize',\n kind: 'float',\n default: 0.006,\n min: 0.001,\n max: 0.02,\n step: 0.001,\n doc: 'Bright center size.',\n },\n {\n name: 'uSpeed',\n kind: 'float',\n default: 0.35,\n min: 0,\n max: 1,\n step: 0.01,\n doc: 'Movement speed.',\n },\n {\n name: 'uTwinkle',\n kind: 'float',\n default: 2.5,\n min: 0,\n max: 5,\n step: 0.1,\n doc: 'Fade in/out speed.',\n },\n { name: 'uColor', kind: 'color', default: [1.0, 0.82, 0.32], doc: 'Firefly tint.' },\n];\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"godrays.d.ts","sourceRoot":"","sources":["../../../../catalog/shaders/godrays/godrays.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,mCAAmC,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvD,qDAAqD;AACrD,MAAM,MAAM,eAAe,GAAG;IAC5B,iCAAiC;IACjC,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC;IAC1B,2BAA2B;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,mBAAmB;IACnB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,8CAA8C;IAC9C,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,sDAAsD;IACtD,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,4CAA4C;IAC5C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,qCAAqC;IACrC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,mCAAmC;IACnC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,8BAA8B;IAC9B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B,CAAC;AAEF,yFAAyF;AACzF,eAAO,MAAM,gBAAgB,EAAE,SAAS,cAAc,EA0ErD,CAAC"}
1
+ {"version":3,"file":"godrays.d.ts","sourceRoot":"","sources":["../../../../catalog/shaders/godrays/godrays.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,mCAAmC,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvD,qDAAqD;AACrD,MAAM,MAAM,eAAe,GAAG;IAC5B,iCAAiC;IACjC,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC;IAC1B,2BAA2B;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,mBAAmB;IACnB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,8CAA8C;IAC9C,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,sDAAsD;IACtD,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,4CAA4C;IAC5C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,qCAAqC;IACrC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,mCAAmC;IACnC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,8BAA8B;IAC9B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B,CAAC;AAEF,yFAAyF;AACzF,eAAO,MAAM,gBAAgB,EAAE,SAAS,cAAc,EA0ErD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"godrays.js","sourceRoot":"","sources":["../../../../catalog/shaders/godrays/godrays.ts"],"names":[],"mappings":";AAAA,2EAA2E;AAC3E,6EAA6E;AAC7E,kBAAkB;;;AA2BlB,yFAAyF;AAC5E,QAAA,gBAAgB,GAA8B;IACzD,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE;IACpF;QACE,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,EAAE;QACX,GAAG,EAAE,CAAC;QACN,GAAG,EAAE,EAAE;QACP,IAAI,EAAE,CAAC;QACP,GAAG,EAAE,sBAAsB;KAC5B;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,cAAc;KACpB;IACD;QACE,IAAI,EAAE,eAAe;QACrB,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,IAAI;QACb,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,GAAG;QACZ,GAAG,EAAE,GAAG;QACR,GAAG,EAAE,CAAC;QACN,IAAI,EAAE,GAAG;QACT,GAAG,EAAE,iCAAiC;KACvC;IACD;QACE,IAAI,EAAE,UAAU;QAChB,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,eAAe;QACrB,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,IAAI;QACb,GAAG,EAAE,GAAG;QACR,GAAG,EAAE,CAAC;QACN,IAAI,EAAE,IAAI;QACV,GAAG,EAAE,gCAAgC;KACtC;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,oBAAoB;KAC1B;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,eAAe;KACrB;CACF,CAAC","sourcesContent":["// God rays layer-shader interface: typed uniforms + control descriptor. An\n// additive overlay (premultiplied), reusable on any target. Shader source is\n// ./godrays.frag.\n\nimport type { RGB } from '../../../src/lib/primitives.types';\nimport type { UniformControl } from '../_shared/types';\n\n/** Typed uniforms for the `godrays` layer shader. */\nexport type GodraysUniforms = {\n /** Ray tint (linear-ish RGB). */\n readonly uLightColor: RGB;\n /** Number of ray bands. */\n readonly uRayCount: number;\n /** Drift speed. */\n readonly uRaySpeed: number;\n /** Overall brightness / additive strength. */\n readonly uRayIntensity: number;\n /** Edge falloff exponent; higher = crisper shafts. */\n readonly uRaySoftness: number;\n /** Extra glow concentrated near the top. */\n readonly uTopGlow: number;\n /** Vertical falloff from the top. */\n readonly uFadeDistance: number;\n /** Horizontal wobble magnitude. */\n readonly uWobbleAmount: number;\n /** Wobble animation speed. */\n readonly uWobbleSpeed: number;\n};\n\n/** The `godrays` shader's tunable uniforms; defaults are the neutral cool-white look. */\nexport const GODRAYS_CONTROLS: readonly UniformControl[] = [\n { name: 'uLightColor', kind: 'color', default: [0.85, 0.95, 1.0], doc: 'Ray tint.' },\n {\n name: 'uRayCount',\n kind: 'float',\n default: 16,\n min: 2,\n max: 40,\n step: 1,\n doc: 'Number of ray bands.',\n },\n {\n name: 'uRaySpeed',\n kind: 'float',\n default: 0.95,\n min: 0,\n max: 3,\n step: 0.05,\n doc: 'Drift speed.',\n },\n {\n name: 'uRayIntensity',\n kind: 'float',\n default: 0.85,\n min: 0,\n max: 3,\n step: 0.05,\n doc: 'Brightness / additive strength.',\n },\n {\n name: 'uRaySoftness',\n kind: 'float',\n default: 2.4,\n min: 0.5,\n max: 6,\n step: 0.1,\n doc: 'Edge falloff; higher = crisper.',\n },\n {\n name: 'uTopGlow',\n kind: 'float',\n default: 0.65,\n min: 0,\n max: 1.5,\n step: 0.05,\n doc: 'Extra glow near the top.',\n },\n {\n name: 'uFadeDistance',\n kind: 'float',\n default: 1.25,\n min: 0.2,\n max: 3,\n step: 0.05,\n doc: 'Vertical falloff from the top.',\n },\n {\n name: 'uWobbleAmount',\n kind: 'float',\n default: 0.08,\n min: 0,\n max: 0.3,\n step: 0.01,\n doc: 'Horizontal wobble.',\n },\n {\n name: 'uWobbleSpeed',\n kind: 'float',\n default: 0.55,\n min: 0,\n max: 2,\n step: 0.05,\n doc: 'Wobble speed.',\n },\n];\n"]}
1
+ {"version":3,"file":"godrays.js","sourceRoot":"","sources":["../../../../catalog/shaders/godrays/godrays.ts"],"names":[],"mappings":";AAAA,2EAA2E;AAC3E,6EAA6E;AAC7E,kBAAkB;;;AA8BlB,yFAAyF;AAC5E,QAAA,gBAAgB,GAA8B;IACzD,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE;IACpF;QACE,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,EAAE;QACX,GAAG,EAAE,CAAC;QACN,GAAG,EAAE,EAAE;QACP,IAAI,EAAE,CAAC;QACP,GAAG,EAAE,sBAAsB;KAC5B;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,cAAc;KACpB;IACD;QACE,IAAI,EAAE,eAAe;QACrB,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,IAAI;QACb,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,GAAG;QACZ,GAAG,EAAE,GAAG;QACR,GAAG,EAAE,CAAC;QACN,IAAI,EAAE,GAAG;QACT,GAAG,EAAE,iCAAiC;KACvC;IACD;QACE,IAAI,EAAE,UAAU;QAChB,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,eAAe;QACrB,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,IAAI;QACb,GAAG,EAAE,GAAG;QACR,GAAG,EAAE,CAAC;QACN,IAAI,EAAE,IAAI;QACV,GAAG,EAAE,gCAAgC;KACtC;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,oBAAoB;KAC1B;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,eAAe;KACrB;CACF,CAAC","sourcesContent":["// God rays layer-shader interface: typed uniforms + control descriptor. An\n// additive overlay (premultiplied), reusable on any target. Shader source is\n// ./godrays.frag.\n\n// Cost: CHEAP -- ~0.68 ms/draw, ~2.4x 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 `godrays` layer shader. */\nexport type GodraysUniforms = {\n /** Ray tint (linear-ish RGB). */\n readonly uLightColor: RGB;\n /** Number of ray bands. */\n readonly uRayCount: number;\n /** Drift speed. */\n readonly uRaySpeed: number;\n /** Overall brightness / additive strength. */\n readonly uRayIntensity: number;\n /** Edge falloff exponent; higher = crisper shafts. */\n readonly uRaySoftness: number;\n /** Extra glow concentrated near the top. */\n readonly uTopGlow: number;\n /** Vertical falloff from the top. */\n readonly uFadeDistance: number;\n /** Horizontal wobble magnitude. */\n readonly uWobbleAmount: number;\n /** Wobble animation speed. */\n readonly uWobbleSpeed: number;\n};\n\n/** The `godrays` shader's tunable uniforms; defaults are the neutral cool-white look. */\nexport const GODRAYS_CONTROLS: readonly UniformControl[] = [\n { name: 'uLightColor', kind: 'color', default: [0.85, 0.95, 1.0], doc: 'Ray tint.' },\n {\n name: 'uRayCount',\n kind: 'float',\n default: 16,\n min: 2,\n max: 40,\n step: 1,\n doc: 'Number of ray bands.',\n },\n {\n name: 'uRaySpeed',\n kind: 'float',\n default: 0.95,\n min: 0,\n max: 3,\n step: 0.05,\n doc: 'Drift speed.',\n },\n {\n name: 'uRayIntensity',\n kind: 'float',\n default: 0.85,\n min: 0,\n max: 3,\n step: 0.05,\n doc: 'Brightness / additive strength.',\n },\n {\n name: 'uRaySoftness',\n kind: 'float',\n default: 2.4,\n min: 0.5,\n max: 6,\n step: 0.1,\n doc: 'Edge falloff; higher = crisper.',\n },\n {\n name: 'uTopGlow',\n kind: 'float',\n default: 0.65,\n min: 0,\n max: 1.5,\n step: 0.05,\n doc: 'Extra glow near the top.',\n },\n {\n name: 'uFadeDistance',\n kind: 'float',\n default: 1.25,\n min: 0.2,\n max: 3,\n step: 0.05,\n doc: 'Vertical falloff from the top.',\n },\n {\n name: 'uWobbleAmount',\n kind: 'float',\n default: 0.08,\n min: 0,\n max: 0.3,\n step: 0.01,\n doc: 'Horizontal wobble.',\n },\n {\n name: 'uWobbleSpeed',\n kind: 'float',\n default: 0.55,\n min: 0,\n max: 2,\n step: 0.05,\n doc: 'Wobble speed.',\n },\n];\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"halftone-waves.d.ts","sourceRoot":"","sources":["../../../../catalog/shaders/halftone-waves/halftone-waves.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,mCAAmC,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvD,4DAA4D;AAC5D,MAAM,MAAM,qBAAqB,GAAG;IAClC,mCAAmC;IACnC,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC;IACrB,iBAAiB;IACjB,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC;IACnB,kEAAkE;IAClE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,qCAAqC;IACrC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,mDAAmD;IACnD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,mCAAmC;IACnC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,gDAAgD;IAChD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,iCAAiC;IACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,gEAAgE;IAChE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,iFAAiF;AACjF,eAAO,MAAM,uBAAuB,EAAE,SAAS,cAAc,EAkE5D,CAAC"}
1
+ {"version":3,"file":"halftone-waves.d.ts","sourceRoot":"","sources":["../../../../catalog/shaders/halftone-waves/halftone-waves.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,mCAAmC,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvD,4DAA4D;AAC5D,MAAM,MAAM,qBAAqB,GAAG;IAClC,mCAAmC;IACnC,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC;IACrB,iBAAiB;IACjB,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC;IACnB,kEAAkE;IAClE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,qCAAqC;IACrC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,mDAAmD;IACnD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,mCAAmC;IACnC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,gDAAgD;IAChD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,iCAAiC;IACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,gEAAgE;IAChE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,iFAAiF;AACjF,eAAO,MAAM,uBAAuB,EAAE,SAAS,cAAc,EAkE5D,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"halftone-waves.js","sourceRoot":"","sources":["../../../../catalog/shaders/halftone-waves/halftone-waves.ts"],"names":[],"mappings":";AAAA,8EAA8E;AAC9E,oEAAoE;AACpE,4EAA4E;AAC5E,wEAAwE;AACxE,4EAA4E;AAC5E,gDAAgD;;;AA2BhD,iFAAiF;AACpE,QAAA,uBAAuB,GAA8B;IAChE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,cAAc,EAAE;IACnF,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,YAAY,EAAE;IAC9E;QACE,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,EAAE;QACX,GAAG,EAAE,CAAC;QACN,GAAG,EAAE,EAAE;QACP,IAAI,EAAE,CAAC;QACP,GAAG,EAAE,qCAAqC;KAC3C;IACD;QACE,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,IAAI;QACb,GAAG,EAAE,IAAI;QACT,GAAG,EAAE,GAAG;QACR,IAAI,EAAE,IAAI;QACV,GAAG,EAAE,gCAAgC;KACtC;IACD;QACE,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,IAAI;QACb,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,8BAA8B;KACpC;IACD;QACE,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,CAAC;QACV,GAAG,EAAE,CAAC;QACN,GAAG,EAAE,CAAC;QACN,IAAI,EAAE,IAAI;QACV,GAAG,EAAE,2CAA2C;KACjD;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,OAAO;QACb,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,CAAC;QACV,GAAG,EAAE,CAAC;QACN,GAAG,EAAE,CAAC;QACN,IAAI,EAAE,IAAI;QACV,GAAG,EAAE,8CAA8C;KACpD;CACF,CAAC","sourcesContent":["// Halftone-waves layer-shader interface: typed uniforms + control descriptor.\n// A dot lattice with traveling-wave size modulation (the late-2000s\n// \"mathematical\" tech texture), an opaque BACKGROUND layer (issue #61). One\n// halftone-waves.frag fans out into the book presets (boardroom, press,\n// ripple) by varying these uniforms; the two-tone palette is the big lever.\n// Shader source is shaders/halftone-waves.frag.\n\nimport type { RGB } from '../../../src/lib/primitives.types';\nimport type { UniformControl } from '../_shared/types';\n\n/** Typed uniforms for the `halftone-waves` layer shader. */\nexport type HalftoneWavesUniforms = {\n /** Field color behind the dots. */\n readonly uPaper: RGB;\n /** Dot color. */\n readonly uInk: RGB;\n /** Dot-grid cells across frame height; higher = finer texture. */\n readonly uPitch: number;\n /** Base dot radius in cell units. */\n readonly uDotSize: number;\n /** Wave modulation depth; 0 = static even dots. */\n readonly uWaveAmp: number;\n /** Wave travel rate; 0 freezes. */\n readonly uSpeed: number;\n /** Dot shape: 0 diamond, 1 circle, 2 square. */\n readonly uShape: number;\n /** Wave direction in radians. */\n readonly uAngle: number;\n /** Eases the waves at frame center (the face zone); 0 = off. */\n readonly uCalm: number;\n};\n\n/** The `halftone-waves` shader's tunables; defaults are the \"boardroom\" look. */\nexport const HALFTONE_WAVES_CONTROLS: readonly UniformControl[] = [\n { name: 'uPaper', kind: 'color', default: [0.95, 0.95, 0.94], doc: 'Field color.' },\n { name: 'uInk', kind: 'color', default: [0.62, 0.66, 0.7], doc: 'Dot color.' },\n {\n name: 'uPitch',\n kind: 'float',\n default: 26,\n min: 8,\n max: 60,\n step: 1,\n doc: 'Dot-grid cells across frame height.',\n },\n {\n name: 'uDotSize',\n kind: 'float',\n default: 0.26,\n min: 0.05,\n max: 0.5,\n step: 0.01,\n doc: 'Base dot radius in cell units.',\n },\n {\n name: 'uWaveAmp',\n kind: 'float',\n default: 0.55,\n min: 0,\n max: 1,\n step: 0.01,\n doc: 'Wave modulation depth.',\n },\n {\n name: 'uSpeed',\n kind: 'float',\n default: 0.5,\n min: 0,\n max: 2,\n step: 0.01,\n doc: 'Wave travel rate; 0 freezes.',\n },\n {\n name: 'uShape',\n kind: 'float',\n default: 1,\n min: 0,\n max: 2,\n step: 0.05,\n doc: 'Dot shape: 0 diamond, 1 circle, 2 square.',\n },\n {\n name: 'uAngle',\n kind: 'float',\n default: 0.6,\n min: 0,\n max: 6.28,\n step: 0.01,\n doc: 'Wave direction, radians.',\n },\n {\n name: 'uCalm',\n kind: 'float',\n default: 0,\n min: 0,\n max: 1,\n step: 0.01,\n doc: 'Eases the waves at frame center (face zone).',\n },\n];\n"]}
1
+ {"version":3,"file":"halftone-waves.js","sourceRoot":"","sources":["../../../../catalog/shaders/halftone-waves/halftone-waves.ts"],"names":[],"mappings":";AAAA,8EAA8E;AAC9E,oEAAoE;AACpE,4EAA4E;AAC5E,wEAAwE;AACxE,4EAA4E;AAC5E,gDAAgD;;;AA8BhD,iFAAiF;AACpE,QAAA,uBAAuB,GAA8B;IAChE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,cAAc,EAAE;IACnF,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,YAAY,EAAE;IAC9E;QACE,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,EAAE;QACX,GAAG,EAAE,CAAC;QACN,GAAG,EAAE,EAAE;QACP,IAAI,EAAE,CAAC;QACP,GAAG,EAAE,qCAAqC;KAC3C;IACD;QACE,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,IAAI;QACb,GAAG,EAAE,IAAI;QACT,GAAG,EAAE,GAAG;QACR,IAAI,EAAE,IAAI;QACV,GAAG,EAAE,gCAAgC;KACtC;IACD;QACE,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,IAAI;QACb,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,8BAA8B;KACpC;IACD;QACE,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,CAAC;QACV,GAAG,EAAE,CAAC;QACN,GAAG,EAAE,CAAC;QACN,IAAI,EAAE,IAAI;QACV,GAAG,EAAE,2CAA2C;KACjD;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,OAAO;QACb,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,CAAC;QACV,GAAG,EAAE,CAAC;QACN,GAAG,EAAE,CAAC;QACN,IAAI,EAAE,IAAI;QACV,GAAG,EAAE,8CAA8C;KACpD;CACF,CAAC","sourcesContent":["// Halftone-waves layer-shader interface: typed uniforms + control descriptor.\n// A dot lattice with traveling-wave size modulation (the late-2000s\n// \"mathematical\" tech texture), an opaque BACKGROUND layer (issue #61). One\n// halftone-waves.frag fans out into the book presets (boardroom, press,\n// ripple) by varying these uniforms; the two-tone palette is the big lever.\n// Shader source is shaders/halftone-waves.frag.\n\n// Cost: CHEAP -- ~0.45 ms/draw, ~1.6x 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 `halftone-waves` layer shader. */\nexport type HalftoneWavesUniforms = {\n /** Field color behind the dots. */\n readonly uPaper: RGB;\n /** Dot color. */\n readonly uInk: RGB;\n /** Dot-grid cells across frame height; higher = finer texture. */\n readonly uPitch: number;\n /** Base dot radius in cell units. */\n readonly uDotSize: number;\n /** Wave modulation depth; 0 = static even dots. */\n readonly uWaveAmp: number;\n /** Wave travel rate; 0 freezes. */\n readonly uSpeed: number;\n /** Dot shape: 0 diamond, 1 circle, 2 square. */\n readonly uShape: number;\n /** Wave direction in radians. */\n readonly uAngle: number;\n /** Eases the waves at frame center (the face zone); 0 = off. */\n readonly uCalm: number;\n};\n\n/** The `halftone-waves` shader's tunables; defaults are the \"boardroom\" look. */\nexport const HALFTONE_WAVES_CONTROLS: readonly UniformControl[] = [\n { name: 'uPaper', kind: 'color', default: [0.95, 0.95, 0.94], doc: 'Field color.' },\n { name: 'uInk', kind: 'color', default: [0.62, 0.66, 0.7], doc: 'Dot color.' },\n {\n name: 'uPitch',\n kind: 'float',\n default: 26,\n min: 8,\n max: 60,\n step: 1,\n doc: 'Dot-grid cells across frame height.',\n },\n {\n name: 'uDotSize',\n kind: 'float',\n default: 0.26,\n min: 0.05,\n max: 0.5,\n step: 0.01,\n doc: 'Base dot radius in cell units.',\n },\n {\n name: 'uWaveAmp',\n kind: 'float',\n default: 0.55,\n min: 0,\n max: 1,\n step: 0.01,\n doc: 'Wave modulation depth.',\n },\n {\n name: 'uSpeed',\n kind: 'float',\n default: 0.5,\n min: 0,\n max: 2,\n step: 0.01,\n doc: 'Wave travel rate; 0 freezes.',\n },\n {\n name: 'uShape',\n kind: 'float',\n default: 1,\n min: 0,\n max: 2,\n step: 0.05,\n doc: 'Dot shape: 0 diamond, 1 circle, 2 square.',\n },\n {\n name: 'uAngle',\n kind: 'float',\n default: 0.6,\n min: 0,\n max: 6.28,\n step: 0.01,\n doc: 'Wave direction, radians.',\n },\n {\n name: 'uCalm',\n kind: 'float',\n default: 0,\n min: 0,\n max: 1,\n step: 0.01,\n doc: 'Eases the waves at frame center (face zone).',\n },\n];\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"kaleidoscope.d.ts","sourceRoot":"","sources":["../../../../catalog/shaders/kaleidoscope/kaleidoscope.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,mCAAmC,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvD,0DAA0D;AAC1D,MAAM,MAAM,0BAA0B,GAAG;IACvC,4DAA4D;IAC5D,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC;IACtB,4BAA4B;IAC5B,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC;IACtB,+CAA+C;IAC/C,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC;IACtB,wDAAwD;IACxD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,sDAAsD;IACtD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,sDAAsD;IACtD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,oDAAoD;IACpD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,+DAA+D;IAC/D,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,mFAAmF;AACnF,eAAO,MAAM,qBAAqB,EAAE,SAAS,cAAc,EAiD1D,CAAC"}
1
+ {"version":3,"file":"kaleidoscope.d.ts","sourceRoot":"","sources":["../../../../catalog/shaders/kaleidoscope/kaleidoscope.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,mCAAmC,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvD,0DAA0D;AAC1D,MAAM,MAAM,0BAA0B,GAAG;IACvC,4DAA4D;IAC5D,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC;IACtB,4BAA4B;IAC5B,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC;IACtB,+CAA+C;IAC/C,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC;IACtB,wDAAwD;IACxD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,sDAAsD;IACtD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,sDAAsD;IACtD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,oDAAoD;IACpD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,+DAA+D;IAC/D,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,mFAAmF;AACnF,eAAO,MAAM,qBAAqB,EAAE,SAAS,cAAc,EAiD1D,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"kaleidoscope.js","sourceRoot":"","sources":["../../../../catalog/shaders/kaleidoscope/kaleidoscope.ts"],"names":[],"mappings":";AAAA,4EAA4E;AAC5E,+EAA+E;AAC/E,+EAA+E;AAC/E,8EAA8E;AAC9E,iEAAiE;AACjE,6BAA6B;;;AAyB7B,mFAAmF;AACtE,QAAA,qBAAqB,GAA8B;IAC9D,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,qBAAqB,EAAE;IAC3F,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,uBAAuB,EAAE;IAC5F,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,eAAe,EAAE;IACrF;QACE,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,CAAC;QACV,GAAG,EAAE,CAAC;QACN,GAAG,EAAE,EAAE;QACP,IAAI,EAAE,CAAC;QACP,GAAG,EAAE,mDAAmD;KACzD;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,wBAAwB;KAC9B;IACD;QACE,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,IAAI;QACb,GAAG,EAAE,CAAC,GAAG;QACT,GAAG,EAAE,GAAG;QACR,IAAI,EAAE,KAAK;QACX,GAAG,EAAE,iDAAiD;KACvD;IACD;QACE,IAAI,EAAE,OAAO;QACb,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,GAAG;QACZ,GAAG,EAAE,GAAG;QACR,GAAG,EAAE,CAAC;QACN,IAAI,EAAE,IAAI;QACV,GAAG,EAAE,+CAA+C;KACrD;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,6CAA6C;KACnD;CACF,CAAC","sourcesContent":["// Kaleidoscope layer-shader interface: typed uniforms + control descriptor.\n// The library's namesake: a mirrored polar fold over a drifting sine field, an\n// opaque BACKGROUND layer (issue #61). One kaleidoscope.frag fans out into the\n// book presets (stained-glass, mandala, prism) by varying these uniforms; the\n// segment count and palette are the big levers. Shader source is\n// shaders/kaleidoscope.frag.\n\nimport type { RGB } from '../../../src/lib/primitives.types';\nimport type { UniformControl } from '../_shared/types';\n\n/** Typed uniforms for the `kaleidoscope` layer shader. */\nexport type KaleidoscopeShaderUniforms = {\n /** Base palette color; also the pole uCalm eases toward. */\n readonly uColorA: RGB;\n /** Second palette color. */\n readonly uColorB: RGB;\n /** Accent color layered over the A/B field. */\n readonly uColorC: RGB;\n /** Mirror segment count; 6 = bold facets, 12 = lace. */\n readonly uSegments: number;\n /** Source-field drift rate; 0 freezes the pattern. */\n readonly uSpeed: number;\n /** Whole-field rotation rate; sign sets direction. */\n readonly uRotate: number;\n /** Pattern scale; higher = more rings of detail. */\n readonly uZoom: number;\n /** Eases contrast at frame center (the face zone); 0 = off. */\n readonly uCalm: number;\n};\n\n/** The `kaleidoscope` shader's tunables; defaults are the \"stained glass\" look. */\nexport const KALEIDOSCOPE_CONTROLS: readonly UniformControl[] = [\n { name: 'uColorA', kind: 'color', default: [0.07, 0.15, 0.36], doc: 'Base palette color.' },\n { name: 'uColorB', kind: 'color', default: [0.1, 0.55, 0.62], doc: 'Second palette color.' },\n { name: 'uColorC', kind: 'color', default: [0.93, 0.69, 0.21], doc: 'Accent color.' },\n {\n name: 'uSegments',\n kind: 'float',\n default: 8,\n min: 3,\n max: 16,\n step: 1,\n doc: 'Mirror segment count; 6 = bold facets, 12 = lace.',\n },\n {\n name: 'uSpeed',\n kind: 'float',\n default: 0.35,\n min: 0,\n max: 2,\n step: 0.01,\n doc: 'Drift rate; 0 freezes.',\n },\n {\n name: 'uRotate',\n kind: 'float',\n default: 0.04,\n min: -0.5,\n max: 0.5,\n step: 0.005,\n doc: 'Whole-field rotation rate; sign sets direction.',\n },\n {\n name: 'uZoom',\n kind: 'float',\n default: 1.6,\n min: 0.5,\n max: 4,\n step: 0.05,\n doc: 'Pattern scale; higher = more rings of detail.',\n },\n {\n name: 'uCalm',\n kind: 'float',\n default: 0,\n min: 0,\n max: 1,\n step: 0.01,\n doc: 'Eases contrast at frame center (face zone).',\n },\n];\n"]}
1
+ {"version":3,"file":"kaleidoscope.js","sourceRoot":"","sources":["../../../../catalog/shaders/kaleidoscope/kaleidoscope.ts"],"names":[],"mappings":";AAAA,4EAA4E;AAC5E,+EAA+E;AAC/E,+EAA+E;AAC/E,8EAA8E;AAC9E,iEAAiE;AACjE,6BAA6B;;;AA4B7B,mFAAmF;AACtE,QAAA,qBAAqB,GAA8B;IAC9D,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,qBAAqB,EAAE;IAC3F,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,uBAAuB,EAAE;IAC5F,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,eAAe,EAAE;IACrF;QACE,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,CAAC;QACV,GAAG,EAAE,CAAC;QACN,GAAG,EAAE,EAAE;QACP,IAAI,EAAE,CAAC;QACP,GAAG,EAAE,mDAAmD;KACzD;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,wBAAwB;KAC9B;IACD;QACE,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,IAAI;QACb,GAAG,EAAE,CAAC,GAAG;QACT,GAAG,EAAE,GAAG;QACR,IAAI,EAAE,KAAK;QACX,GAAG,EAAE,iDAAiD;KACvD;IACD;QACE,IAAI,EAAE,OAAO;QACb,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,GAAG;QACZ,GAAG,EAAE,GAAG;QACR,GAAG,EAAE,CAAC;QACN,IAAI,EAAE,IAAI;QACV,GAAG,EAAE,+CAA+C;KACrD;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,6CAA6C;KACnD;CACF,CAAC","sourcesContent":["// Kaleidoscope layer-shader interface: typed uniforms + control descriptor.\n// The library's namesake: a mirrored polar fold over a drifting sine field, an\n// opaque BACKGROUND layer (issue #61). One kaleidoscope.frag fans out into the\n// book presets (stained-glass, mandala, prism) by varying these uniforms; the\n// segment count and palette are the big levers. Shader source is\n// shaders/kaleidoscope.frag.\n\n// Cost: CHEAP -- ~0.96 ms/draw, ~3.3x 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 `kaleidoscope` layer shader. */\nexport type KaleidoscopeShaderUniforms = {\n /** Base palette color; also the pole uCalm eases toward. */\n readonly uColorA: RGB;\n /** Second palette color. */\n readonly uColorB: RGB;\n /** Accent color layered over the A/B field. */\n readonly uColorC: RGB;\n /** Mirror segment count; 6 = bold facets, 12 = lace. */\n readonly uSegments: number;\n /** Source-field drift rate; 0 freezes the pattern. */\n readonly uSpeed: number;\n /** Whole-field rotation rate; sign sets direction. */\n readonly uRotate: number;\n /** Pattern scale; higher = more rings of detail. */\n readonly uZoom: number;\n /** Eases contrast at frame center (the face zone); 0 = off. */\n readonly uCalm: number;\n};\n\n/** The `kaleidoscope` shader's tunables; defaults are the \"stained glass\" look. */\nexport const KALEIDOSCOPE_CONTROLS: readonly UniformControl[] = [\n { name: 'uColorA', kind: 'color', default: [0.07, 0.15, 0.36], doc: 'Base palette color.' },\n { name: 'uColorB', kind: 'color', default: [0.1, 0.55, 0.62], doc: 'Second palette color.' },\n { name: 'uColorC', kind: 'color', default: [0.93, 0.69, 0.21], doc: 'Accent color.' },\n {\n name: 'uSegments',\n kind: 'float',\n default: 8,\n min: 3,\n max: 16,\n step: 1,\n doc: 'Mirror segment count; 6 = bold facets, 12 = lace.',\n },\n {\n name: 'uSpeed',\n kind: 'float',\n default: 0.35,\n min: 0,\n max: 2,\n step: 0.01,\n doc: 'Drift rate; 0 freezes.',\n },\n {\n name: 'uRotate',\n kind: 'float',\n default: 0.04,\n min: -0.5,\n max: 0.5,\n step: 0.005,\n doc: 'Whole-field rotation rate; sign sets direction.',\n },\n {\n name: 'uZoom',\n kind: 'float',\n default: 1.6,\n min: 0.5,\n max: 4,\n step: 0.05,\n doc: 'Pattern scale; higher = more rings of detail.',\n },\n {\n name: 'uCalm',\n kind: 'float',\n default: 0,\n min: 0,\n max: 1,\n step: 0.01,\n doc: 'Eases contrast at frame center (face zone).',\n },\n];\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"light-beams-and-motes.d.ts","sourceRoot":"","sources":["../../../../catalog/shaders/light-beams-and-motes/light-beams-and-motes.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,mCAAmC,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvD,mEAAmE;AACnE,MAAM,MAAM,0BAA0B,GAAG;IACvC,sDAAsD;IACtD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,wDAAwD;IACxD,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,2DAA2D;IAC3D,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,yEAAyE;IACzE,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,oBAAoB;IACpB,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC;IAC1B,uCAAuC;IACvC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,kDAAkD;IAClD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,yEAAyE;IACzE,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,oBAAoB;IACpB,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC;IAC1B,uCAAuC;IACvC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,kDAAkD;IAClD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,yEAAyE;IACzE,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,oBAAoB;IACpB,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC;IAC1B,uCAAuC;IACvC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,kDAAkD;IAClD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,kCAAkC;IAClC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,gDAAgD;IAChD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,8CAA8C;IAC9C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B,CAAC;AA6BF,gGAAgG;AAChG,eAAO,MAAM,8BAA8B,EAAE,SAAS,cAAc,EA0DnE,CAAC"}
1
+ {"version":3,"file":"light-beams-and-motes.d.ts","sourceRoot":"","sources":["../../../../catalog/shaders/light-beams-and-motes/light-beams-and-motes.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,mCAAmC,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvD,mEAAmE;AACnE,MAAM,MAAM,0BAA0B,GAAG;IACvC,sDAAsD;IACtD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,wDAAwD;IACxD,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,2DAA2D;IAC3D,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,yEAAyE;IACzE,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,oBAAoB;IACpB,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC;IAC1B,uCAAuC;IACvC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,kDAAkD;IAClD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,yEAAyE;IACzE,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,oBAAoB;IACpB,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC;IAC1B,uCAAuC;IACvC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,kDAAkD;IAClD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,yEAAyE;IACzE,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,oBAAoB;IACpB,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC;IAC1B,uCAAuC;IACvC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,kDAAkD;IAClD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,kCAAkC;IAClC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,gDAAgD;IAChD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,8CAA8C;IAC9C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B,CAAC;AA6BF,gGAAgG;AAChG,eAAO,MAAM,8BAA8B,EAAE,SAAS,cAAc,EA0DnE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"light-beams-and-motes.js","sourceRoot":"","sources":["../../../../catalog/shaders/light-beams-and-motes/light-beams-and-motes.ts"],"names":[],"mappings":"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","sourcesContent":["// Light-beams-and-motes layer-shader interface: typed uniforms + control\n// descriptor. A transparent overlay of dust motes drifting inside three\n// independently positioned, colored, and lit polygon light beams (use blend\n// 'additive'). Shader source is ./light-beams-and-motes.frag. Each beam owns a\n// 4-point quad (row-major TL, TR, BL, BR; y-up), a color, a fill strength, and an\n// on/off flag; the motes are shared. 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 `light-beams-and-motes` layer shader. */\nexport type LightBeamsAndMotesUniforms = {\n /** Animation rate; 1 = stock, 0 freezes the field. */\n readonly uSpeed: number;\n /** Beam polygon edge softness (shared by all beams). */\n readonly uBeamSoftness: number;\n /** Overall overlay opacity, applied to the final alpha. */\n readonly uOverlayAlpha: number;\n /** Beam 1 quad corners row-major (TL, TR, BL, BR), flat [x0,y0, ...]. */\n readonly uBeam1Poly: readonly number[];\n /** Beam 1 color. */\n readonly uBeam1Color: RGB;\n /** Beam 1 fill strength (absolute). */\n readonly uBeam1Alpha: number;\n /** Beam 1 on/off; 0 skips it entirely, 1 = on. */\n readonly uBeam1On: number;\n /** Beam 2 quad corners row-major (TL, TR, BL, BR), flat [x0,y0, ...]. */\n readonly uBeam2Poly: readonly number[];\n /** Beam 2 color. */\n readonly uBeam2Color: RGB;\n /** Beam 2 fill strength (absolute). */\n readonly uBeam2Alpha: number;\n /** Beam 2 on/off; 0 skips it entirely, 1 = on. */\n readonly uBeam2On: number;\n /** Beam 3 quad corners row-major (TL, TR, BL, BR), flat [x0,y0, ...]. */\n readonly uBeam3Poly: readonly number[];\n /** Beam 3 color. */\n readonly uBeam3Color: RGB;\n /** Beam 3 fill strength (absolute). */\n readonly uBeam3Alpha: number;\n /** Beam 3 on/off; 0 skips it entirely, 1 = on. */\n readonly uBeam3On: number;\n /** Mote brightness (absolute). */\n readonly uMoteAlpha: number;\n /** Mote glow radius, in mote-size multiples. */\n readonly uGlowSize: number;\n /** Active motes (<= 128); fewer = cheaper. */\n readonly uMoteCount: number;\n};\n\n// Per-beam control triples, generated so beam 1/2/3 stay identical in shape.\nconst beamControls = (\n n: 1 | 2 | 3,\n poly: readonly number[],\n color: RGB,\n alpha: number,\n): readonly UniformControl[] => [\n { name: `uBeam${n}On`, kind: 'switch', default: 1, doc: `Beam ${n} on/off (0 skips it).` },\n { name: `uBeam${n}Color`, kind: 'color', default: color, doc: `Beam ${n} color.` },\n {\n name: `uBeam${n}Alpha`,\n kind: 'float',\n default: alpha,\n min: 0,\n max: 1,\n step: 0.01,\n doc: `Beam ${n} fill strength.`,\n },\n {\n name: `uBeam${n}Poly`,\n kind: 'polygon',\n points: 4,\n default: poly,\n doc: `Beam ${n} corners row-major (TL, TR, BL, BR), y-up.`,\n },\n];\n\n/** The `light-beams-and-motes` shader's tunable uniforms; defaults reproduce the stock look. */\nexport const LIGHT_BEAMS_AND_MOTES_CONTROLS: readonly UniformControl[] = [\n {\n name: 'uSpeed',\n kind: 'float',\n default: 1,\n min: 0,\n max: 3,\n step: 0.01,\n doc: 'Animation rate; 0 freezes.',\n },\n {\n name: 'uBeamSoftness',\n kind: 'float',\n default: 0.055,\n min: 0.005,\n max: 0.2,\n step: 0.005,\n doc: 'Beam edge softness.',\n },\n {\n name: 'uOverlayAlpha',\n kind: 'float',\n default: 0.72,\n min: 0,\n max: 1,\n step: 0.01,\n doc: 'Overall overlay opacity.',\n },\n ...beamControls(1, [0.02, 1.05, 0.17, 1.05, 0.36, 0, 0.68, 0], [1.0, 0.42, 0.32], 0.13),\n ...beamControls(2, [0.45, 1.05, 0.57, 1.05, 0.33, 0, 0.73, 0], [0.54, 1.0, 0.62], 0.086),\n ...beamControls(3, [0.82, 1.05, 0.99, 1.05, 0.38, 0, 0.7, 0], [0.55, 0.66, 1.0], 0.104),\n {\n name: 'uMoteCount',\n kind: 'float',\n default: 128,\n min: 0,\n max: 128,\n step: 1,\n doc: 'Active motes (fewer = cheaper).',\n },\n {\n name: 'uMoteAlpha',\n kind: 'float',\n default: 0.48,\n min: 0,\n max: 2,\n step: 0.01,\n doc: 'Mote brightness.',\n },\n {\n name: 'uGlowSize',\n kind: 'float',\n default: 3.2,\n min: 1,\n max: 6,\n step: 0.1,\n doc: 'Mote glow radius (size multiples).',\n },\n];\n"]}
1
+ {"version":3,"file":"light-beams-and-motes.js","sourceRoot":"","sources":["../../../../catalog/shaders/light-beams-and-motes/light-beams-and-motes.ts"],"names":[],"mappings":"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","sourcesContent":["// Light-beams-and-motes layer-shader interface: typed uniforms + control\n// descriptor. A transparent overlay of dust motes drifting inside three\n// independently positioned, colored, and lit polygon light beams (use blend\n// 'additive'). Shader source is ./light-beams-and-motes.frag. Each beam owns a\n// 4-point quad (row-major TL, TR, BL, BR; y-up), a color, a fill strength, and an\n// on/off flag; the motes are shared. Defaults reproduce the stock prototype look.\n\n// Cost: VERY-HEAVY -- ~142 ms/draw, ~490x plasma (shader:view meter\n// @1920, Intel UHD 770, default uniforms, 2026-06-14). Per-pixel mote loop dominates; scales with uMoteCount and uGlowSize. An overlay (not always on).\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 `light-beams-and-motes` layer shader. */\nexport type LightBeamsAndMotesUniforms = {\n /** Animation rate; 1 = stock, 0 freezes the field. */\n readonly uSpeed: number;\n /** Beam polygon edge softness (shared by all beams). */\n readonly uBeamSoftness: number;\n /** Overall overlay opacity, applied to the final alpha. */\n readonly uOverlayAlpha: number;\n /** Beam 1 quad corners row-major (TL, TR, BL, BR), flat [x0,y0, ...]. */\n readonly uBeam1Poly: readonly number[];\n /** Beam 1 color. */\n readonly uBeam1Color: RGB;\n /** Beam 1 fill strength (absolute). */\n readonly uBeam1Alpha: number;\n /** Beam 1 on/off; 0 skips it entirely, 1 = on. */\n readonly uBeam1On: number;\n /** Beam 2 quad corners row-major (TL, TR, BL, BR), flat [x0,y0, ...]. */\n readonly uBeam2Poly: readonly number[];\n /** Beam 2 color. */\n readonly uBeam2Color: RGB;\n /** Beam 2 fill strength (absolute). */\n readonly uBeam2Alpha: number;\n /** Beam 2 on/off; 0 skips it entirely, 1 = on. */\n readonly uBeam2On: number;\n /** Beam 3 quad corners row-major (TL, TR, BL, BR), flat [x0,y0, ...]. */\n readonly uBeam3Poly: readonly number[];\n /** Beam 3 color. */\n readonly uBeam3Color: RGB;\n /** Beam 3 fill strength (absolute). */\n readonly uBeam3Alpha: number;\n /** Beam 3 on/off; 0 skips it entirely, 1 = on. */\n readonly uBeam3On: number;\n /** Mote brightness (absolute). */\n readonly uMoteAlpha: number;\n /** Mote glow radius, in mote-size multiples. */\n readonly uGlowSize: number;\n /** Active motes (<= 128); fewer = cheaper. */\n readonly uMoteCount: number;\n};\n\n// Per-beam control triples, generated so beam 1/2/3 stay identical in shape.\nconst beamControls = (\n n: 1 | 2 | 3,\n poly: readonly number[],\n color: RGB,\n alpha: number,\n): readonly UniformControl[] => [\n { name: `uBeam${n}On`, kind: 'switch', default: 1, doc: `Beam ${n} on/off (0 skips it).` },\n { name: `uBeam${n}Color`, kind: 'color', default: color, doc: `Beam ${n} color.` },\n {\n name: `uBeam${n}Alpha`,\n kind: 'float',\n default: alpha,\n min: 0,\n max: 1,\n step: 0.01,\n doc: `Beam ${n} fill strength.`,\n },\n {\n name: `uBeam${n}Poly`,\n kind: 'polygon',\n points: 4,\n default: poly,\n doc: `Beam ${n} corners row-major (TL, TR, BL, BR), y-up.`,\n },\n];\n\n/** The `light-beams-and-motes` shader's tunable uniforms; defaults reproduce the stock look. */\nexport const LIGHT_BEAMS_AND_MOTES_CONTROLS: readonly UniformControl[] = [\n {\n name: 'uSpeed',\n kind: 'float',\n default: 1,\n min: 0,\n max: 3,\n step: 0.01,\n doc: 'Animation rate; 0 freezes.',\n },\n {\n name: 'uBeamSoftness',\n kind: 'float',\n default: 0.055,\n min: 0.005,\n max: 0.2,\n step: 0.005,\n doc: 'Beam edge softness.',\n },\n {\n name: 'uOverlayAlpha',\n kind: 'float',\n default: 0.72,\n min: 0,\n max: 1,\n step: 0.01,\n doc: 'Overall overlay opacity.',\n },\n ...beamControls(1, [0.02, 1.05, 0.17, 1.05, 0.36, 0, 0.68, 0], [1.0, 0.42, 0.32], 0.13),\n ...beamControls(2, [0.45, 1.05, 0.57, 1.05, 0.33, 0, 0.73, 0], [0.54, 1.0, 0.62], 0.086),\n ...beamControls(3, [0.82, 1.05, 0.99, 1.05, 0.38, 0, 0.7, 0], [0.55, 0.66, 1.0], 0.104),\n {\n name: 'uMoteCount',\n kind: 'float',\n default: 128,\n min: 0,\n max: 128,\n step: 1,\n doc: 'Active motes (fewer = cheaper).',\n },\n {\n name: 'uMoteAlpha',\n kind: 'float',\n default: 0.48,\n min: 0,\n max: 2,\n step: 0.01,\n doc: 'Mote brightness.',\n },\n {\n name: 'uGlowSize',\n kind: 'float',\n default: 3.2,\n min: 1,\n max: 6,\n step: 0.1,\n doc: 'Mote glow radius (size multiples).',\n },\n];\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"nebula.d.ts","sourceRoot":"","sources":["../../../../catalog/shaders/nebula/nebula.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,uEAAuE;IACvE,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC;IACrB,iEAAiE;IACjE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,6DAA6D;IAC7D,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,kDAAkD;IAClD,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,0DAA0D;IAC1D,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,wDAAwD;IACxD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF,iFAAiF;AACjF,eAAO,MAAM,eAAe,EAAE,SAAS,cAAc,EA+CpD,CAAC"}
1
+ {"version":3,"file":"nebula.d.ts","sourceRoot":"","sources":["../../../../catalog/shaders/nebula/nebula.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,uEAAuE;IACvE,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC;IACrB,iEAAiE;IACjE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,6DAA6D;IAC7D,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,kDAAkD;IAClD,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,0DAA0D;IAC1D,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,wDAAwD;IACxD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF,iFAAiF;AACjF,eAAO,MAAM,eAAe,EAAE,SAAS,cAAc,EA+CpD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"nebula.js","sourceRoot":"","sources":["../../../../catalog/shaders/nebula/nebula.ts"],"names":[],"mappings":";AAAA,8EAA8E;AAC9E,yEAAyE;AACzE,gFAAgF;AAChF,4EAA4E;AAC5E,iBAAiB;;;AAqBjB,iFAAiF;AACpE,QAAA,eAAe,GAA8B;IACxD,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;QACV,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,CAAC;QACV,GAAG,EAAE,CAAC;QACN,GAAG,EAAE,CAAC;QACN,IAAI,EAAE,IAAI;QACV,GAAG,EAAE,mCAAmC;KACzC;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,oBAAoB;KAC1B;IACD;QACE,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,CAAC;QACV,GAAG,EAAE,GAAG;QACR,GAAG,EAAE,CAAC;QACN,IAAI,EAAE,IAAI;QACV,GAAG,EAAE,2CAA2C;KACjD;IACD;QACE,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,CAAC;QACV,GAAG,EAAE,GAAG;QACR,GAAG,EAAE,CAAC;QACN,IAAI,EAAE,IAAI;QACV,GAAG,EAAE,iBAAiB;KACvB;CACF,CAAC","sourcesContent":["// Nebula layer-shader interface: typed uniforms + control descriptor. A deep-\n// space starfield BACKGROUND layer (opaque), uniform-ized from the fixed\n// Deadlights V2 backdrop so a composite can color-grade and pace it (the nebula\n// composite runs it full-frame behind the masked subject). Shader source is\n// ./nebula.frag.\n\nimport type { RGB } from '../../../src/lib/primitives.types';\nimport type { UniformControl } from '../_shared/types';\n\n/** Typed uniforms for the `nebula` layer shader. */\nexport type NebulaUniforms = {\n /** Overall tint / color grade; [1,1,1] keeps the stock star colors. */\n readonly uColor: RGB;\n /** Final glow multiplier; 1 = stock, higher = brighter field. */\n readonly uBrightness: number;\n /** Drift + rotation rate; 1 = stock, 0 freezes the field. */\n readonly uSpeed: number;\n /** Star color-cycle (twinkle) rate; 1 = stock. */\n readonly uTwinkleSpeed: number;\n /** Starfield zoom / density; >1 = more, smaller stars. */\n readonly uScale: number;\n /** Star-core size; 1 = stock, higher = fatter cores. */\n readonly uStarGlow: number;\n};\n\n/** The `nebula` shader's tunable uniforms; defaults reproduce the stock look. */\nexport const NEBULA_CONTROLS: readonly UniformControl[] = [\n { name: 'uColor', kind: 'color', default: [1, 1, 1], doc: 'Overall tint / color grade.' },\n {\n name: 'uBrightness',\n kind: 'float',\n default: 1,\n min: 0,\n max: 3,\n step: 0.01,\n doc: 'Final glow multiplier.',\n },\n {\n name: 'uSpeed',\n kind: 'float',\n default: 1,\n min: 0,\n max: 3,\n step: 0.01,\n doc: 'Drift + rotation rate; 0 freezes.',\n },\n {\n name: 'uTwinkleSpeed',\n kind: 'float',\n default: 1,\n min: 0,\n max: 3,\n step: 0.01,\n doc: 'Star twinkle rate.',\n },\n {\n name: 'uScale',\n kind: 'float',\n default: 1,\n min: 0.3,\n max: 3,\n step: 0.01,\n doc: 'Zoom / density; >1 = more, smaller stars.',\n },\n {\n name: 'uStarGlow',\n kind: 'float',\n default: 1,\n min: 0.2,\n max: 3,\n step: 0.01,\n doc: 'Star-core size.',\n },\n];\n"]}
1
+ {"version":3,"file":"nebula.js","sourceRoot":"","sources":["../../../../catalog/shaders/nebula/nebula.ts"],"names":[],"mappings":";AAAA,8EAA8E;AAC9E,yEAAyE;AACzE,gFAAgF;AAChF,4EAA4E;AAC5E,iBAAiB;;;AAwBjB,iFAAiF;AACpE,QAAA,eAAe,GAA8B;IACxD,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;QACV,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,CAAC;QACV,GAAG,EAAE,CAAC;QACN,GAAG,EAAE,CAAC;QACN,IAAI,EAAE,IAAI;QACV,GAAG,EAAE,mCAAmC;KACzC;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,oBAAoB;KAC1B;IACD;QACE,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,CAAC;QACV,GAAG,EAAE,GAAG;QACR,GAAG,EAAE,CAAC;QACN,IAAI,EAAE,IAAI;QACV,GAAG,EAAE,2CAA2C;KACjD;IACD;QACE,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,CAAC;QACV,GAAG,EAAE,GAAG;QACR,GAAG,EAAE,CAAC;QACN,IAAI,EAAE,IAAI;QACV,GAAG,EAAE,iBAAiB;KACvB;CACF,CAAC","sourcesContent":["// Nebula layer-shader interface: typed uniforms + control descriptor. A deep-\n// space starfield BACKGROUND layer (opaque), uniform-ized from the fixed\n// Deadlights V2 backdrop so a composite can color-grade and pace it (the nebula\n// composite runs it full-frame behind the masked subject). Shader source is\n// ./nebula.frag.\n\n// Cost: HEAVY -- ~15 ms/draw, ~51x plasma (shader:view meter\n// @1920, Intel UHD 770, default uniforms, 2026-06-14). Layers x a 3x3 cell sweep; scales with STARFIELD_LAYERS_COUNT.\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 `nebula` layer shader. */\nexport type NebulaUniforms = {\n /** Overall tint / color grade; [1,1,1] keeps the stock star colors. */\n readonly uColor: RGB;\n /** Final glow multiplier; 1 = stock, higher = brighter field. */\n readonly uBrightness: number;\n /** Drift + rotation rate; 1 = stock, 0 freezes the field. */\n readonly uSpeed: number;\n /** Star color-cycle (twinkle) rate; 1 = stock. */\n readonly uTwinkleSpeed: number;\n /** Starfield zoom / density; >1 = more, smaller stars. */\n readonly uScale: number;\n /** Star-core size; 1 = stock, higher = fatter cores. */\n readonly uStarGlow: number;\n};\n\n/** The `nebula` shader's tunable uniforms; defaults reproduce the stock look. */\nexport const NEBULA_CONTROLS: readonly UniformControl[] = [\n { name: 'uColor', kind: 'color', default: [1, 1, 1], doc: 'Overall tint / color grade.' },\n {\n name: 'uBrightness',\n kind: 'float',\n default: 1,\n min: 0,\n max: 3,\n step: 0.01,\n doc: 'Final glow multiplier.',\n },\n {\n name: 'uSpeed',\n kind: 'float',\n default: 1,\n min: 0,\n max: 3,\n step: 0.01,\n doc: 'Drift + rotation rate; 0 freezes.',\n },\n {\n name: 'uTwinkleSpeed',\n kind: 'float',\n default: 1,\n min: 0,\n max: 3,\n step: 0.01,\n doc: 'Star twinkle rate.',\n },\n {\n name: 'uScale',\n kind: 'float',\n default: 1,\n min: 0.3,\n max: 3,\n step: 0.01,\n doc: 'Zoom / density; >1 = more, smaller stars.',\n },\n {\n name: 'uStarGlow',\n kind: 'float',\n default: 1,\n min: 0.2,\n max: 3,\n step: 0.01,\n doc: 'Star-core size.',\n },\n];\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"neo-memphis.d.ts","sourceRoot":"","sources":["../../../../catalog/shaders/neo-memphis/neo-memphis.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,qCAAqC;IACrC,QAAQ,CAAC,QAAQ,EAAE,GAAG,CAAC;IACvB,6BAA6B;IAC7B,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC;IACtB,6BAA6B;IAC7B,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC;IACtB,6BAA6B;IAC7B,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC;IACtB,4EAA4E;IAC5E,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,8DAA8D;IAC9D,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,8DAA8D;IAC9D,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,yCAAyC;IACzC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,+DAA+D;IAC/D,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,kFAAkF;AAClF,eAAO,MAAM,oBAAoB,EAAE,SAAS,cAAc,EAkDzD,CAAC"}
1
+ {"version":3,"file":"neo-memphis.d.ts","sourceRoot":"","sources":["../../../../catalog/shaders/neo-memphis/neo-memphis.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,qCAAqC;IACrC,QAAQ,CAAC,QAAQ,EAAE,GAAG,CAAC;IACvB,6BAA6B;IAC7B,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC;IACtB,6BAA6B;IAC7B,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC;IACtB,6BAA6B;IAC7B,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC;IACtB,4EAA4E;IAC5E,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,8DAA8D;IAC9D,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,8DAA8D;IAC9D,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,yCAAyC;IACzC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,+DAA+D;IAC/D,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,kFAAkF;AAClF,eAAO,MAAM,oBAAoB,EAAE,SAAS,cAAc,EAkDzD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"neo-memphis.js","sourceRoot":"","sources":["../../../../catalog/shaders/neo-memphis/neo-memphis.ts"],"names":[],"mappings":";AAAA,2EAA2E;AAC3E,0EAA0E;AAC1E,+DAA+D;AAC/D,sEAAsE;AACtE,4EAA4E;AAC5E,sCAAsC;;;AA2BtC,kFAAkF;AACrE,QAAA,oBAAoB,GAA8B;IAC7D,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,cAAc,EAAE;IACrF,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,wBAAwB,EAAE;IAC9F,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,wBAAwB,EAAE;IAC9F,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,wBAAwB,EAAE;IAC9F;QACE,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,CAAC;QACV,GAAG,EAAE,CAAC;QACN,GAAG,EAAE,EAAE;QACP,IAAI,EAAE,GAAG;QACT,GAAG,EAAE,sCAAsC;KAC5C;IACD;QACE,IAAI,EAAE,UAAU;QAChB,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,UAAU;QAChB,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,GAAG;QACZ,GAAG,EAAE,CAAC;QACN,GAAG,EAAE,CAAC;QACN,IAAI,EAAE,IAAI;QACV,GAAG,EAAE,qCAAqC;KAC3C;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,gCAAgC;KACtC;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,2CAA2C;KACjD;CACF,CAAC","sourcesContent":["// Neo-Memphis layer-shader interface: typed uniforms + control descriptor.\n// Scattered flat-color geometric primitives (the 90s Memphis / \"Jazz cup\"\n// pattern family), an opaque BACKGROUND layer (issue #61). One\n// neo-memphis.frag fans out into the book presets (jazz-cup, bauhaus,\n// confetti) by varying these uniforms; the palette is the big lever. Shader\n// source is shaders/neo-memphis.frag.\n\nimport type { RGB } from '../../../src/lib/primitives.types';\nimport type { UniformControl } from '../_shared/types';\n\n/** Typed uniforms for the `neo-memphis` layer shader. */\nexport type NeoMemphisUniforms = {\n /** Field color behind the shapes. */\n readonly uBgColor: RGB;\n /** Shape palette color 1. */\n readonly uColorA: RGB;\n /** Shape palette color 2. */\n readonly uColorB: RGB;\n /** Shape palette color 3. */\n readonly uColorC: RGB;\n /** Hero-grid cells across frame height; higher = smaller, busier shapes. */\n readonly uScale: number;\n /** Probability a cell draws its shape; the busy-ness dial. */\n readonly uDensity: number;\n /** Probability a shape renders outlined instead of filled. */\n readonly uOutline: number;\n /** Scroll + rotation rate; 0 freezes. */\n readonly uDrift: number;\n /** Fades shapes near frame center (the face zone); 0 = off. */\n readonly uCalm: number;\n};\n\n/** The `neo-memphis` shader's tunables; defaults are the \"pastel studio\" look. */\nexport const NEO_MEMPHIS_CONTROLS: readonly UniformControl[] = [\n { name: 'uBgColor', kind: 'color', default: [0.96, 0.94, 0.89], doc: 'Field color.' },\n { name: 'uColorA', kind: 'color', default: [0.16, 0.62, 0.56], doc: 'Shape palette color 1.' },\n { name: 'uColorB', kind: 'color', default: [0.91, 0.45, 0.45], doc: 'Shape palette color 2.' },\n { name: 'uColorC', kind: 'color', default: [0.27, 0.32, 0.55], doc: 'Shape palette color 3.' },\n {\n name: 'uScale',\n kind: 'float',\n default: 4,\n min: 2,\n max: 10,\n step: 0.5,\n doc: 'Hero-grid cells across frame height.',\n },\n {\n name: 'uDensity',\n kind: 'float',\n default: 0.6,\n min: 0,\n max: 1,\n step: 0.01,\n doc: 'Probability a cell draws; busy-ness.',\n },\n {\n name: 'uOutline',\n kind: 'float',\n default: 0.4,\n min: 0,\n max: 1,\n step: 0.01,\n doc: 'Share of outlined vs filled shapes.',\n },\n {\n name: 'uDrift',\n kind: 'float',\n default: 0.5,\n min: 0,\n max: 2,\n step: 0.01,\n doc: 'Scroll + spin rate; 0 freezes.',\n },\n {\n name: 'uCalm',\n kind: 'float',\n default: 0,\n min: 0,\n max: 1,\n step: 0.01,\n doc: 'Fades shapes at frame center (face zone).',\n },\n];\n"]}
1
+ {"version":3,"file":"neo-memphis.js","sourceRoot":"","sources":["../../../../catalog/shaders/neo-memphis/neo-memphis.ts"],"names":[],"mappings":";AAAA,2EAA2E;AAC3E,0EAA0E;AAC1E,+DAA+D;AAC/D,sEAAsE;AACtE,4EAA4E;AAC5E,sCAAsC;;;AA8BtC,kFAAkF;AACrE,QAAA,oBAAoB,GAA8B;IAC7D,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,cAAc,EAAE;IACrF,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,wBAAwB,EAAE;IAC9F,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,wBAAwB,EAAE;IAC9F,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,wBAAwB,EAAE;IAC9F;QACE,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,CAAC;QACV,GAAG,EAAE,CAAC;QACN,GAAG,EAAE,EAAE;QACP,IAAI,EAAE,GAAG;QACT,GAAG,EAAE,sCAAsC;KAC5C;IACD;QACE,IAAI,EAAE,UAAU;QAChB,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,UAAU;QAChB,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,GAAG;QACZ,GAAG,EAAE,CAAC;QACN,GAAG,EAAE,CAAC;QACN,IAAI,EAAE,IAAI;QACV,GAAG,EAAE,qCAAqC;KAC3C;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,gCAAgC;KACtC;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,2CAA2C;KACjD;CACF,CAAC","sourcesContent":["// Neo-Memphis layer-shader interface: typed uniforms + control descriptor.\n// Scattered flat-color geometric primitives (the 90s Memphis / \"Jazz cup\"\n// pattern family), an opaque BACKGROUND layer (issue #61). One\n// neo-memphis.frag fans out into the book presets (jazz-cup, bauhaus,\n// confetti) by varying these uniforms; the palette is the big lever. Shader\n// source is shaders/neo-memphis.frag.\n\n// Cost: CHEAP -- ~1.0 ms/draw, ~3.4x 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 `neo-memphis` layer shader. */\nexport type NeoMemphisUniforms = {\n /** Field color behind the shapes. */\n readonly uBgColor: RGB;\n /** Shape palette color 1. */\n readonly uColorA: RGB;\n /** Shape palette color 2. */\n readonly uColorB: RGB;\n /** Shape palette color 3. */\n readonly uColorC: RGB;\n /** Hero-grid cells across frame height; higher = smaller, busier shapes. */\n readonly uScale: number;\n /** Probability a cell draws its shape; the busy-ness dial. */\n readonly uDensity: number;\n /** Probability a shape renders outlined instead of filled. */\n readonly uOutline: number;\n /** Scroll + rotation rate; 0 freezes. */\n readonly uDrift: number;\n /** Fades shapes near frame center (the face zone); 0 = off. */\n readonly uCalm: number;\n};\n\n/** The `neo-memphis` shader's tunables; defaults are the \"pastel studio\" look. */\nexport const NEO_MEMPHIS_CONTROLS: readonly UniformControl[] = [\n { name: 'uBgColor', kind: 'color', default: [0.96, 0.94, 0.89], doc: 'Field color.' },\n { name: 'uColorA', kind: 'color', default: [0.16, 0.62, 0.56], doc: 'Shape palette color 1.' },\n { name: 'uColorB', kind: 'color', default: [0.91, 0.45, 0.45], doc: 'Shape palette color 2.' },\n { name: 'uColorC', kind: 'color', default: [0.27, 0.32, 0.55], doc: 'Shape palette color 3.' },\n {\n name: 'uScale',\n kind: 'float',\n default: 4,\n min: 2,\n max: 10,\n step: 0.5,\n doc: 'Hero-grid cells across frame height.',\n },\n {\n name: 'uDensity',\n kind: 'float',\n default: 0.6,\n min: 0,\n max: 1,\n step: 0.01,\n doc: 'Probability a cell draws; busy-ness.',\n },\n {\n name: 'uOutline',\n kind: 'float',\n default: 0.4,\n min: 0,\n max: 1,\n step: 0.01,\n doc: 'Share of outlined vs filled shapes.',\n },\n {\n name: 'uDrift',\n kind: 'float',\n default: 0.5,\n min: 0,\n max: 2,\n step: 0.01,\n doc: 'Scroll + spin rate; 0 freezes.',\n },\n {\n name: 'uCalm',\n kind: 'float',\n default: 0,\n min: 0,\n max: 1,\n step: 0.01,\n doc: 'Fades shapes at frame center (face zone).',\n },\n];\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"outrun-grid.d.ts","sourceRoot":"","sources":["../../../../catalog/shaders/outrun-grid/outrun-grid.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,8CAA8C;IAC9C,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC;IACtB,yCAAyC;IACzC,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC;IAC1B,qCAAqC;IACrC,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC;IACtB,wCAAwC;IACxC,QAAQ,CAAC,UAAU,EAAE,GAAG,CAAC;IACzB,mDAAmD;IACnD,QAAQ,CAAC,UAAU,EAAE,GAAG,CAAC;IACzB,oDAAoD;IACpD,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,sCAAsC;IACtC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,qDAAqD;IACrD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,iCAAiC;IACjC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,2DAA2D;IAC3D,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,8DAA8D;IAC9D,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,wEAAwE;IACxE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,sFAAsF;AACtF,eAAO,MAAM,oBAAoB,EAAE,SAAS,cAAc,EAoFzD,CAAC"}
1
+ {"version":3,"file":"outrun-grid.d.ts","sourceRoot":"","sources":["../../../../catalog/shaders/outrun-grid/outrun-grid.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,8CAA8C;IAC9C,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC;IACtB,yCAAyC;IACzC,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC;IAC1B,qCAAqC;IACrC,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC;IACtB,wCAAwC;IACxC,QAAQ,CAAC,UAAU,EAAE,GAAG,CAAC;IACzB,mDAAmD;IACnD,QAAQ,CAAC,UAAU,EAAE,GAAG,CAAC;IACzB,oDAAoD;IACpD,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,sCAAsC;IACtC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,qDAAqD;IACrD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,iCAAiC;IACjC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,2DAA2D;IAC3D,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,8DAA8D;IAC9D,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,wEAAwE;IACxE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,sFAAsF;AACtF,eAAO,MAAM,oBAAoB,EAAE,SAAS,cAAc,EAoFzD,CAAC"}
@@ -32,8 +32,8 @@ exports.OUTRUN_GRID_CONTROLS = [
32
32
  {
33
33
  name: 'uGridDensity',
34
34
  kind: 'float',
35
- default: 4,
36
- min: 4,
35
+ default: 3,
36
+ min: 1,
37
37
  max: 32,
38
38
  step: 1,
39
39
  doc: 'Grid cells across the floor.',
@@ -1 +1 @@
1
- {"version":3,"file":"outrun-grid.js","sourceRoot":"","sources":["../../../../catalog/shaders/outrun-grid/outrun-grid.ts"],"names":[],"mappings":";AAAA,2EAA2E;AAC3E,2EAA2E;AAC3E,4EAA4E;AAC5E,6EAA6E;AAC7E,0EAA0E;AAC1E,wCAAwC;;;AAiCxC,sFAAsF;AACzE,QAAA,oBAAoB,GAA8B;IAC7D;QACE,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;QAC3B,GAAG,EAAE,4BAA4B;KAClC;IACD;QACE,IAAI,EAAE,aAAa;QACnB,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC;QAC1B,GAAG,EAAE,2BAA2B;KACjC;IACD,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,uBAAuB,EAAE;IAC3F;QACE,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC;QAC1B,GAAG,EAAE,0BAA0B;KAChC;IACD,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,sBAAsB,EAAE;IAC7F;QACE,IAAI,EAAE,cAAc;QACpB,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,CAAC;QACV,GAAG,EAAE,CAAC;QACN,GAAG,EAAE,EAAE;QACP,IAAI,EAAE,CAAC;QACP,GAAG,EAAE,8BAA8B;KACpC;IACD;QACE,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,GAAG;QACZ,GAAG,EAAE,IAAI;QACT,GAAG,EAAE,CAAC;QACN,IAAI,EAAE,IAAI;QACV,GAAG,EAAE,2BAA2B;KACjC;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,2CAA2C;KACjD;IACD;QACE,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,IAAI;QACb,GAAG,EAAE,GAAG;QACR,GAAG,EAAE,GAAG;QACR,IAAI,EAAE,IAAI;QACV,GAAG,EAAE,aAAa;KACnB;IACD;QACE,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,CAAC;QACV,GAAG,EAAE,CAAC;QACN,GAAG,EAAE,EAAE;QACP,IAAI,EAAE,CAAC;QACP,GAAG,EAAE,mCAAmC;KACzC;IACD;QACE,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,IAAI;QACb,GAAG,EAAE,GAAG;QACR,GAAG,EAAE,GAAG;QACR,IAAI,EAAE,IAAI;QACV,GAAG,EAAE,0CAA0C;KAChD;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,sDAAsD;KAC5D;CACF,CAAC","sourcesContent":["// Outrun-grid layer-shader interface: typed uniforms + control descriptor.\n// A scrolling neon perspective grid with a banded retrowave sun, an opaque\n// BACKGROUND layer (issue #70). One outrun-grid.frag fans out into the book\n// presets (classic, miami, tron, acid, vapor) by varying these uniforms; the\n// three color pairs (grid, sun, sky) are the big levers. Shader source is\n// shaders/outrun-grid/outrun-grid.frag.\n\nimport type { RGB } from '../../../src/lib/primitives.types';\nimport type { UniformControl } from '../_shared/types';\n\n/** Typed uniforms for the `outrun-grid` layer shader. */\nexport type OutrunGridUniforms = {\n /** Sky gradient color at the top of frame. */\n readonly uSkyTop: RGB;\n /** Sky gradient color at the horizon. */\n readonly uSkyHorizon: RGB;\n /** Sun gradient color at its top. */\n readonly uSunTop: RGB;\n /** Sun gradient color at its bottom. */\n readonly uSunBottom: RGB;\n /** Neon grid line tint (also the horizon seam). */\n readonly uGridColor: RGB;\n /** Grid cells across the floor; higher is finer. */\n readonly uGridDensity: number;\n /** Line glow width/softness, 0..1. */\n readonly uGridGlow: number;\n /** Grid scroll rate toward the viewer; 0 freezes. */\n readonly uSpeed: number;\n /** Sun radius in vUv.y units. */\n readonly uSunSize: number;\n /** Horizontal slit count cut into the sun's lower half. */\n readonly uSunBands: number;\n /** Horizon height in vUv.y, 0..1 (floor below, sky above). */\n readonly uHorizon: number;\n /** Eases the additive glow at frame center (the face zone); 0 = off. */\n readonly uCalm: number;\n};\n\n/** The `outrun-grid` shader's tunables; defaults are the \"classic\" synthwave look. */\nexport const OUTRUN_GRID_CONTROLS: readonly UniformControl[] = [\n {\n name: 'uSkyTop',\n kind: 'color',\n default: [0.05, 0.02, 0.18],\n doc: 'Sky color at top of frame.',\n },\n {\n name: 'uSkyHorizon',\n kind: 'color',\n default: [0.35, 0.05, 0.4],\n doc: 'Sky color at the horizon.',\n },\n { name: 'uSunTop', kind: 'color', default: [1.0, 0.85, 0.3], doc: 'Sun color at its top.' },\n {\n name: 'uSunBottom',\n kind: 'color',\n default: [0.95, 0.15, 0.5],\n doc: 'Sun color at its bottom.',\n },\n { name: 'uGridColor', kind: 'color', default: [0.95, 0.2, 0.7], doc: 'Neon grid line tint.' },\n {\n name: 'uGridDensity',\n kind: 'float',\n default: 4,\n min: 4,\n max: 32,\n step: 1,\n doc: 'Grid cells across the floor.',\n },\n {\n name: 'uGridGlow',\n kind: 'float',\n default: 0.5,\n min: 0.05,\n max: 1,\n step: 0.01,\n doc: 'Line glow width/softness.',\n },\n {\n name: 'uSpeed',\n kind: 'float',\n default: 0.3,\n min: 0,\n max: 3,\n step: 0.01,\n doc: 'Scroll rate toward the viewer; 0 freezes.',\n },\n {\n name: 'uSunSize',\n kind: 'float',\n default: 0.32,\n min: 0.1,\n max: 0.6,\n step: 0.01,\n doc: 'Sun radius.',\n },\n {\n name: 'uSunBands',\n kind: 'float',\n default: 7,\n min: 0,\n max: 16,\n step: 1,\n doc: 'Horizontal slit count in the sun.',\n },\n {\n name: 'uHorizon',\n kind: 'float',\n default: 0.55,\n min: 0.2,\n max: 0.8,\n step: 0.01,\n doc: 'Horizon height (floor below, sky above).',\n },\n {\n name: 'uCalm',\n kind: 'float',\n default: 0,\n min: 0,\n max: 1,\n step: 0.01,\n doc: 'Eases the additive glow at frame center (face zone).',\n },\n];\n"]}
1
+ {"version":3,"file":"outrun-grid.js","sourceRoot":"","sources":["../../../../catalog/shaders/outrun-grid/outrun-grid.ts"],"names":[],"mappings":";AAAA,2EAA2E;AAC3E,2EAA2E;AAC3E,4EAA4E;AAC5E,6EAA6E;AAC7E,0EAA0E;AAC1E,wCAAwC;;;AAoCxC,sFAAsF;AACzE,QAAA,oBAAoB,GAA8B;IAC7D;QACE,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;QAC3B,GAAG,EAAE,4BAA4B;KAClC;IACD;QACE,IAAI,EAAE,aAAa;QACnB,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC;QAC1B,GAAG,EAAE,2BAA2B;KACjC;IACD,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,uBAAuB,EAAE;IAC3F;QACE,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC;QAC1B,GAAG,EAAE,0BAA0B;KAChC;IACD,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,sBAAsB,EAAE;IAC7F;QACE,IAAI,EAAE,cAAc;QACpB,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,CAAC;QACV,GAAG,EAAE,CAAC;QACN,GAAG,EAAE,EAAE;QACP,IAAI,EAAE,CAAC;QACP,GAAG,EAAE,8BAA8B;KACpC;IACD;QACE,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,GAAG;QACZ,GAAG,EAAE,IAAI;QACT,GAAG,EAAE,CAAC;QACN,IAAI,EAAE,IAAI;QACV,GAAG,EAAE,2BAA2B;KACjC;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,2CAA2C;KACjD;IACD;QACE,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,IAAI;QACb,GAAG,EAAE,GAAG;QACR,GAAG,EAAE,GAAG;QACR,IAAI,EAAE,IAAI;QACV,GAAG,EAAE,aAAa;KACnB;IACD;QACE,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,CAAC;QACV,GAAG,EAAE,CAAC;QACN,GAAG,EAAE,EAAE;QACP,IAAI,EAAE,CAAC;QACP,GAAG,EAAE,mCAAmC;KACzC;IACD;QACE,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,IAAI;QACb,GAAG,EAAE,GAAG;QACR,GAAG,EAAE,GAAG;QACR,IAAI,EAAE,IAAI;QACV,GAAG,EAAE,0CAA0C;KAChD;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,sDAAsD;KAC5D;CACF,CAAC","sourcesContent":["// Outrun-grid layer-shader interface: typed uniforms + control descriptor.\n// A scrolling neon perspective grid with a banded retrowave sun, an opaque\n// BACKGROUND layer (issue #70). One outrun-grid.frag fans out into the book\n// presets (classic, miami, tron, acid, vapor) by varying these uniforms; the\n// three color pairs (grid, sun, sky) are the big levers. Shader source is\n// shaders/outrun-grid/outrun-grid.frag.\n\n// Cost: CHEAP -- ~0.53 ms/draw, ~1.8x plasma (shader:view meter\n// @1920, Intel UHD 770, default uniforms, 2026-06-14). Loop-free perspective grid.\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 `outrun-grid` layer shader. */\nexport type OutrunGridUniforms = {\n /** Sky gradient color at the top of frame. */\n readonly uSkyTop: RGB;\n /** Sky gradient color at the horizon. */\n readonly uSkyHorizon: RGB;\n /** Sun gradient color at its top. */\n readonly uSunTop: RGB;\n /** Sun gradient color at its bottom. */\n readonly uSunBottom: RGB;\n /** Neon grid line tint (also the horizon seam). */\n readonly uGridColor: RGB;\n /** Grid cells across the floor; higher is finer. */\n readonly uGridDensity: number;\n /** Line glow width/softness, 0..1. */\n readonly uGridGlow: number;\n /** Grid scroll rate toward the viewer; 0 freezes. */\n readonly uSpeed: number;\n /** Sun radius in vUv.y units. */\n readonly uSunSize: number;\n /** Horizontal slit count cut into the sun's lower half. */\n readonly uSunBands: number;\n /** Horizon height in vUv.y, 0..1 (floor below, sky above). */\n readonly uHorizon: number;\n /** Eases the additive glow at frame center (the face zone); 0 = off. */\n readonly uCalm: number;\n};\n\n/** The `outrun-grid` shader's tunables; defaults are the \"classic\" synthwave look. */\nexport const OUTRUN_GRID_CONTROLS: readonly UniformControl[] = [\n {\n name: 'uSkyTop',\n kind: 'color',\n default: [0.05, 0.02, 0.18],\n doc: 'Sky color at top of frame.',\n },\n {\n name: 'uSkyHorizon',\n kind: 'color',\n default: [0.35, 0.05, 0.4],\n doc: 'Sky color at the horizon.',\n },\n { name: 'uSunTop', kind: 'color', default: [1.0, 0.85, 0.3], doc: 'Sun color at its top.' },\n {\n name: 'uSunBottom',\n kind: 'color',\n default: [0.95, 0.15, 0.5],\n doc: 'Sun color at its bottom.',\n },\n { name: 'uGridColor', kind: 'color', default: [0.95, 0.2, 0.7], doc: 'Neon grid line tint.' },\n {\n name: 'uGridDensity',\n kind: 'float',\n default: 3,\n min: 1,\n max: 32,\n step: 1,\n doc: 'Grid cells across the floor.',\n },\n {\n name: 'uGridGlow',\n kind: 'float',\n default: 0.5,\n min: 0.05,\n max: 1,\n step: 0.01,\n doc: 'Line glow width/softness.',\n },\n {\n name: 'uSpeed',\n kind: 'float',\n default: 0.3,\n min: 0,\n max: 3,\n step: 0.01,\n doc: 'Scroll rate toward the viewer; 0 freezes.',\n },\n {\n name: 'uSunSize',\n kind: 'float',\n default: 0.32,\n min: 0.1,\n max: 0.6,\n step: 0.01,\n doc: 'Sun radius.',\n },\n {\n name: 'uSunBands',\n kind: 'float',\n default: 7,\n min: 0,\n max: 16,\n step: 1,\n doc: 'Horizontal slit count in the sun.',\n },\n {\n name: 'uHorizon',\n kind: 'float',\n default: 0.55,\n min: 0.2,\n max: 0.8,\n step: 0.01,\n doc: 'Horizon height (floor below, sky above).',\n },\n {\n name: 'uCalm',\n kind: 'float',\n default: 0,\n min: 0,\n max: 1,\n step: 0.01,\n doc: 'Eases the additive glow at frame center (face zone).',\n },\n];\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"plasma.d.ts","sourceRoot":"","sources":["../../../../catalog/shaders/plasma/plasma.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,kDAAkD;IAClD,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC;IACtB,mDAAmD;IACnD,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC;IACtB,2CAA2C;IAC3C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,uDAAuD;IACvD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,kFAAkF;AAClF,eAAO,MAAM,eAAe,EAAE,SAAS,cAAc,EAqBpD,CAAC"}
1
+ {"version":3,"file":"plasma.d.ts","sourceRoot":"","sources":["../../../../catalog/shaders/plasma/plasma.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,kDAAkD;IAClD,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC;IACtB,mDAAmD;IACnD,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC;IACtB,2CAA2C;IAC3C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,uDAAuD;IACvD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,kFAAkF;AAClF,eAAO,MAAM,eAAe,EAAE,SAAS,cAAc,EAqBpD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"plasma.js","sourceRoot":"","sources":["../../../../catalog/shaders/plasma/plasma.ts"],"names":[],"mappings":";AAAA,6EAA6E;AAC7E,sEAAsE;AACtE,+EAA+E;AAC/E,iFAAiF;AACjF,kFAAkF;;;AAiBlF,kFAAkF;AACrE,QAAA,eAAe,GAA8B;IACxD,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,sBAAsB,EAAE;IACzF,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,uBAAuB,EAAE;IAC1F;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,4BAA4B;KAClC;IACD;QACE,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,CAAC;QACV,GAAG,EAAE,CAAC;QACN,GAAG,EAAE,EAAE;QACP,IAAI,EAAE,GAAG;QACT,GAAG,EAAE,4CAA4C;KAClD;CACF,CAAC","sourcesContent":["// Plasma layer-shader interface: typed uniforms + control descriptor. A two-\n// color time-morphing field, an opaque BACKGROUND layer (the cheapest\n// procedural engine worth shipping). The same shader also backs the standalone\n// `plasma` book presets (ocean/sunset/mint/fast) via ShaderOptionsMap; this file\n// is the layer-side type + control surface. Shader source is shaders/plasma.frag.\n\nimport type { RGB } from '../../../src/lib/primitives.types';\nimport type { UniformControl } from '../_shared/types';\n\n/** Typed uniforms for the `plasma` layer shader. */\nexport type PlasmaUniforms = {\n /** First palette color, RGB each channel 0..1. */\n readonly uColorA: RGB;\n /** Second palette color, RGB each channel 0..1. */\n readonly uColorB: RGB;\n /** Animation rate; 0 freezes the field. */\n readonly uSpeed: number;\n /** Spatial frequency; higher = more, tighter cells. */\n readonly uScale: number;\n};\n\n/** The `plasma` shader's tunable uniforms; defaults are the cool \"ocean\" look. */\nexport const PLASMA_CONTROLS: readonly UniformControl[] = [\n { name: 'uColorA', kind: 'color', default: [0.0, 0.3, 0.6], doc: 'First palette color.' },\n { name: 'uColorB', kind: 'color', default: [0.0, 0.6, 0.6], doc: 'Second palette color.' },\n {\n name: 'uSpeed',\n kind: 'float',\n default: 0.3,\n min: 0,\n max: 2,\n step: 0.01,\n doc: 'Animation rate; 0 freezes.',\n },\n {\n name: 'uScale',\n kind: 'float',\n default: 8,\n min: 1,\n max: 20,\n step: 0.5,\n doc: 'Spatial frequency; higher = tighter cells.',\n },\n];\n"]}
1
+ {"version":3,"file":"plasma.js","sourceRoot":"","sources":["../../../../catalog/shaders/plasma/plasma.ts"],"names":[],"mappings":";AAAA,6EAA6E;AAC7E,sEAAsE;AACtE,+EAA+E;AAC/E,iFAAiF;AACjF,kFAAkF;;;AAoBlF,kFAAkF;AACrE,QAAA,eAAe,GAA8B;IACxD,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,sBAAsB,EAAE;IACzF,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,uBAAuB,EAAE;IAC1F;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,4BAA4B;KAClC;IACD;QACE,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,CAAC;QACV,GAAG,EAAE,CAAC;QACN,GAAG,EAAE,EAAE;QACP,IAAI,EAAE,GAAG;QACT,GAAG,EAAE,4CAA4C;KAClD;CACF,CAAC","sourcesContent":["// Plasma layer-shader interface: typed uniforms + control descriptor. A two-\n// color time-morphing field, an opaque BACKGROUND layer (the cheapest\n// procedural engine worth shipping). The same shader also backs the standalone\n// `plasma` book presets (ocean/sunset/mint/fast) via ShaderOptionsMap; this file\n// is the layer-side type + control surface. Shader source is shaders/plasma.frag.\n\n// Cost: CHEAP -- ~0.35 ms/draw, ~1x plasma (shader:view meter\n// @1920, Intel UHD 770, default uniforms, 2026-06-14). The cost floor: a bare sum of sines.\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 `plasma` layer shader. */\nexport type PlasmaUniforms = {\n /** First palette color, RGB each channel 0..1. */\n readonly uColorA: RGB;\n /** Second palette color, RGB each channel 0..1. */\n readonly uColorB: RGB;\n /** Animation rate; 0 freezes the field. */\n readonly uSpeed: number;\n /** Spatial frequency; higher = more, tighter cells. */\n readonly uScale: number;\n};\n\n/** The `plasma` shader's tunable uniforms; defaults are the cool \"ocean\" look. */\nexport const PLASMA_CONTROLS: readonly UniformControl[] = [\n { name: 'uColorA', kind: 'color', default: [0.0, 0.3, 0.6], doc: 'First palette color.' },\n { name: 'uColorB', kind: 'color', default: [0.0, 0.6, 0.6], doc: 'Second palette color.' },\n {\n name: 'uSpeed',\n kind: 'float',\n default: 0.3,\n min: 0,\n max: 2,\n step: 0.01,\n doc: 'Animation rate; 0 freezes.',\n },\n {\n name: 'uScale',\n kind: 'float',\n default: 8,\n min: 1,\n max: 20,\n step: 0.5,\n doc: 'Spatial frequency; higher = tighter cells.',\n },\n];\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"simianlights.d.ts","sourceRoot":"","sources":["../../../../catalog/shaders/simianlights/simianlights.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,mCAAmC,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvD,0DAA0D;AAC1D,MAAM,MAAM,oBAAoB,GAAG;IACjC,uEAAuE;IACvE,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC;IACrB,iEAAiE;IACjE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,6DAA6D;IAC7D,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,kDAAkD;IAClD,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,0DAA0D;IAC1D,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,wDAAwD;IACxD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF,uFAAuF;AACvF,eAAO,MAAM,qBAAqB,EAAE,SAAS,cAAc,EA+C1D,CAAC"}
1
+ {"version":3,"file":"simianlights.d.ts","sourceRoot":"","sources":["../../../../catalog/shaders/simianlights/simianlights.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,mCAAmC,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvD,0DAA0D;AAC1D,MAAM,MAAM,oBAAoB,GAAG;IACjC,uEAAuE;IACvE,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC;IACrB,iEAAiE;IACjE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,6DAA6D;IAC7D,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,kDAAkD;IAClD,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,0DAA0D;IAC1D,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,wDAAwD;IACxD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF,uFAAuF;AACvF,eAAO,MAAM,qBAAqB,EAAE,SAAS,cAAc,EA+C1D,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"simianlights.js","sourceRoot":"","sources":["../../../../catalog/shaders/simianlights/simianlights.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,0EAA0E;AAC1E,6EAA6E;AAC7E,iCAAiC;;;AAqBjC,uFAAuF;AAC1E,QAAA,qBAAqB,GAA8B;IAC9D,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;QACV,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,CAAC;QACV,GAAG,EAAE,CAAC;QACN,GAAG,EAAE,CAAC;QACN,IAAI,EAAE,IAAI;QACV,GAAG,EAAE,mCAAmC;KACzC;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,oBAAoB;KAC1B;IACD;QACE,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,CAAC;QACV,GAAG,EAAE,GAAG;QACR,GAAG,EAAE,CAAC;QACN,IAAI,EAAE,IAAI;QACV,GAAG,EAAE,2CAA2C;KACjD;IACD;QACE,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,CAAC;QACV,GAAG,EAAE,GAAG;QACR,GAAG,EAAE,CAAC;QACN,IAAI,EAAE,IAAI;QACV,GAAG,EAAE,iBAAiB;KACvB;CACF,CAAC","sourcesContent":["// Simianlights layer-shader interface: typed uniforms + control descriptor. The\n// calmer sibling of the nebula (fewer starfield layers, larger near-field\n// scale), same opaque BACKGROUND-layer role and same uniform surface. Shader\n// source is ./simianlights.frag.\n\nimport type { RGB } from '../../../src/lib/primitives.types';\nimport type { UniformControl } from '../_shared/types';\n\n/** Typed uniforms for the `simianlights` layer shader. */\nexport type SimianlightsUniforms = {\n /** Overall tint / color grade; [1,1,1] keeps the stock star colors. */\n readonly uColor: RGB;\n /** Final glow multiplier; 1 = stock, higher = brighter field. */\n readonly uBrightness: number;\n /** Drift + rotation rate; 1 = stock, 0 freezes the field. */\n readonly uSpeed: number;\n /** Star color-cycle (twinkle) rate; 1 = stock. */\n readonly uTwinkleSpeed: number;\n /** Starfield zoom / density; >1 = more, smaller stars. */\n readonly uScale: number;\n /** Star-core size; 1 = stock, higher = fatter cores. */\n readonly uStarGlow: number;\n};\n\n/** The `simianlights` shader's tunable uniforms; defaults reproduce the stock look. */\nexport const SIMIANLIGHTS_CONTROLS: readonly UniformControl[] = [\n { name: 'uColor', kind: 'color', default: [1, 1, 1], doc: 'Overall tint / color grade.' },\n {\n name: 'uBrightness',\n kind: 'float',\n default: 1,\n min: 0,\n max: 3,\n step: 0.01,\n doc: 'Final glow multiplier.',\n },\n {\n name: 'uSpeed',\n kind: 'float',\n default: 1,\n min: 0,\n max: 3,\n step: 0.01,\n doc: 'Drift + rotation rate; 0 freezes.',\n },\n {\n name: 'uTwinkleSpeed',\n kind: 'float',\n default: 1,\n min: 0,\n max: 3,\n step: 0.01,\n doc: 'Star twinkle rate.',\n },\n {\n name: 'uScale',\n kind: 'float',\n default: 1,\n min: 0.3,\n max: 3,\n step: 0.01,\n doc: 'Zoom / density; >1 = more, smaller stars.',\n },\n {\n name: 'uStarGlow',\n kind: 'float',\n default: 1,\n min: 0.2,\n max: 3,\n step: 0.01,\n doc: 'Star-core size.',\n },\n];\n"]}
1
+ {"version":3,"file":"simianlights.js","sourceRoot":"","sources":["../../../../catalog/shaders/simianlights/simianlights.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,0EAA0E;AAC1E,6EAA6E;AAC7E,iCAAiC;;;AAwBjC,uFAAuF;AAC1E,QAAA,qBAAqB,GAA8B;IAC9D,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;QACV,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,CAAC;QACV,GAAG,EAAE,CAAC;QACN,GAAG,EAAE,CAAC;QACN,IAAI,EAAE,IAAI;QACV,GAAG,EAAE,mCAAmC;KACzC;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,oBAAoB;KAC1B;IACD;QACE,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,CAAC;QACV,GAAG,EAAE,GAAG;QACR,GAAG,EAAE,CAAC;QACN,IAAI,EAAE,IAAI;QACV,GAAG,EAAE,2CAA2C;KACjD;IACD;QACE,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,CAAC;QACV,GAAG,EAAE,GAAG;QACR,GAAG,EAAE,CAAC;QACN,IAAI,EAAE,IAAI;QACV,GAAG,EAAE,iBAAiB;KACvB;CACF,CAAC","sourcesContent":["// Simianlights layer-shader interface: typed uniforms + control descriptor. The\n// calmer sibling of the nebula (fewer starfield layers, larger near-field\n// scale), same opaque BACKGROUND-layer role and same uniform surface. Shader\n// source is ./simianlights.frag.\n\n// Cost: HEAVY -- ~11 ms/draw, ~39x 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 `simianlights` layer shader. */\nexport type SimianlightsUniforms = {\n /** Overall tint / color grade; [1,1,1] keeps the stock star colors. */\n readonly uColor: RGB;\n /** Final glow multiplier; 1 = stock, higher = brighter field. */\n readonly uBrightness: number;\n /** Drift + rotation rate; 1 = stock, 0 freezes the field. */\n readonly uSpeed: number;\n /** Star color-cycle (twinkle) rate; 1 = stock. */\n readonly uTwinkleSpeed: number;\n /** Starfield zoom / density; >1 = more, smaller stars. */\n readonly uScale: number;\n /** Star-core size; 1 = stock, higher = fatter cores. */\n readonly uStarGlow: number;\n};\n\n/** The `simianlights` shader's tunable uniforms; defaults reproduce the stock look. */\nexport const SIMIANLIGHTS_CONTROLS: readonly UniformControl[] = [\n { name: 'uColor', kind: 'color', default: [1, 1, 1], doc: 'Overall tint / color grade.' },\n {\n name: 'uBrightness',\n kind: 'float',\n default: 1,\n min: 0,\n max: 3,\n step: 0.01,\n doc: 'Final glow multiplier.',\n },\n {\n name: 'uSpeed',\n kind: 'float',\n default: 1,\n min: 0,\n max: 3,\n step: 0.01,\n doc: 'Drift + rotation rate; 0 freezes.',\n },\n {\n name: 'uTwinkleSpeed',\n kind: 'float',\n default: 1,\n min: 0,\n max: 3,\n step: 0.01,\n doc: 'Star twinkle rate.',\n },\n {\n name: 'uScale',\n kind: 'float',\n default: 1,\n min: 0.3,\n max: 3,\n step: 0.01,\n doc: 'Zoom / density; >1 = more, smaller stars.',\n },\n {\n name: 'uStarGlow',\n kind: 'float',\n default: 1,\n min: 0.2,\n max: 3,\n step: 0.01,\n doc: 'Star-core size.',\n },\n];\n"]}
@@ -9,7 +9,7 @@ export declare const KALEIDOSCOPE_FRAG_SRC = "#version 300 es\nprecision highp f
9
9
  export declare const NEO_MEMPHIS_FRAG_SRC = "#version 300 es\nprecision highp float;\n\nuniform float uTime; // seconds, monotonically increasing; range [0, inf)\nuniform vec2 uResolution; // framebuffer size in pixels; both components > 0\nuniform vec3 uBgColor; // field color behind the shapes\nuniform vec3 uColorA; // shape palette color 1\nuniform vec3 uColorB; // shape palette color 2\nuniform vec3 uColorC; // shape palette color 3\nuniform float uScale; // hero-grid cells across frame height\nuniform float uDensity; // probability a cell draws its shape, 0..1\nuniform float uOutline; // probability a shape renders outlined, 0..1\nuniform float uDrift; // scroll + rotation rate; 0 freezes\nuniform float uCalm; // 0..1 fades shapes near frame center (face zone)\n\nin highp vec2 vUv;\nout vec4 oColor;\n\nconst float TAU = 6.28318530718;\n// Antialias half-width in cell units; ~1px at the default pitch.\nconst float AA = 0.012;\n\nfloat hash21(vec2 p) {\n p = fract(p * vec2(234.34, 435.345));\n p += dot(p, p + 34.23);\n return fract(p.x * p.y);\n}\n\nfloat sdBox(vec2 p, vec2 b) {\n vec2 d = abs(p) - b;\n return length(max(d, vec2(0.0))) + min(max(d.x, d.y), 0.0);\n}\n\n// iq's equilateral triangle, point up, circumradius r.\nfloat sdTriangle(vec2 p, float r) {\n const float k = 1.7320508;\n p.x = abs(p.x) - r;\n p.y = p.y + r / k;\n if (p.x + k * p.y > 0.0) {\n p = vec2(p.x - k * p.y, -k * p.x - p.y) * 0.5;\n }\n p.x -= clamp(p.x, -2.0 * r, 0.0);\n return -length(p) * sign(p.y);\n}\n\n// One cell layer: returns the shape coverage and writes its color.\n// luv is the layer's scrolled cell-space coordinate; backfill restricts the\n// shape menu to dots and crosses and draws smaller.\nfloat memphisCell(vec2 luv, float seed, float backfill, float t, out vec3 shapeColor) {\n vec2 id = floor(luv);\n vec2 gv = fract(luv) - 0.5;\n float h = hash21(id + seed);\n shapeColor = uBgColor;\n // Density gate: empty cells cost one hash.\n if (h > uDensity) return 0.0;\n\n float h2 = fract(h * 57.31);\n float h3 = fract(h * 113.77);\n float h4 = fract(h * 431.13);\n float h5 = fract(h * 891.71);\n\n // Per-cell slow spin and a small bob; both bounded so the shape stays\n // inside its cell (max extent 0.34 + 0.04 < 0.5).\n float ang = h2 * TAU + t * (h3 - 0.5) * 0.8;\n float cs = cos(ang);\n float sn = sin(ang);\n gv -= 0.04 * vec2(sin(t * 0.6 + h * TAU), cos(t * 0.8 + h * TAU));\n gv = mat2(cs, -sn, sn, cs) * gv;\n\n float r = mix(0.14, 0.30, h3) * mix(1.0, 0.6, backfill);\n float pick = h4 * 6.0;\n float d;\n if (backfill > 0.5) {\n // Backfill texture: dots and crosses only.\n d = (pick < 3.0)\n ? length(gv) - r * 0.45\n : min(sdBox(gv, vec2(r, r * 0.22)), sdBox(gv, vec2(r * 0.22, r)));\n } else if (pick < 1.0) {\n d = length(gv) - r; // disc\n } else if (pick < 2.0) {\n d = abs(length(gv) - r * 0.8) - r * 0.18; // ring\n } else if (pick < 3.0) {\n d = sdTriangle(gv, r); // triangle\n } else if (pick < 4.0) {\n d = min(sdBox(gv, vec2(r, r * 0.24)), sdBox(gv, vec2(r * 0.24, r))); // cross\n } else if (pick < 5.0) {\n d = sdBox(gv, vec2(r * 0.78, r * 0.78)); // box\n } else {\n // Squiggle: a sine-displaced band, clipped to its run length.\n d = max(abs(gv.y - 0.4 * r * sin(gv.x / r * 6.5)) - r * 0.17, abs(gv.x) - r);\n }\n\n float fill = smoothstep(AA, -AA, d);\n float ring = smoothstep(AA, -AA, abs(d + r * 0.06) - r * 0.09);\n float m = (h5 < uOutline) ? ring : fill;\n\n float colorPick = fract(h * 769.23) * 3.0;\n shapeColor = (colorPick < 1.0) ? uColorA : (colorPick < 2.0) ? uColorB : uColorC;\n return m;\n}\n\nvoid main() {\n // Aspect-correct, screen-centered coordinates (matches plasma/nebula).\n vec2 fragCoord = vUv * uResolution;\n vec2 uv = (fragCoord - 0.5 * uResolution) / uResolution.y;\n float centerDist = length(uv);\n\n float t = uTime * uDrift;\n vec3 color = uBgColor;\n vec3 shapeColor;\n\n // Backfill layer first (under the hero shapes): smaller, denser, dimmer.\n vec2 luv1 = uv * uScale * 2.3 + vec2(t * 0.045, t * -0.03) + 51.7;\n float m1 = memphisCell(luv1, 7.0, 1.0, t, shapeColor);\n color = mix(color, mix(uBgColor, shapeColor, 0.55), m1);\n\n // Hero layer: the big shapes, scrolling the other way.\n vec2 luv0 = uv * uScale + vec2(t * -0.06, t * 0.04);\n float m0 = memphisCell(luv0, 0.0, 0.0, t, shapeColor);\n\n // uCalm: fade shapes (not the field) near frame center.\n float calm = 1.0 - uCalm * (1.0 - smoothstep(0.15, 0.62, centerDist));\n color = mix(color, shapeColor, m0 * calm);\n\n // Opaque procedural background; the person is composited over it downstream.\n oColor = vec4(color, 1.0);\n}\n";
10
10
  export declare const HALFTONE_WAVES_FRAG_SRC = "#version 300 es\nprecision highp float;\n\nuniform float uTime; // seconds, monotonically increasing; range [0, inf)\nuniform vec2 uResolution; // framebuffer size in pixels; both components > 0\nuniform vec3 uPaper; // field color (behind the dots)\nuniform vec3 uInk; // dot color\nuniform float uPitch; // dot-grid cells across frame height\nuniform float uDotSize; // base dot radius in cell units, 0..0.5\nuniform float uWaveAmp; // radius modulation depth, 0..1\nuniform float uSpeed; // wave travel rate; 0 freezes\nuniform float uShape; // dot shape: 0 diamond, 1 circle, 2 square\nuniform float uAngle; // wave direction, radians\nuniform float uCalm; // 0..1 eases the waves at frame center (face zone)\n\nin highp vec2 vUv;\nout vec4 oColor;\n\n// Antialias half-width in cell units; ~1px at the default pitch.\nconst float AA = 0.06;\n\nvoid main() {\n // Aspect-correct, screen-centered coordinates (matches plasma/nebula).\n vec2 fragCoord = vUv * uResolution;\n vec2 uv = (fragCoord - 0.5 * uResolution) / uResolution.y;\n float centerDist = length(uv);\n\n vec2 luv = uv * uPitch;\n vec2 id = floor(luv);\n vec2 gv = fract(luv) - 0.5;\n // Wave phase is sampled at the CELL CENTER so a dot's radius is uniform\n // across its own pixels (true halftone, not a warped field).\n vec2 c = (id + 0.5) / uPitch;\n\n float t = uTime * uSpeed;\n vec2 dir1 = vec2(cos(uAngle), sin(uAngle));\n vec2 dir2 = vec2(cos(uAngle + 2.2), sin(uAngle + 2.2));\n // Two traveling waves at incommensurate frequencies: interference patterns\n // that drift forever without visibly repeating.\n float w = 0.5 + 0.25 * sin(dot(c, dir1) * 3.1 + t) + 0.25 * sin(dot(c, dir2) * 4.7 - t * 0.77);\n\n // uCalm: flatten the modulation toward its midpoint near frame center.\n float calm = uCalm * (1.0 - smoothstep(0.15, 0.62, centerDist));\n w = mix(w, 0.5, calm);\n\n float radius = uDotSize * mix(1.0 - uWaveAmp, 1.0 + uWaveAmp, w);\n\n // Blended distance metric, pow-free (variable-exponent pow lowers to\n // exp2+log2 on mobile): diamond (L1) -> circle (L2) -> square (Linf).\n vec2 q = abs(gv);\n float dDiamond = (q.x + q.y) * 0.7071;\n float dCircle = length(q);\n float dSquare = max(q.x, q.y);\n float d = (uShape < 1.0)\n ? mix(dDiamond, dCircle, clamp(uShape, 0.0, 1.0))\n : mix(dCircle, dSquare, clamp(uShape - 1.0, 0.0, 1.0));\n\n float m = smoothstep(radius + AA, radius - AA, d);\n vec3 color = mix(uPaper, uInk, m);\n\n // Opaque procedural background; the person is composited over it downstream.\n oColor = vec4(color, 1.0);\n}\n";
11
11
  export declare const AURORA_SILK_FRAG_SRC = "#version 300 es\nprecision highp float;\n\nuniform float uTime; // seconds, monotonically increasing; range [0, inf)\nuniform vec2 uResolution; // framebuffer size in pixels; both components > 0\nuniform vec3 uColorLow; // gradient color at the flow's low side\nuniform vec3 uColorHigh; // gradient color at the flow's high side\nuniform vec3 uRibbonColor; // ribbon tint; shades blend toward uColorHigh\nuniform float uRibbons; // visible ribbon count, 1..5 (MAX_RIBBONS)\nuniform float uSoftness; // ribbon edge softness, 0..1\nuniform float uAngle; // flow direction, radians\nuniform float uSpeed; // drift rate; 0 freezes\nuniform float uStyle; // 0 flat paper-cut .. 1 glowing silk\nuniform float uCalm; // 0..1 eases ribbons at frame center (face zone)\n\nin highp vec2 vUv;\nout vec4 oColor;\n\nconst int MAX_RIBBONS = 5;\n\nfloat hash11(float n) {\n return fract(sin(n) * 43758.5453123);\n}\n\n// 1D value noise: smooth, cheap, non-repeating drift source per ribbon.\nfloat vnoise(float x, float seed) {\n float i = floor(x);\n float f = fract(x);\n float a = hash11(i + seed);\n float b = hash11(i + 1.0 + seed);\n return mix(a, b, f * f * (3.0 - 2.0 * f));\n}\n\nvoid main() {\n // Aspect-correct, screen-centered coordinates (matches plasma/nebula).\n vec2 fragCoord = vUv * uResolution;\n vec2 uv = (fragCoord - 0.5 * uResolution) / uResolution.y;\n float centerDist = length(uv);\n\n // Rotate into flow space: ribbons run along q.x, stack along q.y.\n float cs = cos(uAngle);\n float sn = sin(uAngle);\n vec2 q = mat2(cs, -sn, sn, cs) * uv;\n\n float t = uTime * uSpeed;\n\n // Base: soft two-stop gradient across the stacking axis, with a slow\n // breathing tilt so the field is alive even at uRibbons = 0 edge cases.\n float g = clamp(q.y * 0.85 + 0.5 + 0.04 * sin(t * 0.17), 0.0, 1.0);\n vec3 color = mix(uColorLow, uColorHigh, g);\n\n float ribbons = clamp(uRibbons, 0.0, float(MAX_RIBBONS));\n float calm = 1.0 - uCalm * (1.0 - smoothstep(0.15, 0.62, centerDist));\n\n for (int i = 0; i < MAX_RIBBONS; i++) {\n float fi = float(i);\n if (fi >= ribbons) break;\n\n // Stack centers across the frame, each with its own slow vertical sway.\n float center = -0.42 + 0.84 * (fi + 0.5) / ribbons + 0.07 * sin(t * 0.19 + fi * 1.7);\n // Lateral warp: low-frequency noise plus one sine, per-ribbon phase and\n // rate so the bands never move in lockstep.\n float warp = (vnoise(q.x * 1.4 + t * (0.1 + 0.04 * fi), fi * 17.0) - 0.5) * 0.5\n + 0.1 * sin(q.x * 2.3 + t * (0.26 + 0.06 * fi) + fi * 2.1);\n float dy = abs(q.y - (center + warp));\n\n float widthR = mix(0.06, 0.15, hash11(fi * 7.3 + 1.0));\n float soft = mix(0.008, widthR * 1.6, uSoftness);\n float band = (1.0 - smoothstep(widthR - soft, widthR + soft, dy)) * calm;\n\n // Ribbon shade: deeper tints at the back of the stack.\n vec3 rc = mix(uRibbonColor, uColorHigh, fi / float(MAX_RIBBONS) * 0.6);\n\n // uStyle blends two composites of the same band: flat paint-over vs\n // additive glow.\n vec3 flat_ = mix(color, rc, band * 0.85);\n vec3 glow = color + rc * band * 0.4;\n color = mix(flat_, glow, uStyle);\n }\n\n // Opaque procedural background; the person is composited over it downstream.\n oColor = vec4(color, 1.0);\n}\n";
12
- export declare const OUTRUN_GRID_FRAG_SRC = "#version 300 es\nprecision highp float;\n\nuniform float uTime; // seconds, monotonically increasing; range [0, inf)\nuniform vec2 uResolution; // framebuffer size in pixels; both components > 0\nuniform vec3 uSkyTop; // sky gradient color at the top of frame\nuniform vec3 uSkyHorizon; // sky gradient color at the horizon\nuniform vec3 uSunTop; // sun gradient color at its top\nuniform vec3 uSunBottom; // sun gradient color at its bottom\nuniform vec3 uGridColor; // neon grid line tint (also the horizon seam)\nuniform float uGridDensity; // grid cells across the floor; higher = finer\nuniform float uGridGlow; // line glow width/softness, 0..1\nuniform float uSpeed; // grid scroll rate toward the viewer; 0 freezes\nuniform float uSunSize; // sun radius in vUv.y units\nuniform float uSunBands; // horizontal slit count cut into the sun's lower half\nuniform float uHorizon; // horizon height in vUv.y, 0..1 (floor below, sky above)\nuniform float uCalm; // 0..1 eases the additive glow at frame center (face zone)\n\nin highp vec2 vUv;\nout vec4 oColor;\n\nvoid main() {\n float aspect = uResolution.x / uResolution.y;\n float fx = (vUv.x - 0.5) * aspect; // aspect-correct, screen-centered x\n float fy = vUv.y; // 0 bottom .. 1 top\n float h = clamp(uHorizon, 0.05, 0.95);\n\n // Ease additive glow near the frame center (the subject's face sits there).\n float calm = 1.0 - uCalm * (1.0 - smoothstep(0.18, 0.62, length(vec2(fx, fy - 0.5))));\n\n vec3 col;\n\n if (fy > h) {\n // --- SKY ---\n float skyT = (fy - h) / (1.0 - h); // 0 at horizon, 1 at the top of frame\n col = mix(uSkyHorizon, uSkyTop, skyT);\n\n // --- SUN --- centered just above the horizon so its lower arc sinks below\n // it and is occluded by the floor (the half-set sun, for free).\n float sunCY = h + uSunSize * 0.55;\n vec2 sd = vec2(fx, fy - sunCY);\n float r = length(sd) / max(uSunSize, 1e-3); // normalized radius, 1 at the edge\n\n // Soft glow halo bleeding into the sky around the disc.\n float halo = exp(-max(r - 1.0, 0.0) * 5.5);\n col += uSunTop * halo * 0.55 * calm;\n\n // Sun body: vertical gradient, with horizontal bands cut from the lower half\n // (each gap thickening toward the bottom, the iconic retrowave slit pattern).\n float disc = smoothstep(1.0, 0.985, r);\n float vy = clamp(sd.y / max(uSunSize, 1e-3) * 0.5 + 0.5, 0.0, 1.0);\n vec3 sunCol = mix(uSunBottom, uSunTop, vy);\n\n float below = max(-sd.y / max(uSunSize, 1e-3), 0.0); // 0 above center, grows downward\n // Drift the slit phase over time so the sun's scanlines crawl downward.\n float slit = fract(below * uSunBands - uTime * 0.18);\n float gapW = clamp(below, 0.0, 1.0) * 0.85; // gap fraction grows downward\n float cut = step(slit, gapW) * smoothstep(0.04, 0.12, below); // keep upper sun whole\n float sunBody = disc * (1.0 - cut);\n\n col = mix(col, sunCol, sunBody);\n } else {\n // --- FLOOR --- perspective grid. Guard the divide; shade only below horizon.\n float depth = 1.0 / max(h - fy, 1.5e-3); // large near the horizon\n float depthMin = 1.0 / h; // depth at the very front (fy = 0)\n\n // Grid coordinates: x widens with depth (perspective); uGridDensity sets the\n // cell count; the scroll is in cell units so its rate is density-independent.\n vec2 g = vec2(fx * depth, depth) * uGridDensity;\n g.y += uTime * uSpeed * 2.0;\n vec2 cell = abs(fract(g) - 0.5); // 0 on a line .. 0.5 mid-cell, per axis\n\n // Per-axis, depth-scaled line half-width: the rungs (g.y) compress toward the\n // horizon as depth^2 and the verticals (g.x) ~linearly, so widening each axis'\n // line band at its own compression rate holds the on-screen line width roughly\n // constant. Far lines fuse into a band instead of a sub-pixel sheet that\n // shimmers as it scrolls; near lines stay crisp. Written 1 - smoothstep(0, w, .)\n // (NOT the reversed-edge smoothstep(w, 0, .), which is undefined on GLSL ES /\n // Metal) and derivative-free, so it is portable and mobile-precision safe.\n vec2 w = max(vec2(depth, depth * depth * 0.2) * uGridDensity * 0.0013, vec2(1e-4));\n vec2 core = 1.0 - smoothstep(vec2(0.0), w, cell);\n vec2 halo = (1.0 - smoothstep(vec2(0.0), w * 6.0, cell)) * (0.5 * uGridGlow);\n float gridVal = clamp(core.x + core.y + halo.x + halo.y, 0.0, 1.5);\n\n // Distance fog: fade the grid out toward the horizon for the converging look.\n float fog = clamp(1.0 - (depth - depthMin) / (depthMin * 10.0), 0.0, 1.0);\n fog *= fog;\n\n vec3 floorBase = mix(vec3(0.0), uSkyHorizon * 0.16, fog * 0.6);\n col = floorBase + uGridColor * gridVal * fog * calm;\n }\n\n // Glowing horizon seam where floor meets sky.\n float seam = exp(-abs(fy - h) * 90.0);\n col += uGridColor * seam * 0.5 * calm;\n\n oColor = vec4(col, 1.0);\n}\n";
12
+ export declare const OUTRUN_GRID_FRAG_SRC = "#version 300 es\nprecision highp float;\n\nuniform float uTime; // seconds, monotonically increasing; range [0, inf)\nuniform vec2 uResolution; // framebuffer size in pixels; both components > 0\nuniform vec3 uSkyTop; // sky gradient color at the top of frame\nuniform vec3 uSkyHorizon; // sky gradient color at the horizon\nuniform vec3 uSunTop; // sun gradient color at its top\nuniform vec3 uSunBottom; // sun gradient color at its bottom\nuniform vec3 uGridColor; // neon grid line tint (also the horizon seam)\nuniform float uGridDensity; // grid cells across the floor; higher = finer\nuniform float uGridGlow; // line glow width/softness, 0..1\nuniform float uSpeed; // grid scroll rate toward the viewer; 0 freezes\nuniform float uSunSize; // sun radius in vUv.y units\nuniform float uSunBands; // horizontal slit count cut into the sun's lower half\nuniform float uHorizon; // horizon height in vUv.y, 0..1 (floor below, sky above)\nuniform float uCalm; // 0..1 eases the additive glow at frame center (face zone)\n\nin highp vec2 vUv;\nout vec4 oColor;\n\nvoid main() {\n float aspect = uResolution.x / uResolution.y;\n float fx = (vUv.x - 0.5) * aspect; // aspect-correct, screen-centered x\n float fy = vUv.y; // 0 bottom .. 1 top\n float h = clamp(uHorizon, 0.05, 0.95);\n\n // Ease additive glow near the frame center (the subject's face sits there).\n float calm = 1.0 - uCalm * (1.0 - smoothstep(0.18, 0.62, length(vec2(fx, fy - 0.5))));\n\n vec3 col;\n\n if (fy > h) {\n // --- SKY ---\n float skyT = (fy - h) / (1.0 - h); // 0 at horizon, 1 at the top of frame\n col = mix(uSkyHorizon, uSkyTop, skyT);\n\n // --- SUN --- centered just above the horizon so its lower arc sinks below\n // it and is occluded by the floor (the half-set sun, for free).\n float sunCY = h + uSunSize * 0.55;\n vec2 sd = vec2(fx, fy - sunCY);\n float r = length(sd) / max(uSunSize, 1e-3); // normalized radius, 1 at the edge\n\n // Soft glow halo bleeding into the sky around the disc.\n float halo = exp(-max(r - 1.0, 0.0) * 5.5);\n col += uSunTop * halo * 0.55 * calm;\n\n // Sun body: vertical gradient, with horizontal bands cut from the lower half\n // (each gap thickening toward the bottom, the iconic retrowave slit pattern).\n float disc = smoothstep(1.0, 0.985, r);\n float vy = clamp(sd.y / max(uSunSize, 1e-3) * 0.5 + 0.5, 0.0, 1.0);\n vec3 sunCol = mix(uSunBottom, uSunTop, vy);\n\n float below = max(-sd.y / max(uSunSize, 1e-3), 0.0); // 0 above center, grows downward\n // Drift the slit phase over time so the sun's scanlines crawl downward.\n float slit = fract(below * uSunBands - uTime * 0.18);\n float gapW = clamp(below, 0.0, 1.0) * 0.85; // gap fraction grows downward\n float cut = step(slit, gapW) * smoothstep(0.04, 0.12, below); // keep upper sun whole\n float sunBody = disc * (1.0 - cut);\n\n col = mix(col, sunCol, sunBody);\n } else {\n // --- FLOOR --- perspective grid, a faithful port of a known-good community\n // outrun grid (prior versions read as a too-dense, flickering sheet). Work in\n // the reference's centered frame: cx is full-width centered x, dy is the\n // centered distance BELOW the horizon. The additive offset caps the depth at\n // the horizon, and putting big cells in the near field (low min depth) is what\n // keeps the line spacing above a pixel, so it neither sheets nor shimmers.\n float cx = 2.0 * fx; // = (2*vUv.x - 1) * aspect\n float dy = 2.0 * (h - fy); // centered distance below the horizon (> 0)\n\n // Cell count: uGridDensity 4 -> numerator 1.0 (sparse, big near cells). x\n // widens with depth (the 0.7 factor); scroll is a slow drift toward the viewer.\n float num = uGridDensity * 0.25;\n float depth = num / (dy + 0.05);\n vec2 g = vec2(cx * depth * 0.7, depth);\n g.y += uTime * uSpeed * 0.3;\n vec2 e = abs(fract(g) - 0.5);\n\n // PIXEL-CALIBRATED line width: each line core is a fixed ~px wide in SCREEN\n // PIXELS (via uResolution), the same at every depth and every resolution. The\n // old depth^2*const width was constant in theory but landed sub-pixel, so\n // discrete sampling rendered some rungs thick and others thin -> the uneven\n // rungs that read as flicker. Solving sz so screen thickness == px: the rungs\n // (g.y, compression ~depth^2/num) need sz.y = depth^2 * pf / num; the verticals\n // (g.x) need sz.x = depth * 0.7 * pf. uGridGlow sets px (0.5 -> 2 px).\n float pf = (uGridGlow * 4.0) / uResolution.y;\n vec2 sz = vec2(depth * 0.7 * pf, depth * depth * pf / num);\n vec2 lines = 1.0 - smoothstep(vec2(0.0), sz, e);\n lines += (1.0 - smoothstep(vec2(0.0), sz * 4.0, e)) * 0.5;\n float gridVal = clamp(lines.x + lines.y, 0.0, 1.0);\n\n // Fade the grid out BEFORE rung spacing goes sub-pixel near the horizon: that\n // zone moires/shimmers as it scrolls no matter how clean each line is (a second\n // flicker source, separate from line width). subpx is the depth at which rungs\n // are ~2 px apart, derived from uResolution; the seam glow below covers the\n // faded edge so the horizon still reads as a bright line.\n float subpx = sqrt(num * uResolution.y * 0.25);\n gridVal *= 1.0 - smoothstep(subpx * 0.55, subpx, depth);\n\n vec3 floorBase = uSkyHorizon * 0.06;\n col = mix(floorBase, uGridColor, gridVal * calm);\n }\n\n // Glowing horizon seam where floor meets sky.\n float seam = exp(-abs(fy - h) * 90.0);\n col += uGridColor * seam * 0.5 * calm;\n\n oColor = vec4(col, 1.0);\n}\n";
13
13
  export declare const CLOUDS_FRAG_SRC = "#version 300 es\nprecision highp float;\n\nuniform float uTime;\nuniform vec2 uResolution;\nuniform vec3 uSkyLowColor;\nuniform vec3 uSkyHighColor;\nuniform vec3 uCloudLightColor;\nuniform vec3 uCloudDarkColor;\nuniform float uExposure;\nuniform float uStepSize;\nuniform float uCloudSpeed;\nuniform float uCloudScale;\nuniform float uDensity;\nuniform float uCoverage;\nuniform float uSoftness;\n\nin highp vec2 vUv;\nout vec4 oColor;\n\n// STEPS must stay a compile-time constant (GLSL ES loop bound).\n// 32 (was 48; issue #37): the distance-growing step in main() keeps the\n// marched range, so fewer steps buys speed instead of clipping the horizon.\n#define STEPS 32\n\nfloat hash(vec3 p) {\n p = fract(p * 0.3183099 + 0.1);\n p *= 17.0;\n return fract(p.x * p.y * p.z * (p.x + p.y + p.z));\n}\n\nfloat rand(vec2 p) {\n return fract(sin(dot(p, vec2(127.1, 311.7))) * 43758.5453123);\n}\n\nfloat noise(vec3 p) {\n vec3 i = floor(p);\n vec3 f = fract(p);\n f = f * f * (3.0 - 2.0 * f);\n return mix(\n mix(\n mix(hash(i + vec3(0,0,0)), hash(i + vec3(1,0,0)), f.x),\n mix(hash(i + vec3(0,1,0)), hash(i + vec3(1,1,0)), f.x),\n f.y),\n mix(\n mix(hash(i + vec3(0,0,1)), hash(i + vec3(1,0,1)), f.x),\n mix(hash(i + vec3(0,1,1)), hash(i + vec3(1,1,1)), f.x),\n f.y),\n f.z);\n}\n\n// 4 octaves (was 5; issue #37): the 5th octave is fine wisp detail the\n// smoothstep(uCoverage, uCoverage + uSoftness, n) threshold mostly eats; each\n// octave is 8 hash() calls per sample, so this is a flat -20% on the march.\nfloat fbm(vec3 p) {\n float v = 0.0;\n float a = 0.5;\n for (int i = 0; i < 4; i++) {\n v += a * noise(p);\n p *= 2.03;\n a *= 0.5;\n }\n return v;\n}\n\nfloat cloudDensity(vec3 p) {\n p += vec3(uTime * uCloudSpeed, 0.0, uTime * uCloudSpeed * 0.35);\n // Outside the slab the height mask is 0, so the sample is 0; bail before fbm.\n if (p.y <= 0.0 || p.y >= 3.0) return 0.0;\n float n = fbm(p * uCloudScale);\n float bottom = smoothstep(0.0, 0.7, p.y);\n float top = smoothstep(3.0, 1.2, p.y);\n float heightMask = bottom * top;\n float cloud = smoothstep(uCoverage, uCoverage + uSoftness, n);\n return cloud * heightMask;\n}\n\nvoid main() {\n vec2 fragCoord = vUv * uResolution;\n vec2 uv = (fragCoord - 0.5 * uResolution) / uResolution.y;\n vec3 ro = vec3(0.0, 1.2, -4.0);\n vec3 rd = normalize(vec3(uv, 1.5));\n float skyGradient = clamp(rd.y * 0.5 + 0.5, 0.0, 1.0);\n vec3 skyColor = mix(uSkyLowColor, uSkyHighColor, skyGradient);\n vec3 accum = vec3(0.0);\n float alpha = 0.0;\n float t = rand(fragCoord) * uStepSize;\n for (int i = 0; i < STEPS; i++) {\n vec3 p = ro + rd * t;\n // The slab is crossed monotonically in t; once past it, all samples are 0.\n if (rd.y > 0.0 && p.y >= 3.0) break;\n if (rd.y < 0.0 && p.y <= 0.0) break;\n float d = cloudDensity(p);\n // Distance-growing step (issue #37): far clouds are small on screen and\n // tolerate coarser sampling, so the step stretches with t. 32 growing\n // steps reach slightly past where 48 uniform steps did, spending the\n // samples up close where banding would show. growth also scales the\n // per-sample opacity so optical depth per unit distance stays consistent\n // with the uniform-step tuning the presets were dialed against.\n float growth = 1.0 + t * 0.15;\n if (d > 0.01) {\n float light = smoothstep(0.4, 2.8, p.y);\n vec3 sampleColor = mix(uCloudDarkColor, uCloudLightColor, light);\n float a = min(d * uDensity * growth, 1.0);\n accum += (1.0 - alpha) * sampleColor * a;\n alpha += (1.0 - alpha) * a;\n }\n t += uStepSize * growth;\n if (alpha > 0.95) break;\n }\n vec3 color = mix(skyColor, accum, alpha);\n color *= uExposure;\n color = pow(color, vec3(0.9));\n oColor = vec4(color, 1.0);\n}\n";
14
14
  export declare const NEBULA_FRAG_SRC = "#version 300 es\nprecision highp float;\n\nuniform float uTime; // seconds, monotonically increasing; range [0, inf)\nuniform vec2 uResolution; // framebuffer size in pixels; both components > 0\nuniform vec3 uColor; // overall tint / color grade; [1,1,1] = untinted\nuniform float uBrightness; // final glow multiplier; 1.0 = stock\nuniform float uSpeed; // drift + rotation rate; 1.0 = stock, 0 freezes\nuniform float uTwinkleSpeed; // star color-cycle rate; 1.0 = stock\nuniform float uScale; // starfield zoom / density; >1 = more, smaller stars\nuniform float uStarGlow; // star-core size; 1.0 = stock\n\nin highp vec2 vUv;\nout vec4 oColor;\n\nconst float PI = 3.14159265;\nconst float MIN_DIVIDE = 64.0;\nconst float MAX_DIVIDE = 0.01;\n// Number of stacked starfield layers. Compile-time constant so the layer\n// loop has a fixed integer bound (cross-compile-safe; no float loop counter).\n// 7 (was 8 #74, was 12 #39) for cost; the work is linear in the count and\n// dimByDensity rebalances per-star brightness automatically. 7 keeps the dense\n// look essentially intact (6 was visibly sparser at some animation phases);\n// paired with the empty-cell early-out below it lands ~34% under the old 8.\nconst int STARFIELD_LAYERS_COUNT = 7;\n\nmat2 Rotate(float angle) {\n float s = sin(angle);\n float c = cos(angle);\n return mat2(c, -s, s, c);\n}\n\nfloat Star(vec2 uv, float flaresize, float rotAngle, float randomN) {\n float d = length(uv);\n // The concentric fade at the bottom is exactly 0 for d >= 1.0; the star is\n // invisible there, so skip everything (issue #39: a large share of the 3x3\n // neighbor sweep lands outside this radius; the cull is output-identical).\n if (d >= 1.0) return 0.0;\n // Star core. Guard the division: length(uv) can be exactly 0 at a cell\n // center, which yields inf/NaN under Metal. max(d, 1e-4) caps the core\n // brightness without visibly changing the look (the concentric\n // smoothstep fade below already clamps it).\n float starcore = 0.05 * uStarGlow / max(d, 1e-4);\n // Flares exist only on the brightest stars: flaresize is exactly 0 below the\n // smoothstep(0.9, 1.0, size) knee (~90% of cells), and both Rotates feed\n // nothing but the flares. Skipping the block is output-identical, and\n // flaresize is constant per cell, so the branch is coherent (issue #39).\n if (flaresize > 0.0) {\n uv *= Rotate(-2.0 * PI * rotAngle);\n float flareMax = 1.0;\n\n // flares\n float starflares = max(0.0, flareMax - abs(uv.x * uv.y * 3000.0));\n starcore += starflares * flaresize;\n uv *= Rotate(PI * 0.25);\n starflares = max(0.0, flareMax - abs(uv.x * uv.y * 3000.0));\n starcore += starflares * 0.3 * flaresize;\n }\n // light can't go forever, fade it concentrically.\n starcore *= smoothstep(1.0, 0.05, d);\n return starcore;\n}\n\nfloat PseudoRandomizer(vec2 p) {\n // not really random, but it looks random.\n p = fract(p * vec2(123.45, 345.67));\n p += dot(p, p + 45.32);\n return fract(p.x * p.y);\n}\n\nvec3 StarFieldLayer(vec2 uv, float rotAngle) {\n vec3 col = vec3(0.0);\n\n vec2 gv = fract(uv) - 0.5;\n vec2 id = floor(uv);\n\n float deltaTimeTwinkle = uTime * 0.35 * uTwinkleSpeed;\n\n // sweep the 8 neighbors plus the home cell so stars are not clipped at\n // cell borders. Constant 3x3 bounds.\n for (int y = -1; y <= 1; y++) {\n for (int x = -1; x <= 1; x++) {\n vec2 offset = vec2(float(x), float(y));\n\n float randomN = PseudoRandomizer(id + offset); // 0..1\n float randoX = randomN - 0.5;\n float randoY = fract(randomN * 45.0) - 0.5;\n vec2 randomPosition = gv - offset - vec2(randoX, randoY);\n // fract trick: random sizes\n float size = fract(randomN * 1356.33);\n float flareSwitch = smoothstep(0.9, 1.0, size);\n float star = Star(randomPosition, flareSwitch, rotAngle, randomN);\n // The per-cell color below is multiplied by `star` at the end, so for any\n // cell whose star is 0 (Star() returns exactly 0 for d >= 1.0, i.e. the\n // empty-sky majority of the 8x9 = 72 cells/pixel) the whole term is 0.\n // Skipping the sin(vec3) color work for those cells is output-identical and\n // is the bulk of the win (issue #74).\n if (star <= 0.0) continue;\n\n // fract trick: random colors\n float randomStarColorSeed = fract(randomN * 2150.0) * (3.0 * PI) * deltaTimeTwinkle;\n vec3 color = sin(vec3(0.7, 0.3, 0.9) * randomStarColorSeed);\n\n // compress\n color = color * (0.4 * sin(deltaTimeTwinkle)) + 0.6;\n // filter\n color = color * vec3(1.0, 0.1, 0.9 + size);\n float dimByDensity = 15.0 / float(STARFIELD_LAYERS_COUNT);\n col += star * size * color * dimByDensity;\n }\n }\n\n return col;\n}\n\nvoid main() {\n // ShaderToy fragCoord, reconstructed from vUv (see header).\n vec2 fragCoord = vUv * uResolution;\n\n // Normalized pixel coordinates centered at screen middle.\n vec2 uv = (fragCoord - 0.5 * uResolution.xy) / uResolution.y;\n\n float deltaTime = uTime * 0.01 * uSpeed;\n\n vec3 col = vec3(0.0);\n\n float rotAngle = deltaTime * 0.09;\n\n // Layer accumulation. Integer-counted loop replacing the original\n // `for (float i = 0.0; i < 1.0; i += 1.0/COUNT)`. With n in [0, COUNT),\n // i = n/COUNT reproduces the exact same {0, 1/N, 2/N, ...} sequence and\n // the same iteration count, so visual output is unchanged; only the loop\n // form is cross-compile-safe.\n for (int n = 0; n < STARFIELD_LAYERS_COUNT; n++) {\n float i = float(n) / float(STARFIELD_LAYERS_COUNT);\n float layerDepth = fract(i + deltaTime);\n float layerScale = mix(MIN_DIVIDE, MAX_DIVIDE, layerDepth);\n float layerFader = layerDepth * smoothstep(0.1, 1.1, layerDepth);\n float layerOffset = i * (3430.0 + fract(i));\n mat2 layerRot = Rotate(rotAngle * i * -10.0);\n uv *= layerRot;\n vec2 starfieldUv = uv * layerScale * uScale + layerOffset;\n col += StarFieldLayer(starfieldUv, rotAngle) * layerFader;\n }\n\n // Glow + color grade, then opaque procedural background.\n col *= uBrightness * uColor;\n oColor = vec4(col, 1.0);\n}\n";
15
15
  export declare const GODRAYS_FRAG_SRC = "#version 300 es\nprecision highp float;\n\nuniform float uTime; // seconds, monotonically increasing\nuniform vec2 uResolution; // framebuffer size in pixels\nuniform vec3 uLightColor; // ray tint (linear-ish RGB, 0..1)\nuniform float uRayCount; // number of ray bands\nuniform float uRaySpeed; // drift speed\nuniform float uRayIntensity; // overall brightness / additive strength\nuniform float uRaySoftness; // edge falloff exponent (higher = crisper shafts)\nuniform float uTopGlow; // extra glow concentrated near the top\nuniform float uFadeDistance; // vertical falloff from the top\nuniform float uWobbleAmount; // horizontal wobble magnitude\nuniform float uWobbleSpeed; // wobble animation speed\n\nin highp vec2 vUv;\nout vec4 oColor;\n\nfloat hash(float n) {\n return fract(sin(n) * 43758.5453123);\n}\n\nfloat noise(vec2 p) {\n vec2 i = floor(p);\n vec2 f = fract(p);\n\n f = f * f * (3.0 - 2.0 * f);\n\n float a = hash(i.x + i.y * 57.0);\n float b = hash(i.x + 1.0 + i.y * 57.0);\n float c = hash(i.x + (i.y + 1.0) * 57.0);\n float d = hash(i.x + 1.0 + (i.y + 1.0) * 57.0);\n\n return mix(mix(a, b, f.x), mix(c, d, f.x), f.y);\n}\n\nvoid main() {\n // vUv is already 0..1 with bottom-left origin; this is the Shadertoy `uv`.\n vec2 uv = vUv;\n\n float aspect = uResolution.x / uResolution.y;\n vec2 p = uv;\n p.x = (p.x - 0.5) * aspect + 0.5;\n\n float t = uTime;\n float fromTop = 1.0 - uv.y;\n\n float verticalFade = exp(-fromTop * uFadeDistance);\n float topGlow = exp(-fromTop * 8.0) * uTopGlow;\n\n float wobble =\n (noise(vec2(uv.y * 3.0, t * uWobbleSpeed)) - 0.5) * uWobbleAmount;\n\n float rayCoord = (p.x + wobble) * uRayCount;\n\n float raysA = sin(rayCoord + t * uRaySpeed);\n float raysB = sin(rayCoord * 1.73 - t * uRaySpeed * 0.7);\n\n float rays = raysA * 0.65 + raysB * 0.35;\n rays = rays * 0.5 + 0.5;\n rays = pow(rays, uRaySoftness);\n\n float shimmer = noise(vec2(uv.x * 10.0, uv.y * 4.0 - t * 0.3));\n rays *= mix(0.75, 1.25, shimmer);\n\n float alpha = rays * verticalFade * uRayIntensity;\n alpha += topGlow * uRayIntensity;\n alpha = clamp(alpha, 0.0, 1.0);\n\n // Premultiplied additive output: rgb already scaled by alpha.\n vec3 rayColor = uLightColor * alpha;\n oColor = vec4(rayColor, alpha);\n}\n";
@@ -1 +1 @@
1
- {"version":3,"file":"shaders.generated.d.ts","sourceRoot":"","sources":["../../web-driver/shaders.generated.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,oBAAoB,0NAQhC,CAAC;AAEF,eAAO,MAAM,yBAAyB,oLAQrC,CAAC;AAEF,eAAO,MAAM,uBAAuB,6oBAwBnC,CAAC;AAEF,eAAO,MAAM,wBAAwB,2QAWpC,CAAC;AAEF,eAAO,MAAM,0BAA0B,kgBAiBtC,CAAC;AAEF,eAAO,MAAM,yBAAyB,2eAiBrC,CAAC;AAEF,eAAO,MAAM,eAAe,q6CAkC3B,CAAC;AAEF,eAAO,MAAM,qBAAqB,g6FAqEjC,CAAC;AAEF,eAAO,MAAM,oBAAoB,6rJA+HhC,CAAC;AAEF,eAAO,MAAM,uBAAuB,0kFA+DnC,CAAC;AAEF,eAAO,MAAM,oBAAoB,uwGAmFhC,CAAC;AAEF,eAAO,MAAM,oBAAoB,62JAkGhC,CAAC;AAEF,eAAO,MAAM,eAAe,i/HAmH3B,CAAC;AAEF,eAAO,MAAM,eAAe,4jMAqJ3B,CAAC;AAEF,eAAO,MAAM,gBAAgB,u1EAyE5B,CAAC;AAEF,eAAO,MAAM,kBAAkB,kmDAoD9B,CAAC;AAEF,eAAO,MAAM,qBAAqB,62KA2IjC,CAAC;AAEF,eAAO,MAAM,6BAA6B,ssHA4GzC,CAAC;AAEF,eAAO,MAAM,8BAA8B,qrTA2O1C,CAAC;AAEF,eAAO,MAAM,wBAAwB,wiPAsMpC,CAAC;AAEF,eAAO,MAAM,kBAAkB,uuPA+J9B,CAAC;AAIF,eAAO,MAAM,cAAc,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAgBlD,CAAC"}
1
+ {"version":3,"file":"shaders.generated.d.ts","sourceRoot":"","sources":["../../web-driver/shaders.generated.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,oBAAoB,0NAQhC,CAAC;AAEF,eAAO,MAAM,yBAAyB,oLAQrC,CAAC;AAEF,eAAO,MAAM,uBAAuB,6oBAwBnC,CAAC;AAEF,eAAO,MAAM,wBAAwB,2QAWpC,CAAC;AAEF,eAAO,MAAM,0BAA0B,kgBAiBtC,CAAC;AAEF,eAAO,MAAM,yBAAyB,2eAiBrC,CAAC;AAEF,eAAO,MAAM,eAAe,q6CAkC3B,CAAC;AAEF,eAAO,MAAM,qBAAqB,g6FAqEjC,CAAC;AAEF,eAAO,MAAM,oBAAoB,6rJA+HhC,CAAC;AAEF,eAAO,MAAM,uBAAuB,0kFA+DnC,CAAC;AAEF,eAAO,MAAM,oBAAoB,uwGAmFhC,CAAC;AAEF,eAAO,MAAM,oBAAoB,ojLA8GhC,CAAC;AAEF,eAAO,MAAM,eAAe,i/HAmH3B,CAAC;AAEF,eAAO,MAAM,eAAe,4jMAqJ3B,CAAC;AAEF,eAAO,MAAM,gBAAgB,u1EAyE5B,CAAC;AAEF,eAAO,MAAM,kBAAkB,kmDAoD9B,CAAC;AAEF,eAAO,MAAM,qBAAqB,62KA2IjC,CAAC;AAEF,eAAO,MAAM,6BAA6B,ssHA4GzC,CAAC;AAEF,eAAO,MAAM,8BAA8B,qrTA2O1C,CAAC;AAEF,eAAO,MAAM,wBAAwB,wiPAsMpC,CAAC;AAEF,eAAO,MAAM,kBAAkB,uuPA+J9B,CAAC;AAIF,eAAO,MAAM,cAAc,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAgBlD,CAAC"}