@ntalmagor/3drize-viewer 0.1.2

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 (337) hide show
  1. package/dist/components/AnimatedObject.d.ts +22 -0
  2. package/dist/components/AnimatedObject.d.ts.map +1 -0
  3. package/dist/components/AnimatedObject.js +121 -0
  4. package/dist/components/CameraController.d.ts +16 -0
  5. package/dist/components/CameraController.d.ts.map +1 -0
  6. package/dist/components/CameraController.js +132 -0
  7. package/dist/components/Clouds.d.ts +14 -0
  8. package/dist/components/Clouds.d.ts.map +1 -0
  9. package/dist/components/Clouds.js +97 -0
  10. package/dist/components/CreatedObject.d.ts +12 -0
  11. package/dist/components/CreatedObject.d.ts.map +1 -0
  12. package/dist/components/CreatedObject.js +139 -0
  13. package/dist/components/CustomPrimitive.d.ts +12 -0
  14. package/dist/components/CustomPrimitive.d.ts.map +1 -0
  15. package/dist/components/CustomPrimitive.js +80 -0
  16. package/dist/components/EffectsGenerator.d.ts +10 -0
  17. package/dist/components/EffectsGenerator.d.ts.map +1 -0
  18. package/dist/components/EffectsGenerator.js +59 -0
  19. package/dist/components/EffectsGroup.d.ts +8 -0
  20. package/dist/components/EffectsGroup.d.ts.map +1 -0
  21. package/dist/components/EffectsGroup.js +8 -0
  22. package/dist/components/EnvironmentManager.d.ts +9 -0
  23. package/dist/components/EnvironmentManager.d.ts.map +1 -0
  24. package/dist/components/EnvironmentManager.js +47 -0
  25. package/dist/components/Frame.d.ts +26 -0
  26. package/dist/components/Frame.d.ts.map +1 -0
  27. package/dist/components/Frame.js +50 -0
  28. package/dist/components/FrameGeometry.d.ts +10 -0
  29. package/dist/components/FrameGeometry.d.ts.map +1 -0
  30. package/dist/components/FrameGeometry.js +17 -0
  31. package/dist/components/FrameImage.d.ts +14 -0
  32. package/dist/components/FrameImage.d.ts.map +1 -0
  33. package/dist/components/FrameImage.js +15 -0
  34. package/dist/components/Galaxy.d.ts +8 -0
  35. package/dist/components/Galaxy.d.ts.map +1 -0
  36. package/dist/components/Galaxy.js +9 -0
  37. package/dist/components/GalleryLayout.d.ts +10 -0
  38. package/dist/components/GalleryLayout.d.ts.map +1 -0
  39. package/dist/components/GalleryLayout.js +18 -0
  40. package/dist/components/GridHelper.d.ts +23 -0
  41. package/dist/components/GridHelper.d.ts.map +1 -0
  42. package/dist/components/GridHelper.js +38 -0
  43. package/dist/components/ImageGeometry.d.ts +14 -0
  44. package/dist/components/ImageGeometry.d.ts.map +1 -0
  45. package/dist/components/ImageGeometry.js +62 -0
  46. package/dist/components/Lensflare.d.ts +12 -0
  47. package/dist/components/Lensflare.d.ts.map +1 -0
  48. package/dist/components/Lensflare.js +66 -0
  49. package/dist/components/Letter.d.ts +20 -0
  50. package/dist/components/Letter.d.ts.map +1 -0
  51. package/dist/components/Letter.js +83 -0
  52. package/dist/components/Letters.d.ts +16 -0
  53. package/dist/components/Letters.d.ts.map +1 -0
  54. package/dist/components/Letters.js +18 -0
  55. package/dist/components/LightsManager.d.ts +9 -0
  56. package/dist/components/LightsManager.d.ts.map +1 -0
  57. package/dist/components/LightsManager.js +121 -0
  58. package/dist/components/Lines.d.ts +9 -0
  59. package/dist/components/Lines.d.ts.map +1 -0
  60. package/dist/components/Lines.js +19 -0
  61. package/dist/components/LoadingIndicator.d.ts +10 -0
  62. package/dist/components/LoadingIndicator.d.ts.map +1 -0
  63. package/dist/components/LoadingIndicator.js +143 -0
  64. package/dist/components/MaterialLibrary.d.ts +9 -0
  65. package/dist/components/MaterialLibrary.d.ts.map +1 -0
  66. package/dist/components/MaterialLibrary.js +57 -0
  67. package/dist/components/Moon.d.ts +13 -0
  68. package/dist/components/Moon.d.ts.map +1 -0
  69. package/dist/components/Moon.js +52 -0
  70. package/dist/components/ObjectNode.d.ts +11 -0
  71. package/dist/components/ObjectNode.d.ts.map +1 -0
  72. package/dist/components/ObjectNode.js +61 -0
  73. package/dist/components/ObjectsRenderer.d.ts +11 -0
  74. package/dist/components/ObjectsRenderer.d.ts.map +1 -0
  75. package/dist/components/ObjectsRenderer.js +19 -0
  76. package/dist/components/Ocean.d.ts +8 -0
  77. package/dist/components/Ocean.d.ts.map +1 -0
  78. package/dist/components/Ocean.js +111 -0
  79. package/dist/components/ParticlesR3f.d.ts +16 -0
  80. package/dist/components/ParticlesR3f.d.ts.map +1 -0
  81. package/dist/components/ParticlesR3f.js +66 -0
  82. package/dist/components/Path.d.ts +13 -0
  83. package/dist/components/Path.d.ts.map +1 -0
  84. package/dist/components/Path.js +41 -0
  85. package/dist/components/PathGeometry.d.ts +11 -0
  86. package/dist/components/PathGeometry.d.ts.map +1 -0
  87. package/dist/components/PathGeometry.js +109 -0
  88. package/dist/components/PathRenderer.d.ts +14 -0
  89. package/dist/components/PathRenderer.d.ts.map +1 -0
  90. package/dist/components/PathRenderer.js +33 -0
  91. package/dist/components/ProductionScene.d.ts +29 -0
  92. package/dist/components/ProductionScene.d.ts.map +1 -0
  93. package/dist/components/ProductionScene.js +18 -0
  94. package/dist/components/ProjectLoader.d.ts +14 -0
  95. package/dist/components/ProjectLoader.d.ts.map +1 -0
  96. package/dist/components/ProjectLoader.js +76 -0
  97. package/dist/components/Rain.d.ts +8 -0
  98. package/dist/components/Rain.d.ts.map +1 -0
  99. package/dist/components/Rain.js +133 -0
  100. package/dist/components/SceneBuilder.d.ts +5 -0
  101. package/dist/components/SceneBuilder.d.ts.map +1 -0
  102. package/dist/components/SceneBuilder.js +104 -0
  103. package/dist/components/SceneFog.d.ts +8 -0
  104. package/dist/components/SceneFog.d.ts.map +1 -0
  105. package/dist/components/SceneFog.js +19 -0
  106. package/dist/components/ShootingStar.d.ts +16 -0
  107. package/dist/components/ShootingStar.d.ts.map +1 -0
  108. package/dist/components/ShootingStar.js +92 -0
  109. package/dist/components/ShootingStars.d.ts +8 -0
  110. package/dist/components/ShootingStars.d.ts.map +1 -0
  111. package/dist/components/ShootingStars.js +40 -0
  112. package/dist/components/SkyController.d.ts +10 -0
  113. package/dist/components/SkyController.d.ts.map +1 -0
  114. package/dist/components/SkyController.js +159 -0
  115. package/dist/components/SkyMesh.d.ts +11 -0
  116. package/dist/components/SkyMesh.d.ts.map +1 -0
  117. package/dist/components/SkyMesh.js +36 -0
  118. package/dist/components/SkySystem.d.ts +34 -0
  119. package/dist/components/SkySystem.d.ts.map +1 -0
  120. package/dist/components/SkySystem.js +47 -0
  121. package/dist/components/Skybox.d.ts +12 -0
  122. package/dist/components/Skybox.d.ts.map +1 -0
  123. package/dist/components/Skybox.js +79 -0
  124. package/dist/components/Stars.d.ts +14 -0
  125. package/dist/components/Stars.d.ts.map +1 -0
  126. package/dist/components/Stars.js +165 -0
  127. package/dist/components/SunLight.d.ts +15 -0
  128. package/dist/components/SunLight.d.ts.map +1 -0
  129. package/dist/components/SunLight.js +57 -0
  130. package/dist/components/Text2D.d.ts +9 -0
  131. package/dist/components/Text2D.d.ts.map +1 -0
  132. package/dist/components/Text2D.js +56 -0
  133. package/dist/components/Text3D.d.ts +10 -0
  134. package/dist/components/Text3D.d.ts.map +1 -0
  135. package/dist/components/Text3D.js +8 -0
  136. package/dist/components/effects/AuraEffect.d.ts +10 -0
  137. package/dist/components/effects/AuraEffect.d.ts.map +1 -0
  138. package/dist/components/effects/AuraEffect.js +127 -0
  139. package/dist/components/effects/AuroraEffect.d.ts +10 -0
  140. package/dist/components/effects/AuroraEffect.d.ts.map +1 -0
  141. package/dist/components/effects/AuroraEffect.js +112 -0
  142. package/dist/components/effects/BlackHoleEffect.d.ts +10 -0
  143. package/dist/components/effects/BlackHoleEffect.d.ts.map +1 -0
  144. package/dist/components/effects/BlackHoleEffect.js +193 -0
  145. package/dist/components/effects/ConstellationEffect.d.ts +10 -0
  146. package/dist/components/effects/ConstellationEffect.d.ts.map +1 -0
  147. package/dist/components/effects/ConstellationEffect.js +189 -0
  148. package/dist/components/effects/DataStreamEffect.d.ts +10 -0
  149. package/dist/components/effects/DataStreamEffect.d.ts.map +1 -0
  150. package/dist/components/effects/DataStreamEffect.js +138 -0
  151. package/dist/components/effects/DnaHelixEffect.d.ts +10 -0
  152. package/dist/components/effects/DnaHelixEffect.d.ts.map +1 -0
  153. package/dist/components/effects/DnaHelixEffect.js +311 -0
  154. package/dist/components/effects/FireEffect.d.ts +10 -0
  155. package/dist/components/effects/FireEffect.d.ts.map +1 -0
  156. package/dist/components/effects/FireEffect.js +194 -0
  157. package/dist/components/effects/ForcefieldEffect.d.ts +10 -0
  158. package/dist/components/effects/ForcefieldEffect.d.ts.map +1 -0
  159. package/dist/components/effects/ForcefieldEffect.js +132 -0
  160. package/dist/components/effects/HologramEffect.d.ts +10 -0
  161. package/dist/components/effects/HologramEffect.d.ts.map +1 -0
  162. package/dist/components/effects/HologramEffect.js +143 -0
  163. package/dist/components/effects/IceCrystalsEffect.d.ts +10 -0
  164. package/dist/components/effects/IceCrystalsEffect.d.ts.map +1 -0
  165. package/dist/components/effects/IceCrystalsEffect.js +190 -0
  166. package/dist/components/effects/LightningEffect.d.ts +10 -0
  167. package/dist/components/effects/LightningEffect.d.ts.map +1 -0
  168. package/dist/components/effects/LightningEffect.js +240 -0
  169. package/dist/components/effects/MoleculesEffect.d.ts +10 -0
  170. package/dist/components/effects/MoleculesEffect.d.ts.map +1 -0
  171. package/dist/components/effects/MoleculesEffect.js +179 -0
  172. package/dist/components/effects/NeuralNetworkEffect.d.ts +10 -0
  173. package/dist/components/effects/NeuralNetworkEffect.d.ts.map +1 -0
  174. package/dist/components/effects/NeuralNetworkEffect.js +188 -0
  175. package/dist/components/effects/OrbEffect.d.ts +10 -0
  176. package/dist/components/effects/OrbEffect.d.ts.map +1 -0
  177. package/dist/components/effects/OrbEffect.js +291 -0
  178. package/dist/components/effects/PortalEffect.d.ts +10 -0
  179. package/dist/components/effects/PortalEffect.d.ts.map +1 -0
  180. package/dist/components/effects/PortalEffect.js +191 -0
  181. package/dist/components/effects/ShockwaveEffect.d.ts +10 -0
  182. package/dist/components/effects/ShockwaveEffect.d.ts.map +1 -0
  183. package/dist/components/effects/ShockwaveEffect.js +159 -0
  184. package/dist/components/effects/SmokePlumeEffect.d.ts +10 -0
  185. package/dist/components/effects/SmokePlumeEffect.d.ts.map +1 -0
  186. package/dist/components/effects/SmokePlumeEffect.js +141 -0
  187. package/dist/components/effects/SmokeRingEffect.d.ts +10 -0
  188. package/dist/components/effects/SmokeRingEffect.d.ts.map +1 -0
  189. package/dist/components/effects/SmokeRingEffect.js +158 -0
  190. package/dist/components/effects/VolumetricFogEffect.d.ts +10 -0
  191. package/dist/components/effects/VolumetricFogEffect.d.ts.map +1 -0
  192. package/dist/components/effects/VolumetricFogEffect.js +111 -0
  193. package/dist/constants.d.ts +2 -0
  194. package/dist/constants.d.ts.map +1 -0
  195. package/dist/constants.js +1 -0
  196. package/dist/hooks/index.d.ts +1 -0
  197. package/dist/hooks/index.d.ts.map +1 -0
  198. package/dist/hooks/index.js +1 -0
  199. package/dist/hooks/useAnimationEvents.d.ts +10 -0
  200. package/dist/hooks/useAnimationEvents.d.ts.map +1 -0
  201. package/dist/hooks/useAnimationEvents.js +28 -0
  202. package/dist/hooks/useCameraAnimation.d.ts +35 -0
  203. package/dist/hooks/useCameraAnimation.d.ts.map +1 -0
  204. package/dist/hooks/useCameraAnimation.js +268 -0
  205. package/dist/hooks/useContinuousEffects.d.ts +15 -0
  206. package/dist/hooks/useContinuousEffects.d.ts.map +1 -0
  207. package/dist/hooks/useContinuousEffects.js +173 -0
  208. package/dist/hooks/useCubeCamera.d.ts +19 -0
  209. package/dist/hooks/useCubeCamera.d.ts.map +1 -0
  210. package/dist/hooks/useCubeCamera.js +73 -0
  211. package/dist/hooks/useEnvironmentEffects.d.ts +12 -0
  212. package/dist/hooks/useEnvironmentEffects.d.ts.map +1 -0
  213. package/dist/hooks/useEnvironmentEffects.js +22 -0
  214. package/dist/hooks/useFrameEffects.d.ts +6 -0
  215. package/dist/hooks/useFrameEffects.d.ts.map +1 -0
  216. package/dist/hooks/useFrameEffects.js +19 -0
  217. package/dist/hooks/useInteractionEffects.d.ts +11 -0
  218. package/dist/hooks/useInteractionEffects.d.ts.map +1 -0
  219. package/dist/hooks/useInteractionEffects.js +35 -0
  220. package/dist/hooks/useKey.d.ts +26 -0
  221. package/dist/hooks/useKey.d.ts.map +1 -0
  222. package/dist/hooks/useKey.js +73 -0
  223. package/dist/hooks/useLightHandlers.d.ts +14 -0
  224. package/dist/hooks/useLightHandlers.d.ts.map +1 -0
  225. package/dist/hooks/useLightHandlers.js +116 -0
  226. package/dist/hooks/useMaterialApplication.d.ts +9 -0
  227. package/dist/hooks/useMaterialApplication.d.ts.map +1 -0
  228. package/dist/hooks/useMaterialApplication.js +113 -0
  229. package/dist/hooks/useMaterialOptions.d.ts +13 -0
  230. package/dist/hooks/useMaterialOptions.d.ts.map +1 -0
  231. package/dist/hooks/useMaterialOptions.js +110 -0
  232. package/dist/hooks/useMaterialUniforms.d.ts +18 -0
  233. package/dist/hooks/useMaterialUniforms.d.ts.map +1 -0
  234. package/dist/hooks/useMaterialUniforms.js +96 -0
  235. package/dist/hooks/useMeshController.d.ts +3 -0
  236. package/dist/hooks/useMeshController.d.ts.map +1 -0
  237. package/dist/hooks/useMeshController.js +152 -0
  238. package/dist/hooks/useMouseHandlers.d.ts +8 -0
  239. package/dist/hooks/useMouseHandlers.d.ts.map +1 -0
  240. package/dist/hooks/useMouseHandlers.js +47 -0
  241. package/dist/hooks/useObjectAnimation.d.ts +13 -0
  242. package/dist/hooks/useObjectAnimation.d.ts.map +1 -0
  243. package/dist/hooks/useObjectAnimation.js +11 -0
  244. package/dist/hooks/useObjectEdges.d.ts +4 -0
  245. package/dist/hooks/useObjectEdges.d.ts.map +1 -0
  246. package/dist/hooks/useObjectEdges.js +199 -0
  247. package/dist/hooks/useOrbitControls.d.ts +7 -0
  248. package/dist/hooks/useOrbitControls.d.ts.map +1 -0
  249. package/dist/hooks/useOrbitControls.js +9 -0
  250. package/dist/hooks/useParticlePositions.d.ts +19 -0
  251. package/dist/hooks/useParticlePositions.d.ts.map +1 -0
  252. package/dist/hooks/useParticlePositions.js +56 -0
  253. package/dist/hooks/useParticlesColors.d.ts +14 -0
  254. package/dist/hooks/useParticlesColors.d.ts.map +1 -0
  255. package/dist/hooks/useParticlesColors.js +27 -0
  256. package/dist/hooks/useParticlesTextures.d.ts +10 -0
  257. package/dist/hooks/useParticlesTextures.d.ts.map +1 -0
  258. package/dist/hooks/useParticlesTextures.js +23 -0
  259. package/dist/hooks/usePathAnimation.d.ts +26 -0
  260. package/dist/hooks/usePathAnimation.d.ts.map +1 -0
  261. package/dist/hooks/usePathAnimation.js +120 -0
  262. package/dist/hooks/useSkyAnimation.d.ts +14 -0
  263. package/dist/hooks/useSkyAnimation.d.ts.map +1 -0
  264. package/dist/hooks/useSkyAnimation.js +46 -0
  265. package/dist/hooks/useSkySystem.d.ts +26 -0
  266. package/dist/hooks/useSkySystem.d.ts.map +1 -0
  267. package/dist/hooks/useSkySystem.js +57 -0
  268. package/dist/hooks/useSkyUniforms.d.ts +18 -0
  269. package/dist/hooks/useSkyUniforms.d.ts.map +1 -0
  270. package/dist/hooks/useSkyUniforms.js +59 -0
  271. package/dist/hooks/useTransformControls.d.ts +6 -0
  272. package/dist/hooks/useTransformControls.d.ts.map +1 -0
  273. package/dist/hooks/useTransformControls.js +111 -0
  274. package/dist/hooks/useWaterEnvironment.d.ts +5 -0
  275. package/dist/hooks/useWaterEnvironment.d.ts.map +1 -0
  276. package/dist/hooks/useWaterEnvironment.js +27 -0
  277. package/dist/hooks/useWaterReflections.d.ts +17 -0
  278. package/dist/hooks/useWaterReflections.d.ts.map +1 -0
  279. package/dist/hooks/useWaterReflections.js +77 -0
  280. package/dist/index.d.ts +140 -0
  281. package/dist/index.d.ts.map +1 -0
  282. package/dist/index.js +109 -0
  283. package/dist/services/AnimationsManager.d.ts +33 -0
  284. package/dist/services/AnimationsManager.d.ts.map +1 -0
  285. package/dist/services/AnimationsManager.js +58 -0
  286. package/dist/services/FontManager.d.ts +32 -0
  287. package/dist/services/FontManager.d.ts.map +1 -0
  288. package/dist/services/FontManager.js +76 -0
  289. package/dist/services/TexturesManager.d.ts +17 -0
  290. package/dist/services/TexturesManager.d.ts.map +1 -0
  291. package/dist/services/TexturesManager.js +48 -0
  292. package/dist/shaders/RainMaterial.d.ts +34 -0
  293. package/dist/shaders/RainMaterial.d.ts.map +1 -0
  294. package/dist/shaders/RainMaterial.js +56 -0
  295. package/dist/shaders/ShaderEffectsMaterial.d.ts +279 -0
  296. package/dist/shaders/ShaderEffectsMaterial.d.ts.map +1 -0
  297. package/dist/shaders/ShaderEffectsMaterial.js +257 -0
  298. package/dist/shaders/ShootingStarMaterial.d.ts +14 -0
  299. package/dist/shaders/ShootingStarMaterial.d.ts.map +1 -0
  300. package/dist/shaders/ShootingStarMaterial.js +33 -0
  301. package/dist/shaders/SkyboxMaterial.d.ts +38 -0
  302. package/dist/shaders/SkyboxMaterial.d.ts.map +1 -0
  303. package/dist/shaders/SkyboxMaterial.js +57 -0
  304. package/dist/shaders/effects/EffectsVertexFunctions.glsl.d.ts +2 -0
  305. package/dist/shaders/effects/EffectsVertexFunctions.glsl.d.ts.map +1 -0
  306. package/dist/shaders/effects/EffectsVertexFunctions.glsl.js +167 -0
  307. package/dist/utils/CameraSingleton.d.ts +35 -0
  308. package/dist/utils/CameraSingleton.d.ts.map +1 -0
  309. package/dist/utils/CameraSingleton.js +178 -0
  310. package/dist/utils/anchorUtils.d.ts +10 -0
  311. package/dist/utils/anchorUtils.d.ts.map +1 -0
  312. package/dist/utils/anchorUtils.js +13 -0
  313. package/dist/utils/frameAnimations.d.ts +49 -0
  314. package/dist/utils/frameAnimations.d.ts.map +1 -0
  315. package/dist/utils/frameAnimations.js +213 -0
  316. package/dist/utils/handleGenerativeEffectsAnimations.d.ts +5 -0
  317. package/dist/utils/handleGenerativeEffectsAnimations.d.ts.map +1 -0
  318. package/dist/utils/handleGenerativeEffectsAnimations.js +268 -0
  319. package/dist/utils/hasHoverAnimation.d.ts +3 -0
  320. package/dist/utils/hasHoverAnimation.d.ts.map +1 -0
  321. package/dist/utils/hasHoverAnimation.js +15 -0
  322. package/dist/utils/particleAnimations.d.ts +3 -0
  323. package/dist/utils/particleAnimations.d.ts.map +1 -0
  324. package/dist/utils/particleAnimations.js +17 -0
  325. package/dist/utils/sceneQuery.d.ts +9 -0
  326. package/dist/utils/sceneQuery.d.ts.map +1 -0
  327. package/dist/utils/sceneQuery.js +22 -0
  328. package/dist/utils/shaderUtils.d.ts +6 -0
  329. package/dist/utils/shaderUtils.d.ts.map +1 -0
  330. package/dist/utils/shaderUtils.js +145 -0
  331. package/dist/utils/textEffects.d.ts +31 -0
  332. package/dist/utils/textEffects.d.ts.map +1 -0
  333. package/dist/utils/textEffects.js +61 -0
  334. package/dist/utils/utils3d.d.ts +7 -0
  335. package/dist/utils/utils3d.d.ts.map +1 -0
  336. package/dist/utils/utils3d.js +34 -0
  337. package/package.json +43 -0
@@ -0,0 +1,188 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useRef, useMemo } from 'react';
3
+ import { useFrame } from '@react-three/fiber';
4
+ import * as THREE from 'three';
5
+ import { applyGenerativeAnimations } from '../../utils/handleGenerativeEffectsAnimations';
6
+ // Glow sprite for pulse signals and node flashes
7
+ const pulseVert = /* glsl */ `
8
+ attribute float aBright;
9
+ uniform float uSize;
10
+ varying float vB;
11
+ void main() {
12
+ vB = aBright;
13
+ if (vB < 0.01) { gl_PointSize = 0.0; gl_Position = vec4(0); return; }
14
+ vec4 mv = modelViewMatrix * vec4(position, 1.0);
15
+ gl_PointSize = uSize * vB * (200.0 / -mv.z);
16
+ gl_Position = projectionMatrix * mv;
17
+ }
18
+ `;
19
+ const pulseFrag = /* glsl */ `
20
+ uniform vec3 uColor;
21
+ uniform float uOpacity;
22
+ varying float vB;
23
+ void main() {
24
+ if (vB < 0.01) discard;
25
+ vec2 c = gl_PointCoord - 0.5;
26
+ if (length(c) > 0.5) discard;
27
+ float g = exp(-dot(c, c) * 5.5);
28
+ gl_FragColor = vec4(uColor, g * vB * uOpacity);
29
+ }
30
+ `;
31
+ const MAX_PULSES = 4;
32
+ const NeuralNetworkEffect = ({ boundingRadius, config, animations }) => {
33
+ const { nodeCount, signalSpeed, nodeColor, pulseColor, orbitSpeed, opacity, speed, intensity } = config;
34
+ const startValuesCacheRef = useRef({});
35
+ const groupRef = useRef(null);
36
+ // Node orbit state
37
+ const orbitAngles = useRef(new Float32Array(0));
38
+ const pulses = useRef([]);
39
+ const nextPulse = useRef(0);
40
+ const r = boundingRadius * 1.35;
41
+ const N = Math.max(8, Math.min(nodeCount, 40));
42
+ const scene = useMemo(() => {
43
+ // ── Node positions on Fibonacci sphere ────────────────────────────────
44
+ const basePos = [];
45
+ const goldenAngle = Math.PI * (3 - Math.sqrt(5));
46
+ for (let i = 0; i < N; i++) {
47
+ const y = 1 - (i / (N - 1)) * 2;
48
+ const rad = Math.sqrt(1 - y * y) * r;
49
+ const phi = i * goldenAngle;
50
+ basePos.push(new THREE.Vector3(Math.cos(phi) * rad, y * r, Math.sin(phi) * rad));
51
+ }
52
+ // Orbit axes — random unit vectors
53
+ const orbitAxes = Array.from({ length: N }, () => new THREE.Vector3(Math.random() - 0.5, Math.random() - 0.5, Math.random() - 0.5).normalize());
54
+ const orbitSpeeds = Array.from({ length: N }, () => 0.4 + Math.random() * 0.6);
55
+ const angles = new Float32Array(N).map((_, i) => i * 0.7);
56
+ orbitAngles.current = angles;
57
+ // ── Edges — connect nearby pairs ─────────────────────────────────────
58
+ const MAX_DIST = r * 0.85;
59
+ const edges = [];
60
+ const degree = new Int32Array(N);
61
+ for (let i = 0; i < N; i++) {
62
+ for (let j = i + 1; j < N; j++) {
63
+ if (degree[i] >= 3 || degree[j] >= 3)
64
+ continue;
65
+ if (basePos[i].distanceTo(basePos[j]) < MAX_DIST) {
66
+ edges.push([i, j]);
67
+ degree[i]++;
68
+ degree[j]++;
69
+ }
70
+ }
71
+ }
72
+ const edgeVerts = new Float32Array(edges.length * 6);
73
+ const edgeCols = new Float32Array(edges.length * 6);
74
+ const nc = new THREE.Color(nodeColor);
75
+ const DIM = 0.06;
76
+ for (let e = 0; e < edges.length; e++) {
77
+ const [a, b] = edges[e];
78
+ edgeVerts.set([basePos[a].x, basePos[a].y, basePos[a].z, basePos[b].x, basePos[b].y, basePos[b].z], e * 6);
79
+ edgeCols.set([nc.r * DIM, nc.g * DIM, nc.b * DIM, nc.r * DIM, nc.g * DIM, nc.b * DIM], e * 6);
80
+ }
81
+ const edgeGeo = new THREE.BufferGeometry();
82
+ edgeGeo.setAttribute('position', new THREE.BufferAttribute(edgeVerts, 3));
83
+ edgeGeo.setAttribute('color', new THREE.BufferAttribute(edgeCols, 3));
84
+ const edgeMat = new THREE.LineBasicMaterial({
85
+ vertexColors: true, transparent: true, depthWrite: false, blending: THREE.AdditiveBlending,
86
+ });
87
+ // ── Node instanced mesh ───────────────────────────────────────────────
88
+ const nodeGeo = new THREE.SphereGeometry(0.055 * intensity, 8, 8);
89
+ const nc2 = new THREE.Color(nodeColor);
90
+ const nodeMat = new THREE.MeshBasicMaterial({
91
+ color: nc2, transparent: true, opacity: opacity * 0.55,
92
+ depthWrite: false, blending: THREE.AdditiveBlending,
93
+ });
94
+ const nodeMesh = new THREE.InstancedMesh(nodeGeo, nodeMat, N);
95
+ nodeMesh.instanceMatrix.setUsage(THREE.DynamicDrawUsage);
96
+ // ── Pulse sprites ─────────────────────────────────────────────────────
97
+ const pulsePos = new Float32Array(MAX_PULSES * 3);
98
+ const pulseBright = new Float32Array(MAX_PULSES);
99
+ const pulseGeo = new THREE.BufferGeometry();
100
+ pulseGeo.setAttribute('position', new THREE.BufferAttribute(pulsePos, 3));
101
+ pulseGeo.setAttribute('aBright', new THREE.BufferAttribute(pulseBright, 1));
102
+ const pc = new THREE.Color(pulseColor);
103
+ const pulseMat = new THREE.ShaderMaterial({
104
+ vertexShader: pulseVert, fragmentShader: pulseFrag,
105
+ uniforms: {
106
+ uSize: { value: 20 * intensity },
107
+ uColor: { value: new THREE.Vector3(pc.r, pc.g, pc.b) },
108
+ uOpacity: { value: opacity },
109
+ },
110
+ transparent: true, depthWrite: false, blending: THREE.AdditiveBlending,
111
+ });
112
+ // Initialise pulse states
113
+ pulses.current = Array.from({ length: MAX_PULSES }, () => ({
114
+ fromIdx: 0, toIdx: 1, progress: 0, active: false,
115
+ }));
116
+ return { basePos, orbitAxes, orbitSpeeds, edges, edgeGeo, edgeMat, nodeMesh, pulseGeo, pulseMat };
117
+ // eslint-disable-next-line react-hooks/exhaustive-deps
118
+ }, [N, r, nodeColor, pulseColor, opacity, intensity]);
119
+ const tmpMat = useMemo(() => new THREE.Matrix4(), []);
120
+ const tmpQuat = useMemo(() => new THREE.Quaternion(), []);
121
+ const tmpVec = useMemo(() => new THREE.Vector3(), []);
122
+ useFrame((_, delta) => {
123
+ if (!groupRef.current)
124
+ return;
125
+ const dt = delta * speed;
126
+ const { basePos, orbitAxes, orbitSpeeds, edges, edgeGeo, nodeMesh, pulseGeo, pulseMat } = scene;
127
+ // Rotate nodes around their individual axes
128
+ const angles = orbitAngles.current;
129
+ const curPos = [];
130
+ for (let i = 0; i < N; i++) {
131
+ angles[i] += dt * orbitSpeed * orbitSpeeds[i] * 0.4;
132
+ const base = basePos[i];
133
+ const axis = orbitAxes[i];
134
+ const ang = angles[i];
135
+ // Rodrigues rotation of base position around axis
136
+ const cosA = Math.cos(ang), sinA = Math.sin(ang);
137
+ const dot = base.dot(axis);
138
+ tmpVec.set(base.x * cosA + (axis.y * base.z - axis.z * base.y) * sinA + axis.x * dot * (1 - cosA), base.y * cosA + (axis.z * base.x - axis.x * base.z) * sinA + axis.y * dot * (1 - cosA), base.z * cosA + (axis.x * base.y - axis.y * base.x) * sinA + axis.z * dot * (1 - cosA));
139
+ curPos.push(tmpVec.clone());
140
+ tmpMat.compose(tmpVec, tmpQuat, new THREE.Vector3(1, 1, 1));
141
+ nodeMesh.setMatrixAt(i, tmpMat);
142
+ }
143
+ nodeMesh.instanceMatrix.needsUpdate = true;
144
+ // Update edge positions
145
+ const edgePosAttr = edgeGeo.attributes.position;
146
+ for (let e = 0; e < edges.length; e++) {
147
+ const [a, b] = edges[e];
148
+ edgePosAttr.setXYZ(e * 2, curPos[a].x, curPos[a].y, curPos[a].z);
149
+ edgePosAttr.setXYZ(e * 2 + 1, curPos[b].x, curPos[b].y, curPos[b].z);
150
+ }
151
+ edgePosAttr.needsUpdate = true;
152
+ // Pulse signals along edges
153
+ nextPulse.current -= delta;
154
+ if (nextPulse.current <= 0 && edges.length > 0) {
155
+ nextPulse.current = 0.4 / speed;
156
+ const idle = pulses.current.findIndex(p => !p.active);
157
+ if (idle >= 0) {
158
+ const e = Math.floor(Math.random() * edges.length);
159
+ pulses.current[idle] = { fromIdx: edges[e][0], toIdx: edges[e][1], progress: 0, active: true };
160
+ }
161
+ }
162
+ const ptPos = pulseGeo.attributes.position;
163
+ const ptBright = pulseGeo.attributes.aBright;
164
+ pulses.current.forEach((p, pi) => {
165
+ if (!p.active) {
166
+ ptBright.setX(pi, 0);
167
+ return;
168
+ }
169
+ p.progress += dt * signalSpeed * 0.9;
170
+ if (p.progress >= 1) {
171
+ p.active = false;
172
+ ptBright.setX(pi, 0);
173
+ return;
174
+ }
175
+ const pos = curPos[p.fromIdx].clone().lerp(curPos[p.toIdx], p.progress);
176
+ ptPos.setXYZ(pi, pos.x, pos.y, pos.z);
177
+ ptBright.setX(pi, 0.7 + 0.3 * Math.sin(p.progress * Math.PI));
178
+ });
179
+ ptPos.needsUpdate = true;
180
+ ptBright.needsUpdate = true;
181
+ pulseMat.uniforms.uSize.value = 20 * intensity;
182
+ if (animations?.length) {
183
+ applyGenerativeAnimations([pulseMat], animations, startValuesCacheRef.current, Date.now(), false);
184
+ }
185
+ });
186
+ return (_jsxs("group", { ref: groupRef, children: [_jsx("lineSegments", { geometry: scene.edgeGeo, material: scene.edgeMat }), _jsx("primitive", { object: scene.nodeMesh }), _jsx("points", { geometry: scene.pulseGeo, material: scene.pulseMat })] }));
187
+ };
188
+ export default NeuralNetworkEffect;
@@ -0,0 +1,10 @@
1
+ import React from 'react';
2
+ import type { OrbConfig, AnimationOptions } from '@ntalmagor/3drize-core';
3
+ interface OrbEffectProps {
4
+ boundingRadius: number;
5
+ config: OrbConfig;
6
+ animations?: AnimationOptions[];
7
+ }
8
+ declare const OrbEffect: React.FC<OrbEffectProps>;
9
+ export default OrbEffect;
10
+ //# sourceMappingURL=OrbEffect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OrbEffect.d.ts","sourceRoot":"","sources":["../../../src/components/effects/OrbEffect.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA0B,MAAM,OAAO,CAAC;AAG/C,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAI1E,UAAU,cAAc;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,SAAS,CAAC;IAClB,UAAU,CAAC,EAAE,gBAAgB,EAAE,CAAC;CACjC;AAyLD,QAAA,MAAM,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,cAAc,CAqJvC,CAAC;AAEF,eAAe,SAAS,CAAC"}
@@ -0,0 +1,291 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useRef, useMemo } from 'react';
3
+ import { useFrame } from '@react-three/fiber';
4
+ import * as THREE from 'three';
5
+ import { applyGenerativeAnimations } from '../../utils/handleGenerativeEffectsAnimations';
6
+ // ── Shared vert (normal + viewDir) ────────────────────────────────────────────
7
+ const sharedVert = /* glsl */ `
8
+ varying vec3 vNormal;
9
+ varying vec3 vViewDir;
10
+ varying vec3 vWorldNormal;
11
+ void main() {
12
+ vNormal = normalize(normalMatrix * normal);
13
+ vWorldNormal = normalize((modelMatrix * vec4(normal, 0.0)).xyz);
14
+ vec4 mv = modelViewMatrix * vec4(position, 1.0);
15
+ vViewDir = normalize(-mv.xyz);
16
+ gl_Position = projectionMatrix * mv;
17
+ }
18
+ `;
19
+ // ── CORE: boiling solar surface ───────────────────────────────────────────────
20
+ const coreFrag = /* glsl */ `
21
+ uniform float u_time;
22
+ uniform vec3 uInnerColor;
23
+ uniform vec3 uOuterColor;
24
+ uniform float uOpacity;
25
+ uniform float uNoiseAmount;
26
+ uniform float uIntensity;
27
+ uniform float uPulseSpeed;
28
+
29
+ varying vec3 vNormal;
30
+ varying vec3 vViewDir;
31
+ varying vec3 vWorldNormal;
32
+
33
+ float hash(vec3 p){ return fract(sin(dot(p,vec3(127.1,311.7,74.7)))*43758.5453); }
34
+ float noise(vec3 p){
35
+ vec3 i=floor(p); vec3 f=fract(p); f=f*f*(3.-2.*f);
36
+ return mix(mix(mix(hash(i),hash(i+vec3(1,0,0)),f.x),mix(hash(i+vec3(0,1,0)),hash(i+vec3(1,1,0)),f.x),f.y),
37
+ mix(mix(hash(i+vec3(0,0,1)),hash(i+vec3(1,0,1)),f.x),mix(hash(i+vec3(0,1,1)),hash(i+vec3(1,1,1)),f.x),f.y),f.z);
38
+ }
39
+ // 6-octave FBM for rich surface detail
40
+ float fbm(vec3 p){
41
+ float v=0., a=0.5;
42
+ for(int i=0;i<6;i++){ v+=a*noise(p); p=p*2.13+vec3(1.7,9.2,3.7); a*=0.5; }
43
+ return v;
44
+ }
45
+
46
+ void main() {
47
+ // Animated surface boiling — rotate noise field over time
48
+ vec3 nCoord = vWorldNormal * 5.5 + vec3(u_time * 0.35, u_time * 0.18, u_time * -0.22);
49
+ float f = fbm(nCoord);
50
+
51
+ // Active regions: bright convective cells
52
+ float cells = smoothstep(0.54, 0.72, f) * 4.0;
53
+ // Cool lanes between cells (slightly darker)
54
+ float cool = (1.0 - smoothstep(0.38, 0.50, f)) * 0.3;
55
+ // Solar flares: ultra-sharp spikes where FBM peaks
56
+ float flares = smoothstep(0.70, 0.85, f) * 6.0;
57
+
58
+ float pulse = 0.85 + 0.15 * sin(u_time * uPulseSpeed * 2.3);
59
+ float limb = 1.0 - abs(dot(vNormal, vViewDir)) * 0.4; // limb darkening
60
+
61
+ // Color: white-hot core cells, outer-color cool lanes
62
+ vec3 col = mix(uOuterColor, uInnerColor, f * 1.8 + cells * 0.3);
63
+ col += uInnerColor * flares;
64
+ col -= uOuterColor * cool;
65
+ col *= pulse * limb * (1.0 + uNoiseAmount * cells);
66
+
67
+ float alpha = (0.85 + cells * 0.15) * uOpacity * uIntensity;
68
+ gl_FragColor = vec4(col, alpha);
69
+ }
70
+ `;
71
+ // ── PLASMA SHELL: iridescent + FBM tendrils ───────────────────────────────────
72
+ const plasmaFrag = /* glsl */ `
73
+ uniform float u_time;
74
+ uniform float uLayerIndex; // 0..1
75
+ uniform vec3 uInnerColor;
76
+ uniform vec3 uOuterColor;
77
+ uniform float uOpacity;
78
+ uniform float uNoiseAmount;
79
+ uniform float uPulseSpeed;
80
+ uniform float uIntensity;
81
+
82
+ varying vec3 vNormal;
83
+ varying vec3 vViewDir;
84
+ varying vec3 vWorldNormal;
85
+
86
+ vec3 hsv2rgb(float h, float s, float v){
87
+ vec3 rgb=clamp(abs(mod(h*6.+vec3(0.,4.,2.),6.)-3.)-1.,0.,1.);
88
+ return v*mix(vec3(1.),rgb,s);
89
+ }
90
+ float hash(vec3 p){ return fract(sin(dot(p,vec3(127.1,311.7,74.7)))*43758.5453); }
91
+ float noise(vec3 p){
92
+ vec3 i=floor(p); vec3 f=fract(p); f=f*f*(3.-2.*f);
93
+ return mix(mix(mix(hash(i),hash(i+vec3(1,0,0)),f.x),mix(hash(i+vec3(0,1,0)),hash(i+vec3(1,1,0)),f.x),f.y),
94
+ mix(mix(hash(i+vec3(0,0,1)),hash(i+vec3(1,0,1)),f.x),mix(hash(i+vec3(0,1,1)),hash(i+vec3(1,1,1)),f.x),f.y),f.z);
95
+ }
96
+ float fbm(vec3 p){ float v=0.,a=0.5; for(int i=0;i<5;i++){v+=a*noise(p);p=p*2.17+vec3(1.7,9.2,3.7);a*=0.5;} return v; }
97
+
98
+ void main() {
99
+ vec3 viewDir = normalize(vViewDir);
100
+ float ndv = abs(dot(vNormal, viewDir));
101
+
102
+ // Fresnel edge glow
103
+ float fresnel = pow(1.0 - ndv, 2.5 - uLayerIndex);
104
+
105
+ // 5-octave FBM driven by world normal + time
106
+ float f = fbm(vWorldNormal * (3.0 + uLayerIndex * 2.0) + vec3(u_time * (0.15 + uLayerIndex * 0.08)));
107
+
108
+ // Iridescent hue: shifts with view angle, layer depth, and time
109
+ float innerHue = 0.0; // derive from innerColor
110
+ float hue = mod(ndv * 0.5 - uLayerIndex * 0.2 + u_time * 0.05 + f * 0.15, 1.0);
111
+ vec3 iriCol = hsv2rgb(hue, 0.9 - uLayerIndex * 0.2, 1.0);
112
+
113
+ // Electric tendrils: sharp bright streamers where FBM exceeds threshold
114
+ float tendril = smoothstep(0.62 - uLayerIndex * 0.04, 0.78, f);
115
+ // Plasma cells: lower threshold dimmer glow
116
+ float plasma = smoothstep(0.50, 0.65, f) * 0.5;
117
+
118
+ float pulse = 0.6 + 0.4 * sin(u_time * uPulseSpeed + uLayerIndex * 2.4);
119
+
120
+ vec3 col = iriCol + iriCol * (tendril * 2.0 + plasma);
121
+ col = mix(col, uInnerColor, tendril * 0.3); // brightest tendrils go white
122
+
123
+ float noiseBlend = (1.0 - uNoiseAmount) + uNoiseAmount * f;
124
+ float alpha = fresnel * noiseBlend * uOpacity * pulse
125
+ * (1.0 - uLayerIndex * 0.28) * uIntensity;
126
+ if (alpha < 0.004) discard;
127
+
128
+ gl_FragColor = vec4(col, alpha);
129
+ }
130
+ `;
131
+ // ── OUTER DIFFUSE GLOW ────────────────────────────────────────────────────────
132
+ const glowFrag = /* glsl */ `
133
+ uniform float u_time;
134
+ uniform vec3 uOuterColor;
135
+ uniform float uOpacity;
136
+ uniform float uPulseSpeed;
137
+
138
+ varying vec3 vNormal;
139
+ varying vec3 vViewDir;
140
+
141
+ void main() {
142
+ float ndv = abs(dot(normalize(vNormal), normalize(vViewDir)));
143
+ float fresnel = pow(1.0 - ndv, 1.2);
144
+ float pulse = 0.55 + 0.45 * sin(u_time * uPulseSpeed * 0.7 + 1.2);
145
+ float alpha = fresnel * uOpacity * pulse * 0.5;
146
+ if (alpha < 0.003) discard;
147
+ // Slowly cycle hue of the outer glow
148
+ float hue = mod(u_time * 0.04, 1.0);
149
+ vec3 tint = mix(uOuterColor, vec3(cos(hue*6.28)*0.5+0.5, cos((hue+0.33)*6.28)*0.5+0.5, cos((hue+0.67)*6.28)*0.5+0.5), 0.25);
150
+ gl_FragColor = vec4(tint, alpha);
151
+ }
152
+ `;
153
+ // ── CORONA RING ───────────────────────────────────────────────────────────────
154
+ const coronaVert = /* glsl */ `
155
+ attribute float aAngle;
156
+ varying float vAngle;
157
+ void main() {
158
+ vAngle = aAngle;
159
+ gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
160
+ }
161
+ `;
162
+ const coronaFrag = /* glsl */ `
163
+ uniform float u_time;
164
+ uniform vec3 uCoronaColor;
165
+ uniform float uOpacity;
166
+ uniform float uIntensity;
167
+ varying float vAngle;
168
+
169
+ vec3 hsv2rgb(float h, float s, float v){
170
+ vec3 rgb=clamp(abs(mod(h*6.+vec3(0.,4.,2.),6.)-3.)-1.,0.,1.);
171
+ return v*mix(vec3(1.),rgb,s);
172
+ }
173
+
174
+ void main() {
175
+ // Color flows around the ring over time
176
+ float hue = mod(vAngle / 6.28318 + u_time * 0.15, 1.0);
177
+ vec3 col = mix(uCoronaColor, hsv2rgb(hue, 0.8, 1.0), 0.6);
178
+ // Pulse brightness
179
+ float pulse = 0.6 + 0.4 * sin(u_time * 2.5 + vAngle * 3.0);
180
+ float alpha = uOpacity * pulse * uIntensity;
181
+ gl_FragColor = vec4(col * (1.0 + pulse), alpha);
182
+ }
183
+ `;
184
+ const OrbEffect = ({ boundingRadius, config, animations }) => {
185
+ const { coreSize, glowLayers, innerColor, outerColor, coronaEnabled, coronaColor, noiseAmount, pulseSpeed, opacity, speed, intensity } = config;
186
+ const startValuesCacheRef = useRef({});
187
+ const innerColorVec = useMemo(() => { const c = new THREE.Color(innerColor); return new THREE.Vector3(c.r, c.g, c.b); }, [innerColor]);
188
+ const outerColorVec = useMemo(() => { const c = new THREE.Color(outerColor); return new THREE.Vector3(c.r, c.g, c.b); }, [outerColor]);
189
+ const coronaColorVec = useMemo(() => { const c = new THREE.Color(coronaColor); return new THREE.Vector3(c.r, c.g, c.b); }, [coronaColor]);
190
+ const coreR = boundingRadius * coreSize;
191
+ // Core material — boiling solar surface
192
+ const coreMat = useMemo(() => new THREE.ShaderMaterial({
193
+ vertexShader: sharedVert,
194
+ fragmentShader: coreFrag,
195
+ uniforms: {
196
+ u_time: { value: 0 },
197
+ uInnerColor: { value: innerColorVec },
198
+ uOuterColor: { value: outerColorVec },
199
+ uOpacity: { value: opacity },
200
+ uNoiseAmount: { value: noiseAmount },
201
+ uIntensity: { value: intensity },
202
+ uPulseSpeed: { value: pulseSpeed * speed },
203
+ },
204
+ transparent: true,
205
+ depthWrite: false,
206
+ blending: THREE.AdditiveBlending,
207
+ }), [innerColorVec, outerColorVec, opacity, noiseAmount, intensity, pulseSpeed, speed]);
208
+ // Plasma shell materials — one per layer
209
+ const shellMats = useMemo(() => Array.from({ length: glowLayers }, (_, i) => new THREE.ShaderMaterial({
210
+ vertexShader: sharedVert,
211
+ fragmentShader: plasmaFrag,
212
+ uniforms: {
213
+ u_time: { value: 0 },
214
+ uLayerIndex: { value: glowLayers > 1 ? i / (glowLayers - 1) : 0 },
215
+ uInnerColor: { value: innerColorVec },
216
+ uOuterColor: { value: outerColorVec },
217
+ uOpacity: { value: opacity },
218
+ uNoiseAmount: { value: noiseAmount },
219
+ uPulseSpeed: { value: pulseSpeed * speed },
220
+ uIntensity: { value: intensity },
221
+ },
222
+ transparent: true,
223
+ depthWrite: false,
224
+ blending: THREE.AdditiveBlending,
225
+ side: THREE.BackSide,
226
+ })), [glowLayers, innerColorVec, outerColorVec, opacity, noiseAmount, pulseSpeed, speed, intensity]);
227
+ // Outer diffuse glow
228
+ const glowMat = useMemo(() => new THREE.ShaderMaterial({
229
+ vertexShader: sharedVert,
230
+ fragmentShader: glowFrag,
231
+ uniforms: {
232
+ u_time: { value: 0 },
233
+ uOuterColor: { value: outerColorVec },
234
+ uOpacity: { value: opacity * 0.6 },
235
+ uPulseSpeed: { value: pulseSpeed * speed },
236
+ },
237
+ transparent: true,
238
+ depthWrite: false,
239
+ blending: THREE.AdditiveBlending,
240
+ side: THREE.BackSide,
241
+ }), [outerColorVec, opacity, pulseSpeed, speed]);
242
+ // Corona ring geometry — torus with per-vertex angle attribute for color flow
243
+ const { coronaGeo, coronaMat } = useMemo(() => {
244
+ const tubeSegs = 80;
245
+ const geo = new THREE.TorusGeometry(coreR * 2.8, coreR * 0.12, 8, tubeSegs);
246
+ const count = geo.attributes.position.count;
247
+ // Per-vertex angle around the ring (0 → 2π)
248
+ const angles = new Float32Array(count);
249
+ // TorusGeometry vertices go around the major circle; approximate angle from XZ
250
+ const pos = geo.attributes.position;
251
+ for (let i = 0; i < count; i++) {
252
+ angles[i] = Math.atan2(pos.getZ(i), pos.getX(i)) + Math.PI;
253
+ }
254
+ geo.setAttribute('aAngle', new THREE.BufferAttribute(angles, 1));
255
+ const mat = new THREE.ShaderMaterial({
256
+ vertexShader: coronaVert,
257
+ fragmentShader: coronaFrag,
258
+ uniforms: {
259
+ u_time: { value: 0 },
260
+ uCoronaColor: { value: coronaColorVec },
261
+ uOpacity: { value: opacity * 0.85 },
262
+ uIntensity: { value: intensity },
263
+ },
264
+ transparent: true,
265
+ depthWrite: false,
266
+ blending: THREE.AdditiveBlending,
267
+ });
268
+ return { coronaGeo: geo, coronaMat: mat };
269
+ }, [coreR, coronaColorVec, opacity, intensity]);
270
+ const coronaGroupRef = useRef(null);
271
+ const allMats = useMemo(() => [coreMat, ...shellMats, glowMat, coronaMat], [coreMat, shellMats, glowMat, coronaMat]);
272
+ useFrame((state, delta) => {
273
+ const t = state.clock.getElapsedTime();
274
+ for (const mat of allMats)
275
+ mat.uniforms.u_time.value = t;
276
+ // Tilt the corona ring and rotate slowly
277
+ if (coronaGroupRef.current) {
278
+ coronaGroupRef.current.rotation.z += delta * speed * 0.4;
279
+ }
280
+ if (animations?.length) {
281
+ applyGenerativeAnimations(allMats, animations, startValuesCacheRef.current, Date.now(), false);
282
+ }
283
+ });
284
+ const glowR = coreR * (3.5 + glowLayers * 0.6);
285
+ return (_jsxs("group", { children: [_jsx("mesh", { material: coreMat, children: _jsx("sphereGeometry", { args: [coreR, 48, 48] }) }), Array.from({ length: glowLayers }, (_, i) => {
286
+ const layerT = glowLayers > 1 ? i / (glowLayers - 1) : 0;
287
+ const r = coreR * (1.35 + layerT * layerT * 1.8);
288
+ return (_jsx("mesh", { material: shellMats[i], children: _jsx("sphereGeometry", { args: [r, 40, 40] }) }, i));
289
+ }), _jsx("mesh", { material: glowMat, children: _jsx("sphereGeometry", { args: [glowR, 32, 32] }) }), coronaEnabled && (_jsx("group", { ref: coronaGroupRef, rotation: [Math.PI * 0.18, 0, Math.PI * 0.08], children: _jsx("mesh", { geometry: coronaGeo, material: coronaMat }) }))] }));
290
+ };
291
+ export default OrbEffect;
@@ -0,0 +1,10 @@
1
+ import React from 'react';
2
+ import type { PortalConfig, AnimationOptions } from '@ntalmagor/3drize-core';
3
+ interface PortalEffectProps {
4
+ boundingRadius: number;
5
+ config: PortalConfig;
6
+ animations?: AnimationOptions[];
7
+ }
8
+ declare const PortalEffect: React.FC<PortalEffectProps>;
9
+ export default PortalEffect;
10
+ //# sourceMappingURL=PortalEffect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PortalEffect.d.ts","sourceRoot":"","sources":["../../../src/components/effects/PortalEffect.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA0B,MAAM,OAAO,CAAC;AAG/C,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAI7E,UAAU,iBAAiB;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,YAAY,CAAC;IACrB,UAAU,CAAC,EAAE,gBAAgB,EAAE,CAAC;CACjC;AAmHD,QAAA,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CAmG7C,CAAC;AAEF,eAAe,YAAY,CAAC"}