@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,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"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
// Frost — ice spreads over the object along a feathery front: the surface turns
|
|
2
|
+
// to faceted crystal (3D cellular pattern in the object's own space), glossy
|
|
3
|
+
// where the ice is clear and rough and white where frost crusts along the facet
|
|
4
|
+
// seams, with glints that catch the light cell by cell. The base colour and the
|
|
5
|
+
// roughness change BEFORE lighting, so the ice is lit by the scene like a real
|
|
6
|
+
// material. A state, not an exit: it stays frozen while on; reverting thaws.
|
|
7
|
+
import { Color } from 'three';
|
|
8
|
+
import { defineOperation } from '../types.js';
|
|
9
|
+
import { GLSL_WORLEY, addLayer, forEachMeshMaterial, removeLayer } from './shaderLayers.js';
|
|
10
|
+
import { DIRECTION_OPTIONS, createFieldState, fieldGlsl, fieldUniforms, runProgress, setFieldParams } from './transitionField.js';
|
|
11
|
+
const P = 'Frs';
|
|
12
|
+
const KEY = 'frost';
|
|
13
|
+
const STATE = '__opFrost';
|
|
14
|
+
function layerFor(st) {
|
|
15
|
+
// computed ONCE per fragment, in the first anchor (diffuse), then shared: the
|
|
16
|
+
// cellular pattern is the costly part to compile and to run
|
|
17
|
+
const frozen = /* glsl */ `
|
|
18
|
+
float frsT = FrsThreshold();
|
|
19
|
+
float frsF = FrsField(vFrsQ);
|
|
20
|
+
float fr = frsFr;
|
|
21
|
+
vec3 cell = frsCell;
|
|
22
|
+
float seam = frsSeam;
|
|
23
|
+
`;
|
|
24
|
+
return {
|
|
25
|
+
uniforms: { ...fieldUniforms(P, st.field), uFrsIce: st.ice, uFrsDensity: st.density },
|
|
26
|
+
common: `varying vec3 vFrsQ;\nvarying vec3 vFrsR;\nvarying vec3 vFrsView;\n${fieldGlsl(P)}\n${GLSL_WORLEY}`,
|
|
27
|
+
fragmentPars: 'float frsFr = 0.0; vec3 frsCell = vec3(1.0); float frsSeam = 0.0;',
|
|
28
|
+
vertex: /* glsl */ `
|
|
29
|
+
vFrsR = (uFrsRootInv * modelMatrix * vec4(transformed, 1.0)).xyz;
|
|
30
|
+
vFrsQ = FrsNorm(vFrsR);
|
|
31
|
+
vFrsView = (modelViewMatrix * vec4(transformed, 1.0)).xyz;`,
|
|
32
|
+
diffuse: /* glsl */ `
|
|
33
|
+
{
|
|
34
|
+
frsFr = smoothstep(0.0, uFrsEdgeWidth, FrsThreshold() - FrsField(vFrsQ));
|
|
35
|
+
frsCell = fxWorley(vFrsR * (uFrsDensity / uFrsExtent));
|
|
36
|
+
frsSeam = 1.0 - smoothstep(0.0, 0.09, frsCell.y - frsCell.x);
|
|
37
|
+
${frozen}
|
|
38
|
+
vec3 clearIce = uFrsIce * (0.55 + 0.25 * cell.z);
|
|
39
|
+
vec3 crust = vec3(0.93, 0.96, 1.0);
|
|
40
|
+
vec3 ice = mix(clearIce, crust, clamp(seam * 0.9 + 0.2 * fxFbm(vFrsR / uFrsExtent * 18.0), 0.0, 1.0));
|
|
41
|
+
diffuseColor.rgb = mix(diffuseColor.rgb, ice, fr * 0.9);
|
|
42
|
+
}`,
|
|
43
|
+
material: /* glsl */ `
|
|
44
|
+
{
|
|
45
|
+
${frozen}
|
|
46
|
+
roughnessFactor = mix(roughnessFactor, mix(0.12, 0.75, seam), fr);
|
|
47
|
+
metalnessFactor = mix(metalnessFactor, 0.0, fr);
|
|
48
|
+
}`,
|
|
49
|
+
fragment: /* glsl */ `
|
|
50
|
+
{
|
|
51
|
+
${frozen}
|
|
52
|
+
vec3 v = normalize(-vFrsView);
|
|
53
|
+
// each facet has its own crystal plane: some catch the light, most don't
|
|
54
|
+
vec3 g = normalize(fxHash3(floor(vFrsR * (uFrsDensity / uFrsExtent)) + 17.0) - 0.5);
|
|
55
|
+
float glint = pow(max(dot(g, v), 0.0), 90.0) * (1.0 - seam);
|
|
56
|
+
vec3 nv = normalize(cross(dFdx(vFrsView), dFdy(vFrsView)));
|
|
57
|
+
float rim = pow(1.0 - abs(dot(nv, v)), 3.0);
|
|
58
|
+
// the growing front: a thin bright crystalline line
|
|
59
|
+
float front = exp(-abs(frsT - frsF) / 0.012) * step(0.0001, uFrsProgress) * step(uFrsProgress, 0.9999);
|
|
60
|
+
outgoingLight += fr * (vec3(1.0) * glint * 4.0 + uFrsIce * rim * 0.45) + vec3(0.85, 0.95, 1.0) * front * 1.2;
|
|
61
|
+
}`,
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
export default defineOperation({
|
|
65
|
+
value: 'frost',
|
|
66
|
+
label: 'Frost',
|
|
67
|
+
description: 'Spread faceted ice with glinting crystals over the targets — reverting thaws them',
|
|
68
|
+
channel: 'visual',
|
|
69
|
+
multi: true,
|
|
70
|
+
toggles: true,
|
|
71
|
+
usableIn: ['interaction', 'action', 'object'],
|
|
72
|
+
stack: 'surface',
|
|
73
|
+
params: {
|
|
74
|
+
direction: { type: 'select', label: 'Direction', default: 'up', options: DIRECTION_OPTIONS },
|
|
75
|
+
ice: { type: 'color', label: 'Ice', default: '#bfe4ff' },
|
|
76
|
+
density: { type: 'number', label: 'Crystals', default: 14, min: 3, max: 60, step: 1, hint: 'Facets across the object' },
|
|
77
|
+
scale: { type: 'number', label: 'Front pattern', default: 3, min: 0.5, max: 12, step: 0.1 },
|
|
78
|
+
duration: { type: 'number', label: 'Duration', default: 2.6, min: 0.3, max: 12, step: 0.1, unit: 's' },
|
|
79
|
+
},
|
|
80
|
+
apply(target, p, ctx) {
|
|
81
|
+
let st = target.userData[STATE];
|
|
82
|
+
if (!st) {
|
|
83
|
+
const field = createFieldState(target);
|
|
84
|
+
field.edgeWidth.value = 0.05;
|
|
85
|
+
st = { field, ice: { value: new Color() }, density: { value: 14 }, mats: new Set() };
|
|
86
|
+
const own = st;
|
|
87
|
+
const layer = layerFor(own);
|
|
88
|
+
forEachMeshMaterial(target, (mat, mesh) => {
|
|
89
|
+
if (mesh.userData?.__opFxHelper)
|
|
90
|
+
return;
|
|
91
|
+
if (addLayer(mat, KEY, layer))
|
|
92
|
+
own.mats.add(mat);
|
|
93
|
+
});
|
|
94
|
+
target.userData[STATE] = st;
|
|
95
|
+
}
|
|
96
|
+
const s = st;
|
|
97
|
+
setFieldParams(s.field, p, target, ctx);
|
|
98
|
+
s.ice.value.set(String(p.ice));
|
|
99
|
+
s.density.value = Number(p.density);
|
|
100
|
+
return runProgress(target, s.field, 1, { duration: Number(p.duration), ease: 'power1.out', hold: true });
|
|
101
|
+
},
|
|
102
|
+
revert(target, p) {
|
|
103
|
+
const s = target.userData[STATE];
|
|
104
|
+
if (!s)
|
|
105
|
+
return;
|
|
106
|
+
return runProgress(target, s.field, 0, {
|
|
107
|
+
duration: Number(p.duration), ease: 'power1.in',
|
|
108
|
+
onComplete: () => { s.mats.forEach(m => removeLayer(m, KEY)); delete target.userData[STATE]; },
|
|
109
|
+
});
|
|
110
|
+
},
|
|
111
|
+
});
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { InstancedMesh } from 'three';
|
|
2
|
+
import type { BufferGeometry, Object3D } from 'three';
|
|
3
|
+
import { type ShaderLayer } from './shaderLayers';
|
|
4
|
+
export interface FxInstancesOptions {
|
|
5
|
+
geometry: BufferGeometry;
|
|
6
|
+
count: number;
|
|
7
|
+
/** xyz root-local centre per instance */
|
|
8
|
+
positions: Float32Array;
|
|
9
|
+
/** rgb linear per instance */
|
|
10
|
+
colors: Float32Array;
|
|
11
|
+
/** Extra per-instance attributes, e.g. { aVoxBirth: [data, 1] } */
|
|
12
|
+
attributes: Record<string, [Float32Array, number]>;
|
|
13
|
+
layerKey: string;
|
|
14
|
+
layer: ShaderLayer;
|
|
15
|
+
roughness?: number;
|
|
16
|
+
metalness?: number;
|
|
17
|
+
doubleSided?: boolean;
|
|
18
|
+
}
|
|
19
|
+
export declare function createFxInstances(root: Object3D, o: FxInstancesOptions): InstancedMesh;
|
|
20
|
+
export declare function disposeFxInstances(mesh: InstancedMesh | null | undefined): void;
|
|
21
|
+
//# sourceMappingURL=fxInstances.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fxInstances.d.ts","sourceRoot":"","sources":["../../../src/operations/catalogue/fxInstances.ts"],"names":[],"mappings":"AAOA,OAAO,EAA+C,aAAa,EAAiC,MAAM,OAAO,CAAC;AAClH,OAAO,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACtD,OAAO,EAAY,KAAK,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAG5D,MAAM,WAAW,kBAAkB;IAC/B,QAAQ,EAAE,cAAc,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,yCAAyC;IACzC,SAAS,EAAE,YAAY,CAAC;IACxB,8BAA8B;IAC9B,MAAM,EAAE,YAAY,CAAC;IACrB,mEAAmE;IACnE,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC;IACnD,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,WAAW,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,kBAAkB,GAAG,aAAa,CA0BtF;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI,GAAG,SAAS,QAMxE"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
// =============================================================================
|
|
2
|
+
// Effect instances — an InstancedMesh attached to a target for the length of an
|
|
3
|
+
// effect (voxels, petals…). A real lit MeshStandardMaterial, so the pieces are
|
|
4
|
+
// shaded and cast shadows like the object itself; their motion is a shader layer
|
|
5
|
+
// (per-instance attributes), so nothing is animated on the CPU.
|
|
6
|
+
// Root-local, never raycasts, never counts in bounds, disposed with the effect.
|
|
7
|
+
// =============================================================================
|
|
8
|
+
import { Color, DoubleSide, InstancedBufferAttribute, InstancedMesh, Matrix4, MeshStandardMaterial } from 'three';
|
|
9
|
+
import { addLayer } from './shaderLayers.js';
|
|
10
|
+
import { hideUntilWarm } from './warmup.js';
|
|
11
|
+
export function createFxInstances(root, o) {
|
|
12
|
+
const geo = o.geometry;
|
|
13
|
+
for (const [name, [data, size]] of Object.entries(o.attributes))
|
|
14
|
+
geo.setAttribute(name, new InstancedBufferAttribute(data, size));
|
|
15
|
+
const mat = new MeshStandardMaterial({
|
|
16
|
+
roughness: o.roughness ?? 0.6, metalness: o.metalness ?? 0.05,
|
|
17
|
+
side: o.doubleSided ? DoubleSide : undefined,
|
|
18
|
+
});
|
|
19
|
+
addLayer(mat, o.layerKey, o.layer, { immediate: true }); // a new material: compiled as a helper
|
|
20
|
+
const mesh = new InstancedMesh(geo, mat, o.count);
|
|
21
|
+
const m = new Matrix4();
|
|
22
|
+
const c = new Color();
|
|
23
|
+
for (let i = 0; i < o.count; i++) {
|
|
24
|
+
m.makeTranslation(o.positions[i * 3], o.positions[i * 3 + 1], o.positions[i * 3 + 2]);
|
|
25
|
+
mesh.setMatrixAt(i, m);
|
|
26
|
+
mesh.setColorAt(i, c.setRGB(o.colors[i * 3], o.colors[i * 3 + 1], o.colors[i * 3 + 2]));
|
|
27
|
+
}
|
|
28
|
+
mesh.instanceMatrix.needsUpdate = true;
|
|
29
|
+
if (mesh.instanceColor)
|
|
30
|
+
mesh.instanceColor.needsUpdate = true;
|
|
31
|
+
mesh.frustumCulled = false;
|
|
32
|
+
mesh.castShadow = true;
|
|
33
|
+
mesh.receiveShadow = true;
|
|
34
|
+
mesh.raycast = () => { };
|
|
35
|
+
mesh.userData.__opFxHelper = true;
|
|
36
|
+
root.add(mesh);
|
|
37
|
+
hideUntilWarm(mesh);
|
|
38
|
+
return mesh;
|
|
39
|
+
}
|
|
40
|
+
export function disposeFxInstances(mesh) {
|
|
41
|
+
if (!mesh)
|
|
42
|
+
return;
|
|
43
|
+
mesh.removeFromParent();
|
|
44
|
+
mesh.geometry.dispose();
|
|
45
|
+
mesh.material.dispose();
|
|
46
|
+
mesh.dispose();
|
|
47
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { Points } from 'three';
|
|
2
|
+
import type { Object3D } from 'three';
|
|
3
|
+
import type { SurfaceSample } from './surfaceSample';
|
|
4
|
+
export interface FxPointsOptions {
|
|
5
|
+
uniforms: Record<string, {
|
|
6
|
+
value: unknown;
|
|
7
|
+
}>;
|
|
8
|
+
/** GLSL before main (after uniform/attribute declarations). */
|
|
9
|
+
vertexPars: string;
|
|
10
|
+
/**
|
|
11
|
+
* main() body. Attributes: aP (root-local position), aN (normal), aC (colour),
|
|
12
|
+
* aR (vec4 random). Must write gl_Position, gl_PointSize and vColor (rgb) / vAlpha.
|
|
13
|
+
* `uFxViewH` is the drawing-buffer height, for perspective point sizes.
|
|
14
|
+
*/
|
|
15
|
+
vertexMain: string;
|
|
16
|
+
additive: boolean;
|
|
17
|
+
}
|
|
18
|
+
export declare function createFxPoints(root: Object3D, sample: SurfaceSample, o: FxPointsOptions): Points;
|
|
19
|
+
export declare function disposeFxPoints(pts: Points | null | undefined): void;
|
|
20
|
+
/** Perspective point size in pixels for a world-size `s` at view depth `z` (GLSL). */
|
|
21
|
+
export declare const GLSL_POINT_SIZE = "\nfloat fxPointPx(float s, vec4 mv) { return s * uFxViewH * projectionMatrix[1][1] * 0.5 / max(-mv.z, 1e-3); }\n";
|
|
22
|
+
//# sourceMappingURL=fxPoints.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fxPoints.d.ts","sourceRoot":"","sources":["../../../src/operations/catalogue/fxPoints.ts"],"names":[],"mappings":"AAKA,OAAO,EAAqE,MAAM,EAA2B,MAAM,OAAO,CAAC;AAC3H,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAIrD,MAAM,WAAW,eAAe;IAC5B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IAC7C,+DAA+D;IAC/D,UAAU,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;CACrB;AAiBD,wBAAgB,cAAc,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,EAAE,eAAe,GAAG,MAAM,CAoChG;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,QAK7D;AAED,sFAAsF;AACtF,eAAO,MAAM,eAAe,qHAE3B,CAAC"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
// =============================================================================
|
|
2
|
+
// Effect particles — a Points cloud attached to a target for the length of a
|
|
3
|
+
// transition. Lives in the target's root-local space (so it moves with it),
|
|
4
|
+
// never raycasts, never counts in bounds, and is disposed with the effect.
|
|
5
|
+
// =============================================================================
|
|
6
|
+
import { AdditiveBlending, BufferAttribute, BufferGeometry, NormalBlending, Points, ShaderMaterial, Vector2 } from 'three';
|
|
7
|
+
import { uniformDecl } from './shaderLayers.js';
|
|
8
|
+
import { hideUntilWarm } from './warmup.js';
|
|
9
|
+
const FRAG = /* glsl */ `
|
|
10
|
+
varying vec3 vColor;
|
|
11
|
+
varying float vAlpha;
|
|
12
|
+
void main() {
|
|
13
|
+
vec2 d = gl_PointCoord - 0.5;
|
|
14
|
+
float r2 = dot(d, d) * 4.0;
|
|
15
|
+
if (r2 > 1.0) discard;
|
|
16
|
+
// soft core + halo
|
|
17
|
+
float a = exp(-r2 * 3.2) * vAlpha;
|
|
18
|
+
if (a < 0.004) discard;
|
|
19
|
+
gl_FragColor = vec4(vColor * a, a);
|
|
20
|
+
#include <tonemapping_fragment>
|
|
21
|
+
#include <colorspace_fragment>
|
|
22
|
+
}`;
|
|
23
|
+
export function createFxPoints(root, sample, o) {
|
|
24
|
+
const geo = new BufferGeometry();
|
|
25
|
+
geo.setAttribute('position', new BufferAttribute(sample.position.slice(0, sample.count * 3), 3));
|
|
26
|
+
geo.setAttribute('aP', new BufferAttribute(sample.position.slice(0, sample.count * 3), 3));
|
|
27
|
+
geo.setAttribute('aN', new BufferAttribute(sample.normal.slice(0, sample.count * 3), 3));
|
|
28
|
+
geo.setAttribute('aC', new BufferAttribute(sample.color.slice(0, sample.count * 3), 3));
|
|
29
|
+
geo.setAttribute('aR', new BufferAttribute(sample.random.slice(0, sample.count * 4), 4));
|
|
30
|
+
const viewH = { value: 1000 };
|
|
31
|
+
const uniforms = { ...o.uniforms, uFxViewH: viewH };
|
|
32
|
+
const decl = Object.keys(uniforms).map(n => uniformDecl(n, uniforms[n].value)).join('\n');
|
|
33
|
+
const mat = new ShaderMaterial({
|
|
34
|
+
uniforms: uniforms,
|
|
35
|
+
vertexShader: `${decl}
|
|
36
|
+
attribute vec3 aP; attribute vec3 aN; attribute vec3 aC; attribute vec4 aR;
|
|
37
|
+
varying vec3 vColor; varying float vAlpha;
|
|
38
|
+
${o.vertexPars}
|
|
39
|
+
void main() {
|
|
40
|
+
${o.vertexMain}
|
|
41
|
+
}`,
|
|
42
|
+
fragmentShader: FRAG,
|
|
43
|
+
transparent: true,
|
|
44
|
+
depthWrite: false,
|
|
45
|
+
// premultiplied: additive glow, or normal "over" for solid colour
|
|
46
|
+
blending: o.additive ? AdditiveBlending : NormalBlending,
|
|
47
|
+
premultipliedAlpha: true,
|
|
48
|
+
});
|
|
49
|
+
const pts = new Points(geo, mat);
|
|
50
|
+
pts.frustumCulled = false;
|
|
51
|
+
pts.raycast = () => { };
|
|
52
|
+
pts.userData.__opFxHelper = true;
|
|
53
|
+
pts.renderOrder = 10;
|
|
54
|
+
const size = new Vector2();
|
|
55
|
+
pts.onBeforeRender = (renderer) => { viewH.value = renderer.getDrawingBufferSize(size).y; };
|
|
56
|
+
root.add(pts);
|
|
57
|
+
hideUntilWarm(pts);
|
|
58
|
+
return pts;
|
|
59
|
+
}
|
|
60
|
+
export function disposeFxPoints(pts) {
|
|
61
|
+
if (!pts)
|
|
62
|
+
return;
|
|
63
|
+
pts.removeFromParent();
|
|
64
|
+
pts.geometry.dispose();
|
|
65
|
+
pts.material.dispose();
|
|
66
|
+
}
|
|
67
|
+
/** Perspective point size in pixels for a world-size `s` at view depth `z` (GLSL). */
|
|
68
|
+
export const GLSL_POINT_SIZE = /* glsl */ `
|
|
69
|
+
float fxPointPx(float s, vec4 mv) { return s * uFxViewH * projectionMatrix[1][1] * 0.5 / max(-mv.z, 1e-3); }
|
|
70
|
+
`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"glow.d.ts","sourceRoot":"","sources":["../../../src/operations/catalogue/glow.ts"],"names":[],"mappings":";AAMA,
|
|
1
|
+
{"version":3,"file":"glow.d.ts","sourceRoot":"","sources":["../../../src/operations/catalogue/glow.ts"],"names":[],"mappings":";AAMA,wBA0CG"}
|
|
@@ -6,9 +6,10 @@ export default defineOperation({
|
|
|
6
6
|
value: 'glow',
|
|
7
7
|
label: 'Glow',
|
|
8
8
|
description: 'Light the targets up with an emissive glow',
|
|
9
|
+
channel: 'visual',
|
|
9
10
|
multi: true,
|
|
10
11
|
toggles: true,
|
|
11
|
-
usableIn: ['interaction', 'action'],
|
|
12
|
+
usableIn: ['interaction', 'action', 'object'],
|
|
12
13
|
params: {
|
|
13
14
|
color: { type: 'color', label: 'Colour', default: '#3380ff' },
|
|
14
15
|
intensity: { type: 'number', label: 'Intensity', default: 3, min: 0, max: 20, step: 0.1 },
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"heatCracks.d.ts","sourceRoot":"","sources":["../../../src/operations/catalogue/heatCracks.ts"],"names":[],"mappings":";AAoFA,wBAoDG"}
|