@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.
Files changed (258) hide show
  1. package/CHANGELOG.md +118 -0
  2. package/DOCS/BLUEPRINT_EXECUTION_PLAN_2026-01-07.md +34 -0
  3. package/DOCS/CI_TESTING.md +38 -0
  4. package/DOCS/CLI_ONBOARDING.md +75 -0
  5. package/DOCS/CONTROL_REFERENCE.md +64 -0
  6. package/DOCS/DEV_TRACK_ANALYSIS.md +77 -0
  7. package/DOCS/DEV_TRACK_PLAN_2026-01-07.md +42 -0
  8. package/DOCS/DEV_TRACK_SESSION_2026-01-31.md +220 -0
  9. package/DOCS/ENV_SETUP.md +189 -0
  10. package/DOCS/EXPORT_FORMATS.md +417 -0
  11. package/DOCS/GPU_DISPOSAL_GUIDE.md +21 -0
  12. package/DOCS/LICENSING_TIERS.md +275 -0
  13. package/DOCS/MASTER_PLAN_2026-01-31.md +570 -0
  14. package/DOCS/OBS_SETUP_GUIDE.md +98 -0
  15. package/DOCS/PROJECT_SETUP.md +66 -0
  16. package/DOCS/RENDERER_LIFECYCLE.md +40 -0
  17. package/DOCS/REPO_MANIFEST.md +121 -0
  18. package/DOCS/SESSION_014_PLAN.md +195 -0
  19. package/DOCS/SESSION_LOG_2026-01-07.md +56 -0
  20. package/DOCS/STRATEGIC_BLUEPRINT_2026-01-07.md +72 -0
  21. package/DOCS/SYSTEM_AUDIT_2026-01-30.md +738 -0
  22. package/DOCS/SYSTEM_INVENTORY.md +520 -0
  23. package/DOCS/TELEMETRY_EXPORTS.md +34 -0
  24. package/DOCS/WEBGPU_STATUS.md +38 -0
  25. package/DOCS/XR_BENCHMARKS.md +608 -0
  26. package/LICENSE +21 -0
  27. package/README.md +426 -0
  28. package/docs/.nojekyll +0 -0
  29. package/docs/01-dissolution_of_euclidean_hegemony.html +346 -0
  30. package/docs/02-hyperspatial_ego_death.html +346 -0
  31. package/docs/03-post_cartesian_sublime.html +346 -0
  32. package/docs/04-crystalline_void_meditation.html +346 -0
  33. package/docs/05-quantum_decoherence_ballet.html +346 -0
  34. package/docs/06-dissolution_of_euclidean_hegemony.html +346 -0
  35. package/docs/07-hyperspatial_ego_death.html +346 -0
  36. package/docs/08-post_cartesian_sublime.html +346 -0
  37. package/docs/09-crystalline_void_meditation.html +346 -0
  38. package/docs/10-quantum_decoherence_ballet.html +346 -0
  39. package/docs/11-dissolution_of_euclidean_hegemony.html +346 -0
  40. package/docs/12-hyperspatial_ego_death.html +346 -0
  41. package/docs/13-post_cartesian_sublime.html +346 -0
  42. package/docs/index.html +794 -0
  43. package/docs/test-hub.html +441 -0
  44. package/docs/url-state.js +102 -0
  45. package/docs/vib3-exports/01-quantum-quantum-tetrahedron-lattice.html +489 -0
  46. package/docs/vib3-exports/02-quantum-quantum-hypersphere-matrix.html +489 -0
  47. package/docs/vib3-exports/03-quantum-quantum-hypertetra-fractal.html +489 -0
  48. package/docs/vib3-exports/04-faceted-faceted-crystal-structure.html +407 -0
  49. package/docs/vib3-exports/05-faceted-faceted-klein-bottle.html +407 -0
  50. package/docs/vib3-exports/06-faceted-faceted-hypertetra-torus.html +407 -0
  51. package/docs/vib3-exports/07-holographic-holographic-wave-field.html +457 -0
  52. package/docs/vib3-exports/08-holographic-holographic-hypersphere-sphere.html +457 -0
  53. package/docs/vib3-exports/09-holographic-holographic-hypertetra-crystal.html +457 -0
  54. package/docs/vib3-exports/index.html +238 -0
  55. package/docs/webgpu-live.html +702 -0
  56. package/package.json +367 -0
  57. package/src/advanced/AIPresetGenerator.js +777 -0
  58. package/src/advanced/MIDIController.js +703 -0
  59. package/src/advanced/OffscreenWorker.js +1051 -0
  60. package/src/advanced/WebGPUCompute.js +1051 -0
  61. package/src/advanced/WebXRRenderer.js +680 -0
  62. package/src/agent/cli/AgentCLI.js +615 -0
  63. package/src/agent/cli/index.js +14 -0
  64. package/src/agent/index.js +73 -0
  65. package/src/agent/mcp/MCPServer.js +950 -0
  66. package/src/agent/mcp/index.js +9 -0
  67. package/src/agent/mcp/tools.js +548 -0
  68. package/src/agent/telemetry/EventStream.js +669 -0
  69. package/src/agent/telemetry/Instrumentation.js +618 -0
  70. package/src/agent/telemetry/TelemetryExporters.js +427 -0
  71. package/src/agent/telemetry/TelemetryService.js +464 -0
  72. package/src/agent/telemetry/index.js +52 -0
  73. package/src/benchmarks/BenchmarkRunner.js +381 -0
  74. package/src/benchmarks/MetricsCollector.js +299 -0
  75. package/src/benchmarks/index.js +9 -0
  76. package/src/benchmarks/scenes.js +259 -0
  77. package/src/cli/index.js +675 -0
  78. package/src/config/ApiConfig.js +88 -0
  79. package/src/core/CanvasManager.js +217 -0
  80. package/src/core/ErrorReporter.js +117 -0
  81. package/src/core/ParameterMapper.js +333 -0
  82. package/src/core/Parameters.js +396 -0
  83. package/src/core/RendererContracts.js +200 -0
  84. package/src/core/UnifiedResourceManager.js +370 -0
  85. package/src/core/VIB3Engine.js +636 -0
  86. package/src/core/renderers/FacetedRendererAdapter.js +32 -0
  87. package/src/core/renderers/HolographicRendererAdapter.js +29 -0
  88. package/src/core/renderers/QuantumRendererAdapter.js +29 -0
  89. package/src/core/renderers/RendererLifecycleManager.js +63 -0
  90. package/src/creative/ColorPresetsSystem.js +980 -0
  91. package/src/creative/ParameterTimeline.js +1061 -0
  92. package/src/creative/PostProcessingPipeline.js +1113 -0
  93. package/src/creative/TransitionAnimator.js +683 -0
  94. package/src/export/CSSExporter.js +226 -0
  95. package/src/export/CardGeneratorBase.js +279 -0
  96. package/src/export/ExportManager.js +580 -0
  97. package/src/export/FacetedCardGenerator.js +279 -0
  98. package/src/export/HolographicCardGenerator.js +543 -0
  99. package/src/export/LottieExporter.js +552 -0
  100. package/src/export/QuantumCardGenerator.js +315 -0
  101. package/src/export/SVGExporter.js +519 -0
  102. package/src/export/ShaderExporter.js +903 -0
  103. package/src/export/TradingCardGenerator.js +3055 -0
  104. package/src/export/TradingCardManager.js +181 -0
  105. package/src/export/VIB3PackageExporter.js +559 -0
  106. package/src/export/index.js +14 -0
  107. package/src/export/systems/TradingCardSystemFaceted.js +494 -0
  108. package/src/export/systems/TradingCardSystemHolographic.js +452 -0
  109. package/src/export/systems/TradingCardSystemQuantum.js +411 -0
  110. package/src/faceted/FacetedSystem.js +963 -0
  111. package/src/features/CollectionManager.js +433 -0
  112. package/src/gallery/CollectionManager.js +240 -0
  113. package/src/gallery/GallerySystem.js +485 -0
  114. package/src/geometry/GeometryFactory.js +314 -0
  115. package/src/geometry/GeometryLibrary.js +72 -0
  116. package/src/geometry/buffers/BufferBuilder.js +338 -0
  117. package/src/geometry/buffers/index.js +18 -0
  118. package/src/geometry/generators/Crystal.js +420 -0
  119. package/src/geometry/generators/Fractal.js +298 -0
  120. package/src/geometry/generators/KleinBottle.js +197 -0
  121. package/src/geometry/generators/Sphere.js +192 -0
  122. package/src/geometry/generators/Tesseract.js +160 -0
  123. package/src/geometry/generators/Tetrahedron.js +225 -0
  124. package/src/geometry/generators/Torus.js +304 -0
  125. package/src/geometry/generators/Wave.js +341 -0
  126. package/src/geometry/index.js +142 -0
  127. package/src/geometry/warp/HypersphereCore.js +211 -0
  128. package/src/geometry/warp/HypertetraCore.js +386 -0
  129. package/src/geometry/warp/index.js +57 -0
  130. package/src/holograms/HolographicVisualizer.js +1073 -0
  131. package/src/holograms/RealHolographicSystem.js +966 -0
  132. package/src/holograms/variantRegistry.js +69 -0
  133. package/src/integrations/FigmaPlugin.js +854 -0
  134. package/src/integrations/OBSMode.js +754 -0
  135. package/src/integrations/ThreeJsPackage.js +660 -0
  136. package/src/integrations/TouchDesignerExport.js +552 -0
  137. package/src/integrations/frameworks/Vib3React.js +591 -0
  138. package/src/integrations/frameworks/Vib3Svelte.js +654 -0
  139. package/src/integrations/frameworks/Vib3Vue.js +628 -0
  140. package/src/llm/LLMParameterInterface.js +240 -0
  141. package/src/llm/LLMParameterUI.js +577 -0
  142. package/src/math/Mat4x4.js +708 -0
  143. package/src/math/Projection.js +341 -0
  144. package/src/math/Rotor4D.js +637 -0
  145. package/src/math/Vec4.js +476 -0
  146. package/src/math/constants.js +164 -0
  147. package/src/math/index.js +68 -0
  148. package/src/math/projections.js +54 -0
  149. package/src/math/rotations.js +196 -0
  150. package/src/quantum/QuantumEngine.js +906 -0
  151. package/src/quantum/QuantumVisualizer.js +1103 -0
  152. package/src/reactivity/ReactivityConfig.js +499 -0
  153. package/src/reactivity/ReactivityManager.js +586 -0
  154. package/src/reactivity/SpatialInputSystem.js +1783 -0
  155. package/src/reactivity/index.js +93 -0
  156. package/src/render/CommandBuffer.js +465 -0
  157. package/src/render/MultiCanvasBridge.js +340 -0
  158. package/src/render/RenderCommand.js +514 -0
  159. package/src/render/RenderResourceRegistry.js +523 -0
  160. package/src/render/RenderState.js +552 -0
  161. package/src/render/RenderTarget.js +512 -0
  162. package/src/render/ShaderLoader.js +253 -0
  163. package/src/render/ShaderProgram.js +599 -0
  164. package/src/render/UnifiedRenderBridge.js +496 -0
  165. package/src/render/backends/WebGLBackend.js +1108 -0
  166. package/src/render/backends/WebGPUBackend.js +1409 -0
  167. package/src/render/commands/CommandBufferExecutor.js +607 -0
  168. package/src/render/commands/RenderCommandBuffer.js +661 -0
  169. package/src/render/commands/index.js +17 -0
  170. package/src/render/index.js +367 -0
  171. package/src/scene/Disposable.js +498 -0
  172. package/src/scene/MemoryPool.js +618 -0
  173. package/src/scene/Node4D.js +697 -0
  174. package/src/scene/ResourceManager.js +599 -0
  175. package/src/scene/Scene4D.js +540 -0
  176. package/src/scene/index.js +98 -0
  177. package/src/schemas/error.schema.json +84 -0
  178. package/src/schemas/extension.schema.json +88 -0
  179. package/src/schemas/index.js +214 -0
  180. package/src/schemas/parameters.schema.json +142 -0
  181. package/src/schemas/tool-pack.schema.json +44 -0
  182. package/src/schemas/tool-response.schema.json +127 -0
  183. package/src/shaders/common/fullscreen.vert.glsl +5 -0
  184. package/src/shaders/common/fullscreen.vert.wgsl +17 -0
  185. package/src/shaders/common/geometry24.glsl +65 -0
  186. package/src/shaders/common/geometry24.wgsl +54 -0
  187. package/src/shaders/common/rotation4d.glsl +85 -0
  188. package/src/shaders/common/rotation4d.wgsl +86 -0
  189. package/src/shaders/common/uniforms.glsl +44 -0
  190. package/src/shaders/common/uniforms.wgsl +48 -0
  191. package/src/shaders/faceted/faceted.frag.glsl +129 -0
  192. package/src/shaders/faceted/faceted.frag.wgsl +164 -0
  193. package/src/shaders/holographic/holographic.frag.glsl +406 -0
  194. package/src/shaders/holographic/holographic.frag.wgsl +185 -0
  195. package/src/shaders/quantum/quantum.frag.glsl +513 -0
  196. package/src/shaders/quantum/quantum.frag.wgsl +361 -0
  197. package/src/testing/ParallelTestFramework.js +519 -0
  198. package/src/testing/__snapshots__/exportFormats.test.js.snap +24 -0
  199. package/src/testing/exportFormats.test.js +8 -0
  200. package/src/testing/projections.test.js +14 -0
  201. package/src/testing/rotations.test.js +37 -0
  202. package/src/ui/InteractivityMenu.js +516 -0
  203. package/src/ui/StatusManager.js +96 -0
  204. package/src/ui/adaptive/renderers/webgpu/BufferLayout.ts +252 -0
  205. package/src/ui/adaptive/renderers/webgpu/PolytopeInstanceBuffer.ts +144 -0
  206. package/src/ui/adaptive/renderers/webgpu/TripleBufferedUniform.ts +170 -0
  207. package/src/ui/adaptive/renderers/webgpu/WebGPURenderer.ts +735 -0
  208. package/src/ui/adaptive/renderers/webgpu/index.ts +112 -0
  209. package/src/variations/VariationManager.js +431 -0
  210. package/src/viewer/AudioReactivity.js +505 -0
  211. package/src/viewer/CardBending.js +481 -0
  212. package/src/viewer/GalleryUI.js +832 -0
  213. package/src/viewer/ReactivityManager.js +590 -0
  214. package/src/viewer/TradingCardExporter.js +600 -0
  215. package/src/viewer/ViewerPortal.js +374 -0
  216. package/src/viewer/index.js +12 -0
  217. package/src/wasm/WasmLoader.js +296 -0
  218. package/src/wasm/index.js +132 -0
  219. package/tools/agentic/mcpTools.js +88 -0
  220. package/tools/cli/agent-cli.js +92 -0
  221. package/tools/export/formats.js +24 -0
  222. package/tools/math/rotation-baseline.mjs +64 -0
  223. package/tools/shader-sync-verify.js +937 -0
  224. package/tools/telemetry/manifestPipeline.js +141 -0
  225. package/tools/telemetry/telemetryEvents.js +35 -0
  226. package/types/adaptive-sdk.d.ts +185 -0
  227. package/types/advanced/AIPresetGenerator.d.ts +81 -0
  228. package/types/advanced/MIDIController.d.ts +100 -0
  229. package/types/advanced/OffscreenWorker.d.ts +82 -0
  230. package/types/advanced/WebGPUCompute.d.ts +52 -0
  231. package/types/advanced/WebXRRenderer.d.ts +77 -0
  232. package/types/advanced/index.d.ts +46 -0
  233. package/types/core/ErrorReporter.d.ts +50 -0
  234. package/types/core/VIB3Engine.d.ts +204 -0
  235. package/types/creative/ColorPresetsSystem.d.ts +91 -0
  236. package/types/creative/ParameterTimeline.d.ts +74 -0
  237. package/types/creative/PostProcessingPipeline.d.ts +109 -0
  238. package/types/creative/TransitionAnimator.d.ts +71 -0
  239. package/types/creative/index.d.ts +35 -0
  240. package/types/integrations/FigmaPlugin.d.ts +46 -0
  241. package/types/integrations/OBSMode.d.ts +74 -0
  242. package/types/integrations/ThreeJsPackage.d.ts +62 -0
  243. package/types/integrations/TouchDesignerExport.d.ts +36 -0
  244. package/types/integrations/Vib3React.d.ts +74 -0
  245. package/types/integrations/Vib3Svelte.d.ts +63 -0
  246. package/types/integrations/Vib3Vue.d.ts +55 -0
  247. package/types/integrations/index.d.ts +52 -0
  248. package/types/reactivity/SpatialInputSystem.d.ts +173 -0
  249. package/types/reactivity/index.d.ts +394 -0
  250. package/types/render/CommandBuffer.d.ts +169 -0
  251. package/types/render/RenderCommand.d.ts +312 -0
  252. package/types/render/RenderState.d.ts +279 -0
  253. package/types/render/RenderTarget.d.ts +254 -0
  254. package/types/render/ShaderProgram.d.ts +277 -0
  255. package/types/render/UnifiedRenderBridge.d.ts +143 -0
  256. package/types/render/WebGLBackend.d.ts +168 -0
  257. package/types/render/WebGPUBackend.d.ts +186 -0
  258. 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
+ }