@onerjs/core 8.56.4 → 9.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/Animations/animatable.core.js +36 -0
- package/Animations/animatable.core.js.map +1 -1
- package/Animations/animationGroup.pure.d.ts +61 -1
- package/Animations/animationGroup.pure.js +191 -2
- package/Animations/animationGroup.pure.js.map +1 -1
- package/Animations/index.d.ts +1 -0
- package/Animations/index.js +1 -0
- package/Animations/index.js.map +1 -1
- package/Animations/pure.d.ts +1 -0
- package/Animations/pure.js +1 -0
- package/Animations/pure.js.map +1 -1
- package/Animations/rootMotion.d.ts +560 -0
- package/Animations/rootMotion.js +1709 -0
- package/Animations/rootMotion.js.map +1 -0
- package/Animations/runtimeAnimation.d.ts +57 -0
- package/Animations/runtimeAnimation.js +127 -3
- package/Animations/runtimeAnimation.js.map +1 -1
- package/Cameras/arcRotateCamera.pure.d.ts +2 -0
- package/Cameras/arcRotateCamera.pure.js +2 -0
- package/Cameras/arcRotateCamera.pure.js.map +1 -1
- package/Cameras/targetCamera.pure.d.ts +2 -0
- package/Cameras/targetCamera.pure.js +13 -2
- package/Cameras/targetCamera.pure.js.map +1 -1
- package/Collisions/gpuPicker.js +5 -5
- package/Collisions/gpuPicker.js.map +1 -1
- package/Engines/AbstractEngine/abstractEngine.query.pure.js +4 -2
- package/Engines/AbstractEngine/abstractEngine.query.pure.js.map +1 -1
- package/Engines/AbstractEngine/abstractEngine.query.types.d.ts +11 -2
- package/Engines/AbstractEngine/abstractEngine.query.types.js.map +1 -1
- package/Engines/AbstractEngine/abstractEngine.renderPass.pure.js +1 -0
- package/Engines/AbstractEngine/abstractEngine.renderPass.pure.js.map +1 -1
- package/Engines/Extensions/engine.multiRender.pure.js +63 -0
- package/Engines/Extensions/engine.multiRender.pure.js.map +1 -1
- package/Engines/Extensions/engine.multiRender.types.d.ts +13 -0
- package/Engines/Extensions/engine.multiRender.types.js.map +1 -1
- package/Engines/Extensions/engine.prefilteredCubeTexture.pure.js +2 -2
- package/Engines/Extensions/engine.prefilteredCubeTexture.pure.js.map +1 -1
- package/Engines/Extensions/engine.prefilteredCubeTexture.types.d.ts +2 -1
- package/Engines/Extensions/engine.prefilteredCubeTexture.types.js.map +1 -1
- package/Engines/Extensions/index.d.ts +1 -0
- package/Engines/Extensions/index.js +1 -0
- package/Engines/Extensions/index.js.map +1 -1
- package/Engines/Extensions/pure.d.ts +1 -1
- package/Engines/Extensions/pure.js +1 -1
- package/Engines/Extensions/pure.js.map +1 -1
- package/Engines/Native/Extensions/nativeEngine.cubeTexture.pure.js +88 -39
- package/Engines/Native/Extensions/nativeEngine.cubeTexture.pure.js.map +1 -1
- package/Engines/Native/Extensions/nativeEngine.cubeTexture.types.d.ts +20 -2
- package/Engines/Native/Extensions/nativeEngine.cubeTexture.types.js.map +1 -1
- package/Engines/Native/nativeHardwareTexture.d.ts +8 -1
- package/Engines/Native/nativeHardwareTexture.js +7 -0
- package/Engines/Native/nativeHardwareTexture.js.map +1 -1
- package/Engines/Native/nativeHelpers.js +56 -1
- package/Engines/Native/nativeHelpers.js.map +1 -1
- package/Engines/Native/nativeInterfaces.d.ts +37 -8
- package/Engines/Native/nativeInterfaces.js.map +1 -1
- package/Engines/Native/nativeRenderTargetWrapper.d.ts +40 -0
- package/Engines/Native/nativeRenderTargetWrapper.js +265 -5
- package/Engines/Native/nativeRenderTargetWrapper.js.map +1 -1
- package/Engines/Processors/shaderCodeCursor.d.ts +1 -0
- package/Engines/Processors/shaderCodeCursor.js +40 -3
- package/Engines/Processors/shaderCodeCursor.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.multiRender.pure.js +4 -0
- package/Engines/WebGPU/Extensions/engine.multiRender.pure.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.multiRender.types.d.ts +13 -0
- package/Engines/WebGPU/Extensions/engine.multiRender.types.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.query.pure.js +11 -3
- package/Engines/WebGPU/Extensions/engine.query.pure.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.renderTarget.pure.js +1 -0
- package/Engines/WebGPU/Extensions/engine.renderTarget.pure.js.map +1 -1
- package/Engines/WebGPU/Extensions/index.d.ts +1 -0
- package/Engines/WebGPU/Extensions/index.js +1 -0
- package/Engines/WebGPU/Extensions/index.js.map +1 -1
- package/Engines/WebGPU/Extensions/pure.d.ts +1 -1
- package/Engines/WebGPU/Extensions/pure.js +1 -1
- package/Engines/WebGPU/Extensions/pure.js.map +1 -1
- package/Engines/WebGPU/webgpuBundleList.d.ts +2 -0
- package/Engines/WebGPU/webgpuBundleList.js +4 -0
- package/Engines/WebGPU/webgpuBundleList.js.map +1 -1
- package/Engines/WebGPU/webgpuCacheRenderPipeline.js +5 -2
- package/Engines/WebGPU/webgpuCacheRenderPipeline.js.map +1 -1
- package/Engines/WebGPU/webgpuHardwareTexture.js +3 -1
- package/Engines/WebGPU/webgpuHardwareTexture.js.map +1 -1
- package/Engines/WebGPU/webgpuOcclusionQuery.js +1 -1
- package/Engines/WebGPU/webgpuOcclusionQuery.js.map +1 -1
- package/Engines/WebGPU/webgpuSnapshotRendering.d.ts +4 -0
- package/Engines/WebGPU/webgpuSnapshotRendering.js +40 -7
- package/Engines/WebGPU/webgpuSnapshotRendering.js.map +1 -1
- package/Engines/WebGPU/webgpuTextureHelper.d.ts +1 -1
- package/Engines/WebGPU/webgpuTextureHelper.js +2 -2
- package/Engines/WebGPU/webgpuTextureHelper.js.map +1 -1
- package/Engines/WebGPU/webgpuTextureManager.d.ts +2 -0
- package/Engines/WebGPU/webgpuTextureManager.js +286 -13
- package/Engines/WebGPU/webgpuTextureManager.js.map +1 -1
- package/Engines/abstractEngine.pure.d.ts +17 -1
- package/Engines/abstractEngine.pure.js +17 -5
- package/Engines/abstractEngine.pure.js.map +1 -1
- package/Engines/constants.d.ts +4 -0
- package/Engines/constants.js +4 -0
- package/Engines/constants.js.map +1 -1
- package/Engines/engine.pure.d.ts +0 -1
- package/Engines/engine.pure.js +0 -7
- package/Engines/engine.pure.js.map +1 -1
- package/Engines/nativeEngine.pure.js +1 -1
- package/Engines/nativeEngine.pure.js.map +1 -1
- package/Engines/thinEngine.pure.d.ts +15 -0
- package/Engines/thinEngine.pure.js +61 -14
- package/Engines/thinEngine.pure.js.map +1 -1
- package/Engines/thinNativeEngine.pure.d.ts +218 -17
- package/Engines/thinNativeEngine.pure.js +1438 -165
- package/Engines/thinNativeEngine.pure.js.map +1 -1
- package/Engines/thinWebGPUEngine.d.ts +4 -0
- package/Engines/thinWebGPUEngine.js +16 -2
- package/Engines/thinWebGPUEngine.js.map +1 -1
- package/Engines/webgpuEngine.pure.d.ts +17 -3
- package/Engines/webgpuEngine.pure.js +56 -13
- package/Engines/webgpuEngine.pure.js.map +1 -1
- package/FlowGraph/Blocks/Data/Math/flowGraphMathBlocks.pure.js +2 -2
- package/FlowGraph/Blocks/Data/Math/flowGraphMathBlocks.pure.js.map +1 -1
- package/FlowGraph/Blocks/Data/Transformers/flowGraphJsonPointerParserBlock.pure.d.ts +10 -0
- package/FlowGraph/Blocks/Data/Transformers/flowGraphJsonPointerParserBlock.pure.js +24 -12
- package/FlowGraph/Blocks/Data/Transformers/flowGraphJsonPointerParserBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Data/Utils/flowGraphArrayIndexBlock.pure.d.ts +11 -2
- package/FlowGraph/Blocks/Data/Utils/flowGraphArrayIndexBlock.pure.js +1 -1
- package/FlowGraph/Blocks/Data/Utils/flowGraphArrayIndexBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Data/flowGraphGetPropertyBlock.pure.d.ts +7 -0
- package/FlowGraph/Blocks/Data/flowGraphGetPropertyBlock.pure.js +43 -0
- package/FlowGraph/Blocks/Data/flowGraphGetPropertyBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Event/flowGraphMeshPickEventBlock.pure.d.ts +9 -1
- package/FlowGraph/Blocks/Event/flowGraphMeshPickEventBlock.pure.js +6 -8
- package/FlowGraph/Blocks/Event/flowGraphMeshPickEventBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Event/flowGraphPointerOutEventBlock.pure.d.ts +2 -0
- package/FlowGraph/Blocks/Event/flowGraphPointerOutEventBlock.pure.js +5 -1
- package/FlowGraph/Blocks/Event/flowGraphPointerOutEventBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Event/flowGraphPointerOverEventBlock.pure.d.ts +2 -0
- package/FlowGraph/Blocks/Event/flowGraphPointerOverEventBlock.pure.js +5 -1
- package/FlowGraph/Blocks/Event/flowGraphPointerOverEventBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Event/flowGraphReceiveCustomEventBlock.pure.d.ts +9 -0
- package/FlowGraph/Blocks/Event/flowGraphReceiveCustomEventBlock.pure.js +34 -9
- package/FlowGraph/Blocks/Event/flowGraphReceiveCustomEventBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Event/flowGraphSceneReadyEventBlock.pure.d.ts +2 -0
- package/FlowGraph/Blocks/Event/flowGraphSceneReadyEventBlock.pure.js +4 -0
- package/FlowGraph/Blocks/Event/flowGraphSceneReadyEventBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Event/flowGraphSceneTickEventBlock.pure.d.ts +18 -4
- package/FlowGraph/Blocks/Event/flowGraphSceneTickEventBlock.pure.js +24 -6
- package/FlowGraph/Blocks/Event/flowGraphSceneTickEventBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Event/flowGraphSendCustomEventBlock.pure.js +19 -7
- package/FlowGraph/Blocks/Event/flowGraphSendCustomEventBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Execution/Animation/flowGraphInterpolationBlock.pure.js +3 -3
- package/FlowGraph/Blocks/Execution/Animation/flowGraphInterpolationBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Execution/Animation/flowGraphPlayAnimationBlock.pure.d.ts +20 -2
- package/FlowGraph/Blocks/Execution/Animation/flowGraphPlayAnimationBlock.pure.js +85 -25
- package/FlowGraph/Blocks/Execution/Animation/flowGraphPlayAnimationBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Execution/Animation/flowGraphStopAnimationBlock.pure.d.ts +16 -1
- package/FlowGraph/Blocks/Execution/Animation/flowGraphStopAnimationBlock.pure.js +64 -14
- package/FlowGraph/Blocks/Execution/Animation/flowGraphStopAnimationBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphCancelDelayBlock.pure.d.ts +12 -1
- package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphCancelDelayBlock.pure.js +8 -0
- package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphCancelDelayBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphForLoopBlock.pure.js +4 -1
- package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphForLoopBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphThrottleBlock.pure.d.ts +12 -1
- package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphThrottleBlock.pure.js +5 -1
- package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphThrottleBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Execution/flowGraphConsoleLogBlock.pure.js +64 -16
- package/FlowGraph/Blocks/Execution/flowGraphConsoleLogBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Execution/flowGraphSetPropertyBlock.pure.d.ts +2 -0
- package/FlowGraph/Blocks/Execution/flowGraphSetPropertyBlock.pure.js +14 -2
- package/FlowGraph/Blocks/Execution/flowGraphSetPropertyBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Execution/flowGraphSetVariableBlock.pure.d.ts +5 -1
- package/FlowGraph/Blocks/Execution/flowGraphSetVariableBlock.pure.js +23 -8
- package/FlowGraph/Blocks/Execution/flowGraphSetVariableBlock.pure.js.map +1 -1
- package/FlowGraph/CustomTypes/flowGraphInteger.pure.d.ts +5 -0
- package/FlowGraph/CustomTypes/flowGraphInteger.pure.js +7 -0
- package/FlowGraph/CustomTypes/flowGraphInteger.pure.js.map +1 -1
- package/FlowGraph/CustomTypes/flowGraphMatrix.d.ts +10 -0
- package/FlowGraph/CustomTypes/flowGraphMatrix.js +14 -0
- package/FlowGraph/CustomTypes/flowGraphMatrix.js.map +1 -1
- package/FlowGraph/flowGraph.d.ts +6 -1
- package/FlowGraph/flowGraph.js +41 -9
- package/FlowGraph/flowGraph.js.map +1 -1
- package/FlowGraph/flowGraphAnimationHelpers.d.ts +24 -0
- package/FlowGraph/flowGraphAnimationHelpers.js +21 -0
- package/FlowGraph/flowGraphAnimationHelpers.js.map +1 -0
- package/FlowGraph/flowGraphBlock.js +3 -0
- package/FlowGraph/flowGraphBlock.js.map +1 -1
- package/FlowGraph/flowGraphConnection.d.ts +7 -0
- package/FlowGraph/flowGraphConnection.js +7 -0
- package/FlowGraph/flowGraphConnection.js.map +1 -1
- package/FlowGraph/flowGraphContext.d.ts +2 -1
- package/FlowGraph/flowGraphContext.js +5 -3
- package/FlowGraph/flowGraphContext.js.map +1 -1
- package/FlowGraph/flowGraphCoordinator.d.ts +15 -1
- package/FlowGraph/flowGraphCoordinator.js +47 -16
- package/FlowGraph/flowGraphCoordinator.js.map +1 -1
- package/FlowGraph/flowGraphEventBlock.d.ts +5 -0
- package/FlowGraph/flowGraphEventBlock.js +7 -0
- package/FlowGraph/flowGraphEventBlock.js.map +1 -1
- package/FlowGraph/flowGraphHostResolver.d.ts +2 -1
- package/FlowGraph/flowGraphHostResolver.js.map +1 -1
- package/FlowGraph/flowGraphParser.js +60 -2
- package/FlowGraph/flowGraphParser.js.map +1 -1
- package/FlowGraph/flowGraphValidator.js +0 -4
- package/FlowGraph/flowGraphValidator.js.map +1 -1
- package/FlowGraph/index.d.ts +2 -0
- package/FlowGraph/index.js +2 -0
- package/FlowGraph/index.js.map +1 -1
- package/FlowGraph/pure.d.ts +2 -0
- package/FlowGraph/pure.js +2 -0
- package/FlowGraph/pure.js.map +1 -1
- package/FlowGraph/serialization.d.ts +4 -2
- package/FlowGraph/serialization.js +12 -24
- package/FlowGraph/serialization.js.map +1 -1
- package/FlowGraph/typeDefinitions.d.ts +9 -1
- package/FlowGraph/typeDefinitions.js.map +1 -1
- package/FrameGraph/Node/Blocks/PostProcesses/meshBlendingPostProcessBlock.d.ts +5 -0
- package/FrameGraph/Node/Blocks/PostProcesses/meshBlendingPostProcessBlock.js +8 -0
- package/FrameGraph/Node/Blocks/PostProcesses/meshBlendingPostProcessBlock.js.map +1 -0
- package/FrameGraph/Node/Blocks/PostProcesses/meshBlendingPostProcessBlock.pure.d.ts +87 -0
- package/FrameGraph/Node/Blocks/PostProcesses/meshBlendingPostProcessBlock.pure.js +295 -0
- package/FrameGraph/Node/Blocks/PostProcesses/meshBlendingPostProcessBlock.pure.js.map +1 -0
- package/FrameGraph/Node/Blocks/PostProcesses/pure.d.ts +1 -0
- package/FrameGraph/Node/Blocks/PostProcesses/pure.js +1 -0
- package/FrameGraph/Node/Blocks/PostProcesses/pure.js.map +1 -1
- package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.js +4 -4
- package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.js.map +1 -1
- package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.pure.d.ts +5 -1
- package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.pure.js +13 -1
- package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.pure.js.map +1 -1
- package/FrameGraph/Node/Blocks/Textures/minMaxReducerBlock.d.ts +1 -0
- package/FrameGraph/Node/Blocks/Textures/minMaxReducerBlock.js +4 -0
- package/FrameGraph/Node/Blocks/Textures/minMaxReducerBlock.js.map +1 -0
- package/FrameGraph/Node/Blocks/Textures/minMaxReducerBlock.pure.d.ts +54 -0
- package/FrameGraph/Node/Blocks/Textures/minMaxReducerBlock.pure.js +155 -0
- package/FrameGraph/Node/Blocks/Textures/minMaxReducerBlock.pure.js.map +1 -0
- package/FrameGraph/Node/Blocks/Textures/pure.d.ts +1 -0
- package/FrameGraph/Node/Blocks/Textures/pure.js +1 -0
- package/FrameGraph/Node/Blocks/Textures/pure.js.map +1 -1
- package/FrameGraph/Node/Blocks/allBlocks.pure.js +4 -0
- package/FrameGraph/Node/Blocks/allBlocks.pure.js.map +1 -1
- package/FrameGraph/Node/Blocks/index.d.ts +2 -0
- package/FrameGraph/Node/Blocks/index.js +2 -0
- package/FrameGraph/Node/Blocks/index.js.map +1 -1
- package/FrameGraph/Node/Blocks/inputBlock.pure.js +20 -1
- package/FrameGraph/Node/Blocks/inputBlock.pure.js.map +1 -1
- package/FrameGraph/Node/Blocks/pure.d.ts +2 -0
- package/FrameGraph/Node/Blocks/pure.js +2 -0
- package/FrameGraph/Node/Blocks/pure.js.map +1 -1
- package/FrameGraph/Node/Types/nodeRenderGraphTypes.d.ts +4 -2
- package/FrameGraph/Node/Types/nodeRenderGraphTypes.js +4 -2
- package/FrameGraph/Node/Types/nodeRenderGraphTypes.js.map +1 -1
- package/FrameGraph/Node/nodeRenderGraph.js +1 -1
- package/FrameGraph/Node/nodeRenderGraph.js.map +1 -1
- package/FrameGraph/Tasks/Layers/selectionOutlineTask.js +1 -0
- package/FrameGraph/Tasks/Layers/selectionOutlineTask.js.map +1 -1
- package/FrameGraph/Tasks/Misc/cullObjectsTask.js +5 -1
- package/FrameGraph/Tasks/Misc/cullObjectsTask.js.map +1 -1
- package/FrameGraph/Tasks/Misc/lightingVolumeTask.js +1 -0
- package/FrameGraph/Tasks/Misc/lightingVolumeTask.js.map +1 -1
- package/FrameGraph/Tasks/Misc/minMaxReducerTask.d.ts +62 -0
- package/FrameGraph/Tasks/Misc/minMaxReducerTask.js +159 -0
- package/FrameGraph/Tasks/Misc/minMaxReducerTask.js.map +1 -0
- package/FrameGraph/Tasks/PostProcesses/meshBlendingTask.d.ts +69 -0
- package/FrameGraph/Tasks/PostProcesses/meshBlendingTask.js +223 -0
- package/FrameGraph/Tasks/PostProcesses/meshBlendingTask.js.map +1 -0
- package/FrameGraph/Tasks/Rendering/geometryRendererTask.d.ts +25 -3
- package/FrameGraph/Tasks/Rendering/geometryRendererTask.js +72 -34
- package/FrameGraph/Tasks/Rendering/geometryRendererTask.js.map +1 -1
- package/FrameGraph/Tasks/Rendering/objectRendererTask.js +3 -1
- package/FrameGraph/Tasks/Rendering/objectRendererTask.js.map +1 -1
- package/FrameGraph/frameGraph.d.ts +4 -0
- package/FrameGraph/frameGraph.js +14 -0
- package/FrameGraph/frameGraph.js.map +1 -1
- package/FrameGraph/frameGraphObjectList.d.ts +6 -1
- package/FrameGraph/frameGraphObjectList.js.map +1 -1
- package/FrameGraph/frameGraphRenderContext.d.ts +3 -1
- package/FrameGraph/frameGraphRenderContext.js +5 -5
- package/FrameGraph/frameGraphRenderContext.js.map +1 -1
- package/FrameGraph/index.d.ts +2 -0
- package/FrameGraph/index.js +2 -0
- package/FrameGraph/index.js.map +1 -1
- package/FrameGraph/pure.d.ts +2 -0
- package/FrameGraph/pure.js +2 -0
- package/FrameGraph/pure.js.map +1 -1
- package/Inputs/scene.inputManager.d.ts +4 -0
- package/Inputs/scene.inputManager.js +50 -8
- package/Inputs/scene.inputManager.js.map +1 -1
- package/Lights/Clustered/clusteredLightingSceneComponent.pure.d.ts +5 -0
- package/Lights/Clustered/clusteredLightingSceneComponent.pure.js +22 -1
- package/Lights/Clustered/clusteredLightingSceneComponent.pure.js.map +1 -1
- package/Lights/Shadows/cascadedShadowGenerator.pure.js +7 -3
- package/Lights/Shadows/cascadedShadowGenerator.pure.js.map +1 -1
- package/Materials/GaussianSplatting/gaussianPointSplattingBlitMaterial.d.ts +7 -0
- package/Materials/GaussianSplatting/gaussianPointSplattingBlitMaterial.js +8 -0
- package/Materials/GaussianSplatting/gaussianPointSplattingBlitMaterial.js.map +1 -0
- package/Materials/GaussianSplatting/gaussianPointSplattingBlitMaterial.pure.d.ts +54 -0
- package/Materials/GaussianSplatting/gaussianPointSplattingBlitMaterial.pure.js +81 -0
- package/Materials/GaussianSplatting/gaussianPointSplattingBlitMaterial.pure.js.map +1 -0
- package/Materials/GaussianSplatting/gaussianPointSplattingDepthBlitMaterial.d.ts +7 -0
- package/Materials/GaussianSplatting/gaussianPointSplattingDepthBlitMaterial.js +8 -0
- package/Materials/GaussianSplatting/gaussianPointSplattingDepthBlitMaterial.js.map +1 -0
- package/Materials/GaussianSplatting/gaussianPointSplattingDepthBlitMaterial.pure.d.ts +60 -0
- package/Materials/GaussianSplatting/gaussianPointSplattingDepthBlitMaterial.pure.js +90 -0
- package/Materials/GaussianSplatting/gaussianPointSplattingDepthBlitMaterial.pure.js.map +1 -0
- package/Materials/GaussianSplatting/gaussianSplattingDebugMaterialPlugin.pure.d.ts +31 -0
- package/Materials/GaussianSplatting/gaussianSplattingDebugMaterialPlugin.pure.js +103 -5
- package/Materials/GaussianSplatting/gaussianSplattingDebugMaterialPlugin.pure.js.map +1 -1
- package/Materials/GaussianSplatting/gaussianSplattingGpuPickingMaterialPlugin.pure.js +6 -6
- package/Materials/GaussianSplatting/gaussianSplattingGpuPickingMaterialPlugin.pure.js.map +1 -1
- package/Materials/GaussianSplatting/gaussianSplattingMaterial.pure.d.ts +26 -1
- package/Materials/GaussianSplatting/gaussianSplattingMaterial.pure.js +153 -49
- package/Materials/GaussianSplatting/gaussianSplattingMaterial.pure.js.map +1 -1
- package/Materials/GaussianSplatting/gaussianSplattingOverdrawMaterialPlugin.d.ts +1 -0
- package/Materials/GaussianSplatting/gaussianSplattingOverdrawMaterialPlugin.js +4 -0
- package/Materials/GaussianSplatting/gaussianSplattingOverdrawMaterialPlugin.js.map +1 -0
- package/Materials/GaussianSplatting/gaussianSplattingOverdrawMaterialPlugin.pure.d.ts +83 -0
- package/Materials/GaussianSplatting/gaussianSplattingOverdrawMaterialPlugin.pure.js +191 -0
- package/Materials/GaussianSplatting/gaussianSplattingOverdrawMaterialPlugin.pure.js.map +1 -0
- package/Materials/GaussianSplatting/gaussianSplattingSizeMaterialPlugin.d.ts +1 -0
- package/Materials/GaussianSplatting/gaussianSplattingSizeMaterialPlugin.js +4 -0
- package/Materials/GaussianSplatting/gaussianSplattingSizeMaterialPlugin.js.map +1 -0
- package/Materials/GaussianSplatting/gaussianSplattingSizeMaterialPlugin.pure.d.ts +62 -0
- package/Materials/GaussianSplatting/gaussianSplattingSizeMaterialPlugin.pure.js +125 -0
- package/Materials/GaussianSplatting/gaussianSplattingSizeMaterialPlugin.pure.js.map +1 -0
- package/Materials/GaussianSplatting/gaussianSplattingSolidColorMaterialPlugin.pure.js +5 -5
- package/Materials/GaussianSplatting/gaussianSplattingSolidColorMaterialPlugin.pure.js.map +1 -1
- package/Materials/GaussianSplatting/pure.d.ts +4 -0
- package/Materials/GaussianSplatting/pure.js +4 -0
- package/Materials/GaussianSplatting/pure.js.map +1 -1
- package/Materials/Node/Blocks/Dual/imageSourceBlock.pure.d.ts +1 -0
- package/Materials/Node/Blocks/Dual/imageSourceBlock.pure.js +12 -0
- package/Materials/Node/Blocks/Dual/imageSourceBlock.pure.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.pure.js +11 -1
- package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.pure.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/prePassOutputBlock.pure.js +17 -2
- package/Materials/Node/Blocks/Fragment/prePassOutputBlock.pure.js.map +1 -1
- package/Materials/Node/Blocks/GaussianSplatting/gaussianSplattingBlock.pure.js +2 -2
- package/Materials/Node/Blocks/GaussianSplatting/gaussianSplattingBlock.pure.js.map +1 -1
- package/Materials/Node/nodeMaterial.pure.d.ts +4 -0
- package/Materials/Node/nodeMaterial.pure.js +4 -0
- package/Materials/Node/nodeMaterial.pure.js.map +1 -1
- package/Materials/Node/nodeMaterialBuildState.d.ts +1 -1
- package/Materials/Node/nodeMaterialBuildState.js +25 -3
- package/Materials/Node/nodeMaterialBuildState.js.map +1 -1
- package/Materials/PBR/openpbrMaterial.pure.d.ts +2 -0
- package/Materials/PBR/pbrBaseMaterial.pure.d.ts +2 -0
- package/Materials/Textures/Procedurals/proceduralTexture.pure.d.ts +14 -14
- package/Materials/Textures/Procedurals/proceduralTexture.pure.js +37 -13
- package/Materials/Textures/Procedurals/proceduralTexture.pure.js.map +1 -1
- package/Materials/Textures/baseTexture.pure.js +3 -0
- package/Materials/Textures/baseTexture.pure.js.map +1 -1
- package/Materials/Textures/cubeTexture.pure.js +1 -1
- package/Materials/Textures/cubeTexture.pure.js.map +1 -1
- package/Materials/Textures/internalTexture.d.ts +8 -1
- package/Materials/Textures/internalTexture.js +9 -2
- package/Materials/Textures/internalTexture.js.map +1 -1
- package/Materials/Textures/mirrorTexture.pure.js +3 -1
- package/Materials/Textures/mirrorTexture.pure.js.map +1 -1
- package/Materials/Textures/rawTexture2DArray.functions.d.ts +3 -3
- package/Materials/Textures/rawTexture2DArray.functions.js.map +1 -1
- package/Materials/Textures/rawTexture3D.d.ts +1 -1
- package/Materials/Textures/rawTexture3D.js +1 -1
- package/Materials/Textures/rawTexture3D.js.map +1 -1
- package/Materials/Textures/texture.pure.js +1 -1
- package/Materials/Textures/texture.pure.js.map +1 -1
- package/Materials/Textures/textureHelper.functions.d.ts +14 -0
- package/Materials/Textures/textureHelper.functions.js +24 -0
- package/Materials/Textures/textureHelper.functions.js.map +1 -1
- package/Materials/ditheredTileFadeMaterialPlugin.d.ts +210 -0
- package/Materials/ditheredTileFadeMaterialPlugin.js +509 -0
- package/Materials/ditheredTileFadeMaterialPlugin.js.map +1 -0
- package/Materials/effectRenderer.pure.d.ts +4 -0
- package/Materials/effectRenderer.pure.js +3 -2
- package/Materials/effectRenderer.pure.js.map +1 -1
- package/Materials/index.d.ts +5 -0
- package/Materials/index.js +5 -0
- package/Materials/index.js.map +1 -1
- package/Materials/material.pure.js +25 -12
- package/Materials/material.pure.js.map +1 -1
- package/Materials/materialHelper.geometryrendering.d.ts +46 -1
- package/Materials/materialHelper.geometryrendering.js +105 -8
- package/Materials/materialHelper.geometryrendering.js.map +1 -1
- package/Materials/prepass.defines.d.ts +2 -0
- package/Materials/prepass.defines.js +2 -0
- package/Materials/prepass.defines.js.map +1 -1
- package/Materials/pure.d.ts +5 -0
- package/Materials/pure.js +5 -0
- package/Materials/pure.js.map +1 -1
- package/Materials/standardMaterial.pure.d.ts +10 -0
- package/Materials/standardMaterial.pure.js +30 -5
- package/Materials/standardMaterial.pure.js.map +1 -1
- package/Meshes/Builders/polygonBuilder.pure.d.ts +4 -0
- package/Meshes/Builders/polygonBuilder.pure.js +3 -0
- package/Meshes/Builders/polygonBuilder.pure.js.map +1 -1
- package/Meshes/GaussianSplatting/gaussianPointSplattingController.d.ts +8 -0
- package/Meshes/GaussianSplatting/gaussianPointSplattingController.js +11 -0
- package/Meshes/GaussianSplatting/gaussianPointSplattingController.js.map +1 -0
- package/Meshes/GaussianSplatting/gaussianPointSplattingController.pure.d.ts +231 -0
- package/Meshes/GaussianSplatting/gaussianPointSplattingController.pure.js +1212 -0
- package/Meshes/GaussianSplatting/gaussianPointSplattingController.pure.js.map +1 -0
- package/Meshes/GaussianSplatting/gaussianPointSplattingRenderer.d.ts +14 -0
- package/Meshes/GaussianSplatting/gaussianPointSplattingRenderer.js +15 -0
- package/Meshes/GaussianSplatting/gaussianPointSplattingRenderer.js.map +1 -0
- package/Meshes/GaussianSplatting/gaussianPointSplattingRenderer.pure.d.ts +285 -0
- package/Meshes/GaussianSplatting/gaussianPointSplattingRenderer.pure.js +812 -0
- package/Meshes/GaussianSplatting/gaussianPointSplattingRenderer.pure.js.map +1 -0
- package/Meshes/GaussianSplatting/gaussianSplatting.functions.d.ts +19 -0
- package/Meshes/GaussianSplatting/gaussianSplatting.functions.js +23 -0
- package/Meshes/GaussianSplatting/gaussianSplatting.functions.js.map +1 -0
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.d.ts +1 -0
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.js +2 -0
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.js.map +1 -1
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.pure.d.ts +163 -14
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.pure.js +239 -24
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.pure.js.map +1 -1
- package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.pure.d.ts +34 -4
- package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.pure.js +125 -25
- package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.pure.js.map +1 -1
- package/Meshes/GaussianSplatting/pure.d.ts +2 -0
- package/Meshes/GaussianSplatting/pure.js +2 -0
- package/Meshes/GaussianSplatting/pure.js.map +1 -1
- package/Meshes/Node/Blocks/booleanGeometryBlock.pure.js +25 -11
- package/Meshes/Node/Blocks/booleanGeometryBlock.pure.js.map +1 -1
- package/Meshes/abstractMesh.pure.d.ts +30 -0
- package/Meshes/abstractMesh.pure.js +54 -0
- package/Meshes/abstractMesh.pure.js.map +1 -1
- package/Meshes/index.d.ts +2 -0
- package/Meshes/index.js +2 -0
- package/Meshes/index.js.map +1 -1
- package/Meshes/instancedMesh.pure.d.ts +5 -0
- package/Meshes/instancedMesh.pure.js +12 -0
- package/Meshes/instancedMesh.pure.js.map +1 -1
- package/Meshes/mesh.pure.js +23 -8
- package/Meshes/mesh.pure.js.map +1 -1
- package/Meshes/meshBlendingTag.d.ts +47 -0
- package/Meshes/meshBlendingTag.js +64 -0
- package/Meshes/meshBlendingTag.js.map +1 -0
- package/Meshes/polygonMesh.js +2 -2
- package/Meshes/polygonMesh.js.map +1 -1
- package/Meshes/pure.d.ts +2 -0
- package/Meshes/pure.js +2 -0
- package/Meshes/pure.js.map +1 -1
- package/Meshes/subMesh.pure.d.ts +11 -2
- package/Meshes/subMesh.pure.js +20 -5
- package/Meshes/subMesh.pure.js.map +1 -1
- package/Meshes/thinInstanceMesh.pure.js +1 -0
- package/Meshes/thinInstanceMesh.pure.js.map +1 -1
- package/Misc/andOrNotEvaluator.js +4 -0
- package/Misc/andOrNotEvaluator.js.map +1 -1
- package/Misc/fileTools.pure.js +21 -0
- package/Misc/fileTools.pure.js.map +1 -1
- package/Misc/minMaxReducer.pure.d.ts +6 -0
- package/Misc/minMaxReducer.pure.js +10 -0
- package/Misc/minMaxReducer.pure.js.map +1 -1
- package/Misc/snapshotRenderingHelper.js +2 -2
- package/Misc/snapshotRenderingHelper.js.map +1 -1
- package/Misc/thinMinMaxReducer.d.ts +19 -2
- package/Misc/thinMinMaxReducer.js +74 -21
- package/Misc/thinMinMaxReducer.js.map +1 -1
- package/Misc/tools.pure.js +1 -1
- package/Misc/tools.pure.js.map +1 -1
- package/Particles/Node/Blocks/Update/updateNoiseBlock.pure.js +19 -7
- package/Particles/Node/Blocks/Update/updateNoiseBlock.pure.js.map +1 -1
- package/Particles/Node/Blocks/particleSourceTextureBlock.pure.js +3 -2
- package/Particles/Node/Blocks/particleSourceTextureBlock.pure.js.map +1 -1
- package/Particles/gpuParticleSystem.pure.d.ts +4 -0
- package/Particles/gpuParticleSystem.pure.js +101 -32
- package/Particles/gpuParticleSystem.pure.js.map +1 -1
- package/Particles/particle.js +3 -2
- package/Particles/particle.js.map +1 -1
- package/Particles/solidParticleSystem.js +7 -1
- package/Particles/solidParticleSystem.js.map +1 -1
- package/Particles/thinParticleSystem.function.d.ts +6 -0
- package/Particles/thinParticleSystem.function.js +144 -88
- package/Particles/thinParticleSystem.function.js.map +1 -1
- package/Particles/thinParticleSystem.pure.d.ts +8 -0
- package/Particles/thinParticleSystem.pure.js +154 -28
- package/Particles/thinParticleSystem.pure.js.map +1 -1
- package/Particles/webgl2ParticleSystem.pure.d.ts +1 -0
- package/Particles/webgl2ParticleSystem.pure.js +12 -4
- package/Particles/webgl2ParticleSystem.pure.js.map +1 -1
- package/Physics/v2/ragdoll.d.ts +2 -4
- package/Physics/v2/ragdoll.js +11 -4
- package/Physics/v2/ragdoll.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/lensRenderingPipeline.pure.js +7 -0
- package/PostProcesses/RenderPipeline/Pipelines/lensRenderingPipeline.pure.js.map +1 -1
- package/PostProcesses/index.d.ts +2 -0
- package/PostProcesses/index.js +2 -0
- package/PostProcesses/index.js.map +1 -1
- package/PostProcesses/meshBlendingBlueNoise.d.ts +15 -0
- package/PostProcesses/meshBlendingBlueNoise.js +77 -0
- package/PostProcesses/meshBlendingBlueNoise.js.map +1 -0
- package/PostProcesses/meshBlendingPostProcess.d.ts +131 -0
- package/PostProcesses/meshBlendingPostProcess.js +315 -0
- package/PostProcesses/meshBlendingPostProcess.js.map +1 -0
- package/PostProcesses/pure.d.ts +2 -0
- package/PostProcesses/pure.js +2 -0
- package/PostProcesses/pure.js.map +1 -1
- package/PostProcesses/thinMeshBlendingPostProcess.d.ts +339 -0
- package/PostProcesses/thinMeshBlendingPostProcess.js +771 -0
- package/PostProcesses/thinMeshBlendingPostProcess.js.map +1 -0
- package/Rendering/IBLShadows/iblShadowsRenderPipeline.pure.js +6 -6
- package/Rendering/IBLShadows/iblShadowsRenderPipeline.pure.js.map +1 -1
- package/Rendering/IBLShadows/iblShadowsVoxelRenderer.pure.d.ts +12 -0
- package/Rendering/IBLShadows/iblShadowsVoxelRenderer.pure.js +50 -25
- package/Rendering/IBLShadows/iblShadowsVoxelRenderer.pure.js.map +1 -1
- package/Rendering/boundingBoxRenderer.pure.js +2 -1
- package/Rendering/boundingBoxRenderer.pure.js.map +1 -1
- package/Rendering/depthRenderer.pure.d.ts +9 -0
- package/Rendering/depthRenderer.pure.js +15 -4
- package/Rendering/depthRenderer.pure.js.map +1 -1
- package/Rendering/edgesRenderer.pure.d.ts +4 -2
- package/Rendering/edgesRenderer.pure.js +11 -2
- package/Rendering/edgesRenderer.pure.js.map +1 -1
- package/Rendering/fluidRenderer/fluidRenderingObject.d.ts +14 -0
- package/Rendering/fluidRenderer/fluidRenderingObject.js +26 -0
- package/Rendering/fluidRenderer/fluidRenderingObject.js.map +1 -1
- package/Rendering/fluidRenderer/fluidRenderingObjectParticleSystem.d.ts +13 -3
- package/Rendering/fluidRenderer/fluidRenderingObjectParticleSystem.js +22 -9
- package/Rendering/fluidRenderer/fluidRenderingObjectParticleSystem.js.map +1 -1
- package/Rendering/fluidRenderer/fluidRenderingTargetRenderer.js +3 -0
- package/Rendering/fluidRenderer/fluidRenderingTargetRenderer.js.map +1 -1
- package/Rendering/geometryBufferRenderer.pure.d.ts +38 -4
- package/Rendering/geometryBufferRenderer.pure.js +130 -18
- package/Rendering/geometryBufferRenderer.pure.js.map +1 -1
- package/Rendering/objectRenderer.d.ts +7 -1
- package/Rendering/objectRenderer.js +45 -7
- package/Rendering/objectRenderer.js.map +1 -1
- package/Rendering/outlineRenderer.pure.js +6 -2
- package/Rendering/outlineRenderer.pure.js.map +1 -1
- package/Rendering/prePassRenderer.pure.js +3 -3
- package/Rendering/prePassRenderer.pure.js.map +1 -1
- package/Rendering/renderingManager.d.ts +1 -1
- package/Rendering/renderingManager.js +5 -4
- package/Rendering/renderingManager.js.map +1 -1
- package/Shaders/ShadersInclude/defaultFragmentAlpha.d.ts +5 -0
- package/Shaders/ShadersInclude/defaultFragmentAlpha.js +34 -0
- package/Shaders/ShadersInclude/defaultFragmentAlpha.js.map +1 -0
- package/Shaders/ShadersInclude/gaussianSplatting.js +3 -1
- package/Shaders/ShadersInclude/gaussianSplatting.js.map +1 -1
- package/Shaders/ShadersInclude/gaussianSplattingVertexDeclaration.js +5 -1
- package/Shaders/ShadersInclude/gaussianSplattingVertexDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/geometryRenderingFragment.d.ts +5 -0
- package/Shaders/ShadersInclude/geometryRenderingFragment.js +74 -0
- package/Shaders/ShadersInclude/geometryRenderingFragment.js.map +1 -0
- package/Shaders/ShadersInclude/lightsFragmentFunctions.js +27 -3
- package/Shaders/ShadersInclude/lightsFragmentFunctions.js.map +1 -1
- package/Shaders/ShadersInclude/mrtFragmentDeclaration.js +89 -0
- package/Shaders/ShadersInclude/mrtFragmentDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/oitDeclaration.js +1 -1
- package/Shaders/ShadersInclude/oitDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/openpbrBlockPrePass.js +24 -17
- package/Shaders/ShadersInclude/openpbrBlockPrePass.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockPrePass.js +27 -20
- package/Shaders/ShadersInclude/pbrBlockPrePass.js.map +1 -1
- package/Shaders/ShadersInclude/pbrDebug.js +6 -2
- package/Shaders/ShadersInclude/pbrDebug.js.map +1 -1
- package/Shaders/ShadersInclude/prePassDeclaration.js +95 -2
- package/Shaders/ShadersInclude/prePassDeclaration.js.map +1 -1
- package/Shaders/default.fragment.js +31 -40
- package/Shaders/default.fragment.js.map +1 -1
- package/Shaders/depthOfField.fragment.js +13 -9
- package/Shaders/depthOfField.fragment.js.map +1 -1
- package/Shaders/fluidRenderingParticleDepth.vertex.js +16 -1
- package/Shaders/fluidRenderingParticleDepth.vertex.js.map +1 -1
- package/Shaders/fluidRenderingParticleThickness.vertex.js +16 -1
- package/Shaders/fluidRenderingParticleThickness.vertex.js.map +1 -1
- package/Shaders/gaussianSplatting.fragment.js +63 -3
- package/Shaders/gaussianSplatting.fragment.js.map +1 -1
- package/Shaders/gaussianSplatting.vertex.js +80 -0
- package/Shaders/gaussianSplatting.vertex.js.map +1 -1
- package/Shaders/geometry.fragment.js +17 -11
- package/Shaders/geometry.fragment.js.map +1 -1
- package/Shaders/gpuRenderParticles.fragment.js +43 -1
- package/Shaders/gpuRenderParticles.fragment.js.map +1 -1
- package/Shaders/gpuRenderParticles.vertex.js +96 -16
- package/Shaders/gpuRenderParticles.vertex.js.map +1 -1
- package/Shaders/meshBlending.fragment.d.ts +5 -0
- package/Shaders/meshBlending.fragment.js +519 -0
- package/Shaders/meshBlending.fragment.js.map +1 -0
- package/Shaders/minmaxRedux.fragment.js +6 -1
- package/Shaders/minmaxRedux.fragment.js.map +1 -1
- package/Shaders/particles.fragment.js +43 -1
- package/Shaders/particles.fragment.js.map +1 -1
- package/Shaders/particles.vertex.js +84 -3
- package/Shaders/particles.vertex.js.map +1 -1
- package/Shaders/sprites.fragment.js +52 -2
- package/Shaders/sprites.fragment.js.map +1 -1
- package/Shaders/sprites.vertex.js +62 -1
- package/Shaders/sprites.vertex.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/defaultFragmentAlpha.d.ts +5 -0
- package/ShadersWGSL/ShadersInclude/defaultFragmentAlpha.js +33 -0
- package/ShadersWGSL/ShadersInclude/defaultFragmentAlpha.js.map +1 -0
- package/ShadersWGSL/ShadersInclude/gaussianPointSplatting.d.ts +5 -0
- package/ShadersWGSL/ShadersInclude/gaussianPointSplatting.js +65 -0
- package/ShadersWGSL/ShadersInclude/gaussianPointSplatting.js.map +1 -0
- package/ShadersWGSL/ShadersInclude/gaussianPointSplattingScan.d.ts +5 -0
- package/ShadersWGSL/ShadersInclude/gaussianPointSplattingScan.js +17 -0
- package/ShadersWGSL/ShadersInclude/gaussianPointSplattingScan.js.map +1 -0
- package/ShadersWGSL/ShadersInclude/gaussianSplatting.d.ts +1 -0
- package/ShadersWGSL/ShadersInclude/gaussianSplatting.js +6 -78
- package/ShadersWGSL/ShadersInclude/gaussianSplatting.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/gaussianSplattingFragmentDeclaration.js +2 -2
- package/ShadersWGSL/ShadersInclude/gaussianSplattingFragmentDeclaration.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/gaussianSplattingShared.d.ts +5 -0
- package/ShadersWGSL/ShadersInclude/gaussianSplattingShared.js +79 -0
- package/ShadersWGSL/ShadersInclude/gaussianSplattingShared.js.map +1 -0
- package/ShadersWGSL/ShadersInclude/geometryRenderingFragment.d.ts +6 -0
- package/ShadersWGSL/ShadersInclude/geometryRenderingFragment.js +76 -0
- package/ShadersWGSL/ShadersInclude/geometryRenderingFragment.js.map +1 -0
- package/ShadersWGSL/ShadersInclude/lightFragment.js +1 -1
- package/ShadersWGSL/ShadersInclude/lightFragment.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/lightsFragmentFunctions.js +27 -3
- package/ShadersWGSL/ShadersInclude/lightsFragmentFunctions.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/meshBlendTagFragmentOutput.d.ts +5 -0
- package/ShadersWGSL/ShadersInclude/meshBlendTagFragmentOutput.js +18 -0
- package/ShadersWGSL/ShadersInclude/meshBlendTagFragmentOutput.js.map +1 -0
- package/ShadersWGSL/ShadersInclude/openpbrBlockPrePass.d.ts +1 -0
- package/ShadersWGSL/ShadersInclude/openpbrBlockPrePass.js +11 -25
- package/ShadersWGSL/ShadersInclude/openpbrBlockPrePass.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/pbrBlockPrePass.d.ts +1 -0
- package/ShadersWGSL/ShadersInclude/pbrBlockPrePass.js +11 -25
- package/ShadersWGSL/ShadersInclude/pbrBlockPrePass.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/pbrDebug.js +5 -1
- package/ShadersWGSL/ShadersInclude/pbrDebug.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/prePassDeclaration.js +6 -1
- package/ShadersWGSL/ShadersInclude/prePassDeclaration.js.map +1 -1
- package/ShadersWGSL/default.fragment.js +17 -48
- package/ShadersWGSL/default.fragment.js.map +1 -1
- package/ShadersWGSL/fluidRenderingParticleDepth.vertex.js +15 -2
- package/ShadersWGSL/fluidRenderingParticleDepth.vertex.js.map +1 -1
- package/ShadersWGSL/fluidRenderingParticleThickness.vertex.js +15 -2
- package/ShadersWGSL/fluidRenderingParticleThickness.vertex.js.map +1 -1
- package/ShadersWGSL/gaussianPointSplattingBlit.fragment.d.ts +5 -0
- package/ShadersWGSL/gaussianPointSplattingBlit.fragment.js +22 -0
- package/ShadersWGSL/gaussianPointSplattingBlit.fragment.js.map +1 -0
- package/ShadersWGSL/gaussianPointSplattingBlit.vertex.d.ts +5 -0
- package/ShadersWGSL/gaussianPointSplattingBlit.vertex.js +19 -0
- package/ShadersWGSL/gaussianPointSplattingBlit.vertex.js.map +1 -0
- package/ShadersWGSL/gaussianPointSplattingDepthBlit.fragment.d.ts +5 -0
- package/ShadersWGSL/gaussianPointSplattingDepthBlit.fragment.js +21 -0
- package/ShadersWGSL/gaussianPointSplattingDepthBlit.fragment.js.map +1 -0
- package/ShadersWGSL/gaussianSplatting.fragment.js +63 -2
- package/ShadersWGSL/gaussianSplatting.fragment.js.map +1 -1
- package/ShadersWGSL/gaussianSplatting.vertex.js +82 -1
- package/ShadersWGSL/gaussianSplatting.vertex.js.map +1 -1
- package/ShadersWGSL/gaussianSplattingDepth.vertex.js +2 -1
- package/ShadersWGSL/gaussianSplattingDepth.vertex.js.map +1 -1
- package/ShadersWGSL/gaussianSplattingVoxel.vertex.js +2 -1
- package/ShadersWGSL/gaussianSplattingVoxel.vertex.js.map +1 -1
- package/ShadersWGSL/geometry.fragment.js +37 -2
- package/ShadersWGSL/geometry.fragment.js.map +1 -1
- package/ShadersWGSL/gpsHiZBuild.compute.d.ts +5 -0
- package/ShadersWGSL/gpsHiZBuild.compute.js +16 -0
- package/ShadersWGSL/gpsHiZBuild.compute.js.map +1 -0
- package/ShadersWGSL/gpsPartition.compute.d.ts +5 -0
- package/ShadersWGSL/gpsPartition.compute.js +27 -0
- package/ShadersWGSL/gpsPartition.compute.js.map +1 -0
- package/ShadersWGSL/gpsPreprocess.compute.d.ts +5 -0
- package/ShadersWGSL/gpsPreprocess.compute.js +86 -0
- package/ShadersWGSL/gpsPreprocess.compute.js.map +1 -0
- package/ShadersWGSL/gpsResolve.compute.d.ts +5 -0
- package/ShadersWGSL/gpsResolve.compute.js +41 -0
- package/ShadersWGSL/gpsResolve.compute.js.map +1 -0
- package/ShadersWGSL/gpsScanAdd.compute.d.ts +5 -0
- package/ShadersWGSL/gpsScanAdd.compute.js +22 -0
- package/ShadersWGSL/gpsScanAdd.compute.js.map +1 -0
- package/ShadersWGSL/gpsScanBlocks.compute.d.ts +5 -0
- package/ShadersWGSL/gpsScanBlocks.compute.js +23 -0
- package/ShadersWGSL/gpsScanBlocks.compute.js.map +1 -0
- package/ShadersWGSL/gpsScanSums.compute.d.ts +5 -0
- package/ShadersWGSL/gpsScanSums.compute.js +30 -0
- package/ShadersWGSL/gpsScanSums.compute.js.map +1 -0
- package/ShadersWGSL/gpsSplat.compute.d.ts +5 -0
- package/ShadersWGSL/gpsSplat.compute.js +37 -0
- package/ShadersWGSL/gpsSplat.compute.js.map +1 -0
- package/ShadersWGSL/gpuRenderParticles.fragment.js +47 -2
- package/ShadersWGSL/gpuRenderParticles.fragment.js.map +1 -1
- package/ShadersWGSL/gpuRenderParticles.vertex.js +110 -7
- package/ShadersWGSL/gpuRenderParticles.vertex.js.map +1 -1
- package/ShadersWGSL/meshBlending.fragment.d.ts +5 -0
- package/ShadersWGSL/meshBlending.fragment.js +576 -0
- package/ShadersWGSL/meshBlending.fragment.js.map +1 -0
- package/ShadersWGSL/minmaxRedux.fragment.js +20 -3
- package/ShadersWGSL/minmaxRedux.fragment.js.map +1 -1
- package/ShadersWGSL/openpbr.fragment.js +2 -1
- package/ShadersWGSL/openpbr.fragment.js.map +1 -1
- package/ShadersWGSL/particles.fragment.js +45 -1
- package/ShadersWGSL/particles.fragment.js.map +1 -1
- package/ShadersWGSL/particles.vertex.js +86 -4
- package/ShadersWGSL/particles.vertex.js.map +1 -1
- package/ShadersWGSL/pbr.fragment.js +2 -1
- package/ShadersWGSL/pbr.fragment.js.map +1 -1
- package/ShadersWGSL/sprites.fragment.js +56 -2
- package/ShadersWGSL/sprites.fragment.js.map +1 -1
- package/ShadersWGSL/sprites.vertex.js +62 -1
- package/ShadersWGSL/sprites.vertex.js.map +1 -1
- package/Sprites/spriteManager.d.ts +13 -0
- package/Sprites/spriteManager.js +15 -0
- package/Sprites/spriteManager.js.map +1 -1
- package/Sprites/spriteRenderer.d.ts +24 -1
- package/Sprites/spriteRenderer.js +368 -50
- package/Sprites/spriteRenderer.js.map +1 -1
- package/Sprites/thinSprite.d.ts +4 -0
- package/Sprites/thinSprite.js +4 -0
- package/Sprites/thinSprite.js.map +1 -1
- package/States/alphaCullingState.d.ts +3 -1
- package/States/alphaCullingState.js +18 -3
- package/States/alphaCullingState.js.map +1 -1
- package/XR/features/WebXRSpaceWarp.pure.js +2 -1
- package/XR/features/WebXRSpaceWarp.pure.js.map +1 -1
- package/XR/webXRDefaultExperience.d.ts +5 -1
- package/XR/webXRDefaultExperience.js.map +1 -1
- package/XR/webXREnterExitUI.d.ts +2 -1
- package/XR/webXREnterExitUI.js.map +1 -1
- package/assetContainer.d.ts +1 -0
- package/assetContainer.js +5 -1
- package/assetContainer.js.map +1 -1
- package/package.json +1 -1
- package/scene.pure.d.ts +36 -2
- package/scene.pure.js +63 -4
- package/scene.pure.js.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"updateNoiseBlock.pure.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/Particles/Node/Blocks/Update/updateNoiseBlock.pure.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAW7D,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAC1E,OAAO,EAAE,qCAAqC,EAAE,MAAM,iEAAiE,CAAC;AACxH,OAAO,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD;;GAEG;AACH,MAAM,OAAO,gBAAiB,SAAQ,iBAAiB;IACnD;;;OAGG;IACH,YAAmB,IAAY;QAC3B,KAAK,CAAC,IAAI,CAAC,CAAC;QAEZ,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,qCAAqC,CAAC,QAAQ,CAAC,CAAC;QAC/E,IAAI,CAAC,aAAa,CAAC,cAAc,EAAE,qCAAqC,CAAC,OAAO,CAAC,CAAC;QAClF,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,qCAAqC,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;QAChH,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,qCAAqC,CAAC,QAAQ,CAAC,CAAC;IAClF,CAAC;IAED;;OAEG;IACH,IAAW,QAAQ;QACf,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,IAAW,YAAY;QACnB,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,IAAW,QAAQ;QACf,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,IAAW,MAAM;QACb,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC;IAED;;;OAGG;IACa,YAAY;QACxB,OAAO,kBAAkB,CAAC;IAC9B,CAAC;IAED;;;OAGG;IACa,MAAM,CAAC,KAA6B;QAChD,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,KAAK,CAAuB,CAAC;QAE5E,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,KAAK,CAAY,CAAC;QACnE,IAAI,CAAC,QAAQ,EAAE,CAAC;YACZ,OAAO;QACX,CAAC;QAED,MAAM,iBAAiB,GAAG,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,UAAwC,CAAC;QACrG,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACrB,OAAO;QACX,CAAC;QAED,2DAA2D;QAC3D,IAAI,gBAAgB,GAA6C,IAAI,CAAC;QACtE,IAAI,gBAAgB,GAAoB,IAAI,CAAC;QAC7C,IAAI,WAAW,GAAG,CAAC,CAAC,CAAC;QAErB,KAAK,CAAC,oBAAoB,CACtB,CAAC,KAAK,IAAI,EAAE;YACR,IAAI,CAAC;gBACD,MAAM,cAAc,GAAG,MAAM,iBAAiB,CAAC,0BAA0B,EAAE,CAAC;gBAC5E,IAAI,CAAC,cAAc,EAAE,CAAC;oBAClB,OAAO;gBACX,CAAC;gBACD,gBAAgB,GAAG,cAAc,CAAC,IAAI,CAAC;gBACvC,gBAAgB,GAAG,EAAE,KAAK,EAAE,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,cAAc,CAAC,MAAM,EAAE,CAAC;gBAClF,WAAW,GAAI,iBAAiB,CAAC,aAAa,CAAC,YAAkC,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC;YACxH,CAAC;YAAC,MAAM,CAAC;gBACL,OAAO;YACX,CAAC;QACL,CAAC,CAAC,EAAE,CACP,CAAC;QAEF,MAAM,YAAY,GAAG,CAAC,QAAkB,EAAE,EAAE;YACxC,wFAAwF;YACxF,yCAAyC;YACzC,MAAM,OAAO,GAAG,iBAAiB,CAAC,aAAa,CAAC,YAAiC,CAAC;YAClF,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;gBACjC,OAAO;YACX,CAAC;YAED,uEAAuE;YACvE,MAAM,cAAc,GAAG,OAAO,CAAC,QAAQ,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC;YAC9D,IAAI,cAAc,KAAK,WAAW,EAAE,CAAC;gBACjC,WAAW,GAAG,cAAc,CAAC;gBAE7B,6CAA6C;gBAC7C,IAAI,CAAC,gBAAgB,EAAE,CAAC;oBACpB,gBAAgB,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;gBACzC,CAAC;gBAED,mFAAmF;gBACnF,OAAO,CAAC,UAAU,EAAE,EAAE,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;oBAChC,gBAAgB,GAAG,IAAkB,CAAC;gBAC1C,CAAC,CAAC,CAAC;YACP,CAAC;YAED,yCAAyC;YACzC,IAAI,CAAC,gBAAgB,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACzC,OAAO;YACX,CAAC;YAED,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,uBAAuB,EAAE,CAAC;gBAChD,QAAQ,CAAC,WAAW,CAAC,uBAAuB,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;YAC5G,CAAC;YAED,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,uBAAuB,EAAE,CAAC;gBAChD,QAAQ,CAAC,WAAW,CAAC,uBAAuB,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;YAC5G,CAAC;YAED,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,CAChC,QAAQ,CAAC,WAAW,CAAC,uBAAuB,CAAC,CAAC,EAC9C,QAAQ,CAAC,WAAW,CAAC,uBAAuB,CAAC,CAAC,EAC9C,gBAAgB,CAAC,KAAK,EACtB,gBAAgB,CAAC,MAAM,EACvB,gBAAgB,CACnB,CAAC;YACF,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,CAChC,QAAQ,CAAC,WAAW,CAAC,uBAAuB,CAAC,CAAC,EAC9C,QAAQ,CAAC,WAAW,CAAC,uBAAuB,CAAC,CAAC,EAC9C,gBAAgB,CAAC,KAAK,EACtB,gBAAgB,CAAC,MAAM,EACvB,gBAAgB,CACnB,CAAC;YACF,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,CAChC,QAAQ,CAAC,WAAW,CAAC,uBAAuB,CAAC,CAAC,EAC9C,QAAQ,CAAC,WAAW,CAAC,uBAAuB,CAAC,CAAC,EAC9C,gBAAgB,CAAC,KAAK,EACtB,gBAAgB,CAAC,MAAM,EACvB,gBAAgB,CACnB,CAAC;YAEF,MAAM,KAAK,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YACpC,MAAM,WAAW,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAE1C,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,aAAa,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,aAAa,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,aAAa,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;YAEvI,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,sBAAsB,EAAE,WAAW,CAAC,CAAC;YAC7D,QAAQ,CAAC,SAAS,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;QAC/C,CAAC,CAAC;QAEF,MAAM,eAAe,GAAG;YACpB,OAAO,EAAE,YAAY;YACrB,YAAY,EAAE,IAAI;YAClB,QAAQ,EAAE,IAAI;SACjB,CAAC;QAEF,IAAI,MAAM,CAAC,iBAAiB,EAAE,CAAC;YAC3B,gBAAgB,CAAC,eAAe,EAAE,MAAM,CAAC,iBAAiB,CAAC,CAAC;QAChE,CAAC;aAAM,CAAC;YACJ,MAAM,CAAC,iBAAiB,GAAG,eAAe,CAAC;QAC/C,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,YAAY,GAAG,MAAM,CAAC;IACtC,CAAC;CACJ;AAED,IAAI,WAAW,GAAG,KAAK,CAAC;AACxB;;;GAGG;AACH,MAAM,UAAU,wBAAwB;IACpC,IAAI,WAAW,EAAE,CAAC;QACd,OAAO;IACX,CAAC;IACD,WAAW,GAAG,IAAI,CAAC;IAEnB,aAAa,CAAC,0BAA0B,EAAE,gBAAgB,CAAC,CAAC;AAChE,CAAC","sourcesContent":["/** This file must only contain pure code and pure imports */\r\n\r\nimport { type Nullable } from \"core/types\";\r\nimport { type ISize } from \"core/Maths/math.size\";\r\nimport { type ProceduralTexture } from \"core/Materials/Textures/Procedurals/proceduralTexture.pure\";\r\nimport { type Particle } from \"core/Particles/particle\";\r\nimport { type ThinParticleSystem } from \"core/Particles/thinParticleSystem.pure\";\r\nimport { type NodeParticleConnectionPoint } from \"core/Particles/Node/nodeParticleBlockConnectionPoint\";\r\nimport { type NodeParticleBuildState } from \"core/Particles/Node/nodeParticleBuildState\";\r\nimport { type ParticleTextureSourceBlock } from \"core/Particles/Node/Blocks/particleSourceTextureBlock.pure\";\r\n\r\nimport { TmpVectors, Vector3 } from \"core/Maths/math.vector.pure\";\r\nimport { NodeParticleBlock } from \"core/Particles/Node/nodeParticleBlock\";\r\nimport { NodeParticleBlockConnectionPointTypes } from \"core/Particles/Node/Enums/nodeParticleBlockConnectionPointTypes\";\r\nimport { _ConnectAtTheEnd } from \"core/Particles/Queue/executionQueue\";\r\nimport { RegisterClass } from \"core/Misc/typeStore\";\r\n\r\n/**\r\n * Block used to update particle position based on a noise texture\r\n */\r\nexport class UpdateNoiseBlock extends NodeParticleBlock {\r\n /**\r\n * Create a new UpdateNoiseBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name);\r\n\r\n this.registerInput(\"particle\", NodeParticleBlockConnectionPointTypes.Particle);\r\n this.registerInput(\"noiseTexture\", NodeParticleBlockConnectionPointTypes.Texture);\r\n this.registerInput(\"strength\", NodeParticleBlockConnectionPointTypes.Vector3, true, new Vector3(100, 100, 100));\r\n this.registerOutput(\"output\", NodeParticleBlockConnectionPointTypes.Particle);\r\n }\r\n\r\n /**\r\n * Gets the particle component\r\n */\r\n public get particle(): NodeParticleConnectionPoint {\r\n return this._inputs[0];\r\n }\r\n\r\n /**\r\n * Gets the noiseTexture input component\r\n */\r\n public get noiseTexture(): NodeParticleConnectionPoint {\r\n return this._inputs[1];\r\n }\r\n\r\n /**\r\n * Gets the strength input component\r\n */\r\n public get strength(): NodeParticleConnectionPoint {\r\n return this._inputs[2];\r\n }\r\n\r\n /**\r\n * Gets the output component\r\n */\r\n public get output(): NodeParticleConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n /**\r\n * Gets the current class name\r\n * @returns the class name\r\n */\r\n public override getClassName() {\r\n return \"UpdateNoiseBlock\";\r\n }\r\n\r\n /**\r\n * Builds the block\r\n * @param state defines the current build state\r\n */\r\n public override _build(state: NodeParticleBuildState) {\r\n const system = this.particle.getConnectedValue(state) as ThinParticleSystem;\r\n\r\n const strength = this.strength.getConnectedValue(state) as Vector3;\r\n if (!strength) {\r\n return;\r\n }\r\n\r\n const noiseTextureBlock = this.noiseTexture.connectedPoint?.ownerBlock as ParticleTextureSourceBlock;\r\n if (!noiseTextureBlock) {\r\n return;\r\n }\r\n\r\n // These will be updated each frame for procedural textures\r\n let noiseTextureData: Nullable<Uint8Array | Uint8ClampedArray> = null;\r\n let noiseTextureSize: Nullable<ISize> = null;\r\n let lastFrameId = -1;\r\n\r\n state.registerBuildPromise(\r\n (async () => {\r\n try {\r\n const textureContent = await noiseTextureBlock.extractTextureContentAsync();\r\n if (!textureContent) {\r\n return;\r\n }\r\n noiseTextureData = textureContent.data;\r\n noiseTextureSize = { width: textureContent.width, height: textureContent.height };\r\n lastFrameId = (noiseTextureBlock.textureOutput._storedValue as ProceduralTexture)?.getScene?.()?.getFrameId() ?? -1;\r\n } catch {\r\n return;\r\n }\r\n })()\r\n );\r\n\r\n const processNoise = (particle: Particle) => {\r\n // Get the texture directly from the block's stored value to support procedural textures\r\n // (as the block caches the texture data)\r\n const texture = noiseTextureBlock.textureOutput._storedValue as ProceduralTexture;\r\n if (!texture || !texture.isReady()) {\r\n return;\r\n }\r\n\r\n // Fetch fresh texture data once per frame (like in thinParticleSystem)\r\n const currentFrameId = texture.getScene()?.getFrameId() ?? -1;\r\n if (currentFrameId !== lastFrameId) {\r\n lastFrameId = currentFrameId;\r\n\r\n // Texture size only needs to be fetched once\r\n if (!noiseTextureSize) {\r\n noiseTextureSize = texture.getSize();\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises, github/no-then\r\n texture.getContent()?.then((data) => {\r\n noiseTextureData = data as Uint8Array;\r\n });\r\n }\r\n\r\n // Skip if we don't have texture data yet\r\n if (!noiseTextureData || !noiseTextureSize) {\r\n return;\r\n }\r\n\r\n if (!particle._properties.randomNoiseCoordinates1) {\r\n particle._properties.randomNoiseCoordinates1 = new Vector3(Math.random(), Math.random(), Math.random());\r\n }\r\n\r\n if (!particle._properties.randomNoiseCoordinates2) {\r\n particle._properties.randomNoiseCoordinates2 = new Vector3(Math.random(), Math.random(), Math.random());\r\n }\r\n\r\n const fetchedColorR = system._fetchR(\r\n particle._properties.randomNoiseCoordinates1.x,\r\n particle._properties.randomNoiseCoordinates1.y,\r\n noiseTextureSize.width,\r\n noiseTextureSize.height,\r\n noiseTextureData\r\n );\r\n const fetchedColorG = system._fetchR(\r\n particle._properties.randomNoiseCoordinates1.z,\r\n particle._properties.randomNoiseCoordinates2.x,\r\n noiseTextureSize.width,\r\n noiseTextureSize.height,\r\n noiseTextureData\r\n );\r\n const fetchedColorB = system._fetchR(\r\n particle._properties.randomNoiseCoordinates2.y,\r\n particle._properties.randomNoiseCoordinates2.z,\r\n noiseTextureSize.width,\r\n noiseTextureSize.height,\r\n noiseTextureData\r\n );\r\n\r\n const force = TmpVectors.Vector3[0];\r\n const scaledForce = TmpVectors.Vector3[1];\r\n\r\n force.copyFromFloats((2 * fetchedColorR - 1) * strength.x, (2 * fetchedColorG - 1) * strength.y, (2 * fetchedColorB - 1) * strength.z);\r\n\r\n force.scaleToRef(system._tempScaledUpdateSpeed, scaledForce);\r\n particle.direction.addInPlace(scaledForce);\r\n };\r\n\r\n const noiseProcessing = {\r\n process: processNoise,\r\n previousItem: null,\r\n nextItem: null,\r\n };\r\n\r\n if (system._updateQueueStart) {\r\n _ConnectAtTheEnd(noiseProcessing, system._updateQueueStart);\r\n } else {\r\n system._updateQueueStart = noiseProcessing;\r\n }\r\n\r\n this.output._storedValue = system;\r\n }\r\n}\r\n\r\nlet _Registered = false;\r\n/**\r\n * Register side effects for updateNoiseBlock.\r\n * Safe to call multiple times; only the first call has an effect.\r\n */\r\nexport function RegisterUpdateNoiseBlock(): void {\r\n if (_Registered) {\r\n return;\r\n }\r\n _Registered = true;\r\n\r\n RegisterClass(\"BABYLON.UpdateNoiseBlock\", UpdateNoiseBlock);\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"updateNoiseBlock.pure.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/Particles/Node/Blocks/Update/updateNoiseBlock.pure.ts"],"names":[],"mappings":"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","sourcesContent":["/** This file must only contain pure code and pure imports */\r\n\r\nimport { type Nullable } from \"core/types\";\r\nimport { type ISize } from \"core/Maths/math.size\";\r\nimport { type ProceduralTexture } from \"core/Materials/Textures/Procedurals/proceduralTexture.pure\";\r\nimport { type Particle } from \"core/Particles/particle\";\r\nimport { type ThinParticleSystem } from \"core/Particles/thinParticleSystem.pure\";\r\nimport { type NodeParticleConnectionPoint } from \"core/Particles/Node/nodeParticleBlockConnectionPoint\";\r\nimport { type NodeParticleBuildState } from \"core/Particles/Node/nodeParticleBuildState\";\r\nimport { type ParticleTextureSourceBlock } from \"core/Particles/Node/Blocks/particleSourceTextureBlock.pure\";\r\n\r\nimport { TmpVectors, Vector3 } from \"core/Maths/math.vector.pure\";\r\nimport { NodeParticleBlock } from \"core/Particles/Node/nodeParticleBlock\";\r\nimport { NodeParticleBlockConnectionPointTypes } from \"core/Particles/Node/Enums/nodeParticleBlockConnectionPointTypes\";\r\nimport { _ConnectAtTheEnd } from \"core/Particles/Queue/executionQueue\";\r\nimport { RegisterClass } from \"core/Misc/typeStore\";\r\n\r\n/**\r\n * Block used to update particle position based on a noise texture\r\n */\r\nexport class UpdateNoiseBlock extends NodeParticleBlock {\r\n /**\r\n * Create a new UpdateNoiseBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name);\r\n\r\n this.registerInput(\"particle\", NodeParticleBlockConnectionPointTypes.Particle);\r\n this.registerInput(\"noiseTexture\", NodeParticleBlockConnectionPointTypes.Texture);\r\n this.registerInput(\"strength\", NodeParticleBlockConnectionPointTypes.Vector3, true, new Vector3(100, 100, 100));\r\n this.registerOutput(\"output\", NodeParticleBlockConnectionPointTypes.Particle);\r\n }\r\n\r\n /**\r\n * Gets the particle component\r\n */\r\n public get particle(): NodeParticleConnectionPoint {\r\n return this._inputs[0];\r\n }\r\n\r\n /**\r\n * Gets the noiseTexture input component\r\n */\r\n public get noiseTexture(): NodeParticleConnectionPoint {\r\n return this._inputs[1];\r\n }\r\n\r\n /**\r\n * Gets the strength input component\r\n */\r\n public get strength(): NodeParticleConnectionPoint {\r\n return this._inputs[2];\r\n }\r\n\r\n /**\r\n * Gets the output component\r\n */\r\n public get output(): NodeParticleConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n /**\r\n * Gets the current class name\r\n * @returns the class name\r\n */\r\n public override getClassName() {\r\n return \"UpdateNoiseBlock\";\r\n }\r\n\r\n /**\r\n * Builds the block\r\n * @param state defines the current build state\r\n */\r\n public override _build(state: NodeParticleBuildState) {\r\n const system = this.particle.getConnectedValue(state) as ThinParticleSystem;\r\n\r\n const strength = this.strength.getConnectedValue(state) as Vector3;\r\n if (!strength) {\r\n return;\r\n }\r\n\r\n const noiseTextureBlock = this.noiseTexture.connectedPoint?.ownerBlock as ParticleTextureSourceBlock;\r\n if (!noiseTextureBlock) {\r\n return;\r\n }\r\n\r\n // These will be updated each frame for procedural textures\r\n let noiseTextureData: Nullable<Uint8Array | Uint8ClampedArray> = null;\r\n let noiseTextureSize: Nullable<ISize> = null;\r\n let lastFrameId = -1;\r\n\r\n state.registerBuildPromise(\r\n (async () => {\r\n try {\r\n const textureContent = await noiseTextureBlock.extractTextureContentAsync();\r\n if (!textureContent) {\r\n return;\r\n }\r\n noiseTextureData = textureContent.data;\r\n noiseTextureSize = { width: textureContent.width, height: textureContent.height };\r\n lastFrameId = (noiseTextureBlock.textureOutput._storedValue as ProceduralTexture)?.getScene?.()?.getFrameId() ?? -1;\r\n } catch {\r\n return;\r\n }\r\n })()\r\n );\r\n\r\n const processNoise = (particle: Particle) => {\r\n // Get the texture directly from the block's stored value to support procedural textures\r\n // (as the block caches the texture data)\r\n const texture = noiseTextureBlock.textureOutput._storedValue as ProceduralTexture;\r\n if (!texture || !texture.isReady()) {\r\n return;\r\n }\r\n\r\n // Fetch fresh texture data once per frame (like in thinParticleSystem)\r\n const currentFrameId = texture.getScene()?.getFrameId() ?? -1;\r\n if (currentFrameId !== lastFrameId) {\r\n lastFrameId = currentFrameId;\r\n\r\n const internalTexture = texture.getInternalTexture();\r\n const textureSize = texture.getSize();\r\n // getSize() returns a shared cached object: snapshot the dimensions so a later resize\r\n // cannot mutate the pair published together with the buffer.\r\n const size = { width: textureSize.width, height: textureSize.height };\r\n\r\n // eslint-disable-next-line github/no-then\r\n texture.getContent()?.then(\r\n (data) => {\r\n if (texture.getInternalTexture() !== internalTexture) {\r\n // Resized or switched to a fallback while pending: discard the obsolete readback.\r\n return;\r\n }\r\n const buffer = data as Uint8Array;\r\n if (buffer.length !== size.width * size.height * 4) {\r\n // The readback returned a buffer for another size (e.g. the texture was resized\r\n // while the cached readback was pending): discard it and retry on the next frame.\r\n return;\r\n }\r\n noiseTextureSize = size;\r\n noiseTextureData = buffer;\r\n },\r\n () => {}\r\n );\r\n }\r\n\r\n // Skip if we don't have texture data yet\r\n if (!noiseTextureData || !noiseTextureSize) {\r\n return;\r\n }\r\n\r\n if (!particle._properties.randomNoiseCoordinates1) {\r\n particle._properties.randomNoiseCoordinates1 = new Vector3(Math.random(), Math.random(), Math.random());\r\n }\r\n\r\n if (!particle._properties.randomNoiseCoordinates2) {\r\n particle._properties.randomNoiseCoordinates2 = new Vector3(Math.random(), Math.random(), Math.random());\r\n }\r\n\r\n const fetchedColorR = system._fetchR(\r\n particle._properties.randomNoiseCoordinates1.x,\r\n particle._properties.randomNoiseCoordinates1.y,\r\n noiseTextureSize.width,\r\n noiseTextureSize.height,\r\n noiseTextureData\r\n );\r\n const fetchedColorG = system._fetchR(\r\n particle._properties.randomNoiseCoordinates1.z,\r\n particle._properties.randomNoiseCoordinates2.x,\r\n noiseTextureSize.width,\r\n noiseTextureSize.height,\r\n noiseTextureData\r\n );\r\n const fetchedColorB = system._fetchR(\r\n particle._properties.randomNoiseCoordinates2.y,\r\n particle._properties.randomNoiseCoordinates2.z,\r\n noiseTextureSize.width,\r\n noiseTextureSize.height,\r\n noiseTextureData\r\n );\r\n\r\n const force = TmpVectors.Vector3[0];\r\n const scaledForce = TmpVectors.Vector3[1];\r\n\r\n force.copyFromFloats((2 * fetchedColorR - 1) * strength.x, (2 * fetchedColorG - 1) * strength.y, (2 * fetchedColorB - 1) * strength.z);\r\n\r\n force.scaleToRef(system._tempScaledUpdateSpeed, scaledForce);\r\n particle.direction.addInPlace(scaledForce);\r\n };\r\n\r\n const noiseProcessing = {\r\n process: processNoise,\r\n previousItem: null,\r\n nextItem: null,\r\n };\r\n\r\n if (system._updateQueueStart) {\r\n _ConnectAtTheEnd(noiseProcessing, system._updateQueueStart);\r\n } else {\r\n system._updateQueueStart = noiseProcessing;\r\n }\r\n\r\n this.output._storedValue = system;\r\n }\r\n}\r\n\r\nlet _Registered = false;\r\n/**\r\n * Register side effects for updateNoiseBlock.\r\n * Safe to call multiple times; only the first call has an effect.\r\n */\r\nexport function RegisterUpdateNoiseBlock(): void {\r\n if (_Registered) {\r\n return;\r\n }\r\n _Registered = true;\r\n\r\n RegisterClass(\"BABYLON.UpdateNoiseBlock\", UpdateNoiseBlock);\r\n}\r\n"]}
|
|
@@ -146,11 +146,12 @@ export class ParticleTextureSourceBlock extends NodeParticleBlock {
|
|
|
146
146
|
return null;
|
|
147
147
|
}
|
|
148
148
|
proceduralTexture.render();
|
|
149
|
+
const textureSize = proceduralTexture.getSize();
|
|
150
|
+
const size = { width: textureSize.width, height: textureSize.height };
|
|
149
151
|
const data = await proceduralTexture.getContent();
|
|
150
|
-
if (!data) {
|
|
152
|
+
if (!data || data.byteLength !== size.width * size.height * 4) {
|
|
151
153
|
return null;
|
|
152
154
|
}
|
|
153
|
-
const size = proceduralTexture.getSize();
|
|
154
155
|
return {
|
|
155
156
|
width: size.width,
|
|
156
157
|
height: size.height,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"particleSourceTextureBlock.pure.js","sourceRoot":"","sources":["../../../../../../dev/core/src/Particles/Node/Blocks/particleSourceTextureBlock.pure.ts"],"names":[],"mappings":"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","sourcesContent":["/** This file must only contain pure code and pure imports */\r\n\r\nimport { type NodeParticleConnectionPoint } from \"../nodeParticleBlockConnectionPoint\";\r\nimport { type NodeParticleBuildState } from \"../nodeParticleBuildState\";\r\nimport { type Nullable } from \"core/types\";\r\nimport { type BaseTexture } from \"../../../Materials/Textures/baseTexture.pure\";\r\nimport { type ProceduralTexture } from \"../../../Materials/Textures/Procedurals/proceduralTexture.pure\";\r\n\r\nimport { Texture } from \"core/Materials/Textures/texture.pure\";\r\nimport { NodeParticleBlockConnectionPointTypes } from \"../Enums/nodeParticleBlockConnectionPointTypes\";\r\nimport { NodeParticleBlock } from \"../nodeParticleBlock\";\r\nimport { TextureTools } from \"core/Misc/textureTools\";\r\nimport { RegisterClass } from \"../../../Misc/typeStore\";\r\n\r\n/**\r\n * Interface used to define texture data\r\n */\r\nexport interface INodeParticleTextureData {\r\n /** Width of the texture in pixels */\r\n width: number;\r\n /** Height of the texture in pixels */\r\n height: number;\r\n /** RGBA pixel data */\r\n data: Uint8ClampedArray;\r\n}\r\n\r\n/**\r\n * Block used to provide a texture for particles in a particle system\r\n */\r\nexport class ParticleTextureSourceBlock extends NodeParticleBlock {\r\n private _url: string = \"\";\r\n private _textureDataUrl: string = \"\";\r\n private _sourceTexture: Nullable<BaseTexture> = null;\r\n private _cachedData: Nullable<INodeParticleTextureData> = null;\r\n private _clonedTextures: BaseTexture[] = [];\r\n\r\n /**\r\n * Gets or sets the strenght of the flow map effect\r\n */\r\n public invertY = true;\r\n\r\n /**\r\n * Indicates if the texture data should be serialized as a base64 string.\r\n */\r\n public serializedCachedData: boolean = false;\r\n\r\n /**\r\n * Gets or sets the URL of the texture to be used by this block.\r\n */\r\n public get url(): string {\r\n return this._url;\r\n }\r\n\r\n public set url(value: string) {\r\n if (this._url === value) {\r\n return;\r\n }\r\n this._cachedData = null;\r\n this._url = value;\r\n this._textureDataUrl = \"\";\r\n this._sourceTexture = null;\r\n }\r\n\r\n /**\r\n * Gets or sets the data URL of the texture to be used by this block.\r\n * This is a base64 encoded string representing the texture data.\r\n */\r\n public get textureDataUrl(): string {\r\n return this._textureDataUrl;\r\n }\r\n\r\n public set textureDataUrl(value: string) {\r\n if (this._textureDataUrl === value) {\r\n return;\r\n }\r\n\r\n this._cachedData = null;\r\n this._textureDataUrl = value;\r\n this._url = \"\";\r\n this._sourceTexture = null;\r\n }\r\n\r\n /**\r\n * Gets the texture directly set on this block.\r\n * This value will not be serialized.\r\n */\r\n public get sourceTexture(): Nullable<BaseTexture> {\r\n return this._sourceTexture;\r\n }\r\n\r\n /**\r\n * Directly sets the texture to be used by this block.\r\n * This value will not be serialized.\r\n */\r\n public set sourceTexture(value: Nullable<BaseTexture>) {\r\n if (this._sourceTexture === value) {\r\n return;\r\n }\r\n this._cachedData = null;\r\n this._sourceTexture = value;\r\n this._url = (value as Texture).url || \"\";\r\n this._textureDataUrl = \"\";\r\n }\r\n\r\n /**\r\n * Gets the texture set on this block.\r\n * This value will not be serialized.\r\n */\r\n public get texture(): Nullable<BaseTexture> {\r\n return this.sourceTexture;\r\n }\r\n\r\n /**\r\n * Sets the texture to be used by this block.\r\n * This value will not be serialized.\r\n */\r\n public set texture(value: Nullable<BaseTexture>) {\r\n this.sourceTexture = value;\r\n }\r\n\r\n /**\r\n * Create a new ParticleTextureSourceBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name);\r\n\r\n this.registerOutput(\"texture\", NodeParticleBlockConnectionPointTypes.Texture);\r\n }\r\n\r\n /**\r\n * Gets the current class name\r\n * @returns the class name\r\n */\r\n public override getClassName() {\r\n return \"ParticleTextureSourceBlock\";\r\n }\r\n\r\n /**\r\n * Gets the texture output component\r\n */\r\n public get textureOutput(): NodeParticleConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n /**\r\n * Gets the texture content as a promise\r\n * @returns a promise that resolves to the texture content, including width, height, and pixel data\r\n */\r\n async extractTextureContentAsync() {\r\n if (!this.textureOutput._storedValue && !this._sourceTexture) {\r\n return null;\r\n }\r\n\r\n if (this._cachedData) {\r\n return this._cachedData;\r\n }\r\n\r\n const texture = this.textureOutput._storedValue || this._sourceTexture;\r\n return await new Promise<\r\n Nullable<{\r\n width: number;\r\n height: number;\r\n data: Uint8ClampedArray;\r\n }>\r\n >((resolve, reject) => {\r\n const extractProceduralTextureContentAsync = async (proceduralTexture: ProceduralTexture) => {\r\n if (!proceduralTexture.isReady()) {\r\n const effect = proceduralTexture.getEffect();\r\n await new Promise<boolean>((resolveReady) => {\r\n let settled = false;\r\n let errorObserver: Nullable<{ remove: () => void }> = null;\r\n const settle = (ready: boolean) => {\r\n if (settled) {\r\n return;\r\n }\r\n settled = true;\r\n errorObserver?.remove();\r\n resolveReady(ready);\r\n };\r\n errorObserver = effect.onErrorObservable.add(() => {\r\n settle(false);\r\n });\r\n effect.executeWhenCompiled(() => {\r\n settle(true);\r\n });\r\n });\r\n }\r\n\r\n if (!proceduralTexture.isReady()) {\r\n return null;\r\n }\r\n\r\n proceduralTexture.render();\r\n const data = await proceduralTexture.getContent();\r\n if (!data) {\r\n return null;\r\n }\r\n\r\n const size = proceduralTexture.getSize();\r\n return {\r\n width: size.width,\r\n height: size.height,\r\n data: new Uint8ClampedArray(data.buffer.slice(data.byteOffset, data.byteOffset + data.byteLength)),\r\n };\r\n };\r\n\r\n if (!texture.isReady()) {\r\n if (texture.getContent) {\r\n void (async () => {\r\n try {\r\n this._cachedData = await extractProceduralTextureContentAsync(texture as ProceduralTexture);\r\n resolve(this._cachedData);\r\n } catch (e) {\r\n // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors\r\n reject(e);\r\n }\r\n })();\r\n return;\r\n }\r\n\r\n let settled = false;\r\n let loadObserver: Nullable<{ remove: () => void }> = null;\r\n let internalErrorObserver: Nullable<{ remove: () => void }> = null;\r\n let textureErrorObserver: Nullable<{ remove: () => void }> = null;\r\n\r\n const cleanup = () => {\r\n loadObserver?.remove();\r\n internalErrorObserver?.remove();\r\n textureErrorObserver?.remove();\r\n };\r\n\r\n const settle = (textureContent: Nullable<INodeParticleTextureData>) => {\r\n if (settled) {\r\n return;\r\n }\r\n settled = true;\r\n cleanup();\r\n resolve(textureContent);\r\n };\r\n\r\n const fail = (error: any) => {\r\n if (settled) {\r\n return;\r\n }\r\n settled = true;\r\n cleanup();\r\n // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors\r\n reject(error);\r\n };\r\n\r\n if (texture.loadingError) {\r\n settle(null);\r\n return;\r\n }\r\n\r\n const loadObservable = texture.onLoadObservable;\r\n if (!loadObservable) {\r\n settle(null);\r\n return;\r\n }\r\n\r\n loadObserver = loadObservable.addOnce(async () => {\r\n try {\r\n this._cachedData = await this.extractTextureContentAsync();\r\n settle(this._cachedData);\r\n } catch (e) {\r\n fail(e);\r\n }\r\n });\r\n\r\n internalErrorObserver =\r\n texture.getInternalTexture()?.onErrorObservable.addOnce(() => {\r\n settle(null);\r\n }) ?? null;\r\n\r\n textureErrorObserver = Texture.OnTextureLoadErrorObservable.add((erroredTexture) => {\r\n if (erroredTexture === texture) {\r\n settle(null);\r\n }\r\n });\r\n\r\n if (texture.loadingError) {\r\n settle(null);\r\n return;\r\n }\r\n\r\n if (texture.isReady()) {\r\n void (async () => {\r\n try {\r\n this._cachedData = await this.extractTextureContentAsync();\r\n settle(this._cachedData);\r\n } catch (e) {\r\n fail(e);\r\n }\r\n })();\r\n }\r\n return;\r\n }\r\n const size = texture.getSize();\r\n if (texture.getContent) {\r\n extractProceduralTextureContentAsync(texture as ProceduralTexture)\r\n // eslint-disable-next-line github/no-then\r\n ?.then((data) => {\r\n this._cachedData = data;\r\n resolve(this._cachedData);\r\n })\r\n // eslint-disable-next-line github/no-then\r\n .catch(reject);\r\n } else {\r\n TextureTools.GetTextureDataAsync(texture, size.width, size.height)\r\n // eslint-disable-next-line github/no-then\r\n .then((data) => {\r\n this._cachedData = {\r\n width: size.width,\r\n height: size.height,\r\n data: new Uint8ClampedArray(data),\r\n };\r\n texture.dispose();\r\n resolve(this._cachedData);\r\n })\r\n // eslint-disable-next-line github/no-then\r\n .catch(reject);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Builds the block\r\n * @param state defines the current build state\r\n */\r\n public override _build(state: NodeParticleBuildState) {\r\n if (this._sourceTexture) {\r\n // The same NodeParticleSystemSet can be built into multiple scenes/engines\r\n // (original system scene, editor preview scene).\r\n // Textures are engine-specific, so we need to handle cross-engine cases.\r\n const sourceScene = this._sourceTexture.getScene?.();\r\n const sourceEngine = sourceScene?.getEngine?.();\r\n const targetEngine = state.scene.getEngine();\r\n\r\n if (sourceEngine && sourceEngine !== targetEngine) {\r\n // Cross-engine: recreate texture from URL if available, preserving invertY\r\n const url = (this._sourceTexture as Texture).url || this._url;\r\n if (url) {\r\n const invertY = (this._sourceTexture as Texture).invertY ?? this.invertY;\r\n const tex = new Texture(url, state.scene, undefined, invertY);\r\n this._copyTextureProperties(this._sourceTexture, tex);\r\n this._clonedTextures.push(tex);\r\n this.textureOutput._storedValue = tex;\r\n return;\r\n }\r\n // No URL available - use the source texture directly as fallback\r\n // This may not render correctly but avoids breaking completely\r\n this.textureOutput._storedValue = this._sourceTexture;\r\n return;\r\n }\r\n\r\n // Same engine: clone works correctly and preserves all properties\r\n const cloned = this._sourceTexture.clone();\r\n if (cloned) {\r\n this._clonedTextures.push(cloned);\r\n this.textureOutput._storedValue = cloned;\r\n } else {\r\n this.textureOutput._storedValue = this._sourceTexture;\r\n }\r\n return;\r\n }\r\n\r\n if (!this._textureDataUrl && !this._url) {\r\n this.textureOutput._storedValue = null;\r\n return;\r\n }\r\n\r\n if (this._textureDataUrl) {\r\n const tex = new Texture(this._textureDataUrl, state.scene, undefined, this.invertY);\r\n this._clonedTextures.push(tex);\r\n this.textureOutput._storedValue = tex;\r\n return;\r\n }\r\n\r\n const tex = new Texture(this._url, state.scene, undefined, this.invertY);\r\n this._clonedTextures.push(tex);\r\n this.textureOutput._storedValue = tex;\r\n }\r\n\r\n /**\r\n * Serializes this block\r\n * @returns the serialization object\r\n */\r\n public override serialize(): any {\r\n const serializationObject = super.serialize();\r\n\r\n serializationObject.url = this.url;\r\n serializationObject.serializedCachedData = this.serializedCachedData;\r\n serializationObject.invertY = this.invertY;\r\n\r\n if (this.serializedCachedData) {\r\n serializationObject.textureDataUrl = this.textureDataUrl;\r\n }\r\n\r\n return serializationObject;\r\n }\r\n\r\n /**\r\n * Deserializes this block from a serialization object\r\n * @param serializationObject the serialization object\r\n */\r\n public override _deserialize(serializationObject: any) {\r\n super._deserialize(serializationObject);\r\n\r\n this.url = serializationObject.url;\r\n this.serializedCachedData = !!serializationObject.serializedCachedData;\r\n this.invertY = !!serializationObject.invertY;\r\n\r\n if (serializationObject.textureDataUrl) {\r\n this.textureDataUrl = serializationObject.textureDataUrl;\r\n }\r\n }\r\n\r\n /**\r\n * Disposes the block and its associated resources\r\n */\r\n public override dispose(): void {\r\n // Dispose all cloned textures we created\r\n for (const tex of this._clonedTextures) {\r\n tex.dispose();\r\n }\r\n this._clonedTextures = [];\r\n this.textureOutput._storedValue = null;\r\n // Never dispose _sourceTexture - it's owned by the caller\r\n super.dispose();\r\n }\r\n\r\n /**\r\n * Copies texture properties from source to target texture\r\n * @param source - The source texture to copy properties from\r\n * @param target - The target texture to copy properties to\r\n */\r\n private _copyTextureProperties(source: BaseTexture, target: BaseTexture): void {\r\n // BaseTexture properties\r\n target.hasAlpha = source.hasAlpha;\r\n target.level = source.level;\r\n target.coordinatesIndex = source.coordinatesIndex;\r\n target.coordinatesMode = source.coordinatesMode;\r\n target.wrapU = source.wrapU;\r\n target.wrapV = source.wrapV;\r\n target.wrapR = source.wrapR;\r\n target.anisotropicFilteringLevel = source.anisotropicFilteringLevel;\r\n\r\n // Texture-specific properties (if both are Texture instances)\r\n const sourceTexture = source as Texture;\r\n const targetTexture = target as Texture;\r\n if (sourceTexture.uOffset !== undefined && targetTexture.uOffset !== undefined) {\r\n targetTexture.uOffset = sourceTexture.uOffset;\r\n targetTexture.vOffset = sourceTexture.vOffset;\r\n targetTexture.uScale = sourceTexture.uScale;\r\n targetTexture.vScale = sourceTexture.vScale;\r\n targetTexture.uAng = sourceTexture.uAng;\r\n targetTexture.vAng = sourceTexture.vAng;\r\n targetTexture.wAng = sourceTexture.wAng;\r\n }\r\n }\r\n}\r\n\r\nlet _Registered = false;\r\n/**\r\n * Register side effects for particleSourceTextureBlock.\r\n * Safe to call multiple times; only the first call has an effect.\r\n */\r\nexport function RegisterParticleSourceTextureBlock(): void {\r\n if (_Registered) {\r\n return;\r\n }\r\n _Registered = true;\r\n\r\n RegisterClass(\"BABYLON.ParticleTextureSourceBlock\", ParticleTextureSourceBlock);\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"particleSourceTextureBlock.pure.js","sourceRoot":"","sources":["../../../../../../dev/core/src/Particles/Node/Blocks/particleSourceTextureBlock.pure.ts"],"names":[],"mappings":"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","sourcesContent":["/** This file must only contain pure code and pure imports */\r\n\r\nimport { type NodeParticleConnectionPoint } from \"../nodeParticleBlockConnectionPoint\";\r\nimport { type NodeParticleBuildState } from \"../nodeParticleBuildState\";\r\nimport { type Nullable } from \"core/types\";\r\nimport { type BaseTexture } from \"../../../Materials/Textures/baseTexture.pure\";\r\nimport { type ProceduralTexture } from \"../../../Materials/Textures/Procedurals/proceduralTexture.pure\";\r\n\r\nimport { Texture } from \"core/Materials/Textures/texture.pure\";\r\nimport { NodeParticleBlockConnectionPointTypes } from \"../Enums/nodeParticleBlockConnectionPointTypes\";\r\nimport { NodeParticleBlock } from \"../nodeParticleBlock\";\r\nimport { TextureTools } from \"core/Misc/textureTools\";\r\nimport { RegisterClass } from \"../../../Misc/typeStore\";\r\n\r\n/**\r\n * Interface used to define texture data\r\n */\r\nexport interface INodeParticleTextureData {\r\n /** Width of the texture in pixels */\r\n width: number;\r\n /** Height of the texture in pixels */\r\n height: number;\r\n /** RGBA pixel data */\r\n data: Uint8ClampedArray;\r\n}\r\n\r\n/**\r\n * Block used to provide a texture for particles in a particle system\r\n */\r\nexport class ParticleTextureSourceBlock extends NodeParticleBlock {\r\n private _url: string = \"\";\r\n private _textureDataUrl: string = \"\";\r\n private _sourceTexture: Nullable<BaseTexture> = null;\r\n private _cachedData: Nullable<INodeParticleTextureData> = null;\r\n private _clonedTextures: BaseTexture[] = [];\r\n\r\n /**\r\n * Gets or sets the strenght of the flow map effect\r\n */\r\n public invertY = true;\r\n\r\n /**\r\n * Indicates if the texture data should be serialized as a base64 string.\r\n */\r\n public serializedCachedData: boolean = false;\r\n\r\n /**\r\n * Gets or sets the URL of the texture to be used by this block.\r\n */\r\n public get url(): string {\r\n return this._url;\r\n }\r\n\r\n public set url(value: string) {\r\n if (this._url === value) {\r\n return;\r\n }\r\n this._cachedData = null;\r\n this._url = value;\r\n this._textureDataUrl = \"\";\r\n this._sourceTexture = null;\r\n }\r\n\r\n /**\r\n * Gets or sets the data URL of the texture to be used by this block.\r\n * This is a base64 encoded string representing the texture data.\r\n */\r\n public get textureDataUrl(): string {\r\n return this._textureDataUrl;\r\n }\r\n\r\n public set textureDataUrl(value: string) {\r\n if (this._textureDataUrl === value) {\r\n return;\r\n }\r\n\r\n this._cachedData = null;\r\n this._textureDataUrl = value;\r\n this._url = \"\";\r\n this._sourceTexture = null;\r\n }\r\n\r\n /**\r\n * Gets the texture directly set on this block.\r\n * This value will not be serialized.\r\n */\r\n public get sourceTexture(): Nullable<BaseTexture> {\r\n return this._sourceTexture;\r\n }\r\n\r\n /**\r\n * Directly sets the texture to be used by this block.\r\n * This value will not be serialized.\r\n */\r\n public set sourceTexture(value: Nullable<BaseTexture>) {\r\n if (this._sourceTexture === value) {\r\n return;\r\n }\r\n this._cachedData = null;\r\n this._sourceTexture = value;\r\n this._url = (value as Texture).url || \"\";\r\n this._textureDataUrl = \"\";\r\n }\r\n\r\n /**\r\n * Gets the texture set on this block.\r\n * This value will not be serialized.\r\n */\r\n public get texture(): Nullable<BaseTexture> {\r\n return this.sourceTexture;\r\n }\r\n\r\n /**\r\n * Sets the texture to be used by this block.\r\n * This value will not be serialized.\r\n */\r\n public set texture(value: Nullable<BaseTexture>) {\r\n this.sourceTexture = value;\r\n }\r\n\r\n /**\r\n * Create a new ParticleTextureSourceBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name);\r\n\r\n this.registerOutput(\"texture\", NodeParticleBlockConnectionPointTypes.Texture);\r\n }\r\n\r\n /**\r\n * Gets the current class name\r\n * @returns the class name\r\n */\r\n public override getClassName() {\r\n return \"ParticleTextureSourceBlock\";\r\n }\r\n\r\n /**\r\n * Gets the texture output component\r\n */\r\n public get textureOutput(): NodeParticleConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n /**\r\n * Gets the texture content as a promise\r\n * @returns a promise that resolves to the texture content, including width, height, and pixel data\r\n */\r\n async extractTextureContentAsync() {\r\n if (!this.textureOutput._storedValue && !this._sourceTexture) {\r\n return null;\r\n }\r\n\r\n if (this._cachedData) {\r\n return this._cachedData;\r\n }\r\n\r\n const texture = this.textureOutput._storedValue || this._sourceTexture;\r\n return await new Promise<\r\n Nullable<{\r\n width: number;\r\n height: number;\r\n data: Uint8ClampedArray;\r\n }>\r\n >((resolve, reject) => {\r\n const extractProceduralTextureContentAsync = async (proceduralTexture: ProceduralTexture) => {\r\n if (!proceduralTexture.isReady()) {\r\n const effect = proceduralTexture.getEffect();\r\n await new Promise<boolean>((resolveReady) => {\r\n let settled = false;\r\n let errorObserver: Nullable<{ remove: () => void }> = null;\r\n const settle = (ready: boolean) => {\r\n if (settled) {\r\n return;\r\n }\r\n settled = true;\r\n errorObserver?.remove();\r\n resolveReady(ready);\r\n };\r\n errorObserver = effect.onErrorObservable.add(() => {\r\n settle(false);\r\n });\r\n effect.executeWhenCompiled(() => {\r\n settle(true);\r\n });\r\n });\r\n }\r\n\r\n if (!proceduralTexture.isReady()) {\r\n return null;\r\n }\r\n\r\n proceduralTexture.render();\r\n const textureSize = proceduralTexture.getSize();\r\n const size = { width: textureSize.width, height: textureSize.height };\r\n const data = await proceduralTexture.getContent();\r\n if (!data || data.byteLength !== size.width * size.height * 4) {\r\n return null;\r\n }\r\n\r\n return {\r\n width: size.width,\r\n height: size.height,\r\n data: new Uint8ClampedArray(data.buffer.slice(data.byteOffset, data.byteOffset + data.byteLength)),\r\n };\r\n };\r\n\r\n if (!texture.isReady()) {\r\n if (texture.getContent) {\r\n void (async () => {\r\n try {\r\n this._cachedData = await extractProceduralTextureContentAsync(texture as ProceduralTexture);\r\n resolve(this._cachedData);\r\n } catch (e) {\r\n // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors\r\n reject(e);\r\n }\r\n })();\r\n return;\r\n }\r\n\r\n let settled = false;\r\n let loadObserver: Nullable<{ remove: () => void }> = null;\r\n let internalErrorObserver: Nullable<{ remove: () => void }> = null;\r\n let textureErrorObserver: Nullable<{ remove: () => void }> = null;\r\n\r\n const cleanup = () => {\r\n loadObserver?.remove();\r\n internalErrorObserver?.remove();\r\n textureErrorObserver?.remove();\r\n };\r\n\r\n const settle = (textureContent: Nullable<INodeParticleTextureData>) => {\r\n if (settled) {\r\n return;\r\n }\r\n settled = true;\r\n cleanup();\r\n resolve(textureContent);\r\n };\r\n\r\n const fail = (error: any) => {\r\n if (settled) {\r\n return;\r\n }\r\n settled = true;\r\n cleanup();\r\n // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors\r\n reject(error);\r\n };\r\n\r\n if (texture.loadingError) {\r\n settle(null);\r\n return;\r\n }\r\n\r\n const loadObservable = texture.onLoadObservable;\r\n if (!loadObservable) {\r\n settle(null);\r\n return;\r\n }\r\n\r\n loadObserver = loadObservable.addOnce(async () => {\r\n try {\r\n this._cachedData = await this.extractTextureContentAsync();\r\n settle(this._cachedData);\r\n } catch (e) {\r\n fail(e);\r\n }\r\n });\r\n\r\n internalErrorObserver =\r\n texture.getInternalTexture()?.onErrorObservable.addOnce(() => {\r\n settle(null);\r\n }) ?? null;\r\n\r\n textureErrorObserver = Texture.OnTextureLoadErrorObservable.add((erroredTexture) => {\r\n if (erroredTexture === texture) {\r\n settle(null);\r\n }\r\n });\r\n\r\n if (texture.loadingError) {\r\n settle(null);\r\n return;\r\n }\r\n\r\n if (texture.isReady()) {\r\n void (async () => {\r\n try {\r\n this._cachedData = await this.extractTextureContentAsync();\r\n settle(this._cachedData);\r\n } catch (e) {\r\n fail(e);\r\n }\r\n })();\r\n }\r\n return;\r\n }\r\n const size = texture.getSize();\r\n if (texture.getContent) {\r\n extractProceduralTextureContentAsync(texture as ProceduralTexture)\r\n // eslint-disable-next-line github/no-then\r\n ?.then((data) => {\r\n this._cachedData = data;\r\n resolve(this._cachedData);\r\n })\r\n // eslint-disable-next-line github/no-then\r\n .catch(reject);\r\n } else {\r\n TextureTools.GetTextureDataAsync(texture, size.width, size.height)\r\n // eslint-disable-next-line github/no-then\r\n .then((data) => {\r\n this._cachedData = {\r\n width: size.width,\r\n height: size.height,\r\n data: new Uint8ClampedArray(data),\r\n };\r\n texture.dispose();\r\n resolve(this._cachedData);\r\n })\r\n // eslint-disable-next-line github/no-then\r\n .catch(reject);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Builds the block\r\n * @param state defines the current build state\r\n */\r\n public override _build(state: NodeParticleBuildState) {\r\n if (this._sourceTexture) {\r\n // The same NodeParticleSystemSet can be built into multiple scenes/engines\r\n // (original system scene, editor preview scene).\r\n // Textures are engine-specific, so we need to handle cross-engine cases.\r\n const sourceScene = this._sourceTexture.getScene?.();\r\n const sourceEngine = sourceScene?.getEngine?.();\r\n const targetEngine = state.scene.getEngine();\r\n\r\n if (sourceEngine && sourceEngine !== targetEngine) {\r\n // Cross-engine: recreate texture from URL if available, preserving invertY\r\n const url = (this._sourceTexture as Texture).url || this._url;\r\n if (url) {\r\n const invertY = (this._sourceTexture as Texture).invertY ?? this.invertY;\r\n const tex = new Texture(url, state.scene, undefined, invertY);\r\n this._copyTextureProperties(this._sourceTexture, tex);\r\n this._clonedTextures.push(tex);\r\n this.textureOutput._storedValue = tex;\r\n return;\r\n }\r\n // No URL available - use the source texture directly as fallback\r\n // This may not render correctly but avoids breaking completely\r\n this.textureOutput._storedValue = this._sourceTexture;\r\n return;\r\n }\r\n\r\n // Same engine: clone works correctly and preserves all properties\r\n const cloned = this._sourceTexture.clone();\r\n if (cloned) {\r\n this._clonedTextures.push(cloned);\r\n this.textureOutput._storedValue = cloned;\r\n } else {\r\n this.textureOutput._storedValue = this._sourceTexture;\r\n }\r\n return;\r\n }\r\n\r\n if (!this._textureDataUrl && !this._url) {\r\n this.textureOutput._storedValue = null;\r\n return;\r\n }\r\n\r\n if (this._textureDataUrl) {\r\n const tex = new Texture(this._textureDataUrl, state.scene, undefined, this.invertY);\r\n this._clonedTextures.push(tex);\r\n this.textureOutput._storedValue = tex;\r\n return;\r\n }\r\n\r\n const tex = new Texture(this._url, state.scene, undefined, this.invertY);\r\n this._clonedTextures.push(tex);\r\n this.textureOutput._storedValue = tex;\r\n }\r\n\r\n /**\r\n * Serializes this block\r\n * @returns the serialization object\r\n */\r\n public override serialize(): any {\r\n const serializationObject = super.serialize();\r\n\r\n serializationObject.url = this.url;\r\n serializationObject.serializedCachedData = this.serializedCachedData;\r\n serializationObject.invertY = this.invertY;\r\n\r\n if (this.serializedCachedData) {\r\n serializationObject.textureDataUrl = this.textureDataUrl;\r\n }\r\n\r\n return serializationObject;\r\n }\r\n\r\n /**\r\n * Deserializes this block from a serialization object\r\n * @param serializationObject the serialization object\r\n */\r\n public override _deserialize(serializationObject: any) {\r\n super._deserialize(serializationObject);\r\n\r\n this.url = serializationObject.url;\r\n this.serializedCachedData = !!serializationObject.serializedCachedData;\r\n this.invertY = !!serializationObject.invertY;\r\n\r\n if (serializationObject.textureDataUrl) {\r\n this.textureDataUrl = serializationObject.textureDataUrl;\r\n }\r\n }\r\n\r\n /**\r\n * Disposes the block and its associated resources\r\n */\r\n public override dispose(): void {\r\n // Dispose all cloned textures we created\r\n for (const tex of this._clonedTextures) {\r\n tex.dispose();\r\n }\r\n this._clonedTextures = [];\r\n this.textureOutput._storedValue = null;\r\n // Never dispose _sourceTexture - it's owned by the caller\r\n super.dispose();\r\n }\r\n\r\n /**\r\n * Copies texture properties from source to target texture\r\n * @param source - The source texture to copy properties from\r\n * @param target - The target texture to copy properties to\r\n */\r\n private _copyTextureProperties(source: BaseTexture, target: BaseTexture): void {\r\n // BaseTexture properties\r\n target.hasAlpha = source.hasAlpha;\r\n target.level = source.level;\r\n target.coordinatesIndex = source.coordinatesIndex;\r\n target.coordinatesMode = source.coordinatesMode;\r\n target.wrapU = source.wrapU;\r\n target.wrapV = source.wrapV;\r\n target.wrapR = source.wrapR;\r\n target.anisotropicFilteringLevel = source.anisotropicFilteringLevel;\r\n\r\n // Texture-specific properties (if both are Texture instances)\r\n const sourceTexture = source as Texture;\r\n const targetTexture = target as Texture;\r\n if (sourceTexture.uOffset !== undefined && targetTexture.uOffset !== undefined) {\r\n targetTexture.uOffset = sourceTexture.uOffset;\r\n targetTexture.vOffset = sourceTexture.vOffset;\r\n targetTexture.uScale = sourceTexture.uScale;\r\n targetTexture.vScale = sourceTexture.vScale;\r\n targetTexture.uAng = sourceTexture.uAng;\r\n targetTexture.vAng = sourceTexture.vAng;\r\n targetTexture.wAng = sourceTexture.wAng;\r\n }\r\n }\r\n}\r\n\r\nlet _Registered = false;\r\n/**\r\n * Register side effects for particleSourceTextureBlock.\r\n * Safe to call multiple times; only the first call has an effect.\r\n */\r\nexport function RegisterParticleSourceTextureBlock(): void {\r\n if (_Registered) {\r\n return;\r\n }\r\n _Registered = true;\r\n\r\n RegisterClass(\"BABYLON.ParticleTextureSourceBlock\", ParticleTextureSourceBlock);\r\n}\r\n"]}
|
|
@@ -61,6 +61,7 @@ export declare class GPUParticleSystem extends BaseParticleSystem implements IDi
|
|
|
61
61
|
private _randomTextureSize;
|
|
62
62
|
private _actualFrame;
|
|
63
63
|
private _drawWrappers;
|
|
64
|
+
private _renderPassObserver;
|
|
64
65
|
private _customWrappers;
|
|
65
66
|
private _renderShadersLoaded;
|
|
66
67
|
private readonly _rawTextureWidth;
|
|
@@ -150,6 +151,8 @@ export declare class GPUParticleSystem extends BaseParticleSystem implements IDi
|
|
|
150
151
|
* Limited by the fixed-size uniform arrays in the update shaders.
|
|
151
152
|
*/
|
|
152
153
|
readonly maxAttractors: number;
|
|
154
|
+
/** Precomputed per-slot uniform names, avoiding per-attractor string concatenation every frame. */
|
|
155
|
+
private readonly _attractorUniformNames;
|
|
153
156
|
/**
|
|
154
157
|
* Add an attractor to the particle system. Attractors are used to change the direction of the particles in the system.
|
|
155
158
|
* @param attractor - The attractor to add to the particle system
|
|
@@ -507,6 +510,7 @@ export declare class GPUParticleSystem extends BaseParticleSystem implements IDi
|
|
|
507
510
|
* @internal
|
|
508
511
|
*/
|
|
509
512
|
_getWrapper(blendMode: number): DrawWrapper;
|
|
513
|
+
private _bindGeometryRendering;
|
|
510
514
|
/**
|
|
511
515
|
* @internal
|
|
512
516
|
*/
|
|
@@ -24,6 +24,7 @@ import { _IsSideEffectImplemented } from "../Misc/devTools.js";
|
|
|
24
24
|
import { AddClipPlaneUniforms, BindClipPlane, PrepareStringDefinesForClipPlanes } from "../Materials/clipPlaneMaterialHelper.js";
|
|
25
25
|
import { BindFogParameters, BindLogDepth } from "../Materials/materialHelper.functions.js";
|
|
26
26
|
import { MeshParticleEmitter } from "./EmitterTypes/meshParticleEmitter.js";
|
|
27
|
+
import { MaterialHelperGeometryRendering } from "../Materials/materialHelper.geometryrendering.js";
|
|
27
28
|
/**
|
|
28
29
|
* This represents a GPU particle system in Babylon
|
|
29
30
|
* This is the fastest particle system in Babylon as it uses the GPU to update the individual particle data
|
|
@@ -438,9 +439,13 @@ export class GPUParticleSystem extends BaseParticleSystem {
|
|
|
438
439
|
* Resets the draw wrappers cache
|
|
439
440
|
*/
|
|
440
441
|
resetDrawCache() {
|
|
441
|
-
for (const
|
|
442
|
-
|
|
443
|
-
|
|
442
|
+
for (const drawWrappers of this._drawWrappers) {
|
|
443
|
+
if (!drawWrappers) {
|
|
444
|
+
continue;
|
|
445
|
+
}
|
|
446
|
+
for (const drawWrapper of drawWrappers) {
|
|
447
|
+
drawWrapper?.drawContext?.reset();
|
|
448
|
+
}
|
|
444
449
|
}
|
|
445
450
|
}
|
|
446
451
|
/**
|
|
@@ -771,6 +776,7 @@ export class GPUParticleSystem extends BaseParticleSystem {
|
|
|
771
776
|
/** Indicates that the update of particles is done in the animate function (and not in render). Default: false */
|
|
772
777
|
this.updateInAnimate = false;
|
|
773
778
|
this._actualFrame = 0;
|
|
779
|
+
this._renderPassObserver = null;
|
|
774
780
|
this._renderShadersLoaded = false;
|
|
775
781
|
this._rawTextureWidth = 256;
|
|
776
782
|
this._rebuildingAfterContextLost = false;
|
|
@@ -825,6 +831,8 @@ export class GPUParticleSystem extends BaseParticleSystem {
|
|
|
825
831
|
this.isLocal = false;
|
|
826
832
|
/** Indicates that the particle system is GPU based */
|
|
827
833
|
this.isGPU = true;
|
|
834
|
+
/** Precomputed per-slot uniform names, avoiding per-attractor string concatenation every frame. */
|
|
835
|
+
this._attractorUniformNames = [];
|
|
828
836
|
/**
|
|
829
837
|
* Gets or sets an object used to store user defined information for the particle system
|
|
830
838
|
*/
|
|
@@ -875,10 +883,7 @@ export class GPUParticleSystem extends BaseParticleSystem {
|
|
|
875
883
|
}
|
|
876
884
|
this._customWrappers = { 0: new DrawWrapper(this._engine) };
|
|
877
885
|
this._customWrappers[0].effect = customEffect;
|
|
878
|
-
this._drawWrappers =
|
|
879
|
-
if (this._drawWrappers[0].drawContext) {
|
|
880
|
-
this._drawWrappers[0].drawContext.useInstancing = true;
|
|
881
|
-
}
|
|
886
|
+
this._drawWrappers = [];
|
|
882
887
|
this._createIndexBuffer();
|
|
883
888
|
// Setup the default processing configuration to the scene.
|
|
884
889
|
this._attachImageProcessingConfiguration(null);
|
|
@@ -901,6 +906,9 @@ export class GPUParticleSystem extends BaseParticleSystem {
|
|
|
901
906
|
this._isAnimationSheetEnabled = isAnimationSheetEnabled;
|
|
902
907
|
this.emitRateControl = !!options.emitRateControl;
|
|
903
908
|
this.maxAttractors = options.maxAttractors ?? 8;
|
|
909
|
+
for (let attractorIndex = 0; attractorIndex < this.maxAttractors; attractorIndex++) {
|
|
910
|
+
this._attractorUniformNames.push("attractorPositionAndStrength[" + attractorIndex + "]");
|
|
911
|
+
}
|
|
904
912
|
this.particleEmitterType = new BoxParticleEmitter();
|
|
905
913
|
// Random data
|
|
906
914
|
const maxTextureSize = Math.min(this._engine.getCaps().maxTextureSize, fullOptions.randomTextureSize);
|
|
@@ -1253,6 +1261,7 @@ export class GPUParticleSystem extends BaseParticleSystem {
|
|
|
1253
1261
|
* @internal
|
|
1254
1262
|
*/
|
|
1255
1263
|
_getWrapper(blendMode) {
|
|
1264
|
+
var _a;
|
|
1256
1265
|
const customWrapper = this._getCustomDrawWrapper(blendMode);
|
|
1257
1266
|
if (customWrapper?.effect) {
|
|
1258
1267
|
return customWrapper;
|
|
@@ -1260,13 +1269,31 @@ export class GPUParticleSystem extends BaseParticleSystem {
|
|
|
1260
1269
|
const defines = [];
|
|
1261
1270
|
this.fillDefines(defines, blendMode);
|
|
1262
1271
|
// Effect
|
|
1263
|
-
|
|
1272
|
+
const currentRenderPassId = this._engine._features.supportRenderPasses ? this._engine.currentRenderPassId : 0;
|
|
1273
|
+
const geometryRendering = MaterialHelperGeometryRendering._PrepareStringDefines(currentRenderPassId, defines);
|
|
1274
|
+
const geometryRenderingConfiguration = geometryRendering ? MaterialHelperGeometryRendering.GetConfiguration(currentRenderPassId) : undefined;
|
|
1275
|
+
let drawWrappers = this._drawWrappers[currentRenderPassId];
|
|
1276
|
+
if (!drawWrappers) {
|
|
1277
|
+
drawWrappers = this._drawWrappers[currentRenderPassId] = [];
|
|
1278
|
+
if (currentRenderPassId !== 0 && !this._renderPassObserver) {
|
|
1279
|
+
this._renderPassObserver = ((_a = this._engine)._onReleaseRenderPassObservable ?? (_a._onReleaseRenderPassObservable = new Observable())).add((id) => {
|
|
1280
|
+
const releasedWrappers = this._drawWrappers[id];
|
|
1281
|
+
if (releasedWrappers) {
|
|
1282
|
+
for (const wrapper of releasedWrappers) {
|
|
1283
|
+
wrapper?.dispose();
|
|
1284
|
+
}
|
|
1285
|
+
delete this._drawWrappers[id];
|
|
1286
|
+
}
|
|
1287
|
+
});
|
|
1288
|
+
}
|
|
1289
|
+
}
|
|
1290
|
+
let drawWrapper = drawWrappers[blendMode];
|
|
1264
1291
|
if (!drawWrapper) {
|
|
1265
1292
|
drawWrapper = new DrawWrapper(this._engine);
|
|
1266
1293
|
if (drawWrapper.drawContext) {
|
|
1267
1294
|
drawWrapper.drawContext.useInstancing = true;
|
|
1268
1295
|
}
|
|
1269
|
-
|
|
1296
|
+
drawWrappers[blendMode] = drawWrapper;
|
|
1270
1297
|
}
|
|
1271
1298
|
const join = defines.join("\n");
|
|
1272
1299
|
if (drawWrapper.defines !== join) {
|
|
@@ -1274,6 +1301,9 @@ export class GPUParticleSystem extends BaseParticleSystem {
|
|
|
1274
1301
|
const uniforms = [];
|
|
1275
1302
|
const samplers = [];
|
|
1276
1303
|
this.fillUniformsAttributesAndSamplerNames(uniforms, attributes, samplers);
|
|
1304
|
+
if (geometryRendering) {
|
|
1305
|
+
uniforms.push("cameraInfo", "inverseEmitterWM", "objectId", "meshBlendTag", "geometryZeroAlphaDiscard");
|
|
1306
|
+
}
|
|
1277
1307
|
const shaderLanguage = this._engine.isWebGPU ? 1 /* ShaderLanguage.WGSL */ : 0 /* ShaderLanguage.GLSL */;
|
|
1278
1308
|
drawWrapper.setEffect(this._engine.createEffect("gpuRenderParticles", {
|
|
1279
1309
|
attributes,
|
|
@@ -1281,6 +1311,8 @@ export class GPUParticleSystem extends BaseParticleSystem {
|
|
|
1281
1311
|
samplers,
|
|
1282
1312
|
defines: join,
|
|
1283
1313
|
shaderLanguage,
|
|
1314
|
+
multiTarget: geometryRendering,
|
|
1315
|
+
indexParameters: geometryRendering ? { buffersCount: geometryRenderingConfiguration?._mrtCount ?? 0 } : undefined,
|
|
1284
1316
|
extraInitializationsAsync: this._renderShadersLoaded
|
|
1285
1317
|
? undefined
|
|
1286
1318
|
: async () => {
|
|
@@ -1293,6 +1325,21 @@ export class GPUParticleSystem extends BaseParticleSystem {
|
|
|
1293
1325
|
}
|
|
1294
1326
|
return drawWrapper;
|
|
1295
1327
|
}
|
|
1328
|
+
_bindGeometryRendering(effect, emitterWM) {
|
|
1329
|
+
const renderPassId = this._engine._features.supportRenderPasses ? this._engine.currentRenderPassId : 0;
|
|
1330
|
+
const configuration = MaterialHelperGeometryRendering.GetConfiguration(renderPassId);
|
|
1331
|
+
if (!configuration?._defines) {
|
|
1332
|
+
return;
|
|
1333
|
+
}
|
|
1334
|
+
effect.setFloat("objectId", 0);
|
|
1335
|
+
effect.setInt("meshBlendTag", 0);
|
|
1336
|
+
const camera = this._scene?.activeCamera;
|
|
1337
|
+
effect.setFloat2("cameraInfo", camera?.minZ ?? 0, camera?.maxZ ?? 1);
|
|
1338
|
+
if (this.isLocal) {
|
|
1339
|
+
emitterWM.invertToRef(TmpVectors.Matrix[2]);
|
|
1340
|
+
effect.setMatrix("inverseEmitterWM", TmpVectors.Matrix[2]);
|
|
1341
|
+
}
|
|
1342
|
+
}
|
|
1296
1343
|
/**
|
|
1297
1344
|
* @internal
|
|
1298
1345
|
*/
|
|
@@ -1652,7 +1699,8 @@ export class GPUParticleSystem extends BaseParticleSystem {
|
|
|
1652
1699
|
this._engine.enableEffect(drawWrapper);
|
|
1653
1700
|
const viewMatrix = this._scene?.getViewMatrix() || Matrix.IdentityReadOnly;
|
|
1654
1701
|
effect.setMatrix("view", viewMatrix);
|
|
1655
|
-
|
|
1702
|
+
const projectionMatrix = this.defaultProjectionMatrix ?? this._scene.getProjectionMatrix();
|
|
1703
|
+
effect.setMatrix("projection", projectionMatrix);
|
|
1656
1704
|
effect.setTexture("diffuseSampler", this.particleTexture);
|
|
1657
1705
|
effect.setVector2("translationPivot", this.translationPivot);
|
|
1658
1706
|
const worldOffset = this.worldOffset.subtractToRef(this._scene?.floatingOriginOffset || Vector3.ZeroReadOnly, TmpVectors.Vector3[0]);
|
|
@@ -1682,9 +1730,11 @@ export class GPUParticleSystem extends BaseParticleSystem {
|
|
|
1682
1730
|
}
|
|
1683
1731
|
}
|
|
1684
1732
|
if (defines.indexOf("#define BILLBOARDMODE_ALL") >= 0) {
|
|
1685
|
-
|
|
1686
|
-
invView.
|
|
1687
|
-
|
|
1733
|
+
viewMatrix.invertToRef(TmpVectors.Matrix[1]);
|
|
1734
|
+
effect.setMatrix("invView", TmpVectors.Matrix[1]);
|
|
1735
|
+
}
|
|
1736
|
+
if (effect._multiTarget) {
|
|
1737
|
+
this._bindGeometryRendering(effect, emitterWM);
|
|
1688
1738
|
}
|
|
1689
1739
|
// Log. depth
|
|
1690
1740
|
if (this.useLogarithmicDepth && this._scene) {
|
|
@@ -1696,23 +1746,30 @@ export class GPUParticleSystem extends BaseParticleSystem {
|
|
|
1696
1746
|
}
|
|
1697
1747
|
// Draw order
|
|
1698
1748
|
this._setEngineBasedOnBlendMode(blendMode);
|
|
1699
|
-
|
|
1700
|
-
|
|
1701
|
-
|
|
1702
|
-
|
|
1703
|
-
|
|
1704
|
-
|
|
1705
|
-
|
|
1706
|
-
|
|
1749
|
+
if (effect._multiTarget) {
|
|
1750
|
+
MaterialHelperGeometryRendering._BindZeroAlphaDiscard(this._engine, effect);
|
|
1751
|
+
}
|
|
1752
|
+
let rendered = false;
|
|
1753
|
+
try {
|
|
1754
|
+
if (MaterialHelperGeometryRendering._BindAttachmentsForEffect(this._engine, effect)) {
|
|
1755
|
+
this._platform.bindDrawBuffers(this._targetIndex, effect, this._scene?.forceWireframe ? this._linesIndexBufferUseInstancing : null);
|
|
1756
|
+
if (this._onBeforeDrawParticlesObservable) {
|
|
1757
|
+
this._onBeforeDrawParticlesObservable.notifyObservers(effect);
|
|
1758
|
+
}
|
|
1759
|
+
if (this._scene?.forceWireframe) {
|
|
1760
|
+
this._engine.drawElementsType(6, 0, 10, this._currentActiveCount);
|
|
1761
|
+
}
|
|
1762
|
+
else {
|
|
1763
|
+
this._engine.drawArraysType(7, 0, 4, this._currentActiveCount);
|
|
1764
|
+
}
|
|
1765
|
+
rendered = true;
|
|
1766
|
+
}
|
|
1707
1767
|
}
|
|
1708
|
-
|
|
1709
|
-
|
|
1768
|
+
finally {
|
|
1769
|
+
MaterialHelperGeometryRendering._RestoreAttachments(this._engine);
|
|
1710
1770
|
}
|
|
1711
1771
|
this._engine.setAlphaMode(0);
|
|
1712
|
-
|
|
1713
|
-
this._engine.unbindInstanceAttributes();
|
|
1714
|
-
}
|
|
1715
|
-
return this._currentActiveCount;
|
|
1772
|
+
return rendered ? this._currentActiveCount : 0;
|
|
1716
1773
|
}
|
|
1717
1774
|
/** @internal */
|
|
1718
1775
|
_update(emitterWM) {
|
|
@@ -1783,7 +1840,7 @@ export class GPUParticleSystem extends BaseParticleSystem {
|
|
|
1783
1840
|
}
|
|
1784
1841
|
for (let i = 0; i < this._attractors.length; i++) {
|
|
1785
1842
|
const attractor = this._attractors[i];
|
|
1786
|
-
const name =
|
|
1843
|
+
const name = this._attractorUniformNames[i];
|
|
1787
1844
|
if (invWorld) {
|
|
1788
1845
|
const localPos = TmpVectors.Vector3[0];
|
|
1789
1846
|
Vector3.TransformCoordinatesToRef(attractor.position, invWorld, localPos);
|
|
@@ -1984,6 +2041,12 @@ export class GPUParticleSystem extends BaseParticleSystem {
|
|
|
1984
2041
|
else {
|
|
1985
2042
|
outparticles = this._render(this.blendMode, emitterWM);
|
|
1986
2043
|
}
|
|
2044
|
+
// bindDrawBuffers() binds onto the default VAO whenever the render effect differs from the one
|
|
2045
|
+
// the render VAO was recorded with. Reset the instance divisors once all passes are drawn, so the
|
|
2046
|
+
// next non-instanced draw (e.g. the post-process quad) does not inherit them. Resetting between
|
|
2047
|
+
// the MULTIPLYADD passes would break the second pass: bindBuffers() skips rebinding when its
|
|
2048
|
+
// buffers and effect are unchanged, so it would draw with divisor 0.
|
|
2049
|
+
this._engine.unbindInstanceAttributes();
|
|
1987
2050
|
this._engine.setAlphaMode(0);
|
|
1988
2051
|
}
|
|
1989
2052
|
return outparticles;
|
|
@@ -2029,11 +2092,17 @@ export class GPUParticleSystem extends BaseParticleSystem {
|
|
|
2029
2092
|
* @param disposeTexture defines if the particule texture must be disposed as well (true by default)
|
|
2030
2093
|
*/
|
|
2031
2094
|
dispose(disposeTexture = true) {
|
|
2032
|
-
|
|
2033
|
-
|
|
2034
|
-
|
|
2095
|
+
this._engine._onReleaseRenderPassObservable?.remove(this._renderPassObserver);
|
|
2096
|
+
this._renderPassObserver = null;
|
|
2097
|
+
for (const drawWrappers of this._drawWrappers) {
|
|
2098
|
+
if (!drawWrappers) {
|
|
2099
|
+
continue;
|
|
2100
|
+
}
|
|
2101
|
+
for (const drawWrapper of drawWrappers) {
|
|
2102
|
+
drawWrapper?.dispose();
|
|
2103
|
+
}
|
|
2035
2104
|
}
|
|
2036
|
-
this._drawWrappers =
|
|
2105
|
+
this._drawWrappers = [];
|
|
2037
2106
|
if (this._scene) {
|
|
2038
2107
|
const index = this._scene.particleSystems.indexOf(this);
|
|
2039
2108
|
if (index > -1) {
|