@vib3code/sdk 2.0.1 → 2.0.3-canary.91a95f3

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 (96) hide show
  1. package/CHANGELOG.md +36 -0
  2. package/DOCS/AGENT_HARNESS_ARCHITECTURE.md +243 -0
  3. package/DOCS/CLI_ONBOARDING.md +1 -1
  4. package/DOCS/CROSS_SITE_DESIGN_PATTERNS.md +117 -0
  5. package/DOCS/EPIC_SCROLL_EVENTS.md +773 -0
  6. package/DOCS/HANDOFF_LANDING_PAGE.md +154 -0
  7. package/DOCS/HANDOFF_SDK_DEVELOPMENT.md +493 -0
  8. package/DOCS/MULTIVIZ_CHOREOGRAPHY_PATTERNS.md +937 -0
  9. package/DOCS/PRODUCT_STRATEGY.md +63 -0
  10. package/DOCS/README.md +103 -0
  11. package/DOCS/REFERENCE_SCROLL_ANALYSIS.md +97 -0
  12. package/DOCS/ROADMAP.md +111 -0
  13. package/DOCS/SCROLL_TIMELINE_v3.md +269 -0
  14. package/DOCS/SITE_REFACTOR_PLAN.md +100 -0
  15. package/DOCS/STATUS.md +24 -0
  16. package/DOCS/SYSTEM_INVENTORY.md +33 -30
  17. package/DOCS/VISUAL_ANALYSIS_CLICKERSS.md +85 -0
  18. package/DOCS/VISUAL_ANALYSIS_FACETAD.md +133 -0
  19. package/DOCS/VISUAL_ANALYSIS_SIMONE.md +95 -0
  20. package/DOCS/VISUAL_ANALYSIS_TABLESIDE.md +86 -0
  21. package/DOCS/{BLUEPRINT_EXECUTION_PLAN_2026-01-07.md → archive/BLUEPRINT_EXECUTION_PLAN_2026-01-07.md} +1 -1
  22. package/DOCS/{DEV_TRACK_ANALYSIS.md → archive/DEV_TRACK_ANALYSIS.md} +3 -0
  23. package/DOCS/{SYSTEM_AUDIT_2026-01-30.md → archive/SYSTEM_AUDIT_2026-01-30.md} +3 -0
  24. package/DOCS/{DEV_TRACK_SESSION_2026-01-31.md → dev-tracks/DEV_TRACK_SESSION_2026-01-31.md} +1 -1
  25. package/DOCS/dev-tracks/DEV_TRACK_SESSION_2026-02-06.md +231 -0
  26. package/DOCS/dev-tracks/DEV_TRACK_SESSION_2026-02-13.md +114 -0
  27. package/DOCS/dev-tracks/README.md +10 -0
  28. package/README.md +26 -13
  29. package/cpp/CMakeLists.txt +236 -0
  30. package/cpp/bindings/embind.cpp +269 -0
  31. package/cpp/build.sh +129 -0
  32. package/cpp/geometry/Crystal.cpp +103 -0
  33. package/cpp/geometry/Fractal.cpp +136 -0
  34. package/cpp/geometry/GeometryGenerator.cpp +262 -0
  35. package/cpp/geometry/KleinBottle.cpp +71 -0
  36. package/cpp/geometry/Sphere.cpp +134 -0
  37. package/cpp/geometry/Tesseract.cpp +94 -0
  38. package/cpp/geometry/Tetrahedron.cpp +83 -0
  39. package/cpp/geometry/Torus.cpp +65 -0
  40. package/cpp/geometry/WarpFunctions.cpp +238 -0
  41. package/cpp/geometry/Wave.cpp +85 -0
  42. package/cpp/include/vib3_ffi.h +238 -0
  43. package/cpp/math/Mat4x4.cpp +409 -0
  44. package/cpp/math/Mat4x4.hpp +209 -0
  45. package/cpp/math/Projection.cpp +142 -0
  46. package/cpp/math/Projection.hpp +148 -0
  47. package/cpp/math/Rotor4D.cpp +322 -0
  48. package/cpp/math/Rotor4D.hpp +204 -0
  49. package/cpp/math/Vec4.cpp +303 -0
  50. package/cpp/math/Vec4.hpp +225 -0
  51. package/cpp/src/vib3_ffi.cpp +607 -0
  52. package/cpp/tests/Geometry_test.cpp +213 -0
  53. package/cpp/tests/Mat4x4_test.cpp +494 -0
  54. package/cpp/tests/Projection_test.cpp +298 -0
  55. package/cpp/tests/Rotor4D_test.cpp +423 -0
  56. package/cpp/tests/Vec4_test.cpp +489 -0
  57. package/package.json +31 -27
  58. package/src/agent/mcp/MCPServer.js +722 -0
  59. package/src/agent/mcp/stdio-server.js +264 -0
  60. package/src/agent/mcp/tools.js +367 -0
  61. package/src/cli/index.js +0 -0
  62. package/src/core/CanvasManager.js +97 -204
  63. package/src/core/ErrorReporter.js +1 -1
  64. package/src/core/Parameters.js +1 -1
  65. package/src/core/VIB3Engine.js +38 -1
  66. package/src/core/VitalitySystem.js +53 -0
  67. package/src/core/renderers/HolographicRendererAdapter.js +2 -2
  68. package/src/creative/AestheticMapper.js +628 -0
  69. package/src/creative/ChoreographyPlayer.js +481 -0
  70. package/src/export/TradingCardManager.js +3 -4
  71. package/src/faceted/FacetedSystem.js +237 -388
  72. package/src/holograms/HolographicVisualizer.js +29 -12
  73. package/src/holograms/RealHolographicSystem.js +68 -12
  74. package/src/polychora/PolychoraSystem.js +77 -0
  75. package/src/quantum/QuantumEngine.js +103 -66
  76. package/src/quantum/QuantumVisualizer.js +7 -2
  77. package/src/render/UnifiedRenderBridge.js +3 -0
  78. package/src/shaders/faceted/faceted.frag.glsl +220 -80
  79. package/src/shaders/faceted/faceted.frag.wgsl +138 -97
  80. package/src/shaders/holographic/holographic.frag.glsl +28 -9
  81. package/src/shaders/holographic/holographic.frag.wgsl +107 -38
  82. package/src/shaders/quantum/quantum.frag.glsl +1 -0
  83. package/src/shaders/quantum/quantum.frag.wgsl +1 -1
  84. package/src/viewer/index.js +1 -1
  85. package/tools/headless-renderer.js +258 -0
  86. package/tools/shader-sync-verify.js +8 -4
  87. package/tools/site-analysis/all-reports.json +32 -0
  88. package/tools/site-analysis/combined-analysis.md +50 -0
  89. package/tools/site-analyzer.mjs +779 -0
  90. package/tools/visual-catalog/capture.js +276 -0
  91. package/tools/visual-catalog/composite.js +138 -0
  92. /package/DOCS/{DEV_TRACK_PLAN_2026-01-07.md → archive/DEV_TRACK_PLAN_2026-01-07.md} +0 -0
  93. /package/DOCS/{SESSION_014_PLAN.md → archive/SESSION_014_PLAN.md} +0 -0
  94. /package/DOCS/{SESSION_LOG_2026-01-07.md → archive/SESSION_LOG_2026-01-07.md} +0 -0
  95. /package/DOCS/{STRATEGIC_BLUEPRINT_2026-01-07.md → archive/STRATEGIC_BLUEPRINT_2026-01-07.md} +0 -0
  96. /package/src/viewer/{ReactivityManager.js → ViewerInputHandler.js} +0 -0
@@ -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
  }
@@ -4,7 +4,7 @@
4
4
 
5
5
  struct VIB3Uniforms {
6
6
  time: f32,
7
- _pad0: f32,
7
+ speed: f32,
8
8
  resolution: vec2<f32>,
9
9
  geometry: f32,
10
10
  rot4dXY: f32,
@@ -17,148 +17,189 @@ struct VIB3Uniforms {
17
17
  gridDensity: f32,
18
18
  morphFactor: f32,
19
19
  chaos: f32,
20
- speed: f32,
21
20
  hue: f32,
22
21
  intensity: f32,
23
22
  saturation: f32,
24
23
  mouseIntensity: f32,
25
24
  clickIntensity: f32,
25
+ roleIntensity: f32,
26
26
  bass: f32,
27
27
  mid: f32,
28
28
  high: f32,
29
- layerScale: f32,
30
- layerOpacity: f32,
31
- _pad1: f32,
32
- layerColor: vec3<f32>,
33
- densityMult: f32,
34
- speedMult: f32,
35
- _pad2: vec3<f32>,
29
+ breath: f32,
30
+ mouse: vec2<f32>,
31
+ _pad1: vec2<f32>,
36
32
  };
37
33
 
38
34
  @group(0) @binding(0) var<uniform> u: VIB3Uniforms;
39
35
 
40
- struct VertexOutput {
41
- @builtin(position) position: vec4<f32>,
42
- @location(0) uv: vec2<f32>,
43
- };
44
-
45
- // ========== 6D Rotation ==========
46
- fn rotateXY(angle: f32) -> mat4x4<f32> {
47
- let c = cos(angle); let s = sin(angle);
36
+ fn rotateXY_w(theta: f32) -> mat4x4<f32> {
37
+ let c = cos(theta); let s = sin(theta);
48
38
  return mat4x4<f32>(
49
39
  vec4<f32>(c, -s, 0.0, 0.0), vec4<f32>(s, c, 0.0, 0.0),
50
40
  vec4<f32>(0.0, 0.0, 1.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 1.0));
51
41
  }
52
- fn rotateXZ(angle: f32) -> mat4x4<f32> {
53
- let c = cos(angle); let s = sin(angle);
42
+ fn rotateXZ_w(theta: f32) -> mat4x4<f32> {
43
+ let c = cos(theta); let s = sin(theta);
54
44
  return mat4x4<f32>(
55
- vec4<f32>(c, 0.0, -s, 0.0), vec4<f32>(0.0, 1.0, 0.0, 0.0),
56
- vec4<f32>(s, 0.0, c, 0.0), vec4<f32>(0.0, 0.0, 0.0, 1.0));
45
+ vec4<f32>(c, 0.0, s, 0.0), vec4<f32>(0.0, 1.0, 0.0, 0.0),
46
+ vec4<f32>(-s, 0.0, c, 0.0), vec4<f32>(0.0, 0.0, 0.0, 1.0));
57
47
  }
58
- fn rotateYZ(angle: f32) -> mat4x4<f32> {
59
- let c = cos(angle); let s = sin(angle);
48
+ fn rotateYZ_w(theta: f32) -> mat4x4<f32> {
49
+ let c = cos(theta); let s = sin(theta);
60
50
  return mat4x4<f32>(
61
51
  vec4<f32>(1.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, c, -s, 0.0),
62
52
  vec4<f32>(0.0, s, c, 0.0), vec4<f32>(0.0, 0.0, 0.0, 1.0));
63
53
  }
64
- fn rotateXW(angle: f32) -> mat4x4<f32> {
65
- let c = cos(angle); let s = sin(angle);
54
+ fn rotateXW_w(theta: f32) -> mat4x4<f32> {
55
+ let c = cos(theta); let s = sin(theta);
66
56
  return mat4x4<f32>(
67
57
  vec4<f32>(c, 0.0, 0.0, -s), vec4<f32>(0.0, 1.0, 0.0, 0.0),
68
58
  vec4<f32>(0.0, 0.0, 1.0, 0.0), vec4<f32>(s, 0.0, 0.0, c));
69
59
  }
70
- fn rotateYW(angle: f32) -> mat4x4<f32> {
71
- let c = cos(angle); let s = sin(angle);
60
+ fn rotateYW_w(theta: f32) -> mat4x4<f32> {
61
+ let c = cos(theta); let s = sin(theta);
72
62
  return mat4x4<f32>(
73
63
  vec4<f32>(1.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, c, 0.0, -s),
74
64
  vec4<f32>(0.0, 0.0, 1.0, 0.0), vec4<f32>(0.0, s, 0.0, c));
75
65
  }
76
- fn rotateZW(angle: f32) -> mat4x4<f32> {
77
- let c = cos(angle); let s = sin(angle);
66
+ fn rotateZW_w(theta: f32) -> mat4x4<f32> {
67
+ let c = cos(theta); let s = sin(theta);
78
68
  return mat4x4<f32>(
79
69
  vec4<f32>(1.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 1.0, 0.0, 0.0),
80
70
  vec4<f32>(0.0, 0.0, c, -s), vec4<f32>(0.0, 0.0, s, c));
81
71
  }
82
72
 
83
- fn apply6DRot(pos: vec4<f32>) -> vec4<f32> {
84
- var p = pos;
85
- p = rotateXY(u.rot4dXY + u.time * 0.05) * p;
86
- p = rotateXZ(u.rot4dXZ + u.time * 0.06) * p;
87
- p = rotateYZ(u.rot4dYZ + u.time * 0.04) * p;
88
- p = rotateXW(u.rot4dXW + u.time * 0.07) * p;
89
- p = rotateYW(u.rot4dYW + u.time * 0.08) * p;
90
- p = rotateZW(u.rot4dZW + u.time * 0.09) * p;
91
- return p;
73
+ fn project4Dto3D_w(p: vec4<f32>) -> vec3<f32> {
74
+ let w = 2.5 / (2.5 + p.w);
75
+ return vec3<f32>(p.x * w, p.y * w, p.z * w);
92
76
  }
93
77
 
94
- // ========== 24 Geometry SDFs ==========
95
- fn baseGeom(p: vec4<f32>, t: f32) -> f32 {
96
- if (t < 0.5) {
97
- return max(max(max(abs(p.x + p.y) - p.z, abs(p.x - p.y) - p.z),
98
- abs(p.x + p.y) + p.z), abs(p.x - p.y) + p.z) / sqrt(3.0);
99
- } else if (t < 1.5) {
100
- let q = abs(p) - vec4<f32>(0.8);
101
- return length(max(q, vec4<f32>(0.0))) + min(max(max(max(q.x, q.y), q.z), q.w), 0.0);
102
- } else if (t < 2.5) {
103
- return length(p) - 1.0;
104
- } else if (t < 3.5) {
105
- let t2 = vec2<f32>(length(p.xy) - 0.8, p.z);
106
- return length(t2) - 0.3;
107
- } else if (t < 4.5) {
108
- let r = length(p.xy);
109
- return abs(r - 0.7) - 0.2 + sin(atan2(p.y, p.x) * 3.0 + p.z * 5.0) * 0.1;
110
- } else if (t < 5.5) {
111
- return length(p) - 0.8 + sin(p.x * 5.0) * sin(p.y * 5.0) * sin(p.z * 5.0) * 0.2;
112
- } else if (t < 6.5) {
113
- return abs(p.z - sin(p.x * 5.0 + u.time) * cos(p.y * 5.0 + u.time) * 0.3) - 0.1;
114
- } else {
115
- let q = abs(p);
116
- return max(max(max(q.x, q.y), q.z), q.w) - 0.8;
117
- }
78
+ fn warpHypersphereCore_w(p: vec3<f32>, geomIdx: i32) -> vec3<f32> {
79
+ let radius = length(p);
80
+ let morphBlend = clamp(u.morphFactor * 0.6 + (u.dimension - 3.0) * 0.25, 0.0, 2.0);
81
+ let w = sin(radius * (1.3 + f32(geomIdx) * 0.12) + u.time * 0.0008 * u.speed)
82
+ * (0.4 + morphBlend * 0.45);
83
+ var p4d = vec4<f32>(p * (1.0 + morphBlend * 0.2), w);
84
+ p4d = rotateXY_w(u.rot4dXY) * p4d;
85
+ p4d = rotateXZ_w(u.rot4dXZ) * p4d;
86
+ p4d = rotateYZ_w(u.rot4dYZ) * p4d;
87
+ p4d = rotateXW_w(u.rot4dXW) * p4d;
88
+ p4d = rotateYW_w(u.rot4dYW) * p4d;
89
+ p4d = rotateZW_w(u.rot4dZW) * p4d;
90
+ let proj = project4Dto3D_w(p4d);
91
+ return mix(p, proj, clamp(0.45 + morphBlend * 0.35, 0.0, 1.0));
118
92
  }
119
93
 
120
- fn hypersphereCore(p: vec4<f32>, bt: f32) -> f32 {
121
- return max(baseGeom(p, bt), length(p) - 1.2);
94
+ fn warpHypertetraCore_w(p: vec3<f32>, geomIdx: i32) -> vec3<f32> {
95
+ let c1 = normalize(vec3<f32>(1.0, 1.0, 1.0));
96
+ let c2 = normalize(vec3<f32>(-1.0, -1.0, 1.0));
97
+ let c3 = normalize(vec3<f32>(-1.0, 1.0, -1.0));
98
+ let c4 = normalize(vec3<f32>(1.0, -1.0, -1.0));
99
+ let morphBlend = clamp(u.morphFactor * 0.8 + (u.dimension - 3.0) * 0.2, 0.0, 2.0);
100
+ let basisMix = dot(p, c1) * 0.14 + dot(p, c2) * 0.1 + dot(p, c3) * 0.08;
101
+ let w = sin(basisMix * 5.5 + u.time * 0.0009 * u.speed)
102
+ * cos(dot(p, c4) * 4.2 - u.time * 0.0007 * u.speed)
103
+ * (0.5 + morphBlend * 0.4);
104
+ let offset = vec3<f32>(dot(p, c1), dot(p, c2), dot(p, c3)) * 0.1 * morphBlend;
105
+ var p4d = vec4<f32>(p + offset, w);
106
+ p4d = rotateXY_w(u.rot4dXY) * p4d;
107
+ p4d = rotateXZ_w(u.rot4dXZ) * p4d;
108
+ p4d = rotateYZ_w(u.rot4dYZ) * p4d;
109
+ p4d = rotateXW_w(u.rot4dXW) * p4d;
110
+ p4d = rotateYW_w(u.rot4dYW) * p4d;
111
+ p4d = rotateZW_w(u.rot4dZW) * p4d;
112
+ let proj = project4Dto3D_w(p4d);
113
+ let planeInf = min(min(abs(dot(p, c1)), abs(dot(p, c2))),
114
+ min(abs(dot(p, c3)), abs(dot(p, c4))));
115
+ let blended = mix(p, proj, clamp(0.45 + morphBlend * 0.35, 0.0, 1.0));
116
+ return mix(blended, blended * (1.0 - planeInf * 0.55), 0.2 + morphBlend * 0.2);
122
117
  }
123
118
 
124
- fn hypertetraCore(p: vec4<f32>, bt: f32) -> f32 {
125
- let tf = max(max(max(
126
- abs(p.x + p.y) - p.z - p.w,
127
- abs(p.x - p.y) - p.z + p.w),
128
- abs(p.x + p.y) + p.z - p.w),
129
- abs(p.x - p.y) + p.z + p.w) / sqrt(4.0);
130
- return max(baseGeom(p, bt), tf);
119
+ fn applyCoreWarp_w(p: vec3<f32>, geomType: f32, mouseDelta: vec2<f32>) -> vec3<f32> {
120
+ let coreFloat = floor(geomType / 8.0);
121
+ let coreIndex = i32(clamp(coreFloat, 0.0, 2.0));
122
+ let baseFloat = geomType - floor(geomType / 8.0) * 8.0;
123
+ let geomIdx = i32(clamp(floor(baseFloat + 0.5), 0.0, 7.0));
124
+ if (coreIndex == 1) { return warpHypersphereCore_w(p, geomIdx); }
125
+ if (coreIndex == 2) { return warpHypertetraCore_w(p, geomIdx); }
126
+ return p;
131
127
  }
132
128
 
133
- fn geom(p: vec4<f32>, t: f32) -> f32 {
134
- if (t < 8.0) { return baseGeom(p, t); }
135
- else if (t < 16.0) { return hypersphereCore(p, t - 8.0); }
136
- else { return hypertetraCore(p, t - 16.0); }
129
+ fn geometryFunction_w(p: vec4<f32>) -> f32 {
130
+ let baseFloat = u.geometry - floor(u.geometry / 8.0) * 8.0;
131
+ let gt = i32(clamp(floor(baseFloat + 0.5), 0.0, 7.0));
132
+ let d = u.gridDensity * 0.08;
133
+ if (gt == 0) {
134
+ let pos = fract(p * d); let dist = min(pos, 1.0 - pos);
135
+ return min(min(dist.x, dist.y), min(dist.z, dist.w)) * u.morphFactor;
136
+ } else if (gt == 1) {
137
+ let pos = fract(p * d); let dist = min(pos, 1.0 - pos);
138
+ return min(min(dist.x, dist.y), min(dist.z, dist.w)) * u.morphFactor;
139
+ } else if (gt == 2) {
140
+ let r = length(p); let sph = abs(fract(r * d) - 0.5) * 2.0;
141
+ let harm = sin(atan2(p.y, p.x) * 3.0) * 0.2;
142
+ return (sph + harm) * u.morphFactor;
143
+ } else if (gt == 3) {
144
+ let r1 = length(p.xy) - 2.0; let tor = length(vec2<f32>(r1, p.z)) - 0.8;
145
+ let lat = sin(p.x * d) * sin(p.y * d);
146
+ return (tor + lat * 0.3) * u.morphFactor;
147
+ } else if (gt == 4) {
148
+ let ua = atan2(p.y, p.x); let va = atan2(p.w, p.z);
149
+ let dist = length(p) - 2.0; let lat = sin(ua * d) * sin(va * d);
150
+ return (dist + lat * 0.4) * u.morphFactor;
151
+ } else if (gt == 5) {
152
+ var pos = fract(p * d); pos = abs(pos * 2.0 - 1.0);
153
+ return length(max(abs(pos) - 1.0, vec4<f32>(0.0))) * u.morphFactor;
154
+ } else if (gt == 6) {
155
+ let t = u.time * 0.001 * u.speed;
156
+ return sin(p.x * d + t) * sin(p.y * d + t * 1.3) * sin(p.z * d * 0.8 + t * 0.7) * u.morphFactor;
157
+ } else {
158
+ let pos = fract(p * d) - 0.5;
159
+ return max(max(abs(pos.x), abs(pos.y)), max(abs(pos.z), abs(pos.w))) * u.morphFactor;
160
+ }
137
161
  }
138
162
 
139
- // ========== Main Fragment ==========
163
+ struct VertexOutput {
164
+ @builtin(position) position: vec4<f32>,
165
+ @location(0) uv: vec2<f32>,
166
+ };
167
+
140
168
  @fragment
141
169
  fn main(input: VertexOutput) -> @location(0) vec4<f32> {
142
170
  let fragCoord = input.position.xy;
143
- var uv2 = (fragCoord - 0.5 * u.resolution) / min(u.resolution.x, u.resolution.y);
144
- uv2 *= 2.0 / u.gridDensity;
145
-
146
- var pos = vec4<f32>(uv2, sin(u.time * 0.3) * 0.5, cos(u.time * 0.2) * 0.5);
147
- pos = apply6DRot(pos);
148
- pos *= u.morphFactor;
149
- pos += vec4<f32>(sin(u.time * 0.1), cos(u.time * 0.15), sin(u.time * 0.12), cos(u.time * 0.18)) * u.chaos;
150
-
151
- let dist = geom(pos, u.geometry);
152
- let edge = smoothstep(0.02, 0.0, abs(dist));
153
- let fill = smoothstep(0.1, 0.0, dist) * 0.3;
154
-
155
- let hueVal = u.hue / 360.0 + dist * 0.2 + u.time * 0.05;
156
- let color = vec3<f32>(
157
- 0.5 + 0.5 * cos(hueVal * 6.28),
158
- 0.5 + 0.5 * cos((hueVal + 0.33) * 6.28),
159
- 0.5 + 0.5 * cos((hueVal + 0.67) * 6.28)
160
- );
161
-
162
- let alpha = (edge + fill) * u.intensity;
163
- return vec4<f32>(color * alpha, alpha);
171
+ let uv2 = (fragCoord - u.resolution * 0.5) / min(u.resolution.x, u.resolution.y);
172
+ let timeSpeed = u.time * 0.0001 * u.speed;
173
+
174
+ var pos = vec4<f32>(uv2 * 3.0, sin(timeSpeed * 3.0), cos(timeSpeed * 2.0));
175
+ pos = vec4<f32>(pos.xy + (vec2<f32>(0.5, 0.5) - 0.5) * u.mouseIntensity * 2.0, pos.z, pos.w);
176
+
177
+ pos = rotateXY_w(u.rot4dXY) * pos;
178
+ pos = rotateXZ_w(u.rot4dXZ) * pos;
179
+ pos = rotateYZ_w(u.rot4dYZ) * pos;
180
+ pos = rotateXW_w(u.rot4dXW) * pos;
181
+ pos = rotateYW_w(u.rot4dYW) * pos;
182
+ pos = rotateZW_w(u.rot4dZW) * pos;
183
+
184
+ let basePoint = project4Dto3D_w(pos);
185
+ let warpedPoint = applyCoreWarp_w(basePoint, u.geometry, vec2<f32>(0.0, 0.0));
186
+ let warpedPos = vec4<f32>(warpedPoint, pos.w);
187
+ var value = geometryFunction_w(warpedPos);
188
+
189
+ let noise = sin(pos.x * 7.0) * cos(pos.y * 11.0) * sin(pos.z * 13.0);
190
+ value += noise * u.chaos;
191
+
192
+ var geomIntensity = 1.0 - clamp(abs(value), 0.0, 1.0);
193
+ geomIntensity += u.clickIntensity * 0.3;
194
+ let finalIntensity = geomIntensity * u.intensity;
195
+
196
+ let hueVal = u.hue / 360.0 + value * 0.1 + u.high * 0.08;
197
+ let baseColor = vec3<f32>(
198
+ sin(hueVal * 6.28318 + 0.0) * 0.5 + 0.5,
199
+ sin(hueVal * 6.28318 + 2.0943) * 0.5 + 0.5,
200
+ sin(hueVal * 6.28318 + 4.1887) * 0.5 + 0.5);
201
+ let gray = (baseColor.r + baseColor.g + baseColor.b) / 3.0;
202
+ let color = mix(vec3<f32>(gray), baseColor, u.saturation) * finalIntensity;
203
+
204
+ return vec4<f32>(color, finalIntensity);
164
205
  }