@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,660 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* VIB3+ Three.js ShaderMaterial Integration
|
|
3
|
+
*
|
|
4
|
+
* Generates Three.js-compatible ShaderMaterial configuration objects that bring
|
|
5
|
+
* VIB3+ 4D visualization shaders into any Three.js scene. Supports all three
|
|
6
|
+
* rendering systems (Quantum, Faceted, Holographic) with full 6D rotation,
|
|
7
|
+
* 24 geometry variants, and animation update methods.
|
|
8
|
+
*
|
|
9
|
+
* Usage:
|
|
10
|
+
* import { Vib3ThreeJsPackage } from '@vib3/integrations';
|
|
11
|
+
* const materialConfig = Vib3ThreeJsPackage.getShaderMaterial({ system: 'faceted' });
|
|
12
|
+
* const material = new THREE.ShaderMaterial(materialConfig);
|
|
13
|
+
* const mesh = new THREE.Mesh(new THREE.PlaneGeometry(2, 2), material);
|
|
14
|
+
* scene.add(mesh);
|
|
15
|
+
*
|
|
16
|
+
* // In your animation loop:
|
|
17
|
+
* materialConfig.update(clock.getElapsedTime() * 1000);
|
|
18
|
+
*
|
|
19
|
+
* @module Vib3ThreeJsPackage
|
|
20
|
+
* @version 1.0.0
|
|
21
|
+
* @license All Rights Reserved - Clear Seas Solutions LLC
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Standard VIB3+ uniform definitions with Three.js-compatible structure.
|
|
26
|
+
* Each uniform is defined with { value: defaultValue }.
|
|
27
|
+
* @constant {Object}
|
|
28
|
+
*/
|
|
29
|
+
const UNIFORM_DEFAULTS = {
|
|
30
|
+
u_time: 0.0,
|
|
31
|
+
u_resolution: [1024.0, 1024.0],
|
|
32
|
+
u_geometry: 0.0,
|
|
33
|
+
u_gridDensity: 15.0,
|
|
34
|
+
u_morphFactor: 1.0,
|
|
35
|
+
u_chaos: 0.2,
|
|
36
|
+
u_speed: 1.0,
|
|
37
|
+
u_hue: 200.0 / 360.0,
|
|
38
|
+
u_intensity: 0.5,
|
|
39
|
+
u_saturation: 0.8,
|
|
40
|
+
u_dimension: 3.5,
|
|
41
|
+
u_rot4dXY: 0.0,
|
|
42
|
+
u_rot4dXZ: 0.0,
|
|
43
|
+
u_rot4dYZ: 0.0,
|
|
44
|
+
u_rot4dXW: 0.0,
|
|
45
|
+
u_rot4dYW: 0.0,
|
|
46
|
+
u_rot4dZW: 0.0,
|
|
47
|
+
u_mouseIntensity: 0.0,
|
|
48
|
+
u_clickIntensity: 0.0,
|
|
49
|
+
u_bass: 0.0,
|
|
50
|
+
u_mid: 0.0,
|
|
51
|
+
u_high: 0.0
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Three.js ShaderMaterial integration for VIB3+ visualization engine.
|
|
56
|
+
*
|
|
57
|
+
* Generates complete vertex and fragment shader source code along with
|
|
58
|
+
* uniform definitions compatible with THREE.ShaderMaterial.
|
|
59
|
+
*
|
|
60
|
+
* @class
|
|
61
|
+
*/
|
|
62
|
+
export class Vib3ThreeJsPackage {
|
|
63
|
+
/**
|
|
64
|
+
* Returns a complete Three.js ShaderMaterial configuration object.
|
|
65
|
+
*
|
|
66
|
+
* The returned object can be passed directly to `new THREE.ShaderMaterial(config)`.
|
|
67
|
+
* It includes:
|
|
68
|
+
* - vertexShader: Full-screen quad or mesh-compatible vertex shader
|
|
69
|
+
* - fragmentShader: VIB3+ procedural fragment shader for the selected system
|
|
70
|
+
* - uniforms: All VIB3 parameters as THREE.Uniform-compatible objects
|
|
71
|
+
* - transparent: true (for compositing with scene)
|
|
72
|
+
* - update(timeMs): Method to call each frame for animation
|
|
73
|
+
* - setParameter(name, value): Method to update a single parameter
|
|
74
|
+
* - setParameters(params): Method to update multiple parameters
|
|
75
|
+
*
|
|
76
|
+
* @param {object} [options={}] - Material configuration options
|
|
77
|
+
* @param {string} [options.system='faceted'] - VIB3 system: 'quantum' | 'faceted' | 'holographic'
|
|
78
|
+
* @param {boolean} [options.transparent=true] - Enable transparency
|
|
79
|
+
* @param {boolean} [options.depthWrite=false] - Write to depth buffer
|
|
80
|
+
* @param {boolean} [options.depthTest=true] - Test against depth buffer
|
|
81
|
+
* @param {number} [options.width=1024] - Initial resolution width
|
|
82
|
+
* @param {number} [options.height=1024] - Initial resolution height
|
|
83
|
+
* @param {object} [options.initialParams={}] - Initial parameter overrides
|
|
84
|
+
* @returns {object} Three.js ShaderMaterial configuration
|
|
85
|
+
* @example
|
|
86
|
+
* const config = Vib3ThreeJsPackage.getShaderMaterial({ system: 'quantum', width: 800, height: 600 });
|
|
87
|
+
* const material = new THREE.ShaderMaterial(config);
|
|
88
|
+
* // In animation loop:
|
|
89
|
+
* config.update(performance.now());
|
|
90
|
+
*/
|
|
91
|
+
static getShaderMaterial(options = {}) {
|
|
92
|
+
const system = options.system || 'faceted';
|
|
93
|
+
const width = options.width || 1024;
|
|
94
|
+
const height = options.height || 1024;
|
|
95
|
+
const initialParams = options.initialParams || {};
|
|
96
|
+
|
|
97
|
+
// Build uniforms object
|
|
98
|
+
const uniforms = {};
|
|
99
|
+
for (const [key, defaultValue] of Object.entries(UNIFORM_DEFAULTS)) {
|
|
100
|
+
if (key === 'u_resolution') {
|
|
101
|
+
uniforms[key] = { value: [width, height] };
|
|
102
|
+
} else {
|
|
103
|
+
uniforms[key] = { value: defaultValue };
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
// Apply initial parameter overrides
|
|
108
|
+
const paramToUniform = {
|
|
109
|
+
geometry: 'u_geometry', gridDensity: 'u_gridDensity',
|
|
110
|
+
morphFactor: 'u_morphFactor', chaos: 'u_chaos', speed: 'u_speed',
|
|
111
|
+
intensity: 'u_intensity', saturation: 'u_saturation',
|
|
112
|
+
dimension: 'u_dimension',
|
|
113
|
+
rot4dXY: 'u_rot4dXY', rot4dXZ: 'u_rot4dXZ', rot4dYZ: 'u_rot4dYZ',
|
|
114
|
+
rot4dXW: 'u_rot4dXW', rot4dYW: 'u_rot4dYW', rot4dZW: 'u_rot4dZW',
|
|
115
|
+
mouseIntensity: 'u_mouseIntensity', clickIntensity: 'u_clickIntensity',
|
|
116
|
+
bass: 'u_bass', mid: 'u_mid', high: 'u_high'
|
|
117
|
+
};
|
|
118
|
+
|
|
119
|
+
// Hue is special: stored as 0-360 externally, 0-1 internally
|
|
120
|
+
if ('hue' in initialParams) {
|
|
121
|
+
uniforms.u_hue.value = initialParams.hue / 360.0;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
for (const [param, uniform] of Object.entries(paramToUniform)) {
|
|
125
|
+
if (param in initialParams && typeof initialParams[param] === 'number') {
|
|
126
|
+
uniforms[uniform].value = initialParams[param];
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
const vertexShader = Vib3ThreeJsPackage.getVertexShader();
|
|
131
|
+
const fragmentShader = Vib3ThreeJsPackage.getFragmentShader(system);
|
|
132
|
+
|
|
133
|
+
const config = {
|
|
134
|
+
vertexShader,
|
|
135
|
+
fragmentShader,
|
|
136
|
+
uniforms,
|
|
137
|
+
transparent: options.transparent !== false,
|
|
138
|
+
depthWrite: options.depthWrite || false,
|
|
139
|
+
depthTest: options.depthTest !== false,
|
|
140
|
+
side: 2, // THREE.DoubleSide
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* Update the time uniform. Call this each frame in your animation loop.
|
|
144
|
+
* @param {number} timeMs - Current time in milliseconds (e.g. performance.now())
|
|
145
|
+
*/
|
|
146
|
+
update(timeMs) {
|
|
147
|
+
uniforms.u_time.value = timeMs;
|
|
148
|
+
},
|
|
149
|
+
|
|
150
|
+
/**
|
|
151
|
+
* Set a single VIB3 parameter on the material.
|
|
152
|
+
* @param {string} name - Parameter name (e.g. 'hue', 'geometry', 'rot4dXW')
|
|
153
|
+
* @param {number} value - Parameter value
|
|
154
|
+
*/
|
|
155
|
+
setParameter(name, value) {
|
|
156
|
+
if (name === 'hue') {
|
|
157
|
+
uniforms.u_hue.value = value / 360.0;
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
160
|
+
const uniformName = paramToUniform[name] || ('u_' + name);
|
|
161
|
+
if (uniforms[uniformName]) {
|
|
162
|
+
uniforms[uniformName].value = value;
|
|
163
|
+
}
|
|
164
|
+
},
|
|
165
|
+
|
|
166
|
+
/**
|
|
167
|
+
* Set multiple VIB3 parameters at once.
|
|
168
|
+
* @param {object} params - Object of name/value parameter pairs
|
|
169
|
+
*/
|
|
170
|
+
setParameters(params) {
|
|
171
|
+
for (const [name, value] of Object.entries(params)) {
|
|
172
|
+
if (typeof value === 'number' && Number.isFinite(value)) {
|
|
173
|
+
config.setParameter(name, value);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
},
|
|
177
|
+
|
|
178
|
+
/**
|
|
179
|
+
* Update the resolution uniform (call on window resize).
|
|
180
|
+
* @param {number} w - Width in pixels
|
|
181
|
+
* @param {number} h - Height in pixels
|
|
182
|
+
*/
|
|
183
|
+
setResolution(w, h) {
|
|
184
|
+
uniforms.u_resolution.value = [w, h];
|
|
185
|
+
},
|
|
186
|
+
|
|
187
|
+
/**
|
|
188
|
+
* Set audio reactivity levels.
|
|
189
|
+
* @param {number} bass - Bass level (0-1)
|
|
190
|
+
* @param {number} mid - Mid level (0-1)
|
|
191
|
+
* @param {number} high - High level (0-1)
|
|
192
|
+
*/
|
|
193
|
+
setAudio(bass, mid, high) {
|
|
194
|
+
uniforms.u_bass.value = bass;
|
|
195
|
+
uniforms.u_mid.value = mid;
|
|
196
|
+
uniforms.u_high.value = high;
|
|
197
|
+
}
|
|
198
|
+
};
|
|
199
|
+
|
|
200
|
+
return config;
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
/**
|
|
204
|
+
* Returns the Three.js-compatible vertex shader source code.
|
|
205
|
+
*
|
|
206
|
+
* This vertex shader passes through UV coordinates and position data
|
|
207
|
+
* for a full-screen quad or arbitrary mesh geometry.
|
|
208
|
+
*
|
|
209
|
+
* @returns {string} GLSL vertex shader source
|
|
210
|
+
*/
|
|
211
|
+
static getVertexShader() {
|
|
212
|
+
return `
|
|
213
|
+
varying vec2 vUv;
|
|
214
|
+
varying vec3 vPosition;
|
|
215
|
+
|
|
216
|
+
void main() {
|
|
217
|
+
vUv = uv;
|
|
218
|
+
vPosition = position;
|
|
219
|
+
gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
|
|
220
|
+
}
|
|
221
|
+
`;
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
/**
|
|
225
|
+
* Returns the VIB3+ fragment shader source for the specified system.
|
|
226
|
+
*
|
|
227
|
+
* Supports all three systems:
|
|
228
|
+
* - 'faceted': Clean geometric patterns with 4D rotation
|
|
229
|
+
* - 'quantum': Complex lattice with holographic effects
|
|
230
|
+
* - 'holographic': 5-layer glassmorphic rendering (single-layer variant)
|
|
231
|
+
*
|
|
232
|
+
* All shaders include:
|
|
233
|
+
* - Full 6D rotation matrices (XY, XZ, YZ, XW, YW, ZW)
|
|
234
|
+
* - 4D perspective projection
|
|
235
|
+
* - 24 geometry variants (8 base x 3 core types)
|
|
236
|
+
* - HSL color control with user hue/saturation
|
|
237
|
+
* - Audio reactivity uniforms
|
|
238
|
+
*
|
|
239
|
+
* @param {string} [system='faceted'] - VIB3 system name
|
|
240
|
+
* @returns {string} GLSL fragment shader source
|
|
241
|
+
*/
|
|
242
|
+
static getFragmentShader(system = 'faceted') {
|
|
243
|
+
// Common shader preamble: precision, uniforms, rotation matrices
|
|
244
|
+
const preamble = `
|
|
245
|
+
precision highp float;
|
|
246
|
+
|
|
247
|
+
varying vec2 vUv;
|
|
248
|
+
varying vec3 vPosition;
|
|
249
|
+
|
|
250
|
+
uniform float u_time;
|
|
251
|
+
uniform vec2 u_resolution;
|
|
252
|
+
uniform float u_geometry;
|
|
253
|
+
uniform float u_gridDensity;
|
|
254
|
+
uniform float u_morphFactor;
|
|
255
|
+
uniform float u_chaos;
|
|
256
|
+
uniform float u_speed;
|
|
257
|
+
uniform float u_hue;
|
|
258
|
+
uniform float u_intensity;
|
|
259
|
+
uniform float u_saturation;
|
|
260
|
+
uniform float u_dimension;
|
|
261
|
+
uniform float u_rot4dXY;
|
|
262
|
+
uniform float u_rot4dXZ;
|
|
263
|
+
uniform float u_rot4dYZ;
|
|
264
|
+
uniform float u_rot4dXW;
|
|
265
|
+
uniform float u_rot4dYW;
|
|
266
|
+
uniform float u_rot4dZW;
|
|
267
|
+
uniform float u_mouseIntensity;
|
|
268
|
+
uniform float u_clickIntensity;
|
|
269
|
+
uniform float u_bass;
|
|
270
|
+
uniform float u_mid;
|
|
271
|
+
uniform float u_high;
|
|
272
|
+
|
|
273
|
+
// ---- 6D Rotation Matrices ----
|
|
274
|
+
mat4 rotateXY(float a) { float c=cos(a),s=sin(a); return mat4(c,-s,0,0, s,c,0,0, 0,0,1,0, 0,0,0,1); }
|
|
275
|
+
mat4 rotateXZ(float a) { float c=cos(a),s=sin(a); return mat4(c,0,-s,0, 0,1,0,0, s,0,c,0, 0,0,0,1); }
|
|
276
|
+
mat4 rotateYZ(float a) { float c=cos(a),s=sin(a); return mat4(1,0,0,0, 0,c,-s,0, 0,s,c,0, 0,0,0,1); }
|
|
277
|
+
mat4 rotateXW(float a) { float c=cos(a),s=sin(a); return mat4(c,0,0,-s, 0,1,0,0, 0,0,1,0, s,0,0,c); }
|
|
278
|
+
mat4 rotateYW(float a) { float c=cos(a),s=sin(a); return mat4(1,0,0,0, 0,c,0,-s, 0,0,1,0, 0,s,0,c); }
|
|
279
|
+
mat4 rotateZW(float a) { float c=cos(a),s=sin(a); return mat4(1,0,0,0, 0,1,0,0, 0,0,c,-s, 0,0,s,c); }
|
|
280
|
+
|
|
281
|
+
// ---- 4D Projection ----
|
|
282
|
+
vec3 project4Dto3D(vec4 p) {
|
|
283
|
+
float w = 1.0 / (u_dimension - p.w);
|
|
284
|
+
return p.xyz * w;
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
// ---- HSL to RGB ----
|
|
288
|
+
vec3 hsl2rgb(float h, float s, float l) {
|
|
289
|
+
float c = (1.0 - abs(2.0 * l - 1.0)) * s;
|
|
290
|
+
float hp = h * 6.0;
|
|
291
|
+
float x = c * (1.0 - abs(mod(hp, 2.0) - 1.0));
|
|
292
|
+
float m = l - c * 0.5;
|
|
293
|
+
vec3 rgb;
|
|
294
|
+
if (hp < 1.0) rgb = vec3(c, x, 0.0);
|
|
295
|
+
else if (hp < 2.0) rgb = vec3(x, c, 0.0);
|
|
296
|
+
else if (hp < 3.0) rgb = vec3(0.0, c, x);
|
|
297
|
+
else if (hp < 4.0) rgb = vec3(0.0, x, c);
|
|
298
|
+
else if (hp < 5.0) rgb = vec3(x, 0.0, c);
|
|
299
|
+
else rgb = vec3(c, 0.0, x);
|
|
300
|
+
return rgb + m;
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
// ---- Core Warp Functions ----
|
|
304
|
+
vec3 warpHypersphere(vec3 p, float geomIdx) {
|
|
305
|
+
float radius = length(p);
|
|
306
|
+
float morph = clamp(u_morphFactor * 0.6 + (u_dimension - 3.0) * 0.25, 0.0, 2.0);
|
|
307
|
+
float w = sin(radius * (1.3 + geomIdx * 0.12) + u_time * 0.0008 * u_speed) * (0.4 + morph * 0.45);
|
|
308
|
+
vec4 p4 = vec4(p * (1.0 + morph * 0.2), w);
|
|
309
|
+
p4 = rotateXY(u_rot4dXY) * rotateXZ(u_rot4dXZ) * rotateYZ(u_rot4dYZ) *
|
|
310
|
+
rotateXW(u_rot4dXW) * rotateYW(u_rot4dYW) * rotateZW(u_rot4dZW) * p4;
|
|
311
|
+
return mix(p, project4Dto3D(p4), clamp(0.45 + morph * 0.35, 0.0, 1.0));
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
vec3 warpHypertetra(vec3 p, float geomIdx) {
|
|
315
|
+
vec3 c1 = normalize(vec3(1,1,1)), c2 = normalize(vec3(-1,-1,1));
|
|
316
|
+
vec3 c3 = normalize(vec3(-1,1,-1)), c4 = normalize(vec3(1,-1,-1));
|
|
317
|
+
float morph = clamp(u_morphFactor * 0.8 + (u_dimension - 3.0) * 0.2, 0.0, 2.0);
|
|
318
|
+
float basis = dot(p, c1) * 0.14 + dot(p, c2) * 0.1 + dot(p, c3) * 0.08;
|
|
319
|
+
float w = sin(basis * 5.5 + u_time * 0.0009 * u_speed) *
|
|
320
|
+
cos(dot(p, c4) * 4.2 - u_time * 0.0007 * u_speed) * (0.5 + morph * 0.4);
|
|
321
|
+
vec3 offset = vec3(dot(p, c1), dot(p, c2), dot(p, c3)) * 0.1 * morph;
|
|
322
|
+
vec4 p4 = vec4(p + offset, w);
|
|
323
|
+
p4 = rotateXY(u_rot4dXY) * rotateXZ(u_rot4dXZ) * rotateYZ(u_rot4dYZ) *
|
|
324
|
+
rotateXW(u_rot4dXW) * rotateYW(u_rot4dYW) * rotateZW(u_rot4dZW) * p4;
|
|
325
|
+
vec3 proj = project4Dto3D(p4);
|
|
326
|
+
float plane = min(min(abs(dot(p, c1)), abs(dot(p, c2))), min(abs(dot(p, c3)), abs(dot(p, c4))));
|
|
327
|
+
vec3 blended = mix(p, proj, clamp(0.45 + morph * 0.35, 0.0, 1.0));
|
|
328
|
+
return mix(blended, blended * (1.0 - plane * 0.55), 0.2 + morph * 0.2);
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
vec3 applyCoreWarp(vec3 p, float geomType) {
|
|
332
|
+
float coreF = floor(geomType / 8.0);
|
|
333
|
+
int core = int(clamp(coreF, 0.0, 2.0));
|
|
334
|
+
float baseF = mod(geomType, 8.0);
|
|
335
|
+
if (core == 1) return warpHypersphere(p, baseF);
|
|
336
|
+
if (core == 2) return warpHypertetra(p, baseF);
|
|
337
|
+
return p;
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
// ---- Geometry Functions ----
|
|
341
|
+
float tetraLattice(vec3 p, float gs) { vec3 q = fract(p*gs)-0.5; float d1=length(q); float d2=length(q-vec3(0.4,0,0)); float d3=length(q-vec3(0,0.4,0)); float d4=length(q-vec3(0,0,0.4)); return max(1.0-smoothstep(0.0,0.04,min(min(d1,d2),min(d3,d4))), (1.0-smoothstep(0.0,0.02,abs(length(q.xy)-0.2)))*0.5); }
|
|
342
|
+
float cubeLattice(vec3 p, float gs) { vec3 g=fract(p*gs); vec3 e=min(g,1.0-g); return max((1.0-smoothstep(0.0,0.03,min(min(e.x,e.y),e.z)))*0.7, 1.0-smoothstep(0.45,0.5,max(max(abs(g.x-0.5),abs(g.y-0.5)),abs(g.z-0.5)))); }
|
|
343
|
+
float sphereLattice(vec3 p, float gs) { vec3 c=fract(p*gs)-0.5; return max(1.0-smoothstep(0.15,0.25,length(c)), (1.0-smoothstep(0.0,0.02,abs(length(c.xy)-0.3)))*0.6); }
|
|
344
|
+
float torusLattice(vec3 p, float gs) { vec3 c=fract(p*gs)-0.5; float td=length(vec2(length(c.xy)-0.3,c.z)); return 1.0-smoothstep(0.08,0.12,td); }
|
|
345
|
+
float kleinLattice(vec3 p, float gs) { vec3 c=fract(p*gs)-0.5; float u2=atan(c.y,c.x)/3.14159+1.0; float v2=c.z+0.5; vec3 kp=vec3((2.0+cos(u2*0.5))*cos(u2),(2.0+cos(u2*0.5))*sin(u2),sin(u2*0.5)+v2)*0.1; return 1.0-smoothstep(0.1,0.15,length(c-kp)); }
|
|
346
|
+
float fractalLattice(vec3 p, float gs) { vec3 c=abs(fract(p*gs)*2.0-1.0); float d=length(max(abs(c)-0.3,0.0)); for(int i=0;i<3;i++){c=abs(c*2.0-1.0);d=min(d,length(max(abs(c)-0.3,0.0))/pow(2.0,float(i+1)));} return 1.0-smoothstep(0.0,0.05,d); }
|
|
347
|
+
float waveLattice(vec3 p, float gs) { float t=u_time*0.001*u_speed; return (sin(p.x*gs*2.0+t*2.0)+sin(p.y*gs*1.8+t*1.5)+sin(p.z*gs*2.2+t*1.8))/6.0+0.5; }
|
|
348
|
+
float crystalLattice(vec3 p, float gs) { vec3 c=fract(p*gs)-0.5; float cr=max(max(abs(c.x)+abs(c.y),abs(c.y)+abs(c.z)),abs(c.x)+abs(c.z)); return max(1.0-smoothstep(0.3,0.4,cr), max(1.0-smoothstep(0.0,0.02,abs(abs(c.x)-0.35)), max(1.0-smoothstep(0.0,0.02,abs(abs(c.y)-0.35)), (1.0-smoothstep(0.0,0.02,abs(abs(c.z)-0.35)))))*0.5); }
|
|
349
|
+
|
|
350
|
+
float geometryFunc(vec3 wp, float gs) {
|
|
351
|
+
float base = mod(u_geometry, 8.0);
|
|
352
|
+
int gt = int(clamp(floor(base + 0.5), 0.0, 7.0));
|
|
353
|
+
if (gt == 0) return tetraLattice(wp, gs);
|
|
354
|
+
if (gt == 1) return cubeLattice(wp, gs);
|
|
355
|
+
if (gt == 2) return sphereLattice(wp, gs);
|
|
356
|
+
if (gt == 3) return torusLattice(wp, gs);
|
|
357
|
+
if (gt == 4) return kleinLattice(wp, gs);
|
|
358
|
+
if (gt == 5) return fractalLattice(wp, gs);
|
|
359
|
+
if (gt == 6) return waveLattice(wp, gs);
|
|
360
|
+
if (gt == 7) return crystalLattice(wp, gs);
|
|
361
|
+
return cubeLattice(wp, gs);
|
|
362
|
+
}
|
|
363
|
+
`;
|
|
364
|
+
|
|
365
|
+
// System-specific main() functions
|
|
366
|
+
const systemMain = {
|
|
367
|
+
faceted: `
|
|
368
|
+
void main() {
|
|
369
|
+
vec2 uv = vUv * 2.0 - 1.0;
|
|
370
|
+
float aspect = u_resolution.x / u_resolution.y;
|
|
371
|
+
uv.x *= aspect;
|
|
372
|
+
|
|
373
|
+
float t = u_time * 0.0001 * u_speed;
|
|
374
|
+
vec4 p = vec4(uv * 3.0, sin(t * 3.0), cos(t * 2.0));
|
|
375
|
+
|
|
376
|
+
// Apply 6D rotation
|
|
377
|
+
p = rotateXY(u_rot4dXY) * rotateXZ(u_rot4dXZ) * rotateYZ(u_rot4dYZ) *
|
|
378
|
+
rotateXW(u_rot4dXW) * rotateYW(u_rot4dYW) * rotateZW(u_rot4dZW) * p;
|
|
379
|
+
|
|
380
|
+
vec3 proj = project4Dto3D(p);
|
|
381
|
+
vec3 warped = applyCoreWarp(proj, u_geometry);
|
|
382
|
+
float gs = u_gridDensity * 0.08;
|
|
383
|
+
|
|
384
|
+
float value = geometryFunc(warped, gs) * u_morphFactor;
|
|
385
|
+
value += sin(proj.x * 7.0) * cos(proj.y * 11.0) * sin(proj.z * 13.0) * u_chaos;
|
|
386
|
+
|
|
387
|
+
// Audio reactivity
|
|
388
|
+
float audioBoost = u_bass * 0.3 + u_mid * 0.2 + u_high * 0.1;
|
|
389
|
+
value += audioBoost;
|
|
390
|
+
|
|
391
|
+
float gi = pow(1.0 - clamp(abs(value * 0.8), 0.0, 1.0), 1.5) * u_intensity;
|
|
392
|
+
vec3 color = hsl2rgb(u_hue, u_saturation, 0.3 + gi * 0.5) * gi * 2.0;
|
|
393
|
+
|
|
394
|
+
gl_FragColor = vec4(color, gi);
|
|
395
|
+
}
|
|
396
|
+
`,
|
|
397
|
+
quantum: `
|
|
398
|
+
void main() {
|
|
399
|
+
vec2 uv = vUv * 2.0 - 1.0;
|
|
400
|
+
float aspect = u_resolution.x / u_resolution.y;
|
|
401
|
+
uv.x *= aspect;
|
|
402
|
+
|
|
403
|
+
float t = u_time * 0.0001 * u_speed;
|
|
404
|
+
vec4 p = vec4(uv * 3.0, sin(t * 3.0), cos(t * 2.0));
|
|
405
|
+
|
|
406
|
+
// Apply 6D rotation
|
|
407
|
+
p = rotateXY(u_rot4dXY) * rotateXZ(u_rot4dXZ) * rotateYZ(u_rot4dYZ) *
|
|
408
|
+
rotateXW(u_rot4dXW) * rotateYW(u_rot4dYW) * rotateZW(u_rot4dZW) * p;
|
|
409
|
+
|
|
410
|
+
vec3 proj = project4Dto3D(p);
|
|
411
|
+
vec3 warped = applyCoreWarp(proj, u_geometry);
|
|
412
|
+
float gs = u_gridDensity * 0.08;
|
|
413
|
+
|
|
414
|
+
float value = geometryFunc(warped, gs) * u_morphFactor;
|
|
415
|
+
float noise = sin(proj.x * 7.0) * cos(proj.y * 11.0) * sin(proj.z * 13.0);
|
|
416
|
+
value += noise * u_chaos;
|
|
417
|
+
|
|
418
|
+
// Audio reactivity (quantum-enhanced)
|
|
419
|
+
float audioGrid = u_bass * 40.0;
|
|
420
|
+
float audioMorph = u_mid * 1.2;
|
|
421
|
+
value += u_bass * 0.4;
|
|
422
|
+
|
|
423
|
+
float gi = pow(1.0 - clamp(abs(value * 0.8), 0.0, 1.0), 1.5);
|
|
424
|
+
gi += u_clickIntensity * 0.3;
|
|
425
|
+
|
|
426
|
+
// Holographic shimmer
|
|
427
|
+
float shimmer = sin(uv.x * 20.0 + t * 50.0) * cos(uv.y * 15.0 + t * 30.0) * 0.1;
|
|
428
|
+
gi += shimmer * gi;
|
|
429
|
+
gi *= u_intensity;
|
|
430
|
+
|
|
431
|
+
vec3 color = hsl2rgb(u_hue, u_saturation, 0.3 + gi * 0.5);
|
|
432
|
+
|
|
433
|
+
// RGB separation for quantum effect
|
|
434
|
+
float sep = gi * 0.05;
|
|
435
|
+
float dist = length(uv);
|
|
436
|
+
float angle = atan(uv.y, uv.x);
|
|
437
|
+
color.r += sin(dist * 30.0 + angle * 10.0 + u_time * 0.004) * sep;
|
|
438
|
+
color.g += cos(dist * 25.0 + angle * 8.0 + u_time * 0.0035) * sep * 0.9;
|
|
439
|
+
color.b += sin(dist * 35.0 + angle * 12.0 + u_time * 0.0045) * sep * 1.1;
|
|
440
|
+
|
|
441
|
+
gl_FragColor = vec4(color * gi * 2.0, gi);
|
|
442
|
+
}
|
|
443
|
+
`,
|
|
444
|
+
holographic: `
|
|
445
|
+
void main() {
|
|
446
|
+
vec2 uv = vUv * 2.0 - 1.0;
|
|
447
|
+
float aspect = u_resolution.x / u_resolution.y;
|
|
448
|
+
uv.x *= aspect;
|
|
449
|
+
|
|
450
|
+
float t = u_time * 0.0001 * u_speed;
|
|
451
|
+
vec4 p = vec4(uv * 3.0, sin(t * 3.0), cos(t * 2.0));
|
|
452
|
+
|
|
453
|
+
p = rotateXY(u_rot4dXY) * rotateXZ(u_rot4dXZ) * rotateYZ(u_rot4dYZ) *
|
|
454
|
+
rotateXW(u_rot4dXW) * rotateYW(u_rot4dYW) * rotateZW(u_rot4dZW) * p;
|
|
455
|
+
|
|
456
|
+
vec3 proj = project4Dto3D(p);
|
|
457
|
+
vec3 warped = applyCoreWarp(proj, u_geometry);
|
|
458
|
+
float gs = u_gridDensity * 0.08;
|
|
459
|
+
|
|
460
|
+
float value = geometryFunc(warped, gs) * u_morphFactor;
|
|
461
|
+
value += sin(proj.x * 7.0) * cos(proj.y * 11.0) * u_chaos * 0.3;
|
|
462
|
+
|
|
463
|
+
// Audio reactivity
|
|
464
|
+
value += u_bass * 0.5 + u_mid * 0.3;
|
|
465
|
+
|
|
466
|
+
float gi = pow(clamp(value, 0.0, 1.0), 1.5) * u_intensity;
|
|
467
|
+
|
|
468
|
+
// 5-layer holographic simulation (blended single pass)
|
|
469
|
+
vec3 bgColor = hsl2rgb(u_hue, u_saturation * 0.7, 0.15) * (0.3 + gi * 0.4);
|
|
470
|
+
vec3 contentColor = hsl2rgb(u_hue, u_saturation, 0.55) * (gi * 1.2 + 0.2);
|
|
471
|
+
vec3 highlightColor = hsl2rgb(fract(u_hue + 0.15), u_saturation, 0.6) * pow(gi, 3.0) * 1.5;
|
|
472
|
+
vec3 accentColor = hsl2rgb(fract(u_hue + 0.67), u_saturation, 0.5) * (sin(value * 50.0 + t * 100.0) * 0.5 + 0.5) * gi;
|
|
473
|
+
|
|
474
|
+
// Glassmorphic blend
|
|
475
|
+
float glassFresnelLike = pow(1.0 - abs(dot(normalize(vec3(uv, 1.0)), vec3(0.0, 0.0, 1.0))), 2.0);
|
|
476
|
+
vec3 color = bgColor * 0.4 + contentColor * 0.5 + highlightColor * 0.3 + accentColor * 0.15;
|
|
477
|
+
color += glassFresnelLike * hsl2rgb(fract(u_hue + 0.33), u_saturation * 0.9, 0.3) * 0.2;
|
|
478
|
+
|
|
479
|
+
// Particle overlay
|
|
480
|
+
vec2 particleUV = uv * 12.0;
|
|
481
|
+
vec2 pid = floor(particleUV);
|
|
482
|
+
float pDist = length(fract(particleUV) - 0.5);
|
|
483
|
+
float pAlpha = sin(t * 30.0 + dot(pid, vec2(127.1, 311.7))) * 0.5 + 0.5;
|
|
484
|
+
float particles = (1.0 - smoothstep(0.05, 0.2, pDist)) * pAlpha * 0.3;
|
|
485
|
+
color += particles * hsl2rgb(fract(u_hue + 0.15), u_saturation * 0.5, 0.85);
|
|
486
|
+
|
|
487
|
+
gl_FragColor = vec4(color, gi * 0.8 + 0.1);
|
|
488
|
+
}
|
|
489
|
+
`
|
|
490
|
+
};
|
|
491
|
+
|
|
492
|
+
const mainCode = systemMain[system] || systemMain.faceted;
|
|
493
|
+
return preamble + mainCode;
|
|
494
|
+
}
|
|
495
|
+
|
|
496
|
+
/**
|
|
497
|
+
* Returns the uniform definitions as a plain object.
|
|
498
|
+
*
|
|
499
|
+
* Keys are GLSL uniform names (e.g. 'u_time'), values are
|
|
500
|
+
* objects with { value: defaultValue } suitable for Three.js.
|
|
501
|
+
*
|
|
502
|
+
* @returns {Object} Uniform definitions map
|
|
503
|
+
*/
|
|
504
|
+
static getUniformsDefinition() {
|
|
505
|
+
const uniforms = {};
|
|
506
|
+
for (const [key, defaultValue] of Object.entries(UNIFORM_DEFAULTS)) {
|
|
507
|
+
if (key === 'u_resolution') {
|
|
508
|
+
uniforms[key] = { value: [...defaultValue] };
|
|
509
|
+
} else {
|
|
510
|
+
uniforms[key] = { value: defaultValue };
|
|
511
|
+
}
|
|
512
|
+
}
|
|
513
|
+
return uniforms;
|
|
514
|
+
}
|
|
515
|
+
|
|
516
|
+
/**
|
|
517
|
+
* Returns the list of available system names for fragment shaders.
|
|
518
|
+
* @returns {string[]}
|
|
519
|
+
*/
|
|
520
|
+
static getAvailableSystems() {
|
|
521
|
+
return ['quantum', 'faceted', 'holographic'];
|
|
522
|
+
}
|
|
523
|
+
|
|
524
|
+
/**
|
|
525
|
+
* Generates a complete NPM package structure for @vib3/three.
|
|
526
|
+
*
|
|
527
|
+
* @returns {Object.<string, string|object>} Map of file path to file content
|
|
528
|
+
*/
|
|
529
|
+
static generatePackage() {
|
|
530
|
+
return {
|
|
531
|
+
'package.json': {
|
|
532
|
+
name: '@vib3/three',
|
|
533
|
+
version: '1.0.0',
|
|
534
|
+
description: 'Three.js ShaderMaterial integration for VIB3+ 4D Visualization Engine',
|
|
535
|
+
main: 'dist/index.js',
|
|
536
|
+
module: 'src/index.js',
|
|
537
|
+
types: 'dist/index.d.ts',
|
|
538
|
+
files: ['dist/', 'src/'],
|
|
539
|
+
exports: {
|
|
540
|
+
'.': {
|
|
541
|
+
import: './src/index.js',
|
|
542
|
+
require: './dist/index.cjs'
|
|
543
|
+
}
|
|
544
|
+
},
|
|
545
|
+
scripts: {
|
|
546
|
+
build: 'rollup -c',
|
|
547
|
+
dev: 'rollup -c -w',
|
|
548
|
+
prepublishOnly: 'npm run build'
|
|
549
|
+
},
|
|
550
|
+
peerDependencies: {
|
|
551
|
+
three: '>=0.150.0'
|
|
552
|
+
},
|
|
553
|
+
devDependencies: {
|
|
554
|
+
'@rollup/plugin-node-resolve': '^15.0.0',
|
|
555
|
+
rollup: '^4.0.0',
|
|
556
|
+
three: '^0.170.0'
|
|
557
|
+
},
|
|
558
|
+
keywords: ['vib3', 'three', 'threejs', '4d', 'shader', 'webgl', 'visualization', 'glsl'],
|
|
559
|
+
license: 'MIT',
|
|
560
|
+
repository: {
|
|
561
|
+
type: 'git',
|
|
562
|
+
url: 'https://github.com/clear-seas/vib3-three'
|
|
563
|
+
},
|
|
564
|
+
author: 'Clear Seas Solutions LLC'
|
|
565
|
+
},
|
|
566
|
+
|
|
567
|
+
'src/index.js': `/**
|
|
568
|
+
* @vib3/three - Three.js ShaderMaterial integration for VIB3+ 4D Visualization Engine
|
|
569
|
+
* @module @vib3/three
|
|
570
|
+
*/
|
|
571
|
+
export { Vib3ThreeJsPackage } from './Vib3ThreeJsPackage.js';
|
|
572
|
+
`,
|
|
573
|
+
|
|
574
|
+
'src/Vib3ThreeJsPackage.js': `// Re-export from the main integration module
|
|
575
|
+
// In a standalone package, the full class would be inlined here.
|
|
576
|
+
export { Vib3ThreeJsPackage } from '../../integrations/ThreeJsPackage.js';
|
|
577
|
+
`,
|
|
578
|
+
|
|
579
|
+
'README.md': `# @vib3/three
|
|
580
|
+
|
|
581
|
+
Three.js ShaderMaterial integration for the VIB3+ 4D Visualization Engine.
|
|
582
|
+
|
|
583
|
+
## Installation
|
|
584
|
+
|
|
585
|
+
\`\`\`bash
|
|
586
|
+
npm install @vib3/three three
|
|
587
|
+
\`\`\`
|
|
588
|
+
|
|
589
|
+
## Quick Start
|
|
590
|
+
|
|
591
|
+
\`\`\`javascript
|
|
592
|
+
import * as THREE from 'three';
|
|
593
|
+
import { Vib3ThreeJsPackage } from '@vib3/three';
|
|
594
|
+
|
|
595
|
+
// Create scene
|
|
596
|
+
const scene = new THREE.Scene();
|
|
597
|
+
const camera = new THREE.OrthographicCamera(-1, 1, 1, -1, 0.1, 10);
|
|
598
|
+
camera.position.z = 1;
|
|
599
|
+
|
|
600
|
+
const renderer = new THREE.WebGLRenderer({ alpha: true });
|
|
601
|
+
renderer.setSize(window.innerWidth, window.innerHeight);
|
|
602
|
+
document.body.appendChild(renderer.domElement);
|
|
603
|
+
|
|
604
|
+
// Create VIB3 material
|
|
605
|
+
const config = Vib3ThreeJsPackage.getShaderMaterial({
|
|
606
|
+
system: 'quantum',
|
|
607
|
+
width: window.innerWidth,
|
|
608
|
+
height: window.innerHeight,
|
|
609
|
+
initialParams: { hue: 270, geometry: 12, intensity: 0.7 }
|
|
610
|
+
});
|
|
611
|
+
|
|
612
|
+
const material = new THREE.ShaderMaterial(config);
|
|
613
|
+
const mesh = new THREE.Mesh(new THREE.PlaneGeometry(2, 2), material);
|
|
614
|
+
scene.add(mesh);
|
|
615
|
+
|
|
616
|
+
// Animation loop
|
|
617
|
+
function animate() {
|
|
618
|
+
requestAnimationFrame(animate);
|
|
619
|
+
config.update(performance.now());
|
|
620
|
+
renderer.render(scene, camera);
|
|
621
|
+
}
|
|
622
|
+
animate();
|
|
623
|
+
|
|
624
|
+
// Update parameters dynamically
|
|
625
|
+
config.setParameter('hue', 180);
|
|
626
|
+
config.setParameter('geometry', 5);
|
|
627
|
+
config.setParameters({ chaos: 0.5, speed: 2.0 });
|
|
628
|
+
\`\`\`
|
|
629
|
+
|
|
630
|
+
## API
|
|
631
|
+
|
|
632
|
+
### Vib3ThreeJsPackage.getShaderMaterial(options)
|
|
633
|
+
|
|
634
|
+
Returns a Three.js ShaderMaterial configuration object.
|
|
635
|
+
|
|
636
|
+
| Option | Type | Default | Description |
|
|
637
|
+
|--------|------|---------|-------------|
|
|
638
|
+
| system | string | 'faceted' | VIB3 system: quantum, faceted, holographic |
|
|
639
|
+
| transparent | boolean | true | Enable transparency |
|
|
640
|
+
| width | number | 1024 | Resolution width |
|
|
641
|
+
| height | number | 1024 | Resolution height |
|
|
642
|
+
| initialParams | object | {} | Initial parameter overrides |
|
|
643
|
+
|
|
644
|
+
### Material Methods
|
|
645
|
+
|
|
646
|
+
| Method | Description |
|
|
647
|
+
|--------|-------------|
|
|
648
|
+
| update(timeMs) | Update time uniform (call each frame) |
|
|
649
|
+
| setParameter(name, value) | Set a single VIB3 parameter |
|
|
650
|
+
| setParameters(params) | Set multiple parameters at once |
|
|
651
|
+
| setResolution(w, h) | Update resolution on resize |
|
|
652
|
+
| setAudio(bass, mid, high) | Feed audio levels for reactivity |
|
|
653
|
+
|
|
654
|
+
## License
|
|
655
|
+
|
|
656
|
+
MIT - Clear Seas Solutions LLC
|
|
657
|
+
`
|
|
658
|
+
};
|
|
659
|
+
}
|
|
660
|
+
}
|