@3driseai/3drise-viewer 0.1.26 → 0.1.27
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/animationsV2/ClipPlayer.d.ts +3 -0
- package/dist/animationsV2/ClipPlayer.d.ts.map +1 -1
- package/dist/animationsV2/ClipPlayer.js +67 -8
- package/dist/animationsV2/ClipsRuntime.d.ts +39 -0
- package/dist/animationsV2/ClipsRuntime.d.ts.map +1 -1
- package/dist/animationsV2/ClipsRuntime.js +245 -14
- package/dist/animationsV2/appliers.d.ts +5 -0
- package/dist/animationsV2/appliers.d.ts.map +1 -1
- package/dist/animationsV2/appliers.js +25 -7
- package/dist/animationsV2/index.d.ts +1 -1
- package/dist/animationsV2/index.d.ts.map +1 -1
- package/dist/animationsV2/normalize.d.ts.map +1 -1
- package/dist/animationsV2/normalize.js +18 -7
- package/dist/animationsV2/sequenceUtils.d.ts +42 -1
- package/dist/animationsV2/sequenceUtils.d.ts.map +1 -1
- package/dist/animationsV2/sequenceUtils.js +103 -3
- package/dist/animationsV2/types.d.ts +20 -0
- package/dist/animationsV2/types.d.ts.map +1 -1
- package/dist/components/AdvancedGrid.d.ts +8 -2
- package/dist/components/AdvancedGrid.d.ts.map +1 -1
- package/dist/components/AdvancedGrid.js +31 -14
- package/dist/components/AnimatedObject.d.ts.map +1 -1
- package/dist/components/AnimatedObject.js +7 -5
- package/dist/components/Bubbles.d.ts +7 -1
- package/dist/components/Bubbles.d.ts.map +1 -1
- package/dist/components/Bubbles.js +42 -22
- package/dist/components/ChladniGrid.d.ts +8 -4
- package/dist/components/ChladniGrid.d.ts.map +1 -1
- package/dist/components/ChladniGrid.js +31 -13
- package/dist/components/CircuitGrid.d.ts +8 -11
- package/dist/components/CircuitGrid.d.ts.map +1 -1
- package/dist/components/CircuitGrid.js +31 -13
- package/dist/components/CloudsGenerator.d.ts +1 -1
- package/dist/components/CloudsGenerator.js +1 -1
- package/dist/components/ContourGrid.d.ts +8 -14
- package/dist/components/ContourGrid.d.ts.map +1 -1
- package/dist/components/ContourGrid.js +31 -13
- package/dist/components/EffectsGenerator.d.ts +7 -1
- package/dist/components/EffectsGenerator.d.ts.map +1 -1
- package/dist/components/EffectsGenerator.js +39 -38
- package/dist/components/EnvironmentManager.d.ts +4 -4
- package/dist/components/EnvironmentManager.d.ts.map +1 -1
- package/dist/components/FlowNetGrid.d.ts +8 -4
- package/dist/components/FlowNetGrid.d.ts.map +1 -1
- package/dist/components/FlowNetGrid.js +31 -13
- package/dist/components/FractalGrid.d.ts +8 -12
- package/dist/components/FractalGrid.d.ts.map +1 -1
- package/dist/components/FractalGrid.js +31 -13
- package/dist/components/GirihGrid.d.ts +8 -1
- package/dist/components/GirihGrid.d.ts.map +1 -1
- package/dist/components/GirihGrid.js +31 -13
- package/dist/components/Glyphs.d.ts +7 -1
- package/dist/components/Glyphs.d.ts.map +1 -1
- package/dist/components/Glyphs.js +40 -34
- package/dist/components/GravWaveGrid.d.ts +8 -1
- package/dist/components/GravWaveGrid.d.ts.map +1 -1
- package/dist/components/GravWaveGrid.js +31 -13
- package/dist/components/GridsGenerator.d.ts +7 -1
- package/dist/components/GridsGenerator.d.ts.map +1 -1
- package/dist/components/GridsGenerator.js +20 -18
- package/dist/components/HexGrid.d.ts +8 -10
- package/dist/components/HexGrid.d.ts.map +1 -1
- package/dist/components/HexGrid.js +31 -13
- package/dist/components/HyperbolicGrid.d.ts +8 -4
- package/dist/components/HyperbolicGrid.d.ts.map +1 -1
- package/dist/components/HyperbolicGrid.js +31 -13
- package/dist/components/LandscapeBuilder.d.ts +1 -1
- package/dist/components/LandscapeBuilder.d.ts.map +1 -1
- package/dist/components/LandscapeBuilder.js +1 -1
- package/dist/components/LandscapeObject.d.ts +1 -1
- package/dist/components/LandscapeObject.d.ts.map +1 -1
- package/dist/components/LandscapeObject.js +1 -1
- package/dist/components/MoireGrid.d.ts +8 -12
- package/dist/components/MoireGrid.d.ts.map +1 -1
- package/dist/components/MoireGrid.js +31 -13
- package/dist/components/ObjectNode.d.ts.map +1 -1
- package/dist/components/ObjectNode.js +2 -2
- package/dist/components/ObjectsRenderer.d.ts.map +1 -1
- package/dist/components/ObjectsRenderer.js +37 -3
- package/dist/components/OceanBuilder.d.ts +1 -1
- package/dist/components/OceanBuilder.js +1 -1
- package/dist/components/ParticlesGenerator.d.ts.map +1 -1
- package/dist/components/ParticlesGenerator.js +6 -0
- package/dist/components/QuasiGrid.d.ts +8 -11
- package/dist/components/QuasiGrid.d.ts.map +1 -1
- package/dist/components/QuasiGrid.js +31 -13
- package/dist/components/RadarGrid.d.ts +8 -13
- package/dist/components/RadarGrid.d.ts.map +1 -1
- package/dist/components/RadarGrid.js +31 -13
- package/dist/components/ReactionDiffusionGrid.d.ts +8 -1
- package/dist/components/ReactionDiffusionGrid.d.ts.map +1 -1
- package/dist/components/ReactionDiffusionGrid.js +33 -139
- package/dist/components/SceneBuilder.js +1 -1
- package/dist/components/SkySystem.d.ts +1 -1
- package/dist/components/SparklesBurst.d.ts +7 -1
- package/dist/components/SparklesBurst.d.ts.map +1 -1
- package/dist/components/SparklesBurst.js +31 -28
- package/dist/components/TerrainBuilder.d.ts +1 -1
- package/dist/components/TerrainBuilder.d.ts.map +1 -1
- package/dist/components/TerrainBuilder.js +1 -1
- package/dist/components/VoronoiGrid.d.ts +8 -10
- package/dist/components/VoronoiGrid.d.ts.map +1 -1
- package/dist/components/VoronoiGrid.js +31 -13
- package/dist/components/WallpaperGrid.d.ts +8 -1
- package/dist/components/WallpaperGrid.d.ts.map +1 -1
- package/dist/components/WallpaperGrid.js +33 -210
- package/dist/components/effects/AuraEffect.d.ts +8 -3
- package/dist/components/effects/AuraEffect.d.ts.map +1 -1
- package/dist/components/effects/AuraEffect.js +49 -24
- package/dist/components/effects/AuroraEffect.d.ts +8 -3
- package/dist/components/effects/AuroraEffect.d.ts.map +1 -1
- package/dist/components/effects/AuroraEffect.js +45 -25
- package/dist/components/effects/BlackHoleEffect.d.ts +8 -3
- package/dist/components/effects/BlackHoleEffect.d.ts.map +1 -1
- package/dist/components/effects/BlackHoleEffect.js +42 -21
- package/dist/components/effects/ConstellationEffect.d.ts +8 -3
- package/dist/components/effects/ConstellationEffect.d.ts.map +1 -1
- package/dist/components/effects/ConstellationEffect.js +49 -23
- package/dist/components/effects/DandelionSeedsEffect.d.ts +7 -2
- package/dist/components/effects/DandelionSeedsEffect.d.ts.map +1 -1
- package/dist/components/effects/DandelionSeedsEffect.js +19 -9
- package/dist/components/effects/DataStreamEffect.d.ts +8 -3
- package/dist/components/effects/DataStreamEffect.d.ts.map +1 -1
- package/dist/components/effects/DataStreamEffect.js +54 -26
- package/dist/components/effects/DnaHelixEffect.d.ts +8 -3
- package/dist/components/effects/DnaHelixEffect.d.ts.map +1 -1
- package/dist/components/effects/DnaHelixEffect.js +62 -30
- package/dist/components/effects/FallingLeavesEffect.d.ts +7 -2
- package/dist/components/effects/FallingLeavesEffect.d.ts.map +1 -1
- package/dist/components/effects/FallingLeavesEffect.js +19 -9
- package/dist/components/effects/FieldLinesEffect.d.ts +8 -3
- package/dist/components/effects/FieldLinesEffect.d.ts.map +1 -1
- package/dist/components/effects/FieldLinesEffect.js +30 -20
- package/dist/components/effects/Fire.d.ts +8 -3
- package/dist/components/effects/Fire.d.ts.map +1 -1
- package/dist/components/effects/Fire.js +47 -10
- package/dist/components/effects/FireflySwarmEffect.d.ts +7 -2
- package/dist/components/effects/FireflySwarmEffect.d.ts.map +1 -1
- package/dist/components/effects/FireflySwarmEffect.js +19 -9
- package/dist/components/effects/Flares.d.ts +10 -3
- package/dist/components/effects/Flares.d.ts.map +1 -1
- package/dist/components/effects/Flares.js +53 -56
- package/dist/components/effects/ForcefieldEffect.d.ts +8 -3
- package/dist/components/effects/ForcefieldEffect.d.ts.map +1 -1
- package/dist/components/effects/ForcefieldEffect.js +52 -33
- package/dist/components/effects/GalaxyEffect.d.ts +7 -2
- package/dist/components/effects/GalaxyEffect.d.ts.map +1 -1
- package/dist/components/effects/GalaxyEffect.js +19 -9
- package/dist/components/effects/HarmonicShellEffect.d.ts +8 -3
- package/dist/components/effects/HarmonicShellEffect.d.ts.map +1 -1
- package/dist/components/effects/HarmonicShellEffect.js +30 -22
- package/dist/components/effects/HologramEffect.d.ts +8 -3
- package/dist/components/effects/HologramEffect.d.ts.map +1 -1
- package/dist/components/effects/HologramEffect.js +52 -23
- package/dist/components/effects/IceCrystalsEffect.d.ts +8 -3
- package/dist/components/effects/IceCrystalsEffect.d.ts.map +1 -1
- package/dist/components/effects/IceCrystalsEffect.js +36 -21
- package/dist/components/effects/IceHaloEffect.d.ts +7 -2
- package/dist/components/effects/IceHaloEffect.d.ts.map +1 -1
- package/dist/components/effects/IceHaloEffect.js +19 -9
- package/dist/components/effects/LichtenbergEffect.d.ts +7 -2
- package/dist/components/effects/LichtenbergEffect.d.ts.map +1 -1
- package/dist/components/effects/LichtenbergEffect.js +19 -9
- package/dist/components/effects/LightningEffect.d.ts +8 -3
- package/dist/components/effects/LightningEffect.d.ts.map +1 -1
- package/dist/components/effects/LightningEffect.js +54 -32
- package/dist/components/effects/MoleculesEffect.d.ts +8 -3
- package/dist/components/effects/MoleculesEffect.d.ts.map +1 -1
- package/dist/components/effects/MoleculesEffect.js +31 -21
- package/dist/components/effects/MurmurationEffect.d.ts +7 -2
- package/dist/components/effects/MurmurationEffect.d.ts.map +1 -1
- package/dist/components/effects/MurmurationEffect.js +19 -9
- package/dist/components/effects/NeuralNetworkEffect.d.ts +8 -3
- package/dist/components/effects/NeuralNetworkEffect.d.ts.map +1 -1
- package/dist/components/effects/NeuralNetworkEffect.js +66 -33
- package/dist/components/effects/OrbEffect.d.ts +8 -3
- package/dist/components/effects/OrbEffect.d.ts.map +1 -1
- package/dist/components/effects/OrbEffect.js +89 -42
- package/dist/components/effects/PlanetaryRingsEffect.d.ts +7 -2
- package/dist/components/effects/PlanetaryRingsEffect.d.ts.map +1 -1
- package/dist/components/effects/PlanetaryRingsEffect.js +19 -9
- package/dist/components/effects/PortalEffect.d.ts +8 -3
- package/dist/components/effects/PortalEffect.d.ts.map +1 -1
- package/dist/components/effects/PortalEffect.js +41 -25
- package/dist/components/effects/ShockwaveEffect.d.ts +7 -2
- package/dist/components/effects/ShockwaveEffect.d.ts.map +1 -1
- package/dist/components/effects/ShockwaveEffect.js +19 -9
- package/dist/components/effects/SmokePlumeEffect.d.ts +8 -3
- package/dist/components/effects/SmokePlumeEffect.d.ts.map +1 -1
- package/dist/components/effects/SmokePlumeEffect.js +30 -20
- package/dist/components/effects/SmokeRibbon.d.ts +8 -2
- package/dist/components/effects/SmokeRibbon.d.ts.map +1 -1
- package/dist/components/effects/SmokeRibbon.js +34 -24
- package/dist/components/effects/SmokeRingEffect.d.ts +8 -3
- package/dist/components/effects/SmokeRingEffect.d.ts.map +1 -1
- package/dist/components/effects/SmokeRingEffect.js +33 -21
- package/dist/components/effects/StrangeAttractorEffect.d.ts +8 -3
- package/dist/components/effects/StrangeAttractorEffect.d.ts.map +1 -1
- package/dist/components/effects/StrangeAttractorEffect.js +30 -20
- package/dist/components/effects/VolumetricFogEffect.d.ts +8 -3
- package/dist/components/effects/VolumetricFogEffect.d.ts.map +1 -1
- package/dist/components/effects/VolumetricFogEffect.js +38 -20
- package/dist/components/effects/WaterCausticsEffect.d.ts +7 -2
- package/dist/components/effects/WaterCausticsEffect.d.ts.map +1 -1
- package/dist/components/effects/WaterCausticsEffect.js +19 -9
- package/dist/components/effects/index.d.ts +0 -1
- package/dist/components/effects/index.d.ts.map +1 -1
- package/dist/components/effects/index.js +0 -1
- package/dist/components/index.d.ts +0 -1
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +0 -1
- package/dist/components/landscape/LandscapeMesh.js +1 -1
- package/dist/components/landscape/types.d.ts +1 -1
- package/dist/components/landscape/types.d.ts.map +1 -1
- package/dist/components/particles/MagneticBottleParticles.d.ts +17 -0
- package/dist/components/particles/MagneticBottleParticles.d.ts.map +1 -0
- package/dist/components/particles/MagneticBottleParticles.js +618 -0
- package/dist/components/particles/ShapeBurstParticles.d.ts +17 -0
- package/dist/components/particles/ShapeBurstParticles.d.ts.map +1 -0
- package/dist/components/particles/ShapeBurstParticles.js +588 -0
- package/dist/components/particles/ShapeFlowParticles.d.ts +17 -0
- package/dist/components/particles/ShapeFlowParticles.d.ts.map +1 -0
- package/dist/components/particles/ShapeFlowParticles.js +755 -0
- package/dist/components/particles/index.d.ts +6 -0
- package/dist/components/particles/index.d.ts.map +1 -1
- package/dist/components/particles/index.js +3 -0
- package/dist/components/terrain/types.d.ts +1 -1
- package/dist/components/terrain/types.d.ts.map +1 -1
- package/dist/components/volumetricClouds/VolumetricCloudsPass.d.ts +1 -1
- package/dist/components/volumetricClouds/VolumetricCloudsPass.d.ts.map +1 -1
- package/dist/components/volumetricClouds/types.d.ts +1 -1
- package/dist/components/volumetricClouds/types.d.ts.map +1 -1
- package/dist/components/water/types.d.ts +1 -1
- package/dist/components/water/types.d.ts.map +1 -1
- package/dist/constants.d.ts +1 -1
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +1 -1
- package/dist/hooks/index.d.ts +2 -0
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +1 -0
- package/dist/hooks/useConfigDriver.d.ts +22 -0
- package/dist/hooks/useConfigDriver.d.ts.map +1 -0
- package/dist/hooks/useConfigDriver.js +43 -0
- package/dist/hooks/useConfigLive.d.ts +1 -1
- package/dist/hooks/useConfigLive.d.ts.map +1 -1
- package/dist/hooks/useLandscapeMaps.d.ts +1 -1
- package/dist/hooks/useLandscapeMaps.d.ts.map +1 -1
- package/dist/hooks/useOceanMaterial.d.ts +1 -1
- package/dist/hooks/useThunder.d.ts +1 -1
- package/dist/index.d.ts +1 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -2
- package/dist/interactions/index.d.ts +2 -1
- package/dist/interactions/index.d.ts.map +1 -1
- package/dist/interactions/index.js +1 -1
- package/dist/interactions/runner.d.ts +18 -3
- package/dist/interactions/runner.d.ts.map +1 -1
- package/dist/interactions/runner.js +25 -2
- package/dist/operations/catalogue/curlSmoke.d.ts +3 -0
- package/dist/operations/catalogue/curlSmoke.d.ts.map +1 -0
- package/dist/operations/catalogue/curlSmoke.js +178 -0
- package/dist/operations/catalogue/displayImage.d.ts.map +1 -1
- package/dist/operations/catalogue/displayImage.js +1 -0
- package/dist/operations/catalogue/dissolve.d.ts +3 -0
- package/dist/operations/catalogue/dissolve.d.ts.map +1 -0
- package/dist/operations/catalogue/dissolve.js +57 -0
- package/dist/operations/catalogue/emberAsh.d.ts +3 -0
- package/dist/operations/catalogue/emberAsh.d.ts.map +1 -0
- package/dist/operations/catalogue/emberAsh.js +171 -0
- package/dist/operations/catalogue/fade.d.ts.map +1 -1
- package/dist/operations/catalogue/fade.js +1 -0
- package/dist/operations/catalogue/flip.d.ts +3 -0
- package/dist/operations/catalogue/flip.d.ts.map +1 -0
- package/dist/operations/catalogue/flip.js +69 -0
- package/dist/operations/catalogue/flock.d.ts +3 -0
- package/dist/operations/catalogue/flock.d.ts.map +1 -0
- package/dist/operations/catalogue/flock.js +163 -0
- package/dist/operations/catalogue/focus.d.ts.map +1 -1
- package/dist/operations/catalogue/focus.js +1 -0
- package/dist/operations/catalogue/frame.d.ts +3 -0
- package/dist/operations/catalogue/frame.d.ts.map +1 -0
- package/dist/operations/catalogue/frame.js +44 -0
- package/dist/operations/catalogue/frost.d.ts +3 -0
- package/dist/operations/catalogue/frost.d.ts.map +1 -0
- package/dist/operations/catalogue/frost.js +111 -0
- package/dist/operations/catalogue/fxInstances.d.ts +21 -0
- package/dist/operations/catalogue/fxInstances.d.ts.map +1 -0
- package/dist/operations/catalogue/fxInstances.js +47 -0
- package/dist/operations/catalogue/fxPoints.d.ts +22 -0
- package/dist/operations/catalogue/fxPoints.d.ts.map +1 -0
- package/dist/operations/catalogue/fxPoints.js +70 -0
- package/dist/operations/catalogue/glow.d.ts.map +1 -1
- package/dist/operations/catalogue/glow.js +2 -1
- package/dist/operations/catalogue/heatCracks.d.ts +3 -0
- package/dist/operations/catalogue/heatCracks.d.ts.map +1 -0
- package/dist/operations/catalogue/heatCracks.js +134 -0
- package/dist/operations/catalogue/hologram.d.ts +3 -0
- package/dist/operations/catalogue/hologram.d.ts.map +1 -0
- package/dist/operations/catalogue/hologram.js +118 -0
- package/dist/operations/catalogue/inkBloom.d.ts +3 -0
- package/dist/operations/catalogue/inkBloom.d.ts.map +1 -0
- package/dist/operations/catalogue/inkBloom.js +156 -0
- package/dist/operations/catalogue/ivy.d.ts +13 -0
- package/dist/operations/catalogue/ivy.d.ts.map +1 -0
- package/dist/operations/catalogue/ivy.js +469 -0
- package/dist/operations/catalogue/jelly.d.ts +3 -0
- package/dist/operations/catalogue/jelly.d.ts.map +1 -0
- package/dist/operations/catalogue/jelly.js +50 -0
- package/dist/operations/catalogue/kintsugi.d.ts +3 -0
- package/dist/operations/catalogue/kintsugi.d.ts.map +1 -0
- package/dist/operations/catalogue/kintsugi.js +173 -0
- package/dist/operations/catalogue/lidarScan.d.ts +3 -0
- package/dist/operations/catalogue/lidarScan.d.ts.map +1 -0
- package/dist/operations/catalogue/lidarScan.js +240 -0
- package/dist/operations/catalogue/liquidMetal.d.ts +3 -0
- package/dist/operations/catalogue/liquidMetal.d.ts.map +1 -0
- package/dist/operations/catalogue/liquidMetal.js +122 -0
- package/dist/operations/catalogue/metalize.d.ts +3 -0
- package/dist/operations/catalogue/metalize.d.ts.map +1 -0
- package/dist/operations/catalogue/metalize.js +135 -0
- package/dist/operations/catalogue/moveToFront.d.ts.map +1 -1
- package/dist/operations/catalogue/moveToFront.js +1 -0
- package/dist/operations/catalogue/orbit.d.ts +3 -0
- package/dist/operations/catalogue/orbit.d.ts.map +1 -0
- package/dist/operations/catalogue/orbit.js +29 -0
- package/dist/operations/catalogue/particleSwarm.d.ts +3 -0
- package/dist/operations/catalogue/particleSwarm.d.ts.map +1 -0
- package/dist/operations/catalogue/particleSwarm.js +138 -0
- package/dist/operations/catalogue/petalPeel.d.ts +3 -0
- package/dist/operations/catalogue/petalPeel.d.ts.map +1 -0
- package/dist/operations/catalogue/petalPeel.js +137 -0
- package/dist/operations/catalogue/petrify.d.ts +3 -0
- package/dist/operations/catalogue/petrify.d.ts.map +1 -0
- package/dist/operations/catalogue/petrify.js +94 -0
- package/dist/operations/catalogue/portal.d.ts +3 -0
- package/dist/operations/catalogue/portal.d.ts.map +1 -0
- package/dist/operations/catalogue/portal.js +224 -0
- package/dist/operations/catalogue/print3d.d.ts +3 -0
- package/dist/operations/catalogue/print3d.d.ts.map +1 -0
- package/dist/operations/catalogue/print3d.js +275 -0
- package/dist/operations/catalogue/rainBeads.d.ts +3 -0
- package/dist/operations/catalogue/rainBeads.d.ts.map +1 -0
- package/dist/operations/catalogue/rainBeads.js +223 -0
- package/dist/operations/catalogue/restPose.d.ts +21 -0
- package/dist/operations/catalogue/restPose.d.ts.map +1 -0
- package/dist/operations/catalogue/restPose.js +55 -0
- package/dist/operations/catalogue/rimLight.d.ts +3 -0
- package/dist/operations/catalogue/rimLight.d.ts.map +1 -0
- package/dist/operations/catalogue/rimLight.js +72 -0
- package/dist/operations/catalogue/sandErosion.d.ts +3 -0
- package/dist/operations/catalogue/sandErosion.d.ts.map +1 -0
- package/dist/operations/catalogue/sandErosion.js +167 -0
- package/dist/operations/catalogue/shaderLayers.d.ts +74 -0
- package/dist/operations/catalogue/shaderLayers.d.ts.map +1 -0
- package/dist/operations/catalogue/shaderLayers.js +322 -0
- package/dist/operations/catalogue/shatter.d.ts +3 -0
- package/dist/operations/catalogue/shatter.d.ts.map +1 -0
- package/dist/operations/catalogue/shatter.js +267 -0
- package/dist/operations/catalogue/silkDrape.d.ts +3 -0
- package/dist/operations/catalogue/silkDrape.d.ts.map +1 -0
- package/dist/operations/catalogue/silkDrape.js +340 -0
- package/dist/operations/catalogue/spin.d.ts +3 -0
- package/dist/operations/catalogue/spin.d.ts.map +1 -0
- package/dist/operations/catalogue/spin.js +42 -0
- package/dist/operations/catalogue/surfaceSample.d.ts +17 -0
- package/dist/operations/catalogue/surfaceSample.d.ts.map +1 -0
- package/dist/operations/catalogue/surfaceSample.js +187 -0
- package/dist/operations/catalogue/swirl.d.ts +3 -0
- package/dist/operations/catalogue/swirl.d.ts.map +1 -0
- package/dist/operations/catalogue/swirl.js +69 -0
- package/dist/operations/catalogue/teleport.d.ts +3 -0
- package/dist/operations/catalogue/teleport.d.ts.map +1 -0
- package/dist/operations/catalogue/teleport.js +213 -0
- package/dist/operations/catalogue/transitionField.d.ts +124 -0
- package/dist/operations/catalogue/transitionField.d.ts.map +1 -0
- package/dist/operations/catalogue/transitionField.js +278 -0
- package/dist/operations/catalogue/unweave.d.ts +3 -0
- package/dist/operations/catalogue/unweave.d.ts.map +1 -0
- package/dist/operations/catalogue/unweave.js +233 -0
- package/dist/operations/catalogue/visibility.d.ts.map +1 -1
- package/dist/operations/catalogue/visibility.js +1 -0
- package/dist/operations/catalogue/voxelize.d.ts +3 -0
- package/dist/operations/catalogue/voxelize.d.ts.map +1 -0
- package/dist/operations/catalogue/voxelize.js +148 -0
- package/dist/operations/catalogue/warmup.d.ts +22 -0
- package/dist/operations/catalogue/warmup.d.ts.map +1 -0
- package/dist/operations/catalogue/warmup.js +106 -0
- package/dist/operations/catalogue/zoom.d.ts.map +1 -1
- package/dist/operations/catalogue/zoom.js +1 -0
- package/dist/operations/index.d.ts +4 -2
- package/dist/operations/index.d.ts.map +1 -1
- package/dist/operations/index.js +4 -2
- package/dist/operations/objectEffects.d.ts +46 -0
- package/dist/operations/objectEffects.d.ts.map +1 -0
- package/dist/operations/objectEffects.js +136 -0
- package/dist/operations/registry.d.ts +7 -2
- package/dist/operations/registry.d.ts.map +1 -1
- package/dist/operations/registry.js +45 -3
- package/dist/operations/runtime.d.ts +40 -2
- package/dist/operations/runtime.d.ts.map +1 -1
- package/dist/operations/runtime.js +164 -8
- package/dist/operations/types.d.ts +29 -3
- package/dist/operations/types.d.ts.map +1 -1
- package/dist/operations/types.js +6 -0
- package/dist/operations/useObjectEffectLayers.d.ts +4 -0
- package/dist/operations/useObjectEffectLayers.d.ts.map +1 -0
- package/dist/operations/useObjectEffectLayers.js +42 -0
- package/dist/operations/useOperationsRuntime.d.ts.map +1 -1
- package/dist/operations/useOperationsRuntime.js +42 -4
- package/dist/presets/landscapePresets.d.ts +1 -1
- package/dist/presets/landscapePresets.d.ts.map +1 -1
- package/dist/presets/landscapePresets.js +1 -1
- package/dist/presets/landscapeTypes.d.ts +1 -1
- package/dist/presets/landscapeTypes.d.ts.map +1 -1
- package/dist/presets/landscapeTypes.js +1 -1
- package/dist/presets/oceanSurfacePresets.d.ts +1 -1
- package/dist/presets/terrainPresets.d.ts +1 -1
- package/dist/presets/terrainPresets.d.ts.map +1 -1
- package/dist/presets/volumetricCloudPresets.d.ts +1 -1
- package/dist/types/cloudConfigs.d.ts +2 -309
- package/dist/types/cloudConfigs.d.ts.map +1 -1
- package/dist/types/cloudConfigs.js +2 -339
- package/dist/types/index.d.ts +8 -8
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +4 -4
- package/dist/types/landscapeConfigs.d.ts +2 -217
- package/dist/types/landscapeConfigs.d.ts.map +1 -1
- package/dist/types/landscapeConfigs.js +2 -256
- package/dist/types/oceanConfigs.d.ts +2 -289
- package/dist/types/oceanConfigs.d.ts.map +1 -1
- package/dist/types/oceanConfigs.js +2 -380
- package/dist/types/terrainConfigs.d.ts +2 -250
- package/dist/types/terrainConfigs.d.ts.map +1 -1
- package/dist/types/terrainConfigs.js +2 -292
- package/dist/utils/cloudUniforms.d.ts +1 -1
- package/dist/utils/configAnimations.d.ts +6 -0
- package/dist/utils/configAnimations.d.ts.map +1 -1
- package/dist/utils/configAnimations.js +14 -0
- package/dist/utils/gridConfig.d.ts +19 -0
- package/dist/utils/gridConfig.d.ts.map +1 -0
- package/dist/utils/gridConfig.js +52 -0
- package/dist/utils/handleCloudsAnimations.d.ts +1 -1
- package/dist/utils/handleCloudsAnimations.js +1 -1
- package/dist/utils/hasHoverAnimation.d.ts.map +1 -1
- package/dist/utils/hasHoverAnimation.js +0 -2
- package/dist/utils/landscapeUniforms.d.ts +1 -1
- package/dist/utils/landscapeUniforms.d.ts.map +1 -1
- package/dist/utils/oceanUniforms.d.ts +1 -1
- package/dist/utils/particleShape.d.ts +33 -0
- package/dist/utils/particleShape.d.ts.map +1 -0
- package/dist/utils/particleShape.js +207 -0
- package/dist/utils/particleTrails.d.ts.map +1 -1
- package/dist/utils/particleTrails.js +29 -14
- package/dist/utils/terrainUniforms.d.ts +1 -1
- package/dist/utils/terrainUniforms.d.ts.map +1 -1
- package/package.json +2 -2
|
@@ -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 @@
|
|
|
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 @@
|
|
|
1
|
+
{"version":3,"file":"inkBloom.d.ts","sourceRoot":"","sources":["../../../src/operations/catalogue/inkBloom.ts"],"names":[],"mappings":";AAmDA,wBA4GG"}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
// Ink bloom — the object bleeds into ink, like a drop let go in still water.
|
|
2
|
+
// The surface stains along the front, then comes apart into ink FILAMENTS: each
|
|
3
|
+
// wisp is drawn as a crisp, fine line — its own recent path through the water —
|
|
4
|
+
// so the ink reads as clean curling threads that fray, sink and thin out, not
|
|
5
|
+
// as soft blobs. Normal blending (dark on light), so it works on light scenes.
|
|
6
|
+
// Reverting draws the ink back into the object.
|
|
7
|
+
import { BufferAttribute, BufferGeometry, LineSegments, NormalBlending, ShaderMaterial } from 'three';
|
|
8
|
+
import { defineOperation } from '../types.js';
|
|
9
|
+
import { addLayer, forEachMeshMaterial, removeLayer, uniformDecl } from './shaderLayers.js';
|
|
10
|
+
import { DIRECTION_OPTIONS, createFieldState, fieldGlsl, fieldUniforms, hideMeshes, runProgress, setFieldParams, surfaceLayer, } from './transitionField.js';
|
|
11
|
+
import { sampleSurfaceCached } from './surfaceSample.js';
|
|
12
|
+
import { hideUntilWarm } from './warmup.js';
|
|
13
|
+
const P = 'Ink';
|
|
14
|
+
const KEY = 'inkBloom';
|
|
15
|
+
const STATE = '__opInk';
|
|
16
|
+
const LIFE = 0.9;
|
|
17
|
+
/** Points per filament (its trail through the water). */
|
|
18
|
+
const TRAIL = 12;
|
|
19
|
+
function buildFilaments(target, count) {
|
|
20
|
+
const s = sampleSurfaceCached(target, count, 29);
|
|
21
|
+
const segs = TRAIL - 1;
|
|
22
|
+
const n = s.count * segs * 2;
|
|
23
|
+
const P3 = new Float32Array(n * 3), N3 = new Float32Array(n * 3), C3 = new Float32Array(n * 3), R4 = new Float32Array(n * 4), K = new Float32Array(n);
|
|
24
|
+
let v = 0;
|
|
25
|
+
for (let i = 0; i < s.count; i++) {
|
|
26
|
+
for (let k = 0; k < segs; k++) {
|
|
27
|
+
for (const kk of [k, k + 1]) {
|
|
28
|
+
P3.set(s.position.subarray(i * 3, i * 3 + 3), v * 3);
|
|
29
|
+
N3.set(s.normal.subarray(i * 3, i * 3 + 3), v * 3);
|
|
30
|
+
C3.set(s.color.subarray(i * 3, i * 3 + 3), v * 3);
|
|
31
|
+
R4.set(s.random.subarray(i * 4, i * 4 + 4), v * 4);
|
|
32
|
+
K[v] = kk / (TRAIL - 1);
|
|
33
|
+
v++;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
const g = new BufferGeometry();
|
|
38
|
+
g.setAttribute('position', new BufferAttribute(P3, 3));
|
|
39
|
+
g.setAttribute('aN', new BufferAttribute(N3, 3));
|
|
40
|
+
g.setAttribute('aC', new BufferAttribute(C3, 3));
|
|
41
|
+
g.setAttribute('aR', new BufferAttribute(R4, 4));
|
|
42
|
+
g.setAttribute('aK', new BufferAttribute(K, 1));
|
|
43
|
+
return g;
|
|
44
|
+
}
|
|
45
|
+
export default defineOperation({
|
|
46
|
+
value: 'inkBloom',
|
|
47
|
+
label: 'Ink bloom',
|
|
48
|
+
description: 'Bleed the targets into fine curling ink filaments, like a drop in water — reverting draws the ink back in',
|
|
49
|
+
channel: 'visual',
|
|
50
|
+
multi: true,
|
|
51
|
+
toggles: true,
|
|
52
|
+
usableIn: ['interaction', 'action'],
|
|
53
|
+
params: {
|
|
54
|
+
direction: { type: 'select', label: 'Direction', default: 'noise', options: DIRECTION_OPTIONS },
|
|
55
|
+
edgeColor: { type: 'color', label: 'Ink colour', default: '#16203a' },
|
|
56
|
+
tint: { type: 'number', label: 'Object colour', default: 0.15, min: 0, max: 1, step: 0.05, hint: 'How much of the object’s own colour the ink keeps' },
|
|
57
|
+
filaments: { type: 'number', label: 'Filaments', default: 9000, min: 1000, max: 40000, step: 500 },
|
|
58
|
+
opacity: { type: 'number', label: 'Density', default: 0.55, min: 0.05, max: 1, step: 0.05 },
|
|
59
|
+
sink: { type: 'number', label: 'Sink', default: 1, min: -2, max: 3, step: 0.05, unit: '×', hint: 'Negative rises like smoke' },
|
|
60
|
+
scale: { type: 'number', label: 'Pattern', default: 2.5, min: 0.5, max: 12, step: 0.1 },
|
|
61
|
+
duration: { type: 'number', label: 'Duration', default: 3.6, min: 0.3, max: 14, step: 0.1, unit: 's' },
|
|
62
|
+
},
|
|
63
|
+
apply(target, p, ctx) {
|
|
64
|
+
let st = target.userData[STATE];
|
|
65
|
+
if (!st) {
|
|
66
|
+
const field = createFieldState(target);
|
|
67
|
+
field.edgeWidth.value = 0.12;
|
|
68
|
+
const mixC = { value: 0.15 }, sink = { value: 1 }, opacity = { value: 0.55 };
|
|
69
|
+
const uniforms = { ...fieldUniforms(P, field), uInkMix: mixC, uInkSink: sink, uInkOpacity: opacity };
|
|
70
|
+
const decl = Object.keys(uniforms).map(n => uniformDecl(n, uniforms[n].value)).join('\n');
|
|
71
|
+
const mat = new ShaderMaterial({
|
|
72
|
+
uniforms: uniforms,
|
|
73
|
+
vertexShader: `${decl}
|
|
74
|
+
attribute vec3 aN; attribute vec3 aC; attribute vec4 aR; attribute float aK;
|
|
75
|
+
varying vec3 vColor; varying float vAlpha;
|
|
76
|
+
${fieldGlsl(P)}
|
|
77
|
+
// where a wisp that left from p0 is, at age a (the drift is a smooth function of age, so a trail is exact)
|
|
78
|
+
vec3 inkAt(vec3 p0, vec3 n0, vec4 r, float a) {
|
|
79
|
+
float E = uInkExtent;
|
|
80
|
+
vec3 np = p0 / E * 1.8 + r.xyz * 4.0;
|
|
81
|
+
float t = a * 1.1;
|
|
82
|
+
vec3 d = vec3(fxNoise(np + vec3(t, 0.0, 0.0)), fxNoise(np + vec3(13.7, t, 5.1)), fxNoise(np + vec3(3.3, 9.2, t))) - 0.5;
|
|
83
|
+
vec3 d2 = vec3(fxNoise(np * 2.3 + vec3(0.0, t * 1.7, 0.0)), fxNoise(np * 2.3 + vec3(7.1, 2.0, t * 1.7)), fxNoise(np * 2.3 + vec3(t * 1.7, 4.4, 8.8))) - 0.5;
|
|
84
|
+
vec3 q = p0 + n0 * (0.05 * E * sqrt(a)) + (d * 0.75 + d2 * 0.55) * E * a;
|
|
85
|
+
q.y -= uInkSink * 0.25 * E * a * a;
|
|
86
|
+
return q;
|
|
87
|
+
}
|
|
88
|
+
void main() {
|
|
89
|
+
float birth = InkBirthOf(InkField(InkNorm(position)));
|
|
90
|
+
float a = (uInkProgress - birth) / ${LIFE.toFixed(2)};
|
|
91
|
+
// the trail: this vertex sits a little back along the wisp's own path
|
|
92
|
+
float trail = 0.22 * (0.6 + 0.8 * aR.w);
|
|
93
|
+
float ak = clamp(a - aK * trail, 0.0, 1.0);
|
|
94
|
+
if (a <= 0.0 || a >= 1.0) { gl_Position = vec4(2.0, 2.0, 2.0, 1.0); vColor = vec3(0.0); vAlpha = 0.0; return; }
|
|
95
|
+
vec3 q = inkAt(position, aN, aR, ak);
|
|
96
|
+
gl_Position = projectionMatrix * modelViewMatrix * vec4(q, 1.0);
|
|
97
|
+
vColor = mix(uInkEdgeColor, aC, uInkMix) * (0.85 + 0.3 * aR.z);
|
|
98
|
+
// denser at the head, thinning along the trail and as the ink diffuses
|
|
99
|
+
vAlpha = uInkOpacity * (1.0 - aK) * smoothstep(0.0, 0.06, a) * pow(1.0 - a, 1.1);
|
|
100
|
+
}`,
|
|
101
|
+
fragmentShader: `
|
|
102
|
+
varying vec3 vColor; varying float vAlpha;
|
|
103
|
+
void main() {
|
|
104
|
+
gl_FragColor = vec4(vColor * vAlpha, vAlpha);
|
|
105
|
+
#include <tonemapping_fragment>
|
|
106
|
+
#include <colorspace_fragment>
|
|
107
|
+
}`,
|
|
108
|
+
transparent: true, depthWrite: false, blending: NormalBlending, premultipliedAlpha: true,
|
|
109
|
+
});
|
|
110
|
+
const lines = new LineSegments(buildFilaments(target, Math.round(Number(p.filaments))), mat);
|
|
111
|
+
lines.frustumCulled = false;
|
|
112
|
+
lines.raycast = () => { };
|
|
113
|
+
lines.userData.__opFxHelper = true;
|
|
114
|
+
lines.renderOrder = 10;
|
|
115
|
+
target.add(lines);
|
|
116
|
+
hideUntilWarm(lines);
|
|
117
|
+
st = { field, mixC, sink, opacity, lines, mats: new Set() };
|
|
118
|
+
const own = st;
|
|
119
|
+
const layer = surfaceLayer(P, field, 'stain');
|
|
120
|
+
forEachMeshMaterial(target, (m, mesh) => {
|
|
121
|
+
if (mesh.userData?.__opFxHelper)
|
|
122
|
+
return;
|
|
123
|
+
if (addLayer(m, KEY, layer))
|
|
124
|
+
own.mats.add(m);
|
|
125
|
+
});
|
|
126
|
+
target.userData[STATE] = st;
|
|
127
|
+
}
|
|
128
|
+
const s = st;
|
|
129
|
+
setFieldParams(s.field, p, target, ctx);
|
|
130
|
+
s.mixC.value = Number(p.tint);
|
|
131
|
+
s.sink.value = Number(p.sink);
|
|
132
|
+
s.opacity.value = Number(p.opacity);
|
|
133
|
+
s.lines.visible = true;
|
|
134
|
+
return runProgress(target, s.field, 1 + LIFE, {
|
|
135
|
+
duration: Number(p.duration), ease: 'none',
|
|
136
|
+
onComplete: () => { hideMeshes(target, KEY, true); s.lines.visible = false; },
|
|
137
|
+
});
|
|
138
|
+
},
|
|
139
|
+
revert(target, p) {
|
|
140
|
+
const s = target.userData[STATE];
|
|
141
|
+
if (!s)
|
|
142
|
+
return;
|
|
143
|
+
hideMeshes(target, KEY, false);
|
|
144
|
+
s.lines.visible = true;
|
|
145
|
+
return runProgress(target, s.field, 0, {
|
|
146
|
+
duration: Number(p.duration), ease: 'none',
|
|
147
|
+
onComplete: () => {
|
|
148
|
+
s.mats.forEach(m => removeLayer(m, KEY));
|
|
149
|
+
s.lines.removeFromParent();
|
|
150
|
+
s.lines.geometry.dispose();
|
|
151
|
+
s.lines.material.dispose();
|
|
152
|
+
delete target.userData[STATE];
|
|
153
|
+
},
|
|
154
|
+
});
|
|
155
|
+
},
|
|
156
|
+
});
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { type SurfaceSample } from './surfaceSample';
|
|
2
|
+
interface Growth {
|
|
3
|
+
pos: number[];
|
|
4
|
+
nrm: number[];
|
|
5
|
+
parent: number[];
|
|
6
|
+
birth: number[];
|
|
7
|
+
desc: number[];
|
|
8
|
+
count: number;
|
|
9
|
+
}
|
|
10
|
+
export declare function grow(sample: SurfaceSample, extent: number, attractors: number, from: string, seed: number): Growth;
|
|
11
|
+
declare const _default: import("..").OperationDefinition;
|
|
12
|
+
export default _default;
|
|
13
|
+
//# sourceMappingURL=ivy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ivy.d.ts","sourceRoot":"","sources":["../../../src/operations/catalogue/ivy.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAmC,KAAK,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAiBtF,UAAU,MAAM;IAAG,GAAG,EAAE,MAAM,EAAE,CAAC;IAAC,GAAG,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE;AAgBnH,wBAAgB,IAAI,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAkHlH;;AAwFD,wBAgKG"}
|