@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,178 @@
|
|
|
1
|
+
// Curl smoke — the object comes apart as soft smoke. Its surface is sampled into
|
|
2
|
+
// wisps that start out in the surface's own colours and fade to smoke as they
|
|
3
|
+
// leave. Each wisp is carried along a divergence-free curl-noise flow (the curl of
|
|
4
|
+
// a 3D noise potential, integrated along its path in the shader), so the smoke
|
|
5
|
+
// swirls into eddies and filaments instead of scattering. It rises on its own
|
|
6
|
+
// buoyancy, and every wisp swells and thins as it goes. Normal "over" blending,
|
|
7
|
+
// not additive glow, so it reads as smoke — pale on a dark scene, or dark as ink.
|
|
8
|
+
// Reverting draws the smoke back in and the object re-forms.
|
|
9
|
+
// With Disappear off (always, as an object effect) the whole object becomes
|
|
10
|
+
// smoke in its own shape: as the front passes, the surface gives way to wisps
|
|
11
|
+
// that stay on the shape — each one lifts a little off its spot on the curl flow,
|
|
12
|
+
// fades and is re-emitted, so the silhouette reads as living smoke — while one in
|
|
13
|
+
// ten curls off as a soft trail. Reverting gathers it back into the solid.
|
|
14
|
+
import { Color, Vector3 } from 'three';
|
|
15
|
+
import { defineOperation } from '../types.js';
|
|
16
|
+
import { addLayer, forEachMeshMaterial, removeLayer } from './shaderLayers.js';
|
|
17
|
+
import { DIRECTION_OPTIONS, createFieldState, fieldGlsl, fieldUniforms, hideMeshes, runProgress, setFieldParams, surfaceLayer, } from './transitionField.js';
|
|
18
|
+
import { sampleSurfaceCached } from './surfaceSample.js';
|
|
19
|
+
import { GLSL_POINT_SIZE, createFxPoints, disposeFxPoints } from './fxPoints.js';
|
|
20
|
+
const P = 'Smk';
|
|
21
|
+
/** Disappear off: the in / out run takes this share of the duration (it only goes to 1, not END). */
|
|
22
|
+
const KEEP_SPEED = 0.6;
|
|
23
|
+
const KEY = 'curlSmoke';
|
|
24
|
+
const STATE = '__opCurlSmoke';
|
|
25
|
+
/** A wisp lives LIFE progress units after the front passes it. */
|
|
26
|
+
const LIFE = 1.0;
|
|
27
|
+
const END = 1 + LIFE;
|
|
28
|
+
/** Curl of a 3D noise potential, and a path integrated through it (GLSL). */
|
|
29
|
+
const CURL = /* glsl */ `
|
|
30
|
+
vec3 smkPot(vec3 p) { return vec3(fxNoise(p), fxNoise(p + vec3(31.4, 7.7, 19.1)), fxNoise(p + vec3(-11.3, 43.9, 5.2))); }
|
|
31
|
+
vec3 smkCurl(vec3 p) {
|
|
32
|
+
const float e = 0.08;
|
|
33
|
+
vec3 dx = (smkPot(p + vec3(e, 0.0, 0.0)) - smkPot(p - vec3(e, 0.0, 0.0))) / (2.0 * e);
|
|
34
|
+
vec3 dy = (smkPot(p + vec3(0.0, e, 0.0)) - smkPot(p - vec3(0.0, e, 0.0))) / (2.0 * e);
|
|
35
|
+
vec3 dz = (smkPot(p + vec3(0.0, 0.0, e)) - smkPot(p - vec3(0.0, 0.0, e))) / (2.0 * e);
|
|
36
|
+
return vec3(dy.z - dz.y, dz.x - dx.z, dx.y - dy.x);
|
|
37
|
+
}
|
|
38
|
+
`;
|
|
39
|
+
export default defineOperation({
|
|
40
|
+
value: 'curlSmoke',
|
|
41
|
+
label: 'Curl smoke',
|
|
42
|
+
description: 'Turn the targets into soft smoke that swirls away (or, Disappear off, keeps their shape) — reverting draws it back in',
|
|
43
|
+
channel: 'visual',
|
|
44
|
+
multi: true,
|
|
45
|
+
toggles: true,
|
|
46
|
+
usableIn: ['interaction', 'action', 'object'],
|
|
47
|
+
params: {
|
|
48
|
+
direction: { type: 'select', label: 'Direction', default: 'up', options: DIRECTION_OPTIONS },
|
|
49
|
+
smoke: { type: 'color', label: 'Smoke', default: '#d4d8df', hint: 'Pale for a dark scene, dark for ink on a light one' },
|
|
50
|
+
wisps: { type: 'number', label: 'Wisps', default: 24000, min: 4000, max: 90000, step: 1000 },
|
|
51
|
+
puff: { type: 'number', label: 'Softness', default: 1, min: 0.3, max: 3, step: 0.05, unit: '×', hint: 'How far each wisp swells' },
|
|
52
|
+
rise: { type: 'number', label: 'Rise', default: 1, min: 0, max: 3, step: 0.05, unit: '×' },
|
|
53
|
+
swirl: { type: 'number', label: 'Swirl', default: 1, min: 0.2, max: 3, step: 0.05, unit: '×' },
|
|
54
|
+
scale: { type: 'number', label: 'Front pattern', default: 2.5, min: 0.5, max: 12, step: 0.1 },
|
|
55
|
+
duration: { type: 'number', label: 'Duration', default: 4.5, min: 0.3, max: 14, step: 0.1, unit: 's' },
|
|
56
|
+
disappear: { type: 'boolean', label: 'Disappear', default: true, hint: 'Off: the whole object becomes smoke in its own shape and stays' },
|
|
57
|
+
},
|
|
58
|
+
objectParams: { disappear: false },
|
|
59
|
+
apply(target, p, ctx) {
|
|
60
|
+
let st = target.userData[STATE];
|
|
61
|
+
if (!st) {
|
|
62
|
+
const field = createFieldState(target);
|
|
63
|
+
field.edgeWidth.value = 0.035;
|
|
64
|
+
const own = {
|
|
65
|
+
field, smoke: { value: new Color() }, up: { value: new Vector3(0, 1, 0) }, rise: { value: 1 }, swirl: { value: 1 }, puff: { value: 1 }, dens: { value: 1 },
|
|
66
|
+
keep: { value: 0 },
|
|
67
|
+
mats: new Set(),
|
|
68
|
+
};
|
|
69
|
+
const sample = sampleSurfaceCached(target, Math.round(Number(p.wisps)), 23);
|
|
70
|
+
own.points = createFxPoints(target, sample, {
|
|
71
|
+
additive: false,
|
|
72
|
+
uniforms: { ...fieldUniforms(P, field), uSmkSmoke: own.smoke, uSmkUp: own.up, uSmkRise: own.rise, uSmkSwirl: own.swirl, uSmkPuff: own.puff, uSmkDens: own.dens, uSmkKeep: own.keep },
|
|
73
|
+
vertexPars: fieldGlsl(P) + GLSL_POINT_SIZE + CURL,
|
|
74
|
+
vertexMain: /* glsl */ `
|
|
75
|
+
float f = SmkField(SmkNorm(aP));
|
|
76
|
+
float E = uSmkExtent;
|
|
77
|
+
if (uSmkKeep > 0.5) {
|
|
78
|
+
// smoke in the object's own shape: switched on as the front passes, then each
|
|
79
|
+
// wisp cycles on its spot — lifts a little on the curl flow, fades, is re-emitted
|
|
80
|
+
float w = clamp((uSmkProgress - SmkBirthOf(f)) / 0.12, 0.0, 1.0);
|
|
81
|
+
if (w <= 0.0) { gl_Position = vec4(2.0, 2.0, 2.0, 1.0); gl_PointSize = 0.0; vColor = vec3(0.0); vAlpha = 0.0; return; }
|
|
82
|
+
float trail = step(0.9, aR.w); // one in ten curls off as a soft trail
|
|
83
|
+
float al = fract(uSmkTime * 0.2 * (0.7 + 0.6 * aR.y) + aR.x);
|
|
84
|
+
vec3 kq = aP / E * (4.0 * uSmkSwirl) + aR.xyz * 0.15;
|
|
85
|
+
vec3 kd = vec3(0.0);
|
|
86
|
+
float kh = al * mix(0.12, 0.3, trail);
|
|
87
|
+
for (int i = 0; i < 6; i++) {
|
|
88
|
+
vec3 v = smkCurl(kq + vec3(0.0, uSmkTime * 0.05, 0.0));
|
|
89
|
+
kd += v * kh;
|
|
90
|
+
kq += v * kh * 1.4 + uSmkUp * kh * 0.9 * uSmkRise;
|
|
91
|
+
}
|
|
92
|
+
vec3 kl = aP + aN * (E * (0.004 + 0.012 * al))
|
|
93
|
+
+ kd * (E * mix(0.06, 0.45, trail) / uSmkSwirl)
|
|
94
|
+
+ uSmkUp * (E * uSmkRise * mix(0.012 * al, 0.35 * al * al, trail));
|
|
95
|
+
vec4 kmv = modelViewMatrix * vec4(kl, 1.0);
|
|
96
|
+
gl_Position = projectionMatrix * kmv;
|
|
97
|
+
// smoke, with a hint of the surface's colours so the form still reads
|
|
98
|
+
vColor = mix(uSmkSmoke * (0.8 + 0.3 * aR.z), aC, 0.18);
|
|
99
|
+
float kg = 1.0 + mix(2.2, 9.0, trail) * uSmkPuff * al;
|
|
100
|
+
vAlpha = w * smoothstep(0.0, 0.2, al) * (1.0 - smoothstep(0.55, 1.0, al)) * clamp(0.26 * uSmkDens / kg, 0.0, 0.5) * (0.5 + 0.5 * aR.z);
|
|
101
|
+
gl_PointSize = clamp(fxPointPx(E * 0.0105 * kg, kmv), 1.0, 90.0);
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
float a = (uSmkProgress - SmkBirthOf(f)) / ${LIFE.toFixed(2)};
|
|
105
|
+
if (a <= 0.0 || a >= 1.0) { gl_Position = vec4(2.0, 2.0, 2.0, 1.0); gl_PointSize = 0.0; vColor = vec3(0.0); vAlpha = 0.0; return; }
|
|
106
|
+
// integrate the path through the curl flow; the step grows with age, so the
|
|
107
|
+
// path is a smooth function of a (no state, same wisp every frame)
|
|
108
|
+
vec3 q = aP / E * (4.0 * uSmkSwirl) + aR.xyz * 0.15;
|
|
109
|
+
vec3 drift = vec3(0.0);
|
|
110
|
+
float h = a * 0.26;
|
|
111
|
+
for (int i = 0; i < 8; i++) {
|
|
112
|
+
vec3 v = smkCurl(q + vec3(0.0, uSmkTime * 0.05, 0.0));
|
|
113
|
+
drift += v * h;
|
|
114
|
+
q += v * h * 1.4 + uSmkUp * h * 0.9 * uSmkRise;
|
|
115
|
+
}
|
|
116
|
+
float ease = a * (0.35 + 0.65 * a);
|
|
117
|
+
vec3 local = aP + aN * (0.03 * E * sqrt(a))
|
|
118
|
+
+ drift * (0.5 * E / uSmkSwirl)
|
|
119
|
+
+ uSmkUp * (E * 0.55 * uSmkRise * ease * (0.6 + 0.8 * aR.y));
|
|
120
|
+
vec4 mv = modelViewMatrix * vec4(local, 1.0);
|
|
121
|
+
gl_Position = projectionMatrix * mv;
|
|
122
|
+
// colour: the surface's own, turning to smoke as it leaves
|
|
123
|
+
vColor = mix(aC, uSmkSmoke * (0.8 + 0.3 * aR.z), smoothstep(0.0, 0.35, a));
|
|
124
|
+
// a wisp swells and thins: roughly constant "mass" as it spreads
|
|
125
|
+
float grow = 1.0 + 12.0 * uSmkPuff * a * (0.6 + 0.8 * aR.z);
|
|
126
|
+
vAlpha = smoothstep(0.0, 0.05, a) * (1.0 - smoothstep(0.45, 1.0, a)) * clamp(0.3 * uSmkDens / grow, 0.0, 0.7) * (0.5 + 0.5 * aR.w);
|
|
127
|
+
gl_PointSize = clamp(fxPointPx(E * 0.0065 * grow, mv), 1.0, 90.0);`,
|
|
128
|
+
});
|
|
129
|
+
const layer = surfaceLayer(P, field, 'stain');
|
|
130
|
+
forEachMeshMaterial(target, (mat, mesh) => {
|
|
131
|
+
if (mesh.userData?.__opFxHelper)
|
|
132
|
+
return;
|
|
133
|
+
if (addLayer(mat, KEY, layer))
|
|
134
|
+
own.mats.add(mat);
|
|
135
|
+
});
|
|
136
|
+
st = own;
|
|
137
|
+
target.userData[STATE] = st;
|
|
138
|
+
}
|
|
139
|
+
const s = st;
|
|
140
|
+
setFieldParams(s.field, p, target, ctx);
|
|
141
|
+
s.smoke.value.set(String(p.smoke));
|
|
142
|
+
s.field.edgeColor.value.set(String(p.smoke));
|
|
143
|
+
s.rise.value = Number(p.rise);
|
|
144
|
+
s.swirl.value = Number(p.swirl);
|
|
145
|
+
s.puff.value = Number(p.puff);
|
|
146
|
+
// the smoke's overall density must not depend on how many wisps carry it
|
|
147
|
+
s.dens.value = 12000 / Math.max(1000, s.points.geometry.getAttribute('aP').count);
|
|
148
|
+
// world up in the target's own space (smoke rises whatever the object's rotation)
|
|
149
|
+
target.updateWorldMatrix(true, false);
|
|
150
|
+
s.up.value.set(0, 1, 0).transformDirection(target.matrixWorld.clone().invert());
|
|
151
|
+
s.points.visible = true;
|
|
152
|
+
s.keep.value = p.disappear === false ? 1 : 0;
|
|
153
|
+
if (s.keep.value) {
|
|
154
|
+
return runProgress(target, s.field, 1, { duration: Number(p.duration) * KEEP_SPEED, ease: 'none', hold: true });
|
|
155
|
+
}
|
|
156
|
+
return runProgress(target, s.field, END, {
|
|
157
|
+
duration: Number(p.duration), ease: 'none',
|
|
158
|
+
onComplete: () => { hideMeshes(target, KEY, true); s.points.visible = false; },
|
|
159
|
+
});
|
|
160
|
+
},
|
|
161
|
+
revert(target, p) {
|
|
162
|
+
const s = target.userData[STATE];
|
|
163
|
+
if (!s)
|
|
164
|
+
return;
|
|
165
|
+
hideMeshes(target, KEY, false);
|
|
166
|
+
s.points.visible = true;
|
|
167
|
+
// same speed back, from wherever it got to
|
|
168
|
+
const span = s.keep.value ? 1 / KEEP_SPEED : END;
|
|
169
|
+
return runProgress(target, s.field, 0, {
|
|
170
|
+
duration: Number(p.duration) * Math.min(1, Math.max(0.1, s.field.progress.value / span)), ease: 'none',
|
|
171
|
+
onComplete: () => {
|
|
172
|
+
s.mats.forEach(m => removeLayer(m, KEY));
|
|
173
|
+
disposeFxPoints(s.points);
|
|
174
|
+
delete target.userData[STATE];
|
|
175
|
+
},
|
|
176
|
+
});
|
|
177
|
+
},
|
|
178
|
+
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"displayImage.d.ts","sourceRoot":"","sources":["../../../src/operations/catalogue/displayImage.ts"],"names":[],"mappings":";AAGA,
|
|
1
|
+
{"version":3,"file":"displayImage.d.ts","sourceRoot":"","sources":["../../../src/operations/catalogue/displayImage.ts"],"names":[],"mappings":";AAGA,wBA6BG"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dissolve.d.ts","sourceRoot":"","sources":["../../../src/operations/catalogue/dissolve.ts"],"names":[],"mappings":";AAcA,wBA2CG"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
// Dissolve — the targets burn away along a calm noise front with a glowing edge;
|
|
2
|
+
// reverting grows them back. Built on the shared transition field, so it has the
|
|
3
|
+
// same directions as every other transition (including screen left/right) and
|
|
4
|
+
// shares its root-space pattern (no swimming, multi-mesh models dissolve as one).
|
|
5
|
+
import { defineOperation } from '../types.js';
|
|
6
|
+
import { addLayer, forEachMeshMaterial, removeLayer } from './shaderLayers.js';
|
|
7
|
+
import { DIRECTION_OPTIONS, createFieldState, hideMeshes, runProgress, setFieldParams, surfaceLayer } from './transitionField.js';
|
|
8
|
+
const P = 'Dis';
|
|
9
|
+
const KEY = 'dissolve';
|
|
10
|
+
const STATE = '__opDissolve';
|
|
11
|
+
export default defineOperation({
|
|
12
|
+
value: 'dissolve',
|
|
13
|
+
label: 'Dissolve',
|
|
14
|
+
description: 'Burn the targets away along a glowing edge — reverting grows them back',
|
|
15
|
+
channel: 'visual',
|
|
16
|
+
multi: true,
|
|
17
|
+
toggles: true,
|
|
18
|
+
usableIn: ['interaction', 'action'],
|
|
19
|
+
params: {
|
|
20
|
+
direction: { type: 'select', label: 'Direction', default: 'noise', options: DIRECTION_OPTIONS },
|
|
21
|
+
edgeColor: { type: 'color', label: 'Edge colour', default: '#ff7a2e' },
|
|
22
|
+
edgeWidth: { type: 'number', label: 'Edge width', default: 0.08, min: 0.01, max: 0.3, step: 0.01 },
|
|
23
|
+
scale: { type: 'number', label: 'Grain', default: 3, min: 0.5, max: 12, step: 0.1, hint: 'Size of the burn pattern — higher = finer' },
|
|
24
|
+
duration: { type: 'number', label: 'Duration', default: 1.6, min: 0.1, max: 10, step: 0.05, unit: 's' },
|
|
25
|
+
},
|
|
26
|
+
apply(target, p, ctx) {
|
|
27
|
+
let st = target.userData[STATE];
|
|
28
|
+
if (!st) {
|
|
29
|
+
st = { field: createFieldState(target), mats: new Set() };
|
|
30
|
+
const own = st;
|
|
31
|
+
const layer = surfaceLayer(P, own.field, 'ember');
|
|
32
|
+
forEachMeshMaterial(target, (mat, mesh) => {
|
|
33
|
+
if (mesh.userData?.__opFxHelper)
|
|
34
|
+
return;
|
|
35
|
+
if (addLayer(mat, KEY, layer))
|
|
36
|
+
own.mats.add(mat);
|
|
37
|
+
});
|
|
38
|
+
target.userData[STATE] = st;
|
|
39
|
+
}
|
|
40
|
+
const s = st;
|
|
41
|
+
setFieldParams(s.field, p, target, ctx);
|
|
42
|
+
return runProgress(target, s.field, 1, {
|
|
43
|
+
duration: Number(p.duration), ease: 'power1.in',
|
|
44
|
+
onComplete: () => hideMeshes(target, KEY, true),
|
|
45
|
+
});
|
|
46
|
+
},
|
|
47
|
+
revert(target, p) {
|
|
48
|
+
const s = target.userData[STATE];
|
|
49
|
+
if (!s)
|
|
50
|
+
return;
|
|
51
|
+
hideMeshes(target, KEY, false);
|
|
52
|
+
return runProgress(target, s.field, 0, {
|
|
53
|
+
duration: Number(p.duration), ease: 'power1.out',
|
|
54
|
+
onComplete: () => { s.mats.forEach(m => removeLayer(m, KEY)); delete target.userData[STATE]; },
|
|
55
|
+
});
|
|
56
|
+
},
|
|
57
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"emberAsh.d.ts","sourceRoot":"","sources":["../../../src/operations/catalogue/emberAsh.ts"],"names":[],"mappings":";AAoFA,wBA0FG"}
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
// Ember ash — the object burns the way wood and paper do, not the way a dissolve
|
|
2
|
+
// does: a dull-red front chars the surface to charcoal, glowing embers breathe
|
|
3
|
+
// in the cracks just behind it, the charcoal pales to powdery grey ash, and the
|
|
4
|
+
// ash comes away in flakes that a wind carries off — tumbling, curling in
|
|
5
|
+
// turbulence, rising on the heat, a few still glowing as they cool.
|
|
6
|
+
// Reverting runs the fire backwards: the flakes blow back and the object un-burns.
|
|
7
|
+
import { Color, Vector3 } 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, hideMeshes, runProgress, screenRight, setFieldParams, } from './transitionField.js';
|
|
11
|
+
import { sampleSurfaceCached } from './surfaceSample.js';
|
|
12
|
+
import { GLSL_POINT_SIZE, createFxPoints, disposeFxPoints } from './fxPoints.js';
|
|
13
|
+
const P = 'Ash';
|
|
14
|
+
const KEY = 'emberAsh';
|
|
15
|
+
const STATE = '__opEmberAsh';
|
|
16
|
+
/** The ash front trails the char front by LAG; flakes fly for LIFE (progress units). */
|
|
17
|
+
const LAG = 0.3;
|
|
18
|
+
const LIFE = 0.7;
|
|
19
|
+
const END = 1 + LAG + LIFE;
|
|
20
|
+
/** Shared GLSL: the char front, the ash front, and where a point stands between them. */
|
|
21
|
+
const FRONTS = /* glsl */ `
|
|
22
|
+
float ashChar(float f) { return smoothstep(0.0, 0.12, AshThreshold() - f); }
|
|
23
|
+
float ashAshT() {
|
|
24
|
+
float pa = clamp((uAshProgress - ${LAG.toFixed(2)}) / 1.0, 0.0, 1.0);
|
|
25
|
+
return pa * (1.0 + 2.0 * uAshEdgeWidth) - uAshEdgeWidth;
|
|
26
|
+
}
|
|
27
|
+
`;
|
|
28
|
+
function surfaceLayerFor(st) {
|
|
29
|
+
return {
|
|
30
|
+
uniforms: { ...fieldUniforms(P, st.field), uAshEmber: st.ember },
|
|
31
|
+
common: `varying vec3 vAshQ;\nvarying vec3 vAshR;\n${fieldGlsl(P)}\n${GLSL_WORLEY}\n${FRONTS}`,
|
|
32
|
+
vertex: /* glsl */ `
|
|
33
|
+
vAshR = (uAshRootInv * modelMatrix * vec4(transformed, 1.0)).xyz;
|
|
34
|
+
vAshQ = AshNorm(vAshR);`,
|
|
35
|
+
diffuse: /* glsl */ `
|
|
36
|
+
{
|
|
37
|
+
float f = AshField(vAshQ);
|
|
38
|
+
float ta = ashAshT();
|
|
39
|
+
if (f < ta) discard; // gone to the wind
|
|
40
|
+
float ch = ashChar(f);
|
|
41
|
+
float toAsh = 1.0 - smoothstep(0.0, 0.14, f - ta); // pales just before it flakes
|
|
42
|
+
vec3 charcoal = vec3(0.045, 0.04, 0.036) * (0.7 + 0.6 * fxNoise(vAshR / uAshExtent * 60.0));
|
|
43
|
+
vec3 ash = vec3(0.58, 0.56, 0.53) * (0.8 + 0.3 * fxNoise(vAshR / uAshExtent * 90.0));
|
|
44
|
+
diffuseColor.rgb = mix(diffuseColor.rgb, charcoal, ch * 0.96);
|
|
45
|
+
diffuseColor.rgb = mix(diffuseColor.rgb, ash, toAsh);
|
|
46
|
+
}`,
|
|
47
|
+
material: /* glsl */ `
|
|
48
|
+
{
|
|
49
|
+
float ch = ashChar(AshField(vAshQ));
|
|
50
|
+
roughnessFactor = mix(roughnessFactor, 0.95, ch);
|
|
51
|
+
metalnessFactor = mix(metalnessFactor, 0.0, ch);
|
|
52
|
+
}`,
|
|
53
|
+
fragment: /* glsl */ `
|
|
54
|
+
{
|
|
55
|
+
float f = AshField(vAshQ);
|
|
56
|
+
float tc = AshThreshold();
|
|
57
|
+
float ch = ashChar(f);
|
|
58
|
+
float ta = ashAshT();
|
|
59
|
+
float toAsh = 1.0 - smoothstep(0.0, 0.14, f - ta);
|
|
60
|
+
// embers live in the cracks just behind the char front, and die as it turns to ash
|
|
61
|
+
vec3 cell = fxWorley(vAshR / uAshExtent * 22.0);
|
|
62
|
+
float crack = 1.0 - smoothstep(0.0, 0.08, cell.y - cell.x);
|
|
63
|
+
float speck = step(0.78, fxNoise(vAshR / uAshExtent * 75.0));
|
|
64
|
+
float heat = ch * (1.0 - toAsh) * exp(-max(tc - f, 0.0) / 0.12);
|
|
65
|
+
float breathe = 0.7 + 0.3 * sin(uAshTime * 2.1 + cell.z * 6.2832);
|
|
66
|
+
float glow = heat * breathe * (crack * 0.9 + speck * 0.6);
|
|
67
|
+
vec3 emberC = mix(uAshEmber * vec3(0.5, 0.12, 0.02), uAshEmber, glow);
|
|
68
|
+
// the front itself: a dull red line, never white-hot
|
|
69
|
+
float front = exp(-abs(tc - f) / 0.018) * step(0.0001, uAshProgress) * step(uAshProgress, 0.9999);
|
|
70
|
+
outgoingLight += emberC * glow * 1.5 + uAshEmber * vec3(0.9, 0.35, 0.12) * front * 0.7;
|
|
71
|
+
}`,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
export default defineOperation({
|
|
75
|
+
value: 'emberAsh',
|
|
76
|
+
label: 'Ember ash',
|
|
77
|
+
description: 'Char the targets to glowing charcoal, then pale ash that the wind blows away — reverting un-burns them',
|
|
78
|
+
channel: 'visual',
|
|
79
|
+
multi: true,
|
|
80
|
+
toggles: true,
|
|
81
|
+
usableIn: ['interaction', 'action'],
|
|
82
|
+
params: {
|
|
83
|
+
direction: { type: 'select', label: 'Burn direction', default: 'up', options: DIRECTION_OPTIONS },
|
|
84
|
+
wind: { type: 'select', label: 'Wind', default: 'left', options: [{ value: 'left', label: 'Left → right' }, { value: 'right', label: 'Right → left' }, { value: 'up', label: 'Rising' }] },
|
|
85
|
+
windStrength: { type: 'number', label: 'Wind strength', default: 1, min: 0, max: 4, step: 0.05, unit: '×' },
|
|
86
|
+
ember: { type: 'color', label: 'Ember colour', default: '#ff6a1f' },
|
|
87
|
+
flakes: { type: 'number', label: 'Ash flakes', default: 16000, min: 2000, max: 80000, step: 1000 },
|
|
88
|
+
flakeSize: { type: 'number', label: 'Flake size', default: 1, min: 0.2, max: 4, step: 0.1, unit: '×' },
|
|
89
|
+
scale: { type: 'number', label: 'Burn pattern', default: 2.5, min: 0.5, max: 12, step: 0.1 },
|
|
90
|
+
duration: { type: 'number', label: 'Duration', default: 4, min: 0.3, max: 14, step: 0.1, unit: 's' },
|
|
91
|
+
},
|
|
92
|
+
apply(target, p, ctx) {
|
|
93
|
+
let st = target.userData[STATE];
|
|
94
|
+
if (!st) {
|
|
95
|
+
const field = createFieldState(target);
|
|
96
|
+
field.edgeWidth.value = 0.05;
|
|
97
|
+
const own = { field, wind: { value: new Vector3(1, 0, 0) }, windStrength: { value: 1 }, ember: { value: new Color() }, flake: { value: 1 }, mats: new Set() };
|
|
98
|
+
const sample = sampleSurfaceCached(target, Math.round(Number(p.flakes)), 7);
|
|
99
|
+
own.points = createFxPoints(target, sample, {
|
|
100
|
+
additive: false,
|
|
101
|
+
uniforms: { ...fieldUniforms(P, field), uAshWind: own.wind, uAshWindK: own.windStrength, uAshEmber: own.ember, uAshFlake: own.flake },
|
|
102
|
+
vertexPars: fieldGlsl(P) + GLSL_POINT_SIZE + FRONTS,
|
|
103
|
+
vertexMain: /* glsl */ `
|
|
104
|
+
float f = AshField(AshNorm(aP));
|
|
105
|
+
// a flake leaves when the ash front reaches it
|
|
106
|
+
float born = ${LAG.toFixed(2)} + AshBirthOf(f);
|
|
107
|
+
float a = (uAshProgress - born) / ${LIFE.toFixed(2)};
|
|
108
|
+
if (a <= 0.0 || a >= 1.0) { gl_Position = vec4(2.0, 2.0, 2.0, 1.0); gl_PointSize = 0.0; vColor = vec3(0.0); vAlpha = 0.0; return; }
|
|
109
|
+
float E = uAshExtent;
|
|
110
|
+
// wind: accelerating along the wind, curling in slow turbulence, lifted by the heat
|
|
111
|
+
vec3 np = aP / E * 2.2 + aR.xyz * 5.0;
|
|
112
|
+
vec3 turb = vec3(fxNoise(np + vec3(a * 1.6, 0.0, 0.0)), fxNoise(np + vec3(17.0, a * 1.6, 3.0)), fxNoise(np + vec3(5.0, 11.0, a * 1.6))) - 0.5;
|
|
113
|
+
vec3 local = aP + aN * (0.02 * E * sqrt(a))
|
|
114
|
+
+ uAshWind * (E * uAshWindK * (0.5 * a + 1.3 * a * a) * (0.7 + 0.6 * aR.x))
|
|
115
|
+
+ turb * (0.5 * E * a)
|
|
116
|
+
+ vec3(0.0, 0.22 * E * a * (0.5 + aR.y), 0.0);
|
|
117
|
+
vec4 mv = modelViewMatrix * vec4(local, 1.0);
|
|
118
|
+
gl_Position = projectionMatrix * mv;
|
|
119
|
+
// most flakes are grey ash; one in six still glows, cooling as it flies
|
|
120
|
+
float glowing = step(0.83, aR.w);
|
|
121
|
+
vec3 ash = mix(vec3(0.66, 0.64, 0.6), vec3(0.24, 0.23, 0.22), aR.z);
|
|
122
|
+
vec3 hot = mix(uAshEmber * 1.8, uAshEmber * vec3(0.35, 0.08, 0.02), a);
|
|
123
|
+
vColor = mix(ash, hot, glowing);
|
|
124
|
+
vAlpha = smoothstep(0.0, 0.05, a) * (1.0 - smoothstep(0.7, 1.0, a));
|
|
125
|
+
// a tumbling flake shows its face, then its edge
|
|
126
|
+
float tumble = 0.35 + 0.65 * abs(sin(a * (9.0 + 12.0 * aR.y) + aR.x * 6.28));
|
|
127
|
+
gl_PointSize = clamp(fxPointPx(E * 0.0055 * uAshFlake * (0.5 + aR.z) * tumble, mv), 1.0, 14.0);`,
|
|
128
|
+
});
|
|
129
|
+
const layer = surfaceLayerFor(own);
|
|
130
|
+
forEachMeshMaterial(target, (mat, mesh) => {
|
|
131
|
+
if (mesh.userData?.__opFxHelper)
|
|
132
|
+
return;
|
|
133
|
+
if (addLayer(mat, KEY, layer))
|
|
134
|
+
own.mats.add(mat);
|
|
135
|
+
});
|
|
136
|
+
st = own;
|
|
137
|
+
target.userData[STATE] = st;
|
|
138
|
+
}
|
|
139
|
+
const s = st;
|
|
140
|
+
setFieldParams(s.field, p, target, ctx);
|
|
141
|
+
s.ember.value.set(String(p.ember));
|
|
142
|
+
s.windStrength.value = Number(p.windStrength);
|
|
143
|
+
s.flake.value = Number(p.flakeSize);
|
|
144
|
+
if (p.wind === 'up')
|
|
145
|
+
s.wind.value.set(0, 1, 0);
|
|
146
|
+
else {
|
|
147
|
+
const r = screenRight(target, ctx);
|
|
148
|
+
s.wind.value.copy(p.wind === 'right' ? r.negate() : r);
|
|
149
|
+
}
|
|
150
|
+
s.points.visible = true;
|
|
151
|
+
return runProgress(target, s.field, END, {
|
|
152
|
+
duration: Number(p.duration), ease: 'none',
|
|
153
|
+
onComplete: () => { hideMeshes(target, KEY, true); s.points.visible = false; },
|
|
154
|
+
});
|
|
155
|
+
},
|
|
156
|
+
revert(target, p) {
|
|
157
|
+
const s = target.userData[STATE];
|
|
158
|
+
if (!s)
|
|
159
|
+
return;
|
|
160
|
+
hideMeshes(target, KEY, false);
|
|
161
|
+
s.points.visible = true;
|
|
162
|
+
return runProgress(target, s.field, 0, {
|
|
163
|
+
duration: Number(p.duration), ease: 'none',
|
|
164
|
+
onComplete: () => {
|
|
165
|
+
s.mats.forEach(m => removeLayer(m, KEY));
|
|
166
|
+
disposeFxPoints(s.points);
|
|
167
|
+
delete target.userData[STATE];
|
|
168
|
+
},
|
|
169
|
+
});
|
|
170
|
+
},
|
|
171
|
+
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fade.d.ts","sourceRoot":"","sources":["../../../src/operations/catalogue/fade.ts"],"names":[],"mappings":";AAMA,
|
|
1
|
+
{"version":3,"file":"fade.d.ts","sourceRoot":"","sources":["../../../src/operations/catalogue/fade.ts"],"names":[],"mappings":";AAMA,wBAqCG"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flip.d.ts","sourceRoot":"","sources":["../../../src/operations/catalogue/flip.ts"],"names":[],"mappings":";AAaA,wBAoDG"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
// Flip — a proper little jump: crouch (anticipation), spring up, a full flip in
|
|
2
|
+
// the air about the object's centre, and a squash on landing. One-shot, lands
|
|
3
|
+
// exactly on the rest pose.
|
|
4
|
+
import { gsap } from 'gsap';
|
|
5
|
+
import { Quaternion, Vector3 } from 'three';
|
|
6
|
+
import { defineOperation } from '../types.js';
|
|
7
|
+
import { acquireRest, poseAbout, releaseRest } from './restPose.js';
|
|
8
|
+
const KEY = '__opFlip';
|
|
9
|
+
const AXES = { x: new Vector3(1, 0, 0), z: new Vector3(0, 0, 1), y: new Vector3(0, 1, 0) };
|
|
10
|
+
const NO_TURN = new Quaternion();
|
|
11
|
+
const smooth = (x) => x * x * (3 - 2 * x);
|
|
12
|
+
export default defineOperation({
|
|
13
|
+
value: 'flip',
|
|
14
|
+
label: 'Flip',
|
|
15
|
+
description: 'Crouch, jump and flip in the air, landing with a squash',
|
|
16
|
+
channel: 'transform',
|
|
17
|
+
multi: true,
|
|
18
|
+
toggles: false,
|
|
19
|
+
usableIn: ['interaction', 'action'],
|
|
20
|
+
params: {
|
|
21
|
+
axis: { type: 'select', label: 'Flip', default: 'x', options: [{ value: 'x', label: 'Forward (X)' }, { value: 'z', label: 'Sideways (Z)' }, { value: 'y', label: 'Twist (Y)' }] },
|
|
22
|
+
height: { type: 'number', label: 'Jump height', default: 0.45, min: 0.1, max: 4, step: 0.05, hint: 'A fraction of the object’s own height' },
|
|
23
|
+
reverse: { type: 'boolean', label: 'Backwards', default: false },
|
|
24
|
+
duration: { type: 'number', label: 'Duration', default: 1.3, min: 0.3, max: 5, step: 0.05, unit: 's' },
|
|
25
|
+
},
|
|
26
|
+
apply(target, p) {
|
|
27
|
+
const running = target.userData[KEY];
|
|
28
|
+
if (running) {
|
|
29
|
+
gsap.killTweensOf(running.proxy);
|
|
30
|
+
releaseRest(target);
|
|
31
|
+
}
|
|
32
|
+
const rest = acquireRest(target);
|
|
33
|
+
const proxy = { u: 0 };
|
|
34
|
+
target.userData[KEY] = { proxy };
|
|
35
|
+
const axis = AXES[String(p.axis)] ?? AXES.x;
|
|
36
|
+
const dir = p.reverse ? -1 : 1;
|
|
37
|
+
const h = rest.size.y * Number(p.height);
|
|
38
|
+
const q = new Quaternion(), s = new Vector3(), off = new Vector3();
|
|
39
|
+
const CROUCH = 0.18, LAND = 0.82;
|
|
40
|
+
gsap.to(proxy, {
|
|
41
|
+
u: 1, duration: Number(p.duration), ease: 'none',
|
|
42
|
+
onUpdate: () => {
|
|
43
|
+
const u = proxy.u;
|
|
44
|
+
if (u < CROUCH) {
|
|
45
|
+
// anticipation: squash down and release, about the base
|
|
46
|
+
const v = u / CROUCH;
|
|
47
|
+
const sy = 1 - 0.16 * Math.sin(Math.PI * v);
|
|
48
|
+
const sxz = 1 / Math.sqrt(sy);
|
|
49
|
+
poseAbout(target, rest, rest.bottomLocal, NO_TURN, s.set(sxz, sy, sxz));
|
|
50
|
+
}
|
|
51
|
+
else if (u < LAND) {
|
|
52
|
+
// ballistic hop + a full turn about the centre, eased so it hangs at the top
|
|
53
|
+
const v = (u - CROUCH) / (LAND - CROUCH);
|
|
54
|
+
off.set(0, 4 * h * v * (1 - v), 0);
|
|
55
|
+
q.setFromAxisAngle(axis, dir * 2 * Math.PI * smooth(v));
|
|
56
|
+
poseAbout(target, rest, rest.centerLocal, q, s.set(1, 1, 1), off);
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
// landing: squash that rings out once
|
|
60
|
+
const v = (u - LAND) / (1 - LAND);
|
|
61
|
+
const sy = 1 - 0.14 * Math.sin(Math.PI * v) * (1 - v * 0.4);
|
|
62
|
+
const sxz = 1 / Math.sqrt(sy);
|
|
63
|
+
poseAbout(target, rest, rest.bottomLocal, NO_TURN, s.set(sxz, sy, sxz));
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
onComplete: () => { delete target.userData[KEY]; releaseRest(target); },
|
|
67
|
+
});
|
|
68
|
+
},
|
|
69
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flock.d.ts","sourceRoot":"","sources":["../../../src/operations/catalogue/flock.ts"],"names":[],"mappings":";AA6CA,wBAwHG"}
|