@3driseai/3drise-core 1.0.1
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/constants/index.d.ts +22 -0
- package/dist/constants/index.d.ts.map +1 -0
- package/dist/constants/index.js +7 -0
- package/dist/data/allMaterials.d.ts +5 -0
- package/dist/data/allMaterials.d.ts.map +1 -0
- package/dist/data/allMaterials.js +932 -0
- package/dist/data/defaults.d.ts +107 -0
- package/dist/data/defaults.d.ts.map +1 -0
- package/dist/data/defaults.js +99 -0
- package/dist/data/effectsDefaults.d.ts +4 -0
- package/dist/data/effectsDefaults.d.ts.map +1 -0
- package/dist/data/effectsDefaults.js +55 -0
- package/dist/data/images.d.ts +4 -0
- package/dist/data/images.d.ts.map +1 -0
- package/dist/data/images.js +50 -0
- package/dist/data/index.d.ts +10 -0
- package/dist/data/index.d.ts.map +1 -0
- package/dist/data/index.js +9 -0
- package/dist/data/lightPresets.d.ts +99 -0
- package/dist/data/lightPresets.d.ts.map +1 -0
- package/dist/data/lightPresets.js +48 -0
- package/dist/data/particlesSettings.d.ts +13 -0
- package/dist/data/particlesSettings.d.ts.map +1 -0
- package/dist/data/particlesSettings.js +94 -0
- package/dist/data/paths.d.ts +32 -0
- package/dist/data/paths.d.ts.map +1 -0
- package/dist/data/paths.js +2597 -0
- package/dist/data/shaders.d.ts +12 -0
- package/dist/data/shaders.d.ts.map +1 -0
- package/dist/data/shaders.js +342 -0
- package/dist/data/shapeConfig.d.ts +3 -0
- package/dist/data/shapeConfig.d.ts.map +1 -0
- package/dist/data/shapeConfig.js +29 -0
- package/dist/index.d.ts +72 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +70 -0
- package/dist/presets/cloudsPresets.d.ts +32 -0
- package/dist/presets/cloudsPresets.d.ts.map +1 -0
- package/dist/presets/cloudsPresets.js +257 -0
- package/dist/presets/coronaPresets.d.ts +11 -0
- package/dist/presets/coronaPresets.d.ts.map +1 -0
- package/dist/presets/coronaPresets.js +148 -0
- package/dist/presets/crystalPresets.d.ts +38 -0
- package/dist/presets/crystalPresets.d.ts.map +1 -0
- package/dist/presets/crystalPresets.js +265 -0
- package/dist/presets/effectsPresets.d.ts +32 -0
- package/dist/presets/effectsPresets.d.ts.map +1 -0
- package/dist/presets/effectsPresets.js +438 -0
- package/dist/presets/glassPresets.d.ts +36 -0
- package/dist/presets/glassPresets.d.ts.map +1 -0
- package/dist/presets/glassPresets.js +236 -0
- package/dist/presets/index.d.ts +21 -0
- package/dist/presets/index.d.ts.map +1 -0
- package/dist/presets/index.js +52 -0
- package/dist/presets/lavaPresets.d.ts +11 -0
- package/dist/presets/lavaPresets.d.ts.map +1 -0
- package/dist/presets/lavaPresets.js +202 -0
- package/dist/presets/metalPresets.d.ts +33 -0
- package/dist/presets/metalPresets.d.ts.map +1 -0
- package/dist/presets/metalPresets.js +205 -0
- package/dist/presets/oceanPresets.d.ts +37 -0
- package/dist/presets/oceanPresets.d.ts.map +1 -0
- package/dist/presets/oceanPresets.js +120 -0
- package/dist/presets/plasticPresets.d.ts +35 -0
- package/dist/presets/plasticPresets.d.ts.map +1 -0
- package/dist/presets/plasticPresets.js +245 -0
- package/dist/presets/sandPresets.d.ts +11 -0
- package/dist/presets/sandPresets.d.ts.map +1 -0
- package/dist/presets/sandPresets.js +294 -0
- package/dist/presets/skyPresets.d.ts +27 -0
- package/dist/presets/skyPresets.d.ts.map +1 -0
- package/dist/presets/skyPresets.js +93 -0
- package/dist/presets/woodPresets.d.ts +33 -0
- package/dist/presets/woodPresets.d.ts.map +1 -0
- package/dist/presets/woodPresets.js +235 -0
- package/dist/services/AnimationsManager.d.ts +171 -0
- package/dist/services/AnimationsManager.d.ts.map +1 -0
- package/dist/services/AnimationsManager.js +508 -0
- package/dist/services/CubeCameraManager.d.ts +23 -0
- package/dist/services/CubeCameraManager.d.ts.map +1 -0
- package/dist/services/CubeCameraManager.js +84 -0
- package/dist/services/FontManager.d.ts +32 -0
- package/dist/services/FontManager.d.ts.map +1 -0
- package/dist/services/FontManager.js +76 -0
- package/dist/services/MaterialCompiler.d.ts +30 -0
- package/dist/services/MaterialCompiler.d.ts.map +1 -0
- package/dist/services/MaterialCompiler.js +91 -0
- package/dist/services/MaterialRegistry.d.ts +85 -0
- package/dist/services/MaterialRegistry.d.ts.map +1 -0
- package/dist/services/MaterialRegistry.js +362 -0
- package/dist/services/NoiseGenerator.d.ts +93 -0
- package/dist/services/NoiseGenerator.d.ts.map +1 -0
- package/dist/services/NoiseGenerator.js +653 -0
- package/dist/services/ObjectManager.d.ts +71 -0
- package/dist/services/ObjectManager.d.ts.map +1 -0
- package/dist/services/ObjectManager.js +386 -0
- package/dist/services/PositionsCreator.d.ts +26 -0
- package/dist/services/PositionsCreator.d.ts.map +1 -0
- package/dist/services/PositionsCreator.js +263 -0
- package/dist/services/SceneStore.d.ts +20 -0
- package/dist/services/SceneStore.d.ts.map +1 -0
- package/dist/services/SceneStore.js +18 -0
- package/dist/services/ShadersLibrary.d.ts +79 -0
- package/dist/services/ShadersLibrary.d.ts.map +1 -0
- package/dist/services/ShadersLibrary.js +820 -0
- package/dist/services/SkySystemManager.d.ts +57 -0
- package/dist/services/SkySystemManager.d.ts.map +1 -0
- package/dist/services/SkySystemManager.js +190 -0
- package/dist/services/TextureResolver.d.ts +51 -0
- package/dist/services/TextureResolver.d.ts.map +1 -0
- package/dist/services/TextureResolver.js +136 -0
- package/dist/services/TexturesManager.d.ts +17 -0
- package/dist/services/TexturesManager.d.ts.map +1 -0
- package/dist/services/TexturesManager.js +48 -0
- package/dist/services/UniformConverter.d.ts +33 -0
- package/dist/services/UniformConverter.d.ts.map +1 -0
- package/dist/services/UniformConverter.js +252 -0
- package/dist/services/index.d.ts +19 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/services/index.js +14 -0
- package/dist/shaders/BasicSkyMaterial.d.ts +49 -0
- package/dist/shaders/BasicSkyMaterial.d.ts.map +1 -0
- package/dist/shaders/BasicSkyMaterial.js +94 -0
- package/dist/shaders/BasicWaterMaterial.d.ts +41 -0
- package/dist/shaders/BasicWaterMaterial.d.ts.map +1 -0
- package/dist/shaders/BasicWaterMaterial.js +155 -0
- package/dist/shaders/BubblesPointsMaterial.d.ts +52 -0
- package/dist/shaders/BubblesPointsMaterial.d.ts.map +1 -0
- package/dist/shaders/BubblesPointsMaterial.js +95 -0
- package/dist/shaders/CartoonCloudsMaterial.d.ts +36 -0
- package/dist/shaders/CartoonCloudsMaterial.d.ts.map +1 -0
- package/dist/shaders/CartoonCloudsMaterial.js +59 -0
- package/dist/shaders/CartoonCloudsPointsMaterial.d.ts +65 -0
- package/dist/shaders/CartoonCloudsPointsMaterial.d.ts.map +1 -0
- package/dist/shaders/CartoonCloudsPointsMaterial.js +138 -0
- package/dist/shaders/CirrusCloudsMaterial.d.ts +36 -0
- package/dist/shaders/CirrusCloudsMaterial.d.ts.map +1 -0
- package/dist/shaders/CirrusCloudsMaterial.js +55 -0
- package/dist/shaders/CirrusCloudsPointsMaterial.d.ts +69 -0
- package/dist/shaders/CirrusCloudsPointsMaterial.d.ts.map +1 -0
- package/dist/shaders/CirrusCloudsPointsMaterial.js +140 -0
- package/dist/shaders/CloudsMaterial.d.ts +47 -0
- package/dist/shaders/CloudsMaterial.d.ts.map +1 -0
- package/dist/shaders/CloudsMaterial.js +124 -0
- package/dist/shaders/CloudsPointsMaterial.d.ts +82 -0
- package/dist/shaders/CloudsPointsMaterial.d.ts.map +1 -0
- package/dist/shaders/CloudsPointsMaterial.js +200 -0
- package/dist/shaders/CommonNoiseFunctions.d.ts +2 -0
- package/dist/shaders/CommonNoiseFunctions.d.ts.map +1 -0
- package/dist/shaders/CommonNoiseFunctions.js +41 -0
- package/dist/shaders/CoronaMaterial.d.ts +41 -0
- package/dist/shaders/CoronaMaterial.d.ts.map +1 -0
- package/dist/shaders/CoronaMaterial.js +54 -0
- package/dist/shaders/CustomShaderMaterial.d.ts +10 -0
- package/dist/shaders/CustomShaderMaterial.d.ts.map +1 -0
- package/dist/shaders/CustomShaderMaterial.js +10 -0
- package/dist/shaders/EarthAtmosphereMaterial.d.ts +28 -0
- package/dist/shaders/EarthAtmosphereMaterial.d.ts.map +1 -0
- package/dist/shaders/EarthAtmosphereMaterial.js +55 -0
- package/dist/shaders/EarthMaterial.d.ts +40 -0
- package/dist/shaders/EarthMaterial.d.ts.map +1 -0
- package/dist/shaders/EarthMaterial.js +69 -0
- package/dist/shaders/FireMaterial.d.ts +30 -0
- package/dist/shaders/FireMaterial.d.ts.map +1 -0
- package/dist/shaders/FireMaterial.js +154 -0
- package/dist/shaders/FireShellMaterial.d.ts +34 -0
- package/dist/shaders/FireShellMaterial.d.ts.map +1 -0
- package/dist/shaders/FireShellMaterial.js +137 -0
- package/dist/shaders/FlareMaterial.d.ts +79 -0
- package/dist/shaders/FlareMaterial.d.ts.map +1 -0
- package/dist/shaders/FlareMaterial.js +184 -0
- package/dist/shaders/GlowMaterial.d.ts +41 -0
- package/dist/shaders/GlowMaterial.d.ts.map +1 -0
- package/dist/shaders/GlowMaterial.js +54 -0
- package/dist/shaders/GlyphRingMaterial.d.ts +72 -0
- package/dist/shaders/GlyphRingMaterial.d.ts.map +1 -0
- package/dist/shaders/GlyphRingMaterial.js +152 -0
- package/dist/shaders/ImageMaterial.d.ts +294 -0
- package/dist/shaders/ImageMaterial.d.ts.map +1 -0
- package/dist/shaders/ImageMaterial.js +401 -0
- package/dist/shaders/LavaMaterial.d.ts +69 -0
- package/dist/shaders/LavaMaterial.d.ts.map +1 -0
- package/dist/shaders/LavaMaterial.js +127 -0
- package/dist/shaders/LineEffectsMaterials.d.ts +97 -0
- package/dist/shaders/LineEffectsMaterials.d.ts.map +1 -0
- package/dist/shaders/LineEffectsMaterials.js +242 -0
- package/dist/shaders/LineMaterial.d.ts +37 -0
- package/dist/shaders/LineMaterial.d.ts.map +1 -0
- package/dist/shaders/LineMaterial.js +64 -0
- package/dist/shaders/MeshEffectsMaterial.d.ts +278 -0
- package/dist/shaders/MeshEffectsMaterial.d.ts.map +1 -0
- package/dist/shaders/MeshEffectsMaterial.js +312 -0
- package/dist/shaders/MorphingSimulation.d.ts +17 -0
- package/dist/shaders/MorphingSimulation.d.ts.map +1 -0
- package/dist/shaders/MorphingSimulation.js +66 -0
- package/dist/shaders/MyGridMaterial.d.ts +61 -0
- package/dist/shaders/MyGridMaterial.d.ts.map +1 -0
- package/dist/shaders/MyGridMaterial.js +176 -0
- package/dist/shaders/MyParticlesMaterial.d.ts +65 -0
- package/dist/shaders/MyParticlesMaterial.d.ts.map +1 -0
- package/dist/shaders/MyParticlesMaterial.js +126 -0
- package/dist/shaders/NebulaCloudsMaterial.d.ts +44 -0
- package/dist/shaders/NebulaCloudsMaterial.d.ts.map +1 -0
- package/dist/shaders/NebulaCloudsMaterial.js +63 -0
- package/dist/shaders/NebulaPointsMaterial.d.ts +236 -0
- package/dist/shaders/NebulaPointsMaterial.d.ts.map +1 -0
- package/dist/shaders/NebulaPointsMaterial.js +265 -0
- package/dist/shaders/OceanMaterial.d.ts +57 -0
- package/dist/shaders/OceanMaterial.d.ts.map +1 -0
- package/dist/shaders/OceanMaterial.js +240 -0
- package/dist/shaders/PainterlyCloudsMaterial.d.ts +49 -0
- package/dist/shaders/PainterlyCloudsMaterial.d.ts.map +1 -0
- package/dist/shaders/PainterlyCloudsMaterial.js +68 -0
- package/dist/shaders/PainterlyCloudsPointsMaterial.d.ts +69 -0
- package/dist/shaders/PainterlyCloudsPointsMaterial.d.ts.map +1 -0
- package/dist/shaders/PainterlyCloudsPointsMaterial.js +140 -0
- package/dist/shaders/RainMaterial.d.ts +36 -0
- package/dist/shaders/RainMaterial.d.ts.map +1 -0
- package/dist/shaders/RainMaterial.js +79 -0
- package/dist/shaders/ReflectorMaterial.d.ts +62 -0
- package/dist/shaders/ReflectorMaterial.d.ts.map +1 -0
- package/dist/shaders/ReflectorMaterial.js +167 -0
- package/dist/shaders/SandMaterial.d.ts +58 -0
- package/dist/shaders/SandMaterial.d.ts.map +1 -0
- package/dist/shaders/SandMaterial.js +296 -0
- package/dist/shaders/ShaderEffectsMaterial copy.d.ts +280 -0
- package/dist/shaders/ShaderEffectsMaterial copy.d.ts.map +1 -0
- package/dist/shaders/ShaderEffectsMaterial copy.js +354 -0
- package/dist/shaders/ShaderEffectsMaterial.d.ts +5 -0
- package/dist/shaders/ShaderEffectsMaterial.d.ts.map +1 -0
- package/dist/shaders/ShaderEffectsMaterial.js +10 -0
- package/dist/shaders/ShootingStarMaterial.d.ts +9 -0
- package/dist/shaders/ShootingStarMaterial.d.ts.map +1 -0
- package/dist/shaders/ShootingStarMaterial.js +42 -0
- package/dist/shaders/SkyCloudsMaterial.d.ts +76 -0
- package/dist/shaders/SkyCloudsMaterial.d.ts.map +1 -0
- package/dist/shaders/SkyCloudsMaterial.js +212 -0
- package/dist/shaders/SkyMaterial.d.ts +130 -0
- package/dist/shaders/SkyMaterial.d.ts.map +1 -0
- package/dist/shaders/SkyMaterial.js +237 -0
- package/dist/shaders/SkyboxMaterial.d.ts +40 -0
- package/dist/shaders/SkyboxMaterial.d.ts.map +1 -0
- package/dist/shaders/SkyboxMaterial.js +64 -0
- package/dist/shaders/SmokeMaterial.d.ts +48 -0
- package/dist/shaders/SmokeMaterial.d.ts.map +1 -0
- package/dist/shaders/SmokeMaterial.js +159 -0
- package/dist/shaders/SmokeRibbonMaterial.d.ts +48 -0
- package/dist/shaders/SmokeRibbonMaterial.d.ts.map +1 -0
- package/dist/shaders/SmokeRibbonMaterial.js +120 -0
- package/dist/shaders/SparklesBurstMaterial.d.ts +65 -0
- package/dist/shaders/SparklesBurstMaterial.d.ts.map +1 -0
- package/dist/shaders/SparklesBurstMaterial.js +99 -0
- package/dist/shaders/StarsMaterial.d.ts +36 -0
- package/dist/shaders/StarsMaterial.d.ts.map +1 -0
- package/dist/shaders/StarsMaterial.js +74 -0
- package/dist/shaders/StormCloudsMaterial.d.ts +44 -0
- package/dist/shaders/StormCloudsMaterial.d.ts.map +1 -0
- package/dist/shaders/StormCloudsMaterial.js +61 -0
- package/dist/shaders/StormCloudsPointsMaterial.d.ts +303 -0
- package/dist/shaders/StormCloudsPointsMaterial.d.ts.map +1 -0
- package/dist/shaders/StormCloudsPointsMaterial.js +389 -0
- package/dist/shaders/SunCoreMaterial.d.ts +69 -0
- package/dist/shaders/SunCoreMaterial.d.ts.map +1 -0
- package/dist/shaders/SunCoreMaterial.js +127 -0
- package/dist/shaders/VolumetricCloudsMaterial.d.ts +56 -0
- package/dist/shaders/VolumetricCloudsMaterial.d.ts.map +1 -0
- package/dist/shaders/VolumetricCloudsMaterial.js +93 -0
- package/dist/shaders/VolumetricCloudsPointsMaterial.d.ts +73 -0
- package/dist/shaders/VolumetricCloudsPointsMaterial.d.ts.map +1 -0
- package/dist/shaders/VolumetricCloudsPointsMaterial.js +143 -0
- package/dist/shaders/WaterMaterial.d.ts +110 -0
- package/dist/shaders/WaterMaterial.d.ts.map +1 -0
- package/dist/shaders/WaterMaterial.js +228 -0
- package/dist/shaders/effects/EffectsFragmentFunctions.glsl.d.ts +2 -0
- package/dist/shaders/effects/EffectsFragmentFunctions.glsl.d.ts.map +1 -0
- package/dist/shaders/effects/EffectsFragmentFunctions.glsl.js +182 -0
- package/dist/shaders/effects/EffectsUniforms.d.ts +230 -0
- package/dist/shaders/effects/EffectsUniforms.d.ts.map +1 -0
- package/dist/shaders/effects/EffectsUniforms.js +66 -0
- package/dist/shaders/effects/EffectsVertexFunctions.glsl.d.ts +2 -0
- package/dist/shaders/effects/EffectsVertexFunctions.glsl.d.ts.map +1 -0
- package/dist/shaders/effects/EffectsVertexFunctions.glsl.js +167 -0
- package/dist/shaders/effects/baseFragment.glsl.d.ts +2 -0
- package/dist/shaders/effects/baseFragment.glsl.d.ts.map +1 -0
- package/dist/shaders/effects/baseFragment.glsl.js +53 -0
- package/dist/shaders/effects/baseVertex.glsl.d.ts +2 -0
- package/dist/shaders/effects/baseVertex.glsl.d.ts.map +1 -0
- package/dist/shaders/effects/baseVertex.glsl.js +60 -0
- package/dist/shaders/effects/buildShaderEffectsMaterial.d.ts +17 -0
- package/dist/shaders/effects/buildShaderEffectsMaterial.d.ts.map +1 -0
- package/dist/shaders/effects/buildShaderEffectsMaterial.js +156 -0
- package/dist/shaders/effects/defaults.d.ts +4 -0
- package/dist/shaders/effects/defaults.d.ts.map +1 -0
- package/dist/shaders/effects/defaults.js +27 -0
- package/dist/shaders/effects/index.d.ts +7 -0
- package/dist/shaders/effects/index.d.ts.map +1 -0
- package/dist/shaders/effects/index.js +6 -0
- package/dist/shaders/effects/noiseLib.glsl.d.ts +6 -0
- package/dist/shaders/effects/noiseLib.glsl.d.ts.map +1 -0
- package/dist/shaders/effects/noiseLib.glsl.js +214 -0
- package/dist/shaders/effects/presets.d.ts +20 -0
- package/dist/shaders/effects/presets.d.ts.map +1 -0
- package/dist/shaders/effects/presets.js +288 -0
- package/dist/shaders/effects/registry/brightness.d.ts +3 -0
- package/dist/shaders/effects/registry/brightness.d.ts.map +1 -0
- package/dist/shaders/effects/registry/brightness.js +16 -0
- package/dist/shaders/effects/registry/colorShift.d.ts +3 -0
- package/dist/shaders/effects/registry/colorShift.d.ts.map +1 -0
- package/dist/shaders/effects/registry/colorShift.js +21 -0
- package/dist/shaders/effects/registry/depthFade.d.ts +3 -0
- package/dist/shaders/effects/registry/depthFade.d.ts.map +1 -0
- package/dist/shaders/effects/registry/depthFade.js +29 -0
- package/dist/shaders/effects/registry/displacement.d.ts +3 -0
- package/dist/shaders/effects/registry/displacement.d.ts.map +1 -0
- package/dist/shaders/effects/registry/displacement.js +17 -0
- package/dist/shaders/effects/registry/explode.d.ts +3 -0
- package/dist/shaders/effects/registry/explode.d.ts.map +1 -0
- package/dist/shaders/effects/registry/explode.js +43 -0
- package/dist/shaders/effects/registry/flicker.d.ts +3 -0
- package/dist/shaders/effects/registry/flicker.d.ts.map +1 -0
- package/dist/shaders/effects/registry/flicker.js +27 -0
- package/dist/shaders/effects/registry/glow.d.ts +3 -0
- package/dist/shaders/effects/registry/glow.d.ts.map +1 -0
- package/dist/shaders/effects/registry/glow.js +21 -0
- package/dist/shaders/effects/registry/grayscale.d.ts +3 -0
- package/dist/shaders/effects/registry/grayscale.d.ts.map +1 -0
- package/dist/shaders/effects/registry/grayscale.js +105 -0
- package/dist/shaders/effects/registry/hueShift.d.ts +3 -0
- package/dist/shaders/effects/registry/hueShift.d.ts.map +1 -0
- package/dist/shaders/effects/registry/hueShift.js +40 -0
- package/dist/shaders/effects/registry/index.d.ts +9 -0
- package/dist/shaders/effects/registry/index.d.ts.map +1 -0
- package/dist/shaders/effects/registry/index.js +70 -0
- package/dist/shaders/effects/registry/jitter.d.ts +3 -0
- package/dist/shaders/effects/registry/jitter.d.ts.map +1 -0
- package/dist/shaders/effects/registry/jitter.js +31 -0
- package/dist/shaders/effects/registry/magnet.d.ts +3 -0
- package/dist/shaders/effects/registry/magnet.d.ts.map +1 -0
- package/dist/shaders/effects/registry/magnet.js +43 -0
- package/dist/shaders/effects/registry/noise.d.ts +3 -0
- package/dist/shaders/effects/registry/noise.d.ts.map +1 -0
- package/dist/shaders/effects/registry/noise.js +61 -0
- package/dist/shaders/effects/registry/pulse.d.ts +3 -0
- package/dist/shaders/effects/registry/pulse.d.ts.map +1 -0
- package/dist/shaders/effects/registry/pulse.js +24 -0
- package/dist/shaders/effects/registry/rainbow.d.ts +3 -0
- package/dist/shaders/effects/registry/rainbow.d.ts.map +1 -0
- package/dist/shaders/effects/registry/rainbow.js +55 -0
- package/dist/shaders/effects/registry/ripple.d.ts +3 -0
- package/dist/shaders/effects/registry/ripple.d.ts.map +1 -0
- package/dist/shaders/effects/registry/ripple.js +39 -0
- package/dist/shaders/effects/registry/saturation.d.ts +3 -0
- package/dist/shaders/effects/registry/saturation.d.ts.map +1 -0
- package/dist/shaders/effects/registry/saturation.js +19 -0
- package/dist/shaders/effects/registry/scale.d.ts +3 -0
- package/dist/shaders/effects/registry/scale.d.ts.map +1 -0
- package/dist/shaders/effects/registry/scale.js +26 -0
- package/dist/shaders/effects/registry/sparkle.d.ts +3 -0
- package/dist/shaders/effects/registry/sparkle.d.ts.map +1 -0
- package/dist/shaders/effects/registry/sparkle.js +34 -0
- package/dist/shaders/effects/registry/spiral.d.ts +3 -0
- package/dist/shaders/effects/registry/spiral.d.ts.map +1 -0
- package/dist/shaders/effects/registry/spiral.js +46 -0
- package/dist/shaders/effects/registry/twist.d.ts +3 -0
- package/dist/shaders/effects/registry/twist.d.ts.map +1 -0
- package/dist/shaders/effects/registry/twist.js +55 -0
- package/dist/shaders/effects/registry/vortex.d.ts +3 -0
- package/dist/shaders/effects/registry/vortex.d.ts.map +1 -0
- package/dist/shaders/effects/registry/vortex.js +35 -0
- package/dist/shaders/effects/registry/wave.d.ts +3 -0
- package/dist/shaders/effects/registry/wave.d.ts.map +1 -0
- package/dist/shaders/effects/registry/wave.js +44 -0
- package/dist/shaders/effects/types.d.ts +56 -0
- package/dist/shaders/effects/types.d.ts.map +1 -0
- package/dist/shaders/effects/types.js +11 -0
- package/dist/shaders/index.d.ts +51 -0
- package/dist/shaders/index.d.ts.map +1 -0
- package/dist/shaders/index.js +50 -0
- package/dist/shaders/lineShaders/GhostSignalMaterial.d.ts +41 -0
- package/dist/shaders/lineShaders/GhostSignalMaterial.d.ts.map +1 -0
- package/dist/shaders/lineShaders/GhostSignalMaterial.js +88 -0
- package/dist/shaders/lineShaders/LineShaderMaterials.d.ts +180 -0
- package/dist/shaders/lineShaders/LineShaderMaterials.d.ts.map +1 -0
- package/dist/shaders/lineShaders/LineShaderMaterials.js +551 -0
- package/dist/shaders/lineShaders/ParticleEffects.d.ts +39 -0
- package/dist/shaders/lineShaders/ParticleEffects.d.ts.map +1 -0
- package/dist/shaders/lineShaders/ParticleEffects.js +451 -0
- package/dist/shaders/lineShaders/SerpentFlowMaterial.d.ts +37 -0
- package/dist/shaders/lineShaders/SerpentFlowMaterial.d.ts.map +1 -0
- package/dist/shaders/lineShaders/SerpentFlowMaterial.js +91 -0
- package/dist/shaders/lineShaders/SolarFilamentMaterial.d.ts +37 -0
- package/dist/shaders/lineShaders/SolarFilamentMaterial.d.ts.map +1 -0
- package/dist/shaders/lineShaders/SolarFilamentMaterial.js +104 -0
- package/dist/shaders/lineShaders/TeslaArcMaterial.d.ts +37 -0
- package/dist/shaders/lineShaders/TeslaArcMaterial.d.ts.map +1 -0
- package/dist/shaders/lineShaders/TeslaArcMaterial.js +125 -0
- package/dist/shaders/lineShaders/VoidRiftMaterial.d.ts +41 -0
- package/dist/shaders/lineShaders/VoidRiftMaterial.d.ts.map +1 -0
- package/dist/shaders/lineShaders/VoidRiftMaterial.js +118 -0
- package/dist/shaders/lineShaders/index.d.ts +11 -0
- package/dist/shaders/lineShaders/index.d.ts.map +1 -0
- package/dist/shaders/lineShaders/index.js +7 -0
- package/dist/shaders/sunNoise.d.ts +2 -0
- package/dist/shaders/sunNoise.d.ts.map +1 -0
- package/dist/shaders/sunNoise.js +91 -0
- package/dist/three/AnimatedObjectV.d.ts +71 -0
- package/dist/three/AnimatedObjectV.d.ts.map +1 -0
- package/dist/three/AnimatedObjectV.js +169 -0
- package/dist/three/CloudsV.d.ts +24 -0
- package/dist/three/CloudsV.d.ts.map +1 -0
- package/dist/three/CloudsV.js +132 -0
- package/dist/three/EffectsGeneratorV.d.ts +14 -0
- package/dist/three/EffectsGeneratorV.d.ts.map +1 -0
- package/dist/three/EffectsGeneratorV.js +109 -0
- package/dist/three/EnvironmentManagerV.d.ts +35 -0
- package/dist/three/EnvironmentManagerV.d.ts.map +1 -0
- package/dist/three/EnvironmentManagerV.js +140 -0
- package/dist/three/FrameV.d.ts +24 -0
- package/dist/three/FrameV.d.ts.map +1 -0
- package/dist/three/FrameV.js +43 -0
- package/dist/three/GalaxyV.d.ts +21 -0
- package/dist/three/GalaxyV.d.ts.map +1 -0
- package/dist/three/GalaxyV.js +223 -0
- package/dist/three/GalleryLayoutV.d.ts +20 -0
- package/dist/three/GalleryLayoutV.d.ts.map +1 -0
- package/dist/three/GalleryLayoutV.js +76 -0
- package/dist/three/GridHelperV.d.ts +19 -0
- package/dist/three/GridHelperV.d.ts.map +1 -0
- package/dist/three/GridHelperV.js +28 -0
- package/dist/three/ImageGeometryV.d.ts +23 -0
- package/dist/three/ImageGeometryV.d.ts.map +1 -0
- package/dist/three/ImageGeometryV.js +83 -0
- package/dist/three/LensflareV.d.ts +19 -0
- package/dist/three/LensflareV.d.ts.map +1 -0
- package/dist/three/LensflareV.js +79 -0
- package/dist/three/LetterV.d.ts +24 -0
- package/dist/three/LetterV.d.ts.map +1 -0
- package/dist/three/LetterV.js +90 -0
- package/dist/three/LightsManagerV.d.ts +21 -0
- package/dist/three/LightsManagerV.d.ts.map +1 -0
- package/dist/three/LightsManagerV.js +85 -0
- package/dist/three/LinesV.d.ts +22 -0
- package/dist/three/LinesV.d.ts.map +1 -0
- package/dist/three/LinesV.js +43 -0
- package/dist/three/ParticlesV.d.ts +28 -0
- package/dist/three/ParticlesV.d.ts.map +1 -0
- package/dist/three/ParticlesV.js +88 -0
- package/dist/three/PathRendererV.d.ts +29 -0
- package/dist/three/PathRendererV.d.ts.map +1 -0
- package/dist/three/PathRendererV.js +225 -0
- package/dist/three/PathV.d.ts +27 -0
- package/dist/three/PathV.d.ts.map +1 -0
- package/dist/three/PathV.js +81 -0
- package/dist/three/ProjectLoaderV.d.ts +18 -0
- package/dist/three/ProjectLoaderV.d.ts.map +1 -0
- package/dist/three/ProjectLoaderV.js +49 -0
- package/dist/three/RainV.d.ts +21 -0
- package/dist/three/RainV.d.ts.map +1 -0
- package/dist/three/RainV.js +201 -0
- package/dist/three/SceneBuilderV.d.ts +26 -0
- package/dist/three/SceneBuilderV.d.ts.map +1 -0
- package/dist/three/SceneBuilderV.js +263 -0
- package/dist/three/SkyControllerV.d.ts +22 -0
- package/dist/three/SkyControllerV.d.ts.map +1 -0
- package/dist/three/SkyControllerV.js +114 -0
- package/dist/three/SkySystemV.d.ts +40 -0
- package/dist/three/SkySystemV.d.ts.map +1 -0
- package/dist/three/SkySystemV.js +103 -0
- package/dist/three/SkyboxV.d.ts +29 -0
- package/dist/three/SkyboxV.d.ts.map +1 -0
- package/dist/three/SkyboxV.js +160 -0
- package/dist/three/StarsV.d.ts +24 -0
- package/dist/three/StarsV.d.ts.map +1 -0
- package/dist/three/StarsV.js +179 -0
- package/dist/three/SunLightV.d.ts +26 -0
- package/dist/three/SunLightV.d.ts.map +1 -0
- package/dist/three/SunLightV.js +90 -0
- package/dist/three/Text2DV.d.ts +25 -0
- package/dist/three/Text2DV.d.ts.map +1 -0
- package/dist/three/Text2DV.js +66 -0
- package/dist/three/Text3DV.d.ts +22 -0
- package/dist/three/Text3DV.d.ts.map +1 -0
- package/dist/three/Text3DV.js +43 -0
- package/dist/three/effects/AuraEffectV.d.ts +15 -0
- package/dist/three/effects/AuraEffectV.d.ts.map +1 -0
- package/dist/three/effects/AuraEffectV.js +150 -0
- package/dist/three/effects/AuroraEffectV.d.ts +16 -0
- package/dist/three/effects/AuroraEffectV.d.ts.map +1 -0
- package/dist/three/effects/AuroraEffectV.js +129 -0
- package/dist/three/effects/BlackHoleEffectV.d.ts +15 -0
- package/dist/three/effects/BlackHoleEffectV.d.ts.map +1 -0
- package/dist/three/effects/BlackHoleEffectV.js +219 -0
- package/dist/three/effects/ConstellationEffectV.d.ts +17 -0
- package/dist/three/effects/ConstellationEffectV.d.ts.map +1 -0
- package/dist/three/effects/ConstellationEffectV.js +207 -0
- package/dist/three/effects/DataStreamEffectV.d.ts +15 -0
- package/dist/three/effects/DataStreamEffectV.d.ts.map +1 -0
- package/dist/three/effects/DataStreamEffectV.js +151 -0
- package/dist/three/effects/DnaHelixEffectV.d.ts +24 -0
- package/dist/three/effects/DnaHelixEffectV.d.ts.map +1 -0
- package/dist/three/effects/DnaHelixEffectV.js +343 -0
- package/dist/three/effects/FireEffectV.d.ts +17 -0
- package/dist/three/effects/FireEffectV.d.ts.map +1 -0
- package/dist/three/effects/FireEffectV.js +219 -0
- package/dist/three/effects/ForcefieldEffectV.d.ts +17 -0
- package/dist/three/effects/ForcefieldEffectV.d.ts.map +1 -0
- package/dist/three/effects/ForcefieldEffectV.js +150 -0
- package/dist/three/effects/HologramEffectV.d.ts +15 -0
- package/dist/three/effects/HologramEffectV.d.ts.map +1 -0
- package/dist/three/effects/HologramEffectV.js +154 -0
- package/dist/three/effects/IceCrystalsEffectV.d.ts +21 -0
- package/dist/three/effects/IceCrystalsEffectV.d.ts.map +1 -0
- package/dist/three/effects/IceCrystalsEffectV.js +214 -0
- package/dist/three/effects/LightningEffectV.d.ts +27 -0
- package/dist/three/effects/LightningEffectV.d.ts.map +1 -0
- package/dist/three/effects/LightningEffectV.js +255 -0
- package/dist/three/effects/MoleculesEffectV.d.ts +23 -0
- package/dist/three/effects/MoleculesEffectV.d.ts.map +1 -0
- package/dist/three/effects/MoleculesEffectV.js +204 -0
- package/dist/three/effects/NeuralNetworkEffectV.d.ts +23 -0
- package/dist/three/effects/NeuralNetworkEffectV.d.ts.map +1 -0
- package/dist/three/effects/NeuralNetworkEffectV.js +211 -0
- package/dist/three/effects/OrbEffectV.d.ts +17 -0
- package/dist/three/effects/OrbEffectV.d.ts.map +1 -0
- package/dist/three/effects/OrbEffectV.js +307 -0
- package/dist/three/effects/PortalEffectV.d.ts +15 -0
- package/dist/three/effects/PortalEffectV.d.ts.map +1 -0
- package/dist/three/effects/PortalEffectV.js +213 -0
- package/dist/three/effects/ShockwaveEffectV.d.ts +19 -0
- package/dist/three/effects/ShockwaveEffectV.d.ts.map +1 -0
- package/dist/three/effects/ShockwaveEffectV.js +195 -0
- package/dist/three/effects/SmokePlumeEffectV.d.ts +15 -0
- package/dist/three/effects/SmokePlumeEffectV.d.ts.map +1 -0
- package/dist/three/effects/SmokePlumeEffectV.js +152 -0
- package/dist/three/effects/SmokeRingEffectV.d.ts +16 -0
- package/dist/three/effects/SmokeRingEffectV.d.ts.map +1 -0
- package/dist/three/effects/SmokeRingEffectV.js +174 -0
- package/dist/three/effects/VolumetricFogEffectV.d.ts +15 -0
- package/dist/three/effects/VolumetricFogEffectV.d.ts.map +1 -0
- package/dist/three/effects/VolumetricFogEffectV.js +127 -0
- package/dist/types/actions.d.ts +30 -0
- package/dist/types/actions.d.ts.map +1 -0
- package/dist/types/actions.js +5 -0
- package/dist/types/animations.d.ts +109 -0
- package/dist/types/animations.d.ts.map +1 -0
- package/dist/types/animations.js +5 -0
- package/dist/types/common.d.ts +20 -0
- package/dist/types/common.d.ts.map +1 -0
- package/dist/types/common.js +1 -0
- package/dist/types/cursor.d.ts +142 -0
- package/dist/types/cursor.d.ts.map +1 -0
- package/dist/types/cursor.js +1 -0
- package/dist/types/effects.d.ts +100 -0
- package/dist/types/effects.d.ts.map +1 -0
- package/dist/types/effects.js +1 -0
- package/dist/types/environment.d.ts +265 -0
- package/dist/types/environment.d.ts.map +1 -0
- package/dist/types/environment.js +10 -0
- package/dist/types/gallery.d.ts +74 -0
- package/dist/types/gallery.d.ts.map +1 -0
- package/dist/types/gallery.js +1 -0
- package/dist/types/generativeEffects.d.ts +316 -0
- package/dist/types/generativeEffects.d.ts.map +1 -0
- package/dist/types/generativeEffects.js +5 -0
- package/dist/types/handlerSettings.d.ts +48 -0
- package/dist/types/handlerSettings.d.ts.map +1 -0
- package/dist/types/handlerSettings.js +1 -0
- package/dist/types/index.d.ts +24 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +1 -0
- package/dist/types/lights.d.ts +79 -0
- package/dist/types/lights.d.ts.map +1 -0
- package/dist/types/lights.js +1 -0
- package/dist/types/materials.d.ts +194 -0
- package/dist/types/materials.d.ts.map +1 -0
- package/dist/types/materials.js +1 -0
- package/dist/types/mesh.d.ts +200 -0
- package/dist/types/mesh.d.ts.map +1 -0
- package/dist/types/mesh.js +1 -0
- package/dist/types/objectSettings.d.ts +144 -0
- package/dist/types/objectSettings.d.ts.map +1 -0
- package/dist/types/objectSettings.js +25 -0
- package/dist/types/objectsConfigs.d.ts +47 -0
- package/dist/types/objectsConfigs.d.ts.map +1 -0
- package/dist/types/objectsConfigs.js +1 -0
- package/dist/types/particles.d.ts +156 -0
- package/dist/types/particles.d.ts.map +1 -0
- package/dist/types/particles.js +1 -0
- package/dist/types/postprocessing.d.ts +141 -0
- package/dist/types/postprocessing.d.ts.map +1 -0
- package/dist/types/postprocessing.js +1 -0
- package/dist/types/scene3d.d.ts +501 -0
- package/dist/types/scene3d.d.ts.map +1 -0
- package/dist/types/scene3d.js +3 -0
- package/dist/types/shaderEffects.d.ts +61 -0
- package/dist/types/shaderEffects.d.ts.map +1 -0
- package/dist/types/shaderEffects.js +1 -0
- package/dist/types/text.d.ts +74 -0
- package/dist/types/text.d.ts.map +1 -0
- package/dist/types/text.js +1 -0
- package/dist/types/types.d.ts +81 -0
- package/dist/types/types.d.ts.map +1 -0
- package/dist/types/types.js +1 -0
- package/dist/types/uiController.d.ts +42 -0
- package/dist/types/uiController.d.ts.map +1 -0
- package/dist/types/uiController.js +1 -0
- package/dist/types/users.d.ts +334 -0
- package/dist/types/users.d.ts.map +1 -0
- package/dist/types/users.js +34 -0
- package/dist/utils/GalleryCreator.d.ts +80 -0
- package/dist/utils/GalleryCreator.d.ts.map +1 -0
- package/dist/utils/GalleryCreator.js +465 -0
- package/dist/utils/GalleryLayouts.d.ts +10 -0
- package/dist/utils/GalleryLayouts.d.ts.map +1 -0
- package/dist/utils/GalleryLayouts.js +43 -0
- package/dist/utils/MaterialCompiler.d.ts +30 -0
- package/dist/utils/MaterialCompiler.d.ts.map +1 -0
- package/dist/utils/MaterialCompiler.js +91 -0
- package/dist/utils/animationsUtils.d.ts +69 -0
- package/dist/utils/animationsUtils.d.ts.map +1 -0
- package/dist/utils/animationsUtils.js +151 -0
- package/dist/utils/createdObjectHandlers.d.ts +32 -0
- package/dist/utils/createdObjectHandlers.d.ts.map +1 -0
- package/dist/utils/createdObjectHandlers.js +35 -0
- package/dist/utils/dataUtils.d.ts +36 -0
- package/dist/utils/dataUtils.d.ts.map +1 -0
- package/dist/utils/dataUtils.js +471 -0
- package/dist/utils/easingUtils.d.ts +5 -0
- package/dist/utils/easingUtils.d.ts.map +1 -0
- package/dist/utils/easingUtils.js +86 -0
- package/dist/utils/edgeUtils.d.ts +37 -0
- package/dist/utils/edgeUtils.d.ts.map +1 -0
- package/dist/utils/edgeUtils.js +128 -0
- package/dist/utils/environmentUtils.d.ts +19 -0
- package/dist/utils/environmentUtils.d.ts.map +1 -0
- package/dist/utils/environmentUtils.js +144 -0
- package/dist/utils/frameAnimations.d.ts +116 -0
- package/dist/utils/frameAnimations.d.ts.map +1 -0
- package/dist/utils/frameAnimations.js +449 -0
- package/dist/utils/galleriesUtils.d.ts +10 -0
- package/dist/utils/galleriesUtils.d.ts.map +1 -0
- package/dist/utils/galleriesUtils.js +162 -0
- package/dist/utils/getAnimatableProperties.d.ts +30 -0
- package/dist/utils/getAnimatableProperties.d.ts.map +1 -0
- package/dist/utils/getAnimatableProperties.js +170 -0
- package/dist/utils/gridUtils.d.ts +8 -0
- package/dist/utils/gridUtils.d.ts.map +1 -0
- package/dist/utils/gridUtils.js +26 -0
- package/dist/utils/handleEdgesAnimations.d.ts +20 -0
- package/dist/utils/handleEdgesAnimations.d.ts.map +1 -0
- package/dist/utils/handleEdgesAnimations.js +125 -0
- package/dist/utils/handleEdgesMouseMove.d.ts +12 -0
- package/dist/utils/handleEdgesMouseMove.d.ts.map +1 -0
- package/dist/utils/handleEdgesMouseMove.js +38 -0
- package/dist/utils/handleGenerativeEffectsAnimations.d.ts +15 -0
- package/dist/utils/handleGenerativeEffectsAnimations.d.ts.map +1 -0
- package/dist/utils/handleGenerativeEffectsAnimations.js +218 -0
- package/dist/utils/handleLightAnimations.d.ts +18 -0
- package/dist/utils/handleLightAnimations.d.ts.map +1 -0
- package/dist/utils/handleLightAnimations.js +123 -0
- package/dist/utils/handleLightMouseMove.d.ts +13 -0
- package/dist/utils/handleLightMouseMove.d.ts.map +1 -0
- package/dist/utils/handleLightMouseMove.js +51 -0
- package/dist/utils/handleMaterialEffects.d.ts +32 -0
- package/dist/utils/handleMaterialEffects.d.ts.map +1 -0
- package/dist/utils/handleMaterialEffects.js +130 -0
- package/dist/utils/handleMaterialMouseMove.d.ts +11 -0
- package/dist/utils/handleMaterialMouseMove.d.ts.map +1 -0
- package/dist/utils/handleMaterialMouseMove.js +20 -0
- package/dist/utils/handleTransformEffects.d.ts +31 -0
- package/dist/utils/handleTransformEffects.d.ts.map +1 -0
- package/dist/utils/handleTransformEffects.js +140 -0
- package/dist/utils/handleTransformMouseMove.d.ts +13 -0
- package/dist/utils/handleTransformMouseMove.d.ts.map +1 -0
- package/dist/utils/handleTransformMouseMove.js +49 -0
- package/dist/utils/idUtils.d.ts +4 -0
- package/dist/utils/idUtils.d.ts.map +1 -0
- package/dist/utils/idUtils.js +10 -0
- package/dist/utils/index.d.ts +34 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +33 -0
- package/dist/utils/loadingManager.d.ts +29 -0
- package/dist/utils/loadingManager.d.ts.map +1 -0
- package/dist/utils/loadingManager.js +103 -0
- package/dist/utils/materialApplicationUtils.d.ts +72 -0
- package/dist/utils/materialApplicationUtils.d.ts.map +1 -0
- package/dist/utils/materialApplicationUtils.js +169 -0
- package/dist/utils/materialUtils.d.ts +79 -0
- package/dist/utils/materialUtils.d.ts.map +1 -0
- package/dist/utils/materialUtils.js +267 -0
- package/dist/utils/meshUtils.d.ts +10 -0
- package/dist/utils/meshUtils.d.ts.map +1 -0
- package/dist/utils/meshUtils.js +473 -0
- package/dist/utils/mouseMoveUtils.d.ts +15 -0
- package/dist/utils/mouseMoveUtils.d.ts.map +1 -0
- package/dist/utils/mouseMoveUtils.js +52 -0
- package/dist/utils/objectTreeUtils.d.ts +39 -0
- package/dist/utils/objectTreeUtils.d.ts.map +1 -0
- package/dist/utils/objectTreeUtils.js +115 -0
- package/dist/utils/optionalProperties.d.ts +36 -0
- package/dist/utils/optionalProperties.d.ts.map +1 -0
- package/dist/utils/optionalProperties.js +487 -0
- package/dist/utils/particleAnimations.d.ts +3 -0
- package/dist/utils/particleAnimations.d.ts.map +1 -0
- package/dist/utils/particleAnimations.js +17 -0
- package/dist/utils/pathUtils.d.ts +19 -0
- package/dist/utils/pathUtils.d.ts.map +1 -0
- package/dist/utils/pathUtils.js +73 -0
- package/dist/utils/positionsCreatorUtils.d.ts +97 -0
- package/dist/utils/positionsCreatorUtils.d.ts.map +1 -0
- package/dist/utils/positionsCreatorUtils.js +644 -0
- package/dist/utils/sceneQuery.d.ts +9 -0
- package/dist/utils/sceneQuery.d.ts.map +1 -0
- package/dist/utils/sceneQuery.js +22 -0
- package/dist/utils/shootingStarHelpers.d.ts +13 -0
- package/dist/utils/shootingStarHelpers.d.ts.map +1 -0
- package/dist/utils/shootingStarHelpers.js +44 -0
- package/dist/utils/sunUtils.d.ts +6 -0
- package/dist/utils/sunUtils.d.ts.map +1 -0
- package/dist/utils/sunUtils.js +9 -0
- package/dist/utils/utils.d.ts +21 -0
- package/dist/utils/utils.d.ts.map +1 -0
- package/dist/utils/utils.js +158 -0
- package/package.json +43 -0
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { Vector3, Matrix4 } from "three";
|
|
2
|
+
import type { Texture } from 'three';
|
|
3
|
+
export interface ReflectorMaterialUniforms {
|
|
4
|
+
u_envMap: {
|
|
5
|
+
value: Texture | null;
|
|
6
|
+
};
|
|
7
|
+
u_reflectionTexture: {
|
|
8
|
+
value: Texture | null;
|
|
9
|
+
};
|
|
10
|
+
u_textureMatrix: {
|
|
11
|
+
value: Matrix4 | null;
|
|
12
|
+
};
|
|
13
|
+
u_useReflectionTexture: {
|
|
14
|
+
value: boolean;
|
|
15
|
+
};
|
|
16
|
+
u_reflectivity: {
|
|
17
|
+
value: number;
|
|
18
|
+
};
|
|
19
|
+
u_roughness: {
|
|
20
|
+
value: number;
|
|
21
|
+
};
|
|
22
|
+
u_metalness: {
|
|
23
|
+
value: number;
|
|
24
|
+
};
|
|
25
|
+
u_color: {
|
|
26
|
+
value: Vector3;
|
|
27
|
+
};
|
|
28
|
+
u_fresnelPower: {
|
|
29
|
+
value: number;
|
|
30
|
+
};
|
|
31
|
+
u_fresnelScale: {
|
|
32
|
+
value: number;
|
|
33
|
+
};
|
|
34
|
+
u_time: {
|
|
35
|
+
value: number;
|
|
36
|
+
};
|
|
37
|
+
u_mirror: {
|
|
38
|
+
value: number;
|
|
39
|
+
};
|
|
40
|
+
u_mixContrast: {
|
|
41
|
+
value: number;
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
declare const ReflectorMaterial: import("@react-three/fiber").ConstructorRepresentation<import("three").ShaderMaterial & {
|
|
45
|
+
u_envMap: any;
|
|
46
|
+
u_reflectionTexture: any;
|
|
47
|
+
u_textureMatrix: Matrix4;
|
|
48
|
+
u_useReflectionTexture: false;
|
|
49
|
+
u_reflectivity: number;
|
|
50
|
+
u_roughness: number;
|
|
51
|
+
u_metalness: number;
|
|
52
|
+
u_color: Vector3;
|
|
53
|
+
u_fresnelPower: number;
|
|
54
|
+
u_fresnelScale: number;
|
|
55
|
+
u_time: number;
|
|
56
|
+
u_mirror: number;
|
|
57
|
+
u_mixContrast: number;
|
|
58
|
+
}> & {
|
|
59
|
+
key: string;
|
|
60
|
+
};
|
|
61
|
+
export { ReflectorMaterial };
|
|
62
|
+
//# sourceMappingURL=ReflectorMaterial.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ReflectorMaterial.d.ts","sourceRoot":"","sources":["../../src/shaders/ReflectorMaterial.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AACzC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAGrC,MAAM,WAAW,yBAAyB;IACtC,QAAQ,EAAE;QACN,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC;KACzB,CAAC;IACF,mBAAmB,EAAE;QACjB,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC;KACzB,CAAC;IACF,eAAe,EAAE;QACb,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC;KACzB,CAAC;IACF,sBAAsB,EAAE;QACpB,KAAK,EAAE,OAAO,CAAC;KAClB,CAAC;IACF,cAAc,EAAE;QACZ,KAAK,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,WAAW,EAAE;QACT,KAAK,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,WAAW,EAAE;QACT,KAAK,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,OAAO,EAAE;QACL,KAAK,EAAE,OAAO,CAAC;KAClB,CAAC;IACF,cAAc,EAAE;QACZ,KAAK,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,cAAc,EAAE;QACZ,KAAK,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,MAAM,EAAE;QACJ,KAAK,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,QAAQ,EAAE;QACN,KAAK,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,aAAa,EAAE;QACX,KAAK,EAAE,MAAM,CAAC;KACjB,CAAC;CACL;AAoJD,QAAA,MAAM,iBAAiB;;;;;;;;;;;;;;;;CAcS,CAAC;AAGjC,OAAO,EAAE,iBAAiB,EAAE,CAAC"}
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
import { Vector3, Matrix4 } from "three";
|
|
2
|
+
import { extend } from "@react-three/fiber";
|
|
3
|
+
import { shaderMaterial } from "@react-three/drei";
|
|
4
|
+
// Vertex shader - calculate view and normal vectors
|
|
5
|
+
const vertexShader = /*glsl*/ `
|
|
6
|
+
uniform mat4 u_textureMatrix;
|
|
7
|
+
|
|
8
|
+
varying vec2 vUv;
|
|
9
|
+
varying vec3 vNormal;
|
|
10
|
+
varying vec3 vViewPosition;
|
|
11
|
+
varying vec3 vWorldNormal;
|
|
12
|
+
varying vec3 vWorldPosition;
|
|
13
|
+
varying vec4 vProjectedUv;
|
|
14
|
+
|
|
15
|
+
void main() {
|
|
16
|
+
vUv = uv;
|
|
17
|
+
|
|
18
|
+
// Transform normal to world space
|
|
19
|
+
vWorldNormal = normalize((modelMatrix * vec4(normal, 0.0)).xyz);
|
|
20
|
+
vNormal = normalize(normalMatrix * normal);
|
|
21
|
+
|
|
22
|
+
// Calculate world position
|
|
23
|
+
vec4 worldPosition = modelMatrix * vec4(position, 1.0);
|
|
24
|
+
vWorldPosition = worldPosition.xyz;
|
|
25
|
+
|
|
26
|
+
// Calculate view position
|
|
27
|
+
vec4 mvPosition = modelViewMatrix * vec4(position, 1.0);
|
|
28
|
+
vViewPosition = -mvPosition.xyz;
|
|
29
|
+
|
|
30
|
+
// Calculate projected UV coordinates for planar reflection
|
|
31
|
+
vProjectedUv = u_textureMatrix * vec4(position, 1.0);
|
|
32
|
+
|
|
33
|
+
gl_Position = projectionMatrix * mvPosition;
|
|
34
|
+
}
|
|
35
|
+
`;
|
|
36
|
+
// Fragment shader - calculate reflections with Fresnel effect
|
|
37
|
+
const fragmentShader = /*glsl*/ `
|
|
38
|
+
uniform samplerCube u_envMap;
|
|
39
|
+
uniform sampler2D u_reflectionTexture;
|
|
40
|
+
uniform bool u_useReflectionTexture;
|
|
41
|
+
uniform float u_reflectivity;
|
|
42
|
+
uniform float u_roughness;
|
|
43
|
+
uniform float u_metalness;
|
|
44
|
+
uniform vec3 u_color;
|
|
45
|
+
uniform float u_fresnelPower;
|
|
46
|
+
uniform float u_fresnelScale;
|
|
47
|
+
uniform float u_time;
|
|
48
|
+
uniform float u_mirror;
|
|
49
|
+
uniform float u_mixContrast;
|
|
50
|
+
|
|
51
|
+
varying vec2 vUv;
|
|
52
|
+
varying vec3 vNormal;
|
|
53
|
+
varying vec3 vViewPosition;
|
|
54
|
+
varying vec3 vWorldNormal;
|
|
55
|
+
varying vec3 vWorldPosition;
|
|
56
|
+
varying vec4 vProjectedUv;
|
|
57
|
+
|
|
58
|
+
// Simple noise function for roughness simulation
|
|
59
|
+
float hash(vec3 p) {
|
|
60
|
+
p = fract(p * 0.3183099 + 0.1);
|
|
61
|
+
p *= 17.0;
|
|
62
|
+
return fract(p.x * p.y * p.z * (p.x + p.y + p.z));
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
float noise(vec3 x) {
|
|
66
|
+
vec3 p = floor(x);
|
|
67
|
+
vec3 f = fract(x);
|
|
68
|
+
f = f * f * (3.0 - 2.0 * f);
|
|
69
|
+
|
|
70
|
+
return mix(
|
|
71
|
+
mix(mix(hash(p + vec3(0,0,0)), hash(p + vec3(1,0,0)), f.x),
|
|
72
|
+
mix(hash(p + vec3(0,1,0)), hash(p + vec3(1,1,0)), f.x), f.y),
|
|
73
|
+
mix(mix(hash(p + vec3(0,0,1)), hash(p + vec3(1,0,1)), f.x),
|
|
74
|
+
mix(hash(p + vec3(0,1,1)), hash(p + vec3(1,1,1)), f.x), f.y),
|
|
75
|
+
f.z
|
|
76
|
+
);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
void main() {
|
|
80
|
+
// Normalize vectors
|
|
81
|
+
vec3 normal = normalize(vWorldNormal);
|
|
82
|
+
vec3 viewDir = normalize(cameraPosition - vWorldPosition);
|
|
83
|
+
|
|
84
|
+
// Calculate reflection vector for environment map
|
|
85
|
+
vec3 reflectVec = reflect(-viewDir, normal);
|
|
86
|
+
|
|
87
|
+
// Add roughness perturbation
|
|
88
|
+
if (u_roughness > 0.0) {
|
|
89
|
+
float noiseScale = 5.0;
|
|
90
|
+
vec3 noiseVec = vec3(
|
|
91
|
+
noise(vWorldPosition * noiseScale + u_time * 0.1),
|
|
92
|
+
noise(vWorldPosition * noiseScale * 1.3 + u_time * 0.1),
|
|
93
|
+
noise(vWorldPosition * noiseScale * 1.7 + u_time * 0.1)
|
|
94
|
+
);
|
|
95
|
+
noiseVec = (noiseVec - 0.5) * 2.0;
|
|
96
|
+
reflectVec = normalize(reflectVec + noiseVec * u_roughness * 0.5);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
// Sample environment map
|
|
100
|
+
vec4 envColor = textureCube(u_envMap, reflectVec);
|
|
101
|
+
|
|
102
|
+
// Sample planar reflection if available
|
|
103
|
+
vec4 planarReflection = vec4(0.0);
|
|
104
|
+
if (u_useReflectionTexture) {
|
|
105
|
+
planarReflection = texture2DProj(u_reflectionTexture, vProjectedUv);
|
|
106
|
+
|
|
107
|
+
// Apply contrast adjustment
|
|
108
|
+
planarReflection.rgb = (planarReflection.rgb - 0.5) * u_mixContrast + 0.5;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
// Calculate Fresnel effect
|
|
112
|
+
float fresnel = u_fresnelScale + (1.0 - u_fresnelScale) * pow(1.0 - max(dot(viewDir, normal), 0.0), u_fresnelPower);
|
|
113
|
+
|
|
114
|
+
// Base color
|
|
115
|
+
vec3 baseColor = u_color;
|
|
116
|
+
|
|
117
|
+
// Choose reflection source based on availability
|
|
118
|
+
vec3 reflectionColor;
|
|
119
|
+
if (u_useReflectionTexture) {
|
|
120
|
+
// Blend planar reflection with environment map
|
|
121
|
+
reflectionColor = mix(envColor.rgb, planarReflection.rgb, u_mirror);
|
|
122
|
+
reflectionColor *= u_reflectivity;
|
|
123
|
+
} else {
|
|
124
|
+
// Use only environment map
|
|
125
|
+
reflectionColor = envColor.rgb * u_reflectivity;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
// Mix between base color and reflection based on metalness
|
|
129
|
+
vec3 diffuseColor = mix(baseColor, vec3(0.0), u_metalness);
|
|
130
|
+
|
|
131
|
+
// Apply Fresnel to reflections
|
|
132
|
+
reflectionColor *= fresnel;
|
|
133
|
+
|
|
134
|
+
// Combine diffuse and reflection
|
|
135
|
+
vec3 finalColor = diffuseColor + reflectionColor;
|
|
136
|
+
|
|
137
|
+
// Add some rim lighting for better definition
|
|
138
|
+
float rim = 1.0 - max(dot(viewDir, normal), 0.0);
|
|
139
|
+
rim = pow(rim, 3.0) * 0.3;
|
|
140
|
+
finalColor += vec3(rim);
|
|
141
|
+
|
|
142
|
+
// Apply subtle tone mapping
|
|
143
|
+
finalColor = finalColor / (finalColor + vec3(1.0));
|
|
144
|
+
finalColor = pow(finalColor, vec3(0.4545)); // Gamma correction
|
|
145
|
+
|
|
146
|
+
gl_FragColor = vec4(finalColor, 1.0);
|
|
147
|
+
}
|
|
148
|
+
`;
|
|
149
|
+
// Create the shader material with default uniforms
|
|
150
|
+
const ReflectorMaterial = shaderMaterial({
|
|
151
|
+
u_envMap: null,
|
|
152
|
+
u_reflectionTexture: null,
|
|
153
|
+
u_textureMatrix: new Matrix4(),
|
|
154
|
+
u_useReflectionTexture: false,
|
|
155
|
+
u_reflectivity: 1.0,
|
|
156
|
+
u_roughness: 0.1,
|
|
157
|
+
u_metalness: 0.9,
|
|
158
|
+
u_color: new Vector3(0.2, 0.2, 0.2),
|
|
159
|
+
u_fresnelPower: 2.0,
|
|
160
|
+
u_fresnelScale: 0.1,
|
|
161
|
+
u_time: 0,
|
|
162
|
+
u_mirror: 0.5,
|
|
163
|
+
u_mixContrast: 1.0
|
|
164
|
+
}, vertexShader, fragmentShader);
|
|
165
|
+
// Extend the material for use in React Three Fiber
|
|
166
|
+
extend({ ReflectorMaterial });
|
|
167
|
+
export { ReflectorMaterial };
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import * as THREE from 'three';
|
|
2
|
+
export interface SandUniforms {
|
|
3
|
+
u_time: number;
|
|
4
|
+
u_color: THREE.Color;
|
|
5
|
+
u_colorVariation: number;
|
|
6
|
+
u_scale: number;
|
|
7
|
+
u_rippleScale: number;
|
|
8
|
+
u_rippleStrength: number;
|
|
9
|
+
u_rippleAsymmetry: number;
|
|
10
|
+
u_windDir: THREE.Vector2;
|
|
11
|
+
u_grainDensity: number;
|
|
12
|
+
u_roughness: number;
|
|
13
|
+
u_sunDirection: THREE.Vector3;
|
|
14
|
+
u_sunColor: THREE.Color;
|
|
15
|
+
u_sunIntensity: number;
|
|
16
|
+
u_ambient: number;
|
|
17
|
+
u_skyColor: THREE.Color;
|
|
18
|
+
u_groundColor: THREE.Color;
|
|
19
|
+
u_windSpeed: number;
|
|
20
|
+
u_mouse: THREE.Vector3;
|
|
21
|
+
u_mouseRadius: number;
|
|
22
|
+
u_mouseStrength: number;
|
|
23
|
+
u_mouseSwirl: number;
|
|
24
|
+
}
|
|
25
|
+
export type SandMaterialImpl = THREE.ShaderMaterial & SandUniforms;
|
|
26
|
+
declare module '@react-three/fiber' {
|
|
27
|
+
interface ThreeElements {
|
|
28
|
+
sandMaterial: ThreeElements['shaderMaterial'] & Partial<SandUniforms>;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
export declare const vertexShader = "\n varying vec3 vWorldPos;\n varying vec3 vWorldNormal;\n\n void main() {\n vec4 wp = modelMatrix * vec4(position, 1.0);\n vWorldPos = wp.xyz;\n // NOTE: mat3(modelMatrix) is correct for uniform scale. If you put sand on a\n // non-uniformly scaled mesh, swap for a proper inverse-transpose normal mat.\n vWorldNormal = normalize(mat3(modelMatrix) * normal);\n gl_Position = projectionMatrix * viewMatrix * wp;\n }\n";
|
|
32
|
+
export declare const fragmentShader = "\n precision highp float;\n\n uniform float u_time;\n uniform vec3 u_color;\n uniform float u_colorVariation;\n uniform float u_scale;\n uniform float u_rippleScale;\n uniform float u_rippleStrength;\n uniform float u_rippleAsymmetry;\n uniform vec2 u_windDir;\n uniform float u_grainDensity;\n uniform float u_grainStrength;\n uniform float u_roughness;\n uniform vec3 u_sunDirection;\n uniform vec3 u_sunColor;\n uniform float u_sunIntensity;\n uniform float u_ambient;\n uniform vec3 u_skyColor;\n uniform vec3 u_groundColor;\n uniform float u_windSpeed;\n uniform vec3 u_mouse;\n uniform float u_mouseRadius;\n uniform float u_mouseStrength;\n uniform float u_mouseSwirl;\n\n varying vec3 vWorldPos;\n varying vec3 vWorldNormal;\n\n // \u2500\u2500 hashing & noise \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n float hash21(vec2 p) {\n p = fract(p * vec2(123.34, 456.21));\n p += dot(p, p + 45.32);\n return fract(p.x * p.y);\n }\n float hash13(vec3 p) {\n p = fract(p * 0.1031);\n p += dot(p, p.zyx + 31.32);\n return fract((p.x + p.y) * p.z);\n }\n float vnoise(vec2 p) {\n vec2 i = floor(p), f = fract(p);\n vec2 u = f * f * (3.0 - 2.0 * f);\n return mix(\n mix(hash21(i), hash21(i + vec2(1.0, 0.0)), u.x),\n mix(hash21(i + vec2(0.0, 1.0)), hash21(i + vec2(1.0, 1.0)), u.x),\n u.y\n );\n }\n\n const mat2 ROT = mat2(0.8, 0.6, -0.6, 0.8);\n\n float fbm(vec2 p) {\n float s = 0.0, a = 0.5;\n for (int i = 0; i < 5; i++) {\n s += a * vnoise(p);\n p = ROT * p * 2.03 + vec2(1.7);\n a *= 0.5;\n }\n return s;\n }\n\n // Triplanar fBm \u2014 projected from the 3 world planes, blended by the\n // geometric normal so it never stretches on steep faces.\n float triFbm(vec3 p) {\n vec3 w = pow(abs(vWorldNormal), vec3(4.0));\n w /= (w.x + w.y + w.z + 1e-5);\n return fbm(p.zy) * w.x + fbm(p.xz) * w.y + fbm(p.xy) * w.z;\n }\n\n // \u2500\u2500 wind ripples \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n // Crests perpendicular to wind, sinuous, with an asymmetric tent profile\n // (gentle windward, steep lee). The whole pattern MIGRATES downwind over time\n // (u_time * u_windSpeed) \u2014 windward face erodes, lee face builds \u2014 which is\n // how real ripples crawl. Returns a height in [0,1].\n float rippleField(vec2 xz, vec2 w) {\n vec2 perp = vec2(-w.y, w.x);\n float drift = u_time * u_windSpeed; // world-distance the pattern has crawled\n float along = dot(xz, w) - drift;\n float across = dot(xz, perp);\n\n float wob = (fbm(vec2(across * 0.6, along * 0.15) * u_rippleScale) - 0.5) * 1.4;\n float k = mix(0.5, 0.82, clamp(u_rippleAsymmetry, 0.0, 1.0));\n\n float ph = fract(along * u_rippleScale * 0.6 + wob);\n float crest = min(smoothstep(0.0, k, ph), 1.0 - smoothstep(k, 1.0, ph));\n crest = pow(crest, 0.8);\n\n // amplitude breathes along the crest so ripples merge & fade naturally\n float amp = 0.55 + 0.45 * fbm(vec2(across * 0.25, along * 0.05) * u_rippleScale + 7.0);\n\n // finer secondary ripple set riding on the primary\n float ph2 = fract(along * u_rippleScale * 1.7 + wob * 0.6);\n float crest2 = min(smoothstep(0.0, k, ph2), 1.0 - smoothstep(k, 1.0, ph2));\n\n return crest * amp * 0.8 + crest2 * 0.2;\n }\n\n // Smooth falloff of the cursor gust at this fragment (0 outside the radius).\n float mouseGust(vec3 wp) {\n if (u_mouseStrength <= 0.001) return 0.0;\n float d = length(wp.xz - u_mouse.xz);\n return smoothstep(u_mouseRadius, 0.0, d) * u_mouseStrength;\n }\n\n // World-space sand height. Single scalar field -> derivative bump below.\n // Ripples are gated to up-facing surfaces (they only form on wind-exposed flats).\n float sandHeight(vec3 wp, vec3 gN) {\n vec2 w = normalize(u_windDir + vec2(1e-5));\n\n // Wind-blown grit: the medium detail layer crawls gently downwind too.\n vec3 flow = vec3(w.x, 0.0, w.y) * (u_time * u_windSpeed * 0.5);\n float dunes = triFbm(wp * (0.6 * u_scale)); // coarse undulation (static)\n float micro = triFbm((wp - flow) * (3.0 * u_scale)); // medium grit (advected)\n\n float up = clamp(gN.y, 0.0, 1.0);\n up *= up;\n\n // \u2500\u2500 interactive gust: shove + swirl the ripple sampling away from the\n // cursor, and flatten the disturbed core (freshly blown sand). \u2500\u2500\n vec2 xz = wp.xz;\n float gust = mouseGust(wp);\n if (gust > 0.0) {\n vec2 d2 = wp.xz - u_mouse.xz;\n vec2 dir = d2 / (length(d2) + 1e-4);\n vec2 tang = vec2(-dir.y, dir.x);\n xz += (dir + tang * u_mouseSwirl) * gust * u_mouseRadius * 0.18;\n }\n\n float ripples = rippleField(xz, w) * up * (1.0 - 0.6 * gust);\n return dunes * 0.10 + micro * 0.025 + ripples * (0.14 * u_rippleStrength);\n }\n\n // Sch\u00FCler surface-gradient bump: perturb N from a height field using screen\n // derivatives of world position \u2014 no tangents needed, works on any mesh.\n vec3 perturbNormal(vec3 pos, vec3 N, float h, float scale) {\n vec3 dpdx = dFdx(pos);\n vec3 dpdy = dFdy(pos);\n vec3 r1 = cross(dpdy, N);\n vec3 r2 = cross(N, dpdx);\n float det = dot(dpdx, r1);\n vec3 grad = sign(det) * (dFdx(h) * r1 + dFdy(h) * r2);\n return normalize(abs(det) * N - scale * grad);\n }\n\n // Qualitative Oren-Nayar \u2014 the rough, matte, slightly retro look of powder.\n float orenNayar(vec3 L, vec3 V, vec3 N, float rough) {\n float r2 = rough * rough;\n float A = 1.0 - 0.5 * r2 / (r2 + 0.33);\n float B = 0.45 * r2 / (r2 + 0.09);\n float NdotL = clamp(dot(N, L), 1e-3, 1.0);\n float NdotV = clamp(dot(N, V), 1e-3, 1.0);\n float ga = max(0.0, dot(normalize(V - N * NdotV), normalize(L - N * NdotL)));\n float aL = acos(NdotL);\n float aV = acos(NdotV);\n float alpha = max(aL, aV);\n float beta = min(aL, aV);\n return NdotL * (A + B * ga * sin(alpha) * tan(min(beta, 1.4)));\n }\n\n // Sparse, view-dependent micro-facet glints. A small fraction of grain cells\n // catch the half-vector, so the surface twinkles as the camera moves. Built to\n // stay stable on large meshes:\n // - Cell ids are WRAPPED before hashing. Hashing world coords directly blows\n // up to the hundreds-of-thousands on a big plane, where float32 has no\n // fractional precision left and the pattern strobes. The ~11-unit tile is\n // invisible under sparse random glints.\n // - Glints are ANTI-ALIASED by their screen footprint: once a grain cell is\n // sub-pixel (far away) it can't be resolved and is faded out, instead of\n // flickering every frame.\n // - A smooth per-grain pulse keeps static frames alive without a hard re-roll.\n float sparkle(vec3 wp, vec3 N, vec3 H) {\n float density = clamp(u_grainDensity, 0.0, 4.0);\n float cellScale = 60.0 * (0.5 + density);\n\n // grain cells per pixel; >1 means the glint is sub-pixel -> fade to avoid aliasing\n vec3 fw = fwidth(wp) * cellScale;\n float footprint = max(max(fw.x, fw.y), fw.z);\n float aa = clamp(1.5 - footprint, 0.0, 1.0);\n if (aa <= 0.0) return 0.0;\n\n vec3 id = mod(floor(wp * cellScale), 1024.0); // bounded -> precision-safe\n float r1 = hash13(id);\n float r2 = hash13(id + 17.13);\n float r3 = hash13(id + 41.71);\n\n vec3 tx = normalize(cross(N, vec3(0.0, 1.0, 0.0)) + vec3(1e-4));\n vec3 ty = cross(N, tx);\n vec3 mn = normalize(N + (tx * (r1 - 0.5) + ty * (r2 - 0.5)) * 0.9);\n\n float s = pow(max(dot(mn, H), 0.0), 900.0);\n float gate = step(0.93 - 0.06 * density, r3);\n float twinkle = 0.65 + 0.35 * sin(u_time * 1.8 + r3 * 6.2831);\n\n return s * gate * twinkle * aa;\n }\n\n void main() {\n vec3 wp = vWorldPos;\n vec3 gN = normalize(vWorldNormal);\n\n float h = sandHeight(wp, gN);\n vec3 N = perturbNormal(wp, gN, h, 1.0);\n\n vec3 V = normalize(cameraPosition - wp);\n vec3 L = normalize(u_sunDirection);\n vec3 Hh = normalize(L + V);\n\n // \u2500\u2500 albedo: iron-oxide tonal variation + trough darkening \u2500\u2500\n float tone = triFbm(wp * (0.2 * u_scale) + 11.0);\n vec3 cool = u_color * vec3(0.82, 0.80, 0.74);\n vec3 warm = u_color * vec3(1.07, 0.99, 0.85);\n vec3 albedo = mix(u_color, mix(cool, warm, tone), clamp(u_colorVariation, 0.0, 1.0));\n albedo *= mix(0.86, 1.06, smoothstep(0.0, 0.16, h)); // cavity in troughs\n albedo *= 0.97 + 0.06 * triFbm(wp * (6.0 * u_scale)); // faint grit speckle\n\n // \u2500\u2500 lighting \u2500\u2500\n float NdotL = max(dot(N, L), 0.0);\n float diff = orenNayar(L, V, N, clamp(u_roughness, 0.04, 1.0));\n vec3 sun = u_sunColor * u_sunIntensity;\n vec3 color = albedo * sun * diff;\n\n float hemi = N.y * 0.5 + 0.5;\n vec3 amb = mix(u_groundColor, u_skyColor, hemi) * u_ambient;\n color += albedo * amb;\n\n // \u2500\u2500 grain sparkle (only on the lit side; freshly blown grains glint more) \u2500\u2500\n float gust = mouseGust(wp);\n float glint = sparkle(wp, N, Hh) * NdotL;\n color += glint * (1.0 + 1.5 * gust) * (u_sunColor * 0.7 + 0.3);\n\n // \u2500\u2500 lofted-sand sheen: disturbed sand catches a little extra light \u2500\u2500\n color += albedo * gust * 0.22;\n\n gl_FragColor = vec4(color, 1.0);\n }\n";
|
|
33
|
+
export declare const SandMaterial: import("@react-three/fiber").ConstructorRepresentation<THREE.ShaderMaterial & {
|
|
34
|
+
u_color: THREE.Color;
|
|
35
|
+
u_windDir: THREE.Vector2;
|
|
36
|
+
u_sunDirection: THREE.Vector3;
|
|
37
|
+
u_sunColor: THREE.Color;
|
|
38
|
+
u_skyColor: THREE.Color;
|
|
39
|
+
u_groundColor: THREE.Color;
|
|
40
|
+
u_mouse: THREE.Vector3;
|
|
41
|
+
u_time: number;
|
|
42
|
+
u_colorVariation: number;
|
|
43
|
+
u_scale: number;
|
|
44
|
+
u_rippleScale: number;
|
|
45
|
+
u_rippleStrength: number;
|
|
46
|
+
u_rippleAsymmetry: number;
|
|
47
|
+
u_grainDensity: number;
|
|
48
|
+
u_roughness: number;
|
|
49
|
+
u_sunIntensity: number;
|
|
50
|
+
u_ambient: number;
|
|
51
|
+
u_windSpeed: number;
|
|
52
|
+
u_mouseRadius: number;
|
|
53
|
+
u_mouseStrength: number;
|
|
54
|
+
u_mouseSwirl: number;
|
|
55
|
+
}> & {
|
|
56
|
+
key: string;
|
|
57
|
+
};
|
|
58
|
+
//# sourceMappingURL=SandMaterial.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SandMaterial.d.ts","sourceRoot":"","sources":["../../src/shaders/SandMaterial.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,MAAM,WAAW,YAAY;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,KAAK,CAAC,OAAO,CAAC;IAC9B,UAAU,EAAE,KAAK,CAAC,KAAK,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,KAAK,CAAC,KAAK,CAAC;IACxB,aAAa,EAAE,KAAK,CAAC,KAAK,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,MAAM,gBAAgB,GAAG,KAAK,CAAC,cAAc,GAAG,YAAY,CAAC;AAEnE,OAAO,QAAQ,oBAAoB,CAAC;IAChC,UAAU,aAAa;QACnB,YAAY,EAAE,aAAa,CAAC,gBAAgB,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;KACzE;CACJ;AAyBD,eAAO,MAAM,YAAY,2bAYxB,CAAC;AACF,eAAO,MAAM,cAAc,4rTA4O1B,CAAC;AACF,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;CAkBvB,CAAC"}
|
|
@@ -0,0 +1,296 @@
|
|
|
1
|
+
import * as THREE from 'three';
|
|
2
|
+
import { shaderMaterial } from '@react-three/drei';
|
|
3
|
+
import { extend } from '@react-three/fiber';
|
|
4
|
+
const defaults = {
|
|
5
|
+
u_time: 0,
|
|
6
|
+
u_color: new THREE.Color(0.78, 0.66, 0.46),
|
|
7
|
+
u_colorVariation: 0.5,
|
|
8
|
+
u_scale: 1.0,
|
|
9
|
+
u_rippleScale: 1.0,
|
|
10
|
+
u_rippleStrength: 1.0,
|
|
11
|
+
u_rippleAsymmetry: 0.6,
|
|
12
|
+
u_windDir: new THREE.Vector2(1, 0),
|
|
13
|
+
u_grainDensity: 1.0,
|
|
14
|
+
u_roughness: 0.88,
|
|
15
|
+
u_sunDirection: new THREE.Vector3(0.5, 0.82, 0.28),
|
|
16
|
+
u_sunColor: new THREE.Color(1.0, 0.93, 0.82),
|
|
17
|
+
u_sunIntensity: 1.0,
|
|
18
|
+
u_ambient: 1.0,
|
|
19
|
+
u_skyColor: new THREE.Color(0.55, 0.68, 0.92),
|
|
20
|
+
u_groundColor: new THREE.Color(0.45, 0.33, 0.22),
|
|
21
|
+
u_windSpeed: 0.15,
|
|
22
|
+
u_mouse: new THREE.Vector3(0, -1000, 0),
|
|
23
|
+
u_mouseRadius: 3.0,
|
|
24
|
+
u_mouseStrength: 0.0,
|
|
25
|
+
u_mouseSwirl: 0.5,
|
|
26
|
+
};
|
|
27
|
+
export const vertexShader = /*glsl*/ `
|
|
28
|
+
varying vec3 vWorldPos;
|
|
29
|
+
varying vec3 vWorldNormal;
|
|
30
|
+
|
|
31
|
+
void main() {
|
|
32
|
+
vec4 wp = modelMatrix * vec4(position, 1.0);
|
|
33
|
+
vWorldPos = wp.xyz;
|
|
34
|
+
// NOTE: mat3(modelMatrix) is correct for uniform scale. If you put sand on a
|
|
35
|
+
// non-uniformly scaled mesh, swap for a proper inverse-transpose normal mat.
|
|
36
|
+
vWorldNormal = normalize(mat3(modelMatrix) * normal);
|
|
37
|
+
gl_Position = projectionMatrix * viewMatrix * wp;
|
|
38
|
+
}
|
|
39
|
+
`;
|
|
40
|
+
export const fragmentShader = /*glsl*/ `
|
|
41
|
+
precision highp float;
|
|
42
|
+
|
|
43
|
+
uniform float u_time;
|
|
44
|
+
uniform vec3 u_color;
|
|
45
|
+
uniform float u_colorVariation;
|
|
46
|
+
uniform float u_scale;
|
|
47
|
+
uniform float u_rippleScale;
|
|
48
|
+
uniform float u_rippleStrength;
|
|
49
|
+
uniform float u_rippleAsymmetry;
|
|
50
|
+
uniform vec2 u_windDir;
|
|
51
|
+
uniform float u_grainDensity;
|
|
52
|
+
uniform float u_grainStrength;
|
|
53
|
+
uniform float u_roughness;
|
|
54
|
+
uniform vec3 u_sunDirection;
|
|
55
|
+
uniform vec3 u_sunColor;
|
|
56
|
+
uniform float u_sunIntensity;
|
|
57
|
+
uniform float u_ambient;
|
|
58
|
+
uniform vec3 u_skyColor;
|
|
59
|
+
uniform vec3 u_groundColor;
|
|
60
|
+
uniform float u_windSpeed;
|
|
61
|
+
uniform vec3 u_mouse;
|
|
62
|
+
uniform float u_mouseRadius;
|
|
63
|
+
uniform float u_mouseStrength;
|
|
64
|
+
uniform float u_mouseSwirl;
|
|
65
|
+
|
|
66
|
+
varying vec3 vWorldPos;
|
|
67
|
+
varying vec3 vWorldNormal;
|
|
68
|
+
|
|
69
|
+
// ── hashing & noise ─────────────────────────────────────────────────────
|
|
70
|
+
float hash21(vec2 p) {
|
|
71
|
+
p = fract(p * vec2(123.34, 456.21));
|
|
72
|
+
p += dot(p, p + 45.32);
|
|
73
|
+
return fract(p.x * p.y);
|
|
74
|
+
}
|
|
75
|
+
float hash13(vec3 p) {
|
|
76
|
+
p = fract(p * 0.1031);
|
|
77
|
+
p += dot(p, p.zyx + 31.32);
|
|
78
|
+
return fract((p.x + p.y) * p.z);
|
|
79
|
+
}
|
|
80
|
+
float vnoise(vec2 p) {
|
|
81
|
+
vec2 i = floor(p), f = fract(p);
|
|
82
|
+
vec2 u = f * f * (3.0 - 2.0 * f);
|
|
83
|
+
return mix(
|
|
84
|
+
mix(hash21(i), hash21(i + vec2(1.0, 0.0)), u.x),
|
|
85
|
+
mix(hash21(i + vec2(0.0, 1.0)), hash21(i + vec2(1.0, 1.0)), u.x),
|
|
86
|
+
u.y
|
|
87
|
+
);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
const mat2 ROT = mat2(0.8, 0.6, -0.6, 0.8);
|
|
91
|
+
|
|
92
|
+
float fbm(vec2 p) {
|
|
93
|
+
float s = 0.0, a = 0.5;
|
|
94
|
+
for (int i = 0; i < 5; i++) {
|
|
95
|
+
s += a * vnoise(p);
|
|
96
|
+
p = ROT * p * 2.03 + vec2(1.7);
|
|
97
|
+
a *= 0.5;
|
|
98
|
+
}
|
|
99
|
+
return s;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
// Triplanar fBm — projected from the 3 world planes, blended by the
|
|
103
|
+
// geometric normal so it never stretches on steep faces.
|
|
104
|
+
float triFbm(vec3 p) {
|
|
105
|
+
vec3 w = pow(abs(vWorldNormal), vec3(4.0));
|
|
106
|
+
w /= (w.x + w.y + w.z + 1e-5);
|
|
107
|
+
return fbm(p.zy) * w.x + fbm(p.xz) * w.y + fbm(p.xy) * w.z;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
// ── wind ripples ────────────────────────────────────────────────────────
|
|
111
|
+
// Crests perpendicular to wind, sinuous, with an asymmetric tent profile
|
|
112
|
+
// (gentle windward, steep lee). The whole pattern MIGRATES downwind over time
|
|
113
|
+
// (u_time * u_windSpeed) — windward face erodes, lee face builds — which is
|
|
114
|
+
// how real ripples crawl. Returns a height in [0,1].
|
|
115
|
+
float rippleField(vec2 xz, vec2 w) {
|
|
116
|
+
vec2 perp = vec2(-w.y, w.x);
|
|
117
|
+
float drift = u_time * u_windSpeed; // world-distance the pattern has crawled
|
|
118
|
+
float along = dot(xz, w) - drift;
|
|
119
|
+
float across = dot(xz, perp);
|
|
120
|
+
|
|
121
|
+
float wob = (fbm(vec2(across * 0.6, along * 0.15) * u_rippleScale) - 0.5) * 1.4;
|
|
122
|
+
float k = mix(0.5, 0.82, clamp(u_rippleAsymmetry, 0.0, 1.0));
|
|
123
|
+
|
|
124
|
+
float ph = fract(along * u_rippleScale * 0.6 + wob);
|
|
125
|
+
float crest = min(smoothstep(0.0, k, ph), 1.0 - smoothstep(k, 1.0, ph));
|
|
126
|
+
crest = pow(crest, 0.8);
|
|
127
|
+
|
|
128
|
+
// amplitude breathes along the crest so ripples merge & fade naturally
|
|
129
|
+
float amp = 0.55 + 0.45 * fbm(vec2(across * 0.25, along * 0.05) * u_rippleScale + 7.0);
|
|
130
|
+
|
|
131
|
+
// finer secondary ripple set riding on the primary
|
|
132
|
+
float ph2 = fract(along * u_rippleScale * 1.7 + wob * 0.6);
|
|
133
|
+
float crest2 = min(smoothstep(0.0, k, ph2), 1.0 - smoothstep(k, 1.0, ph2));
|
|
134
|
+
|
|
135
|
+
return crest * amp * 0.8 + crest2 * 0.2;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
// Smooth falloff of the cursor gust at this fragment (0 outside the radius).
|
|
139
|
+
float mouseGust(vec3 wp) {
|
|
140
|
+
if (u_mouseStrength <= 0.001) return 0.0;
|
|
141
|
+
float d = length(wp.xz - u_mouse.xz);
|
|
142
|
+
return smoothstep(u_mouseRadius, 0.0, d) * u_mouseStrength;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
// World-space sand height. Single scalar field -> derivative bump below.
|
|
146
|
+
// Ripples are gated to up-facing surfaces (they only form on wind-exposed flats).
|
|
147
|
+
float sandHeight(vec3 wp, vec3 gN) {
|
|
148
|
+
vec2 w = normalize(u_windDir + vec2(1e-5));
|
|
149
|
+
|
|
150
|
+
// Wind-blown grit: the medium detail layer crawls gently downwind too.
|
|
151
|
+
vec3 flow = vec3(w.x, 0.0, w.y) * (u_time * u_windSpeed * 0.5);
|
|
152
|
+
float dunes = triFbm(wp * (0.6 * u_scale)); // coarse undulation (static)
|
|
153
|
+
float micro = triFbm((wp - flow) * (3.0 * u_scale)); // medium grit (advected)
|
|
154
|
+
|
|
155
|
+
float up = clamp(gN.y, 0.0, 1.0);
|
|
156
|
+
up *= up;
|
|
157
|
+
|
|
158
|
+
// ── interactive gust: shove + swirl the ripple sampling away from the
|
|
159
|
+
// cursor, and flatten the disturbed core (freshly blown sand). ──
|
|
160
|
+
vec2 xz = wp.xz;
|
|
161
|
+
float gust = mouseGust(wp);
|
|
162
|
+
if (gust > 0.0) {
|
|
163
|
+
vec2 d2 = wp.xz - u_mouse.xz;
|
|
164
|
+
vec2 dir = d2 / (length(d2) + 1e-4);
|
|
165
|
+
vec2 tang = vec2(-dir.y, dir.x);
|
|
166
|
+
xz += (dir + tang * u_mouseSwirl) * gust * u_mouseRadius * 0.18;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
float ripples = rippleField(xz, w) * up * (1.0 - 0.6 * gust);
|
|
170
|
+
return dunes * 0.10 + micro * 0.025 + ripples * (0.14 * u_rippleStrength);
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
// Schüler surface-gradient bump: perturb N from a height field using screen
|
|
174
|
+
// derivatives of world position — no tangents needed, works on any mesh.
|
|
175
|
+
vec3 perturbNormal(vec3 pos, vec3 N, float h, float scale) {
|
|
176
|
+
vec3 dpdx = dFdx(pos);
|
|
177
|
+
vec3 dpdy = dFdy(pos);
|
|
178
|
+
vec3 r1 = cross(dpdy, N);
|
|
179
|
+
vec3 r2 = cross(N, dpdx);
|
|
180
|
+
float det = dot(dpdx, r1);
|
|
181
|
+
vec3 grad = sign(det) * (dFdx(h) * r1 + dFdy(h) * r2);
|
|
182
|
+
return normalize(abs(det) * N - scale * grad);
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
// Qualitative Oren-Nayar — the rough, matte, slightly retro look of powder.
|
|
186
|
+
float orenNayar(vec3 L, vec3 V, vec3 N, float rough) {
|
|
187
|
+
float r2 = rough * rough;
|
|
188
|
+
float A = 1.0 - 0.5 * r2 / (r2 + 0.33);
|
|
189
|
+
float B = 0.45 * r2 / (r2 + 0.09);
|
|
190
|
+
float NdotL = clamp(dot(N, L), 1e-3, 1.0);
|
|
191
|
+
float NdotV = clamp(dot(N, V), 1e-3, 1.0);
|
|
192
|
+
float ga = max(0.0, dot(normalize(V - N * NdotV), normalize(L - N * NdotL)));
|
|
193
|
+
float aL = acos(NdotL);
|
|
194
|
+
float aV = acos(NdotV);
|
|
195
|
+
float alpha = max(aL, aV);
|
|
196
|
+
float beta = min(aL, aV);
|
|
197
|
+
return NdotL * (A + B * ga * sin(alpha) * tan(min(beta, 1.4)));
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
// Sparse, view-dependent micro-facet glints. A small fraction of grain cells
|
|
201
|
+
// catch the half-vector, so the surface twinkles as the camera moves. Built to
|
|
202
|
+
// stay stable on large meshes:
|
|
203
|
+
// - Cell ids are WRAPPED before hashing. Hashing world coords directly blows
|
|
204
|
+
// up to the hundreds-of-thousands on a big plane, where float32 has no
|
|
205
|
+
// fractional precision left and the pattern strobes. The ~11-unit tile is
|
|
206
|
+
// invisible under sparse random glints.
|
|
207
|
+
// - Glints are ANTI-ALIASED by their screen footprint: once a grain cell is
|
|
208
|
+
// sub-pixel (far away) it can't be resolved and is faded out, instead of
|
|
209
|
+
// flickering every frame.
|
|
210
|
+
// - A smooth per-grain pulse keeps static frames alive without a hard re-roll.
|
|
211
|
+
float sparkle(vec3 wp, vec3 N, vec3 H) {
|
|
212
|
+
float density = clamp(u_grainDensity, 0.0, 4.0);
|
|
213
|
+
float cellScale = 60.0 * (0.5 + density);
|
|
214
|
+
|
|
215
|
+
// grain cells per pixel; >1 means the glint is sub-pixel -> fade to avoid aliasing
|
|
216
|
+
vec3 fw = fwidth(wp) * cellScale;
|
|
217
|
+
float footprint = max(max(fw.x, fw.y), fw.z);
|
|
218
|
+
float aa = clamp(1.5 - footprint, 0.0, 1.0);
|
|
219
|
+
if (aa <= 0.0) return 0.0;
|
|
220
|
+
|
|
221
|
+
vec3 id = mod(floor(wp * cellScale), 1024.0); // bounded -> precision-safe
|
|
222
|
+
float r1 = hash13(id);
|
|
223
|
+
float r2 = hash13(id + 17.13);
|
|
224
|
+
float r3 = hash13(id + 41.71);
|
|
225
|
+
|
|
226
|
+
vec3 tx = normalize(cross(N, vec3(0.0, 1.0, 0.0)) + vec3(1e-4));
|
|
227
|
+
vec3 ty = cross(N, tx);
|
|
228
|
+
vec3 mn = normalize(N + (tx * (r1 - 0.5) + ty * (r2 - 0.5)) * 0.9);
|
|
229
|
+
|
|
230
|
+
float s = pow(max(dot(mn, H), 0.0), 900.0);
|
|
231
|
+
float gate = step(0.93 - 0.06 * density, r3);
|
|
232
|
+
float twinkle = 0.65 + 0.35 * sin(u_time * 1.8 + r3 * 6.2831);
|
|
233
|
+
|
|
234
|
+
return s * gate * twinkle * aa;
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
void main() {
|
|
238
|
+
vec3 wp = vWorldPos;
|
|
239
|
+
vec3 gN = normalize(vWorldNormal);
|
|
240
|
+
|
|
241
|
+
float h = sandHeight(wp, gN);
|
|
242
|
+
vec3 N = perturbNormal(wp, gN, h, 1.0);
|
|
243
|
+
|
|
244
|
+
vec3 V = normalize(cameraPosition - wp);
|
|
245
|
+
vec3 L = normalize(u_sunDirection);
|
|
246
|
+
vec3 Hh = normalize(L + V);
|
|
247
|
+
|
|
248
|
+
// ── albedo: iron-oxide tonal variation + trough darkening ──
|
|
249
|
+
float tone = triFbm(wp * (0.2 * u_scale) + 11.0);
|
|
250
|
+
vec3 cool = u_color * vec3(0.82, 0.80, 0.74);
|
|
251
|
+
vec3 warm = u_color * vec3(1.07, 0.99, 0.85);
|
|
252
|
+
vec3 albedo = mix(u_color, mix(cool, warm, tone), clamp(u_colorVariation, 0.0, 1.0));
|
|
253
|
+
albedo *= mix(0.86, 1.06, smoothstep(0.0, 0.16, h)); // cavity in troughs
|
|
254
|
+
albedo *= 0.97 + 0.06 * triFbm(wp * (6.0 * u_scale)); // faint grit speckle
|
|
255
|
+
|
|
256
|
+
// ── lighting ──
|
|
257
|
+
float NdotL = max(dot(N, L), 0.0);
|
|
258
|
+
float diff = orenNayar(L, V, N, clamp(u_roughness, 0.04, 1.0));
|
|
259
|
+
vec3 sun = u_sunColor * u_sunIntensity;
|
|
260
|
+
vec3 color = albedo * sun * diff;
|
|
261
|
+
|
|
262
|
+
float hemi = N.y * 0.5 + 0.5;
|
|
263
|
+
vec3 amb = mix(u_groundColor, u_skyColor, hemi) * u_ambient;
|
|
264
|
+
color += albedo * amb;
|
|
265
|
+
|
|
266
|
+
// ── grain sparkle (only on the lit side; freshly blown grains glint more) ──
|
|
267
|
+
float gust = mouseGust(wp);
|
|
268
|
+
float glint = sparkle(wp, N, Hh) * NdotL;
|
|
269
|
+
color += glint * (1.0 + 1.5 * gust) * (u_sunColor * 0.7 + 0.3);
|
|
270
|
+
|
|
271
|
+
// ── lofted-sand sheen: disturbed sand catches a little extra light ──
|
|
272
|
+
color += albedo * gust * 0.22;
|
|
273
|
+
|
|
274
|
+
gl_FragColor = vec4(color, 1.0);
|
|
275
|
+
}
|
|
276
|
+
`;
|
|
277
|
+
export const SandMaterial = shaderMaterial({
|
|
278
|
+
...defaults,
|
|
279
|
+
u_color: defaults.u_color.clone(),
|
|
280
|
+
u_windDir: defaults.u_windDir.clone(),
|
|
281
|
+
u_sunDirection: defaults.u_sunDirection.clone(),
|
|
282
|
+
u_sunColor: defaults.u_sunColor.clone(),
|
|
283
|
+
u_skyColor: defaults.u_skyColor.clone(),
|
|
284
|
+
u_groundColor: defaults.u_groundColor.clone(),
|
|
285
|
+
u_mouse: defaults.u_mouse.clone(),
|
|
286
|
+
}, vertexShader, fragmentShader, (m) => {
|
|
287
|
+
if (!m)
|
|
288
|
+
return;
|
|
289
|
+
// Opaque, lit surface (contrast with Fire's additive glow).
|
|
290
|
+
m.transparent = false;
|
|
291
|
+
m.depthWrite = true;
|
|
292
|
+
m.side = THREE.FrontSide;
|
|
293
|
+
// Required for dFdx/dFdy in the surface-gradient bump on WebGL1/GLSL ES 1.0.
|
|
294
|
+
m.extensions = { ...(m.extensions ?? {}), derivatives: true };
|
|
295
|
+
});
|
|
296
|
+
extend({ SandMaterial });
|