@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.
- package/CHANGELOG.md +36 -0
- package/DOCS/AGENT_HARNESS_ARCHITECTURE.md +245 -0
- package/DOCS/ANDROID_DEPLOYMENT.md +59 -0
- package/DOCS/ARCHITECTURE.md +1 -0
- package/DOCS/CI_TESTING.md +2 -0
- package/DOCS/CLI_ONBOARDING.md +3 -1
- package/DOCS/CONTROL_REFERENCE.md +2 -0
- package/DOCS/CROSS_SITE_DESIGN_PATTERNS.md +119 -0
- package/DOCS/ENV_SETUP.md +2 -0
- package/DOCS/EPIC_SCROLL_EVENTS.md +775 -0
- package/DOCS/EXPANSION_DESIGN.md +979 -0
- package/DOCS/EXPANSION_DESIGN_ULTRA.md +389 -0
- package/DOCS/EXPORT_FORMATS.md +2 -0
- package/DOCS/GPU_DISPOSAL_GUIDE.md +2 -0
- package/DOCS/HANDOFF_LANDING_PAGE.md +156 -0
- package/DOCS/HANDOFF_SDK_DEVELOPMENT.md +495 -0
- package/DOCS/LICENSING_TIERS.md +2 -0
- package/DOCS/MASTER_PLAN_2026-01-31.md +4 -2
- package/DOCS/MULTIVIZ_CHOREOGRAPHY_PATTERNS.md +939 -0
- package/DOCS/OBS_SETUP_GUIDE.md +2 -0
- package/DOCS/OPTIMIZATION_PLAN_MATH.md +119 -0
- package/DOCS/PRODUCT_STRATEGY.md +65 -0
- package/DOCS/PROJECT_SETUP.md +2 -0
- package/DOCS/README.md +105 -0
- package/DOCS/REFERENCE_SCROLL_ANALYSIS.md +99 -0
- package/DOCS/RENDERER_LIFECYCLE.md +2 -0
- package/DOCS/REPO_MANIFEST.md +2 -0
- package/DOCS/ROADMAP.md +113 -0
- package/DOCS/SCROLL_TIMELINE_v3.md +271 -0
- package/DOCS/SITE_REFACTOR_PLAN.md +102 -0
- package/DOCS/STATUS.md +26 -0
- package/DOCS/SYSTEM_INVENTORY.md +37 -32
- package/DOCS/TELEMETRY_EXPORTS.md +2 -0
- package/DOCS/VISUAL_ANALYSIS_CLICKERSS.md +87 -0
- package/DOCS/VISUAL_ANALYSIS_FACETAD.md +135 -0
- package/DOCS/VISUAL_ANALYSIS_SIMONE.md +97 -0
- package/DOCS/VISUAL_ANALYSIS_TABLESIDE.md +88 -0
- package/DOCS/WEBGPU_STATUS.md +121 -38
- package/DOCS/XR_BENCHMARKS.md +2 -0
- package/DOCS/archive/BLUEPRINT_EXECUTION_PLAN_2026-01-07.md +1 -0
- package/DOCS/archive/DEV_TRACK_ANALYSIS.md +1 -0
- package/DOCS/archive/DEV_TRACK_PLAN_2026-01-07.md +1 -0
- package/DOCS/archive/SESSION_014_PLAN.md +1 -0
- package/DOCS/archive/SESSION_LOG_2026-01-07.md +1 -0
- package/DOCS/archive/STRATEGIC_BLUEPRINT_2026-01-07.md +1 -0
- package/DOCS/archive/SYSTEM_AUDIT_2026-01-30.md +1 -0
- package/DOCS/archive/WEBGPU_STATUS_2026-02-15_STALE.md +1 -0
- package/DOCS/{DEV_TRACK_SESSION_2026-01-31.md → dev-tracks/DEV_TRACK_SESSION_2026-01-31.md} +3 -1
- package/DOCS/dev-tracks/DEV_TRACK_SESSION_2026-02-06.md +233 -0
- package/DOCS/dev-tracks/DEV_TRACK_SESSION_2026-02-13.md +129 -0
- package/DOCS/dev-tracks/DEV_TRACK_SESSION_2026-02-15.md +144 -0
- package/DOCS/dev-tracks/DEV_TRACK_SESSION_2026-02-16.md +110 -0
- package/DOCS/dev-tracks/PERF_UPGRADE_2026-02-16.md +310 -0
- package/DOCS/dev-tracks/README.md +12 -0
- package/README.md +26 -13
- package/cpp/CMakeLists.txt +236 -0
- package/cpp/bindings/embind.cpp +269 -0
- package/cpp/build.sh +129 -0
- package/cpp/geometry/Crystal.cpp +103 -0
- package/cpp/geometry/Fractal.cpp +136 -0
- package/cpp/geometry/GeometryGenerator.cpp +262 -0
- package/cpp/geometry/KleinBottle.cpp +71 -0
- package/cpp/geometry/Sphere.cpp +134 -0
- package/cpp/geometry/Tesseract.cpp +94 -0
- package/cpp/geometry/Tetrahedron.cpp +83 -0
- package/cpp/geometry/Torus.cpp +65 -0
- package/cpp/geometry/WarpFunctions.cpp +238 -0
- package/cpp/geometry/Wave.cpp +85 -0
- package/cpp/include/vib3_ffi.h +238 -0
- package/cpp/math/Mat4x4.cpp +409 -0
- package/cpp/math/Mat4x4.hpp +209 -0
- package/cpp/math/Projection.cpp +142 -0
- package/cpp/math/Projection.hpp +148 -0
- package/cpp/math/Rotor4D.cpp +322 -0
- package/cpp/math/Rotor4D.hpp +204 -0
- package/cpp/math/Vec4.cpp +303 -0
- package/cpp/math/Vec4.hpp +225 -0
- package/cpp/src/vib3_ffi.cpp +607 -0
- package/cpp/tests/Geometry_test.cpp +213 -0
- package/cpp/tests/Mat4x4_test.cpp +494 -0
- package/cpp/tests/Projection_test.cpp +298 -0
- package/cpp/tests/Rotor4D_test.cpp +423 -0
- package/cpp/tests/Vec4_test.cpp +489 -0
- package/docs/webgpu-live.html +1 -1
- package/package.json +41 -30
- package/src/agent/index.js +1 -3
- package/src/agent/mcp/MCPServer.js +1220 -144
- package/src/agent/mcp/index.js +1 -1
- package/src/agent/mcp/stdio-server.js +264 -0
- package/src/agent/mcp/tools.js +498 -31
- package/src/cli/index.js +431 -47
- package/src/core/CanvasManager.js +97 -204
- package/src/core/ErrorReporter.js +1 -1
- package/src/core/Parameters.js +1 -1
- package/src/core/VIB3Engine.js +93 -4
- package/src/core/VitalitySystem.js +53 -0
- package/src/core/index.js +18 -0
- package/src/core/renderers/FacetedRendererAdapter.js +10 -9
- package/src/core/renderers/HolographicRendererAdapter.js +13 -9
- package/src/core/renderers/QuantumRendererAdapter.js +11 -7
- package/src/creative/AestheticMapper.js +628 -0
- package/src/creative/ChoreographyPlayer.js +481 -0
- package/src/creative/index.js +11 -0
- package/src/experimental/GameLoop.js +72 -0
- package/src/experimental/LatticePhysics.js +100 -0
- package/src/experimental/LiveDirector.js +143 -0
- package/src/experimental/PlayerController4D.js +154 -0
- package/src/experimental/VIB3Actor.js +138 -0
- package/src/experimental/VIB3Compositor.js +117 -0
- package/src/experimental/VIB3Link.js +122 -0
- package/src/experimental/VIB3Orchestrator.js +146 -0
- package/src/experimental/VIB3Universe.js +109 -0
- package/src/experimental/demos/CrystalLabyrinth.js +202 -0
- package/src/export/TradingCardManager.js +3 -4
- package/src/export/index.js +11 -1
- package/src/faceted/FacetedSystem.js +260 -394
- package/src/games/glyph-war/GlyphWarVisualizer.js +641 -0
- package/src/geometry/generators/Crystal.js +2 -2
- package/src/geometry/warp/HypersphereCore.js +53 -24
- package/src/holograms/HolographicVisualizer.js +84 -98
- package/src/holograms/RealHolographicSystem.js +194 -43
- package/src/math/Mat4x4.js +308 -105
- package/src/math/Rotor4D.js +124 -40
- package/src/math/Vec4.js +200 -103
- package/src/math/index.js +7 -7
- package/src/polychora/PolychoraSystem.js +77 -0
- package/src/quantum/QuantumEngine.js +103 -66
- package/src/quantum/QuantumVisualizer.js +31 -22
- package/src/reactivity/index.js +3 -5
- package/src/render/LayerPresetManager.js +372 -0
- package/src/render/LayerReactivityBridge.js +344 -0
- package/src/render/LayerRelationshipGraph.js +610 -0
- package/src/render/MultiCanvasBridge.js +148 -25
- package/src/render/ShaderLoader.js +38 -0
- package/src/render/ShaderProgram.js +4 -4
- package/src/render/UnifiedRenderBridge.js +4 -1
- package/src/render/backends/WebGPUBackend.js +8 -4
- package/src/render/index.js +27 -2
- package/src/scene/Node4D.js +74 -24
- package/src/scene/index.js +4 -4
- package/src/shaders/common/geometry24.glsl +65 -0
- package/src/shaders/common/geometry24.wgsl +54 -0
- package/src/shaders/common/rotation4d.glsl +4 -4
- package/src/shaders/common/rotation4d.wgsl +2 -2
- package/src/shaders/common/uniforms.wgsl +15 -8
- package/src/shaders/faceted/faceted.frag.glsl +220 -80
- package/src/shaders/faceted/faceted.frag.wgsl +144 -90
- package/src/shaders/holographic/holographic.frag.glsl +28 -9
- package/src/shaders/holographic/holographic.frag.wgsl +112 -41
- package/src/shaders/quantum/quantum.frag.glsl +1 -0
- package/src/shaders/quantum/quantum.frag.wgsl +6 -4
- package/src/testing/ParallelTestFramework.js +2 -2
- package/src/ui/adaptive/renderers/webgpu/WebGPURenderer.ts +2 -2
- package/src/viewer/GalleryUI.js +17 -0
- package/src/viewer/ViewerPortal.js +2 -2
- package/src/viewer/index.js +1 -1
- package/tools/headless-renderer.js +258 -0
- package/tools/shader-sync-verify.js +14 -8
- package/tools/site-analysis/all-reports.json +32 -0
- package/tools/site-analysis/combined-analysis.md +50 -0
- package/tools/site-analyzer.mjs +779 -0
- package/tools/visual-catalog/capture.js +276 -0
- package/tools/visual-catalog/composite.js +138 -0
- package/types/adaptive-sdk.d.ts +204 -5
- package/types/agent/cli.d.ts +78 -0
- package/types/agent/index.d.ts +18 -0
- package/types/agent/mcp.d.ts +87 -0
- package/types/agent/telemetry.d.ts +190 -0
- package/types/core/VIB3Engine.d.ts +26 -0
- package/types/core/index.d.ts +261 -0
- package/types/creative/AestheticMapper.d.ts +72 -0
- package/types/creative/ChoreographyPlayer.d.ts +96 -0
- package/types/creative/index.d.ts +17 -0
- package/types/export/index.d.ts +243 -0
- package/types/geometry/index.d.ts +164 -0
- package/types/math/index.d.ts +214 -0
- package/types/render/LayerPresetManager.d.ts +78 -0
- package/types/render/LayerReactivityBridge.d.ts +85 -0
- package/types/render/LayerRelationshipGraph.d.ts +174 -0
- package/types/render/index.d.ts +3 -0
- package/types/scene/index.d.ts +204 -0
- package/types/systems/index.d.ts +244 -0
- package/types/variations/index.d.ts +62 -0
- package/types/viewer/index.d.ts +225 -0
- package/DOCS/BLUEPRINT_EXECUTION_PLAN_2026-01-07.md +0 -34
- package/DOCS/DEV_TRACK_ANALYSIS.md +0 -77
- package/DOCS/DEV_TRACK_PLAN_2026-01-07.md +0 -42
- package/DOCS/SESSION_014_PLAN.md +0 -195
- package/DOCS/SESSION_LOG_2026-01-07.md +0 -56
- package/DOCS/STRATEGIC_BLUEPRINT_2026-01-07.md +0 -72
- package/DOCS/SYSTEM_AUDIT_2026-01-30.md +0 -738
- /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,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,
|
|
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,
|
|
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
|
|
13
|
+
// Geometry selection 0-23 (index 4)
|
|
11
14
|
geometry: f32,
|
|
12
15
|
|
|
13
|
-
// 6D Rotation (
|
|
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 (
|
|
41
|
+
// Layer parameters (indices 24-31)
|
|
39
42
|
layerScale: f32,
|
|
40
43
|
layerOpacity: f32,
|
|
41
44
|
_pad1: f32,
|
|
42
|
-
|
|
45
|
+
layerColorR: f32,
|
|
46
|
+
layerColorG: f32,
|
|
47
|
+
layerColorB: f32,
|
|
43
48
|
densityMult: f32,
|
|
44
49
|
speedMult: f32,
|
|
45
|
-
|
|
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
|
|
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
|
-
|
|
26
|
-
|
|
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
|
|
31
|
-
float c = cos(
|
|
32
|
-
return mat4(c, 0,
|
|
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
|
|
35
|
-
float c = cos(
|
|
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
|
|
39
|
-
float c = cos(
|
|
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
|
|
43
|
-
float c = cos(
|
|
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
|
|
47
|
-
float c = cos(
|
|
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
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
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
|
-
//
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
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
|
-
|
|
88
|
-
|
|
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
|
-
|
|
92
|
-
float
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
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
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
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
|
-
//
|
|
211
|
+
// ── Main ──
|
|
212
|
+
|
|
107
213
|
void main() {
|
|
108
|
-
vec2 uv = (gl_FragCoord.xy -
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
pos =
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
float
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
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
|
-
|
|
128
|
-
|
|
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
|
}
|