@vib3code/sdk 2.0.1
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 +118 -0
- package/DOCS/BLUEPRINT_EXECUTION_PLAN_2026-01-07.md +34 -0
- package/DOCS/CI_TESTING.md +38 -0
- package/DOCS/CLI_ONBOARDING.md +75 -0
- package/DOCS/CONTROL_REFERENCE.md +64 -0
- package/DOCS/DEV_TRACK_ANALYSIS.md +77 -0
- package/DOCS/DEV_TRACK_PLAN_2026-01-07.md +42 -0
- package/DOCS/DEV_TRACK_SESSION_2026-01-31.md +220 -0
- package/DOCS/ENV_SETUP.md +189 -0
- package/DOCS/EXPORT_FORMATS.md +417 -0
- package/DOCS/GPU_DISPOSAL_GUIDE.md +21 -0
- package/DOCS/LICENSING_TIERS.md +275 -0
- package/DOCS/MASTER_PLAN_2026-01-31.md +570 -0
- package/DOCS/OBS_SETUP_GUIDE.md +98 -0
- package/DOCS/PROJECT_SETUP.md +66 -0
- package/DOCS/RENDERER_LIFECYCLE.md +40 -0
- package/DOCS/REPO_MANIFEST.md +121 -0
- package/DOCS/SESSION_014_PLAN.md +195 -0
- package/DOCS/SESSION_LOG_2026-01-07.md +56 -0
- package/DOCS/STRATEGIC_BLUEPRINT_2026-01-07.md +72 -0
- package/DOCS/SYSTEM_AUDIT_2026-01-30.md +738 -0
- package/DOCS/SYSTEM_INVENTORY.md +520 -0
- package/DOCS/TELEMETRY_EXPORTS.md +34 -0
- package/DOCS/WEBGPU_STATUS.md +38 -0
- package/DOCS/XR_BENCHMARKS.md +608 -0
- package/LICENSE +21 -0
- package/README.md +426 -0
- package/docs/.nojekyll +0 -0
- package/docs/01-dissolution_of_euclidean_hegemony.html +346 -0
- package/docs/02-hyperspatial_ego_death.html +346 -0
- package/docs/03-post_cartesian_sublime.html +346 -0
- package/docs/04-crystalline_void_meditation.html +346 -0
- package/docs/05-quantum_decoherence_ballet.html +346 -0
- package/docs/06-dissolution_of_euclidean_hegemony.html +346 -0
- package/docs/07-hyperspatial_ego_death.html +346 -0
- package/docs/08-post_cartesian_sublime.html +346 -0
- package/docs/09-crystalline_void_meditation.html +346 -0
- package/docs/10-quantum_decoherence_ballet.html +346 -0
- package/docs/11-dissolution_of_euclidean_hegemony.html +346 -0
- package/docs/12-hyperspatial_ego_death.html +346 -0
- package/docs/13-post_cartesian_sublime.html +346 -0
- package/docs/index.html +794 -0
- package/docs/test-hub.html +441 -0
- package/docs/url-state.js +102 -0
- package/docs/vib3-exports/01-quantum-quantum-tetrahedron-lattice.html +489 -0
- package/docs/vib3-exports/02-quantum-quantum-hypersphere-matrix.html +489 -0
- package/docs/vib3-exports/03-quantum-quantum-hypertetra-fractal.html +489 -0
- package/docs/vib3-exports/04-faceted-faceted-crystal-structure.html +407 -0
- package/docs/vib3-exports/05-faceted-faceted-klein-bottle.html +407 -0
- package/docs/vib3-exports/06-faceted-faceted-hypertetra-torus.html +407 -0
- package/docs/vib3-exports/07-holographic-holographic-wave-field.html +457 -0
- package/docs/vib3-exports/08-holographic-holographic-hypersphere-sphere.html +457 -0
- package/docs/vib3-exports/09-holographic-holographic-hypertetra-crystal.html +457 -0
- package/docs/vib3-exports/index.html +238 -0
- package/docs/webgpu-live.html +702 -0
- package/package.json +367 -0
- package/src/advanced/AIPresetGenerator.js +777 -0
- package/src/advanced/MIDIController.js +703 -0
- package/src/advanced/OffscreenWorker.js +1051 -0
- package/src/advanced/WebGPUCompute.js +1051 -0
- package/src/advanced/WebXRRenderer.js +680 -0
- package/src/agent/cli/AgentCLI.js +615 -0
- package/src/agent/cli/index.js +14 -0
- package/src/agent/index.js +73 -0
- package/src/agent/mcp/MCPServer.js +950 -0
- package/src/agent/mcp/index.js +9 -0
- package/src/agent/mcp/tools.js +548 -0
- package/src/agent/telemetry/EventStream.js +669 -0
- package/src/agent/telemetry/Instrumentation.js +618 -0
- package/src/agent/telemetry/TelemetryExporters.js +427 -0
- package/src/agent/telemetry/TelemetryService.js +464 -0
- package/src/agent/telemetry/index.js +52 -0
- package/src/benchmarks/BenchmarkRunner.js +381 -0
- package/src/benchmarks/MetricsCollector.js +299 -0
- package/src/benchmarks/index.js +9 -0
- package/src/benchmarks/scenes.js +259 -0
- package/src/cli/index.js +675 -0
- package/src/config/ApiConfig.js +88 -0
- package/src/core/CanvasManager.js +217 -0
- package/src/core/ErrorReporter.js +117 -0
- package/src/core/ParameterMapper.js +333 -0
- package/src/core/Parameters.js +396 -0
- package/src/core/RendererContracts.js +200 -0
- package/src/core/UnifiedResourceManager.js +370 -0
- package/src/core/VIB3Engine.js +636 -0
- package/src/core/renderers/FacetedRendererAdapter.js +32 -0
- package/src/core/renderers/HolographicRendererAdapter.js +29 -0
- package/src/core/renderers/QuantumRendererAdapter.js +29 -0
- package/src/core/renderers/RendererLifecycleManager.js +63 -0
- package/src/creative/ColorPresetsSystem.js +980 -0
- package/src/creative/ParameterTimeline.js +1061 -0
- package/src/creative/PostProcessingPipeline.js +1113 -0
- package/src/creative/TransitionAnimator.js +683 -0
- package/src/export/CSSExporter.js +226 -0
- package/src/export/CardGeneratorBase.js +279 -0
- package/src/export/ExportManager.js +580 -0
- package/src/export/FacetedCardGenerator.js +279 -0
- package/src/export/HolographicCardGenerator.js +543 -0
- package/src/export/LottieExporter.js +552 -0
- package/src/export/QuantumCardGenerator.js +315 -0
- package/src/export/SVGExporter.js +519 -0
- package/src/export/ShaderExporter.js +903 -0
- package/src/export/TradingCardGenerator.js +3055 -0
- package/src/export/TradingCardManager.js +181 -0
- package/src/export/VIB3PackageExporter.js +559 -0
- package/src/export/index.js +14 -0
- package/src/export/systems/TradingCardSystemFaceted.js +494 -0
- package/src/export/systems/TradingCardSystemHolographic.js +452 -0
- package/src/export/systems/TradingCardSystemQuantum.js +411 -0
- package/src/faceted/FacetedSystem.js +963 -0
- package/src/features/CollectionManager.js +433 -0
- package/src/gallery/CollectionManager.js +240 -0
- package/src/gallery/GallerySystem.js +485 -0
- package/src/geometry/GeometryFactory.js +314 -0
- package/src/geometry/GeometryLibrary.js +72 -0
- package/src/geometry/buffers/BufferBuilder.js +338 -0
- package/src/geometry/buffers/index.js +18 -0
- package/src/geometry/generators/Crystal.js +420 -0
- package/src/geometry/generators/Fractal.js +298 -0
- package/src/geometry/generators/KleinBottle.js +197 -0
- package/src/geometry/generators/Sphere.js +192 -0
- package/src/geometry/generators/Tesseract.js +160 -0
- package/src/geometry/generators/Tetrahedron.js +225 -0
- package/src/geometry/generators/Torus.js +304 -0
- package/src/geometry/generators/Wave.js +341 -0
- package/src/geometry/index.js +142 -0
- package/src/geometry/warp/HypersphereCore.js +211 -0
- package/src/geometry/warp/HypertetraCore.js +386 -0
- package/src/geometry/warp/index.js +57 -0
- package/src/holograms/HolographicVisualizer.js +1073 -0
- package/src/holograms/RealHolographicSystem.js +966 -0
- package/src/holograms/variantRegistry.js +69 -0
- package/src/integrations/FigmaPlugin.js +854 -0
- package/src/integrations/OBSMode.js +754 -0
- package/src/integrations/ThreeJsPackage.js +660 -0
- package/src/integrations/TouchDesignerExport.js +552 -0
- package/src/integrations/frameworks/Vib3React.js +591 -0
- package/src/integrations/frameworks/Vib3Svelte.js +654 -0
- package/src/integrations/frameworks/Vib3Vue.js +628 -0
- package/src/llm/LLMParameterInterface.js +240 -0
- package/src/llm/LLMParameterUI.js +577 -0
- package/src/math/Mat4x4.js +708 -0
- package/src/math/Projection.js +341 -0
- package/src/math/Rotor4D.js +637 -0
- package/src/math/Vec4.js +476 -0
- package/src/math/constants.js +164 -0
- package/src/math/index.js +68 -0
- package/src/math/projections.js +54 -0
- package/src/math/rotations.js +196 -0
- package/src/quantum/QuantumEngine.js +906 -0
- package/src/quantum/QuantumVisualizer.js +1103 -0
- package/src/reactivity/ReactivityConfig.js +499 -0
- package/src/reactivity/ReactivityManager.js +586 -0
- package/src/reactivity/SpatialInputSystem.js +1783 -0
- package/src/reactivity/index.js +93 -0
- package/src/render/CommandBuffer.js +465 -0
- package/src/render/MultiCanvasBridge.js +340 -0
- package/src/render/RenderCommand.js +514 -0
- package/src/render/RenderResourceRegistry.js +523 -0
- package/src/render/RenderState.js +552 -0
- package/src/render/RenderTarget.js +512 -0
- package/src/render/ShaderLoader.js +253 -0
- package/src/render/ShaderProgram.js +599 -0
- package/src/render/UnifiedRenderBridge.js +496 -0
- package/src/render/backends/WebGLBackend.js +1108 -0
- package/src/render/backends/WebGPUBackend.js +1409 -0
- package/src/render/commands/CommandBufferExecutor.js +607 -0
- package/src/render/commands/RenderCommandBuffer.js +661 -0
- package/src/render/commands/index.js +17 -0
- package/src/render/index.js +367 -0
- package/src/scene/Disposable.js +498 -0
- package/src/scene/MemoryPool.js +618 -0
- package/src/scene/Node4D.js +697 -0
- package/src/scene/ResourceManager.js +599 -0
- package/src/scene/Scene4D.js +540 -0
- package/src/scene/index.js +98 -0
- package/src/schemas/error.schema.json +84 -0
- package/src/schemas/extension.schema.json +88 -0
- package/src/schemas/index.js +214 -0
- package/src/schemas/parameters.schema.json +142 -0
- package/src/schemas/tool-pack.schema.json +44 -0
- package/src/schemas/tool-response.schema.json +127 -0
- package/src/shaders/common/fullscreen.vert.glsl +5 -0
- package/src/shaders/common/fullscreen.vert.wgsl +17 -0
- package/src/shaders/common/geometry24.glsl +65 -0
- package/src/shaders/common/geometry24.wgsl +54 -0
- package/src/shaders/common/rotation4d.glsl +85 -0
- package/src/shaders/common/rotation4d.wgsl +86 -0
- package/src/shaders/common/uniforms.glsl +44 -0
- package/src/shaders/common/uniforms.wgsl +48 -0
- package/src/shaders/faceted/faceted.frag.glsl +129 -0
- package/src/shaders/faceted/faceted.frag.wgsl +164 -0
- package/src/shaders/holographic/holographic.frag.glsl +406 -0
- package/src/shaders/holographic/holographic.frag.wgsl +185 -0
- package/src/shaders/quantum/quantum.frag.glsl +513 -0
- package/src/shaders/quantum/quantum.frag.wgsl +361 -0
- package/src/testing/ParallelTestFramework.js +519 -0
- package/src/testing/__snapshots__/exportFormats.test.js.snap +24 -0
- package/src/testing/exportFormats.test.js +8 -0
- package/src/testing/projections.test.js +14 -0
- package/src/testing/rotations.test.js +37 -0
- package/src/ui/InteractivityMenu.js +516 -0
- package/src/ui/StatusManager.js +96 -0
- package/src/ui/adaptive/renderers/webgpu/BufferLayout.ts +252 -0
- package/src/ui/adaptive/renderers/webgpu/PolytopeInstanceBuffer.ts +144 -0
- package/src/ui/adaptive/renderers/webgpu/TripleBufferedUniform.ts +170 -0
- package/src/ui/adaptive/renderers/webgpu/WebGPURenderer.ts +735 -0
- package/src/ui/adaptive/renderers/webgpu/index.ts +112 -0
- package/src/variations/VariationManager.js +431 -0
- package/src/viewer/AudioReactivity.js +505 -0
- package/src/viewer/CardBending.js +481 -0
- package/src/viewer/GalleryUI.js +832 -0
- package/src/viewer/ReactivityManager.js +590 -0
- package/src/viewer/TradingCardExporter.js +600 -0
- package/src/viewer/ViewerPortal.js +374 -0
- package/src/viewer/index.js +12 -0
- package/src/wasm/WasmLoader.js +296 -0
- package/src/wasm/index.js +132 -0
- package/tools/agentic/mcpTools.js +88 -0
- package/tools/cli/agent-cli.js +92 -0
- package/tools/export/formats.js +24 -0
- package/tools/math/rotation-baseline.mjs +64 -0
- package/tools/shader-sync-verify.js +937 -0
- package/tools/telemetry/manifestPipeline.js +141 -0
- package/tools/telemetry/telemetryEvents.js +35 -0
- package/types/adaptive-sdk.d.ts +185 -0
- package/types/advanced/AIPresetGenerator.d.ts +81 -0
- package/types/advanced/MIDIController.d.ts +100 -0
- package/types/advanced/OffscreenWorker.d.ts +82 -0
- package/types/advanced/WebGPUCompute.d.ts +52 -0
- package/types/advanced/WebXRRenderer.d.ts +77 -0
- package/types/advanced/index.d.ts +46 -0
- package/types/core/ErrorReporter.d.ts +50 -0
- package/types/core/VIB3Engine.d.ts +204 -0
- package/types/creative/ColorPresetsSystem.d.ts +91 -0
- package/types/creative/ParameterTimeline.d.ts +74 -0
- package/types/creative/PostProcessingPipeline.d.ts +109 -0
- package/types/creative/TransitionAnimator.d.ts +71 -0
- package/types/creative/index.d.ts +35 -0
- package/types/integrations/FigmaPlugin.d.ts +46 -0
- package/types/integrations/OBSMode.d.ts +74 -0
- package/types/integrations/ThreeJsPackage.d.ts +62 -0
- package/types/integrations/TouchDesignerExport.d.ts +36 -0
- package/types/integrations/Vib3React.d.ts +74 -0
- package/types/integrations/Vib3Svelte.d.ts +63 -0
- package/types/integrations/Vib3Vue.d.ts +55 -0
- package/types/integrations/index.d.ts +52 -0
- package/types/reactivity/SpatialInputSystem.d.ts +173 -0
- package/types/reactivity/index.d.ts +394 -0
- package/types/render/CommandBuffer.d.ts +169 -0
- package/types/render/RenderCommand.d.ts +312 -0
- package/types/render/RenderState.d.ts +279 -0
- package/types/render/RenderTarget.d.ts +254 -0
- package/types/render/ShaderProgram.d.ts +277 -0
- package/types/render/UnifiedRenderBridge.d.ts +143 -0
- package/types/render/WebGLBackend.d.ts +168 -0
- package/types/render/WebGPUBackend.d.ts +186 -0
- package/types/render/index.d.ts +141 -0
|
@@ -0,0 +1,406 @@
|
|
|
1
|
+
// VIB3+ Holographic System Fragment Shader (GLSL)
|
|
2
|
+
// EXACT shader from HolographicVisualizer.js - 5-layer glassmorphic audio-reactive effects
|
|
3
|
+
// Enhanced volumetric lattice functions with holographic shimmer, moire, RGB glitch
|
|
4
|
+
// Supports 24 geometry variants: 8 base + 8 Hypersphere Core + 8 Hypertetrahedron Core
|
|
5
|
+
|
|
6
|
+
precision highp float;
|
|
7
|
+
|
|
8
|
+
uniform vec2 u_resolution;
|
|
9
|
+
uniform float u_time;
|
|
10
|
+
uniform vec2 u_mouse;
|
|
11
|
+
uniform float u_geometry;
|
|
12
|
+
uniform float u_density;
|
|
13
|
+
uniform float u_speed;
|
|
14
|
+
uniform vec3 u_color;
|
|
15
|
+
uniform float u_intensity;
|
|
16
|
+
uniform float u_roleDensity;
|
|
17
|
+
uniform float u_roleSpeed;
|
|
18
|
+
uniform float u_colorShift;
|
|
19
|
+
uniform float u_chaosIntensity;
|
|
20
|
+
uniform float u_mouseIntensity;
|
|
21
|
+
uniform float u_clickIntensity;
|
|
22
|
+
uniform float u_densityVariation;
|
|
23
|
+
uniform float u_geometryType;
|
|
24
|
+
uniform float u_chaos;
|
|
25
|
+
uniform float u_morph;
|
|
26
|
+
uniform float u_touchMorph;
|
|
27
|
+
uniform float u_touchChaos;
|
|
28
|
+
uniform float u_scrollParallax;
|
|
29
|
+
uniform float u_gridDensityShift;
|
|
30
|
+
uniform float u_colorScrollShift;
|
|
31
|
+
uniform float u_audioDensityBoost;
|
|
32
|
+
uniform float u_audioMorphBoost;
|
|
33
|
+
uniform float u_audioSpeedBoost;
|
|
34
|
+
uniform float u_audioChaosBoost;
|
|
35
|
+
uniform float u_audioColorShift;
|
|
36
|
+
uniform float u_rot4dXY;
|
|
37
|
+
uniform float u_rot4dXZ;
|
|
38
|
+
uniform float u_rot4dYZ;
|
|
39
|
+
uniform float u_rot4dXW;
|
|
40
|
+
uniform float u_rot4dYW;
|
|
41
|
+
uniform float u_rot4dZW;
|
|
42
|
+
|
|
43
|
+
// 6D rotation matrices - 3D space rotations (XY, XZ, YZ)
|
|
44
|
+
mat4 rotateXY(float theta) {
|
|
45
|
+
float c = cos(theta);
|
|
46
|
+
float s = sin(theta);
|
|
47
|
+
return mat4(c, -s, 0, 0, s, c, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
mat4 rotateXZ(float theta) {
|
|
51
|
+
float c = cos(theta);
|
|
52
|
+
float s = sin(theta);
|
|
53
|
+
return mat4(c, 0, s, 0, 0, 1, 0, 0, -s, 0, c, 0, 0, 0, 0, 1);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
mat4 rotateYZ(float theta) {
|
|
57
|
+
float c = cos(theta);
|
|
58
|
+
float s = sin(theta);
|
|
59
|
+
return mat4(1, 0, 0, 0, 0, c, -s, 0, 0, s, c, 0, 0, 0, 0, 1);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
// 4D hyperspace rotations (XW, YW, ZW)
|
|
63
|
+
mat4 rotateXW(float theta) {
|
|
64
|
+
float c = cos(theta);
|
|
65
|
+
float s = sin(theta);
|
|
66
|
+
return mat4(c, 0, 0, -s, 0, 1, 0, 0, 0, 0, 1, 0, s, 0, 0, c);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
mat4 rotateYW(float theta) {
|
|
70
|
+
float c = cos(theta);
|
|
71
|
+
float s = sin(theta);
|
|
72
|
+
return mat4(1, 0, 0, 0, 0, c, 0, -s, 0, 0, 1, 0, 0, s, 0, c);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
mat4 rotateZW(float theta) {
|
|
76
|
+
float c = cos(theta);
|
|
77
|
+
float s = sin(theta);
|
|
78
|
+
return mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, c, -s, 0, 0, s, c);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
// 4D to 3D projection
|
|
82
|
+
vec3 project4Dto3D(vec4 p) {
|
|
83
|
+
float w = 2.5 / (2.5 + p.w);
|
|
84
|
+
return vec3(p.x * w, p.y * w, p.z * w);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
// ========================================
|
|
88
|
+
// POLYTOPE CORE WARP FUNCTIONS (24 Geometries)
|
|
89
|
+
// ========================================
|
|
90
|
+
vec3 warpHypersphereCore(vec3 p, int geometryIndex, vec2 mouseDelta) {
|
|
91
|
+
float radius = length(p);
|
|
92
|
+
float morphBlend = clamp(u_morph * 0.6 + 0.3, 0.0, 2.0);
|
|
93
|
+
float w = sin(radius * (1.3 + float(geometryIndex) * 0.12) + u_time * 0.0008 * u_speed);
|
|
94
|
+
w *= (0.4 + morphBlend * 0.45);
|
|
95
|
+
|
|
96
|
+
vec4 p4d = vec4(p * (1.0 + morphBlend * 0.2), w);
|
|
97
|
+
p4d = rotateXY(u_rot4dXY) * p4d;
|
|
98
|
+
p4d = rotateXZ(u_rot4dXZ) * p4d;
|
|
99
|
+
p4d = rotateYZ(u_rot4dYZ) * p4d;
|
|
100
|
+
p4d = rotateXW(u_rot4dXW) * p4d;
|
|
101
|
+
p4d = rotateYW(u_rot4dYW) * p4d;
|
|
102
|
+
p4d = rotateZW(u_rot4dZW) * p4d;
|
|
103
|
+
|
|
104
|
+
vec3 projected = project4Dto3D(p4d);
|
|
105
|
+
return mix(p, projected, clamp(0.45 + morphBlend * 0.35, 0.0, 1.0));
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
vec3 warpHypertetraCore(vec3 p, int geometryIndex, vec2 mouseDelta) {
|
|
109
|
+
vec3 c1 = normalize(vec3(1.0, 1.0, 1.0));
|
|
110
|
+
vec3 c2 = normalize(vec3(-1.0, -1.0, 1.0));
|
|
111
|
+
vec3 c3 = normalize(vec3(-1.0, 1.0, -1.0));
|
|
112
|
+
vec3 c4 = normalize(vec3(1.0, -1.0, -1.0));
|
|
113
|
+
|
|
114
|
+
float morphBlend = clamp(u_morph * 0.8 + 0.2, 0.0, 2.0);
|
|
115
|
+
float basisMix = dot(p, c1) * 0.14 + dot(p, c2) * 0.1 + dot(p, c3) * 0.08;
|
|
116
|
+
float w = sin(basisMix * 5.5 + u_time * 0.0009 * u_speed);
|
|
117
|
+
w *= cos(dot(p, c4) * 4.2 - u_time * 0.0007 * u_speed);
|
|
118
|
+
w *= (0.5 + morphBlend * 0.4);
|
|
119
|
+
|
|
120
|
+
vec3 offset = vec3(dot(p, c1), dot(p, c2), dot(p, c3)) * 0.1 * morphBlend;
|
|
121
|
+
vec4 p4d = vec4(p + offset, w);
|
|
122
|
+
p4d = rotateXY(u_rot4dXY) * p4d;
|
|
123
|
+
p4d = rotateXZ(u_rot4dXZ) * p4d;
|
|
124
|
+
p4d = rotateYZ(u_rot4dYZ) * p4d;
|
|
125
|
+
p4d = rotateXW(u_rot4dXW) * p4d;
|
|
126
|
+
p4d = rotateYW(u_rot4dYW) * p4d;
|
|
127
|
+
p4d = rotateZW(u_rot4dZW) * p4d;
|
|
128
|
+
|
|
129
|
+
vec3 projected = project4Dto3D(p4d);
|
|
130
|
+
|
|
131
|
+
float planeInfluence = min(min(abs(dot(p, c1)), abs(dot(p, c2))), min(abs(dot(p, c3)), abs(dot(p, c4))));
|
|
132
|
+
vec3 blended = mix(p, projected, clamp(0.45 + morphBlend * 0.35, 0.0, 1.0));
|
|
133
|
+
return mix(blended, blended * (1.0 - planeInfluence * 0.55), 0.2 + morphBlend * 0.2);
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
vec3 applyCoreWarp(vec3 p, float geometryType, vec2 mouseDelta) {
|
|
137
|
+
float totalBase = 8.0;
|
|
138
|
+
float coreFloat = floor(geometryType / totalBase);
|
|
139
|
+
int coreIndex = int(clamp(coreFloat, 0.0, 2.0));
|
|
140
|
+
float baseGeomFloat = geometryType - floor(geometryType / totalBase) * totalBase;
|
|
141
|
+
int geometryIndex = int(clamp(floor(baseGeomFloat + 0.5), 0.0, totalBase - 1.0));
|
|
142
|
+
|
|
143
|
+
if (coreIndex == 1) {
|
|
144
|
+
return warpHypersphereCore(p, geometryIndex, mouseDelta);
|
|
145
|
+
}
|
|
146
|
+
if (coreIndex == 2) {
|
|
147
|
+
return warpHypertetraCore(p, geometryIndex, mouseDelta);
|
|
148
|
+
}
|
|
149
|
+
return p;
|
|
150
|
+
}
|
|
151
|
+
// ========================================
|
|
152
|
+
|
|
153
|
+
// Enhanced VIB3 Geometry Library - Higher Fidelity
|
|
154
|
+
float tetrahedronLattice(vec3 p, float gridSize) {
|
|
155
|
+
vec3 q = fract(p * gridSize) - 0.5;
|
|
156
|
+
|
|
157
|
+
// Enhanced tetrahedron vertices with holographic shimmer
|
|
158
|
+
float d1 = length(q);
|
|
159
|
+
float d2 = length(q - vec3(0.35, 0.0, 0.0));
|
|
160
|
+
float d3 = length(q - vec3(0.0, 0.35, 0.0));
|
|
161
|
+
float d4 = length(q - vec3(0.0, 0.0, 0.35));
|
|
162
|
+
float d5 = length(q - vec3(0.2, 0.2, 0.0));
|
|
163
|
+
float d6 = length(q - vec3(0.2, 0.0, 0.2));
|
|
164
|
+
float d7 = length(q - vec3(0.0, 0.2, 0.2));
|
|
165
|
+
|
|
166
|
+
float vertices = 1.0 - smoothstep(0.0, 0.03, min(min(min(d1, d2), min(d3, d4)), min(min(d5, d6), d7)));
|
|
167
|
+
|
|
168
|
+
// Enhanced edge network with interference patterns
|
|
169
|
+
float edges = 0.0;
|
|
170
|
+
float shimmer = sin(u_time * 0.002) * 0.02;
|
|
171
|
+
edges = max(edges, 1.0 - smoothstep(0.0, 0.015, abs(length(q.xy) - (0.18 + shimmer))));
|
|
172
|
+
edges = max(edges, 1.0 - smoothstep(0.0, 0.015, abs(length(q.yz) - (0.18 + shimmer * 0.8))));
|
|
173
|
+
edges = max(edges, 1.0 - smoothstep(0.0, 0.015, abs(length(q.xz) - (0.18 + shimmer * 1.2))));
|
|
174
|
+
|
|
175
|
+
// Add interference patterns between vertices
|
|
176
|
+
float interference = sin(d1 * 25.0 + u_time * 0.003) * sin(d2 * 22.0 + u_time * 0.0025) * 0.1;
|
|
177
|
+
|
|
178
|
+
// Volumetric density based on distance field
|
|
179
|
+
float volume = exp(-length(q) * 3.0) * 0.15;
|
|
180
|
+
|
|
181
|
+
return max(vertices, edges * 0.7) + interference + volume;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
float hypercubeLattice(vec3 p, float gridSize) {
|
|
185
|
+
vec3 grid = fract(p * gridSize);
|
|
186
|
+
vec3 q = grid - 0.5;
|
|
187
|
+
|
|
188
|
+
// Enhanced hypercube with 4D projection effects
|
|
189
|
+
vec3 edges = 1.0 - smoothstep(0.0, 0.025, abs(q));
|
|
190
|
+
float wireframe = max(max(edges.x, edges.y), edges.z);
|
|
191
|
+
|
|
192
|
+
// Add 4D hypercube vertices (8 corners + 8 hypervertices)
|
|
193
|
+
float vertices = 0.0;
|
|
194
|
+
for(int i = 0; i < 8; i++) {
|
|
195
|
+
// WebGL 1.0 compatible modulus replacement
|
|
196
|
+
float iFloat = float(i);
|
|
197
|
+
vec3 corner = vec3(
|
|
198
|
+
floor(iFloat - floor(iFloat / 2.0) * 2.0) - 0.5,
|
|
199
|
+
floor((iFloat / 2.0) - floor((iFloat / 2.0) / 2.0) * 2.0) - 0.5,
|
|
200
|
+
float(i / 4) - 0.5
|
|
201
|
+
);
|
|
202
|
+
float dist = length(q - corner * 0.4);
|
|
203
|
+
vertices = max(vertices, 1.0 - smoothstep(0.0, 0.04, dist));
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
// Holographic interference patterns
|
|
207
|
+
float interference = sin(length(q) * 20.0 + u_time * 0.002) * 0.08;
|
|
208
|
+
|
|
209
|
+
// Cross-dimensional glow
|
|
210
|
+
float glow = exp(-length(q) * 2.5) * 0.12;
|
|
211
|
+
|
|
212
|
+
return wireframe * 0.8 + vertices + interference + glow;
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
float sphereLattice(vec3 p, float gridSize) {
|
|
216
|
+
vec3 q = fract(p * gridSize) - 0.5;
|
|
217
|
+
float r = length(q);
|
|
218
|
+
return 1.0 - smoothstep(0.2, 0.5, r);
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
float torusLattice(vec3 p, float gridSize) {
|
|
222
|
+
vec3 q = fract(p * gridSize) - 0.5;
|
|
223
|
+
float r1 = sqrt(q.x*q.x + q.y*q.y);
|
|
224
|
+
float r2 = sqrt((r1 - 0.3)*(r1 - 0.3) + q.z*q.z);
|
|
225
|
+
return 1.0 - smoothstep(0.0, 0.1, r2);
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
float kleinLattice(vec3 p, float gridSize) {
|
|
229
|
+
vec3 q = fract(p * gridSize);
|
|
230
|
+
float ku = q.x * 2.0 * 3.14159;
|
|
231
|
+
float kv = q.y * 2.0 * 3.14159;
|
|
232
|
+
float kx = cos(ku) * (3.0 + cos(ku/2.0) * sin(kv) - sin(ku/2.0) * sin(2.0*kv));
|
|
233
|
+
float klein = length(vec2(kx, q.z)) - 0.1;
|
|
234
|
+
return 1.0 - smoothstep(0.0, 0.05, abs(klein));
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
float fractalLattice(vec3 p, float gridSize) {
|
|
238
|
+
vec3 q = p * gridSize;
|
|
239
|
+
float scale = 1.0;
|
|
240
|
+
float fractal = 0.0;
|
|
241
|
+
for(int i = 0; i < 4; i++) {
|
|
242
|
+
q = fract(q) - 0.5;
|
|
243
|
+
fractal += abs(length(q)) / scale;
|
|
244
|
+
scale *= 2.0;
|
|
245
|
+
q *= 2.0;
|
|
246
|
+
}
|
|
247
|
+
return 1.0 - smoothstep(0.0, 1.0, fractal);
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
float waveLattice(vec3 p, float gridSize) {
|
|
251
|
+
vec3 q = p * gridSize;
|
|
252
|
+
float wave = sin(q.x * 2.0) * sin(q.y * 2.0) * sin(q.z * 2.0 + u_time);
|
|
253
|
+
return smoothstep(-0.5, 0.5, wave);
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
float crystalLattice(vec3 p, float gridSize) {
|
|
257
|
+
vec3 q = fract(p * gridSize) - 0.5;
|
|
258
|
+
float d = max(max(abs(q.x), abs(q.y)), abs(q.z));
|
|
259
|
+
return 1.0 - smoothstep(0.3, 0.5, d);
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
float getDynamicGeometry(vec3 p, float gridSize, float geometryType) {
|
|
263
|
+
// Apply polytope core warp transformation (24-geometry system)
|
|
264
|
+
vec3 warped = applyCoreWarp(p, geometryType, vec2(0.0, 0.0));
|
|
265
|
+
|
|
266
|
+
// WebGL 1.0 compatible modulus replacement - decode base geometry
|
|
267
|
+
float baseGeomFloat = geometryType - floor(geometryType / 8.0) * 8.0;
|
|
268
|
+
int baseGeom = int(baseGeomFloat);
|
|
269
|
+
float variation = floor(geometryType / 8.0) / 4.0;
|
|
270
|
+
float variedGridSize = gridSize * (0.5 + variation * 1.5);
|
|
271
|
+
|
|
272
|
+
// Call lattice functions with warped point (enables 24 geometry variants)
|
|
273
|
+
if (baseGeom == 0) return tetrahedronLattice(warped, variedGridSize);
|
|
274
|
+
else if (baseGeom == 1) return hypercubeLattice(warped, variedGridSize);
|
|
275
|
+
else if (baseGeom == 2) return sphereLattice(warped, variedGridSize);
|
|
276
|
+
else if (baseGeom == 3) return torusLattice(warped, variedGridSize);
|
|
277
|
+
else if (baseGeom == 4) return kleinLattice(warped, variedGridSize);
|
|
278
|
+
else if (baseGeom == 5) return fractalLattice(warped, variedGridSize);
|
|
279
|
+
else if (baseGeom == 6) return waveLattice(warped, variedGridSize);
|
|
280
|
+
else return crystalLattice(warped, variedGridSize);
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
vec3 hsv2rgb(vec3 c) {
|
|
284
|
+
vec4 K = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0);
|
|
285
|
+
vec3 p = abs(fract(c.xxx + K.xyz) * 6.0 - K.www);
|
|
286
|
+
return c.z * mix(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y);
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
vec3 rgbGlitch(vec3 color, vec2 uv, float intensity) {
|
|
290
|
+
vec2 offset = vec2(intensity * 0.005, 0.0);
|
|
291
|
+
float r = color.r + sin(uv.y * 30.0 + u_time * 0.001) * intensity * 0.06;
|
|
292
|
+
float g = color.g + sin(uv.y * 28.0 + u_time * 0.0012) * intensity * 0.06;
|
|
293
|
+
float b = color.b + sin(uv.y * 32.0 + u_time * 0.0008) * intensity * 0.06;
|
|
294
|
+
return vec3(r, g, b);
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
float moirePattern(vec2 uv, float intensity) {
|
|
298
|
+
float freq1 = 12.0 + intensity * 6.0 + u_densityVariation * 3.0;
|
|
299
|
+
float freq2 = 14.0 + intensity * 8.0 + u_densityVariation * 4.0;
|
|
300
|
+
float pattern1 = sin(uv.x * freq1) * sin(uv.y * freq1);
|
|
301
|
+
float pattern2 = sin(uv.x * freq2) * sin(uv.y * freq2);
|
|
302
|
+
return (pattern1 * pattern2) * intensity * 0.15;
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
float gridOverlay(vec2 uv, float intensity) {
|
|
306
|
+
vec2 grid = fract(uv * (8.0 + u_densityVariation * 4.0));
|
|
307
|
+
float lines = 0.0;
|
|
308
|
+
lines = max(lines, 1.0 - smoothstep(0.0, 0.02, abs(grid.x - 0.5)));
|
|
309
|
+
lines = max(lines, 1.0 - smoothstep(0.0, 0.02, abs(grid.y - 0.5)));
|
|
310
|
+
return lines * intensity * 0.1;
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
void main() {
|
|
314
|
+
vec2 uv = gl_FragCoord.xy / u_resolution.xy;
|
|
315
|
+
float aspectRatio = u_resolution.x / u_resolution.y;
|
|
316
|
+
uv.x *= aspectRatio;
|
|
317
|
+
uv -= 0.5;
|
|
318
|
+
|
|
319
|
+
float time = u_time * 0.0004 * u_speed * u_roleSpeed;
|
|
320
|
+
|
|
321
|
+
float mouseInfluence = u_mouseIntensity * 0.25;
|
|
322
|
+
vec2 mouseOffset = (u_mouse - 0.5) * mouseInfluence;
|
|
323
|
+
|
|
324
|
+
float parallaxOffset = u_scrollParallax * 0.2;
|
|
325
|
+
vec2 scrollOffset = vec2(parallaxOffset * 0.1, parallaxOffset * 0.05);
|
|
326
|
+
|
|
327
|
+
float morphOffset = u_touchMorph * 0.3;
|
|
328
|
+
|
|
329
|
+
vec4 p4d = vec4(uv + mouseOffset * 0.1 + scrollOffset,
|
|
330
|
+
sin(time * 0.1 + morphOffset) * 0.15,
|
|
331
|
+
cos(time * 0.08 + morphOffset * 0.5) * 0.15);
|
|
332
|
+
|
|
333
|
+
float scrollRotation = u_scrollParallax * 0.1;
|
|
334
|
+
float touchRotation = u_touchMorph * 0.2;
|
|
335
|
+
|
|
336
|
+
// Combine manual rotation with automatic/interactive rotation - 6D full rotation
|
|
337
|
+
p4d = rotateXY(u_rot4dXY + time * 0.1) * p4d;
|
|
338
|
+
p4d = rotateXZ(u_rot4dXZ + time * 0.12) * p4d;
|
|
339
|
+
p4d = rotateYZ(u_rot4dYZ + time * 0.08) * p4d;
|
|
340
|
+
p4d = rotateXW(u_rot4dXW + time * 0.2 + mouseOffset.y * 0.5 + scrollRotation) * p4d;
|
|
341
|
+
p4d = rotateYW(u_rot4dYW + time * 0.15 + mouseOffset.x * 0.5 + touchRotation) * p4d;
|
|
342
|
+
p4d = rotateZW(u_rot4dZW + time * 0.25 + u_clickIntensity * 0.3 + u_touchChaos * 0.4) * p4d;
|
|
343
|
+
|
|
344
|
+
vec3 p = project4Dto3D(p4d);
|
|
345
|
+
|
|
346
|
+
float scrollDensityMod = 1.0 + u_gridDensityShift * 0.3;
|
|
347
|
+
float audioDensityMod = 1.0 + u_audioDensityBoost * 0.5;
|
|
348
|
+
// Controlled density calculation
|
|
349
|
+
float baseDensity = u_density * u_roleDensity;
|
|
350
|
+
float densityVariations = (u_densityVariation * 0.3 + (scrollDensityMod - 1.0) * 0.4 + (audioDensityMod - 1.0) * 0.2);
|
|
351
|
+
float roleDensity = baseDensity + densityVariations;
|
|
352
|
+
|
|
353
|
+
float morphedGeometry = u_geometryType + u_morph * 3.0 + u_touchMorph * 2.0 + u_audioMorphBoost * 1.5;
|
|
354
|
+
float lattice = getDynamicGeometry(p, roleDensity, morphedGeometry);
|
|
355
|
+
|
|
356
|
+
// Enhanced holographic color processing
|
|
357
|
+
vec3 baseColor = u_color;
|
|
358
|
+
float latticeIntensity = lattice * u_intensity;
|
|
359
|
+
|
|
360
|
+
// Multi-layer color composition for higher fidelity
|
|
361
|
+
vec3 color = baseColor * (0.2 + latticeIntensity * 0.8);
|
|
362
|
+
|
|
363
|
+
// Holographic shimmer layers
|
|
364
|
+
vec3 shimmer1 = baseColor * lattice * 0.5;
|
|
365
|
+
vec3 shimmer2 = baseColor * sin(lattice * 8.0 + u_time * 0.001) * 0.2;
|
|
366
|
+
vec3 shimmer3 = baseColor * cos(lattice * 12.0 + u_time * 0.0008) * 0.15;
|
|
367
|
+
|
|
368
|
+
color += shimmer1 + shimmer2 + shimmer3;
|
|
369
|
+
|
|
370
|
+
// Enhanced brightness variations with interference
|
|
371
|
+
color += vec3(lattice * 0.6) * baseColor;
|
|
372
|
+
color += vec3(sin(lattice * 15.0) * 0.1) * baseColor;
|
|
373
|
+
|
|
374
|
+
// Depth-based coloring for 3D effect
|
|
375
|
+
float depth = 1.0 - length(p) * 0.3;
|
|
376
|
+
color *= (0.7 + depth * 0.3);
|
|
377
|
+
|
|
378
|
+
float enhancedChaos = u_chaos + u_chaosIntensity + u_touchChaos * 0.3 + u_audioChaosBoost * 0.4;
|
|
379
|
+
color += vec3(moirePattern(uv + scrollOffset, enhancedChaos));
|
|
380
|
+
color += vec3(gridOverlay(uv, u_mouseIntensity + u_scrollParallax * 0.1));
|
|
381
|
+
color = rgbGlitch(color, uv, enhancedChaos);
|
|
382
|
+
|
|
383
|
+
// Apply morph distortion to position
|
|
384
|
+
vec2 morphDistortion = vec2(sin(uv.y * 10.0 + u_time * 0.001) * u_morph * 0.1,
|
|
385
|
+
cos(uv.x * 10.0 + u_time * 0.001) * u_morph * 0.1);
|
|
386
|
+
color = mix(color, color * (1.0 + length(morphDistortion)), u_morph * 0.5);
|
|
387
|
+
|
|
388
|
+
// Enhanced holographic interaction effects
|
|
389
|
+
float mouseDist = length(uv - (u_mouse - 0.5) * vec2(aspectRatio, 1.0));
|
|
390
|
+
|
|
391
|
+
// Multi-layer mouse glow with holographic ripples
|
|
392
|
+
float mouseGlow = exp(-mouseDist * 1.2) * u_mouseIntensity * 0.25;
|
|
393
|
+
float mouseRipple = sin(mouseDist * 15.0 - u_time * 0.003) * exp(-mouseDist * 2.0) * u_mouseIntensity * 0.1;
|
|
394
|
+
color += vec3(mouseGlow + mouseRipple) * baseColor * 0.8;
|
|
395
|
+
|
|
396
|
+
// Enhanced click pulse with interference
|
|
397
|
+
float clickPulse = u_clickIntensity * exp(-mouseDist * 1.8) * 0.4;
|
|
398
|
+
float clickRing = sin(mouseDist * 20.0 - u_clickIntensity * 5.0) * u_clickIntensity * 0.15;
|
|
399
|
+
color += vec3(clickPulse + clickRing, (clickPulse + clickRing) * 0.6, (clickPulse + clickRing) * 1.2);
|
|
400
|
+
|
|
401
|
+
// Holographic interference from interactions
|
|
402
|
+
float interference = sin(mouseDist * 25.0 + u_time * 0.002) * u_mouseIntensity * 0.05;
|
|
403
|
+
color += vec3(interference) * baseColor;
|
|
404
|
+
|
|
405
|
+
gl_FragColor = vec4(color, 0.95);
|
|
406
|
+
}
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
// VIB3+ Holographic System Fragment Shader (WGSL)
|
|
2
|
+
// 5-layer glassmorphic audio-reactive effects
|
|
3
|
+
// Port of the GLSL HolographicVisualizer shader
|
|
4
|
+
|
|
5
|
+
struct VIB3Uniforms {
|
|
6
|
+
time: f32,
|
|
7
|
+
_pad0: f32,
|
|
8
|
+
resolution: vec2<f32>,
|
|
9
|
+
geometry: f32,
|
|
10
|
+
rot4dXY: f32,
|
|
11
|
+
rot4dXZ: f32,
|
|
12
|
+
rot4dYZ: f32,
|
|
13
|
+
rot4dXW: f32,
|
|
14
|
+
rot4dYW: f32,
|
|
15
|
+
rot4dZW: f32,
|
|
16
|
+
dimension: f32,
|
|
17
|
+
gridDensity: f32,
|
|
18
|
+
morphFactor: f32,
|
|
19
|
+
chaos: f32,
|
|
20
|
+
speed: f32,
|
|
21
|
+
hue: f32,
|
|
22
|
+
intensity: f32,
|
|
23
|
+
saturation: f32,
|
|
24
|
+
mouseIntensity: f32,
|
|
25
|
+
clickIntensity: f32,
|
|
26
|
+
bass: f32,
|
|
27
|
+
mid: f32,
|
|
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>,
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
@group(0) @binding(0) var<uniform> u: VIB3Uniforms;
|
|
39
|
+
|
|
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);
|
|
48
|
+
return mat4x4<f32>(
|
|
49
|
+
vec4<f32>(c, -s, 0.0, 0.0), vec4<f32>(s, c, 0.0, 0.0),
|
|
50
|
+
vec4<f32>(0.0, 0.0, 1.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 1.0));
|
|
51
|
+
}
|
|
52
|
+
fn rotateXZ(angle: f32) -> mat4x4<f32> {
|
|
53
|
+
let c = cos(angle); let s = sin(angle);
|
|
54
|
+
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));
|
|
57
|
+
}
|
|
58
|
+
fn rotateYZ(angle: f32) -> mat4x4<f32> {
|
|
59
|
+
let c = cos(angle); let s = sin(angle);
|
|
60
|
+
return mat4x4<f32>(
|
|
61
|
+
vec4<f32>(1.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, c, -s, 0.0),
|
|
62
|
+
vec4<f32>(0.0, s, c, 0.0), vec4<f32>(0.0, 0.0, 0.0, 1.0));
|
|
63
|
+
}
|
|
64
|
+
fn rotateXW(angle: f32) -> mat4x4<f32> {
|
|
65
|
+
let c = cos(angle); let s = sin(angle);
|
|
66
|
+
return mat4x4<f32>(
|
|
67
|
+
vec4<f32>(c, 0.0, 0.0, -s), vec4<f32>(0.0, 1.0, 0.0, 0.0),
|
|
68
|
+
vec4<f32>(0.0, 0.0, 1.0, 0.0), vec4<f32>(s, 0.0, 0.0, c));
|
|
69
|
+
}
|
|
70
|
+
fn rotateYW(angle: f32) -> mat4x4<f32> {
|
|
71
|
+
let c = cos(angle); let s = sin(angle);
|
|
72
|
+
return mat4x4<f32>(
|
|
73
|
+
vec4<f32>(1.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, c, 0.0, -s),
|
|
74
|
+
vec4<f32>(0.0, 0.0, 1.0, 0.0), vec4<f32>(0.0, s, 0.0, c));
|
|
75
|
+
}
|
|
76
|
+
fn rotateZW(angle: f32) -> mat4x4<f32> {
|
|
77
|
+
let c = cos(angle); let s = sin(angle);
|
|
78
|
+
return mat4x4<f32>(
|
|
79
|
+
vec4<f32>(1.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 1.0, 0.0, 0.0),
|
|
80
|
+
vec4<f32>(0.0, 0.0, c, -s), vec4<f32>(0.0, 0.0, s, c));
|
|
81
|
+
}
|
|
82
|
+
|
|
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;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
// ========== 24 Geometry SDFs ==========
|
|
95
|
+
fn baseGeometry(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
|
+
}
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
fn geom(p: vec4<f32>, t: f32) -> f32 {
|
|
121
|
+
if (t < 8.0) { return baseGeometry(p, t); }
|
|
122
|
+
else if (t < 16.0) { return max(baseGeometry(p, t - 8.0), length(p) - 1.2); }
|
|
123
|
+
else {
|
|
124
|
+
let tf = max(max(max(
|
|
125
|
+
abs(p.x + p.y) - p.z - p.w,
|
|
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) / sqrt(4.0);
|
|
129
|
+
return max(baseGeometry(p, t - 16.0), tf);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
// ========== HSL to RGB ==========
|
|
134
|
+
fn hue2rgb(p: f32, q: f32, tin: f32) -> f32 {
|
|
135
|
+
var t = tin;
|
|
136
|
+
if (t < 0.0) { t += 1.0; }
|
|
137
|
+
if (t > 1.0) { t -= 1.0; }
|
|
138
|
+
if (t < 1.0 / 6.0) { return p + (q - p) * 6.0 * t; }
|
|
139
|
+
if (t < 1.0 / 2.0) { return q; }
|
|
140
|
+
if (t < 2.0 / 3.0) { return p + (q - p) * (2.0 / 3.0 - t) * 6.0; }
|
|
141
|
+
return p;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
fn hslToRgb(h: f32, s: f32, l: f32) -> vec3<f32> {
|
|
145
|
+
if (s == 0.0) { return vec3<f32>(l); }
|
|
146
|
+
let q = select(l + s - l * s, l * (1.0 + s), l < 0.5);
|
|
147
|
+
let p = 2.0 * l - q;
|
|
148
|
+
return vec3<f32>(
|
|
149
|
+
hue2rgb(p, q, h + 1.0 / 3.0),
|
|
150
|
+
hue2rgb(p, q, h),
|
|
151
|
+
hue2rgb(p, q, h - 1.0 / 3.0)
|
|
152
|
+
);
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
// ========== Main Fragment ==========
|
|
156
|
+
@fragment
|
|
157
|
+
fn main(input: VertexOutput) -> @location(0) vec4<f32> {
|
|
158
|
+
let fragCoord = input.position.xy;
|
|
159
|
+
let uv = (fragCoord - 0.5 * u.resolution) / min(u.resolution.x, u.resolution.y);
|
|
160
|
+
|
|
161
|
+
let density = u.densityMult;
|
|
162
|
+
let spd = u.speedMult;
|
|
163
|
+
|
|
164
|
+
// Create 4D point
|
|
165
|
+
var pos = vec4<f32>(uv * 2.0 * density, sin(u.time * 0.3 * spd) * 0.5, cos(u.time * 0.2 * spd) * 0.5);
|
|
166
|
+
pos = apply6DRot(pos);
|
|
167
|
+
pos *= u.morphFactor;
|
|
168
|
+
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;
|
|
169
|
+
|
|
170
|
+
// Geometry evaluation
|
|
171
|
+
let dist = geom(pos, u.geometry);
|
|
172
|
+
let edge = smoothstep(0.02, 0.0, abs(dist));
|
|
173
|
+
let fill = smoothstep(0.1, 0.0, dist) * 0.3;
|
|
174
|
+
|
|
175
|
+
// Color from HSL
|
|
176
|
+
// colorShift is baked into layerColor; use hue directly
|
|
177
|
+
let hueVal = u.hue / 360.0;
|
|
178
|
+
let sat = clamp(u.saturation, 0.0, 1.0);
|
|
179
|
+
let lightness = clamp(u.intensity, 0.2, 0.8);
|
|
180
|
+
let color = hslToRgb(hueVal, sat, lightness);
|
|
181
|
+
|
|
182
|
+
// Final alpha
|
|
183
|
+
let alpha = (edge + fill) * u.intensity * u.layerOpacity;
|
|
184
|
+
return vec4<f32>(color * alpha, alpha);
|
|
185
|
+
}
|