@vib3code/sdk 2.0.1 → 2.0.3-canary.0a63e71

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 (192) hide show
  1. package/CHANGELOG.md +36 -0
  2. package/DOCS/AGENT_HARNESS_ARCHITECTURE.md +245 -0
  3. package/DOCS/ANDROID_DEPLOYMENT.md +59 -0
  4. package/DOCS/ARCHITECTURE.md +1 -0
  5. package/DOCS/CI_TESTING.md +2 -0
  6. package/DOCS/CLI_ONBOARDING.md +3 -1
  7. package/DOCS/CONTROL_REFERENCE.md +2 -0
  8. package/DOCS/CROSS_SITE_DESIGN_PATTERNS.md +119 -0
  9. package/DOCS/ENV_SETUP.md +2 -0
  10. package/DOCS/EPIC_SCROLL_EVENTS.md +775 -0
  11. package/DOCS/EXPANSION_DESIGN.md +979 -0
  12. package/DOCS/EXPANSION_DESIGN_ULTRA.md +389 -0
  13. package/DOCS/EXPORT_FORMATS.md +2 -0
  14. package/DOCS/GPU_DISPOSAL_GUIDE.md +2 -0
  15. package/DOCS/HANDOFF_LANDING_PAGE.md +156 -0
  16. package/DOCS/HANDOFF_SDK_DEVELOPMENT.md +495 -0
  17. package/DOCS/LICENSING_TIERS.md +2 -0
  18. package/DOCS/MASTER_PLAN_2026-01-31.md +4 -2
  19. package/DOCS/MULTIVIZ_CHOREOGRAPHY_PATTERNS.md +939 -0
  20. package/DOCS/OBS_SETUP_GUIDE.md +2 -0
  21. package/DOCS/OPTIMIZATION_PLAN_MATH.md +119 -0
  22. package/DOCS/PRODUCT_STRATEGY.md +65 -0
  23. package/DOCS/PROJECT_SETUP.md +2 -0
  24. package/DOCS/README.md +105 -0
  25. package/DOCS/REFERENCE_SCROLL_ANALYSIS.md +99 -0
  26. package/DOCS/RENDERER_LIFECYCLE.md +2 -0
  27. package/DOCS/REPO_MANIFEST.md +2 -0
  28. package/DOCS/ROADMAP.md +113 -0
  29. package/DOCS/SCROLL_TIMELINE_v3.md +271 -0
  30. package/DOCS/SITE_REFACTOR_PLAN.md +102 -0
  31. package/DOCS/STATUS.md +26 -0
  32. package/DOCS/SYSTEM_INVENTORY.md +37 -32
  33. package/DOCS/TELEMETRY_EXPORTS.md +2 -0
  34. package/DOCS/VISUAL_ANALYSIS_CLICKERSS.md +87 -0
  35. package/DOCS/VISUAL_ANALYSIS_FACETAD.md +135 -0
  36. package/DOCS/VISUAL_ANALYSIS_SIMONE.md +97 -0
  37. package/DOCS/VISUAL_ANALYSIS_TABLESIDE.md +88 -0
  38. package/DOCS/WEBGPU_STATUS.md +121 -38
  39. package/DOCS/XR_BENCHMARKS.md +2 -0
  40. package/DOCS/archive/BLUEPRINT_EXECUTION_PLAN_2026-01-07.md +1 -0
  41. package/DOCS/archive/DEV_TRACK_ANALYSIS.md +1 -0
  42. package/DOCS/archive/DEV_TRACK_PLAN_2026-01-07.md +1 -0
  43. package/DOCS/archive/SESSION_014_PLAN.md +1 -0
  44. package/DOCS/archive/SESSION_LOG_2026-01-07.md +1 -0
  45. package/DOCS/archive/STRATEGIC_BLUEPRINT_2026-01-07.md +1 -0
  46. package/DOCS/archive/SYSTEM_AUDIT_2026-01-30.md +1 -0
  47. package/DOCS/archive/WEBGPU_STATUS_2026-02-15_STALE.md +1 -0
  48. package/DOCS/{DEV_TRACK_SESSION_2026-01-31.md → dev-tracks/DEV_TRACK_SESSION_2026-01-31.md} +3 -1
  49. package/DOCS/dev-tracks/DEV_TRACK_SESSION_2026-02-06.md +233 -0
  50. package/DOCS/dev-tracks/DEV_TRACK_SESSION_2026-02-13.md +129 -0
  51. package/DOCS/dev-tracks/DEV_TRACK_SESSION_2026-02-15.md +144 -0
  52. package/DOCS/dev-tracks/DEV_TRACK_SESSION_2026-02-16.md +110 -0
  53. package/DOCS/dev-tracks/PERF_UPGRADE_2026-02-16.md +310 -0
  54. package/DOCS/dev-tracks/README.md +12 -0
  55. package/README.md +26 -13
  56. package/cpp/CMakeLists.txt +236 -0
  57. package/cpp/bindings/embind.cpp +269 -0
  58. package/cpp/build.sh +129 -0
  59. package/cpp/geometry/Crystal.cpp +103 -0
  60. package/cpp/geometry/Fractal.cpp +136 -0
  61. package/cpp/geometry/GeometryGenerator.cpp +262 -0
  62. package/cpp/geometry/KleinBottle.cpp +71 -0
  63. package/cpp/geometry/Sphere.cpp +134 -0
  64. package/cpp/geometry/Tesseract.cpp +94 -0
  65. package/cpp/geometry/Tetrahedron.cpp +83 -0
  66. package/cpp/geometry/Torus.cpp +65 -0
  67. package/cpp/geometry/WarpFunctions.cpp +238 -0
  68. package/cpp/geometry/Wave.cpp +85 -0
  69. package/cpp/include/vib3_ffi.h +238 -0
  70. package/cpp/math/Mat4x4.cpp +409 -0
  71. package/cpp/math/Mat4x4.hpp +209 -0
  72. package/cpp/math/Projection.cpp +142 -0
  73. package/cpp/math/Projection.hpp +148 -0
  74. package/cpp/math/Rotor4D.cpp +322 -0
  75. package/cpp/math/Rotor4D.hpp +204 -0
  76. package/cpp/math/Vec4.cpp +303 -0
  77. package/cpp/math/Vec4.hpp +225 -0
  78. package/cpp/src/vib3_ffi.cpp +607 -0
  79. package/cpp/tests/Geometry_test.cpp +213 -0
  80. package/cpp/tests/Mat4x4_test.cpp +494 -0
  81. package/cpp/tests/Projection_test.cpp +298 -0
  82. package/cpp/tests/Rotor4D_test.cpp +423 -0
  83. package/cpp/tests/Vec4_test.cpp +489 -0
  84. package/docs/webgpu-live.html +1 -1
  85. package/package.json +41 -30
  86. package/src/agent/index.js +1 -3
  87. package/src/agent/mcp/MCPServer.js +1220 -144
  88. package/src/agent/mcp/index.js +1 -1
  89. package/src/agent/mcp/stdio-server.js +264 -0
  90. package/src/agent/mcp/tools.js +498 -31
  91. package/src/cli/index.js +431 -47
  92. package/src/core/CanvasManager.js +97 -204
  93. package/src/core/ErrorReporter.js +1 -1
  94. package/src/core/Parameters.js +1 -1
  95. package/src/core/VIB3Engine.js +93 -4
  96. package/src/core/VitalitySystem.js +53 -0
  97. package/src/core/index.js +18 -0
  98. package/src/core/renderers/FacetedRendererAdapter.js +10 -9
  99. package/src/core/renderers/HolographicRendererAdapter.js +13 -9
  100. package/src/core/renderers/QuantumRendererAdapter.js +11 -7
  101. package/src/creative/AestheticMapper.js +628 -0
  102. package/src/creative/ChoreographyPlayer.js +481 -0
  103. package/src/creative/index.js +11 -0
  104. package/src/experimental/GameLoop.js +72 -0
  105. package/src/experimental/LatticePhysics.js +100 -0
  106. package/src/experimental/LiveDirector.js +143 -0
  107. package/src/experimental/PlayerController4D.js +154 -0
  108. package/src/experimental/VIB3Actor.js +138 -0
  109. package/src/experimental/VIB3Compositor.js +117 -0
  110. package/src/experimental/VIB3Link.js +122 -0
  111. package/src/experimental/VIB3Orchestrator.js +146 -0
  112. package/src/experimental/VIB3Universe.js +109 -0
  113. package/src/experimental/demos/CrystalLabyrinth.js +202 -0
  114. package/src/export/TradingCardManager.js +3 -4
  115. package/src/export/index.js +11 -1
  116. package/src/faceted/FacetedSystem.js +260 -394
  117. package/src/games/glyph-war/GlyphWarVisualizer.js +641 -0
  118. package/src/geometry/generators/Crystal.js +2 -2
  119. package/src/geometry/warp/HypersphereCore.js +53 -24
  120. package/src/holograms/HolographicVisualizer.js +84 -98
  121. package/src/holograms/RealHolographicSystem.js +194 -43
  122. package/src/math/Mat4x4.js +308 -105
  123. package/src/math/Rotor4D.js +124 -40
  124. package/src/math/Vec4.js +200 -103
  125. package/src/math/index.js +7 -7
  126. package/src/polychora/PolychoraSystem.js +77 -0
  127. package/src/quantum/QuantumEngine.js +103 -66
  128. package/src/quantum/QuantumVisualizer.js +31 -22
  129. package/src/reactivity/index.js +3 -5
  130. package/src/render/LayerPresetManager.js +372 -0
  131. package/src/render/LayerReactivityBridge.js +344 -0
  132. package/src/render/LayerRelationshipGraph.js +610 -0
  133. package/src/render/MultiCanvasBridge.js +148 -25
  134. package/src/render/ShaderLoader.js +38 -0
  135. package/src/render/ShaderProgram.js +4 -4
  136. package/src/render/UnifiedRenderBridge.js +4 -1
  137. package/src/render/backends/WebGPUBackend.js +8 -4
  138. package/src/render/index.js +27 -2
  139. package/src/scene/Node4D.js +74 -24
  140. package/src/scene/index.js +4 -4
  141. package/src/shaders/common/geometry24.glsl +65 -0
  142. package/src/shaders/common/geometry24.wgsl +54 -0
  143. package/src/shaders/common/rotation4d.glsl +4 -4
  144. package/src/shaders/common/rotation4d.wgsl +2 -2
  145. package/src/shaders/common/uniforms.wgsl +15 -8
  146. package/src/shaders/faceted/faceted.frag.glsl +220 -80
  147. package/src/shaders/faceted/faceted.frag.wgsl +144 -90
  148. package/src/shaders/holographic/holographic.frag.glsl +28 -9
  149. package/src/shaders/holographic/holographic.frag.wgsl +112 -41
  150. package/src/shaders/quantum/quantum.frag.glsl +1 -0
  151. package/src/shaders/quantum/quantum.frag.wgsl +6 -4
  152. package/src/testing/ParallelTestFramework.js +2 -2
  153. package/src/ui/adaptive/renderers/webgpu/WebGPURenderer.ts +2 -2
  154. package/src/viewer/GalleryUI.js +17 -0
  155. package/src/viewer/ViewerPortal.js +2 -2
  156. package/src/viewer/index.js +1 -1
  157. package/tools/headless-renderer.js +258 -0
  158. package/tools/shader-sync-verify.js +14 -8
  159. package/tools/site-analysis/all-reports.json +32 -0
  160. package/tools/site-analysis/combined-analysis.md +50 -0
  161. package/tools/site-analyzer.mjs +779 -0
  162. package/tools/visual-catalog/capture.js +276 -0
  163. package/tools/visual-catalog/composite.js +138 -0
  164. package/types/adaptive-sdk.d.ts +204 -5
  165. package/types/agent/cli.d.ts +78 -0
  166. package/types/agent/index.d.ts +18 -0
  167. package/types/agent/mcp.d.ts +87 -0
  168. package/types/agent/telemetry.d.ts +190 -0
  169. package/types/core/VIB3Engine.d.ts +26 -0
  170. package/types/core/index.d.ts +261 -0
  171. package/types/creative/AestheticMapper.d.ts +72 -0
  172. package/types/creative/ChoreographyPlayer.d.ts +96 -0
  173. package/types/creative/index.d.ts +17 -0
  174. package/types/export/index.d.ts +243 -0
  175. package/types/geometry/index.d.ts +164 -0
  176. package/types/math/index.d.ts +214 -0
  177. package/types/render/LayerPresetManager.d.ts +78 -0
  178. package/types/render/LayerReactivityBridge.d.ts +85 -0
  179. package/types/render/LayerRelationshipGraph.d.ts +174 -0
  180. package/types/render/index.d.ts +3 -0
  181. package/types/scene/index.d.ts +204 -0
  182. package/types/systems/index.d.ts +244 -0
  183. package/types/variations/index.d.ts +62 -0
  184. package/types/viewer/index.d.ts +225 -0
  185. package/DOCS/BLUEPRINT_EXECUTION_PLAN_2026-01-07.md +0 -34
  186. package/DOCS/DEV_TRACK_ANALYSIS.md +0 -77
  187. package/DOCS/DEV_TRACK_PLAN_2026-01-07.md +0 -42
  188. package/DOCS/SESSION_014_PLAN.md +0 -195
  189. package/DOCS/SESSION_LOG_2026-01-07.md +0 -56
  190. package/DOCS/STRATEGIC_BLUEPRINT_2026-01-07.md +0 -72
  191. package/DOCS/SYSTEM_AUDIT_2026-01-30.md +0 -738
  192. /package/src/viewer/{ReactivityManager.js → ViewerInputHandler.js} +0 -0
@@ -47,6 +47,60 @@ fn hypertetrahedronCore(p: vec4<f32>, baseType: f32) -> f32 {
47
47
  return max(baseGeometry(p, baseType), tf);
48
48
  }
49
49
 
50
+ // ── Polytope Core Warp Functions ──
51
+ // Requires: rotation functions from rotation4d.wgsl and u: VIB3Uniforms
52
+
53
+ fn warpHypersphereCore_common(p: vec3<f32>, geomIdx: i32) -> vec3<f32> {
54
+ let radius = length(p);
55
+ let morphBlend = clamp(u.morphFactor * 0.6 + (u.dimension - 3.0) * 0.25, 0.0, 2.0);
56
+ let w = sin(radius * (1.3 + f32(geomIdx) * 0.12) + u.time * 0.0008 * u.speed)
57
+ * (0.4 + morphBlend * 0.45);
58
+ var p4d = vec4<f32>(p * (1.0 + morphBlend * 0.2), w);
59
+ p4d = rotateXY(u.rot4dXY) * p4d;
60
+ p4d = rotateXZ(u.rot4dXZ) * p4d;
61
+ p4d = rotateYZ(u.rot4dYZ) * p4d;
62
+ p4d = rotateXW(u.rot4dXW) * p4d;
63
+ p4d = rotateYW(u.rot4dYW) * p4d;
64
+ p4d = rotateZW(u.rot4dZW) * p4d;
65
+ let proj = project4Dto3D(p4d);
66
+ return mix(p, proj, clamp(0.45 + morphBlend * 0.35, 0.0, 1.0));
67
+ }
68
+
69
+ fn warpHypertetraCore_common(p: vec3<f32>, geomIdx: i32) -> vec3<f32> {
70
+ let c1 = normalize(vec3<f32>(1.0, 1.0, 1.0));
71
+ let c2 = normalize(vec3<f32>(-1.0, -1.0, 1.0));
72
+ let c3 = normalize(vec3<f32>(-1.0, 1.0, -1.0));
73
+ let c4 = normalize(vec3<f32>(1.0, -1.0, -1.0));
74
+ let morphBlend = clamp(u.morphFactor * 0.8 + (u.dimension - 3.0) * 0.2, 0.0, 2.0);
75
+ let basisMix = dot(p, c1) * 0.14 + dot(p, c2) * 0.1 + dot(p, c3) * 0.08;
76
+ let w = sin(basisMix * 5.5 + u.time * 0.0009 * u.speed)
77
+ * cos(dot(p, c4) * 4.2 - u.time * 0.0007 * u.speed)
78
+ * (0.5 + morphBlend * 0.4);
79
+ let offset = vec3<f32>(dot(p, c1), dot(p, c2), dot(p, c3)) * 0.1 * morphBlend;
80
+ var p4d = vec4<f32>(p + offset, w);
81
+ p4d = rotateXY(u.rot4dXY) * p4d;
82
+ p4d = rotateXZ(u.rot4dXZ) * p4d;
83
+ p4d = rotateYZ(u.rot4dYZ) * p4d;
84
+ p4d = rotateXW(u.rot4dXW) * p4d;
85
+ p4d = rotateYW(u.rot4dYW) * p4d;
86
+ p4d = rotateZW(u.rot4dZW) * p4d;
87
+ let proj = project4Dto3D(p4d);
88
+ let planeInf = min(min(abs(dot(p, c1)), abs(dot(p, c2))),
89
+ min(abs(dot(p, c3)), abs(dot(p, c4))));
90
+ let blended = mix(p, proj, clamp(0.45 + morphBlend * 0.35, 0.0, 1.0));
91
+ return mix(blended, blended * (1.0 - planeInf * 0.55), 0.2 + morphBlend * 0.2);
92
+ }
93
+
94
+ fn applyCoreWarp_common(p: vec3<f32>, geomType: f32) -> vec3<f32> {
95
+ let coreFloat = floor(geomType / 8.0);
96
+ let coreIndex = i32(clamp(coreFloat, 0.0, 2.0));
97
+ let baseFloat = geomType - floor(geomType / 8.0) * 8.0;
98
+ let geomIdx = i32(clamp(floor(baseFloat + 0.5), 0.0, 7.0));
99
+ if (coreIndex == 1) { return warpHypersphereCore_common(p, geomIdx); }
100
+ if (coreIndex == 2) { return warpHypertetraCore_common(p, geomIdx); }
101
+ return p;
102
+ }
103
+
50
104
  fn geometry(p: vec4<f32>, t: f32) -> f32 {
51
105
  if (t < 8.0) { return baseGeometry(p, t); }
52
106
  else if (t < 16.0) { return hypersphereCore(p, t - 8.0); }
@@ -16,10 +16,10 @@ mat4 rotateXZ(float angle) {
16
16
  float c = cos(angle);
17
17
  float s = sin(angle);
18
18
  return mat4(
19
- c, 0, -s, 0,
20
- 0, 1, 0, 0,
21
- s, 0, c, 0,
22
- 0, 0, 0, 1
19
+ c, 0, s, 0,
20
+ 0, 1, 0, 0,
21
+ -s, 0, c, 0,
22
+ 0, 0, 0, 1
23
23
  );
24
24
  }
25
25
 
@@ -16,9 +16,9 @@ fn rotateXZ(angle: f32) -> mat4x4<f32> {
16
16
  let c = cos(angle);
17
17
  let s = sin(angle);
18
18
  return mat4x4<f32>(
19
- vec4<f32>(c, 0.0, -s, 0.0),
19
+ vec4<f32>( c, 0.0, s, 0.0),
20
20
  vec4<f32>(0.0, 1.0, 0.0, 0.0),
21
- vec4<f32>(s, 0.0, c, 0.0),
21
+ vec4<f32>(-s, 0.0, c, 0.0),
22
22
  vec4<f32>(0.0, 0.0, 0.0, 1.0)
23
23
  );
24
24
  }
@@ -1,16 +1,19 @@
1
1
  // VIB3+ Common Uniform Struct (WGSL)
2
2
  // Shared across all visualization systems
3
+ // Canonical layout — must match packVIB3Uniforms() in UnifiedRenderBridge.js
4
+ // All fields are f32 (except resolution vec2) to avoid alignment surprises.
5
+ // Total: 33 floats (132 bytes), buffer padded to 256 bytes.
3
6
 
4
7
  struct VIB3Uniforms {
5
- // Time and resolution
8
+ // Time and resolution (indices 0-3)
6
9
  time: f32,
7
10
  _pad0: f32,
8
11
  resolution: vec2<f32>,
9
12
 
10
- // Geometry selection (0-23)
13
+ // Geometry selection 0-23 (index 4)
11
14
  geometry: f32,
12
15
 
13
- // 6D Rotation (radians)
16
+ // 6D Rotation in radians (indices 5-10)
14
17
  rot4dXY: f32,
15
18
  rot4dXZ: f32,
16
19
  rot4dYZ: f32,
@@ -18,7 +21,7 @@ struct VIB3Uniforms {
18
21
  rot4dYW: f32,
19
22
  rot4dZW: f32,
20
23
 
21
- // Visual parameters
24
+ // Visual parameters (indices 11-18)
22
25
  dimension: f32,
23
26
  gridDensity: f32,
24
27
  morphFactor: f32,
@@ -28,21 +31,25 @@ struct VIB3Uniforms {
28
31
  intensity: f32,
29
32
  saturation: f32,
30
33
 
31
- // Reactivity
34
+ // Reactivity (indices 19-23)
32
35
  mouseIntensity: f32,
33
36
  clickIntensity: f32,
34
37
  bass: f32,
35
38
  mid: f32,
36
39
  high: f32,
37
40
 
38
- // Layer parameters (holographic multi-layer)
41
+ // Layer parameters (indices 24-31)
39
42
  layerScale: f32,
40
43
  layerOpacity: f32,
41
44
  _pad1: f32,
42
- layerColor: vec3<f32>,
45
+ layerColorR: f32,
46
+ layerColorG: f32,
47
+ layerColorB: f32,
43
48
  densityMult: f32,
44
49
  speedMult: f32,
45
- _pad2: vec3<f32>,
50
+
51
+ // Vitality (index 32)
52
+ breath: f32,
46
53
  };
47
54
 
48
55
  @group(0) @binding(0) var<uniform> u: VIB3Uniforms;
@@ -1,11 +1,13 @@
1
1
  // VIB3+ Faceted System Fragment Shader (GLSL)
2
2
  // Clean 2D geometric patterns with 4D rotation projection
3
3
  // 24 geometry variants: 8 base + 8 Hypersphere Core + 8 Hypertetrahedron Core
4
+
4
5
  precision highp float;
5
6
 
6
7
  uniform float u_time;
7
8
  uniform vec2 u_resolution;
8
- uniform float u_geometry; // 0-23
9
+ uniform vec2 u_mouse;
10
+ uniform float u_geometry; // 0-23
9
11
 
10
12
  // 6D Rotation uniforms
11
13
  uniform float u_rot4dXY;
@@ -19,111 +21,249 @@ uniform float u_dimension;
19
21
  uniform float u_gridDensity;
20
22
  uniform float u_morphFactor;
21
23
  uniform float u_chaos;
24
+ uniform float u_speed;
22
25
  uniform float u_hue;
23
26
  uniform float u_intensity;
27
+ uniform float u_saturation;
28
+ uniform float u_mouseIntensity;
29
+ uniform float u_clickIntensity;
30
+ uniform float u_roleIntensity;
31
+ uniform float u_bass;
32
+ uniform float u_mid;
33
+ uniform float u_high;
34
+ uniform float u_breath; // Vitality System exhale (0.0 - 1.0)
35
+
36
+ // ── 6D Rotation Matrices ──
24
37
 
25
- // ========== 6D Rotation ==========
26
- mat4 rotateXY(float angle) {
27
- float c = cos(angle), s = sin(angle);
38
+ mat4 rotateXY(float theta) {
39
+ float c = cos(theta); float s = sin(theta);
28
40
  return mat4(c, -s, 0, 0, s, c, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
29
41
  }
30
- mat4 rotateXZ(float angle) {
31
- float c = cos(angle), s = sin(angle);
32
- return mat4(c, 0, -s, 0, 0, 1, 0, 0, s, 0, c, 0, 0, 0, 0, 1);
42
+ mat4 rotateXZ(float theta) {
43
+ float c = cos(theta); float s = sin(theta);
44
+ return mat4(c, 0, s, 0, 0, 1, 0, 0, -s, 0, c, 0, 0, 0, 0, 1);
33
45
  }
34
- mat4 rotateYZ(float angle) {
35
- float c = cos(angle), s = sin(angle);
46
+ mat4 rotateYZ(float theta) {
47
+ float c = cos(theta); float s = sin(theta);
36
48
  return mat4(1, 0, 0, 0, 0, c, -s, 0, 0, s, c, 0, 0, 0, 0, 1);
37
49
  }
38
- mat4 rotateXW(float angle) {
39
- float c = cos(angle), s = sin(angle);
50
+ mat4 rotateXW(float theta) {
51
+ float c = cos(theta); float s = sin(theta);
40
52
  return mat4(c, 0, 0, -s, 0, 1, 0, 0, 0, 0, 1, 0, s, 0, 0, c);
41
53
  }
42
- mat4 rotateYW(float angle) {
43
- float c = cos(angle), s = sin(angle);
54
+ mat4 rotateYW(float theta) {
55
+ float c = cos(theta); float s = sin(theta);
44
56
  return mat4(1, 0, 0, 0, 0, c, 0, -s, 0, 0, 1, 0, 0, s, 0, c);
45
57
  }
46
- mat4 rotateZW(float angle) {
47
- float c = cos(angle), s = sin(angle);
58
+ mat4 rotateZW(float theta) {
59
+ float c = cos(theta); float s = sin(theta);
48
60
  return mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, c, -s, 0, 0, s, c);
49
61
  }
50
62
 
51
- vec4 apply6DRotation(vec4 pos) {
52
- pos = rotateXY(u_rot4dXY + u_time * 0.05) * pos;
53
- pos = rotateXZ(u_rot4dXZ + u_time * 0.06) * pos;
54
- pos = rotateYZ(u_rot4dYZ + u_time * 0.04) * pos;
55
- pos = rotateXW(u_rot4dXW + u_time * 0.07) * pos;
56
- pos = rotateYW(u_rot4dYW + u_time * 0.08) * pos;
57
- pos = rotateZW(u_rot4dZW + u_time * 0.09) * pos;
58
- return pos;
63
+ // ── 4D → 3D Projection ──
64
+
65
+ vec3 project4Dto3D(vec4 p) {
66
+ float w = 2.5 / (2.5 + p.w);
67
+ return vec3(p.x * w, p.y * w, p.z * w);
59
68
  }
60
69
 
61
- // ========== 24 Geometry SDFs ==========
62
- float baseGeometry(vec4 p, float type) {
63
- if (type < 0.5) {
64
- return max(max(max(abs(p.x + p.y) - p.z, abs(p.x - p.y) - p.z),
65
- abs(p.x + p.y) + p.z), abs(p.x - p.y) + p.z) / sqrt(3.0);
66
- } else if (type < 1.5) {
67
- vec4 q = abs(p) - 0.8;
68
- return length(max(q, 0.0)) + min(max(max(max(q.x, q.y), q.z), q.w), 0.0);
69
- } else if (type < 2.5) {
70
- return length(p) - 1.0;
71
- } else if (type < 3.5) {
72
- vec2 t = vec2(length(p.xy) - 0.8, p.z);
73
- return length(t) - 0.3;
74
- } else if (type < 4.5) {
75
- float r = length(p.xy);
76
- return abs(r - 0.7) - 0.2 + sin(atan(p.y, p.x) * 3.0 + p.z * 5.0) * 0.1;
77
- } else if (type < 5.5) {
78
- return length(p) - 0.8 + sin(p.x * 5.0) * sin(p.y * 5.0) * sin(p.z * 5.0) * 0.2;
79
- } else if (type < 6.5) {
80
- return abs(p.z - sin(p.x * 5.0 + u_time) * cos(p.y * 5.0 + u_time) * 0.3) - 0.1;
81
- } else {
82
- vec4 q = abs(p);
83
- return max(max(max(q.x, q.y), q.z), q.w) - 0.8;
84
- }
70
+ // ── Polytope Core Warp Functions (24 Geometries) ──
71
+
72
+ vec3 warpHypersphereCore(vec3 p, int geometryIndex, vec2 mouseDelta) {
73
+ float radius = length(p);
74
+ float morphBlend = clamp(u_morphFactor * 0.6 + (u_dimension - 3.0) * 0.25, 0.0, 2.0);
75
+ float w = sin(radius * (1.3 + float(geometryIndex) * 0.12) + u_time * 0.0008 * u_speed);
76
+ w *= (0.4 + morphBlend * 0.45);
77
+
78
+ vec4 p4d = vec4(p * (1.0 + morphBlend * 0.2), w);
79
+ p4d = rotateXY(u_rot4dXY) * p4d;
80
+ p4d = rotateXZ(u_rot4dXZ) * p4d;
81
+ p4d = rotateYZ(u_rot4dYZ) * p4d;
82
+ p4d = rotateXW(u_rot4dXW) * p4d;
83
+ p4d = rotateYW(u_rot4dYW) * p4d;
84
+ p4d = rotateZW(u_rot4dZW) * p4d;
85
+
86
+ vec3 projected = project4Dto3D(p4d);
87
+ return mix(p, projected, clamp(0.45 + morphBlend * 0.35, 0.0, 1.0));
85
88
  }
86
89
 
87
- float hypersphereCore(vec4 p, float baseType) {
88
- return max(baseGeometry(p, baseType), length(p) - 1.2);
90
+ vec3 warpHypertetraCore(vec3 p, int geometryIndex, vec2 mouseDelta) {
91
+ vec3 c1 = normalize(vec3(1.0, 1.0, 1.0));
92
+ vec3 c2 = normalize(vec3(-1.0, -1.0, 1.0));
93
+ vec3 c3 = normalize(vec3(-1.0, 1.0, -1.0));
94
+ vec3 c4 = normalize(vec3(1.0, -1.0, -1.0));
95
+
96
+ float morphBlend = clamp(u_morphFactor * 0.8 + (u_dimension - 3.0) * 0.2, 0.0, 2.0);
97
+ float basisMix = dot(p, c1) * 0.14 + dot(p, c2) * 0.1 + dot(p, c3) * 0.08;
98
+ float w = sin(basisMix * 5.5 + u_time * 0.0009 * u_speed);
99
+ w *= cos(dot(p, c4) * 4.2 - u_time * 0.0007 * u_speed);
100
+ w *= (0.5 + morphBlend * 0.4);
101
+
102
+ vec3 offset = vec3(dot(p, c1), dot(p, c2), dot(p, c3)) * 0.1 * morphBlend;
103
+ vec4 p4d = vec4(p + offset, w);
104
+ p4d = rotateXY(u_rot4dXY) * p4d;
105
+ p4d = rotateXZ(u_rot4dXZ) * p4d;
106
+ p4d = rotateYZ(u_rot4dYZ) * p4d;
107
+ p4d = rotateXW(u_rot4dXW) * p4d;
108
+ p4d = rotateYW(u_rot4dYW) * p4d;
109
+ p4d = rotateZW(u_rot4dZW) * p4d;
110
+
111
+ vec3 projected = project4Dto3D(p4d);
112
+ float planeInfluence = min(min(abs(dot(p, c1)), abs(dot(p, c2))),
113
+ min(abs(dot(p, c3)), abs(dot(p, c4))));
114
+ vec3 blended = mix(p, projected, clamp(0.45 + morphBlend * 0.35, 0.0, 1.0));
115
+ return mix(blended, blended * (1.0 - planeInfluence * 0.55), 0.2 + morphBlend * 0.2);
89
116
  }
90
117
 
91
- float hypertetrahedronCore(vec4 p, float baseType) {
92
- float tetraField = max(max(max(
93
- abs(p.x + p.y) - p.z - p.w,
94
- abs(p.x - p.y) - p.z + p.w),
95
- abs(p.x + p.y) + p.z - p.w),
96
- abs(p.x - p.y) + p.z + p.w) / sqrt(4.0);
97
- return max(baseGeometry(p, baseType), tetraField);
118
+ vec3 applyCoreWarp(vec3 p, float geometryType, vec2 mouseDelta) {
119
+ float totalBase = 8.0;
120
+ float coreFloat = floor(geometryType / totalBase);
121
+ int coreIndex = int(clamp(coreFloat, 0.0, 2.0));
122
+ // WebGL 1.0 compatible modulus
123
+ float baseGeomFloat = geometryType - floor(geometryType / totalBase) * totalBase;
124
+ int geometryIndex = int(clamp(floor(baseGeomFloat + 0.5), 0.0, totalBase - 1.0));
125
+
126
+ if (coreIndex == 1) {
127
+ return warpHypersphereCore(p, geometryIndex, mouseDelta);
128
+ }
129
+ if (coreIndex == 2) {
130
+ return warpHypertetraCore(p, geometryIndex, mouseDelta);
131
+ }
132
+ return p;
98
133
  }
99
134
 
100
- float geometry(vec4 p, float type) {
101
- if (type < 8.0) { return baseGeometry(p, type); }
102
- else if (type < 16.0) { return hypersphereCore(p, type - 8.0); }
103
- else { return hypertetrahedronCore(p, type - 16.0); }
135
+ // ── 8 Lattice Geometry Functions ──
136
+
137
+ float geometryFunction(vec4 p) {
138
+ float totalBase = 8.0;
139
+ // WebGL 1.0 compatible modulus
140
+ float baseGeomFloat = u_geometry - floor(u_geometry / totalBase) * totalBase;
141
+ int geomType = int(clamp(floor(baseGeomFloat + 0.5), 0.0, totalBase - 1.0));
142
+
143
+ if (geomType == 0) {
144
+ // Tetrahedron lattice
145
+ vec4 pos = fract(p * u_gridDensity * 0.08);
146
+ vec4 dist = min(pos, 1.0 - pos);
147
+ return min(min(dist.x, dist.y), min(dist.z, dist.w)) * u_morphFactor;
148
+ }
149
+ else if (geomType == 1) {
150
+ // Hypercube lattice
151
+ vec4 pos = fract(p * u_gridDensity * 0.08);
152
+ vec4 dist = min(pos, 1.0 - pos);
153
+ float minDist = min(min(dist.x, dist.y), min(dist.z, dist.w));
154
+ return minDist * u_morphFactor;
155
+ }
156
+ else if (geomType == 2) {
157
+ // Sphere lattice
158
+ float r = length(p);
159
+ float density = u_gridDensity * 0.08;
160
+ float spheres = abs(fract(r * density) - 0.5) * 2.0;
161
+ float theta = atan(p.y, p.x);
162
+ float harmonics = sin(theta * 3.0) * 0.2;
163
+ return (spheres + harmonics) * u_morphFactor;
164
+ }
165
+ else if (geomType == 3) {
166
+ // Torus lattice
167
+ float r1 = length(p.xy) - 2.0;
168
+ float torus = length(vec2(r1, p.z)) - 0.8;
169
+ float lattice = sin(p.x * u_gridDensity * 0.08) * sin(p.y * u_gridDensity * 0.08);
170
+ return (torus + lattice * 0.3) * u_morphFactor;
171
+ }
172
+ else if (geomType == 4) {
173
+ // Klein bottle lattice
174
+ float u_ang = atan(p.y, p.x);
175
+ float v_ang = atan(p.w, p.z);
176
+ float dist = length(p) - 2.0;
177
+ float lattice = sin(u_ang * u_gridDensity * 0.08) * sin(v_ang * u_gridDensity * 0.08);
178
+ return (dist + lattice * 0.4) * u_morphFactor;
179
+ }
180
+ else if (geomType == 5) {
181
+ // Fractal lattice
182
+ vec4 pos = fract(p * u_gridDensity * 0.08);
183
+ pos = abs(pos * 2.0 - 1.0);
184
+ float dist = length(max(abs(pos) - 1.0, 0.0));
185
+ return dist * u_morphFactor;
186
+ }
187
+ else if (geomType == 6) {
188
+ // Wave lattice
189
+ float freq = u_gridDensity * 0.08;
190
+ float time = u_time * 0.001 * u_speed;
191
+ float wave1 = sin(p.x * freq + time);
192
+ float wave2 = sin(p.y * freq + time * 1.3);
193
+ float wave3 = sin(p.z * freq * 0.8 + time * 0.7);
194
+ float interference = wave1 * wave2 * wave3;
195
+ return interference * u_morphFactor;
196
+ }
197
+ else if (geomType == 7) {
198
+ // Crystal lattice
199
+ vec4 pos = fract(p * u_gridDensity * 0.08) - 0.5;
200
+ float cube = max(max(abs(pos.x), abs(pos.y)), max(abs(pos.z), abs(pos.w)));
201
+ return cube * u_morphFactor;
202
+ }
203
+ else {
204
+ // Default hypercube
205
+ vec4 pos = fract(p * u_gridDensity * 0.08);
206
+ vec4 dist = min(pos, 1.0 - pos);
207
+ return min(min(dist.x, dist.y), min(dist.z, dist.w)) * u_morphFactor;
208
+ }
104
209
  }
105
210
 
106
- // ========== Main Fragment ==========
211
+ // ── Main ──
212
+
107
213
  void main() {
108
- vec2 uv = (gl_FragCoord.xy - 0.5 * u_resolution.xy) / min(u_resolution.x, u_resolution.y);
109
- uv *= 2.0 / u_gridDensity;
110
-
111
- vec4 pos = vec4(uv, sin(u_time * 0.3) * 0.5, cos(u_time * 0.2) * 0.5);
112
- pos = apply6DRotation(pos);
113
- pos *= u_morphFactor;
114
- pos += vec4(sin(u_time * 0.1), cos(u_time * 0.15), sin(u_time * 0.12), cos(u_time * 0.18)) * u_chaos;
115
-
116
- float dist = geometry(pos, u_geometry);
117
- float edge = smoothstep(0.02, 0.0, abs(dist));
118
- float fill = smoothstep(0.1, 0.0, dist) * 0.3;
119
-
120
- float hueVal = u_hue / 360.0 + dist * 0.2 + u_time * 0.05;
121
- vec3 color = vec3(
122
- 0.5 + 0.5 * cos(hueVal * 6.28),
123
- 0.5 + 0.5 * cos((hueVal + 0.33) * 6.28),
124
- 0.5 + 0.5 * cos((hueVal + 0.67) * 6.28)
214
+ vec2 uv = (gl_FragCoord.xy - u_resolution.xy * 0.5) / min(u_resolution.x, u_resolution.y);
215
+ float timeSpeed = u_time * 0.0001 * u_speed;
216
+
217
+ // Create 4D point
218
+ vec4 pos = vec4(uv * 3.0, sin(timeSpeed * 3.0), cos(timeSpeed * 2.0));
219
+
220
+ // Mouse influence
221
+ pos.xy += (u_mouse - 0.5) * u_mouseIntensity * 2.0;
222
+
223
+ // Audio-reactive density and morph
224
+ float audioDensityMod = 1.0 + u_bass * 0.3;
225
+ float audioMorphMod = 1.0 + u_mid * 0.2;
226
+
227
+ // Apply full 6D rotation
228
+ pos = rotateXY(u_rot4dXY) * pos;
229
+ pos = rotateXZ(u_rot4dXZ) * pos;
230
+ pos = rotateYZ(u_rot4dYZ) * pos;
231
+ pos = rotateXW(u_rot4dXW) * pos;
232
+ pos = rotateYW(u_rot4dYW) * pos;
233
+ pos = rotateZW(u_rot4dZW) * pos;
234
+
235
+ // 4D → 3D projection
236
+ vec3 basePoint = project4Dto3D(pos);
237
+
238
+ // Apply polytope core warp (types 8-23)
239
+ vec3 warpedPoint = applyCoreWarp(basePoint, u_geometry, u_mouse - 0.5);
240
+
241
+ // Evaluate lattice geometry
242
+ vec4 warpedPos = vec4(warpedPoint, pos.w);
243
+ float value = geometryFunction(warpedPos);
244
+
245
+ // Chaos noise
246
+ float noise = sin(pos.x * 7.0) * cos(pos.y * 11.0) * sin(pos.z * 13.0);
247
+ value += noise * u_chaos;
248
+
249
+ // Intensity from lattice
250
+ float geometryIntensity = 1.0 - clamp(abs(value), 0.0, 1.0);
251
+ geometryIntensity += u_clickIntensity * 0.3;
252
+ float finalIntensity = geometryIntensity * u_intensity;
253
+
254
+ // Audio-reactive hue shift
255
+ float hue = u_hue / 360.0 + value * 0.1 + u_high * 0.08;
256
+
257
+ // Color via sin-wave HSL
258
+ vec3 baseColor = vec3(
259
+ sin(hue * 6.28318 + 0.0) * 0.5 + 0.5,
260
+ sin(hue * 6.28318 + 2.0943) * 0.5 + 0.5,
261
+ sin(hue * 6.28318 + 4.1887) * 0.5 + 0.5
125
262
  );
126
263
 
127
- float alpha = (edge + fill) * u_intensity;
128
- gl_FragColor = vec4(color * alpha, alpha);
264
+ // Saturation control (mix to gray)
265
+ float gray = (baseColor.r + baseColor.g + baseColor.b) / 3.0;
266
+ vec3 color = mix(vec3(gray), baseColor, u_saturation) * finalIntensity;
267
+
268
+ gl_FragColor = vec4(color, finalIntensity);
129
269
  }