@aura3d/rendering 2.0.4 → 3.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/AtmosphereWetness.d.ts +61 -0
- package/dist/AtmosphereWetness.d.ts.map +1 -0
- package/dist/AtmosphereWetness.js +99 -0
- package/dist/AtmosphereWetness.js.map +1 -0
- package/dist/CascadedShadowMaps.d.ts.map +1 -1
- package/dist/CascadedShadowMaps.js +3 -1
- package/dist/CascadedShadowMaps.js.map +1 -1
- package/dist/ClusteredForwardLighting.d.ts +25 -1
- package/dist/ClusteredForwardLighting.d.ts.map +1 -1
- package/dist/ClusteredForwardLighting.js +80 -3
- package/dist/ClusteredForwardLighting.js.map +1 -1
- package/dist/DayNightSky.d.ts +63 -0
- package/dist/DayNightSky.d.ts.map +1 -0
- package/dist/DayNightSky.js +156 -0
- package/dist/DayNightSky.js.map +1 -0
- package/dist/EnvironmentPresetPack.d.ts +30 -0
- package/dist/EnvironmentPresetPack.d.ts.map +1 -0
- package/dist/EnvironmentPresetPack.js +49 -0
- package/dist/EnvironmentPresetPack.js.map +1 -0
- package/dist/ExtensionScalarAtlas.d.ts +18 -0
- package/dist/ExtensionScalarAtlas.d.ts.map +1 -0
- package/dist/ExtensionScalarAtlas.js +107 -0
- package/dist/ExtensionScalarAtlas.js.map +1 -0
- package/dist/ForwardPass.d.ts +65 -0
- package/dist/ForwardPass.d.ts.map +1 -1
- package/dist/ForwardPass.js +196 -2
- package/dist/ForwardPass.js.map +1 -1
- package/dist/InstancedPBRMaterial.d.ts +1 -0
- package/dist/InstancedPBRMaterial.d.ts.map +1 -1
- package/dist/InstancedPBRMaterial.js +3 -0
- package/dist/InstancedPBRMaterial.js.map +1 -1
- package/dist/InstancingDiagnostics.d.ts +69 -0
- package/dist/InstancingDiagnostics.d.ts.map +1 -0
- package/dist/InstancingDiagnostics.js +98 -0
- package/dist/InstancingDiagnostics.js.map +1 -0
- package/dist/LeanWebGL2Device.d.ts +265 -0
- package/dist/LeanWebGL2Device.d.ts.map +1 -0
- package/dist/LeanWebGL2Device.js +4001 -0
- package/dist/LeanWebGL2Device.js.map +1 -0
- package/dist/LightingRig.d.ts +19 -1
- package/dist/LightingRig.d.ts.map +1 -1
- package/dist/LightingRig.js +61 -1
- package/dist/LightingRig.js.map +1 -1
- package/dist/MaterialBinding.js +1 -1
- package/dist/MaterialBinding.js.map +1 -1
- package/dist/MeshConsolidation.d.ts +12 -0
- package/dist/MeshConsolidation.d.ts.map +1 -1
- package/dist/MeshConsolidation.js +28 -0
- package/dist/MeshConsolidation.js.map +1 -1
- package/dist/MorphTargetPlan.d.ts +29 -2
- package/dist/MorphTargetPlan.d.ts.map +1 -1
- package/dist/MorphTargetPlan.js +23 -4
- package/dist/MorphTargetPlan.js.map +1 -1
- package/dist/NormalMappedPBRMaterial.d.ts.map +1 -1
- package/dist/NormalMappedPBRMaterial.js +22 -2
- package/dist/NormalMappedPBRMaterial.js.map +1 -1
- package/dist/OceanSurface.d.ts +75 -0
- package/dist/OceanSurface.d.ts.map +1 -1
- package/dist/OceanSurface.js +211 -0
- package/dist/OceanSurface.js.map +1 -1
- package/dist/PBRMaterial.d.ts +1 -0
- package/dist/PBRMaterial.d.ts.map +1 -1
- package/dist/PBRMaterial.js +23 -2
- package/dist/PBRMaterial.js.map +1 -1
- package/dist/PbrReference.d.ts +48 -0
- package/dist/PbrReference.d.ts.map +1 -1
- package/dist/PbrReference.js +126 -0
- package/dist/PbrReference.js.map +1 -1
- package/dist/PlanarReflection.d.ts +221 -0
- package/dist/PlanarReflection.d.ts.map +1 -0
- package/dist/PlanarReflection.js +541 -0
- package/dist/PlanarReflection.js.map +1 -0
- package/dist/PostProcessPass.d.ts +32 -0
- package/dist/PostProcessPass.d.ts.map +1 -1
- package/dist/PostProcessPass.js +79 -36
- package/dist/PostProcessPass.js.map +1 -1
- package/dist/ProjectionMath.d.ts +3 -0
- package/dist/ProjectionMath.d.ts.map +1 -0
- package/dist/ProjectionMath.js +26 -0
- package/dist/ProjectionMath.js.map +1 -0
- package/dist/ReflectionSurfaces.d.ts +17 -0
- package/dist/ReflectionSurfaces.d.ts.map +1 -1
- package/dist/ReflectionSurfaces.js +103 -1
- package/dist/ReflectionSurfaces.js.map +1 -1
- package/dist/RenderDevice.d.ts +92 -0
- package/dist/RenderDevice.d.ts.map +1 -1
- package/dist/RenderDevice.js +85 -0
- package/dist/RenderDevice.js.map +1 -1
- package/dist/Renderer.d.ts +9 -0
- package/dist/Renderer.d.ts.map +1 -1
- package/dist/Renderer.js +97 -9
- package/dist/Renderer.js.map +1 -1
- package/dist/RendererPostprocessPlan.d.ts +64 -3
- package/dist/RendererPostprocessPlan.d.ts.map +1 -1
- package/dist/RendererPostprocessPlan.js +116 -12
- package/dist/RendererPostprocessPlan.js.map +1 -1
- package/dist/RendererVisualPipelineReport.d.ts.map +1 -1
- package/dist/RendererVisualPipelineReport.js +3 -1
- package/dist/RendererVisualPipelineReport.js.map +1 -1
- package/dist/Sampler.d.ts +29 -0
- package/dist/Sampler.d.ts.map +1 -1
- package/dist/Sampler.js +47 -0
- package/dist/Sampler.js.map +1 -1
- package/dist/ScreenSpaceReflectionPass.d.ts +43 -0
- package/dist/ScreenSpaceReflectionPass.d.ts.map +1 -0
- package/dist/ScreenSpaceReflectionPass.js +58 -0
- package/dist/ScreenSpaceReflectionPass.js.map +1 -0
- package/dist/SdfText.d.ts +250 -0
- package/dist/SdfText.d.ts.map +1 -0
- package/dist/SdfText.js +551 -0
- package/dist/SdfText.js.map +1 -0
- package/dist/ShaderChunks.d.ts.map +1 -1
- package/dist/ShaderChunks.js +30 -12
- package/dist/ShaderChunks.js.map +1 -1
- package/dist/ShaderLibrary.d.ts.map +1 -1
- package/dist/ShaderLibrary.js +601 -186
- package/dist/ShaderLibrary.js.map +1 -1
- package/dist/ShaderLibraryCore.d.ts +3 -0
- package/dist/ShaderLibraryCore.d.ts.map +1 -1
- package/dist/ShaderLibraryCore.js +73 -12
- package/dist/ShaderLibraryCore.js.map +1 -1
- package/dist/ShadowMap.d.ts +24 -0
- package/dist/ShadowMap.d.ts.map +1 -1
- package/dist/ShadowMap.js +43 -0
- package/dist/ShadowMap.js.map +1 -1
- package/dist/SkinnedLitMaterial.d.ts.map +1 -1
- package/dist/SkinnedLitMaterial.js +2 -0
- package/dist/SkinnedLitMaterial.js.map +1 -1
- package/dist/SkinningBounds.d.ts +10 -0
- package/dist/SkinningBounds.d.ts.map +1 -1
- package/dist/SkinningBounds.js +27 -0
- package/dist/SkinningBounds.js.map +1 -1
- package/dist/SpriteFlipbook.d.ts +60 -0
- package/dist/SpriteFlipbook.d.ts.map +1 -0
- package/dist/SpriteFlipbook.js +128 -0
- package/dist/SpriteFlipbook.js.map +1 -0
- package/dist/TemporalHistory.d.ts +37 -0
- package/dist/TemporalHistory.d.ts.map +1 -0
- package/dist/TemporalHistory.js +135 -0
- package/dist/TemporalHistory.js.map +1 -0
- package/dist/TemporalMath.d.ts +3 -0
- package/dist/TemporalMath.d.ts.map +1 -0
- package/dist/TemporalMath.js +9 -0
- package/dist/TemporalMath.js.map +1 -0
- package/dist/TerrainTiles.d.ts +120 -0
- package/dist/TerrainTiles.d.ts.map +1 -0
- package/dist/TerrainTiles.js +221 -0
- package/dist/TerrainTiles.js.map +1 -0
- package/dist/TexturedPBRMaterial.d.ts +4 -0
- package/dist/TexturedPBRMaterial.d.ts.map +1 -1
- package/dist/TexturedPBRMaterial.js +88 -5
- package/dist/TexturedPBRMaterial.js.map +1 -1
- package/dist/TexturedUnlitMaterial.d.ts.map +1 -1
- package/dist/TexturedUnlitMaterial.js +20 -2
- package/dist/TexturedUnlitMaterial.js.map +1 -1
- package/dist/UnlitMaterial.d.ts.map +1 -1
- package/dist/UnlitMaterial.js +20 -2
- package/dist/UnlitMaterial.js.map +1 -1
- package/dist/VertexFormat.d.ts +6 -0
- package/dist/VertexFormat.d.ts.map +1 -1
- package/dist/VertexFormat.js +12 -0
- package/dist/VertexFormat.js.map +1 -1
- package/dist/VolumetricFog.d.ts +55 -0
- package/dist/VolumetricFog.d.ts.map +1 -0
- package/dist/VolumetricFog.js +91 -0
- package/dist/VolumetricFog.js.map +1 -0
- package/dist/WaterSurface.d.ts +77 -0
- package/dist/WaterSurface.d.ts.map +1 -0
- package/dist/WaterSurface.js +133 -0
- package/dist/WaterSurface.js.map +1 -0
- package/dist/WebGL2Device.d.ts +73 -0
- package/dist/WebGL2Device.d.ts.map +1 -1
- package/dist/WebGL2Device.js +836 -79
- package/dist/WebGL2Device.js.map +1 -1
- package/dist/WebGPUDevice.d.ts +62 -1
- package/dist/WebGPUDevice.d.ts.map +1 -1
- package/dist/WebGPUDevice.js +844 -51
- package/dist/WebGPUDevice.js.map +1 -1
- package/dist/WebGPUExtensionAtlas.d.ts +6 -0
- package/dist/WebGPUExtensionAtlas.d.ts.map +1 -0
- package/dist/WebGPUExtensionAtlas.js +225 -0
- package/dist/WebGPUExtensionAtlas.js.map +1 -0
- package/dist/WebGPUSkinningLimits.d.ts +40 -0
- package/dist/WebGPUSkinningLimits.d.ts.map +1 -1
- package/dist/WebGPUSkinningLimits.js +32 -0
- package/dist/WebGPUSkinningLimits.js.map +1 -1
- package/dist/effects/CollisionModule.d.ts +9 -0
- package/dist/effects/CollisionModule.d.ts.map +1 -1
- package/dist/effects/CollisionModule.js +10 -0
- package/dist/effects/CollisionModule.js.map +1 -1
- package/dist/effects/ColorModule.d.ts +7 -0
- package/dist/effects/ColorModule.d.ts.map +1 -1
- package/dist/effects/ColorModule.js +23 -0
- package/dist/effects/ColorModule.js.map +1 -1
- package/dist/effects/ForceModule.d.ts +35 -0
- package/dist/effects/ForceModule.d.ts.map +1 -1
- package/dist/effects/ForceModule.js +49 -0
- package/dist/effects/ForceModule.js.map +1 -1
- package/dist/effects/GPUParticleBackend.d.ts +188 -0
- package/dist/effects/GPUParticleBackend.d.ts.map +1 -1
- package/dist/effects/GPUParticleBackend.js +710 -1
- package/dist/effects/GPUParticleBackend.js.map +1 -1
- package/dist/effects/HeightfieldModule.d.ts +58 -0
- package/dist/effects/HeightfieldModule.d.ts.map +1 -0
- package/dist/effects/HeightfieldModule.js +129 -0
- package/dist/effects/HeightfieldModule.js.map +1 -0
- package/dist/effects/LightingModule.d.ts +34 -0
- package/dist/effects/LightingModule.d.ts.map +1 -0
- package/dist/effects/LightingModule.js +54 -0
- package/dist/effects/LightingModule.js.map +1 -0
- package/dist/effects/ParticleDiagnostics.d.ts +8 -0
- package/dist/effects/ParticleDiagnostics.d.ts.map +1 -1
- package/dist/effects/ParticleDiagnostics.js +3 -0
- package/dist/effects/ParticleDiagnostics.js.map +1 -1
- package/dist/effects/ParticleModule.d.ts +8 -0
- package/dist/effects/ParticleModule.d.ts.map +1 -1
- package/dist/effects/ParticleModule.js.map +1 -1
- package/dist/effects/ParticleRenderer.d.ts +20 -0
- package/dist/effects/ParticleRenderer.d.ts.map +1 -1
- package/dist/effects/ParticleRenderer.js +57 -7
- package/dist/effects/ParticleRenderer.js.map +1 -1
- package/dist/effects/ParticleSystem.d.ts +45 -1
- package/dist/effects/ParticleSystem.d.ts.map +1 -1
- package/dist/effects/ParticleSystem.js +373 -4
- package/dist/effects/ParticleSystem.js.map +1 -1
- package/dist/effects/ResidentGPUParticleRenderer.d.ts +158 -0
- package/dist/effects/ResidentGPUParticleRenderer.d.ts.map +1 -0
- package/dist/effects/ResidentGPUParticleRenderer.js +576 -0
- package/dist/effects/ResidentGPUParticleRenderer.js.map +1 -0
- package/dist/effects/SizeModule.d.ts +4 -0
- package/dist/effects/SizeModule.d.ts.map +1 -1
- package/dist/effects/SizeModule.js +16 -0
- package/dist/effects/SizeModule.js.map +1 -1
- package/dist/effects/SubEmitterModule.d.ts +61 -0
- package/dist/effects/SubEmitterModule.d.ts.map +1 -0
- package/dist/effects/SubEmitterModule.js +119 -0
- package/dist/effects/SubEmitterModule.js.map +1 -0
- package/dist/effects/TrailModule.d.ts +38 -0
- package/dist/effects/TrailModule.d.ts.map +1 -1
- package/dist/effects/TrailModule.js +95 -2
- package/dist/effects/TrailModule.js.map +1 -1
- package/dist/effects/TurbulenceModule.d.ts +43 -0
- package/dist/effects/TurbulenceModule.d.ts.map +1 -0
- package/dist/effects/TurbulenceModule.js +130 -0
- package/dist/effects/TurbulenceModule.js.map +1 -0
- package/dist/effects/index.d.ts +4 -0
- package/dist/effects/index.d.ts.map +1 -1
- package/dist/effects/index.js +4 -0
- package/dist/effects/index.js.map +1 -1
- package/dist/extension-scalar-atlas.d.ts +3 -0
- package/dist/extension-scalar-atlas.d.ts.map +1 -0
- package/dist/extension-scalar-atlas.js +2 -0
- package/dist/extension-scalar-atlas.js.map +1 -0
- package/dist/index.d.ts +58 -19
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +32 -10
- package/dist/index.js.map +1 -1
- package/dist/lean/LeanProductionRenderer.d.ts.map +1 -1
- package/dist/lean/LeanProductionRenderer.js +2 -2
- package/dist/lean/LeanProductionRenderer.js.map +1 -1
- package/dist/lean-core-runtime.d.ts +13 -0
- package/dist/lean-core-runtime.d.ts.map +1 -0
- package/dist/lean-core-runtime.js +10 -0
- package/dist/lean-core-runtime.js.map +1 -0
- package/dist/materials/MaterialExtensions.js +3 -3
- package/dist/materials/MaterialExtensions.js.map +1 -1
- package/dist/postprocess/NativeBloomPyramid.d.ts +44 -0
- package/dist/postprocess/NativeBloomPyramid.d.ts.map +1 -0
- package/dist/postprocess/NativeBloomPyramid.js +84 -0
- package/dist/postprocess/NativeBloomPyramid.js.map +1 -0
- package/dist/postprocess/NativeLdrEffectLuts.d.ts +10 -1
- package/dist/postprocess/NativeLdrEffectLuts.d.ts.map +1 -1
- package/dist/postprocess/NativeLdrEffectLuts.js +19 -2
- package/dist/postprocess/NativeLdrEffectLuts.js.map +1 -1
- package/dist/postprocess/index.d.ts +2 -0
- package/dist/postprocess/index.d.ts.map +1 -1
- package/dist/postprocess/index.js +1 -0
- package/dist/postprocess/index.js.map +1 -1
- package/dist/production-runtime/PBRHDRPipeline.d.ts +22 -0
- package/dist/production-runtime/PBRHDRPipeline.d.ts.map +1 -1
- package/dist/production-runtime/PBRHDRPipeline.js +125 -0
- package/dist/production-runtime/PBRHDRPipeline.js.map +1 -1
- package/dist/production-runtime/ProductionRendererTypes.d.ts +1 -0
- package/dist/production-runtime/ProductionRendererTypes.d.ts.map +1 -1
- package/dist/production-runtime/ProductionRendererTypes.js.map +1 -1
- package/dist/production-runtime/ProductionRuntimeRenderer.d.ts +3 -0
- package/dist/production-runtime/ProductionRuntimeRenderer.d.ts.map +1 -1
- package/dist/production-runtime/ProductionRuntimeRenderer.js +8 -1
- package/dist/production-runtime/ProductionRuntimeRenderer.js.map +1 -1
- package/dist/production-runtime/ProductionWebGL2Renderer.d.ts +4 -0
- package/dist/production-runtime/ProductionWebGL2Renderer.d.ts.map +1 -1
- package/dist/production-runtime/ProductionWebGL2Renderer.js +15 -0
- package/dist/production-runtime/ProductionWebGL2Renderer.js.map +1 -1
- package/dist/production-runtime/ProductionWebGPURenderer.d.ts +58 -0
- package/dist/production-runtime/ProductionWebGPURenderer.d.ts.map +1 -1
- package/dist/production-runtime/ProductionWebGPURenderer.js +127 -0
- package/dist/production-runtime/ProductionWebGPURenderer.js.map +1 -1
- package/dist/production-runtime/framegraph/FrameGraph.d.ts +4 -2
- package/dist/production-runtime/framegraph/FrameGraph.d.ts.map +1 -1
- package/dist/production-runtime/framegraph/FrameGraph.js +62 -4
- package/dist/production-runtime/framegraph/FrameGraph.js.map +1 -1
- package/dist/production-runtime/framegraph/NativeFrameGraphBindings.d.ts +32 -0
- package/dist/production-runtime/framegraph/NativeFrameGraphBindings.d.ts.map +1 -0
- package/dist/production-runtime/framegraph/NativeFrameGraphBindings.js +111 -0
- package/dist/production-runtime/framegraph/NativeFrameGraphBindings.js.map +1 -0
- package/dist/production-runtime/framegraph/RenderPass.d.ts +23 -0
- package/dist/production-runtime/framegraph/RenderPass.d.ts.map +1 -1
- package/dist/production-runtime/framegraph/RenderPass.js +87 -1
- package/dist/production-runtime/framegraph/RenderPass.js.map +1 -1
- package/dist/production-runtime/index.d.ts +7 -4
- package/dist/production-runtime/index.d.ts.map +1 -1
- package/dist/production-runtime/index.js +4 -2
- package/dist/production-runtime/index.js.map +1 -1
- package/dist/production-runtime/passes/DepthPrepass.d.ts +18 -1
- package/dist/production-runtime/passes/DepthPrepass.d.ts.map +1 -1
- package/dist/production-runtime/passes/DepthPrepass.js +41 -2
- package/dist/production-runtime/passes/DepthPrepass.js.map +1 -1
- package/dist/production-runtime/passes/FramegraphTopology.d.ts +13 -0
- package/dist/production-runtime/passes/FramegraphTopology.d.ts.map +1 -0
- package/dist/production-runtime/passes/FramegraphTopology.js +59 -0
- package/dist/production-runtime/passes/FramegraphTopology.js.map +1 -0
- package/dist/production-runtime/passes/OpaquePass.d.ts +19 -1
- package/dist/production-runtime/passes/OpaquePass.d.ts.map +1 -1
- package/dist/production-runtime/passes/OpaquePass.js +43 -2
- package/dist/production-runtime/passes/OpaquePass.js.map +1 -1
- package/dist/production-runtime/passes/ShadowPass.d.ts +19 -1
- package/dist/production-runtime/passes/ShadowPass.d.ts.map +1 -1
- package/dist/production-runtime/passes/ShadowPass.js +45 -2
- package/dist/production-runtime/passes/ShadowPass.js.map +1 -1
- package/dist/production-runtime/passes/SkyboxPass.d.ts +17 -1
- package/dist/production-runtime/passes/SkyboxPass.d.ts.map +1 -1
- package/dist/production-runtime/passes/SkyboxPass.js +41 -2
- package/dist/production-runtime/passes/SkyboxPass.js.map +1 -1
- package/dist/production-runtime/passes/ToneMappingPass.d.ts +26 -1
- package/dist/production-runtime/passes/ToneMappingPass.d.ts.map +1 -1
- package/dist/production-runtime/passes/ToneMappingPass.js +62 -2
- package/dist/production-runtime/passes/ToneMappingPass.js.map +1 -1
- package/dist/production-runtime/passes/TransparentPass.d.ts +19 -1
- package/dist/production-runtime/passes/TransparentPass.d.ts.map +1 -1
- package/dist/production-runtime/passes/TransparentPass.js +47 -2
- package/dist/production-runtime/passes/TransparentPass.js.map +1 -1
- package/dist/reflection-surfaces.d.ts +5 -0
- package/dist/reflection-surfaces.d.ts.map +1 -0
- package/dist/reflection-surfaces.js +3 -0
- package/dist/reflection-surfaces.js.map +1 -0
- package/dist/shadows/CascadeHysteresis.d.ts +67 -0
- package/dist/shadows/CascadeHysteresis.d.ts.map +1 -0
- package/dist/shadows/CascadeHysteresis.js +104 -0
- package/dist/shadows/CascadeHysteresis.js.map +1 -0
- package/dist/shadows/ContactShadows.d.ts +52 -0
- package/dist/shadows/ContactShadows.d.ts.map +1 -1
- package/dist/shadows/ContactShadows.js +122 -0
- package/dist/shadows/ContactShadows.js.map +1 -1
- package/dist/shadows/SpotShadowMaps.d.ts +77 -0
- package/dist/shadows/SpotShadowMaps.d.ts.map +1 -0
- package/dist/shadows/SpotShadowMaps.js +106 -0
- package/dist/shadows/SpotShadowMaps.js.map +1 -0
- package/dist/webgpu/WebGPUPostProcess.d.ts +2 -0
- package/dist/webgpu/WebGPUPostProcess.d.ts.map +1 -1
- package/dist/webgpu/WebGPUPostProcess.js +1 -0
- package/dist/webgpu/WebGPUPostProcess.js.map +1 -1
- package/dist/webgpu/WebGPUPostShaders.d.ts +77 -0
- package/dist/webgpu/WebGPUPostShaders.d.ts.map +1 -0
- package/dist/webgpu/WebGPUPostShaders.js +261 -0
- package/dist/webgpu/WebGPUPostShaders.js.map +1 -0
- package/dist/webgpu/WebGPUTemporal.d.ts +17 -0
- package/dist/webgpu/WebGPUTemporal.d.ts.map +1 -0
- package/dist/webgpu/WebGPUTemporal.js +64 -0
- package/dist/webgpu/WebGPUTemporal.js.map +1 -0
- package/dist/webgpu.d.ts +6 -0
- package/dist/webgpu.d.ts.map +1 -1
- package/dist/webgpu.js +4 -0
- package/dist/webgpu.js.map +1 -1
- package/package.json +15 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SizeModule.d.ts","sourceRoot":"","sources":["../../../../../packages/rendering/src/effects/SizeModule.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,KAAK,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAEjF,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAmBD,wBAAgB,eAAe,CAAC,SAAS,EAAE,SAAS,YAAY,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAgBxF;AAED,qBAAa,UAAW,YAAW,cAAc;IAC/C,QAAQ,CAAC,IAAI,gBAAgB;IAC7B,QAAQ,CAAC,KAAK,EAAE,SAAS,YAAY,EAAE,CAAC;gBAE5B,KAAK,EAAE,SAAS,YAAY,EAAE;IAK1C,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,qBAAqB,GAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"SizeModule.d.ts","sourceRoot":"","sources":["../../../../../packages/rendering/src/effects/SizeModule.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,KAAK,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAEjF,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAmBD,wBAAgB,eAAe,CAAC,SAAS,EAAE,SAAS,YAAY,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAgBxF;AAED,gFAAgF;AAChF,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,SAAS,YAAY,EAAE,EAAE,KAAK,SAAK,GAAG,YAAY,CAU/F;AAED,qBAAa,UAAW,YAAW,cAAc;IAC/C,QAAQ,CAAC,IAAI,gBAAgB;IAC7B,QAAQ,CAAC,WAAW,QAAQ;IAC5B,QAAQ,CAAC,KAAK,EAAE,SAAS,YAAY,EAAE,CAAC;gBAE5B,KAAK,EAAE,SAAS,YAAY,EAAE;IAK1C,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,qBAAqB,GAAG,IAAI;IAIhE,cAAc,CAAC,KAAK,SAAK,GAAG,YAAY;CAGzC"}
|
|
@@ -28,8 +28,21 @@ export function sampleSizeCurve(keyframes, time) {
|
|
|
28
28
|
}
|
|
29
29
|
return keyframes[keyframes.length - 1].size;
|
|
30
30
|
}
|
|
31
|
+
/** Pack a size-over-life curve into a fixed-stop LUT for the compute kernel. */
|
|
32
|
+
export function encodeSizeCurveLUT(keyframes, stops = 16) {
|
|
33
|
+
validateCurve(keyframes);
|
|
34
|
+
if (!Number.isInteger(stops) || stops < 2 || stops > 64) {
|
|
35
|
+
throw new RangeError("Size curve LUT stops must be an integer in [2, 64].");
|
|
36
|
+
}
|
|
37
|
+
const lut = new Float32Array(stops);
|
|
38
|
+
for (let index = 0; index < stops; index += 1) {
|
|
39
|
+
lut[index] = sampleSizeCurve(keyframes, stops === 1 ? 0 : index / (stops - 1));
|
|
40
|
+
}
|
|
41
|
+
return lut;
|
|
42
|
+
}
|
|
31
43
|
export class SizeModule {
|
|
32
44
|
name = "SizeModule";
|
|
45
|
+
supportsGPU = true;
|
|
33
46
|
curve;
|
|
34
47
|
constructor(curve) {
|
|
35
48
|
this.curve = curve;
|
|
@@ -38,5 +51,8 @@ export class SizeModule {
|
|
|
38
51
|
update(particle, context) {
|
|
39
52
|
particle.size = sampleSizeCurve(this.curve, context.normalizedAge);
|
|
40
53
|
}
|
|
54
|
+
toGPUSizeCurve(stops = 16) {
|
|
55
|
+
return encodeSizeCurveLUT(this.curve, stops);
|
|
56
|
+
}
|
|
41
57
|
}
|
|
42
58
|
//# sourceMappingURL=SizeModule.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SizeModule.js","sourceRoot":"","sources":["../../../../../packages/rendering/src/effects/SizeModule.ts"],"names":[],"mappings":"AAQA,SAAS,aAAa,CAAC,SAAkC;IACvD,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,UAAU,CAAC,iDAAiD,CAAC,CAAC;IAC1E,CAAC;IAED,IAAI,QAAQ,GAAG,CAAC,MAAM,CAAC,iBAAiB,CAAC;IACzC,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,IAAI,QAAQ,CAAC,IAAI,GAAG,CAAC,IAAI,QAAQ,CAAC,IAAI,GAAG,CAAC,IAAI,QAAQ,CAAC,IAAI,GAAG,QAAQ,EAAE,CAAC;YACvE,MAAM,IAAI,UAAU,CAAC,0EAA0E,CAAC,CAAC;QACnG,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YACzD,MAAM,IAAI,UAAU,CAAC,gEAAgE,CAAC,CAAC;QACzF,CAAC;QACD,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC;IAC3B,CAAC;AACH,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,SAAkC,EAAE,IAAY;IAC9E,IAAI,IAAI,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC9B,OAAO,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC3B,CAAC;IAED,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,SAAS,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACzD,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;QAC9B,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACtB,MAAM,QAAQ,GAAG,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;YACtC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,IAAI,CAAC,CAAC;YAC5C,MAAM,KAAK,GAAG,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;YAC5C,OAAO,QAAQ,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;QAC7D,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;AAC9C,CAAC;AAED,MAAM,OAAO,UAAU;IACZ,IAAI,GAAG,YAAY,CAAC;IACpB,KAAK,CAA0B;IAExC,YAAY,KAA8B;QACxC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,aAAa,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IAED,MAAM,CAAC,QAAkB,EAAE,OAA8B;QACvD,QAAQ,CAAC,IAAI,GAAG,eAAe,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IACrE,CAAC;CACF"}
|
|
1
|
+
{"version":3,"file":"SizeModule.js","sourceRoot":"","sources":["../../../../../packages/rendering/src/effects/SizeModule.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { type Particle, type Vector3Like } from "./Particle.js";
|
|
2
|
+
import { ParticleEmitter } from "./ParticleEmitter.js";
|
|
3
|
+
import type { ParticleModule, ParticleUpdateContext } from "./ParticleModule.js";
|
|
4
|
+
export type SubEmitterTrigger = "death" | "midlife";
|
|
5
|
+
export interface SubEmitterModuleOptions {
|
|
6
|
+
readonly trigger: SubEmitterTrigger;
|
|
7
|
+
/** Probability per trigger event in [0, 1]. Defaults to 1. */
|
|
8
|
+
readonly chance?: number;
|
|
9
|
+
/** Emitter that spawns child particles. */
|
|
10
|
+
readonly childEmitter: ParticleEmitter;
|
|
11
|
+
/** Fraction of the parent velocity inherited by children. Defaults to 0.3. */
|
|
12
|
+
readonly velocityInherit?: number;
|
|
13
|
+
/** Children spawned per trigger event. Defaults to 1. */
|
|
14
|
+
readonly childrenPerEvent?: number;
|
|
15
|
+
}
|
|
16
|
+
export interface SubEmitterSpawnRequest {
|
|
17
|
+
readonly position: Vector3Like;
|
|
18
|
+
readonly velocity: Vector3Like;
|
|
19
|
+
readonly count: number;
|
|
20
|
+
}
|
|
21
|
+
export interface GPUSubEmitterParams {
|
|
22
|
+
/** Normalized age that fires the emitter: 0.5 for midlife, 1 for death. */
|
|
23
|
+
readonly triggerAge: number;
|
|
24
|
+
readonly chance: number;
|
|
25
|
+
readonly childCount: number;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Sub-emitters: particles spawn child particles at midlife or death
|
|
29
|
+
* (explosion sparks, splash droplets, ember bursts).
|
|
30
|
+
*
|
|
31
|
+
* CPU path: afterIntegrate queues spawn requests; the ParticleSystem drains
|
|
32
|
+
* them after integration. GPU path: the compute kernel evaluates the same
|
|
33
|
+
* trigger (normalized-age crossing + hash(chance)) and writes per-particle
|
|
34
|
+
* spawn requests that the system drains through the GPU spawn pipeline.
|
|
35
|
+
*/
|
|
36
|
+
export declare class SubEmitterModule implements ParticleModule {
|
|
37
|
+
readonly name = "SubEmitterModule";
|
|
38
|
+
readonly supportsGPU = true;
|
|
39
|
+
readonly trigger: SubEmitterTrigger;
|
|
40
|
+
readonly chance: number;
|
|
41
|
+
readonly childEmitter: ParticleEmitter;
|
|
42
|
+
readonly velocityInherit: number;
|
|
43
|
+
readonly childrenPerEvent: number;
|
|
44
|
+
readonly pendingSpawns: SubEmitterSpawnRequest[];
|
|
45
|
+
constructor(options: SubEmitterModuleOptions);
|
|
46
|
+
afterIntegrate(particle: Particle, context: ParticleUpdateContext): void;
|
|
47
|
+
/** Create child particles for queued requests, bounded by capacity. Returns { children, dropped }. */
|
|
48
|
+
drainPendingSpawns(capacity: number): {
|
|
49
|
+
children: Particle[];
|
|
50
|
+
dropped: number;
|
|
51
|
+
};
|
|
52
|
+
/** Create child particles for GPU spawn-request flags (parallel to drainPendingSpawns). */
|
|
53
|
+
createChildren(requests: readonly SubEmitterSpawnRequest[], capacity: number): {
|
|
54
|
+
children: Particle[];
|
|
55
|
+
dropped: number;
|
|
56
|
+
};
|
|
57
|
+
clearPendingSpawns(): void;
|
|
58
|
+
toGPUSubEmitter(): GPUSubEmitterParams;
|
|
59
|
+
private createChild;
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=SubEmitterModule.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SubEmitterModule.d.ts","sourceRoot":"","sources":["../../../../../packages/rendering/src/effects/SubEmitterModule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,QAAQ,EAAE,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AAC9E,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,KAAK,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAEjF,MAAM,MAAM,iBAAiB,GAAG,OAAO,GAAG,SAAS,CAAC;AAEpD,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,OAAO,EAAE,iBAAiB,CAAC;IACpC,8DAA8D;IAC9D,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,2CAA2C;IAC3C,QAAQ,CAAC,YAAY,EAAE,eAAe,CAAC;IACvC,8EAA8E;IAC9E,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,yDAAyD;IACzD,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;CACpC;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC;IAC/B,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC;IAC/B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,mBAAmB;IAClC,2EAA2E;IAC3E,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED;;;;;;;;GAQG;AACH,qBAAa,gBAAiB,YAAW,cAAc;IACrD,QAAQ,CAAC,IAAI,sBAAsB;IACnC,QAAQ,CAAC,WAAW,QAAQ;IAC5B,QAAQ,CAAC,OAAO,EAAE,iBAAiB,CAAC;IACpC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,YAAY,EAAE,eAAe,CAAC;IACvC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,aAAa,EAAE,sBAAsB,EAAE,CAAM;gBAE1C,OAAO,EAAE,uBAAuB;IAiB5C,cAAc,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,qBAAqB,GAAG,IAAI;IA4BxE,sGAAsG;IACtG,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG;QAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE;IAgB/E,2FAA2F;IAC3F,cAAc,CAAC,QAAQ,EAAE,SAAS,sBAAsB,EAAE,EAAE,QAAQ,EAAE,MAAM,GAAG;QAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE;IAexH,kBAAkB,IAAI,IAAI;IAI1B,eAAe,IAAI,mBAAmB;IAQtC,OAAO,CAAC,WAAW;CAapB"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { cloneVector3 } from "./Particle.js";
|
|
2
|
+
import { ParticleEmitter } from "./ParticleEmitter.js";
|
|
3
|
+
/**
|
|
4
|
+
* Sub-emitters: particles spawn child particles at midlife or death
|
|
5
|
+
* (explosion sparks, splash droplets, ember bursts).
|
|
6
|
+
*
|
|
7
|
+
* CPU path: afterIntegrate queues spawn requests; the ParticleSystem drains
|
|
8
|
+
* them after integration. GPU path: the compute kernel evaluates the same
|
|
9
|
+
* trigger (normalized-age crossing + hash(chance)) and writes per-particle
|
|
10
|
+
* spawn requests that the system drains through the GPU spawn pipeline.
|
|
11
|
+
*/
|
|
12
|
+
export class SubEmitterModule {
|
|
13
|
+
name = "SubEmitterModule";
|
|
14
|
+
supportsGPU = true;
|
|
15
|
+
trigger;
|
|
16
|
+
chance;
|
|
17
|
+
childEmitter;
|
|
18
|
+
velocityInherit;
|
|
19
|
+
childrenPerEvent;
|
|
20
|
+
pendingSpawns = [];
|
|
21
|
+
constructor(options) {
|
|
22
|
+
this.trigger = options.trigger;
|
|
23
|
+
this.chance = options.chance ?? 1;
|
|
24
|
+
this.childEmitter = options.childEmitter;
|
|
25
|
+
this.velocityInherit = options.velocityInherit ?? 0.3;
|
|
26
|
+
this.childrenPerEvent = options.childrenPerEvent ?? 1;
|
|
27
|
+
if (!Number.isFinite(this.chance) || this.chance < 0 || this.chance > 1) {
|
|
28
|
+
throw new RangeError("SubEmitterModule chance must be a number in [0, 1].");
|
|
29
|
+
}
|
|
30
|
+
if (!Number.isFinite(this.velocityInherit)) {
|
|
31
|
+
throw new RangeError("SubEmitterModule velocityInherit must be finite.");
|
|
32
|
+
}
|
|
33
|
+
if (!Number.isInteger(this.childrenPerEvent) || this.childrenPerEvent <= 0) {
|
|
34
|
+
throw new RangeError("SubEmitterModule childrenPerEvent must be a positive integer.");
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
afterIntegrate(particle, context) {
|
|
38
|
+
if (this.trigger === "midlife") {
|
|
39
|
+
if (particle.userData.subEmitted === true) {
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
if (context.normalizedAge < 0.5) {
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
particle.userData.subEmitted = true;
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
if (particle.userData.subDeathEmitted === true) {
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
if (context.normalizedAge < 1 && particle.alive) {
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
particle.userData.subDeathEmitted = true;
|
|
55
|
+
}
|
|
56
|
+
if (context.random() < this.chance) {
|
|
57
|
+
this.pendingSpawns.push({
|
|
58
|
+
position: cloneVector3(particle.position),
|
|
59
|
+
velocity: cloneVector3(particle.velocity),
|
|
60
|
+
count: this.childrenPerEvent,
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
/** Create child particles for queued requests, bounded by capacity. Returns { children, dropped }. */
|
|
65
|
+
drainPendingSpawns(capacity) {
|
|
66
|
+
const children = [];
|
|
67
|
+
let dropped = 0;
|
|
68
|
+
while (this.pendingSpawns.length > 0) {
|
|
69
|
+
const request = this.pendingSpawns.shift();
|
|
70
|
+
for (let index = 0; index < request.count; index += 1) {
|
|
71
|
+
if (children.length >= capacity) {
|
|
72
|
+
dropped += 1;
|
|
73
|
+
continue;
|
|
74
|
+
}
|
|
75
|
+
children.push(this.createChild(request));
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
return { children, dropped };
|
|
79
|
+
}
|
|
80
|
+
/** Create child particles for GPU spawn-request flags (parallel to drainPendingSpawns). */
|
|
81
|
+
createChildren(requests, capacity) {
|
|
82
|
+
const children = [];
|
|
83
|
+
let dropped = 0;
|
|
84
|
+
for (const request of requests) {
|
|
85
|
+
for (let index = 0; index < request.count; index += 1) {
|
|
86
|
+
if (children.length >= capacity) {
|
|
87
|
+
dropped += 1;
|
|
88
|
+
continue;
|
|
89
|
+
}
|
|
90
|
+
children.push(this.createChild(request));
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
return { children, dropped };
|
|
94
|
+
}
|
|
95
|
+
clearPendingSpawns() {
|
|
96
|
+
this.pendingSpawns.length = 0;
|
|
97
|
+
}
|
|
98
|
+
toGPUSubEmitter() {
|
|
99
|
+
return {
|
|
100
|
+
triggerAge: this.trigger === "midlife" ? 0.5 : 1,
|
|
101
|
+
chance: this.chance,
|
|
102
|
+
childCount: this.childrenPerEvent,
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
createChild(request) {
|
|
106
|
+
const child = this.childEmitter.createParticle();
|
|
107
|
+
child.position.x = request.position.x;
|
|
108
|
+
child.position.y = request.position.y;
|
|
109
|
+
child.position.z = request.position.z;
|
|
110
|
+
child.previousPosition.x = request.position.x;
|
|
111
|
+
child.previousPosition.y = request.position.y;
|
|
112
|
+
child.previousPosition.z = request.position.z;
|
|
113
|
+
child.velocity.x += request.velocity.x * this.velocityInherit;
|
|
114
|
+
child.velocity.y += request.velocity.y * this.velocityInherit;
|
|
115
|
+
child.velocity.z += request.velocity.z * this.velocityInherit;
|
|
116
|
+
return child;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=SubEmitterModule.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SubEmitterModule.js","sourceRoot":"","sources":["../../../../../packages/rendering/src/effects/SubEmitterModule.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,8 +9,46 @@ export interface TrailModuleOptions {
|
|
|
9
9
|
minDistance?: number;
|
|
10
10
|
lifetime?: number;
|
|
11
11
|
}
|
|
12
|
+
export interface TrailRibbonOptions {
|
|
13
|
+
/** Half-width of the ribbon at the head. Defaults to 0.02. */
|
|
14
|
+
readonly width?: number;
|
|
15
|
+
/** Head stretch along velocity per unit speed. Defaults to 0.06. */
|
|
16
|
+
readonly stretchFactor?: number;
|
|
17
|
+
/** Alpha falloff exponent over normalized trail age. Defaults to 1.5. */
|
|
18
|
+
readonly fadePower?: number;
|
|
19
|
+
}
|
|
20
|
+
export interface TrailRibbonVertex {
|
|
21
|
+
readonly position: Vector3Like;
|
|
22
|
+
/** 1 at the head, fading to 0 at the tail. */
|
|
23
|
+
readonly alpha: number;
|
|
24
|
+
/** Arc distance from the head. */
|
|
25
|
+
readonly distance: number;
|
|
26
|
+
/** Ribbon half-width, tapered head-to-tail for GPU strip builders. */
|
|
27
|
+
readonly width: number;
|
|
28
|
+
}
|
|
29
|
+
export interface TrailRibbon {
|
|
30
|
+
readonly vertices: readonly TrailRibbonVertex[];
|
|
31
|
+
readonly headStretch: number;
|
|
32
|
+
}
|
|
33
|
+
export declare const GPU_TRAIL_RING_MIN_POINTS = 1;
|
|
34
|
+
export declare const GPU_TRAIL_RING_MAX_POINTS = 8;
|
|
35
|
+
/**
|
|
36
|
+
* Build a velocity-stretched ribbon strip from a CPU trail history. The head
|
|
37
|
+
* vertex extends along the velocity direction proportionally to speed
|
|
38
|
+
* (stretch-by-velocity); alpha fades head-to-tail so the ribbon dissolves.
|
|
39
|
+
*/
|
|
40
|
+
export declare function buildTrailRibbon(trail: readonly TrailPoint[], head: Vector3Like, velocity: Vector3Like, lifetime: number, options?: TrailRibbonOptions): TrailRibbon;
|
|
41
|
+
/** Validate the per-particle GPU trail ring depth (1..8 history points). */
|
|
42
|
+
export declare function encodeTrailCaptureDepth(pointsPerParticle: number): number;
|
|
43
|
+
/**
|
|
44
|
+
* Decode a GPU trail ring buffer (count * depth vec4 entries: xyz position,
|
|
45
|
+
* w age; newest first) back into CPU trail histories, dropping expired
|
|
46
|
+
* (age > lifetime) entries the kernel initializes with a large age.
|
|
47
|
+
*/
|
|
48
|
+
export declare function decodeTrailRingBuffer(data: Float32Array, count: number, pointsPerParticle: number, lifetime: number): TrailPoint[][];
|
|
12
49
|
export declare class TrailModule implements ParticleModule {
|
|
13
50
|
readonly name = "TrailModule";
|
|
51
|
+
readonly supportsGPU = true;
|
|
14
52
|
readonly maxPoints: number;
|
|
15
53
|
readonly minDistance: number;
|
|
16
54
|
readonly lifetime: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TrailModule.d.ts","sourceRoot":"","sources":["../../../../../packages/rendering/src/effects/TrailModule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,QAAQ,EAAE,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AAC9E,OAAO,KAAK,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAEjF,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,WAAW,CAAC;IACtB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,kBAAkB;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AASD,qBAAa,WAAY,YAAW,cAAc;IAChD,QAAQ,CAAC,IAAI,iBAAiB;IAC9B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;gBAEd,OAAO,GAAE,kBAAuB;IAU5C,OAAO,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,qBAAqB,GAAG,IAAI;IAIlE,cAAc,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,qBAAqB,GAAG,IAAI;IAoBxE,QAAQ,CAAC,QAAQ,EAAE,QAAQ,GAAG,UAAU,EAAE;CAU3C"}
|
|
1
|
+
{"version":3,"file":"TrailModule.d.ts","sourceRoot":"","sources":["../../../../../packages/rendering/src/effects/TrailModule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,QAAQ,EAAE,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AAC9E,OAAO,KAAK,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAEjF,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,WAAW,CAAC;IACtB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,kBAAkB;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AASD,MAAM,WAAW,kBAAkB;IACjC,8DAA8D;IAC9D,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,oEAAoE;IACpE,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,yEAAyE;IACzE,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC;IAC/B,8CAA8C;IAC9C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,kCAAkC;IAClC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,sEAAsE;IACtE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,QAAQ,EAAE,SAAS,iBAAiB,EAAE,CAAC;IAChD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED,eAAO,MAAM,yBAAyB,IAAI,CAAC;AAC3C,eAAO,MAAM,yBAAyB,IAAI,CAAC;AAE3C;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,SAAS,UAAU,EAAE,EAC5B,IAAI,EAAE,WAAW,EACjB,QAAQ,EAAE,WAAW,EACrB,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,kBAAuB,GAC/B,WAAW,CA6Cb;AAED,4EAA4E;AAC5E,wBAAgB,uBAAuB,CAAC,iBAAiB,EAAE,MAAM,GAAG,MAAM,CASzE;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,YAAY,EAClB,KAAK,EAAE,MAAM,EACb,iBAAiB,EAAE,MAAM,EACzB,QAAQ,EAAE,MAAM,GACf,UAAU,EAAE,EAAE,CA0BhB;AAED,qBAAa,WAAY,YAAW,cAAc;IAChD,QAAQ,CAAC,IAAI,iBAAiB;IAC9B,QAAQ,CAAC,WAAW,QAAQ;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;gBAEd,OAAO,GAAE,kBAAuB;IAU5C,OAAO,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,qBAAqB,GAAG,IAAI;IAIlE,cAAc,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,qBAAqB,GAAG,IAAI;IAoBxE,QAAQ,CAAC,QAAQ,EAAE,QAAQ,GAAG,UAAU,EAAE;CAU3C"}
|
|
@@ -5,8 +5,101 @@ function distanceSquared(left, right) {
|
|
|
5
5
|
const z = left.z - right.z;
|
|
6
6
|
return x * x + y * y + z * z;
|
|
7
7
|
}
|
|
8
|
+
export const GPU_TRAIL_RING_MIN_POINTS = 1;
|
|
9
|
+
export const GPU_TRAIL_RING_MAX_POINTS = 8;
|
|
10
|
+
/**
|
|
11
|
+
* Build a velocity-stretched ribbon strip from a CPU trail history. The head
|
|
12
|
+
* vertex extends along the velocity direction proportionally to speed
|
|
13
|
+
* (stretch-by-velocity); alpha fades head-to-tail so the ribbon dissolves.
|
|
14
|
+
*/
|
|
15
|
+
export function buildTrailRibbon(trail, head, velocity, lifetime, options = {}) {
|
|
16
|
+
const width = options.width ?? 0.02;
|
|
17
|
+
const stretchFactor = options.stretchFactor ?? 0.06;
|
|
18
|
+
const fadePower = options.fadePower ?? 1.5;
|
|
19
|
+
if (!Number.isFinite(width) || width < 0 || !Number.isFinite(stretchFactor) || stretchFactor < 0) {
|
|
20
|
+
throw new RangeError("Trail ribbon width and stretchFactor must be finite non-negative numbers.");
|
|
21
|
+
}
|
|
22
|
+
if (!Number.isFinite(fadePower) || fadePower <= 0) {
|
|
23
|
+
throw new RangeError("Trail ribbon fadePower must be a finite positive number.");
|
|
24
|
+
}
|
|
25
|
+
if (!Number.isFinite(lifetime) || lifetime <= 0) {
|
|
26
|
+
throw new RangeError("Trail ribbon lifetime must be a finite positive number.");
|
|
27
|
+
}
|
|
28
|
+
const speed = Math.hypot(velocity.x, velocity.y, velocity.z);
|
|
29
|
+
const headStretch = speed * stretchFactor;
|
|
30
|
+
const direction = speed > 1e-6
|
|
31
|
+
? { x: velocity.x / speed, y: velocity.y / speed, z: velocity.z / speed }
|
|
32
|
+
: { x: 0, y: 0, z: 0 };
|
|
33
|
+
const stretchedHead = {
|
|
34
|
+
x: head.x + direction.x * headStretch,
|
|
35
|
+
y: head.y + direction.y * headStretch,
|
|
36
|
+
z: head.z + direction.z * headStretch,
|
|
37
|
+
};
|
|
38
|
+
const points = [stretchedHead, ...trail.map((point) => point.position)];
|
|
39
|
+
const vertices = [];
|
|
40
|
+
let distance = 0;
|
|
41
|
+
let previous = stretchedHead;
|
|
42
|
+
for (let index = 0; index < points.length; index += 1) {
|
|
43
|
+
const current = points[index];
|
|
44
|
+
if (index > 0) {
|
|
45
|
+
distance += Math.hypot(current.x - previous.x, current.y - previous.y, current.z - previous.z);
|
|
46
|
+
previous = current;
|
|
47
|
+
}
|
|
48
|
+
const trailAge = index === 0 ? 0 : Math.min((trail[index - 1]?.age ?? lifetime) / lifetime, 1);
|
|
49
|
+
const alpha = Math.pow(1 - trailAge, fadePower);
|
|
50
|
+
vertices.push({
|
|
51
|
+
position: { ...current },
|
|
52
|
+
alpha,
|
|
53
|
+
distance,
|
|
54
|
+
width: width * (0.25 + 0.75 * alpha),
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
return { vertices, headStretch };
|
|
58
|
+
}
|
|
59
|
+
/** Validate the per-particle GPU trail ring depth (1..8 history points). */
|
|
60
|
+
export function encodeTrailCaptureDepth(pointsPerParticle) {
|
|
61
|
+
if (!Number.isInteger(pointsPerParticle) ||
|
|
62
|
+
pointsPerParticle < GPU_TRAIL_RING_MIN_POINTS ||
|
|
63
|
+
pointsPerParticle > GPU_TRAIL_RING_MAX_POINTS) {
|
|
64
|
+
throw new RangeError(`GPU trail ring depth must be an integer in [${GPU_TRAIL_RING_MIN_POINTS}, ${GPU_TRAIL_RING_MAX_POINTS}].`);
|
|
65
|
+
}
|
|
66
|
+
return pointsPerParticle;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Decode a GPU trail ring buffer (count * depth vec4 entries: xyz position,
|
|
70
|
+
* w age; newest first) back into CPU trail histories, dropping expired
|
|
71
|
+
* (age > lifetime) entries the kernel initializes with a large age.
|
|
72
|
+
*/
|
|
73
|
+
export function decodeTrailRingBuffer(data, count, pointsPerParticle, lifetime) {
|
|
74
|
+
encodeTrailCaptureDepth(pointsPerParticle);
|
|
75
|
+
if (data.length < count * pointsPerParticle * 4) {
|
|
76
|
+
throw new RangeError("Trail ring buffer is smaller than count * depth vec4 entries.");
|
|
77
|
+
}
|
|
78
|
+
const trails = [];
|
|
79
|
+
for (let particle = 0; particle < count; particle += 1) {
|
|
80
|
+
const trail = [];
|
|
81
|
+
for (let slot = pointsPerParticle - 1; slot >= 0; slot -= 1) {
|
|
82
|
+
const offset = (particle * pointsPerParticle + slot) * 4;
|
|
83
|
+
const age = data[offset + 3] ?? Number.POSITIVE_INFINITY;
|
|
84
|
+
if (!Number.isFinite(age) || age < 0 || age > lifetime) {
|
|
85
|
+
continue;
|
|
86
|
+
}
|
|
87
|
+
trail.push({
|
|
88
|
+
position: {
|
|
89
|
+
x: data[offset] ?? 0,
|
|
90
|
+
y: data[offset + 1] ?? 0,
|
|
91
|
+
z: data[offset + 2] ?? 0,
|
|
92
|
+
},
|
|
93
|
+
age,
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
trails.push(trail);
|
|
97
|
+
}
|
|
98
|
+
return trails;
|
|
99
|
+
}
|
|
8
100
|
export class TrailModule {
|
|
9
101
|
name = "TrailModule";
|
|
102
|
+
supportsGPU = true;
|
|
10
103
|
maxPoints;
|
|
11
104
|
minDistance;
|
|
12
105
|
lifetime;
|
|
@@ -14,8 +107,8 @@ export class TrailModule {
|
|
|
14
107
|
this.maxPoints = options.maxPoints ?? 16;
|
|
15
108
|
this.minDistance = options.minDistance ?? 0.05;
|
|
16
109
|
this.lifetime = options.lifetime ?? 0.5;
|
|
17
|
-
if (this.maxPoints <= 0 || this.minDistance < 0 || this.lifetime <= 0) {
|
|
18
|
-
throw new RangeError("TrailModule maxPoints
|
|
110
|
+
if (!Number.isInteger(this.maxPoints) || this.maxPoints <= 0 || !Number.isFinite(this.minDistance) || this.minDistance < 0 || !Number.isFinite(this.lifetime) || this.lifetime <= 0) {
|
|
111
|
+
throw new RangeError("TrailModule maxPoints must be a positive integer, lifetime positive, and minDistance non-negative.");
|
|
19
112
|
}
|
|
20
113
|
}
|
|
21
114
|
onSpawn(particle, _context) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TrailModule.js","sourceRoot":"","sources":["../../../../../packages/rendering/src/effects/TrailModule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAmC,MAAM,eAAe,CAAC;AAc9E,SAAS,eAAe,CAAC,IAAiB,EAAE,KAAkB;IAC5D,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;IAC3B,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;IAC3B,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;IAC3B,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC/B,CAAC;AAED,MAAM,OAAO,WAAW;IACb,IAAI,GAAG,aAAa,CAAC;IACrB,SAAS,CAAS;IAClB,WAAW,CAAS;IACpB,QAAQ,CAAS;IAE1B,YAAY,UAA8B,EAAE;QAC1C,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC;QACzC,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,IAAI,CAAC;QAC/C,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,GAAG,CAAC;QAExC,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,IAAI,CAAC,WAAW,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"TrailModule.js","sourceRoot":"","sources":["../../../../../packages/rendering/src/effects/TrailModule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAmC,MAAM,eAAe,CAAC;AAc9E,SAAS,eAAe,CAAC,IAAiB,EAAE,KAAkB;IAC5D,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;IAC3B,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;IAC3B,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;IAC3B,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC/B,CAAC;AA0BD,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC;AAC3C,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC;AAE3C;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAC9B,KAA4B,EAC5B,IAAiB,EACjB,QAAqB,EACrB,QAAgB,EAChB,UAA8B,EAAE;IAEhC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC;IACpC,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,IAAI,CAAC;IACpD,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,GAAG,CAAC;IAC3C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,aAAa,GAAG,CAAC,EAAE,CAAC;QACjG,MAAM,IAAI,UAAU,CAAC,2EAA2E,CAAC,CAAC;IACpG,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;QAClD,MAAM,IAAI,UAAU,CAAC,0DAA0D,CAAC,CAAC;IACnF,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,QAAQ,IAAI,CAAC,EAAE,CAAC;QAChD,MAAM,IAAI,UAAU,CAAC,yDAAyD,CAAC,CAAC;IAClF,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC7D,MAAM,WAAW,GAAG,KAAK,GAAG,aAAa,CAAC;IAC1C,MAAM,SAAS,GAAG,KAAK,GAAG,IAAI;QAC5B,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,GAAG,KAAK,EAAE;QACzE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;IACzB,MAAM,aAAa,GAAG;QACpB,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,WAAW;QACrC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,WAAW;QACrC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,WAAW;KACtC,CAAC;IAEF,MAAM,MAAM,GAAG,CAAC,aAAa,EAAE,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;IACxE,MAAM,QAAQ,GAAwB,EAAE,CAAC;IACzC,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,IAAI,QAAQ,GAAG,aAAa,CAAC;IAC7B,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACtD,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAE,CAAC;QAC/B,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACd,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;YAC/F,QAAQ,GAAG,OAAO,CAAC;QACrB,CAAC;QACD,MAAM,QAAQ,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,GAAG,IAAI,QAAQ,CAAC,GAAG,QAAQ,EAAE,CAAC,CAAC,CAAC;QAC/F,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ,EAAE,SAAS,CAAC,CAAC;QAChD,QAAQ,CAAC,IAAI,CAAC;YACZ,QAAQ,EAAE,EAAE,GAAG,OAAO,EAAE;YACxB,KAAK;YACL,QAAQ;YACR,KAAK,EAAE,KAAK,GAAG,CAAC,IAAI,GAAG,IAAI,GAAG,KAAK,CAAC;SACrC,CAAC,CAAC;IACL,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;AACnC,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,uBAAuB,CAAC,iBAAyB;IAC/D,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,iBAAiB,CAAC;QACpC,iBAAiB,GAAG,yBAAyB;QAC7C,iBAAiB,GAAG,yBAAyB,EAAE,CAAC;QAClD,MAAM,IAAI,UAAU,CAClB,+CAA+C,yBAAyB,KAAK,yBAAyB,IAAI,CAC3G,CAAC;IACJ,CAAC;IACD,OAAO,iBAAiB,CAAC;AAC3B,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CACnC,IAAkB,EAClB,KAAa,EACb,iBAAyB,EACzB,QAAgB;IAEhB,uBAAuB,CAAC,iBAAiB,CAAC,CAAC;IAC3C,IAAI,IAAI,CAAC,MAAM,GAAG,KAAK,GAAG,iBAAiB,GAAG,CAAC,EAAE,CAAC;QAChD,MAAM,IAAI,UAAU,CAAC,+DAA+D,CAAC,CAAC;IACxF,CAAC;IACD,MAAM,MAAM,GAAmB,EAAE,CAAC;IAClC,KAAK,IAAI,QAAQ,GAAG,CAAC,EAAE,QAAQ,GAAG,KAAK,EAAE,QAAQ,IAAI,CAAC,EAAE,CAAC;QACvD,MAAM,KAAK,GAAiB,EAAE,CAAC;QAC/B,KAAK,IAAI,IAAI,GAAG,iBAAiB,GAAG,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC;YAC5D,MAAM,MAAM,GAAG,CAAC,QAAQ,GAAG,iBAAiB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;YACzD,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,MAAM,CAAC,iBAAiB,CAAC;YACzD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,GAAG,QAAQ,EAAE,CAAC;gBACvD,SAAS;YACX,CAAC;YACD,KAAK,CAAC,IAAI,CAAC;gBACT,QAAQ,EAAE;oBACR,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;oBACpB,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC;oBACxB,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC;iBACzB;gBACD,GAAG;aACJ,CAAC,CAAC;QACL,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,OAAO,WAAW;IACb,IAAI,GAAG,aAAa,CAAC;IACrB,WAAW,GAAG,IAAI,CAAC;IACnB,SAAS,CAAS;IAClB,WAAW,CAAS;IACpB,QAAQ,CAAS;IAE1B,YAAY,UAA8B,EAAE;QAC1C,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC;QACzC,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,IAAI,CAAC;QAC/C,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,GAAG,CAAC;QAExC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,WAAW,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,EAAE,CAAC;YACpL,MAAM,IAAI,UAAU,CAAC,oGAAoG,CAAC,CAAC;QAC7H,CAAC;IACH,CAAC;IAED,OAAO,CAAC,QAAkB,EAAE,QAA+B;QACzD,QAAQ,CAAC,QAAQ,CAAC,KAAK,GAAG,CAAC,EAAE,QAAQ,EAAE,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAwB,CAAC;IAC3G,CAAC;IAED,cAAc,CAAC,QAAkB,EAAE,OAA8B;QAC/D,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACtC,KAAK,MAAM,KAAK,IAAI,KAAK,EAAE,CAAC;YAC1B,KAAK,CAAC,GAAG,IAAI,OAAO,CAAC,SAAS,CAAC;QACjC,CAAC;QAED,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;YACxD,KAAK,CAAC,KAAK,EAAE,CAAC;QAChB,CAAC;QAED,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACrC,IAAI,CAAC,IAAI,IAAI,eAAe,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;YACtG,KAAK,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;QACpE,CAAC;QAED,OAAO,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;YACrC,KAAK,CAAC,KAAK,EAAE,CAAC;QAChB,CAAC;IACH,CAAC;IAED,QAAQ,CAAC,QAAkB;QACzB,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC;QACtC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,GAAiB,EAAE,CAAC;YAC9B,QAAQ,CAAC,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC;YAC/B,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,KAAqB,CAAC;IAC/B,CAAC;CACF"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { Vector3Like } from "./Particle.js";
|
|
2
|
+
import type { ParticleModule, ParticleUpdateContext } from "./ParticleModule.js";
|
|
3
|
+
import type { Particle } from "./Particle.js";
|
|
4
|
+
/**
|
|
5
|
+
* Curl-noise turbulence for GPU particles (PART A4).
|
|
6
|
+
*
|
|
7
|
+
* The field is the analytic curl of a vector potential built from a fixed
|
|
8
|
+
* sinusoidal scalar potential, sampled through a deterministic 3D lattice
|
|
9
|
+
* (the "curl-noise LUT"). The CPU fallback trilinear-samples the same LUT
|
|
10
|
+
* the WGSL compute path uploads, so both paths share one field definition.
|
|
11
|
+
*/
|
|
12
|
+
export declare const TURBULENCE_LUT_RESOLUTION = 8;
|
|
13
|
+
export declare const TURBULENCE_LUT_ENTRIES: number;
|
|
14
|
+
/** Build the deterministic curl-noise LUT: resolution^3 vec4 entries (xyz = curl, w = 0). */
|
|
15
|
+
export declare function createCurlNoiseLUT(resolution?: number): Float32Array;
|
|
16
|
+
/** Trilinear, wrapping sample of a curl-noise LUT at unit-space coordinates. */
|
|
17
|
+
export declare function sampleCurlNoiseLUT(lut: Float32Array, resolution: number, x: number, y: number, z: number, out?: Vector3Like): Vector3Like;
|
|
18
|
+
export interface TurbulenceModuleOptions {
|
|
19
|
+
readonly strength?: number;
|
|
20
|
+
readonly scale?: number;
|
|
21
|
+
readonly flowSpeed?: number;
|
|
22
|
+
readonly lutResolution?: number;
|
|
23
|
+
}
|
|
24
|
+
export interface GPUTurbulenceParams {
|
|
25
|
+
readonly strength: number;
|
|
26
|
+
readonly scale: number;
|
|
27
|
+
readonly flowSpeed: number;
|
|
28
|
+
readonly lutResolution: number;
|
|
29
|
+
}
|
|
30
|
+
export declare class TurbulenceModule implements ParticleModule {
|
|
31
|
+
readonly name = "TurbulenceModule";
|
|
32
|
+
readonly supportsGPU = true;
|
|
33
|
+
readonly strength: number;
|
|
34
|
+
readonly scale: number;
|
|
35
|
+
readonly flowSpeed: number;
|
|
36
|
+
readonly lutResolution: number;
|
|
37
|
+
private cachedLUT;
|
|
38
|
+
constructor(options?: TurbulenceModuleOptions);
|
|
39
|
+
getLUT(): Float32Array;
|
|
40
|
+
update(particle: Particle, context: ParticleUpdateContext): void;
|
|
41
|
+
toGPUTurbulence(): GPUTurbulenceParams;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=TurbulenceModule.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TurbulenceModule.d.ts","sourceRoot":"","sources":["../../../../../packages/rendering/src/effects/TurbulenceModule.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,KAAK,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AACjF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAE9C;;;;;;;GAOG;AAEH,eAAO,MAAM,yBAAyB,IAAI,CAAC;AAC3C,eAAO,MAAM,sBAAsB,QAAiC,CAAC;AA0BrE,6FAA6F;AAC7F,wBAAgB,kBAAkB,CAAC,UAAU,GAAE,MAAkC,GAAG,YAAY,CAkB/F;AAED,gFAAgF;AAChF,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,YAAY,EACjB,UAAU,EAAE,MAAM,EAClB,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,GAAG,GAAE,WAAkC,GACtC,WAAW,CAoCb;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;CACjC;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC;AAED,qBAAa,gBAAiB,YAAW,cAAc;IACrD,QAAQ,CAAC,IAAI,sBAAsB;IACnC,QAAQ,CAAC,WAAW,QAAQ;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,OAAO,CAAC,SAAS,CAA6B;gBAElC,OAAO,GAAE,uBAA4B;IAajD,MAAM,IAAI,YAAY;IAOtB,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,qBAAqB,GAAG,IAAI;IAchE,eAAe,IAAI,mBAAmB;CAQvC"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Curl-noise turbulence for GPU particles (PART A4).
|
|
3
|
+
*
|
|
4
|
+
* The field is the analytic curl of a vector potential built from a fixed
|
|
5
|
+
* sinusoidal scalar potential, sampled through a deterministic 3D lattice
|
|
6
|
+
* (the "curl-noise LUT"). The CPU fallback trilinear-samples the same LUT
|
|
7
|
+
* the WGSL compute path uploads, so both paths share one field definition.
|
|
8
|
+
*/
|
|
9
|
+
export const TURBULENCE_LUT_RESOLUTION = 8;
|
|
10
|
+
export const TURBULENCE_LUT_ENTRIES = TURBULENCE_LUT_RESOLUTION ** 3;
|
|
11
|
+
function scalarPotentialU(u, v) {
|
|
12
|
+
const a1u = 1.6 * u;
|
|
13
|
+
const b1v = 1.3 * v;
|
|
14
|
+
const a2u = 3.1 * u + 1.7;
|
|
15
|
+
const b2v = 2.7 * v + 0.6;
|
|
16
|
+
return {
|
|
17
|
+
value: Math.sin(a1u) * Math.cos(b1v) + 0.35 * Math.sin(a2u) * Math.cos(b2v),
|
|
18
|
+
du: 1.6 * Math.cos(a1u) * Math.cos(b1v) + 0.35 * 3.1 * Math.cos(a2u) * Math.cos(b2v),
|
|
19
|
+
dv: -1.3 * Math.sin(a1u) * Math.sin(b1v) - 0.35 * 2.7 * Math.sin(a2u) * Math.sin(b2v),
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
function curlAt(x, y, z) {
|
|
23
|
+
// A(p) = (f(y,z), f(z,x), f(x,y)); V = curl(A).
|
|
24
|
+
const fyz = scalarPotentialU(y, z);
|
|
25
|
+
const fzx = scalarPotentialU(z, x);
|
|
26
|
+
const fxy = scalarPotentialU(x, y);
|
|
27
|
+
return {
|
|
28
|
+
x: fzx.du - fxy.dv,
|
|
29
|
+
y: fxy.du - fyz.dv,
|
|
30
|
+
z: fyz.du - fzx.dv,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
/** Build the deterministic curl-noise LUT: resolution^3 vec4 entries (xyz = curl, w = 0). */
|
|
34
|
+
export function createCurlNoiseLUT(resolution = TURBULENCE_LUT_RESOLUTION) {
|
|
35
|
+
if (!Number.isInteger(resolution) || resolution < 2 || resolution > 32) {
|
|
36
|
+
throw new RangeError("Curl-noise LUT resolution must be an integer in [2, 32].");
|
|
37
|
+
}
|
|
38
|
+
const lut = new Float32Array(resolution ** 3 * 4);
|
|
39
|
+
for (let z = 0; z < resolution; z += 1) {
|
|
40
|
+
for (let y = 0; y < resolution; y += 1) {
|
|
41
|
+
for (let x = 0; x < resolution; x += 1) {
|
|
42
|
+
const curl = curlAt((x + 0.5) / resolution, (y + 0.5) / resolution, (z + 0.5) / resolution);
|
|
43
|
+
const offset = (x + y * resolution + z * resolution * resolution) * 4;
|
|
44
|
+
lut[offset] = curl.x;
|
|
45
|
+
lut[offset + 1] = curl.y;
|
|
46
|
+
lut[offset + 2] = curl.z;
|
|
47
|
+
lut[offset + 3] = 0;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return lut;
|
|
52
|
+
}
|
|
53
|
+
/** Trilinear, wrapping sample of a curl-noise LUT at unit-space coordinates. */
|
|
54
|
+
export function sampleCurlNoiseLUT(lut, resolution, x, y, z, out = { x: 0, y: 0, z: 0 }) {
|
|
55
|
+
if (lut.length < resolution ** 3 * 4) {
|
|
56
|
+
throw new RangeError("Curl-noise LUT buffer is smaller than resolution^3 vec4 entries.");
|
|
57
|
+
}
|
|
58
|
+
const gx = (x - Math.floor(x)) * resolution - 0.5;
|
|
59
|
+
const gy = (y - Math.floor(y)) * resolution - 0.5;
|
|
60
|
+
const gz = (z - Math.floor(z)) * resolution - 0.5;
|
|
61
|
+
const x0 = Math.floor(gx);
|
|
62
|
+
const y0 = Math.floor(gy);
|
|
63
|
+
const z0 = Math.floor(gz);
|
|
64
|
+
const fx = gx - x0;
|
|
65
|
+
const fy = gy - y0;
|
|
66
|
+
const fz = gz - z0;
|
|
67
|
+
let rx = 0;
|
|
68
|
+
let ry = 0;
|
|
69
|
+
let rz = 0;
|
|
70
|
+
for (let dz = 0; dz <= 1; dz += 1) {
|
|
71
|
+
for (let dy = 0; dy <= 1; dy += 1) {
|
|
72
|
+
for (let dx = 0; dx <= 1; dx += 1) {
|
|
73
|
+
const weight = (dx === 0 ? 1 - fx : fx) * (dy === 0 ? 1 - fy : fy) * (dz === 0 ? 1 - fz : fz);
|
|
74
|
+
const ix = (((x0 + dx) % resolution) + resolution) % resolution;
|
|
75
|
+
const iy = (((y0 + dy) % resolution) + resolution) % resolution;
|
|
76
|
+
const iz = (((z0 + dz) % resolution) + resolution) % resolution;
|
|
77
|
+
const offset = (ix + iy * resolution + iz * resolution * resolution) * 4;
|
|
78
|
+
rx += (lut[offset] ?? 0) * weight;
|
|
79
|
+
ry += (lut[offset + 1] ?? 0) * weight;
|
|
80
|
+
rz += (lut[offset + 2] ?? 0) * weight;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
out.x = rx;
|
|
85
|
+
out.y = ry;
|
|
86
|
+
out.z = rz;
|
|
87
|
+
return out;
|
|
88
|
+
}
|
|
89
|
+
export class TurbulenceModule {
|
|
90
|
+
name = "TurbulenceModule";
|
|
91
|
+
supportsGPU = true;
|
|
92
|
+
strength;
|
|
93
|
+
scale;
|
|
94
|
+
flowSpeed;
|
|
95
|
+
lutResolution;
|
|
96
|
+
cachedLUT = null;
|
|
97
|
+
constructor(options = {}) {
|
|
98
|
+
this.strength = options.strength ?? 0.6;
|
|
99
|
+
this.scale = options.scale ?? 0.8;
|
|
100
|
+
this.flowSpeed = options.flowSpeed ?? 0.15;
|
|
101
|
+
this.lutResolution = options.lutResolution ?? TURBULENCE_LUT_RESOLUTION;
|
|
102
|
+
if (!Number.isFinite(this.strength) || !Number.isFinite(this.scale) || !Number.isFinite(this.flowSpeed)) {
|
|
103
|
+
throw new RangeError("TurbulenceModule strength, scale, and flowSpeed must be finite numbers.");
|
|
104
|
+
}
|
|
105
|
+
if (!Number.isInteger(this.lutResolution) || this.lutResolution < 2 || this.lutResolution > 32) {
|
|
106
|
+
throw new RangeError("TurbulenceModule lutResolution must be an integer in [2, 32].");
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
getLUT() {
|
|
110
|
+
if (!this.cachedLUT) {
|
|
111
|
+
this.cachedLUT = createCurlNoiseLUT(this.lutResolution);
|
|
112
|
+
}
|
|
113
|
+
return this.cachedLUT;
|
|
114
|
+
}
|
|
115
|
+
update(particle, context) {
|
|
116
|
+
const scratch = sampleCurlNoiseLUT(this.getLUT(), this.lutResolution, particle.position.x * this.scale + context.elapsedTime * this.flowSpeed, particle.position.y * this.scale, particle.position.z * this.scale, { x: 0, y: 0, z: 0 });
|
|
117
|
+
particle.velocity.x += scratch.x * this.strength * context.deltaTime;
|
|
118
|
+
particle.velocity.y += scratch.y * this.strength * context.deltaTime;
|
|
119
|
+
particle.velocity.z += scratch.z * this.strength * context.deltaTime;
|
|
120
|
+
}
|
|
121
|
+
toGPUTurbulence() {
|
|
122
|
+
return {
|
|
123
|
+
strength: this.strength,
|
|
124
|
+
scale: this.scale,
|
|
125
|
+
flowSpeed: this.flowSpeed,
|
|
126
|
+
lutResolution: this.lutResolution,
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=TurbulenceModule.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TurbulenceModule.js","sourceRoot":"","sources":["../../../../../packages/rendering/src/effects/TurbulenceModule.ts"],"names":[],"mappings":"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"}
|
package/dist/effects/index.d.ts
CHANGED
|
@@ -7,6 +7,10 @@ export * from "./SizeModule.js";
|
|
|
7
7
|
export * from "./ForceModule.js";
|
|
8
8
|
export * from "./CollisionModule.js";
|
|
9
9
|
export * from "./TrailModule.js";
|
|
10
|
+
export * from "./TurbulenceModule.js";
|
|
11
|
+
export * from "./HeightfieldModule.js";
|
|
12
|
+
export * from "./LightingModule.js";
|
|
13
|
+
export * from "./SubEmitterModule.js";
|
|
10
14
|
export * from "./ParticleRenderer.js";
|
|
11
15
|
export * from "./ParticleRenderPass.js";
|
|
12
16
|
export * from "./GPUParticleBackend.js";
|