@3driseai/3drise-viewer 0.1.26 → 0.1.28

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 (476) hide show
  1. package/dist/animationsV2/ClipPlayer.d.ts +3 -0
  2. package/dist/animationsV2/ClipPlayer.d.ts.map +1 -1
  3. package/dist/animationsV2/ClipPlayer.js +67 -8
  4. package/dist/animationsV2/ClipsRuntime.d.ts +39 -0
  5. package/dist/animationsV2/ClipsRuntime.d.ts.map +1 -1
  6. package/dist/animationsV2/ClipsRuntime.js +245 -14
  7. package/dist/animationsV2/appliers.d.ts +5 -0
  8. package/dist/animationsV2/appliers.d.ts.map +1 -1
  9. package/dist/animationsV2/appliers.js +25 -7
  10. package/dist/animationsV2/index.d.ts +1 -1
  11. package/dist/animationsV2/index.d.ts.map +1 -1
  12. package/dist/animationsV2/normalize.d.ts.map +1 -1
  13. package/dist/animationsV2/normalize.js +18 -7
  14. package/dist/animationsV2/sequenceUtils.d.ts +42 -1
  15. package/dist/animationsV2/sequenceUtils.d.ts.map +1 -1
  16. package/dist/animationsV2/sequenceUtils.js +103 -3
  17. package/dist/animationsV2/types.d.ts +20 -0
  18. package/dist/animationsV2/types.d.ts.map +1 -1
  19. package/dist/components/AdvancedGrid.d.ts +8 -2
  20. package/dist/components/AdvancedGrid.d.ts.map +1 -1
  21. package/dist/components/AdvancedGrid.js +31 -14
  22. package/dist/components/AnimatedObject.d.ts.map +1 -1
  23. package/dist/components/AnimatedObject.js +7 -5
  24. package/dist/components/ApollonianGrid.d.ts +25 -0
  25. package/dist/components/ApollonianGrid.d.ts.map +1 -0
  26. package/dist/components/ApollonianGrid.js +80 -0
  27. package/dist/components/Bubbles.d.ts +7 -1
  28. package/dist/components/Bubbles.d.ts.map +1 -1
  29. package/dist/components/Bubbles.js +42 -22
  30. package/dist/components/ChladniGrid.d.ts +8 -4
  31. package/dist/components/ChladniGrid.d.ts.map +1 -1
  32. package/dist/components/ChladniGrid.js +31 -13
  33. package/dist/components/CircuitGrid.d.ts +8 -11
  34. package/dist/components/CircuitGrid.d.ts.map +1 -1
  35. package/dist/components/CircuitGrid.js +31 -13
  36. package/dist/components/CloudsGenerator.d.ts +1 -1
  37. package/dist/components/CloudsGenerator.js +1 -1
  38. package/dist/components/ConformalGrid.d.ts +25 -0
  39. package/dist/components/ConformalGrid.d.ts.map +1 -0
  40. package/dist/components/ConformalGrid.js +97 -0
  41. package/dist/components/ContourGrid.d.ts +8 -14
  42. package/dist/components/ContourGrid.d.ts.map +1 -1
  43. package/dist/components/ContourGrid.js +31 -13
  44. package/dist/components/EffectsGenerator.d.ts +7 -1
  45. package/dist/components/EffectsGenerator.d.ts.map +1 -1
  46. package/dist/components/EffectsGenerator.js +39 -38
  47. package/dist/components/EnvironmentManager.d.ts +4 -4
  48. package/dist/components/EnvironmentManager.d.ts.map +1 -1
  49. package/dist/components/FlowNetGrid.d.ts +8 -4
  50. package/dist/components/FlowNetGrid.d.ts.map +1 -1
  51. package/dist/components/FlowNetGrid.js +31 -13
  52. package/dist/components/FractalGrid.d.ts +8 -12
  53. package/dist/components/FractalGrid.d.ts.map +1 -1
  54. package/dist/components/FractalGrid.js +31 -13
  55. package/dist/components/GirihGrid.d.ts +8 -1
  56. package/dist/components/GirihGrid.d.ts.map +1 -1
  57. package/dist/components/GirihGrid.js +31 -13
  58. package/dist/components/Glyphs.d.ts +7 -1
  59. package/dist/components/Glyphs.d.ts.map +1 -1
  60. package/dist/components/Glyphs.js +40 -34
  61. package/dist/components/GravWaveGrid.d.ts +8 -1
  62. package/dist/components/GravWaveGrid.d.ts.map +1 -1
  63. package/dist/components/GravWaveGrid.js +31 -13
  64. package/dist/components/GridsGenerator.d.ts +9 -3
  65. package/dist/components/GridsGenerator.d.ts.map +1 -1
  66. package/dist/components/GridsGenerator.js +41 -18
  67. package/dist/components/HexGrid.d.ts +8 -10
  68. package/dist/components/HexGrid.d.ts.map +1 -1
  69. package/dist/components/HexGrid.js +31 -13
  70. package/dist/components/HilbertGrid.d.ts +25 -0
  71. package/dist/components/HilbertGrid.d.ts.map +1 -0
  72. package/dist/components/HilbertGrid.js +93 -0
  73. package/dist/components/HyperbolicGrid.d.ts +8 -4
  74. package/dist/components/HyperbolicGrid.d.ts.map +1 -1
  75. package/dist/components/HyperbolicGrid.js +31 -13
  76. package/dist/components/LandscapeBuilder.d.ts +1 -1
  77. package/dist/components/LandscapeBuilder.d.ts.map +1 -1
  78. package/dist/components/LandscapeBuilder.js +1 -1
  79. package/dist/components/LandscapeObject.d.ts +1 -1
  80. package/dist/components/LandscapeObject.d.ts.map +1 -1
  81. package/dist/components/LandscapeObject.js +1 -1
  82. package/dist/components/LensingGrid.d.ts +25 -0
  83. package/dist/components/LensingGrid.d.ts.map +1 -0
  84. package/dist/components/LensingGrid.js +81 -0
  85. package/dist/components/MoireGrid.d.ts +8 -12
  86. package/dist/components/MoireGrid.d.ts.map +1 -1
  87. package/dist/components/MoireGrid.js +31 -13
  88. package/dist/components/ObjectNode.d.ts.map +1 -1
  89. package/dist/components/ObjectNode.js +2 -2
  90. package/dist/components/ObjectsRenderer.d.ts.map +1 -1
  91. package/dist/components/ObjectsRenderer.js +37 -3
  92. package/dist/components/OceanBuilder.d.ts +1 -1
  93. package/dist/components/OceanBuilder.js +1 -1
  94. package/dist/components/ParastichyGrid.d.ts +25 -0
  95. package/dist/components/ParastichyGrid.d.ts.map +1 -0
  96. package/dist/components/ParastichyGrid.js +82 -0
  97. package/dist/components/ParticlesGenerator.d.ts.map +1 -1
  98. package/dist/components/ParticlesGenerator.js +6 -0
  99. package/dist/components/PhyllotaxisGrid.d.ts +25 -0
  100. package/dist/components/PhyllotaxisGrid.d.ts.map +1 -0
  101. package/dist/components/PhyllotaxisGrid.js +95 -0
  102. package/dist/components/QuasiGrid.d.ts +8 -11
  103. package/dist/components/QuasiGrid.d.ts.map +1 -1
  104. package/dist/components/QuasiGrid.js +31 -13
  105. package/dist/components/RadarGrid.d.ts +8 -13
  106. package/dist/components/RadarGrid.d.ts.map +1 -1
  107. package/dist/components/RadarGrid.js +31 -13
  108. package/dist/components/ReactionDiffusionGrid.d.ts +8 -1
  109. package/dist/components/ReactionDiffusionGrid.d.ts.map +1 -1
  110. package/dist/components/ReactionDiffusionGrid.js +33 -139
  111. package/dist/components/SceneBuilder.js +1 -1
  112. package/dist/components/SkySystem.d.ts +1 -1
  113. package/dist/components/SparklesBurst.d.ts +7 -1
  114. package/dist/components/SparklesBurst.d.ts.map +1 -1
  115. package/dist/components/SparklesBurst.js +31 -28
  116. package/dist/components/TerrainBuilder.d.ts +1 -1
  117. package/dist/components/TerrainBuilder.d.ts.map +1 -1
  118. package/dist/components/TerrainBuilder.js +1 -1
  119. package/dist/components/TruchetGrid.d.ts +25 -0
  120. package/dist/components/TruchetGrid.d.ts.map +1 -0
  121. package/dist/components/TruchetGrid.js +82 -0
  122. package/dist/components/VoronoiGrid.d.ts +8 -10
  123. package/dist/components/VoronoiGrid.d.ts.map +1 -1
  124. package/dist/components/VoronoiGrid.js +31 -13
  125. package/dist/components/WallpaperGrid.d.ts +8 -1
  126. package/dist/components/WallpaperGrid.d.ts.map +1 -1
  127. package/dist/components/WallpaperGrid.js +33 -210
  128. package/dist/components/effects/AuraEffect.d.ts +8 -3
  129. package/dist/components/effects/AuraEffect.d.ts.map +1 -1
  130. package/dist/components/effects/AuraEffect.js +49 -24
  131. package/dist/components/effects/AuroraEffect.d.ts +8 -3
  132. package/dist/components/effects/AuroraEffect.d.ts.map +1 -1
  133. package/dist/components/effects/AuroraEffect.js +45 -25
  134. package/dist/components/effects/BlackHoleEffect.d.ts +8 -3
  135. package/dist/components/effects/BlackHoleEffect.d.ts.map +1 -1
  136. package/dist/components/effects/BlackHoleEffect.js +42 -21
  137. package/dist/components/effects/ConstellationEffect.d.ts +8 -3
  138. package/dist/components/effects/ConstellationEffect.d.ts.map +1 -1
  139. package/dist/components/effects/ConstellationEffect.js +49 -23
  140. package/dist/components/effects/DandelionSeedsEffect.d.ts +7 -2
  141. package/dist/components/effects/DandelionSeedsEffect.d.ts.map +1 -1
  142. package/dist/components/effects/DandelionSeedsEffect.js +19 -9
  143. package/dist/components/effects/DataStreamEffect.d.ts +8 -3
  144. package/dist/components/effects/DataStreamEffect.d.ts.map +1 -1
  145. package/dist/components/effects/DataStreamEffect.js +54 -26
  146. package/dist/components/effects/DnaHelixEffect.d.ts +8 -3
  147. package/dist/components/effects/DnaHelixEffect.d.ts.map +1 -1
  148. package/dist/components/effects/DnaHelixEffect.js +62 -30
  149. package/dist/components/effects/FallingLeavesEffect.d.ts +7 -2
  150. package/dist/components/effects/FallingLeavesEffect.d.ts.map +1 -1
  151. package/dist/components/effects/FallingLeavesEffect.js +19 -9
  152. package/dist/components/effects/FieldLinesEffect.d.ts +8 -3
  153. package/dist/components/effects/FieldLinesEffect.d.ts.map +1 -1
  154. package/dist/components/effects/FieldLinesEffect.js +30 -20
  155. package/dist/components/effects/Fire.d.ts +8 -3
  156. package/dist/components/effects/Fire.d.ts.map +1 -1
  157. package/dist/components/effects/Fire.js +47 -10
  158. package/dist/components/effects/FireflySwarmEffect.d.ts +7 -2
  159. package/dist/components/effects/FireflySwarmEffect.d.ts.map +1 -1
  160. package/dist/components/effects/FireflySwarmEffect.js +19 -9
  161. package/dist/components/effects/Flares.d.ts +10 -3
  162. package/dist/components/effects/Flares.d.ts.map +1 -1
  163. package/dist/components/effects/Flares.js +53 -56
  164. package/dist/components/effects/ForcefieldEffect.d.ts +8 -3
  165. package/dist/components/effects/ForcefieldEffect.d.ts.map +1 -1
  166. package/dist/components/effects/ForcefieldEffect.js +52 -33
  167. package/dist/components/effects/GalaxyEffect.d.ts +7 -2
  168. package/dist/components/effects/GalaxyEffect.d.ts.map +1 -1
  169. package/dist/components/effects/GalaxyEffect.js +19 -9
  170. package/dist/components/effects/HarmonicShellEffect.d.ts +8 -3
  171. package/dist/components/effects/HarmonicShellEffect.d.ts.map +1 -1
  172. package/dist/components/effects/HarmonicShellEffect.js +30 -22
  173. package/dist/components/effects/HologramEffect.d.ts +8 -3
  174. package/dist/components/effects/HologramEffect.d.ts.map +1 -1
  175. package/dist/components/effects/HologramEffect.js +52 -23
  176. package/dist/components/effects/IceCrystalsEffect.d.ts +8 -3
  177. package/dist/components/effects/IceCrystalsEffect.d.ts.map +1 -1
  178. package/dist/components/effects/IceCrystalsEffect.js +36 -21
  179. package/dist/components/effects/IceHaloEffect.d.ts +7 -2
  180. package/dist/components/effects/IceHaloEffect.d.ts.map +1 -1
  181. package/dist/components/effects/IceHaloEffect.js +19 -9
  182. package/dist/components/effects/LichtenbergEffect.d.ts +7 -2
  183. package/dist/components/effects/LichtenbergEffect.d.ts.map +1 -1
  184. package/dist/components/effects/LichtenbergEffect.js +19 -9
  185. package/dist/components/effects/LightningEffect.d.ts +8 -3
  186. package/dist/components/effects/LightningEffect.d.ts.map +1 -1
  187. package/dist/components/effects/LightningEffect.js +54 -32
  188. package/dist/components/effects/MoleculesEffect.d.ts +8 -3
  189. package/dist/components/effects/MoleculesEffect.d.ts.map +1 -1
  190. package/dist/components/effects/MoleculesEffect.js +31 -21
  191. package/dist/components/effects/MurmurationEffect.d.ts +7 -2
  192. package/dist/components/effects/MurmurationEffect.d.ts.map +1 -1
  193. package/dist/components/effects/MurmurationEffect.js +19 -9
  194. package/dist/components/effects/NeuralNetworkEffect.d.ts +8 -3
  195. package/dist/components/effects/NeuralNetworkEffect.d.ts.map +1 -1
  196. package/dist/components/effects/NeuralNetworkEffect.js +66 -33
  197. package/dist/components/effects/OrbEffect.d.ts +8 -3
  198. package/dist/components/effects/OrbEffect.d.ts.map +1 -1
  199. package/dist/components/effects/OrbEffect.js +89 -42
  200. package/dist/components/effects/PlanetaryRingsEffect.d.ts +7 -2
  201. package/dist/components/effects/PlanetaryRingsEffect.d.ts.map +1 -1
  202. package/dist/components/effects/PlanetaryRingsEffect.js +19 -9
  203. package/dist/components/effects/PortalEffect.d.ts +8 -3
  204. package/dist/components/effects/PortalEffect.d.ts.map +1 -1
  205. package/dist/components/effects/PortalEffect.js +41 -25
  206. package/dist/components/effects/ShockwaveEffect.d.ts +7 -2
  207. package/dist/components/effects/ShockwaveEffect.d.ts.map +1 -1
  208. package/dist/components/effects/ShockwaveEffect.js +19 -9
  209. package/dist/components/effects/SmokePlumeEffect.d.ts +8 -3
  210. package/dist/components/effects/SmokePlumeEffect.d.ts.map +1 -1
  211. package/dist/components/effects/SmokePlumeEffect.js +30 -20
  212. package/dist/components/effects/SmokeRibbon.d.ts +8 -2
  213. package/dist/components/effects/SmokeRibbon.d.ts.map +1 -1
  214. package/dist/components/effects/SmokeRibbon.js +34 -24
  215. package/dist/components/effects/SmokeRingEffect.d.ts +8 -3
  216. package/dist/components/effects/SmokeRingEffect.d.ts.map +1 -1
  217. package/dist/components/effects/SmokeRingEffect.js +33 -21
  218. package/dist/components/effects/StrangeAttractorEffect.d.ts +8 -3
  219. package/dist/components/effects/StrangeAttractorEffect.d.ts.map +1 -1
  220. package/dist/components/effects/StrangeAttractorEffect.js +30 -20
  221. package/dist/components/effects/VolumetricFogEffect.d.ts +8 -3
  222. package/dist/components/effects/VolumetricFogEffect.d.ts.map +1 -1
  223. package/dist/components/effects/VolumetricFogEffect.js +38 -20
  224. package/dist/components/effects/WaterCausticsEffect.d.ts +7 -2
  225. package/dist/components/effects/WaterCausticsEffect.d.ts.map +1 -1
  226. package/dist/components/effects/WaterCausticsEffect.js +19 -9
  227. package/dist/components/effects/index.d.ts +0 -1
  228. package/dist/components/effects/index.d.ts.map +1 -1
  229. package/dist/components/effects/index.js +0 -1
  230. package/dist/components/index.d.ts +14 -1
  231. package/dist/components/index.d.ts.map +1 -1
  232. package/dist/components/index.js +7 -1
  233. package/dist/components/landscape/LandscapeMesh.js +1 -1
  234. package/dist/components/landscape/types.d.ts +1 -1
  235. package/dist/components/landscape/types.d.ts.map +1 -1
  236. package/dist/components/particles/MagneticBottleParticles.d.ts +17 -0
  237. package/dist/components/particles/MagneticBottleParticles.d.ts.map +1 -0
  238. package/dist/components/particles/MagneticBottleParticles.js +618 -0
  239. package/dist/components/particles/ShapeBurstParticles.d.ts +17 -0
  240. package/dist/components/particles/ShapeBurstParticles.d.ts.map +1 -0
  241. package/dist/components/particles/ShapeBurstParticles.js +588 -0
  242. package/dist/components/particles/ShapeFlowParticles.d.ts +17 -0
  243. package/dist/components/particles/ShapeFlowParticles.d.ts.map +1 -0
  244. package/dist/components/particles/ShapeFlowParticles.js +755 -0
  245. package/dist/components/particles/index.d.ts +6 -0
  246. package/dist/components/particles/index.d.ts.map +1 -1
  247. package/dist/components/particles/index.js +3 -0
  248. package/dist/components/terrain/types.d.ts +1 -1
  249. package/dist/components/terrain/types.d.ts.map +1 -1
  250. package/dist/components/volumetricClouds/VolumetricCloudsPass.d.ts +1 -1
  251. package/dist/components/volumetricClouds/VolumetricCloudsPass.d.ts.map +1 -1
  252. package/dist/components/volumetricClouds/types.d.ts +1 -1
  253. package/dist/components/volumetricClouds/types.d.ts.map +1 -1
  254. package/dist/components/water/types.d.ts +1 -1
  255. package/dist/components/water/types.d.ts.map +1 -1
  256. package/dist/hooks/index.d.ts +2 -0
  257. package/dist/hooks/index.d.ts.map +1 -1
  258. package/dist/hooks/index.js +1 -0
  259. package/dist/hooks/useConfigDriver.d.ts +22 -0
  260. package/dist/hooks/useConfigDriver.d.ts.map +1 -0
  261. package/dist/hooks/useConfigDriver.js +43 -0
  262. package/dist/hooks/useConfigLive.d.ts +1 -1
  263. package/dist/hooks/useConfigLive.d.ts.map +1 -1
  264. package/dist/hooks/useLandscapeMaps.d.ts +1 -1
  265. package/dist/hooks/useLandscapeMaps.d.ts.map +1 -1
  266. package/dist/hooks/useOceanMaterial.d.ts +1 -1
  267. package/dist/hooks/useThunder.d.ts +1 -1
  268. package/dist/index.d.ts +1 -2
  269. package/dist/index.d.ts.map +1 -1
  270. package/dist/index.js +1 -2
  271. package/dist/interactions/index.d.ts +2 -1
  272. package/dist/interactions/index.d.ts.map +1 -1
  273. package/dist/interactions/index.js +1 -1
  274. package/dist/interactions/runner.d.ts +18 -3
  275. package/dist/interactions/runner.d.ts.map +1 -1
  276. package/dist/interactions/runner.js +25 -2
  277. package/dist/operations/catalogue/curlSmoke.d.ts +3 -0
  278. package/dist/operations/catalogue/curlSmoke.d.ts.map +1 -0
  279. package/dist/operations/catalogue/curlSmoke.js +178 -0
  280. package/dist/operations/catalogue/displayImage.d.ts.map +1 -1
  281. package/dist/operations/catalogue/displayImage.js +1 -0
  282. package/dist/operations/catalogue/dissolve.d.ts +3 -0
  283. package/dist/operations/catalogue/dissolve.d.ts.map +1 -0
  284. package/dist/operations/catalogue/dissolve.js +57 -0
  285. package/dist/operations/catalogue/emberAsh.d.ts +3 -0
  286. package/dist/operations/catalogue/emberAsh.d.ts.map +1 -0
  287. package/dist/operations/catalogue/emberAsh.js +171 -0
  288. package/dist/operations/catalogue/fade.d.ts.map +1 -1
  289. package/dist/operations/catalogue/fade.js +1 -0
  290. package/dist/operations/catalogue/flip.d.ts +3 -0
  291. package/dist/operations/catalogue/flip.d.ts.map +1 -0
  292. package/dist/operations/catalogue/flip.js +69 -0
  293. package/dist/operations/catalogue/flock.d.ts +3 -0
  294. package/dist/operations/catalogue/flock.d.ts.map +1 -0
  295. package/dist/operations/catalogue/flock.js +163 -0
  296. package/dist/operations/catalogue/focus.d.ts.map +1 -1
  297. package/dist/operations/catalogue/focus.js +1 -0
  298. package/dist/operations/catalogue/frame.d.ts +3 -0
  299. package/dist/operations/catalogue/frame.d.ts.map +1 -0
  300. package/dist/operations/catalogue/frame.js +44 -0
  301. package/dist/operations/catalogue/frost.d.ts +3 -0
  302. package/dist/operations/catalogue/frost.d.ts.map +1 -0
  303. package/dist/operations/catalogue/frost.js +111 -0
  304. package/dist/operations/catalogue/fxInstances.d.ts +21 -0
  305. package/dist/operations/catalogue/fxInstances.d.ts.map +1 -0
  306. package/dist/operations/catalogue/fxInstances.js +47 -0
  307. package/dist/operations/catalogue/fxPoints.d.ts +22 -0
  308. package/dist/operations/catalogue/fxPoints.d.ts.map +1 -0
  309. package/dist/operations/catalogue/fxPoints.js +70 -0
  310. package/dist/operations/catalogue/glow.d.ts.map +1 -1
  311. package/dist/operations/catalogue/glow.js +2 -1
  312. package/dist/operations/catalogue/heatCracks.d.ts +3 -0
  313. package/dist/operations/catalogue/heatCracks.d.ts.map +1 -0
  314. package/dist/operations/catalogue/heatCracks.js +134 -0
  315. package/dist/operations/catalogue/hologram.d.ts +3 -0
  316. package/dist/operations/catalogue/hologram.d.ts.map +1 -0
  317. package/dist/operations/catalogue/hologram.js +118 -0
  318. package/dist/operations/catalogue/inkBloom.d.ts +3 -0
  319. package/dist/operations/catalogue/inkBloom.d.ts.map +1 -0
  320. package/dist/operations/catalogue/inkBloom.js +156 -0
  321. package/dist/operations/catalogue/ivy.d.ts +13 -0
  322. package/dist/operations/catalogue/ivy.d.ts.map +1 -0
  323. package/dist/operations/catalogue/ivy.js +469 -0
  324. package/dist/operations/catalogue/jelly.d.ts +3 -0
  325. package/dist/operations/catalogue/jelly.d.ts.map +1 -0
  326. package/dist/operations/catalogue/jelly.js +50 -0
  327. package/dist/operations/catalogue/kintsugi.d.ts +3 -0
  328. package/dist/operations/catalogue/kintsugi.d.ts.map +1 -0
  329. package/dist/operations/catalogue/kintsugi.js +173 -0
  330. package/dist/operations/catalogue/lidarScan.d.ts +3 -0
  331. package/dist/operations/catalogue/lidarScan.d.ts.map +1 -0
  332. package/dist/operations/catalogue/lidarScan.js +240 -0
  333. package/dist/operations/catalogue/liquidMetal.d.ts +3 -0
  334. package/dist/operations/catalogue/liquidMetal.d.ts.map +1 -0
  335. package/dist/operations/catalogue/liquidMetal.js +122 -0
  336. package/dist/operations/catalogue/metalize.d.ts +3 -0
  337. package/dist/operations/catalogue/metalize.d.ts.map +1 -0
  338. package/dist/operations/catalogue/metalize.js +135 -0
  339. package/dist/operations/catalogue/moveToFront.d.ts.map +1 -1
  340. package/dist/operations/catalogue/moveToFront.js +1 -0
  341. package/dist/operations/catalogue/orbit.d.ts +3 -0
  342. package/dist/operations/catalogue/orbit.d.ts.map +1 -0
  343. package/dist/operations/catalogue/orbit.js +29 -0
  344. package/dist/operations/catalogue/particleSwarm.d.ts +3 -0
  345. package/dist/operations/catalogue/particleSwarm.d.ts.map +1 -0
  346. package/dist/operations/catalogue/particleSwarm.js +138 -0
  347. package/dist/operations/catalogue/petalPeel.d.ts +3 -0
  348. package/dist/operations/catalogue/petalPeel.d.ts.map +1 -0
  349. package/dist/operations/catalogue/petalPeel.js +137 -0
  350. package/dist/operations/catalogue/petrify.d.ts +3 -0
  351. package/dist/operations/catalogue/petrify.d.ts.map +1 -0
  352. package/dist/operations/catalogue/petrify.js +94 -0
  353. package/dist/operations/catalogue/portal.d.ts +3 -0
  354. package/dist/operations/catalogue/portal.d.ts.map +1 -0
  355. package/dist/operations/catalogue/portal.js +224 -0
  356. package/dist/operations/catalogue/print3d.d.ts +3 -0
  357. package/dist/operations/catalogue/print3d.d.ts.map +1 -0
  358. package/dist/operations/catalogue/print3d.js +275 -0
  359. package/dist/operations/catalogue/rainBeads.d.ts +3 -0
  360. package/dist/operations/catalogue/rainBeads.d.ts.map +1 -0
  361. package/dist/operations/catalogue/rainBeads.js +223 -0
  362. package/dist/operations/catalogue/restPose.d.ts +21 -0
  363. package/dist/operations/catalogue/restPose.d.ts.map +1 -0
  364. package/dist/operations/catalogue/restPose.js +55 -0
  365. package/dist/operations/catalogue/rimLight.d.ts +3 -0
  366. package/dist/operations/catalogue/rimLight.d.ts.map +1 -0
  367. package/dist/operations/catalogue/rimLight.js +72 -0
  368. package/dist/operations/catalogue/sandErosion.d.ts +3 -0
  369. package/dist/operations/catalogue/sandErosion.d.ts.map +1 -0
  370. package/dist/operations/catalogue/sandErosion.js +167 -0
  371. package/dist/operations/catalogue/shaderLayers.d.ts +74 -0
  372. package/dist/operations/catalogue/shaderLayers.d.ts.map +1 -0
  373. package/dist/operations/catalogue/shaderLayers.js +322 -0
  374. package/dist/operations/catalogue/shatter.d.ts +3 -0
  375. package/dist/operations/catalogue/shatter.d.ts.map +1 -0
  376. package/dist/operations/catalogue/shatter.js +267 -0
  377. package/dist/operations/catalogue/silkDrape.d.ts +3 -0
  378. package/dist/operations/catalogue/silkDrape.d.ts.map +1 -0
  379. package/dist/operations/catalogue/silkDrape.js +340 -0
  380. package/dist/operations/catalogue/spin.d.ts +3 -0
  381. package/dist/operations/catalogue/spin.d.ts.map +1 -0
  382. package/dist/operations/catalogue/spin.js +42 -0
  383. package/dist/operations/catalogue/surfaceSample.d.ts +17 -0
  384. package/dist/operations/catalogue/surfaceSample.d.ts.map +1 -0
  385. package/dist/operations/catalogue/surfaceSample.js +187 -0
  386. package/dist/operations/catalogue/swirl.d.ts +3 -0
  387. package/dist/operations/catalogue/swirl.d.ts.map +1 -0
  388. package/dist/operations/catalogue/swirl.js +69 -0
  389. package/dist/operations/catalogue/teleport.d.ts +3 -0
  390. package/dist/operations/catalogue/teleport.d.ts.map +1 -0
  391. package/dist/operations/catalogue/teleport.js +213 -0
  392. package/dist/operations/catalogue/transitionField.d.ts +124 -0
  393. package/dist/operations/catalogue/transitionField.d.ts.map +1 -0
  394. package/dist/operations/catalogue/transitionField.js +278 -0
  395. package/dist/operations/catalogue/unweave.d.ts +3 -0
  396. package/dist/operations/catalogue/unweave.d.ts.map +1 -0
  397. package/dist/operations/catalogue/unweave.js +233 -0
  398. package/dist/operations/catalogue/visibility.d.ts.map +1 -1
  399. package/dist/operations/catalogue/visibility.js +1 -0
  400. package/dist/operations/catalogue/voxelize.d.ts +3 -0
  401. package/dist/operations/catalogue/voxelize.d.ts.map +1 -0
  402. package/dist/operations/catalogue/voxelize.js +148 -0
  403. package/dist/operations/catalogue/warmup.d.ts +22 -0
  404. package/dist/operations/catalogue/warmup.d.ts.map +1 -0
  405. package/dist/operations/catalogue/warmup.js +106 -0
  406. package/dist/operations/catalogue/zoom.d.ts.map +1 -1
  407. package/dist/operations/catalogue/zoom.js +1 -0
  408. package/dist/operations/index.d.ts +4 -2
  409. package/dist/operations/index.d.ts.map +1 -1
  410. package/dist/operations/index.js +4 -2
  411. package/dist/operations/objectEffects.d.ts +46 -0
  412. package/dist/operations/objectEffects.d.ts.map +1 -0
  413. package/dist/operations/objectEffects.js +136 -0
  414. package/dist/operations/registry.d.ts +7 -2
  415. package/dist/operations/registry.d.ts.map +1 -1
  416. package/dist/operations/registry.js +45 -3
  417. package/dist/operations/runtime.d.ts +40 -2
  418. package/dist/operations/runtime.d.ts.map +1 -1
  419. package/dist/operations/runtime.js +164 -8
  420. package/dist/operations/types.d.ts +29 -3
  421. package/dist/operations/types.d.ts.map +1 -1
  422. package/dist/operations/types.js +6 -0
  423. package/dist/operations/useObjectEffectLayers.d.ts +4 -0
  424. package/dist/operations/useObjectEffectLayers.d.ts.map +1 -0
  425. package/dist/operations/useObjectEffectLayers.js +42 -0
  426. package/dist/operations/useOperationsRuntime.d.ts.map +1 -1
  427. package/dist/operations/useOperationsRuntime.js +42 -4
  428. package/dist/presets/landscapePresets.d.ts +1 -1
  429. package/dist/presets/landscapePresets.d.ts.map +1 -1
  430. package/dist/presets/landscapePresets.js +1 -1
  431. package/dist/presets/landscapeTypes.d.ts +1 -1
  432. package/dist/presets/landscapeTypes.d.ts.map +1 -1
  433. package/dist/presets/landscapeTypes.js +1 -1
  434. package/dist/presets/oceanSurfacePresets.d.ts +1 -1
  435. package/dist/presets/terrainPresets.d.ts +1 -1
  436. package/dist/presets/terrainPresets.d.ts.map +1 -1
  437. package/dist/presets/volumetricCloudPresets.d.ts +1 -1
  438. package/dist/types/cloudConfigs.d.ts +2 -309
  439. package/dist/types/cloudConfigs.d.ts.map +1 -1
  440. package/dist/types/cloudConfigs.js +2 -339
  441. package/dist/types/gridConfigs.d.ts +103 -0
  442. package/dist/types/gridConfigs.d.ts.map +1 -1
  443. package/dist/types/index.d.ts +9 -9
  444. package/dist/types/index.d.ts.map +1 -1
  445. package/dist/types/index.js +4 -4
  446. package/dist/types/landscapeConfigs.d.ts +2 -217
  447. package/dist/types/landscapeConfigs.d.ts.map +1 -1
  448. package/dist/types/landscapeConfigs.js +2 -256
  449. package/dist/types/oceanConfigs.d.ts +2 -289
  450. package/dist/types/oceanConfigs.d.ts.map +1 -1
  451. package/dist/types/oceanConfigs.js +2 -380
  452. package/dist/types/terrainConfigs.d.ts +2 -250
  453. package/dist/types/terrainConfigs.d.ts.map +1 -1
  454. package/dist/types/terrainConfigs.js +2 -292
  455. package/dist/utils/cloudUniforms.d.ts +1 -1
  456. package/dist/utils/configAnimations.d.ts +6 -0
  457. package/dist/utils/configAnimations.d.ts.map +1 -1
  458. package/dist/utils/configAnimations.js +14 -0
  459. package/dist/utils/gridConfig.d.ts +19 -0
  460. package/dist/utils/gridConfig.d.ts.map +1 -0
  461. package/dist/utils/gridConfig.js +52 -0
  462. package/dist/utils/handleCloudsAnimations.d.ts +1 -1
  463. package/dist/utils/handleCloudsAnimations.js +1 -1
  464. package/dist/utils/hasHoverAnimation.d.ts.map +1 -1
  465. package/dist/utils/hasHoverAnimation.js +0 -2
  466. package/dist/utils/landscapeUniforms.d.ts +1 -1
  467. package/dist/utils/landscapeUniforms.d.ts.map +1 -1
  468. package/dist/utils/oceanUniforms.d.ts +1 -1
  469. package/dist/utils/particleShape.d.ts +33 -0
  470. package/dist/utils/particleShape.d.ts.map +1 -0
  471. package/dist/utils/particleShape.js +207 -0
  472. package/dist/utils/particleTrails.d.ts.map +1 -1
  473. package/dist/utils/particleTrails.js +29 -14
  474. package/dist/utils/terrainUniforms.d.ts +1 -1
  475. package/dist/utils/terrainUniforms.d.ts.map +1 -1
  476. package/package.json +2 -2
@@ -0,0 +1,111 @@
1
+ // Frost — ice spreads over the object along a feathery front: the surface turns
2
+ // to faceted crystal (3D cellular pattern in the object's own space), glossy
3
+ // where the ice is clear and rough and white where frost crusts along the facet
4
+ // seams, with glints that catch the light cell by cell. The base colour and the
5
+ // roughness change BEFORE lighting, so the ice is lit by the scene like a real
6
+ // material. A state, not an exit: it stays frozen while on; reverting thaws.
7
+ import { Color } from 'three';
8
+ import { defineOperation } from '../types.js';
9
+ import { GLSL_WORLEY, addLayer, forEachMeshMaterial, removeLayer } from './shaderLayers.js';
10
+ import { DIRECTION_OPTIONS, createFieldState, fieldGlsl, fieldUniforms, runProgress, setFieldParams } from './transitionField.js';
11
+ const P = 'Frs';
12
+ const KEY = 'frost';
13
+ const STATE = '__opFrost';
14
+ function layerFor(st) {
15
+ // computed ONCE per fragment, in the first anchor (diffuse), then shared: the
16
+ // cellular pattern is the costly part to compile and to run
17
+ const frozen = /* glsl */ `
18
+ float frsT = FrsThreshold();
19
+ float frsF = FrsField(vFrsQ);
20
+ float fr = frsFr;
21
+ vec3 cell = frsCell;
22
+ float seam = frsSeam;
23
+ `;
24
+ return {
25
+ uniforms: { ...fieldUniforms(P, st.field), uFrsIce: st.ice, uFrsDensity: st.density },
26
+ common: `varying vec3 vFrsQ;\nvarying vec3 vFrsR;\nvarying vec3 vFrsView;\n${fieldGlsl(P)}\n${GLSL_WORLEY}`,
27
+ fragmentPars: 'float frsFr = 0.0; vec3 frsCell = vec3(1.0); float frsSeam = 0.0;',
28
+ vertex: /* glsl */ `
29
+ vFrsR = (uFrsRootInv * modelMatrix * vec4(transformed, 1.0)).xyz;
30
+ vFrsQ = FrsNorm(vFrsR);
31
+ vFrsView = (modelViewMatrix * vec4(transformed, 1.0)).xyz;`,
32
+ diffuse: /* glsl */ `
33
+ {
34
+ frsFr = smoothstep(0.0, uFrsEdgeWidth, FrsThreshold() - FrsField(vFrsQ));
35
+ frsCell = fxWorley(vFrsR * (uFrsDensity / uFrsExtent));
36
+ frsSeam = 1.0 - smoothstep(0.0, 0.09, frsCell.y - frsCell.x);
37
+ ${frozen}
38
+ vec3 clearIce = uFrsIce * (0.55 + 0.25 * cell.z);
39
+ vec3 crust = vec3(0.93, 0.96, 1.0);
40
+ vec3 ice = mix(clearIce, crust, clamp(seam * 0.9 + 0.2 * fxFbm(vFrsR / uFrsExtent * 18.0), 0.0, 1.0));
41
+ diffuseColor.rgb = mix(diffuseColor.rgb, ice, fr * 0.9);
42
+ }`,
43
+ material: /* glsl */ `
44
+ {
45
+ ${frozen}
46
+ roughnessFactor = mix(roughnessFactor, mix(0.12, 0.75, seam), fr);
47
+ metalnessFactor = mix(metalnessFactor, 0.0, fr);
48
+ }`,
49
+ fragment: /* glsl */ `
50
+ {
51
+ ${frozen}
52
+ vec3 v = normalize(-vFrsView);
53
+ // each facet has its own crystal plane: some catch the light, most don't
54
+ vec3 g = normalize(fxHash3(floor(vFrsR * (uFrsDensity / uFrsExtent)) + 17.0) - 0.5);
55
+ float glint = pow(max(dot(g, v), 0.0), 90.0) * (1.0 - seam);
56
+ vec3 nv = normalize(cross(dFdx(vFrsView), dFdy(vFrsView)));
57
+ float rim = pow(1.0 - abs(dot(nv, v)), 3.0);
58
+ // the growing front: a thin bright crystalline line
59
+ float front = exp(-abs(frsT - frsF) / 0.012) * step(0.0001, uFrsProgress) * step(uFrsProgress, 0.9999);
60
+ outgoingLight += fr * (vec3(1.0) * glint * 4.0 + uFrsIce * rim * 0.45) + vec3(0.85, 0.95, 1.0) * front * 1.2;
61
+ }`,
62
+ };
63
+ }
64
+ export default defineOperation({
65
+ value: 'frost',
66
+ label: 'Frost',
67
+ description: 'Spread faceted ice with glinting crystals over the targets — reverting thaws them',
68
+ channel: 'visual',
69
+ multi: true,
70
+ toggles: true,
71
+ usableIn: ['interaction', 'action', 'object'],
72
+ stack: 'surface',
73
+ params: {
74
+ direction: { type: 'select', label: 'Direction', default: 'up', options: DIRECTION_OPTIONS },
75
+ ice: { type: 'color', label: 'Ice', default: '#bfe4ff' },
76
+ density: { type: 'number', label: 'Crystals', default: 14, min: 3, max: 60, step: 1, hint: 'Facets across the object' },
77
+ scale: { type: 'number', label: 'Front pattern', default: 3, min: 0.5, max: 12, step: 0.1 },
78
+ duration: { type: 'number', label: 'Duration', default: 2.6, min: 0.3, max: 12, step: 0.1, unit: 's' },
79
+ },
80
+ apply(target, p, ctx) {
81
+ let st = target.userData[STATE];
82
+ if (!st) {
83
+ const field = createFieldState(target);
84
+ field.edgeWidth.value = 0.05;
85
+ st = { field, ice: { value: new Color() }, density: { value: 14 }, mats: new Set() };
86
+ const own = st;
87
+ const layer = layerFor(own);
88
+ forEachMeshMaterial(target, (mat, mesh) => {
89
+ if (mesh.userData?.__opFxHelper)
90
+ return;
91
+ if (addLayer(mat, KEY, layer))
92
+ own.mats.add(mat);
93
+ });
94
+ target.userData[STATE] = st;
95
+ }
96
+ const s = st;
97
+ setFieldParams(s.field, p, target, ctx);
98
+ s.ice.value.set(String(p.ice));
99
+ s.density.value = Number(p.density);
100
+ return runProgress(target, s.field, 1, { duration: Number(p.duration), ease: 'power1.out', hold: true });
101
+ },
102
+ revert(target, p) {
103
+ const s = target.userData[STATE];
104
+ if (!s)
105
+ return;
106
+ return runProgress(target, s.field, 0, {
107
+ duration: Number(p.duration), ease: 'power1.in',
108
+ onComplete: () => { s.mats.forEach(m => removeLayer(m, KEY)); delete target.userData[STATE]; },
109
+ });
110
+ },
111
+ });
@@ -0,0 +1,21 @@
1
+ import { InstancedMesh } from 'three';
2
+ import type { BufferGeometry, Object3D } from 'three';
3
+ import { type ShaderLayer } from './shaderLayers';
4
+ export interface FxInstancesOptions {
5
+ geometry: BufferGeometry;
6
+ count: number;
7
+ /** xyz root-local centre per instance */
8
+ positions: Float32Array;
9
+ /** rgb linear per instance */
10
+ colors: Float32Array;
11
+ /** Extra per-instance attributes, e.g. { aVoxBirth: [data, 1] } */
12
+ attributes: Record<string, [Float32Array, number]>;
13
+ layerKey: string;
14
+ layer: ShaderLayer;
15
+ roughness?: number;
16
+ metalness?: number;
17
+ doubleSided?: boolean;
18
+ }
19
+ export declare function createFxInstances(root: Object3D, o: FxInstancesOptions): InstancedMesh;
20
+ export declare function disposeFxInstances(mesh: InstancedMesh | null | undefined): void;
21
+ //# sourceMappingURL=fxInstances.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fxInstances.d.ts","sourceRoot":"","sources":["../../../src/operations/catalogue/fxInstances.ts"],"names":[],"mappings":"AAOA,OAAO,EAA+C,aAAa,EAAiC,MAAM,OAAO,CAAC;AAClH,OAAO,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACtD,OAAO,EAAY,KAAK,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAG5D,MAAM,WAAW,kBAAkB;IAC/B,QAAQ,EAAE,cAAc,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,yCAAyC;IACzC,SAAS,EAAE,YAAY,CAAC;IACxB,8BAA8B;IAC9B,MAAM,EAAE,YAAY,CAAC;IACrB,mEAAmE;IACnE,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC;IACnD,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,WAAW,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,kBAAkB,GAAG,aAAa,CA0BtF;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI,GAAG,SAAS,QAMxE"}
@@ -0,0 +1,47 @@
1
+ // =============================================================================
2
+ // Effect instances — an InstancedMesh attached to a target for the length of an
3
+ // effect (voxels, petals…). A real lit MeshStandardMaterial, so the pieces are
4
+ // shaded and cast shadows like the object itself; their motion is a shader layer
5
+ // (per-instance attributes), so nothing is animated on the CPU.
6
+ // Root-local, never raycasts, never counts in bounds, disposed with the effect.
7
+ // =============================================================================
8
+ import { Color, DoubleSide, InstancedBufferAttribute, InstancedMesh, Matrix4, MeshStandardMaterial } from 'three';
9
+ import { addLayer } from './shaderLayers.js';
10
+ import { hideUntilWarm } from './warmup.js';
11
+ export function createFxInstances(root, o) {
12
+ const geo = o.geometry;
13
+ for (const [name, [data, size]] of Object.entries(o.attributes))
14
+ geo.setAttribute(name, new InstancedBufferAttribute(data, size));
15
+ const mat = new MeshStandardMaterial({
16
+ roughness: o.roughness ?? 0.6, metalness: o.metalness ?? 0.05,
17
+ side: o.doubleSided ? DoubleSide : undefined,
18
+ });
19
+ addLayer(mat, o.layerKey, o.layer, { immediate: true }); // a new material: compiled as a helper
20
+ const mesh = new InstancedMesh(geo, mat, o.count);
21
+ const m = new Matrix4();
22
+ const c = new Color();
23
+ for (let i = 0; i < o.count; i++) {
24
+ m.makeTranslation(o.positions[i * 3], o.positions[i * 3 + 1], o.positions[i * 3 + 2]);
25
+ mesh.setMatrixAt(i, m);
26
+ mesh.setColorAt(i, c.setRGB(o.colors[i * 3], o.colors[i * 3 + 1], o.colors[i * 3 + 2]));
27
+ }
28
+ mesh.instanceMatrix.needsUpdate = true;
29
+ if (mesh.instanceColor)
30
+ mesh.instanceColor.needsUpdate = true;
31
+ mesh.frustumCulled = false;
32
+ mesh.castShadow = true;
33
+ mesh.receiveShadow = true;
34
+ mesh.raycast = () => { };
35
+ mesh.userData.__opFxHelper = true;
36
+ root.add(mesh);
37
+ hideUntilWarm(mesh);
38
+ return mesh;
39
+ }
40
+ export function disposeFxInstances(mesh) {
41
+ if (!mesh)
42
+ return;
43
+ mesh.removeFromParent();
44
+ mesh.geometry.dispose();
45
+ mesh.material.dispose();
46
+ mesh.dispose();
47
+ }
@@ -0,0 +1,22 @@
1
+ import { Points } from 'three';
2
+ import type { Object3D } from 'three';
3
+ import type { SurfaceSample } from './surfaceSample';
4
+ export interface FxPointsOptions {
5
+ uniforms: Record<string, {
6
+ value: unknown;
7
+ }>;
8
+ /** GLSL before main (after uniform/attribute declarations). */
9
+ vertexPars: string;
10
+ /**
11
+ * main() body. Attributes: aP (root-local position), aN (normal), aC (colour),
12
+ * aR (vec4 random). Must write gl_Position, gl_PointSize and vColor (rgb) / vAlpha.
13
+ * `uFxViewH` is the drawing-buffer height, for perspective point sizes.
14
+ */
15
+ vertexMain: string;
16
+ additive: boolean;
17
+ }
18
+ export declare function createFxPoints(root: Object3D, sample: SurfaceSample, o: FxPointsOptions): Points;
19
+ export declare function disposeFxPoints(pts: Points | null | undefined): void;
20
+ /** Perspective point size in pixels for a world-size `s` at view depth `z` (GLSL). */
21
+ export declare const GLSL_POINT_SIZE = "\nfloat fxPointPx(float s, vec4 mv) { return s * uFxViewH * projectionMatrix[1][1] * 0.5 / max(-mv.z, 1e-3); }\n";
22
+ //# sourceMappingURL=fxPoints.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fxPoints.d.ts","sourceRoot":"","sources":["../../../src/operations/catalogue/fxPoints.ts"],"names":[],"mappings":"AAKA,OAAO,EAAqE,MAAM,EAA2B,MAAM,OAAO,CAAC;AAC3H,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAIrD,MAAM,WAAW,eAAe;IAC5B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IAC7C,+DAA+D;IAC/D,UAAU,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;CACrB;AAiBD,wBAAgB,cAAc,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,EAAE,eAAe,GAAG,MAAM,CAoChG;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,QAK7D;AAED,sFAAsF;AACtF,eAAO,MAAM,eAAe,qHAE3B,CAAC"}
@@ -0,0 +1,70 @@
1
+ // =============================================================================
2
+ // Effect particles — a Points cloud attached to a target for the length of a
3
+ // transition. Lives in the target's root-local space (so it moves with it),
4
+ // never raycasts, never counts in bounds, and is disposed with the effect.
5
+ // =============================================================================
6
+ import { AdditiveBlending, BufferAttribute, BufferGeometry, NormalBlending, Points, ShaderMaterial, Vector2 } from 'three';
7
+ import { uniformDecl } from './shaderLayers.js';
8
+ import { hideUntilWarm } from './warmup.js';
9
+ const FRAG = /* glsl */ `
10
+ varying vec3 vColor;
11
+ varying float vAlpha;
12
+ void main() {
13
+ vec2 d = gl_PointCoord - 0.5;
14
+ float r2 = dot(d, d) * 4.0;
15
+ if (r2 > 1.0) discard;
16
+ // soft core + halo
17
+ float a = exp(-r2 * 3.2) * vAlpha;
18
+ if (a < 0.004) discard;
19
+ gl_FragColor = vec4(vColor * a, a);
20
+ #include <tonemapping_fragment>
21
+ #include <colorspace_fragment>
22
+ }`;
23
+ export function createFxPoints(root, sample, o) {
24
+ const geo = new BufferGeometry();
25
+ geo.setAttribute('position', new BufferAttribute(sample.position.slice(0, sample.count * 3), 3));
26
+ geo.setAttribute('aP', new BufferAttribute(sample.position.slice(0, sample.count * 3), 3));
27
+ geo.setAttribute('aN', new BufferAttribute(sample.normal.slice(0, sample.count * 3), 3));
28
+ geo.setAttribute('aC', new BufferAttribute(sample.color.slice(0, sample.count * 3), 3));
29
+ geo.setAttribute('aR', new BufferAttribute(sample.random.slice(0, sample.count * 4), 4));
30
+ const viewH = { value: 1000 };
31
+ const uniforms = { ...o.uniforms, uFxViewH: viewH };
32
+ const decl = Object.keys(uniforms).map(n => uniformDecl(n, uniforms[n].value)).join('\n');
33
+ const mat = new ShaderMaterial({
34
+ uniforms: uniforms,
35
+ vertexShader: `${decl}
36
+ attribute vec3 aP; attribute vec3 aN; attribute vec3 aC; attribute vec4 aR;
37
+ varying vec3 vColor; varying float vAlpha;
38
+ ${o.vertexPars}
39
+ void main() {
40
+ ${o.vertexMain}
41
+ }`,
42
+ fragmentShader: FRAG,
43
+ transparent: true,
44
+ depthWrite: false,
45
+ // premultiplied: additive glow, or normal "over" for solid colour
46
+ blending: o.additive ? AdditiveBlending : NormalBlending,
47
+ premultipliedAlpha: true,
48
+ });
49
+ const pts = new Points(geo, mat);
50
+ pts.frustumCulled = false;
51
+ pts.raycast = () => { };
52
+ pts.userData.__opFxHelper = true;
53
+ pts.renderOrder = 10;
54
+ const size = new Vector2();
55
+ pts.onBeforeRender = (renderer) => { viewH.value = renderer.getDrawingBufferSize(size).y; };
56
+ root.add(pts);
57
+ hideUntilWarm(pts);
58
+ return pts;
59
+ }
60
+ export function disposeFxPoints(pts) {
61
+ if (!pts)
62
+ return;
63
+ pts.removeFromParent();
64
+ pts.geometry.dispose();
65
+ pts.material.dispose();
66
+ }
67
+ /** Perspective point size in pixels for a world-size `s` at view depth `z` (GLSL). */
68
+ export const GLSL_POINT_SIZE = /* glsl */ `
69
+ float fxPointPx(float s, vec4 mv) { return s * uFxViewH * projectionMatrix[1][1] * 0.5 / max(-mv.z, 1e-3); }
70
+ `;
@@ -1 +1 @@
1
- {"version":3,"file":"glow.d.ts","sourceRoot":"","sources":["../../../src/operations/catalogue/glow.ts"],"names":[],"mappings":";AAMA,wBAyCG"}
1
+ {"version":3,"file":"glow.d.ts","sourceRoot":"","sources":["../../../src/operations/catalogue/glow.ts"],"names":[],"mappings":";AAMA,wBA0CG"}
@@ -6,9 +6,10 @@ export default defineOperation({
6
6
  value: 'glow',
7
7
  label: 'Glow',
8
8
  description: 'Light the targets up with an emissive glow',
9
+ channel: 'visual',
9
10
  multi: true,
10
11
  toggles: true,
11
- usableIn: ['interaction', 'action'],
12
+ usableIn: ['interaction', 'action', 'object'],
12
13
  params: {
13
14
  color: { type: 'color', label: 'Colour', default: '#3380ff' },
14
15
  intensity: { type: 'number', label: 'Intensity', default: 3, min: 0, max: 20, step: 0.1 },
@@ -0,0 +1,3 @@
1
+ declare const _default: import("..").OperationDefinition;
2
+ export default _default;
3
+ //# sourceMappingURL=heatCracks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"heatCracks.d.ts","sourceRoot":"","sources":["../../../src/operations/catalogue/heatCracks.ts"],"names":[],"mappings":";AAoFA,wBAoDG"}
@@ -0,0 +1,134 @@
1
+ // Heat cracks — heat takes hold of the object and you see what it does to it:
2
+ // a network of cracks spreads along the front and glows from inside like cooling
3
+ // lava; the cracks sink into the surface (real relief — vertices along the crack
4
+ // seams are pushed in, the plates between them swell slightly), the plates char
5
+ // and darken from their edges inward, and a few plates run hot as a whole. The
6
+ // glow keeps breathing slowly while the effect is on. A state, not an exit —
7
+ // nothing dissolves; reverting cools the object and the cracks close.
8
+ import { gsap } from 'gsap';
9
+ import { Color } from 'three';
10
+ import { defineOperation } from '../types.js';
11
+ import { GLSL_WORLEY, addLayer, forEachMeshMaterial, removeLayer } from './shaderLayers.js';
12
+ import { DIRECTION_OPTIONS, createFieldState, fieldGlsl, fieldUniforms, runProgress, setFieldParams, syncRoot } from './transitionField.js';
13
+ const P = 'Hot';
14
+ const KEY = 'heatCracks';
15
+ const STATE = '__opHeatCracks';
16
+ const CRACKS = /* glsl */ `
17
+ // how far the cracking has got at a point, and where the seams are
18
+ float hotCracked(vec3 q) { return smoothstep(0.0, uHotEdgeWidth, HotThreshold() - HotField(q)); }
19
+ vec3 hotCells(vec3 r) { return fxWorley(r * (uHotDensity / uHotExtent)); }
20
+ `;
21
+ function layerFor(st) {
22
+ return {
23
+ uniforms: { ...fieldUniforms(P, st.field), uHotHeat: st.heat, uHotDensity: st.density, uHotDepth: st.depth },
24
+ common: `varying vec3 vHotQ;\nvarying vec3 vHotR;\n${fieldGlsl(P)}\n${GLSL_WORLEY}\n${CRACKS}`,
25
+ fragmentPars: 'vec3 hotCell = vec3(1.0); float hotCr = 0.0; bool hotDone = false;',
26
+ vertex: /* glsl */ `
27
+ {
28
+ vec3 r = (uHotRootInv * modelMatrix * vec4(transformed, 1.0)).xyz;
29
+ vec3 q = HotNorm(r);
30
+ float cracked = hotCracked(q);
31
+ vec3 cell = hotCells(r);
32
+ float e = cell.y - cell.x;
33
+ // seams sink, plates swell a touch — relief that catches the light
34
+ float relief = -(1.0 - smoothstep(0.0, 0.12, e)) + 0.25 * smoothstep(0.12, 0.5, e);
35
+ transformed += normal * (relief * cracked * uHotDepth * 0.012 * uHotExtent);
36
+ vHotR = r;
37
+ vHotQ = q;
38
+ }`,
39
+ diffuse: /* glsl */ `
40
+ {
41
+ // computed once here, shared with the lighting pass below
42
+ hotCr = hotCracked(vHotQ);
43
+ hotCell = hotCells(vHotR);
44
+ hotDone = true;
45
+ float cracked = hotCr;
46
+ vec3 cell = hotCell;
47
+ float e = cell.y - cell.x;
48
+ // plates char from their edges inward as the heat soaks in
49
+ float soak = cracked * clamp(uHotProgress * 1.2, 0.0, 1.0);
50
+ float charEdge = 1.0 - smoothstep(0.0, 0.35 * soak + 0.05, e);
51
+ vec3 charred = vec3(0.06, 0.05, 0.045);
52
+ diffuseColor.rgb = mix(diffuseColor.rgb, charred, cracked * (0.35 + 0.6 * charEdge));
53
+ }`,
54
+ material: /* glsl */ `
55
+ {
56
+ float cracked = hotDone ? hotCr : hotCracked(vHotQ);
57
+ roughnessFactor = mix(roughnessFactor, 0.9, cracked);
58
+ metalnessFactor = mix(metalnessFactor, 0.0, cracked);
59
+ }`,
60
+ fragment: /* glsl */ `
61
+ {
62
+ if (!hotDone) { hotCr = hotCracked(vHotQ); hotCell = hotCells(vHotR); }
63
+ float cracked = hotCr;
64
+ vec3 cell = hotCell;
65
+ float e = cell.y - cell.x;
66
+ float cw = 0.05 + 0.04 * uHotProgress; // cracks widen as it heats
67
+ float crack = (1.0 - smoothstep(0.0, cw, e)) * cracked;
68
+ float breathe = 0.72 + 0.28 * sin(uHotTime * 1.1 + cell.z * 6.2832);
69
+ // a few whole plates run hot
70
+ float hotPlate = step(0.8, cell.z) * cracked * 0.35 * breathe;
71
+ float T = clamp(crack * breathe + hotPlate, 0.0, 1.0);
72
+ vec3 bb = mix(uHotHeat * vec3(0.35, 0.05, 0.0), uHotHeat, smoothstep(0.0, 0.6, T));
73
+ bb = mix(bb, vec3(1.0, 0.9, 0.65), smoothstep(0.75, 1.0, T));
74
+ float front = exp(-abs(HotThreshold() - HotField(vHotQ)) / 0.02) * step(0.0001, uHotProgress) * step(uHotProgress, 0.9999);
75
+ outgoingLight += bb * T * 3.0 + uHotHeat * front * 0.8;
76
+ }`,
77
+ };
78
+ }
79
+ export default defineOperation({
80
+ value: 'heatCracks',
81
+ label: 'Heat cracks',
82
+ description: 'Crack the targets with glowing lava seams that sink into the surface and char it — reverting cools them',
83
+ channel: 'visual',
84
+ multi: true,
85
+ toggles: true,
86
+ usableIn: ['interaction', 'action', 'object'],
87
+ params: {
88
+ direction: { type: 'select', label: 'Direction', default: 'up', options: DIRECTION_OPTIONS },
89
+ heat: { type: 'color', label: 'Heat', default: '#ff5a14' },
90
+ density: { type: 'number', label: 'Cracks', default: 9, min: 2, max: 40, step: 1, hint: 'Crack cells across the object' },
91
+ depth: { type: 'number', label: 'Crack depth', default: 1, min: 0, max: 4, step: 0.05, unit: '×' },
92
+ scale: { type: 'number', label: 'Front pattern', default: 2.5, min: 0.5, max: 12, step: 0.1 },
93
+ duration: { type: 'number', label: 'Duration', default: 3, min: 0.3, max: 12, step: 0.1, unit: 's' },
94
+ },
95
+ apply(target, p, ctx) {
96
+ let st = target.userData[STATE];
97
+ if (!st) {
98
+ const field = createFieldState(target);
99
+ field.edgeWidth.value = 0.06;
100
+ const own = { field, heat: { value: new Color() }, density: { value: 9 }, depth: { value: 1 }, mats: new Set() };
101
+ // the glow keeps breathing while the object stays cracked
102
+ own.tick = () => { own.field.time.value += gsap.ticker.deltaRatio() / 60; syncRoot(target, own.field); };
103
+ const layer = layerFor(own);
104
+ forEachMeshMaterial(target, (mat, mesh) => {
105
+ if (mesh.userData?.__opFxHelper)
106
+ return;
107
+ if (addLayer(mat, KEY, layer))
108
+ own.mats.add(mat);
109
+ });
110
+ gsap.ticker.add(own.tick);
111
+ st = own;
112
+ target.userData[STATE] = st;
113
+ }
114
+ const s = st;
115
+ setFieldParams(s.field, p, target, ctx);
116
+ s.heat.value.set(String(p.heat));
117
+ s.density.value = Number(p.density);
118
+ s.depth.value = Number(p.depth);
119
+ return runProgress(target, s.field, 1, { duration: Number(p.duration), ease: 'power1.out', clock: false });
120
+ },
121
+ revert(target, p) {
122
+ const s = target.userData[STATE];
123
+ if (!s)
124
+ return;
125
+ return runProgress(target, s.field, 0, {
126
+ duration: Number(p.duration), ease: 'power1.in', clock: false,
127
+ onComplete: () => {
128
+ gsap.ticker.remove(s.tick);
129
+ s.mats.forEach(m => removeLayer(m, KEY));
130
+ delete target.userData[STATE];
131
+ },
132
+ });
133
+ },
134
+ });
@@ -0,0 +1,3 @@
1
+ declare const _default: import("..").OperationDefinition;
2
+ export default _default;
3
+ //# sourceMappingURL=hologram.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hologram.d.ts","sourceRoot":"","sources":["../../../src/operations/catalogue/hologram.ts"],"names":[],"mappings":";AAgBA,wBAsFG"}
@@ -0,0 +1,118 @@
1
+ // Hologram scan — a scan plane sweeps the target and turns the solid surface into
2
+ // a hologram: glowing grid lines in the object's own space, a Fresnel rim and
3
+ // drifting scanlines, everything else cut away (no transparency, so it sorts
4
+ // cleanly). A second plane follows and switches the hologram off.
5
+ // Reverting scans it back in: hologram first, then solid.
6
+ import { defineOperation } from '../types.js';
7
+ import { addLayer, forEachMeshMaterial, removeLayer } from './shaderLayers.js';
8
+ import { SWEEP_OPTIONS, createFieldState, fieldGlsl, fieldUniforms, runProgress, setFieldParams } from './transitionField.js';
9
+ import { Color } from 'three';
10
+ const P = 'Holo';
11
+ const KEY = 'hologram';
12
+ const STATE = '__opHologram';
13
+ export default defineOperation({
14
+ value: 'hologram',
15
+ label: 'Hologram scan',
16
+ description: 'A scan plane turns the targets into a glowing hologram, then switches it off — reverting scans them back in',
17
+ channel: 'visual',
18
+ multi: true,
19
+ toggles: true,
20
+ usableIn: ['interaction', 'action', 'object'],
21
+ objectParams: { disappear: false },
22
+ params: {
23
+ direction: { type: 'select', label: 'Scan', default: 'down', options: SWEEP_OPTIONS },
24
+ color: { type: 'color', label: 'Colour', default: '#3fd4ff' },
25
+ density: { type: 'number', label: 'Grid', default: 14, min: 2, max: 60, step: 1, hint: 'Grid lines across the object' },
26
+ disappear: { type: 'boolean', label: 'Disappear', default: true, hint: 'Off: the object stays as a hologram after the scan' },
27
+ hold: { type: 'number', label: 'Hologram band', default: 0.45, min: 0.1, max: 1, step: 0.05, hint: 'How much of the object is hologram at once' },
28
+ duration: { type: 'number', label: 'Duration', default: 2.4, min: 0.3, max: 12, step: 0.1, unit: 's' },
29
+ },
30
+ apply(target, p, ctx) {
31
+ let st = target.userData[STATE];
32
+ if (!st) {
33
+ const field = createFieldState(target);
34
+ st = { field, color: { value: new Color() }, density: { value: 14 }, gap: { value: 0.45 }, keep: { value: 0 }, mats: new Set() };
35
+ const own = st;
36
+ const layer = {
37
+ uniforms: { ...fieldUniforms(P, field), uHoloColor: st.color, uHoloDensity: st.density, uHoloGap: st.gap, uHoloKeep: st.keep },
38
+ common: `varying vec3 vHoloR;\nvarying vec3 vHoloView;\n${fieldGlsl(P)}`,
39
+ vertex: /* glsl */ `
40
+ vHoloR = (uHoloRootInv * modelMatrix * vec4(transformed, 1.0)).xyz;
41
+ vHoloView = (modelViewMatrix * vec4(transformed, 1.0)).xyz;`,
42
+ fragment: /* glsl */ `
43
+ {
44
+ vec3 q = HoloNorm(vHoloR);
45
+ // scan coordinate: 0 where the scan starts, 1 where it ends
46
+ float s = HoloAlong(q);
47
+ float band = 0.02;
48
+ float fa = mix(-band, 1.0 + uHoloGap + band, clamp(uHoloProgress, 0.0, 1.0)); // solid → hologram
49
+ // hologram → gone (never, when the object should stay as a hologram)
50
+ float fb = uHoloKeep > 0.5 ? -1.0 : fa - uHoloGap;
51
+ if (s < fb) discard;
52
+ if (s < fa) {
53
+ // grid in root-local units, square cells, anti-aliased
54
+ vec3 cell = vHoloR * (uHoloDensity / uHoloExtent);
55
+ vec3 g = abs(fract(cell - 0.5) - 0.5) / max(fwidth(cell), vec3(1e-4));
56
+ float line = 1.0 - clamp(min(min(g.x, g.y), g.z), 0.0, 1.0);
57
+ // facing ratio from screen-space derivatives: works on lit and unlit materials
58
+ vec3 nv = normalize(cross(dFdx(vHoloView), dFdy(vHoloView)));
59
+ float fres = pow(1.0 - abs(dot(nv, normalize(-vHoloView))), 2.0);
60
+ float scan = 0.5 + 0.5 * sin(vHoloR.y / uHoloExtent * 180.0 - uHoloTime * 5.0);
61
+ float I = line * 0.9 + fres * 1.1 + scan * 0.12;
62
+ // hot edges at both planes
63
+ I += exp(-abs(s - fa) / 0.012) * 2.5 + exp(-abs(s - fb) / 0.01) * 1.5;
64
+ if (I < 0.32) discard;
65
+ outgoingLight = uHoloColor * I * 1.6;
66
+ } else {
67
+ // the solid side gets a faint pre-glow just ahead of the plane
68
+ outgoingLight += uHoloColor * exp(-(s - fa) / 0.03) * 0.6;
69
+ }
70
+ }`,
71
+ };
72
+ forEachMeshMaterial(target, (mat, mesh) => {
73
+ if (mesh.userData?.__opFxHelper)
74
+ return;
75
+ if (addLayer(mat, KEY, layer))
76
+ own.mats.add(mat);
77
+ });
78
+ target.userData[STATE] = st;
79
+ }
80
+ const s = st;
81
+ setFieldParams(s.field, { direction: p.direction }, target, ctx);
82
+ s.color.value.set(String(p.color));
83
+ s.density.value = Number(p.density);
84
+ s.gap.value = Number(p.hold);
85
+ const keep = p.disappear === false;
86
+ s.keep.value = keep ? 1 : 0;
87
+ return runProgress(target, s.field, 1, {
88
+ duration: Number(p.duration), ease: 'power1.inOut', hold: keep,
89
+ onComplete: () => { if (!keep)
90
+ setMeshesHidden(target, true); },
91
+ });
92
+ },
93
+ revert(target, p) {
94
+ const s = target.userData[STATE];
95
+ if (!s)
96
+ return;
97
+ setMeshesHidden(target, false);
98
+ return runProgress(target, s.field, 0, {
99
+ duration: Number(p.duration), ease: 'power1.inOut',
100
+ onComplete: () => { s.mats.forEach(m => removeLayer(m, KEY)); delete target.userData[STATE]; },
101
+ });
102
+ },
103
+ });
104
+ function setMeshesHidden(target, hidden) {
105
+ target.traverse((c) => {
106
+ if (!c.isMesh || c.userData?.__opFxHelper)
107
+ return;
108
+ if (hidden) {
109
+ if (c.userData.__opHoloVis === undefined)
110
+ c.userData.__opHoloVis = c.visible;
111
+ c.visible = false;
112
+ }
113
+ else if (c.userData.__opHoloVis !== undefined) {
114
+ c.visible = c.userData.__opHoloVis;
115
+ delete c.userData.__opHoloVis;
116
+ }
117
+ });
118
+ }
@@ -0,0 +1,3 @@
1
+ declare const _default: import("..").OperationDefinition;
2
+ export default _default;
3
+ //# sourceMappingURL=inkBloom.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inkBloom.d.ts","sourceRoot":"","sources":["../../../src/operations/catalogue/inkBloom.ts"],"names":[],"mappings":";AAmDA,wBA4GG"}