@3driseai/3drise-viewer 0.1.26 → 0.1.28
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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/ApollonianGrid.d.ts +25 -0
- package/dist/components/ApollonianGrid.d.ts.map +1 -0
- package/dist/components/ApollonianGrid.js +80 -0
- 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/ConformalGrid.d.ts +25 -0
- package/dist/components/ConformalGrid.d.ts.map +1 -0
- package/dist/components/ConformalGrid.js +97 -0
- 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 +9 -3
- package/dist/components/GridsGenerator.d.ts.map +1 -1
- package/dist/components/GridsGenerator.js +41 -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/HilbertGrid.d.ts +25 -0
- package/dist/components/HilbertGrid.d.ts.map +1 -0
- package/dist/components/HilbertGrid.js +93 -0
- 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/LensingGrid.d.ts +25 -0
- package/dist/components/LensingGrid.d.ts.map +1 -0
- package/dist/components/LensingGrid.js +81 -0
- 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/ParastichyGrid.d.ts +25 -0
- package/dist/components/ParastichyGrid.d.ts.map +1 -0
- package/dist/components/ParastichyGrid.js +82 -0
- package/dist/components/ParticlesGenerator.d.ts.map +1 -1
- package/dist/components/ParticlesGenerator.js +6 -0
- package/dist/components/PhyllotaxisGrid.d.ts +25 -0
- package/dist/components/PhyllotaxisGrid.d.ts.map +1 -0
- package/dist/components/PhyllotaxisGrid.js +95 -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/TruchetGrid.d.ts +25 -0
- package/dist/components/TruchetGrid.d.ts.map +1 -0
- package/dist/components/TruchetGrid.js +82 -0
- 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 +14 -1
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +7 -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/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/gridConfigs.d.ts +103 -0
- package/dist/types/gridConfigs.d.ts.map +1 -1
- package/dist/types/index.d.ts +9 -9
- 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 @@
|
|
|
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"}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
// Flock — the surface takes flight: every spot becomes a small bird (a real lit
|
|
2
|
+
// instanced mesh, flapping its wings, carrying the colour of the spot it left).
|
|
3
|
+
// As the front passes, birds hop off the surface, then fly away in curving
|
|
4
|
+
// streams — out and up, or all toward one side of the screen — accelerating
|
|
5
|
+
// until they are gone. Birds always face the way they fly, so on revert they
|
|
6
|
+
// fly back in (head first) and settle into place as the surface re-forms.
|
|
7
|
+
import { BufferAttribute, BufferGeometry, Vector3 } from 'three';
|
|
8
|
+
import { defineOperation } from '../types.js';
|
|
9
|
+
import { addLayer, forEachMeshMaterial, removeLayer } from './shaderLayers.js';
|
|
10
|
+
import { DIRECTION_OPTIONS, createFieldState, fieldGlsl, fieldUniforms, hideMeshes, runProgress, screenRight, setFieldParams, surfaceLayer, } from './transitionField.js';
|
|
11
|
+
import { sampleSurfaceCached } from './surfaceSample.js';
|
|
12
|
+
import { createFxInstances, disposeFxInstances } from './fxInstances.js';
|
|
13
|
+
const P = 'Flk';
|
|
14
|
+
const KEY = 'flock';
|
|
15
|
+
const STATE = '__opFlock';
|
|
16
|
+
const LIFE = 1.0;
|
|
17
|
+
/** A unit bird in its own frame: x = right, y = up, z = forward. aWing marks the flapping tips. */
|
|
18
|
+
function birdGeometry() {
|
|
19
|
+
const v = [
|
|
20
|
+
// body
|
|
21
|
+
0, 0, 0.5, -0.07, 0, -0.45, 0.07, 0, -0.45,
|
|
22
|
+
// left wing (tip flaps)
|
|
23
|
+
0, 0, 0.18, -0.95, 0, -0.12, 0, 0, -0.22,
|
|
24
|
+
// right wing
|
|
25
|
+
0, 0, 0.18, 0, 0, -0.22, 0.95, 0, -0.12,
|
|
26
|
+
// tail
|
|
27
|
+
0, 0, -0.35, -0.18, 0, -0.62, 0.18, 0, -0.62,
|
|
28
|
+
];
|
|
29
|
+
const wing = [0, 0, 0, 0, -1, 0, 0, 0, 1, 0, 0, 0];
|
|
30
|
+
const g = new BufferGeometry();
|
|
31
|
+
g.setAttribute('position', new BufferAttribute(new Float32Array(v), 3));
|
|
32
|
+
g.setAttribute('normal', new BufferAttribute(new Float32Array(Array(12).fill([0, 1, 0]).flat()), 3));
|
|
33
|
+
g.setAttribute('aWing', new BufferAttribute(new Float32Array(wing), 1));
|
|
34
|
+
return g;
|
|
35
|
+
}
|
|
36
|
+
export default defineOperation({
|
|
37
|
+
value: 'flock',
|
|
38
|
+
label: 'Flock',
|
|
39
|
+
description: 'Turn the targets into a flock of birds that takes off and flies away — reverting flies them home',
|
|
40
|
+
channel: 'visual',
|
|
41
|
+
multi: true,
|
|
42
|
+
toggles: true,
|
|
43
|
+
usableIn: ['interaction', 'action'],
|
|
44
|
+
params: {
|
|
45
|
+
direction: { type: 'select', label: 'Take-off order', default: 'down', options: DIRECTION_OPTIONS },
|
|
46
|
+
exit: { type: 'select', label: 'Fly', default: 'away', options: [{ value: 'away', label: 'Out and up' }, { value: 'left', label: 'To the right' }, { value: 'right', label: 'To the left' }, { value: 'up', label: 'Straight up' }] },
|
|
47
|
+
birds: { type: 'number', label: 'Birds', default: 1400, min: 100, max: 12000, step: 100 },
|
|
48
|
+
birdSize: { type: 'number', label: 'Bird size', default: 1, min: 0.3, max: 4, step: 0.05, unit: '×' },
|
|
49
|
+
speed: { type: 'number', label: 'Speed', default: 1, min: 0.2, max: 4, step: 0.05, unit: '×' },
|
|
50
|
+
edgeColor: { type: 'color', label: 'Edge colour', default: '#ffffff' },
|
|
51
|
+
scale: { type: 'number', label: 'Pattern', default: 2.5, min: 0.5, max: 12, step: 0.1 },
|
|
52
|
+
duration: { type: 'number', label: 'Duration', default: 3.4, min: 0.3, max: 14, step: 0.1, unit: 's' },
|
|
53
|
+
},
|
|
54
|
+
apply(target, p, ctx) {
|
|
55
|
+
let st = target.userData[STATE];
|
|
56
|
+
if (!st) {
|
|
57
|
+
const field = createFieldState(target);
|
|
58
|
+
field.edgeWidth.value = 0.04;
|
|
59
|
+
const own = {
|
|
60
|
+
field, exit: { value: new Vector3(1, 0, 0) }, mode: { value: 0 }, speed: { value: 1 }, dirSign: { value: 1 }, bird: { value: 1 }, mats: new Set(),
|
|
61
|
+
};
|
|
62
|
+
const sample = sampleSurfaceCached(target, Math.round(Number(p.birds)), 53);
|
|
63
|
+
const n = sample.count;
|
|
64
|
+
const pos = sample.position.slice(0, n * 3);
|
|
65
|
+
own.mesh = createFxInstances(target, {
|
|
66
|
+
geometry: birdGeometry(),
|
|
67
|
+
count: n, positions: pos, colors: sample.color.slice(0, n * 3),
|
|
68
|
+
attributes: { aFlkP: [pos, 3], aFlkN: [sample.normal.slice(0, n * 3), 3], aFlkR: [sample.random.slice(0, n * 4), 4] },
|
|
69
|
+
layerKey: 'flockInstances', roughness: 0.65, metalness: 0, doubleSided: true,
|
|
70
|
+
layer: {
|
|
71
|
+
uniforms: { ...fieldUniforms(P, field), uFlkExit: own.exit, uFlkMode: own.mode, uFlkSpeed: own.speed, uFlkDirSign: own.dirSign, uFlkBird: own.bird },
|
|
72
|
+
common: fieldGlsl(P),
|
|
73
|
+
vertexPars: /* glsl */ `
|
|
74
|
+
attribute float aWing; attribute vec3 aFlkP; attribute vec3 aFlkN; attribute vec4 aFlkR;
|
|
75
|
+
float flkAge() { return (uFlkProgress - FlkBirthOf(FlkField(FlkNorm(aFlkP)))) / ${LIFE.toFixed(1)}; }
|
|
76
|
+
// offset from the bird's home spot at age a (0..1)
|
|
77
|
+
vec3 flkPath(float a) {
|
|
78
|
+
float E = uFlkExtent;
|
|
79
|
+
float take = smoothstep(0.0, 0.1, a);
|
|
80
|
+
vec3 hop = (aFlkN * 0.06 + vec3(0.0, 0.05, 0.0)) * E * take;
|
|
81
|
+
float t = max(a - 0.06, 0.0);
|
|
82
|
+
vec3 C = uFlkMin + uFlkSize * 0.5;
|
|
83
|
+
vec3 away = normalize(vec3(aFlkP.x - C.x, 0.0, aFlkP.z - C.z) + (aFlkR.xyz - 0.5) * 0.7 + vec3(1e-3, 0.0, 0.0));
|
|
84
|
+
vec3 dir = uFlkMode < 0.5
|
|
85
|
+
? normalize(away + vec3(0.0, 0.55 + 0.45 * aFlkR.y, 0.0))
|
|
86
|
+
: normalize(uFlkExit + (aFlkR.xyz - 0.5) * 0.45 + vec3(0.0, 0.2 + 0.2 * aFlkR.y, 0.0));
|
|
87
|
+
float dist = E * uFlkSpeed * (1.0 * t + 5.5 * t * t);
|
|
88
|
+
vec3 sideV = normalize(cross(dir, vec3(0.0, 1.0, 0.0)) + vec3(1e-3));
|
|
89
|
+
vec3 curve = sideV * sin(t * 4.0 + aFlkR.z * 6.28) * 0.28 * E * t
|
|
90
|
+
+ vec3(0.0, 1.0, 0.0) * sin(t * 3.0 + aFlkR.w * 6.28) * 0.12 * E * t;
|
|
91
|
+
return hop + dir * dist + curve;
|
|
92
|
+
}
|
|
93
|
+
// the bird's frame: facing the way it moves (backwards in time when reverting)
|
|
94
|
+
mat3 flkFrame(float a) {
|
|
95
|
+
float a0 = min(a, 0.99);
|
|
96
|
+
vec3 v = (flkPath(a0 + 0.01) - flkPath(a0)) * uFlkDirSign;
|
|
97
|
+
vec3 fwd = length(v) > 1e-6 ? normalize(v) : vec3(0.0, 0.0, 1.0);
|
|
98
|
+
vec3 right = normalize(cross(fwd, vec3(0.0, 1.0, 0.0)) + vec3(1e-4));
|
|
99
|
+
vec3 up = cross(right, fwd);
|
|
100
|
+
return mat3(right, up, fwd);
|
|
101
|
+
}`,
|
|
102
|
+
normal: `{ objectNormal = flkFrame(clamp(flkAge(), 0.0, 1.0)) * objectNormal; }`,
|
|
103
|
+
vertex: /* glsl */ `
|
|
104
|
+
{
|
|
105
|
+
float a = flkAge();
|
|
106
|
+
if (a <= 0.0) { transformed *= 0.0; }
|
|
107
|
+
else {
|
|
108
|
+
a = min(a, 1.0);
|
|
109
|
+
vec3 v = transformed;
|
|
110
|
+
// wing beat: fast, with a little variation per bird
|
|
111
|
+
v.y += abs(aWing) * sin(uFlkTime * (16.0 + 6.0 * aFlkR.x) + aFlkR.y * 6.28) * 0.38;
|
|
112
|
+
float size = uFlkExtent * 0.03 * uFlkBird * (0.8 + 0.4 * aFlkR.w);
|
|
113
|
+
float sc = smoothstep(0.0, 0.06, a) * (1.0 - smoothstep(0.88, 1.0, a));
|
|
114
|
+
transformed = flkFrame(a) * (v * size * sc) + flkPath(a);
|
|
115
|
+
}
|
|
116
|
+
}`,
|
|
117
|
+
},
|
|
118
|
+
});
|
|
119
|
+
const layer = surfaceLayer(P, field, 'tint');
|
|
120
|
+
forEachMeshMaterial(target, (mat, m) => {
|
|
121
|
+
if (m.userData?.__opFxHelper)
|
|
122
|
+
return;
|
|
123
|
+
if (addLayer(mat, KEY, layer))
|
|
124
|
+
own.mats.add(mat);
|
|
125
|
+
});
|
|
126
|
+
st = own;
|
|
127
|
+
target.userData[STATE] = st;
|
|
128
|
+
}
|
|
129
|
+
const s = st;
|
|
130
|
+
setFieldParams(s.field, p, target, ctx);
|
|
131
|
+
s.speed.value = Number(p.speed);
|
|
132
|
+
s.bird.value = Number(p.birdSize);
|
|
133
|
+
s.dirSign.value = 1;
|
|
134
|
+
s.mode.value = p.exit === 'away' ? 0 : 1;
|
|
135
|
+
if (p.exit === 'up')
|
|
136
|
+
s.exit.value.set(0, 1, 0);
|
|
137
|
+
else if (p.exit === 'left' || p.exit === 'right') {
|
|
138
|
+
const r = screenRight(target, ctx);
|
|
139
|
+
s.exit.value.copy(p.exit === 'left' ? r : r.negate());
|
|
140
|
+
}
|
|
141
|
+
s.mesh.visible = true;
|
|
142
|
+
return runProgress(target, s.field, 1 + LIFE, {
|
|
143
|
+
duration: Number(p.duration), ease: 'power1.in',
|
|
144
|
+
onComplete: () => { hideMeshes(target, KEY, true); s.mesh.visible = false; },
|
|
145
|
+
});
|
|
146
|
+
},
|
|
147
|
+
revert(target, p) {
|
|
148
|
+
const s = target.userData[STATE];
|
|
149
|
+
if (!s)
|
|
150
|
+
return;
|
|
151
|
+
hideMeshes(target, KEY, false);
|
|
152
|
+
s.mesh.visible = true;
|
|
153
|
+
s.dirSign.value = -1;
|
|
154
|
+
return runProgress(target, s.field, 0, {
|
|
155
|
+
duration: Number(p.duration), ease: 'power1.out',
|
|
156
|
+
onComplete: () => {
|
|
157
|
+
s.mats.forEach(m => removeLayer(m, KEY));
|
|
158
|
+
disposeFxInstances(s.mesh);
|
|
159
|
+
delete target.userData[STATE];
|
|
160
|
+
},
|
|
161
|
+
});
|
|
162
|
+
},
|
|
163
|
+
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"focus.d.ts","sourceRoot":"","sources":["../../../src/operations/catalogue/focus.ts"],"names":[],"mappings":";AAGA,
|
|
1
|
+
{"version":3,"file":"focus.d.ts","sourceRoot":"","sources":["../../../src/operations/catalogue/focus.ts"],"names":[],"mappings":";AAGA,wBAoBG"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"frame.d.ts","sourceRoot":"","sources":["../../../src/operations/catalogue/frame.ts"],"names":[],"mappings":";AAOA,wBAkCG"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
// Frame — fly the camera so the whole target fills the view, from the side the
|
|
2
|
+
// camera is already on (unlike Zoom, which stands a fixed distance in front of
|
|
3
|
+
// the target's face). Reverting flies back.
|
|
4
|
+
import { Box3, Sphere, Vector3 } from 'three';
|
|
5
|
+
import cameraManager from '../../utils/CameraSingleton.js';
|
|
6
|
+
import { defineOperation } from '../types.js';
|
|
7
|
+
export default defineOperation({
|
|
8
|
+
value: 'frame',
|
|
9
|
+
label: 'Frame',
|
|
10
|
+
description: 'Fly the camera so the whole target fits the view, keeping the current viewing side',
|
|
11
|
+
channel: 'camera',
|
|
12
|
+
multi: false,
|
|
13
|
+
toggles: true,
|
|
14
|
+
usableIn: ['interaction', 'action'],
|
|
15
|
+
exclusive: { group: 'camera', release: 'handover' },
|
|
16
|
+
params: {
|
|
17
|
+
margin: { type: 'number', label: 'Margin', default: 1.25, min: 1, max: 4, step: 0.05, unit: '×', hint: 'Room around the object — 1 fits it edge to edge' },
|
|
18
|
+
duration: { type: 'number', label: 'Duration', default: 1.2, min: 0, max: 10, step: 0.05, unit: 's' },
|
|
19
|
+
},
|
|
20
|
+
apply(target, p, ctx) {
|
|
21
|
+
const pose = ctx.tools.cameraPose();
|
|
22
|
+
const cam = cameraManager.getCamera();
|
|
23
|
+
if (!pose || !cam)
|
|
24
|
+
return;
|
|
25
|
+
const sphere = new Box3().setFromObject(target).getBoundingSphere(new Sphere());
|
|
26
|
+
if (!Number.isFinite(sphere.radius) || sphere.radius <= 0)
|
|
27
|
+
return;
|
|
28
|
+
ctx.saveCameraHome();
|
|
29
|
+
// the tighter of the vertical and horizontal fields of view decides the distance
|
|
30
|
+
const vFov = (cam.fov * Math.PI) / 180;
|
|
31
|
+
const hFov = 2 * Math.atan(Math.tan(vFov / 2) * cam.aspect);
|
|
32
|
+
const fit = sphere.radius / Math.sin(Math.min(vFov, hFov) / 2);
|
|
33
|
+
const dist = Math.max(fit * Number(p.margin), cam.near * 2);
|
|
34
|
+
const dir = new Vector3(...pose.position).sub(sphere.center);
|
|
35
|
+
if (dir.lengthSq() < 1e-8)
|
|
36
|
+
dir.set(0, 0, 1);
|
|
37
|
+
const to = sphere.center.clone().add(dir.normalize().multiplyScalar(dist));
|
|
38
|
+
const c = sphere.center;
|
|
39
|
+
void ctx.tools.animateCamera({ position: [to.x, to.y, to.z] }, Number(p.duration), 'power3.inOut', [c.x, c.y, c.z]);
|
|
40
|
+
},
|
|
41
|
+
revert(_target, p, ctx) {
|
|
42
|
+
ctx.restoreCameraHome(Number(p.duration), 'power3.inOut');
|
|
43
|
+
},
|
|
44
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"frost.d.ts","sourceRoot":"","sources":["../../../src/operations/catalogue/frost.ts"],"names":[],"mappings":";AAoEA,wBA4CG"}
|