@babylonjs/core 5.24.0 → 5.26.0
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/Actions/action.d.ts +12 -21
- package/Actions/action.js +8 -17
- package/Actions/action.js.map +1 -1
- package/Actions/actionManager.d.ts +2 -5
- package/Actions/actionManager.js +2 -5
- package/Actions/actionManager.js.map +1 -1
- package/Actions/condition.d.ts +9 -50
- package/Actions/condition.js +3 -26
- package/Actions/condition.js.map +1 -1
- package/Actions/directActions.d.ts +7 -7
- package/Actions/directActions.js +7 -7
- package/Actions/directActions.js.map +1 -1
- package/Actions/directAudioActions.d.ts +2 -2
- package/Actions/directAudioActions.js +2 -2
- package/Actions/directAudioActions.js.map +1 -1
- package/Actions/interpolateValueAction.d.ts +1 -1
- package/Actions/interpolateValueAction.js +1 -1
- package/Actions/interpolateValueAction.js.map +1 -1
- package/Animations/animatable.d.ts +5 -6
- package/Animations/animatable.js +1 -2
- package/Animations/animatable.js.map +1 -1
- package/Animations/animation.d.ts +6 -20
- package/Animations/animation.js +6 -20
- package/Animations/animation.js.map +1 -1
- package/Animations/animationEvent.d.ts +1 -1
- package/Animations/animationEvent.js +1 -1
- package/Animations/animationEvent.js.map +1 -1
- package/Animations/animationGroup.d.ts +1 -1
- package/Animations/animationGroup.js +1 -1
- package/Animations/animationGroup.js.map +1 -1
- package/Animations/easing.d.ts +13 -26
- package/Animations/easing.js +13 -26
- package/Animations/easing.js.map +1 -1
- package/Animations/runtimeAnimation.d.ts +3 -4
- package/Animations/runtimeAnimation.js +1 -2
- package/Animations/runtimeAnimation.js.map +1 -1
- package/Audio/audioEngine.js +1 -2
- package/Audio/audioEngine.js.map +1 -1
- package/Audio/audioSceneComponent.d.ts +1 -1
- package/Audio/audioSceneComponent.js.map +1 -1
- package/Audio/sound.d.ts +3 -4
- package/Audio/sound.js +2 -3
- package/Audio/sound.js.map +1 -1
- package/BakedVertexAnimation/bakedVertexAnimationManager.d.ts +1 -1
- package/BakedVertexAnimation/bakedVertexAnimationManager.js +1 -1
- package/BakedVertexAnimation/bakedVertexAnimationManager.js.map +1 -1
- package/Behaviors/Meshes/attachToBoxBehavior.js +1 -1
- package/Behaviors/Meshes/attachToBoxBehavior.js.map +1 -1
- package/Behaviors/Meshes/baseSixDofDragBehavior.js +5 -5
- package/Behaviors/Meshes/baseSixDofDragBehavior.js.map +1 -1
- package/Behaviors/Meshes/followBehavior.d.ts +1 -1
- package/Behaviors/Meshes/followBehavior.js +1 -1
- package/Behaviors/Meshes/followBehavior.js.map +1 -1
- package/Behaviors/Meshes/pointerDragBehavior.d.ts +1 -1
- package/Behaviors/Meshes/pointerDragBehavior.js +1 -1
- package/Behaviors/Meshes/pointerDragBehavior.js.map +1 -1
- package/Bones/bone.d.ts +7 -9
- package/Bones/bone.js +7 -9
- package/Bones/bone.js.map +1 -1
- package/Bones/skeleton.d.ts +6 -8
- package/Bones/skeleton.js +6 -8
- package/Bones/skeleton.js.map +1 -1
- package/Buffers/buffer.d.ts +6 -6
- package/Buffers/buffer.js +14 -16
- package/Buffers/buffer.js.map +1 -1
- package/Buffers/storageBuffer.d.ts +1 -1
- package/Buffers/storageBuffer.js +1 -1
- package/Buffers/storageBuffer.js.map +1 -1
- package/Cameras/Inputs/arcRotateCameraVRDeviceOrientationInput.d.ts +1 -2
- package/Cameras/Inputs/arcRotateCameraVRDeviceOrientationInput.js +1 -2
- package/Cameras/Inputs/arcRotateCameraVRDeviceOrientationInput.js.map +1 -1
- package/Cameras/Inputs/flyCameraKeyboardInput.d.ts +1 -1
- package/Cameras/Inputs/flyCameraKeyboardInput.js +1 -1
- package/Cameras/Inputs/flyCameraKeyboardInput.js.map +1 -1
- package/Cameras/Inputs/freeCameraDeviceOrientationInput.d.ts +6 -3
- package/Cameras/Inputs/freeCameraDeviceOrientationInput.js +18 -5
- package/Cameras/Inputs/freeCameraDeviceOrientationInput.js.map +1 -1
- package/Cameras/Inputs/freeCameraKeyboardMoveInput.d.ts +1 -1
- package/Cameras/Inputs/freeCameraKeyboardMoveInput.js +1 -1
- package/Cameras/Inputs/freeCameraKeyboardMoveInput.js.map +1 -1
- package/Cameras/Inputs/freeCameraMouseInput.d.ts +1 -1
- package/Cameras/Inputs/freeCameraMouseInput.js +1 -1
- package/Cameras/Inputs/freeCameraMouseInput.js.map +1 -1
- package/Cameras/RigModes/stereoscopicAnaglyphRigMode.d.ts +1 -2
- package/Cameras/RigModes/stereoscopicAnaglyphRigMode.js +1 -2
- package/Cameras/RigModes/stereoscopicAnaglyphRigMode.js.map +1 -1
- package/Cameras/RigModes/stereoscopicRigMode.d.ts +1 -2
- package/Cameras/RigModes/stereoscopicRigMode.js +1 -2
- package/Cameras/RigModes/stereoscopicRigMode.js.map +1 -1
- package/Cameras/RigModes/vrRigMode.d.ts +1 -3
- package/Cameras/RigModes/vrRigMode.js +1 -3
- package/Cameras/RigModes/vrRigMode.js.map +1 -1
- package/Cameras/RigModes/webVRRigMode.d.ts +1 -3
- package/Cameras/RigModes/webVRRigMode.js +1 -3
- package/Cameras/RigModes/webVRRigMode.js.map +1 -1
- package/Cameras/Stereoscopic/stereoscopicScreenUniversalCamera.d.ts +2 -3
- package/Cameras/Stereoscopic/stereoscopicScreenUniversalCamera.js +2 -3
- package/Cameras/Stereoscopic/stereoscopicScreenUniversalCamera.js.map +1 -1
- package/Cameras/VR/vrCameraMetrics.d.ts +4 -4
- package/Cameras/VR/vrCameraMetrics.js +4 -4
- package/Cameras/VR/vrCameraMetrics.js.map +1 -1
- package/Cameras/VR/vrExperienceHelper.js +20 -48
- package/Cameras/VR/vrExperienceHelper.js.map +1 -1
- package/Cameras/VR/webVRCamera.d.ts +9 -9
- package/Cameras/VR/webVRCamera.js +9 -9
- package/Cameras/VR/webVRCamera.js.map +1 -1
- package/Cameras/arcRotateCamera.d.ts +11 -12
- package/Cameras/arcRotateCamera.js +8 -9
- package/Cameras/arcRotateCamera.js.map +1 -1
- package/Cameras/camera.d.ts +29 -38
- package/Cameras/camera.js +27 -36
- package/Cameras/camera.js.map +1 -1
- package/Cameras/deviceOrientationCamera.d.ts +1 -1
- package/Cameras/deviceOrientationCamera.js +1 -1
- package/Cameras/deviceOrientationCamera.js.map +1 -1
- package/Cameras/flyCamera.d.ts +8 -12
- package/Cameras/flyCamera.js +6 -10
- package/Cameras/flyCamera.js.map +1 -1
- package/Cameras/followCamera.d.ts +2 -2
- package/Cameras/followCamera.js +2 -2
- package/Cameras/followCamera.js.map +1 -1
- package/Cameras/freeCamera.d.ts +6 -7
- package/Cameras/freeCamera.js +4 -5
- package/Cameras/freeCamera.js.map +1 -1
- package/Cameras/freeCameraInputsManager.d.ts +2 -2
- package/Cameras/freeCameraInputsManager.js +2 -2
- package/Cameras/freeCameraInputsManager.js.map +1 -1
- package/Cameras/targetCamera.d.ts +21 -24
- package/Cameras/targetCamera.js +20 -23
- package/Cameras/targetCamera.js.map +1 -1
- package/Cameras/touchCamera.d.ts +1 -1
- package/Cameras/touchCamera.js +1 -1
- package/Cameras/touchCamera.js.map +1 -1
- package/Collisions/collider.d.ts +13 -44
- package/Collisions/collider.js +10 -41
- package/Collisions/collider.js.map +1 -1
- package/Collisions/collisionCoordinator.d.ts +2 -2
- package/Collisions/collisionCoordinator.js +1 -1
- package/Collisions/collisionCoordinator.js.map +1 -1
- package/Collisions/intersectionInfo.d.ts +1 -1
- package/Collisions/intersectionInfo.js +1 -1
- package/Collisions/intersectionInfo.js.map +1 -1
- package/Collisions/meshCollisionData.d.ts +1 -1
- package/Collisions/meshCollisionData.js +1 -1
- package/Collisions/meshCollisionData.js.map +1 -1
- package/Collisions/pickingInfo.d.ts +1 -1
- package/Collisions/pickingInfo.js +1 -1
- package/Collisions/pickingInfo.js.map +1 -1
- package/Compute/IComputeContext.d.ts +1 -1
- package/Compute/IComputeContext.js.map +1 -1
- package/Compute/IComputePipelineContext.d.ts +2 -2
- package/Compute/IComputePipelineContext.js.map +1 -1
- package/Compute/computeEffect.d.ts +5 -5
- package/Compute/computeEffect.js +5 -5
- package/Compute/computeEffect.js.map +1 -1
- package/Culling/Octrees/octreeBlock.d.ts +1 -9
- package/Culling/Octrees/octreeBlock.js +1 -9
- package/Culling/Octrees/octreeBlock.js.map +1 -1
- package/Culling/Octrees/octreeSceneComponent.d.ts +2 -2
- package/Culling/Octrees/octreeSceneComponent.js +1 -5
- package/Culling/Octrees/octreeSceneComponent.js.map +1 -1
- package/Culling/boundingBox.d.ts +4 -5
- package/Culling/boundingBox.js +3 -4
- package/Culling/boundingBox.js.map +1 -1
- package/Culling/boundingInfo.d.ts +1 -2
- package/Culling/boundingInfo.js +1 -2
- package/Culling/boundingInfo.js.map +1 -1
- package/Culling/boundingSphere.d.ts +1 -2
- package/Culling/boundingSphere.js +1 -2
- package/Culling/boundingSphere.js.map +1 -1
- package/Culling/ray.d.ts +6 -6
- package/Culling/ray.js.map +1 -1
- package/Debug/debugLayer.d.ts +1 -1
- package/Debug/debugLayer.js.map +1 -1
- package/Debug/physicsViewer.d.ts +6 -6
- package/Debug/physicsViewer.js +4 -4
- package/Debug/physicsViewer.js.map +1 -1
- package/DeviceInput/InputDevices/deviceEnums.d.ts +1 -1
- package/DeviceInput/InputDevices/deviceEnums.js +1 -1
- package/DeviceInput/InputDevices/deviceEnums.js.map +1 -1
- package/DeviceInput/InputDevices/deviceSourceManager.d.ts +3 -3
- package/DeviceInput/InputDevices/deviceSourceManager.js +3 -3
- package/DeviceInput/InputDevices/deviceSourceManager.js.map +1 -1
- package/DeviceInput/internalDeviceSourceManager.d.ts +3 -3
- package/DeviceInput/internalDeviceSourceManager.js +1 -1
- package/DeviceInput/internalDeviceSourceManager.js.map +1 -1
- package/DeviceInput/nativeDeviceInputSystem.d.ts +1 -1
- package/DeviceInput/nativeDeviceInputSystem.js +1 -1
- package/DeviceInput/nativeDeviceInputSystem.js.map +1 -1
- package/DeviceInput/webDeviceInputSystem.d.ts +1 -1
- package/DeviceInput/webDeviceInputSystem.js +1 -19
- package/DeviceInput/webDeviceInputSystem.js.map +1 -1
- package/Engines/Extensions/engine.computeShader.d.ts +7 -7
- package/Engines/Extensions/engine.computeShader.js +1 -1
- package/Engines/Extensions/engine.computeShader.js.map +1 -1
- package/Engines/Extensions/engine.cubeTexture.d.ts +6 -6
- package/Engines/Extensions/engine.cubeTexture.js +3 -2
- package/Engines/Extensions/engine.cubeTexture.js.map +1 -1
- package/Engines/Extensions/engine.debugging.d.ts +4 -4
- package/Engines/Extensions/engine.debugging.js.map +1 -1
- package/Engines/Extensions/engine.multiview.d.ts +9 -9
- package/Engines/Extensions/engine.multiview.js.map +1 -1
- package/Engines/Extensions/engine.query.d.ts +22 -22
- package/Engines/Extensions/engine.query.js +8 -8
- package/Engines/Extensions/engine.query.js.map +1 -1
- package/Engines/Extensions/engine.rawTexture.js +3 -7
- package/Engines/Extensions/engine.rawTexture.js.map +1 -1
- package/Engines/Extensions/engine.readTexture.d.ts +2 -2
- package/Engines/Extensions/engine.readTexture.js.map +1 -1
- package/Engines/Extensions/engine.renderTarget.d.ts +2 -2
- package/Engines/Extensions/engine.renderTarget.js.map +1 -1
- package/Engines/Extensions/engine.textureSelector.d.ts +2 -2
- package/Engines/Extensions/engine.textureSelector.js.map +1 -1
- package/Engines/Extensions/engine.transformFeedback.d.ts +1 -1
- package/Engines/Extensions/engine.transformFeedback.js +1 -1
- package/Engines/Extensions/engine.transformFeedback.js.map +1 -1
- package/Engines/Extensions/engine.views.d.ts +2 -2
- package/Engines/Extensions/engine.views.js.map +1 -1
- package/Engines/Extensions/engine.webVR.d.ts +13 -13
- package/Engines/Extensions/engine.webVR.js.map +1 -1
- package/Engines/IDrawContext.d.ts +1 -1
- package/Engines/IDrawContext.js.map +1 -1
- package/Engines/IMaterialContext.d.ts +1 -1
- package/Engines/IMaterialContext.js.map +1 -1
- package/Engines/IPipelineContext.d.ts +5 -5
- package/Engines/IPipelineContext.js.map +1 -1
- package/Engines/Native/nativeDataStream.d.ts +2 -2
- package/Engines/Native/nativeDataStream.js +1 -1
- package/Engines/Native/nativeDataStream.js.map +1 -1
- package/Engines/Native/nativeInterfaces.d.ts +10 -10
- package/Engines/Native/nativeInterfaces.js.map +1 -1
- package/Engines/Processors/Expressions/Operators/shaderDefineAndOperator.d.ts +1 -1
- package/Engines/Processors/Expressions/Operators/shaderDefineAndOperator.js +1 -1
- package/Engines/Processors/Expressions/Operators/shaderDefineAndOperator.js.map +1 -1
- package/Engines/Processors/Expressions/Operators/shaderDefineArithmeticOperator.d.ts +1 -1
- package/Engines/Processors/Expressions/Operators/shaderDefineArithmeticOperator.js +1 -1
- package/Engines/Processors/Expressions/Operators/shaderDefineArithmeticOperator.js.map +1 -1
- package/Engines/Processors/Expressions/Operators/shaderDefineIsDefinedOperator.d.ts +1 -1
- package/Engines/Processors/Expressions/Operators/shaderDefineIsDefinedOperator.js +1 -1
- package/Engines/Processors/Expressions/Operators/shaderDefineIsDefinedOperator.js.map +1 -1
- package/Engines/Processors/Expressions/Operators/shaderDefineOrOperator.d.ts +1 -1
- package/Engines/Processors/Expressions/Operators/shaderDefineOrOperator.js +1 -1
- package/Engines/Processors/Expressions/Operators/shaderDefineOrOperator.js.map +1 -1
- package/Engines/Processors/Expressions/shaderDefineExpression.d.ts +1 -1
- package/Engines/Processors/Expressions/shaderDefineExpression.js +1 -1
- package/Engines/Processors/Expressions/shaderDefineExpression.js.map +1 -1
- package/Engines/Processors/iShaderProcessor.d.ts +1 -1
- package/Engines/Processors/iShaderProcessor.js.map +1 -1
- package/Engines/Processors/shaderCodeConditionNode.d.ts +1 -1
- package/Engines/Processors/shaderCodeConditionNode.js +1 -1
- package/Engines/Processors/shaderCodeConditionNode.js.map +1 -1
- package/Engines/Processors/shaderCodeCursor.d.ts +1 -1
- package/Engines/Processors/shaderCodeCursor.js +1 -1
- package/Engines/Processors/shaderCodeCursor.js.map +1 -1
- package/Engines/Processors/shaderCodeNode.d.ts +1 -1
- package/Engines/Processors/shaderCodeNode.js +1 -1
- package/Engines/Processors/shaderCodeNode.js.map +1 -1
- package/Engines/Processors/shaderCodeTestNode.d.ts +1 -1
- package/Engines/Processors/shaderCodeTestNode.js +1 -1
- package/Engines/Processors/shaderCodeTestNode.js.map +1 -1
- package/Engines/Processors/shaderProcessingOptions.d.ts +2 -2
- package/Engines/Processors/shaderProcessingOptions.js.map +1 -1
- package/Engines/Processors/shaderProcessor.d.ts +2 -2
- package/Engines/Processors/shaderProcessor.js +2 -2
- package/Engines/Processors/shaderProcessor.js.map +1 -1
- package/Engines/WebGL/webGL2ShaderProcessors.d.ts +1 -1
- package/Engines/WebGL/webGL2ShaderProcessors.js +1 -1
- package/Engines/WebGL/webGL2ShaderProcessors.js.map +1 -1
- package/Engines/WebGL/webGLHardwareTexture.d.ts +1 -1
- package/Engines/WebGL/webGLHardwareTexture.js +1 -1
- package/Engines/WebGL/webGLHardwareTexture.js.map +1 -1
- package/Engines/WebGL/webGLPipelineContext.d.ts +6 -25
- package/Engines/WebGL/webGLPipelineContext.js +6 -25
- package/Engines/WebGL/webGLPipelineContext.js.map +1 -1
- package/Engines/WebGL/webGLRenderTargetWrapper.d.ts +2 -2
- package/Engines/WebGL/webGLRenderTargetWrapper.js +2 -2
- package/Engines/WebGL/webGLRenderTargetWrapper.js.map +1 -1
- package/Engines/WebGL/webGLShaderProcessors.d.ts +1 -1
- package/Engines/WebGL/webGLShaderProcessors.js +1 -1
- package/Engines/WebGL/webGLShaderProcessors.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.computeShader.d.ts +1 -1
- package/Engines/WebGPU/Extensions/engine.computeShader.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.rawTexture.js +1 -5
- package/Engines/WebGPU/Extensions/engine.rawTexture.js.map +1 -1
- package/Engines/WebGPU/webgpuBufferManager.d.ts +1 -1
- package/Engines/WebGPU/webgpuBufferManager.js +1 -1
- package/Engines/WebGPU/webgpuBufferManager.js.map +1 -1
- package/Engines/WebGPU/webgpuBundleList.d.ts +8 -8
- package/Engines/WebGPU/webgpuBundleList.js +7 -7
- package/Engines/WebGPU/webgpuBundleList.js.map +1 -1
- package/Engines/WebGPU/webgpuCacheBindGroups.d.ts +1 -1
- package/Engines/WebGPU/webgpuCacheBindGroups.js +1 -1
- package/Engines/WebGPU/webgpuCacheBindGroups.js.map +1 -1
- package/Engines/WebGPU/webgpuCacheRenderPipeline.d.ts +1 -1
- package/Engines/WebGPU/webgpuCacheRenderPipeline.js +1 -1
- package/Engines/WebGPU/webgpuCacheRenderPipeline.js.map +1 -1
- package/Engines/WebGPU/webgpuCacheRenderPipelineString.d.ts +1 -1
- package/Engines/WebGPU/webgpuCacheRenderPipelineString.js +1 -1
- package/Engines/WebGPU/webgpuCacheRenderPipelineString.js.map +1 -1
- package/Engines/WebGPU/webgpuCacheRenderPipelineTree.d.ts +2 -2
- package/Engines/WebGPU/webgpuCacheRenderPipelineTree.js +2 -2
- package/Engines/WebGPU/webgpuCacheRenderPipelineTree.js.map +1 -1
- package/Engines/WebGPU/webgpuCacheSampler.d.ts +1 -1
- package/Engines/WebGPU/webgpuCacheSampler.js +1 -1
- package/Engines/WebGPU/webgpuCacheSampler.js.map +1 -1
- package/Engines/WebGPU/webgpuClearQuad.d.ts +1 -1
- package/Engines/WebGPU/webgpuClearQuad.js +1 -1
- package/Engines/WebGPU/webgpuClearQuad.js.map +1 -1
- package/Engines/WebGPU/webgpuComputeContext.d.ts +1 -1
- package/Engines/WebGPU/webgpuComputeContext.js +1 -1
- package/Engines/WebGPU/webgpuComputeContext.js.map +1 -1
- package/Engines/WebGPU/webgpuComputePipelineContext.d.ts +2 -2
- package/Engines/WebGPU/webgpuComputePipelineContext.js +1 -1
- package/Engines/WebGPU/webgpuComputePipelineContext.js.map +1 -1
- package/Engines/WebGPU/webgpuConstants.d.ts +38 -38
- package/Engines/WebGPU/webgpuConstants.js +38 -38
- package/Engines/WebGPU/webgpuConstants.js.map +1 -1
- package/Engines/WebGPU/webgpuDepthCullingState.d.ts +1 -1
- package/Engines/WebGPU/webgpuDepthCullingState.js +1 -1
- package/Engines/WebGPU/webgpuDepthCullingState.js.map +1 -1
- package/Engines/WebGPU/webgpuDrawContext.d.ts +1 -1
- package/Engines/WebGPU/webgpuDrawContext.js +1 -1
- package/Engines/WebGPU/webgpuDrawContext.js.map +1 -1
- package/Engines/WebGPU/webgpuExternalTexture.d.ts +1 -1
- package/Engines/WebGPU/webgpuExternalTexture.js +1 -1
- package/Engines/WebGPU/webgpuExternalTexture.js.map +1 -1
- package/Engines/WebGPU/webgpuHardwareTexture.d.ts +9 -9
- package/Engines/WebGPU/webgpuHardwareTexture.js +1 -1
- package/Engines/WebGPU/webgpuHardwareTexture.js.map +1 -1
- package/Engines/WebGPU/webgpuMaterialContext.d.ts +3 -3
- package/Engines/WebGPU/webgpuMaterialContext.js +1 -1
- package/Engines/WebGPU/webgpuMaterialContext.js.map +1 -1
- package/Engines/WebGPU/webgpuOcclusionQuery.d.ts +1 -1
- package/Engines/WebGPU/webgpuOcclusionQuery.js +1 -1
- package/Engines/WebGPU/webgpuOcclusionQuery.js.map +1 -1
- package/Engines/WebGPU/webgpuPipelineContext.d.ts +4 -4
- package/Engines/WebGPU/webgpuPipelineContext.js +2 -2
- package/Engines/WebGPU/webgpuPipelineContext.js.map +1 -1
- package/Engines/WebGPU/webgpuQuerySet.d.ts +1 -1
- package/Engines/WebGPU/webgpuQuerySet.js +1 -1
- package/Engines/WebGPU/webgpuQuerySet.js.map +1 -1
- package/Engines/WebGPU/webgpuRenderPassWrapper.d.ts +1 -1
- package/Engines/WebGPU/webgpuRenderPassWrapper.js +1 -1
- package/Engines/WebGPU/webgpuRenderPassWrapper.js.map +1 -1
- package/Engines/WebGPU/webgpuRenderTargetWrapper.d.ts +2 -2
- package/Engines/WebGPU/webgpuRenderTargetWrapper.js +1 -1
- package/Engines/WebGPU/webgpuRenderTargetWrapper.js.map +1 -1
- package/Engines/WebGPU/webgpuShaderProcessingContext.d.ts +7 -7
- package/Engines/WebGPU/webgpuShaderProcessingContext.js +2 -2
- package/Engines/WebGPU/webgpuShaderProcessingContext.js.map +1 -1
- package/Engines/WebGPU/webgpuShaderProcessor.d.ts +1 -1
- package/Engines/WebGPU/webgpuShaderProcessor.js +1 -1
- package/Engines/WebGPU/webgpuShaderProcessor.js.map +1 -1
- package/Engines/WebGPU/webgpuShaderProcessorsGLSL.d.ts +1 -1
- package/Engines/WebGPU/webgpuShaderProcessorsGLSL.js +1 -1
- package/Engines/WebGPU/webgpuShaderProcessorsGLSL.js.map +1 -1
- package/Engines/WebGPU/webgpuShaderProcessorsWGSL.d.ts +1 -1
- package/Engines/WebGPU/webgpuShaderProcessorsWGSL.js +1 -1
- package/Engines/WebGPU/webgpuShaderProcessorsWGSL.js.map +1 -1
- package/Engines/WebGPU/webgpuSnapshotRendering.d.ts +1 -1
- package/Engines/WebGPU/webgpuSnapshotRendering.js +1 -1
- package/Engines/WebGPU/webgpuSnapshotRendering.js.map +1 -1
- package/Engines/WebGPU/webgpuStencilStateComposer.d.ts +1 -1
- package/Engines/WebGPU/webgpuStencilStateComposer.js +1 -1
- package/Engines/WebGPU/webgpuStencilStateComposer.js.map +1 -1
- package/Engines/WebGPU/webgpuTextureHelper.d.ts +1 -1
- package/Engines/WebGPU/webgpuTextureHelper.js +1 -1
- package/Engines/WebGPU/webgpuTextureHelper.js.map +1 -1
- package/Engines/WebGPU/webgpuTimestampQuery.d.ts +2 -2
- package/Engines/WebGPU/webgpuTimestampQuery.js +2 -2
- package/Engines/WebGPU/webgpuTimestampQuery.js.map +1 -1
- package/Engines/WebGPU/webgpuTintWASM.d.ts +1 -1
- package/Engines/WebGPU/webgpuTintWASM.js +1 -1
- package/Engines/WebGPU/webgpuTintWASM.js.map +1 -1
- package/Engines/constants.d.ts +1 -1
- package/Engines/constants.js +1 -1
- package/Engines/constants.js.map +1 -1
- package/Engines/engine.d.ts +16 -35
- package/Engines/engine.js +19 -69
- package/Engines/engine.js.map +1 -1
- package/Engines/engineFeatures.d.ts +2 -2
- package/Engines/engineFeatures.js.map +1 -1
- package/Engines/engineStore.d.ts +1 -1
- package/Engines/engineStore.js +1 -1
- package/Engines/engineStore.js.map +1 -1
- package/Engines/nativeEngine.d.ts +15 -47
- package/Engines/nativeEngine.js +20 -66
- package/Engines/nativeEngine.js.map +1 -1
- package/Engines/nullEngine.d.ts +12 -40
- package/Engines/nullEngine.js +12 -40
- package/Engines/nullEngine.js.map +1 -1
- package/Engines/performanceConfigurator.d.ts +6 -7
- package/Engines/performanceConfigurator.js +6 -7
- package/Engines/performanceConfigurator.js.map +1 -1
- package/Engines/renderTargetWrapper.d.ts +8 -9
- package/Engines/renderTargetWrapper.js +7 -8
- package/Engines/renderTargetWrapper.js.map +1 -1
- package/Engines/thinEngine.d.ts +90 -187
- package/Engines/thinEngine.js +73 -182
- package/Engines/thinEngine.js.map +1 -1
- package/Engines/webgpuEngine.d.ts +89 -145
- package/Engines/webgpuEngine.js +71 -127
- package/Engines/webgpuEngine.js.map +1 -1
- package/Events/pointerEvents.d.ts +4 -0
- package/Events/pointerEvents.js +4 -0
- package/Events/pointerEvents.js.map +1 -1
- package/Gamepads/Controllers/oculusTouchController.d.ts +1 -1
- package/Gamepads/Controllers/oculusTouchController.js +1 -1
- package/Gamepads/Controllers/oculusTouchController.js.map +1 -1
- package/Gamepads/Controllers/poseEnabledController.d.ts +9 -10
- package/Gamepads/Controllers/poseEnabledController.js +6 -7
- package/Gamepads/Controllers/poseEnabledController.js.map +1 -1
- package/Gamepads/Controllers/windowsMotionController.d.ts +1 -1
- package/Gamepads/Controllers/windowsMotionController.js +1 -1
- package/Gamepads/Controllers/windowsMotionController.js.map +1 -1
- package/Gamepads/gamepad.d.ts +1 -1
- package/Gamepads/gamepad.js +1 -1
- package/Gamepads/gamepad.js.map +1 -1
- package/Gamepads/gamepadManager.d.ts +2 -2
- package/Gamepads/gamepadManager.js +4 -4
- package/Gamepads/gamepadManager.js.map +1 -1
- package/Gamepads/gamepadSceneComponent.d.ts +1 -1
- package/Gamepads/gamepadSceneComponent.js.map +1 -1
- package/Gizmos/axisDragGizmo.d.ts +2 -8
- package/Gizmos/axisDragGizmo.js +2 -8
- package/Gizmos/axisDragGizmo.js.map +1 -1
- package/Gizmos/cameraGizmo.d.ts +1 -1
- package/Gizmos/cameraGizmo.js +1 -1
- package/Gizmos/cameraGizmo.js.map +1 -1
- package/Gizmos/lightGizmo.d.ts +1 -1
- package/Gizmos/lightGizmo.js +1 -1
- package/Gizmos/lightGizmo.js.map +1 -1
- package/Gizmos/planeDragGizmo.d.ts +1 -3
- package/Gizmos/planeDragGizmo.js +1 -3
- package/Gizmos/planeDragGizmo.js.map +1 -1
- package/Helpers/sceneHelpers.d.ts +1 -1
- package/Helpers/sceneHelpers.js +1 -1
- package/Helpers/sceneHelpers.js.map +1 -1
- package/Inputs/scene.inputManager.d.ts +3 -3
- package/Inputs/scene.inputManager.js +5 -4
- package/Inputs/scene.inputManager.js.map +1 -1
- package/Instrumentation/timeToken.d.ts +1 -1
- package/Instrumentation/timeToken.js +1 -1
- package/Instrumentation/timeToken.js.map +1 -1
- package/Layers/effectLayer.d.ts +2 -3
- package/Layers/effectLayer.js +2 -3
- package/Layers/effectLayer.js.map +1 -1
- package/Layers/glowLayer.d.ts +1 -1
- package/Layers/glowLayer.js +1 -1
- package/Layers/glowLayer.js.map +1 -1
- package/Layers/highlightLayer.d.ts +1 -1
- package/Layers/highlightLayer.js +1 -1
- package/Layers/highlightLayer.js.map +1 -1
- package/Layers/layer.d.ts +8 -1
- package/Layers/layer.js +12 -1
- package/Layers/layer.js.map +1 -1
- package/Layers/layerSceneComponent.d.ts +4 -2
- package/Layers/layerSceneComponent.js +27 -11
- package/Layers/layerSceneComponent.js.map +1 -1
- package/LensFlares/lensFlare.d.ts +1 -1
- package/LensFlares/lensFlare.js.map +1 -1
- package/LensFlares/lensFlareSystem.d.ts +4 -6
- package/LensFlares/lensFlareSystem.js +4 -6
- package/LensFlares/lensFlareSystem.js.map +1 -1
- package/Lights/Shadows/cascadedShadowGenerator.d.ts +1 -2
- package/Lights/Shadows/cascadedShadowGenerator.js +1 -2
- package/Lights/Shadows/cascadedShadowGenerator.js.map +1 -1
- package/Lights/Shadows/shadowGenerator.d.ts +1 -2
- package/Lights/Shadows/shadowGenerator.js +1 -2
- package/Lights/Shadows/shadowGenerator.js.map +1 -1
- package/Lights/light.d.ts +9 -9
- package/Lights/light.js +6 -6
- package/Lights/light.js.map +1 -1
- package/Lights/shadowLight.d.ts +3 -3
- package/Lights/shadowLight.js +3 -3
- package/Lights/shadowLight.js.map +1 -1
- package/Loading/Plugins/babylonFileLoader.d.ts +1 -1
- package/Loading/Plugins/babylonFileLoader.js +1 -1
- package/Loading/Plugins/babylonFileLoader.js.map +1 -1
- package/Loading/loadingScreen.js +6 -6
- package/Loading/loadingScreen.js.map +1 -1
- package/Materials/Background/backgroundMaterial.js +1 -1
- package/Materials/Background/backgroundMaterial.js.map +1 -1
- package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.d.ts +18 -18
- package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.js.map +1 -1
- package/Materials/Node/Blocks/Input/inputBlock.d.ts +4 -11
- package/Materials/Node/Blocks/Input/inputBlock.js +4 -11
- package/Materials/Node/Blocks/Input/inputBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/anisotropyBlock.d.ts +2 -2
- package/Materials/Node/Blocks/PBR/anisotropyBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/reflectionBlock.d.ts +9 -9
- package/Materials/Node/Blocks/PBR/reflectionBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/refractionBlock.d.ts +12 -12
- package/Materials/Node/Blocks/PBR/refractionBlock.js.map +1 -1
- package/Materials/Node/nodeMaterial.d.ts +2 -2
- package/Materials/Node/nodeMaterial.js +2 -2
- package/Materials/Node/nodeMaterial.js.map +1 -1
- package/Materials/Node/nodeMaterialBlock.d.ts +8 -14
- package/Materials/Node/nodeMaterialBlock.js +6 -12
- package/Materials/Node/nodeMaterialBlock.js.map +1 -1
- package/Materials/Node/nodeMaterialBlockConnectionPoint.d.ts +8 -8
- package/Materials/Node/nodeMaterialBlockConnectionPoint.js +7 -7
- package/Materials/Node/nodeMaterialBlockConnectionPoint.js.map +1 -1
- package/Materials/Node/nodeMaterialBuildState.d.ts +22 -58
- package/Materials/Node/nodeMaterialBuildState.js +21 -57
- package/Materials/Node/nodeMaterialBuildState.js.map +1 -1
- package/Materials/PBR/pbrAnisotropicConfiguration.d.ts +3 -3
- package/Materials/PBR/pbrAnisotropicConfiguration.js +2 -2
- package/Materials/PBR/pbrAnisotropicConfiguration.js.map +1 -1
- package/Materials/PBR/pbrBRDFConfiguration.d.ts +3 -3
- package/Materials/PBR/pbrBRDFConfiguration.js +2 -2
- package/Materials/PBR/pbrBRDFConfiguration.js.map +1 -1
- package/Materials/PBR/pbrBaseMaterial.d.ts +65 -65
- package/Materials/PBR/pbrBaseMaterial.js +65 -65
- package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
- package/Materials/PBR/pbrClearCoatConfiguration.d.ts +4 -4
- package/Materials/PBR/pbrClearCoatConfiguration.js +3 -3
- package/Materials/PBR/pbrClearCoatConfiguration.js.map +1 -1
- package/Materials/PBR/pbrIridescenceConfiguration.d.ts +6 -6
- package/Materials/PBR/pbrIridescenceConfiguration.js +5 -5
- package/Materials/PBR/pbrIridescenceConfiguration.js.map +1 -1
- package/Materials/PBR/pbrSheenConfiguration.d.ts +3 -3
- package/Materials/PBR/pbrSheenConfiguration.js +2 -2
- package/Materials/PBR/pbrSheenConfiguration.js.map +1 -1
- package/Materials/PBR/pbrSubSurfaceConfiguration.d.ts +6 -6
- package/Materials/PBR/pbrSubSurfaceConfiguration.js +5 -5
- package/Materials/PBR/pbrSubSurfaceConfiguration.js.map +1 -1
- package/Materials/Textures/Loaders/ddsTextureLoader.d.ts +1 -1
- package/Materials/Textures/Loaders/ddsTextureLoader.js +1 -1
- package/Materials/Textures/Loaders/ddsTextureLoader.js.map +1 -1
- package/Materials/Textures/Loaders/envTextureLoader.d.ts +1 -1
- package/Materials/Textures/Loaders/envTextureLoader.js +1 -1
- package/Materials/Textures/Loaders/envTextureLoader.js.map +1 -1
- package/Materials/Textures/Loaders/hdrTextureLoader.d.ts +1 -1
- package/Materials/Textures/Loaders/hdrTextureLoader.js +1 -1
- package/Materials/Textures/Loaders/hdrTextureLoader.js.map +1 -1
- package/Materials/Textures/Loaders/ktxTextureLoader.d.ts +1 -1
- package/Materials/Textures/Loaders/ktxTextureLoader.js +1 -1
- package/Materials/Textures/Loaders/ktxTextureLoader.js.map +1 -1
- package/Materials/Textures/Loaders/tgaTextureLoader.d.ts +1 -1
- package/Materials/Textures/Loaders/tgaTextureLoader.js +1 -1
- package/Materials/Textures/Loaders/tgaTextureLoader.js.map +1 -1
- package/Materials/Textures/MultiviewRenderTarget.d.ts +1 -1
- package/Materials/Textures/MultiviewRenderTarget.js +1 -1
- package/Materials/Textures/MultiviewRenderTarget.js.map +1 -1
- package/Materials/Textures/Procedurals/proceduralTexture.d.ts +6 -7
- package/Materials/Textures/Procedurals/proceduralTexture.js +4 -5
- package/Materials/Textures/Procedurals/proceduralTexture.js.map +1 -1
- package/Materials/Textures/baseTexture.d.ts +17 -23
- package/Materials/Textures/baseTexture.js +20 -23
- package/Materials/Textures/baseTexture.js.map +1 -1
- package/Materials/Textures/cubeTexture.d.ts +1 -1
- package/Materials/Textures/cubeTexture.js +1 -1
- package/Materials/Textures/cubeTexture.js.map +1 -1
- package/Materials/Textures/dynamicTexture.d.ts +1 -1
- package/Materials/Textures/dynamicTexture.js +1 -1
- package/Materials/Textures/dynamicTexture.js.map +1 -1
- package/Materials/Textures/hardwareTextureWrapper.d.ts +1 -1
- package/Materials/Textures/hardwareTextureWrapper.js.map +1 -1
- package/Materials/Textures/internalTexture.d.ts +35 -37
- package/Materials/Textures/internalTexture.js +34 -36
- package/Materials/Textures/internalTexture.js.map +1 -1
- package/Materials/Textures/multiRenderTarget.d.ts +1 -3
- package/Materials/Textures/multiRenderTarget.js +1 -3
- package/Materials/Textures/multiRenderTarget.js.map +1 -1
- package/Materials/Textures/prePassRenderTarget.d.ts +9 -9
- package/Materials/Textures/prePassRenderTarget.js +6 -6
- package/Materials/Textures/prePassRenderTarget.js.map +1 -1
- package/Materials/Textures/renderTargetTexture.d.ts +7 -11
- package/Materials/Textures/renderTargetTexture.js +8 -9
- package/Materials/Textures/renderTargetTexture.js.map +1 -1
- package/Materials/Textures/texture.d.ts +6 -18
- package/Materials/Textures/texture.js +13 -23
- package/Materials/Textures/texture.js.map +1 -1
- package/Materials/Textures/textureSampler.d.ts +5 -5
- package/Materials/Textures/textureSampler.js +5 -5
- package/Materials/Textures/textureSampler.js.map +1 -1
- package/Materials/Textures/thinRenderTargetTexture.js +1 -1
- package/Materials/Textures/thinRenderTargetTexture.js.map +1 -1
- package/Materials/Textures/thinTexture.d.ts +2 -2
- package/Materials/Textures/thinTexture.js +2 -2
- package/Materials/Textures/thinTexture.js.map +1 -1
- package/Materials/Textures/videoTexture.d.ts +1 -1
- package/Materials/Textures/videoTexture.js +3 -3
- package/Materials/Textures/videoTexture.js.map +1 -1
- package/Materials/drawWrapper.d.ts +1 -1
- package/Materials/drawWrapper.js +1 -1
- package/Materials/drawWrapper.js.map +1 -1
- package/Materials/effect.d.ts +17 -17
- package/Materials/effect.js +28 -22
- package/Materials/effect.js.map +1 -1
- package/Materials/effectRenderer.d.ts +1 -1
- package/Materials/effectRenderer.js.map +1 -1
- package/Materials/imageProcessingConfiguration.d.ts +5 -5
- package/Materials/imageProcessingConfiguration.js +4 -4
- package/Materials/imageProcessingConfiguration.js.map +1 -1
- package/Materials/material.d.ts +21 -26
- package/Materials/material.detailMapConfiguration.d.ts +3 -3
- package/Materials/material.detailMapConfiguration.js +2 -2
- package/Materials/material.detailMapConfiguration.js.map +1 -1
- package/Materials/material.js +22 -24
- package/Materials/material.js.map +1 -1
- package/Materials/materialDefines.d.ts +14 -14
- package/Materials/materialDefines.js +13 -13
- package/Materials/materialDefines.js.map +1 -1
- package/Materials/materialHelper.js +2 -7
- package/Materials/materialHelper.js.map +1 -1
- package/Materials/materialPluginEvent.d.ts +15 -15
- package/Materials/materialPluginEvent.js +1 -1
- package/Materials/materialPluginEvent.js.map +1 -1
- package/Materials/materialPluginManager.d.ts +2 -4
- package/Materials/materialPluginManager.js +2 -4
- package/Materials/materialPluginManager.js.map +1 -1
- package/Materials/multiMaterial.d.ts +1 -1
- package/Materials/multiMaterial.js +1 -1
- package/Materials/multiMaterial.js.map +1 -1
- package/Materials/pushMaterial.d.ts +1 -1
- package/Materials/pushMaterial.js +1 -1
- package/Materials/pushMaterial.js.map +1 -1
- package/Materials/standardMaterial.d.ts +3 -3
- package/Materials/standardMaterial.js +3 -3
- package/Materials/standardMaterial.js.map +1 -1
- package/Materials/uniformBuffer.d.ts +4 -4
- package/Materials/uniformBuffer.js +4 -4
- package/Materials/uniformBuffer.js.map +1 -1
- package/Materials/uniformBufferEffectCommonAccessor.d.ts +1 -1
- package/Materials/uniformBufferEffectCommonAccessor.js +1 -1
- package/Materials/uniformBufferEffectCommonAccessor.js.map +1 -1
- package/Maths/math.color.d.ts +1 -1
- package/Maths/math.color.js +1 -1
- package/Maths/math.color.js.map +1 -1
- package/Maths/math.isovector.d.ts +1 -1
- package/Maths/math.isovector.js +1 -1
- package/Maths/math.isovector.js.map +1 -1
- package/Maths/math.like.d.ts +8 -8
- package/Maths/math.like.js.map +1 -1
- package/Maths/math.polar.d.ts +343 -0
- package/Maths/math.polar.js +537 -0
- package/Maths/math.polar.js.map +1 -1
- package/Maths/math.vector.d.ts +58 -24
- package/Maths/math.vector.js +94 -18
- package/Maths/math.vector.js.map +1 -1
- package/Meshes/Builders/tubeBuilder.d.ts +2 -2
- package/Meshes/Builders/tubeBuilder.js +2 -2
- package/Meshes/Builders/tubeBuilder.js.map +1 -1
- package/Meshes/WebGL/webGLDataBuffer.d.ts +1 -1
- package/Meshes/WebGL/webGLDataBuffer.js +1 -1
- package/Meshes/WebGL/webGLDataBuffer.js.map +1 -1
- package/Meshes/WebGPU/webgpuDataBuffer.d.ts +1 -1
- package/Meshes/WebGPU/webgpuDataBuffer.js +1 -1
- package/Meshes/WebGPU/webgpuDataBuffer.js.map +1 -1
- package/Meshes/abstractMesh.d.ts +48 -70
- package/Meshes/abstractMesh.js +47 -69
- package/Meshes/abstractMesh.js.map +1 -1
- package/Meshes/buffer.d.ts +1 -1
- package/Meshes/buffer.js +1 -1
- package/Meshes/buffer.js.map +1 -1
- package/Meshes/geodesicMesh.d.ts +15 -28
- package/Meshes/geodesicMesh.js +11 -24
- package/Meshes/geodesicMesh.js.map +1 -1
- package/Meshes/geometry.d.ts +15 -20
- package/Meshes/geometry.js +7 -12
- package/Meshes/geometry.js.map +1 -1
- package/Meshes/groundMesh.d.ts +8 -8
- package/Meshes/groundMesh.js.map +1 -1
- package/Meshes/instancedMesh.d.ts +12 -16
- package/Meshes/instancedMesh.js +11 -15
- package/Meshes/instancedMesh.js.map +1 -1
- package/Meshes/linesMesh.d.ts +5 -8
- package/Meshes/linesMesh.js +5 -8
- package/Meshes/linesMesh.js.map +1 -1
- package/Meshes/mesh.d.ts +47 -92
- package/Meshes/mesh.js +50 -98
- package/Meshes/mesh.js.map +1 -1
- package/Meshes/mesh.vertexData.d.ts +3 -18
- package/Meshes/mesh.vertexData.js +3 -18
- package/Meshes/mesh.vertexData.js.map +1 -1
- package/Meshes/meshSimplificationSceneComponent.d.ts +1 -1
- package/Meshes/meshSimplificationSceneComponent.js.map +1 -1
- package/Meshes/subMesh.d.ts +23 -51
- package/Meshes/subMesh.js +20 -48
- package/Meshes/subMesh.js.map +1 -1
- package/Meshes/subMesh.project.d.ts +2 -2
- package/Meshes/subMesh.project.js +2 -12
- package/Meshes/subMesh.project.js.map +1 -1
- package/Meshes/thinInstanceMesh.d.ts +4 -4
- package/Meshes/thinInstanceMesh.js.map +1 -1
- package/Meshes/transformNode.d.ts +8 -9
- package/Meshes/transformNode.js +8 -9
- package/Meshes/transformNode.js.map +1 -1
- package/Misc/arrayTools.d.ts +3 -3
- package/Misc/arrayTools.js +1 -1
- package/Misc/arrayTools.js.map +1 -1
- package/Misc/assetsManager.d.ts +1 -3
- package/Misc/assetsManager.js +1 -3
- package/Misc/assetsManager.js.map +1 -1
- package/Misc/basis.js +1 -1
- package/Misc/basis.js.map +1 -1
- package/Misc/coroutine.d.ts +11 -25
- package/Misc/coroutine.js +7 -21
- package/Misc/coroutine.js.map +1 -1
- package/Misc/dds.d.ts +1 -10
- package/Misc/dds.js +1 -10
- package/Misc/dds.js.map +1 -1
- package/Misc/decorators.d.ts +5 -15
- package/Misc/decorators.js +6 -16
- package/Misc/decorators.js.map +1 -1
- package/Misc/depthReducer.d.ts +1 -5
- package/Misc/depthReducer.js +1 -5
- package/Misc/depthReducer.js.map +1 -1
- package/Misc/devTools.d.ts +1 -2
- package/Misc/devTools.js +1 -2
- package/Misc/devTools.js.map +1 -1
- package/Misc/environmentTextureTools.d.ts +1 -6
- package/Misc/environmentTextureTools.js +1 -6
- package/Misc/environmentTextureTools.js.map +1 -1
- package/Misc/fileTools.d.ts +12 -24
- package/Misc/fileTools.js +14 -26
- package/Misc/fileTools.js.map +1 -1
- package/Misc/khronosTextureContainer.d.ts +1 -3
- package/Misc/khronosTextureContainer.js +1 -3
- package/Misc/khronosTextureContainer.js.map +1 -1
- package/Misc/khronosTextureContainer2.d.ts +1 -4
- package/Misc/khronosTextureContainer2.js +1 -4
- package/Misc/khronosTextureContainer2.js.map +1 -1
- package/Misc/observable.d.ts +3 -4
- package/Misc/observable.js +2 -3
- package/Misc/observable.js.map +1 -1
- package/Misc/pivotTools.d.ts +3 -5
- package/Misc/pivotTools.js +3 -5
- package/Misc/pivotTools.js.map +1 -1
- package/Misc/screenshotTools.js +1 -1
- package/Misc/screenshotTools.js.map +1 -1
- package/Misc/tags.d.ts +2 -6
- package/Misc/tags.js +2 -6
- package/Misc/tags.js.map +1 -1
- package/Misc/tga.d.ts +14 -70
- package/Misc/tga.js +14 -70
- package/Misc/tga.js.map +1 -1
- package/Misc/tools.d.ts +9 -0
- package/Misc/tools.js +14 -5
- package/Misc/tools.js.map +1 -1
- package/Misc/typeStore.d.ts +2 -5
- package/Misc/typeStore.js +3 -6
- package/Misc/typeStore.js.map +1 -1
- package/Misc/virtualJoystick.js +0 -1
- package/Misc/virtualJoystick.js.map +1 -1
- package/Misc/webRequest.d.ts +2 -2
- package/Misc/webRequest.js +1 -1
- package/Misc/webRequest.js.map +1 -1
- package/Morph/morphTarget.d.ts +1 -1
- package/Morph/morphTarget.js +1 -1
- package/Morph/morphTarget.js.map +1 -1
- package/Morph/morphTargetManager.d.ts +3 -4
- package/Morph/morphTargetManager.js +2 -3
- package/Morph/morphTargetManager.js.map +1 -1
- package/Particles/IGPUParticleSystemPlatform.d.ts +1 -1
- package/Particles/IGPUParticleSystemPlatform.js.map +1 -1
- package/Particles/IParticleSystem.d.ts +6 -0
- package/Particles/IParticleSystem.js.map +1 -1
- package/Particles/baseParticleSystem.d.ts +14 -9
- package/Particles/baseParticleSystem.js +17 -8
- package/Particles/baseParticleSystem.js.map +1 -1
- package/Particles/cloudPoint.d.ts +16 -19
- package/Particles/cloudPoint.js +21 -29
- package/Particles/cloudPoint.js.map +1 -1
- package/Particles/computeShaderParticleSystem.d.ts +1 -1
- package/Particles/computeShaderParticleSystem.js +1 -1
- package/Particles/computeShaderParticleSystem.js.map +1 -1
- package/Particles/gpuParticleSystem.d.ts +14 -20
- package/Particles/gpuParticleSystem.js +17 -13
- package/Particles/gpuParticleSystem.js.map +1 -1
- package/Particles/particle.d.ts +30 -31
- package/Particles/particle.js +16 -17
- package/Particles/particle.js.map +1 -1
- package/Particles/particleSystem.d.ts +16 -32
- package/Particles/particleSystem.js +30 -31
- package/Particles/particleSystem.js.map +1 -1
- package/Particles/pointsCloudSystem.d.ts +3 -4
- package/Particles/pointsCloudSystem.js +27 -20
- package/Particles/pointsCloudSystem.js.map +1 -1
- package/Particles/solidParticle.d.ts +21 -31
- package/Particles/solidParticle.js +9 -19
- package/Particles/solidParticle.js.map +1 -1
- package/Particles/solidParticleSystem.d.ts +14 -16
- package/Particles/solidParticleSystem.js +14 -16
- package/Particles/solidParticleSystem.js.map +1 -1
- package/Particles/subEmitter.d.ts +1 -5
- package/Particles/subEmitter.js +1 -5
- package/Particles/subEmitter.js.map +1 -1
- package/Particles/webgl2ParticleSystem.d.ts +1 -1
- package/Particles/webgl2ParticleSystem.js +1 -1
- package/Particles/webgl2ParticleSystem.js.map +1 -1
- package/Physics/IPhysicsEngine.d.ts +1 -1
- package/Physics/IPhysicsEngine.js.map +1 -1
- package/Physics/Plugins/ammoJSPlugin.d.ts +3 -0
- package/Physics/Plugins/ammoJSPlugin.js +21 -2
- package/Physics/Plugins/ammoJSPlugin.js.map +1 -1
- package/Physics/Plugins/cannonJSPlugin.d.ts +1 -1
- package/Physics/Plugins/cannonJSPlugin.js +1 -1
- package/Physics/Plugins/cannonJSPlugin.js.map +1 -1
- package/Physics/Plugins/oimoJSPlugin.d.ts +1 -1
- package/Physics/Plugins/oimoJSPlugin.js +3 -3
- package/Physics/Plugins/oimoJSPlugin.js.map +1 -1
- package/Physics/physicsEngineComponent.d.ts +4 -4
- package/Physics/physicsEngineComponent.js +1 -2
- package/Physics/physicsEngineComponent.js.map +1 -1
- package/Physics/physicsImpostor.d.ts +13 -7
- package/Physics/physicsImpostor.js +9 -6
- package/Physics/physicsImpostor.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.d.ts +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.js +2 -2
- package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/ssaoRenderingPipeline.d.ts +2 -4
- package/PostProcesses/RenderPipeline/Pipelines/ssaoRenderingPipeline.js +2 -4
- package/PostProcesses/RenderPipeline/Pipelines/ssaoRenderingPipeline.js.map +1 -1
- package/PostProcesses/RenderPipeline/postProcessRenderEffect.d.ts +10 -10
- package/PostProcesses/RenderPipeline/postProcessRenderEffect.js +5 -5
- package/PostProcesses/RenderPipeline/postProcessRenderEffect.js.map +1 -1
- package/PostProcesses/RenderPipeline/postProcessRenderPipeline.d.ts +13 -13
- package/PostProcesses/RenderPipeline/postProcessRenderPipeline.js +7 -14
- package/PostProcesses/RenderPipeline/postProcessRenderPipeline.js.map +1 -1
- package/PostProcesses/RenderPipeline/postProcessRenderPipelineManager.d.ts +1 -1
- package/PostProcesses/RenderPipeline/postProcessRenderPipelineManager.js +1 -1
- package/PostProcesses/RenderPipeline/postProcessRenderPipelineManager.js.map +1 -1
- package/PostProcesses/RenderPipeline/postProcessRenderPipelineManagerSceneComponent.d.ts +1 -1
- package/PostProcesses/RenderPipeline/postProcessRenderPipelineManagerSceneComponent.js.map +1 -1
- package/PostProcesses/blackAndWhitePostProcess.d.ts +1 -5
- package/PostProcesses/blackAndWhitePostProcess.js +1 -5
- package/PostProcesses/blackAndWhitePostProcess.js.map +1 -1
- package/PostProcesses/bloomEffect.d.ts +4 -4
- package/PostProcesses/bloomEffect.js +3 -3
- package/PostProcesses/bloomEffect.js.map +1 -1
- package/PostProcesses/blurPostProcess.d.ts +1 -5
- package/PostProcesses/blurPostProcess.js +1 -5
- package/PostProcesses/blurPostProcess.js.map +1 -1
- package/PostProcesses/chromaticAberrationPostProcess.d.ts +1 -5
- package/PostProcesses/chromaticAberrationPostProcess.js +1 -5
- package/PostProcesses/chromaticAberrationPostProcess.js.map +1 -1
- package/PostProcesses/colorCorrectionPostProcess.d.ts +1 -5
- package/PostProcesses/colorCorrectionPostProcess.js +1 -5
- package/PostProcesses/colorCorrectionPostProcess.js.map +1 -1
- package/PostProcesses/convolutionPostProcess.d.ts +1 -5
- package/PostProcesses/convolutionPostProcess.js +1 -5
- package/PostProcesses/convolutionPostProcess.js.map +1 -1
- package/PostProcesses/depthOfFieldEffect.d.ts +4 -4
- package/PostProcesses/depthOfFieldEffect.js +3 -3
- package/PostProcesses/depthOfFieldEffect.js.map +1 -1
- package/PostProcesses/displayPassPostProcess.d.ts +1 -5
- package/PostProcesses/displayPassPostProcess.js +1 -5
- package/PostProcesses/displayPassPostProcess.js.map +1 -1
- package/PostProcesses/extractHighlightsPostProcess.d.ts +2 -2
- package/PostProcesses/extractHighlightsPostProcess.js +2 -2
- package/PostProcesses/extractHighlightsPostProcess.js.map +1 -1
- package/PostProcesses/filterPostProcess.d.ts +1 -5
- package/PostProcesses/filterPostProcess.js +1 -5
- package/PostProcesses/filterPostProcess.js.map +1 -1
- package/PostProcesses/fxaaPostProcess.d.ts +1 -5
- package/PostProcesses/fxaaPostProcess.js +1 -5
- package/PostProcesses/fxaaPostProcess.js.map +1 -1
- package/PostProcesses/grainPostProcess.d.ts +1 -5
- package/PostProcesses/grainPostProcess.js +1 -5
- package/PostProcesses/grainPostProcess.js.map +1 -1
- package/PostProcesses/imageProcessingPostProcess.d.ts +1 -1
- package/PostProcesses/imageProcessingPostProcess.js +1 -1
- package/PostProcesses/imageProcessingPostProcess.js.map +1 -1
- package/PostProcesses/motionBlurPostProcess.d.ts +1 -5
- package/PostProcesses/motionBlurPostProcess.js +1 -5
- package/PostProcesses/motionBlurPostProcess.js.map +1 -1
- package/PostProcesses/passPostProcess.d.ts +2 -10
- package/PostProcesses/passPostProcess.js +2 -10
- package/PostProcesses/passPostProcess.js.map +1 -1
- package/PostProcesses/postProcess.d.ts +8 -12
- package/PostProcesses/postProcess.js +6 -10
- package/PostProcesses/postProcess.js.map +1 -1
- package/PostProcesses/postProcessManager.d.ts +3 -3
- package/PostProcesses/postProcessManager.js +3 -3
- package/PostProcesses/postProcessManager.js.map +1 -1
- package/PostProcesses/refractionPostProcess.d.ts +1 -5
- package/PostProcesses/refractionPostProcess.js +1 -5
- package/PostProcesses/refractionPostProcess.js.map +1 -1
- package/PostProcesses/screenSpaceCurvaturePostProcess.d.ts +1 -5
- package/PostProcesses/screenSpaceCurvaturePostProcess.js +1 -5
- package/PostProcesses/screenSpaceCurvaturePostProcess.js.map +1 -1
- package/PostProcesses/screenSpaceReflectionPostProcess.d.ts +1 -5
- package/PostProcesses/screenSpaceReflectionPostProcess.js +1 -5
- package/PostProcesses/screenSpaceReflectionPostProcess.js.map +1 -1
- package/PostProcesses/sharpenPostProcess.d.ts +1 -5
- package/PostProcesses/sharpenPostProcess.js +1 -5
- package/PostProcesses/sharpenPostProcess.js.map +1 -1
- package/PostProcesses/volumetricLightScatteringPostProcess.d.ts +1 -1
- package/PostProcesses/volumetricLightScatteringPostProcess.js +1 -1
- package/PostProcesses/volumetricLightScatteringPostProcess.js.map +1 -1
- package/Probes/reflectionProbe.d.ts +1 -1
- package/Probes/reflectionProbe.js +1 -1
- package/Probes/reflectionProbe.js.map +1 -1
- package/Rendering/boundingBoxRenderer.d.ts +5 -5
- package/Rendering/boundingBoxRenderer.js +2 -2
- package/Rendering/boundingBoxRenderer.js.map +1 -1
- package/Rendering/depthPeelingSceneComponent.d.ts +2 -2
- package/Rendering/depthPeelingSceneComponent.js.map +1 -1
- package/Rendering/depthRenderer.d.ts +1 -2
- package/Rendering/depthRenderer.js +1 -2
- package/Rendering/depthRenderer.js.map +1 -1
- package/Rendering/depthRendererSceneComponent.d.ts +1 -1
- package/Rendering/depthRendererSceneComponent.js.map +1 -1
- package/Rendering/edgesRenderer.d.ts +2 -2
- package/Rendering/edgesRenderer.js +1 -1
- package/Rendering/edgesRenderer.js.map +1 -1
- package/Rendering/geometryBufferRenderer.d.ts +10 -16
- package/Rendering/geometryBufferRenderer.js +9 -15
- package/Rendering/geometryBufferRenderer.js.map +1 -1
- package/Rendering/geometryBufferRendererSceneComponent.d.ts +1 -1
- package/Rendering/geometryBufferRendererSceneComponent.js.map +1 -1
- package/Rendering/outlineRenderer.d.ts +3 -3
- package/Rendering/outlineRenderer.js.map +1 -1
- package/Rendering/prePassRenderer.d.ts +7 -14
- package/Rendering/prePassRenderer.js +8 -15
- package/Rendering/prePassRenderer.js.map +1 -1
- package/Rendering/prePassRendererSceneComponent.d.ts +2 -2
- package/Rendering/prePassRendererSceneComponent.js.map +1 -1
- package/Rendering/renderingGroup.d.ts +3 -3
- package/Rendering/renderingGroup.js +3 -3
- package/Rendering/renderingGroup.js.map +1 -1
- package/Rendering/renderingManager.d.ts +15 -8
- package/Rendering/renderingManager.js +59 -17
- package/Rendering/renderingManager.js.map +1 -1
- package/Rendering/subSurfaceConfiguration.d.ts +2 -4
- package/Rendering/subSurfaceConfiguration.js +2 -4
- package/Rendering/subSurfaceConfiguration.js.map +1 -1
- package/Rendering/subSurfaceSceneComponent.d.ts +1 -1
- package/Rendering/subSurfaceSceneComponent.js.map +1 -1
- package/Rendering/utilityLayerRenderer.d.ts +4 -4
- package/Rendering/utilityLayerRenderer.js +15 -10
- package/Rendering/utilityLayerRenderer.js.map +1 -1
- package/Shaders/ShadersInclude/backgroundFragmentDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/backgroundFragmentDeclaration.js +1 -1
- package/Shaders/ShadersInclude/backgroundFragmentDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/backgroundUboDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/backgroundUboDeclaration.js +1 -1
- package/Shaders/ShadersInclude/backgroundUboDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/backgroundVertexDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/backgroundVertexDeclaration.js +1 -1
- package/Shaders/ShadersInclude/backgroundVertexDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/bakedVertexAnimation.d.ts +1 -1
- package/Shaders/ShadersInclude/bakedVertexAnimation.js +1 -1
- package/Shaders/ShadersInclude/bakedVertexAnimation.js.map +1 -1
- package/Shaders/ShadersInclude/bakedVertexAnimationDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/bakedVertexAnimationDeclaration.js +1 -1
- package/Shaders/ShadersInclude/bakedVertexAnimationDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/bayerDitherFunctions.d.ts +1 -1
- package/Shaders/ShadersInclude/bayerDitherFunctions.js +1 -1
- package/Shaders/ShadersInclude/bayerDitherFunctions.js.map +1 -1
- package/Shaders/ShadersInclude/bonesDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/bonesDeclaration.js +1 -1
- package/Shaders/ShadersInclude/bonesDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/bonesVertex.d.ts +1 -1
- package/Shaders/ShadersInclude/bonesVertex.js +1 -1
- package/Shaders/ShadersInclude/bonesVertex.js.map +1 -1
- package/Shaders/ShadersInclude/boundingBoxRendererFragmentDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/boundingBoxRendererFragmentDeclaration.js +1 -1
- package/Shaders/ShadersInclude/boundingBoxRendererFragmentDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/boundingBoxRendererUboDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/boundingBoxRendererUboDeclaration.js +1 -1
- package/Shaders/ShadersInclude/boundingBoxRendererUboDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/boundingBoxRendererVertexDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/boundingBoxRendererVertexDeclaration.js +1 -1
- package/Shaders/ShadersInclude/boundingBoxRendererVertexDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/bumpFragment.d.ts +1 -1
- package/Shaders/ShadersInclude/bumpFragment.js +1 -1
- package/Shaders/ShadersInclude/bumpFragment.js.map +1 -1
- package/Shaders/ShadersInclude/bumpFragmentFunctions.d.ts +1 -1
- package/Shaders/ShadersInclude/bumpFragmentFunctions.js +1 -1
- package/Shaders/ShadersInclude/bumpFragmentFunctions.js.map +1 -1
- package/Shaders/ShadersInclude/bumpFragmentMainFunctions.d.ts +1 -1
- package/Shaders/ShadersInclude/bumpFragmentMainFunctions.js +1 -1
- package/Shaders/ShadersInclude/bumpFragmentMainFunctions.js.map +1 -1
- package/Shaders/ShadersInclude/bumpVertex.d.ts +1 -1
- package/Shaders/ShadersInclude/bumpVertex.js +1 -1
- package/Shaders/ShadersInclude/bumpVertex.js.map +1 -1
- package/Shaders/ShadersInclude/bumpVertexDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/bumpVertexDeclaration.js +1 -1
- package/Shaders/ShadersInclude/bumpVertexDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/clipPlaneFragment.d.ts +1 -1
- package/Shaders/ShadersInclude/clipPlaneFragment.js +1 -1
- package/Shaders/ShadersInclude/clipPlaneFragment.js.map +1 -1
- package/Shaders/ShadersInclude/clipPlaneFragmentDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/clipPlaneFragmentDeclaration.js +1 -1
- package/Shaders/ShadersInclude/clipPlaneFragmentDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/clipPlaneFragmentDeclaration2.d.ts +1 -1
- package/Shaders/ShadersInclude/clipPlaneFragmentDeclaration2.js +1 -1
- package/Shaders/ShadersInclude/clipPlaneFragmentDeclaration2.js.map +1 -1
- package/Shaders/ShadersInclude/clipPlaneVertex.d.ts +1 -1
- package/Shaders/ShadersInclude/clipPlaneVertex.js +1 -1
- package/Shaders/ShadersInclude/clipPlaneVertex.js.map +1 -1
- package/Shaders/ShadersInclude/clipPlaneVertexDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/clipPlaneVertexDeclaration.js +1 -1
- package/Shaders/ShadersInclude/clipPlaneVertexDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/clipPlaneVertexDeclaration2.d.ts +1 -1
- package/Shaders/ShadersInclude/clipPlaneVertexDeclaration2.js +1 -1
- package/Shaders/ShadersInclude/clipPlaneVertexDeclaration2.js.map +1 -1
- package/Shaders/ShadersInclude/defaultFragmentDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/defaultFragmentDeclaration.js +1 -1
- package/Shaders/ShadersInclude/defaultFragmentDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/defaultUboDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/defaultUboDeclaration.js +1 -1
- package/Shaders/ShadersInclude/defaultUboDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/defaultVertexDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/defaultVertexDeclaration.js +1 -1
- package/Shaders/ShadersInclude/defaultVertexDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/depthPrePass.d.ts +1 -1
- package/Shaders/ShadersInclude/depthPrePass.js +1 -1
- package/Shaders/ShadersInclude/depthPrePass.js.map +1 -1
- package/Shaders/ShadersInclude/diffusionProfile.d.ts +1 -1
- package/Shaders/ShadersInclude/diffusionProfile.js +1 -1
- package/Shaders/ShadersInclude/diffusionProfile.js.map +1 -1
- package/Shaders/ShadersInclude/fibonacci.d.ts +1 -1
- package/Shaders/ShadersInclude/fibonacci.js +1 -1
- package/Shaders/ShadersInclude/fibonacci.js.map +1 -1
- package/Shaders/ShadersInclude/fogFragment.d.ts +1 -1
- package/Shaders/ShadersInclude/fogFragment.js +1 -1
- package/Shaders/ShadersInclude/fogFragment.js.map +1 -1
- package/Shaders/ShadersInclude/fogFragmentDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/fogFragmentDeclaration.js +1 -1
- package/Shaders/ShadersInclude/fogFragmentDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/fogVertex.d.ts +1 -1
- package/Shaders/ShadersInclude/fogVertex.js +1 -1
- package/Shaders/ShadersInclude/fogVertex.js.map +1 -1
- package/Shaders/ShadersInclude/fogVertexDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/fogVertexDeclaration.js +1 -1
- package/Shaders/ShadersInclude/fogVertexDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/fresnelFunction.d.ts +1 -1
- package/Shaders/ShadersInclude/fresnelFunction.js +1 -1
- package/Shaders/ShadersInclude/fresnelFunction.js.map +1 -1
- package/Shaders/ShadersInclude/geometryUboDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/geometryUboDeclaration.js +1 -1
- package/Shaders/ShadersInclude/geometryUboDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/geometryVertexDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/geometryVertexDeclaration.js +1 -1
- package/Shaders/ShadersInclude/geometryVertexDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/harmonicsFunctions.d.ts +1 -1
- package/Shaders/ShadersInclude/harmonicsFunctions.js +1 -1
- package/Shaders/ShadersInclude/harmonicsFunctions.js.map +1 -1
- package/Shaders/ShadersInclude/hdrFilteringFunctions.d.ts +1 -1
- package/Shaders/ShadersInclude/hdrFilteringFunctions.js +1 -1
- package/Shaders/ShadersInclude/hdrFilteringFunctions.js.map +1 -1
- package/Shaders/ShadersInclude/helperFunctions.d.ts +1 -1
- package/Shaders/ShadersInclude/helperFunctions.js +1 -1
- package/Shaders/ShadersInclude/helperFunctions.js.map +1 -1
- package/Shaders/ShadersInclude/imageProcessingCompatibility.d.ts +1 -1
- package/Shaders/ShadersInclude/imageProcessingCompatibility.js +1 -1
- package/Shaders/ShadersInclude/imageProcessingCompatibility.js.map +1 -1
- package/Shaders/ShadersInclude/imageProcessingDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/imageProcessingDeclaration.js +1 -1
- package/Shaders/ShadersInclude/imageProcessingDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/imageProcessingFunctions.d.ts +1 -1
- package/Shaders/ShadersInclude/imageProcessingFunctions.js +1 -1
- package/Shaders/ShadersInclude/imageProcessingFunctions.js.map +1 -1
- package/Shaders/ShadersInclude/importanceSampling.d.ts +1 -1
- package/Shaders/ShadersInclude/importanceSampling.js +1 -1
- package/Shaders/ShadersInclude/importanceSampling.js.map +1 -1
- package/Shaders/ShadersInclude/instancesDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/instancesDeclaration.js +1 -1
- package/Shaders/ShadersInclude/instancesDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/instancesVertex.d.ts +1 -1
- package/Shaders/ShadersInclude/instancesVertex.js +1 -1
- package/Shaders/ShadersInclude/instancesVertex.js.map +1 -1
- package/Shaders/ShadersInclude/kernelBlurFragment.d.ts +1 -1
- package/Shaders/ShadersInclude/kernelBlurFragment.js +1 -1
- package/Shaders/ShadersInclude/kernelBlurFragment.js.map +1 -1
- package/Shaders/ShadersInclude/kernelBlurFragment2.d.ts +1 -1
- package/Shaders/ShadersInclude/kernelBlurFragment2.js +1 -1
- package/Shaders/ShadersInclude/kernelBlurFragment2.js.map +1 -1
- package/Shaders/ShadersInclude/kernelBlurVaryingDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/kernelBlurVaryingDeclaration.js +1 -1
- package/Shaders/ShadersInclude/kernelBlurVaryingDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/kernelBlurVertex.d.ts +1 -1
- package/Shaders/ShadersInclude/kernelBlurVertex.js +1 -1
- package/Shaders/ShadersInclude/kernelBlurVertex.js.map +1 -1
- package/Shaders/ShadersInclude/lightFragment.d.ts +1 -1
- package/Shaders/ShadersInclude/lightFragment.js +1 -1
- package/Shaders/ShadersInclude/lightFragment.js.map +1 -1
- package/Shaders/ShadersInclude/lightFragmentDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/lightFragmentDeclaration.js +1 -1
- package/Shaders/ShadersInclude/lightFragmentDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/lightUboDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/lightUboDeclaration.js +1 -1
- package/Shaders/ShadersInclude/lightUboDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/lightVxFragmentDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/lightVxFragmentDeclaration.js +1 -1
- package/Shaders/ShadersInclude/lightVxFragmentDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/lightVxUboDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/lightVxUboDeclaration.js +1 -1
- package/Shaders/ShadersInclude/lightVxUboDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/lightsFragmentFunctions.d.ts +1 -1
- package/Shaders/ShadersInclude/lightsFragmentFunctions.js +1 -1
- package/Shaders/ShadersInclude/lightsFragmentFunctions.js.map +1 -1
- package/Shaders/ShadersInclude/logDepthDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/logDepthDeclaration.js +1 -1
- package/Shaders/ShadersInclude/logDepthDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/logDepthFragment.d.ts +1 -1
- package/Shaders/ShadersInclude/logDepthFragment.js +1 -1
- package/Shaders/ShadersInclude/logDepthFragment.js.map +1 -1
- package/Shaders/ShadersInclude/logDepthVertex.d.ts +1 -1
- package/Shaders/ShadersInclude/logDepthVertex.js +1 -1
- package/Shaders/ShadersInclude/logDepthVertex.js.map +1 -1
- package/Shaders/ShadersInclude/mainUVVaryingDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/mainUVVaryingDeclaration.js +1 -1
- package/Shaders/ShadersInclude/mainUVVaryingDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/meshFragmentDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/meshFragmentDeclaration.js +1 -1
- package/Shaders/ShadersInclude/meshFragmentDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/meshUboDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/meshUboDeclaration.js +1 -1
- package/Shaders/ShadersInclude/meshUboDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/meshVertexDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/meshVertexDeclaration.js +1 -1
- package/Shaders/ShadersInclude/meshVertexDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/morphTargetsVertex.d.ts +1 -1
- package/Shaders/ShadersInclude/morphTargetsVertex.js +1 -1
- package/Shaders/ShadersInclude/morphTargetsVertex.js.map +1 -1
- package/Shaders/ShadersInclude/morphTargetsVertexDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/morphTargetsVertexDeclaration.js +1 -1
- package/Shaders/ShadersInclude/morphTargetsVertexDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/morphTargetsVertexGlobal.d.ts +1 -1
- package/Shaders/ShadersInclude/morphTargetsVertexGlobal.js +1 -1
- package/Shaders/ShadersInclude/morphTargetsVertexGlobal.js.map +1 -1
- package/Shaders/ShadersInclude/morphTargetsVertexGlobalDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/morphTargetsVertexGlobalDeclaration.js +1 -1
- package/Shaders/ShadersInclude/morphTargetsVertexGlobalDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/mrtFragmentDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/mrtFragmentDeclaration.js +1 -1
- package/Shaders/ShadersInclude/mrtFragmentDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/oitDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/oitDeclaration.js +1 -1
- package/Shaders/ShadersInclude/oitDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/oitFragment.d.ts +1 -1
- package/Shaders/ShadersInclude/oitFragment.js +1 -1
- package/Shaders/ShadersInclude/oitFragment.js.map +1 -1
- package/Shaders/ShadersInclude/packingFunctions.d.ts +1 -1
- package/Shaders/ShadersInclude/packingFunctions.js +1 -1
- package/Shaders/ShadersInclude/packingFunctions.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBRDFFunctions.d.ts +1 -1
- package/Shaders/ShadersInclude/pbrBRDFFunctions.js +1 -1
- package/Shaders/ShadersInclude/pbrBRDFFunctions.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockAlbedoOpacity.d.ts +1 -1
- package/Shaders/ShadersInclude/pbrBlockAlbedoOpacity.js +3 -3
- package/Shaders/ShadersInclude/pbrBlockAlbedoOpacity.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockAlphaFresnel.d.ts +1 -1
- package/Shaders/ShadersInclude/pbrBlockAlphaFresnel.js +1 -1
- package/Shaders/ShadersInclude/pbrBlockAlphaFresnel.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockAmbientOcclusion.d.ts +1 -1
- package/Shaders/ShadersInclude/pbrBlockAmbientOcclusion.js +1 -1
- package/Shaders/ShadersInclude/pbrBlockAmbientOcclusion.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockAnisotropic.d.ts +1 -1
- package/Shaders/ShadersInclude/pbrBlockAnisotropic.js +1 -1
- package/Shaders/ShadersInclude/pbrBlockAnisotropic.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockClearcoat.d.ts +1 -1
- package/Shaders/ShadersInclude/pbrBlockClearcoat.js +1 -1
- package/Shaders/ShadersInclude/pbrBlockClearcoat.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockDirectLighting.d.ts +1 -1
- package/Shaders/ShadersInclude/pbrBlockDirectLighting.js +1 -1
- package/Shaders/ShadersInclude/pbrBlockDirectLighting.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockFinalColorComposition.d.ts +1 -1
- package/Shaders/ShadersInclude/pbrBlockFinalColorComposition.js +1 -1
- package/Shaders/ShadersInclude/pbrBlockFinalColorComposition.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockFinalLitComponents.d.ts +1 -1
- package/Shaders/ShadersInclude/pbrBlockFinalLitComponents.js +1 -1
- package/Shaders/ShadersInclude/pbrBlockFinalLitComponents.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockFinalUnlitComponents.d.ts +1 -1
- package/Shaders/ShadersInclude/pbrBlockFinalUnlitComponents.js +1 -1
- package/Shaders/ShadersInclude/pbrBlockFinalUnlitComponents.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockGeometryInfo.d.ts +1 -1
- package/Shaders/ShadersInclude/pbrBlockGeometryInfo.js +1 -1
- package/Shaders/ShadersInclude/pbrBlockGeometryInfo.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockImageProcessing.d.ts +1 -1
- package/Shaders/ShadersInclude/pbrBlockImageProcessing.js +1 -1
- package/Shaders/ShadersInclude/pbrBlockImageProcessing.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockIridescence.d.ts +1 -1
- package/Shaders/ShadersInclude/pbrBlockIridescence.js +1 -1
- package/Shaders/ShadersInclude/pbrBlockIridescence.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockLightmapInit.d.ts +1 -1
- package/Shaders/ShadersInclude/pbrBlockLightmapInit.js +1 -1
- package/Shaders/ShadersInclude/pbrBlockLightmapInit.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockNormalFinal.d.ts +1 -1
- package/Shaders/ShadersInclude/pbrBlockNormalFinal.js +1 -1
- package/Shaders/ShadersInclude/pbrBlockNormalFinal.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockNormalGeometric.d.ts +1 -1
- package/Shaders/ShadersInclude/pbrBlockNormalGeometric.js +1 -1
- package/Shaders/ShadersInclude/pbrBlockNormalGeometric.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockReflectance.d.ts +1 -1
- package/Shaders/ShadersInclude/pbrBlockReflectance.js +1 -1
- package/Shaders/ShadersInclude/pbrBlockReflectance.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockReflectance0.d.ts +1 -1
- package/Shaders/ShadersInclude/pbrBlockReflectance0.js +1 -1
- package/Shaders/ShadersInclude/pbrBlockReflectance0.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockReflection.d.ts +1 -1
- package/Shaders/ShadersInclude/pbrBlockReflection.js +1 -1
- package/Shaders/ShadersInclude/pbrBlockReflection.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockReflectivity.d.ts +1 -1
- package/Shaders/ShadersInclude/pbrBlockReflectivity.js +1 -1
- package/Shaders/ShadersInclude/pbrBlockReflectivity.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockSheen.d.ts +1 -1
- package/Shaders/ShadersInclude/pbrBlockSheen.js +1 -1
- package/Shaders/ShadersInclude/pbrBlockSheen.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockSubSurface.d.ts +1 -1
- package/Shaders/ShadersInclude/pbrBlockSubSurface.js +1 -1
- package/Shaders/ShadersInclude/pbrBlockSubSurface.js.map +1 -1
- package/Shaders/ShadersInclude/pbrDebug.d.ts +1 -1
- package/Shaders/ShadersInclude/pbrDebug.js +1 -1
- package/Shaders/ShadersInclude/pbrDebug.js.map +1 -1
- package/Shaders/ShadersInclude/pbrDirectLightingFalloffFunctions.d.ts +1 -1
- package/Shaders/ShadersInclude/pbrDirectLightingFalloffFunctions.js +1 -1
- package/Shaders/ShadersInclude/pbrDirectLightingFalloffFunctions.js.map +1 -1
- package/Shaders/ShadersInclude/pbrDirectLightingFunctions.d.ts +1 -1
- package/Shaders/ShadersInclude/pbrDirectLightingFunctions.js +1 -1
- package/Shaders/ShadersInclude/pbrDirectLightingFunctions.js.map +1 -1
- package/Shaders/ShadersInclude/pbrDirectLightingSetupFunctions.d.ts +1 -1
- package/Shaders/ShadersInclude/pbrDirectLightingSetupFunctions.js +1 -1
- package/Shaders/ShadersInclude/pbrDirectLightingSetupFunctions.js.map +1 -1
- package/Shaders/ShadersInclude/pbrFragmentDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/pbrFragmentDeclaration.js +1 -1
- package/Shaders/ShadersInclude/pbrFragmentDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/pbrFragmentExtraDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/pbrFragmentExtraDeclaration.js +2 -2
- package/Shaders/ShadersInclude/pbrFragmentExtraDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/pbrFragmentSamplersDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/pbrFragmentSamplersDeclaration.js +1 -1
- package/Shaders/ShadersInclude/pbrFragmentSamplersDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/pbrHelperFunctions.d.ts +1 -1
- package/Shaders/ShadersInclude/pbrHelperFunctions.js +1 -1
- package/Shaders/ShadersInclude/pbrHelperFunctions.js.map +1 -1
- package/Shaders/ShadersInclude/pbrIBLFunctions.d.ts +1 -1
- package/Shaders/ShadersInclude/pbrIBLFunctions.js +1 -1
- package/Shaders/ShadersInclude/pbrIBLFunctions.js.map +1 -1
- package/Shaders/ShadersInclude/pbrUboDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/pbrUboDeclaration.js +1 -1
- package/Shaders/ShadersInclude/pbrUboDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/pbrVertexDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/pbrVertexDeclaration.js +1 -1
- package/Shaders/ShadersInclude/pbrVertexDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/pointCloudVertex.d.ts +1 -1
- package/Shaders/ShadersInclude/pointCloudVertex.js +1 -1
- package/Shaders/ShadersInclude/pointCloudVertex.js.map +1 -1
- package/Shaders/ShadersInclude/pointCloudVertexDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/pointCloudVertexDeclaration.js +1 -1
- package/Shaders/ShadersInclude/pointCloudVertexDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/prePassDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/prePassDeclaration.js +1 -1
- package/Shaders/ShadersInclude/prePassDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/prePassVertex.d.ts +1 -1
- package/Shaders/ShadersInclude/prePassVertex.js +1 -1
- package/Shaders/ShadersInclude/prePassVertex.js.map +1 -1
- package/Shaders/ShadersInclude/prePassVertexDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/prePassVertexDeclaration.js +1 -1
- package/Shaders/ShadersInclude/prePassVertexDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/reflectionFunction.d.ts +1 -1
- package/Shaders/ShadersInclude/reflectionFunction.js +1 -1
- package/Shaders/ShadersInclude/reflectionFunction.js.map +1 -1
- package/Shaders/ShadersInclude/samplerFragmentAlternateDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/samplerFragmentAlternateDeclaration.js +1 -1
- package/Shaders/ShadersInclude/samplerFragmentAlternateDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/samplerFragmentDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/samplerFragmentDeclaration.js +1 -1
- package/Shaders/ShadersInclude/samplerFragmentDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/samplerVertexDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/samplerVertexDeclaration.js +1 -1
- package/Shaders/ShadersInclude/samplerVertexDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/samplerVertexImplementation.d.ts +1 -1
- package/Shaders/ShadersInclude/samplerVertexImplementation.js +1 -1
- package/Shaders/ShadersInclude/samplerVertexImplementation.js.map +1 -1
- package/Shaders/ShadersInclude/sceneFragmentDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/sceneFragmentDeclaration.js +1 -1
- package/Shaders/ShadersInclude/sceneFragmentDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/sceneUboDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/sceneUboDeclaration.js +1 -1
- package/Shaders/ShadersInclude/sceneUboDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/sceneVertexDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/sceneVertexDeclaration.js +1 -1
- package/Shaders/ShadersInclude/sceneVertexDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/shadowMapFragment.d.ts +1 -1
- package/Shaders/ShadersInclude/shadowMapFragment.js +1 -1
- package/Shaders/ShadersInclude/shadowMapFragment.js.map +1 -1
- package/Shaders/ShadersInclude/shadowMapFragmentExtraDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/shadowMapFragmentExtraDeclaration.js +1 -1
- package/Shaders/ShadersInclude/shadowMapFragmentExtraDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/shadowMapFragmentSoftTransparentShadow.d.ts +1 -1
- package/Shaders/ShadersInclude/shadowMapFragmentSoftTransparentShadow.js +1 -1
- package/Shaders/ShadersInclude/shadowMapFragmentSoftTransparentShadow.js.map +1 -1
- package/Shaders/ShadersInclude/shadowMapUboDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/shadowMapUboDeclaration.js +1 -1
- package/Shaders/ShadersInclude/shadowMapUboDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/shadowMapVertexDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/shadowMapVertexDeclaration.js +1 -1
- package/Shaders/ShadersInclude/shadowMapVertexDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/shadowMapVertexExtraDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/shadowMapVertexExtraDeclaration.js +1 -1
- package/Shaders/ShadersInclude/shadowMapVertexExtraDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/shadowMapVertexMetric.d.ts +1 -1
- package/Shaders/ShadersInclude/shadowMapVertexMetric.js +1 -1
- package/Shaders/ShadersInclude/shadowMapVertexMetric.js.map +1 -1
- package/Shaders/ShadersInclude/shadowMapVertexNormalBias.d.ts +1 -1
- package/Shaders/ShadersInclude/shadowMapVertexNormalBias.js +1 -1
- package/Shaders/ShadersInclude/shadowMapVertexNormalBias.js.map +1 -1
- package/Shaders/ShadersInclude/shadowsFragmentFunctions.d.ts +1 -1
- package/Shaders/ShadersInclude/shadowsFragmentFunctions.js +1 -1
- package/Shaders/ShadersInclude/shadowsFragmentFunctions.js.map +1 -1
- package/Shaders/ShadersInclude/shadowsVertex.d.ts +1 -1
- package/Shaders/ShadersInclude/shadowsVertex.js +1 -1
- package/Shaders/ShadersInclude/shadowsVertex.js.map +1 -1
- package/Shaders/ShadersInclude/subSurfaceScatteringFunctions.d.ts +1 -1
- package/Shaders/ShadersInclude/subSurfaceScatteringFunctions.js +1 -1
- package/Shaders/ShadersInclude/subSurfaceScatteringFunctions.js.map +1 -1
- package/Shaders/ShadersInclude/uvAttributeDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/uvAttributeDeclaration.js +1 -1
- package/Shaders/ShadersInclude/uvAttributeDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/uvVariableDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/uvVariableDeclaration.js +1 -1
- package/Shaders/ShadersInclude/uvVariableDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/vertexColorMixing.d.ts +1 -1
- package/Shaders/ShadersInclude/vertexColorMixing.js +2 -2
- package/Shaders/ShadersInclude/vertexColorMixing.js.map +1 -1
- package/Shaders/anaglyph.fragment.d.ts +1 -1
- package/Shaders/anaglyph.fragment.js +1 -1
- package/Shaders/anaglyph.fragment.js.map +1 -1
- package/Shaders/background.fragment.d.ts +1 -1
- package/Shaders/background.fragment.js +1 -1
- package/Shaders/background.fragment.js.map +1 -1
- package/Shaders/background.vertex.d.ts +1 -1
- package/Shaders/background.vertex.js +1 -1
- package/Shaders/background.vertex.js.map +1 -1
- package/Shaders/blackAndWhite.fragment.d.ts +1 -1
- package/Shaders/blackAndWhite.fragment.js +1 -1
- package/Shaders/blackAndWhite.fragment.js.map +1 -1
- package/Shaders/bloomMerge.fragment.d.ts +1 -1
- package/Shaders/bloomMerge.fragment.js +1 -1
- package/Shaders/bloomMerge.fragment.js.map +1 -1
- package/Shaders/blur.fragment.d.ts +1 -1
- package/Shaders/blur.fragment.js +1 -1
- package/Shaders/blur.fragment.js.map +1 -1
- package/Shaders/boundingBoxRenderer.fragment.d.ts +1 -1
- package/Shaders/boundingBoxRenderer.fragment.js +1 -1
- package/Shaders/boundingBoxRenderer.fragment.js.map +1 -1
- package/Shaders/boundingBoxRenderer.vertex.d.ts +1 -1
- package/Shaders/boundingBoxRenderer.vertex.js +1 -1
- package/Shaders/boundingBoxRenderer.vertex.js.map +1 -1
- package/Shaders/chromaticAberration.fragment.d.ts +1 -1
- package/Shaders/chromaticAberration.fragment.js +2 -1
- package/Shaders/chromaticAberration.fragment.js.map +1 -1
- package/Shaders/circleOfConfusion.fragment.d.ts +1 -1
- package/Shaders/circleOfConfusion.fragment.js +1 -1
- package/Shaders/circleOfConfusion.fragment.js.map +1 -1
- package/Shaders/clearQuad.fragment.d.ts +1 -1
- package/Shaders/clearQuad.fragment.js +1 -1
- package/Shaders/clearQuad.fragment.js.map +1 -1
- package/Shaders/clearQuad.vertex.d.ts +1 -1
- package/Shaders/clearQuad.vertex.js +1 -1
- package/Shaders/clearQuad.vertex.js.map +1 -1
- package/Shaders/color.fragment.d.ts +1 -1
- package/Shaders/color.fragment.js +4 -3
- package/Shaders/color.fragment.js.map +1 -1
- package/Shaders/color.vertex.d.ts +1 -1
- package/Shaders/color.vertex.js +2 -2
- package/Shaders/color.vertex.js.map +1 -1
- package/Shaders/colorCorrection.fragment.d.ts +1 -1
- package/Shaders/colorCorrection.fragment.js +1 -1
- package/Shaders/colorCorrection.fragment.js.map +1 -1
- package/Shaders/convolution.fragment.d.ts +1 -1
- package/Shaders/convolution.fragment.js +1 -1
- package/Shaders/convolution.fragment.js.map +1 -1
- package/Shaders/default.fragment.d.ts +1 -1
- package/Shaders/default.fragment.js +4 -4
- package/Shaders/default.fragment.js.map +1 -1
- package/Shaders/default.vertex.d.ts +1 -1
- package/Shaders/default.vertex.js +2 -2
- package/Shaders/default.vertex.js.map +1 -1
- package/Shaders/depth.fragment.d.ts +1 -1
- package/Shaders/depth.fragment.js +1 -1
- package/Shaders/depth.fragment.js.map +1 -1
- package/Shaders/depth.vertex.d.ts +1 -1
- package/Shaders/depth.vertex.js +1 -1
- package/Shaders/depth.vertex.js.map +1 -1
- package/Shaders/depthBoxBlur.fragment.d.ts +1 -1
- package/Shaders/depthBoxBlur.fragment.js +1 -1
- package/Shaders/depthBoxBlur.fragment.js.map +1 -1
- package/Shaders/depthOfField.fragment.d.ts +1 -1
- package/Shaders/depthOfField.fragment.js +1 -1
- package/Shaders/depthOfField.fragment.js.map +1 -1
- package/Shaders/depthOfFieldMerge.fragment.d.ts +1 -1
- package/Shaders/depthOfFieldMerge.fragment.js +1 -1
- package/Shaders/depthOfFieldMerge.fragment.js.map +1 -1
- package/Shaders/displayPass.fragment.d.ts +1 -1
- package/Shaders/displayPass.fragment.js +1 -1
- package/Shaders/displayPass.fragment.js.map +1 -1
- package/Shaders/extractHighlights.fragment.d.ts +1 -1
- package/Shaders/extractHighlights.fragment.js +1 -1
- package/Shaders/extractHighlights.fragment.js.map +1 -1
- package/Shaders/filter.fragment.d.ts +1 -1
- package/Shaders/filter.fragment.js +1 -1
- package/Shaders/filter.fragment.js.map +1 -1
- package/Shaders/fxaa.fragment.d.ts +1 -1
- package/Shaders/fxaa.fragment.js +1 -1
- package/Shaders/fxaa.fragment.js.map +1 -1
- package/Shaders/fxaa.vertex.d.ts +1 -1
- package/Shaders/fxaa.vertex.js +1 -1
- package/Shaders/fxaa.vertex.js.map +1 -1
- package/Shaders/geometry.fragment.d.ts +1 -1
- package/Shaders/geometry.fragment.js +14 -2
- package/Shaders/geometry.fragment.js.map +1 -1
- package/Shaders/geometry.vertex.d.ts +1 -1
- package/Shaders/geometry.vertex.js +1 -1
- package/Shaders/geometry.vertex.js.map +1 -1
- package/Shaders/glowBlurPostProcess.fragment.d.ts +1 -1
- package/Shaders/glowBlurPostProcess.fragment.js +1 -1
- package/Shaders/glowBlurPostProcess.fragment.js.map +1 -1
- package/Shaders/glowMapGeneration.fragment.d.ts +1 -1
- package/Shaders/glowMapGeneration.fragment.js +1 -1
- package/Shaders/glowMapGeneration.fragment.js.map +1 -1
- package/Shaders/glowMapGeneration.vertex.d.ts +1 -1
- package/Shaders/glowMapGeneration.vertex.js +1 -1
- package/Shaders/glowMapGeneration.vertex.js.map +1 -1
- package/Shaders/glowMapMerge.fragment.d.ts +1 -1
- package/Shaders/glowMapMerge.fragment.js +1 -1
- package/Shaders/glowMapMerge.fragment.js.map +1 -1
- package/Shaders/glowMapMerge.vertex.d.ts +1 -1
- package/Shaders/glowMapMerge.vertex.js +1 -1
- package/Shaders/glowMapMerge.vertex.js.map +1 -1
- package/Shaders/gpuRenderParticles.fragment.d.ts +3 -1
- package/Shaders/gpuRenderParticles.fragment.js +9 -2
- package/Shaders/gpuRenderParticles.fragment.js.map +1 -1
- package/Shaders/gpuRenderParticles.vertex.d.ts +3 -1
- package/Shaders/gpuRenderParticles.vertex.js +5 -1
- package/Shaders/gpuRenderParticles.vertex.js.map +1 -1
- package/Shaders/gpuUpdateParticles.fragment.d.ts +1 -1
- package/Shaders/gpuUpdateParticles.fragment.js +1 -1
- package/Shaders/gpuUpdateParticles.fragment.js.map +1 -1
- package/Shaders/gpuUpdateParticles.vertex.d.ts +1 -1
- package/Shaders/gpuUpdateParticles.vertex.js +1 -1
- package/Shaders/gpuUpdateParticles.vertex.js.map +1 -1
- package/Shaders/grain.fragment.d.ts +1 -1
- package/Shaders/grain.fragment.js +1 -1
- package/Shaders/grain.fragment.js.map +1 -1
- package/Shaders/hdrFiltering.fragment.d.ts +1 -1
- package/Shaders/hdrFiltering.fragment.js +1 -1
- package/Shaders/hdrFiltering.fragment.js.map +1 -1
- package/Shaders/hdrFiltering.vertex.d.ts +1 -1
- package/Shaders/hdrFiltering.vertex.js +1 -1
- package/Shaders/hdrFiltering.vertex.js.map +1 -1
- package/Shaders/highlights.fragment.d.ts +1 -1
- package/Shaders/highlights.fragment.js +1 -1
- package/Shaders/highlights.fragment.js.map +1 -1
- package/Shaders/imageProcessing.fragment.d.ts +1 -1
- package/Shaders/imageProcessing.fragment.js +1 -1
- package/Shaders/imageProcessing.fragment.js.map +1 -1
- package/Shaders/kernelBlur.fragment.d.ts +1 -1
- package/Shaders/kernelBlur.fragment.js +1 -1
- package/Shaders/kernelBlur.fragment.js.map +1 -1
- package/Shaders/kernelBlur.vertex.d.ts +1 -1
- package/Shaders/kernelBlur.vertex.js +1 -1
- package/Shaders/kernelBlur.vertex.js.map +1 -1
- package/Shaders/layer.fragment.d.ts +1 -1
- package/Shaders/layer.fragment.js +1 -1
- package/Shaders/layer.fragment.js.map +1 -1
- package/Shaders/layer.vertex.d.ts +1 -1
- package/Shaders/layer.vertex.js +1 -1
- package/Shaders/layer.vertex.js.map +1 -1
- package/Shaders/lensFlare.fragment.d.ts +1 -1
- package/Shaders/lensFlare.fragment.js +1 -1
- package/Shaders/lensFlare.fragment.js.map +1 -1
- package/Shaders/lensFlare.vertex.d.ts +1 -1
- package/Shaders/lensFlare.vertex.js +1 -1
- package/Shaders/lensFlare.vertex.js.map +1 -1
- package/Shaders/lensHighlights.fragment.d.ts +1 -1
- package/Shaders/lensHighlights.fragment.js +1 -1
- package/Shaders/lensHighlights.fragment.js.map +1 -1
- package/Shaders/line.fragment.d.ts +1 -1
- package/Shaders/line.fragment.js +1 -1
- package/Shaders/line.fragment.js.map +1 -1
- package/Shaders/line.vertex.d.ts +1 -1
- package/Shaders/line.vertex.js +1 -1
- package/Shaders/line.vertex.js.map +1 -1
- package/Shaders/minmaxRedux.fragment.d.ts +1 -1
- package/Shaders/minmaxRedux.fragment.js +1 -1
- package/Shaders/minmaxRedux.fragment.js.map +1 -1
- package/Shaders/motionBlur.fragment.d.ts +1 -1
- package/Shaders/motionBlur.fragment.js +1 -1
- package/Shaders/motionBlur.fragment.js.map +1 -1
- package/Shaders/noise.fragment.d.ts +1 -1
- package/Shaders/noise.fragment.js +1 -1
- package/Shaders/noise.fragment.js.map +1 -1
- package/Shaders/oitBackBlend.fragment.d.ts +1 -1
- package/Shaders/oitBackBlend.fragment.js +1 -1
- package/Shaders/oitBackBlend.fragment.js.map +1 -1
- package/Shaders/oitFinal.fragment.d.ts +1 -1
- package/Shaders/oitFinal.fragment.js +1 -1
- package/Shaders/oitFinal.fragment.js.map +1 -1
- package/Shaders/outline.fragment.d.ts +1 -1
- package/Shaders/outline.fragment.js +1 -1
- package/Shaders/outline.fragment.js.map +1 -1
- package/Shaders/outline.vertex.d.ts +1 -1
- package/Shaders/outline.vertex.js +1 -1
- package/Shaders/outline.vertex.js.map +1 -1
- package/Shaders/particles.fragment.d.ts +3 -1
- package/Shaders/particles.fragment.js +9 -2
- package/Shaders/particles.fragment.js.map +1 -1
- package/Shaders/particles.vertex.d.ts +3 -1
- package/Shaders/particles.vertex.js +5 -1
- package/Shaders/particles.vertex.js.map +1 -1
- package/Shaders/pass.fragment.d.ts +1 -1
- package/Shaders/pass.fragment.js +1 -1
- package/Shaders/pass.fragment.js.map +1 -1
- package/Shaders/passCube.fragment.d.ts +1 -1
- package/Shaders/passCube.fragment.js +1 -1
- package/Shaders/passCube.fragment.js.map +1 -1
- package/Shaders/pbr.fragment.d.ts +1 -1
- package/Shaders/pbr.fragment.js +1 -1
- package/Shaders/pbr.fragment.js.map +1 -1
- package/Shaders/pbr.vertex.d.ts +1 -1
- package/Shaders/pbr.vertex.js +2 -2
- package/Shaders/pbr.vertex.js.map +1 -1
- package/Shaders/postprocess.vertex.d.ts +1 -1
- package/Shaders/postprocess.vertex.js +1 -1
- package/Shaders/postprocess.vertex.js.map +1 -1
- package/Shaders/procedural.vertex.d.ts +1 -1
- package/Shaders/procedural.vertex.js +1 -1
- package/Shaders/procedural.vertex.js.map +1 -1
- package/Shaders/refraction.fragment.d.ts +1 -1
- package/Shaders/refraction.fragment.js +1 -1
- package/Shaders/refraction.fragment.js.map +1 -1
- package/Shaders/rgbdDecode.fragment.d.ts +1 -1
- package/Shaders/rgbdDecode.fragment.js +1 -1
- package/Shaders/rgbdDecode.fragment.js.map +1 -1
- package/Shaders/rgbdEncode.fragment.d.ts +1 -1
- package/Shaders/rgbdEncode.fragment.js +1 -1
- package/Shaders/rgbdEncode.fragment.js.map +1 -1
- package/Shaders/screenSpaceCurvature.fragment.d.ts +1 -1
- package/Shaders/screenSpaceCurvature.fragment.js +1 -1
- package/Shaders/screenSpaceCurvature.fragment.js.map +1 -1
- package/Shaders/screenSpaceReflection.fragment.d.ts +1 -1
- package/Shaders/screenSpaceReflection.fragment.js +1 -1
- package/Shaders/screenSpaceReflection.fragment.js.map +1 -1
- package/Shaders/shadowMap.fragment.d.ts +1 -1
- package/Shaders/shadowMap.fragment.js +1 -1
- package/Shaders/shadowMap.fragment.js.map +1 -1
- package/Shaders/shadowMap.vertex.d.ts +1 -1
- package/Shaders/shadowMap.vertex.js +1 -1
- package/Shaders/shadowMap.vertex.js.map +1 -1
- package/Shaders/sharpen.fragment.d.ts +1 -1
- package/Shaders/sharpen.fragment.js +1 -1
- package/Shaders/sharpen.fragment.js.map +1 -1
- package/Shaders/spriteMap.fragment.d.ts +1 -1
- package/Shaders/spriteMap.fragment.js +1 -1
- package/Shaders/spriteMap.fragment.js.map +1 -1
- package/Shaders/spriteMap.vertex.d.ts +1 -1
- package/Shaders/spriteMap.vertex.js +1 -1
- package/Shaders/spriteMap.vertex.js.map +1 -1
- package/Shaders/sprites.fragment.d.ts +1 -1
- package/Shaders/sprites.fragment.js +1 -1
- package/Shaders/sprites.fragment.js.map +1 -1
- package/Shaders/sprites.vertex.d.ts +1 -1
- package/Shaders/sprites.vertex.js +1 -1
- package/Shaders/sprites.vertex.js.map +1 -1
- package/Shaders/ssao.fragment.d.ts +1 -1
- package/Shaders/ssao.fragment.js +1 -1
- package/Shaders/ssao.fragment.js.map +1 -1
- package/Shaders/ssao2.fragment.d.ts +1 -1
- package/Shaders/ssao2.fragment.js +1 -1
- package/Shaders/ssao2.fragment.js.map +1 -1
- package/Shaders/ssaoCombine.fragment.d.ts +1 -1
- package/Shaders/ssaoCombine.fragment.js +1 -1
- package/Shaders/ssaoCombine.fragment.js.map +1 -1
- package/Shaders/standard.fragment.d.ts +1 -1
- package/Shaders/standard.fragment.js +1 -1
- package/Shaders/standard.fragment.js.map +1 -1
- package/Shaders/stereoscopicInterlace.fragment.d.ts +1 -1
- package/Shaders/stereoscopicInterlace.fragment.js +1 -1
- package/Shaders/stereoscopicInterlace.fragment.js.map +1 -1
- package/Shaders/subSurfaceScattering.fragment.d.ts +1 -1
- package/Shaders/subSurfaceScattering.fragment.js +1 -1
- package/Shaders/subSurfaceScattering.fragment.js.map +1 -1
- package/Shaders/tonemap.fragment.d.ts +1 -1
- package/Shaders/tonemap.fragment.js +1 -1
- package/Shaders/tonemap.fragment.js.map +1 -1
- package/Shaders/volumetricLightScattering.fragment.d.ts +1 -1
- package/Shaders/volumetricLightScattering.fragment.js +1 -1
- package/Shaders/volumetricLightScattering.fragment.js.map +1 -1
- package/Shaders/volumetricLightScatteringPass.fragment.d.ts +1 -1
- package/Shaders/volumetricLightScatteringPass.fragment.js +1 -1
- package/Shaders/volumetricLightScatteringPass.fragment.js.map +1 -1
- package/Shaders/volumetricLightScatteringPass.vertex.d.ts +1 -1
- package/Shaders/volumetricLightScatteringPass.vertex.js +1 -1
- package/Shaders/volumetricLightScatteringPass.vertex.js.map +1 -1
- package/Shaders/vrDistortionCorrection.fragment.d.ts +1 -1
- package/Shaders/vrDistortionCorrection.fragment.js +1 -1
- package/Shaders/vrDistortionCorrection.fragment.js.map +1 -1
- package/Shaders/vrMultiviewToSingleview.fragment.d.ts +1 -1
- package/Shaders/vrMultiviewToSingleview.fragment.js +1 -1
- package/Shaders/vrMultiviewToSingleview.fragment.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/bakedVertexAnimation.d.ts +1 -1
- package/ShadersWGSL/ShadersInclude/bakedVertexAnimation.js +1 -1
- package/ShadersWGSL/ShadersInclude/bakedVertexAnimation.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/bakedVertexAnimationDeclaration.d.ts +1 -1
- package/ShadersWGSL/ShadersInclude/bakedVertexAnimationDeclaration.js +1 -1
- package/ShadersWGSL/ShadersInclude/bakedVertexAnimationDeclaration.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/bonesDeclaration.d.ts +1 -1
- package/ShadersWGSL/ShadersInclude/bonesDeclaration.js +1 -1
- package/ShadersWGSL/ShadersInclude/bonesDeclaration.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/bonesVertex.d.ts +1 -1
- package/ShadersWGSL/ShadersInclude/bonesVertex.js +1 -1
- package/ShadersWGSL/ShadersInclude/bonesVertex.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/clipPlaneFragment.d.ts +1 -1
- package/ShadersWGSL/ShadersInclude/clipPlaneFragment.js +1 -1
- package/ShadersWGSL/ShadersInclude/clipPlaneFragment.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/clipPlaneFragmentDeclaration.d.ts +1 -1
- package/ShadersWGSL/ShadersInclude/clipPlaneFragmentDeclaration.js +1 -1
- package/ShadersWGSL/ShadersInclude/clipPlaneFragmentDeclaration.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/clipPlaneVertex.d.ts +1 -1
- package/ShadersWGSL/ShadersInclude/clipPlaneVertex.js +1 -1
- package/ShadersWGSL/ShadersInclude/clipPlaneVertex.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/clipPlaneVertexDeclaration.d.ts +1 -1
- package/ShadersWGSL/ShadersInclude/clipPlaneVertexDeclaration.js +1 -1
- package/ShadersWGSL/ShadersInclude/clipPlaneVertexDeclaration.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/instancesDeclaration.d.ts +1 -1
- package/ShadersWGSL/ShadersInclude/instancesDeclaration.js +1 -1
- package/ShadersWGSL/ShadersInclude/instancesDeclaration.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/instancesVertex.d.ts +1 -1
- package/ShadersWGSL/ShadersInclude/instancesVertex.js +1 -1
- package/ShadersWGSL/ShadersInclude/instancesVertex.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/meshUboDeclaration.d.ts +1 -1
- package/ShadersWGSL/ShadersInclude/meshUboDeclaration.js +1 -1
- package/ShadersWGSL/ShadersInclude/meshUboDeclaration.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/morphTargetsVertex.d.ts +1 -1
- package/ShadersWGSL/ShadersInclude/morphTargetsVertex.js +1 -1
- package/ShadersWGSL/ShadersInclude/morphTargetsVertex.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/morphTargetsVertexDeclaration.d.ts +1 -1
- package/ShadersWGSL/ShadersInclude/morphTargetsVertexDeclaration.js +1 -1
- package/ShadersWGSL/ShadersInclude/morphTargetsVertexDeclaration.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/morphTargetsVertexGlobal.d.ts +1 -1
- package/ShadersWGSL/ShadersInclude/morphTargetsVertexGlobal.js +1 -1
- package/ShadersWGSL/ShadersInclude/morphTargetsVertexGlobal.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/morphTargetsVertexGlobalDeclaration.d.ts +1 -1
- package/ShadersWGSL/ShadersInclude/morphTargetsVertexGlobalDeclaration.js +1 -1
- package/ShadersWGSL/ShadersInclude/morphTargetsVertexGlobalDeclaration.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/sceneUboDeclaration.d.ts +1 -1
- package/ShadersWGSL/ShadersInclude/sceneUboDeclaration.js +1 -1
- package/ShadersWGSL/ShadersInclude/sceneUboDeclaration.js.map +1 -1
- package/ShadersWGSL/gpuUpdateParticles.compute.d.ts +1 -1
- package/ShadersWGSL/gpuUpdateParticles.compute.js +1 -1
- package/ShadersWGSL/gpuUpdateParticles.compute.js.map +1 -1
- package/Sprites/spriteManager.d.ts +4 -0
- package/Sprites/spriteManager.js +2 -0
- package/Sprites/spriteManager.js.map +1 -1
- package/Sprites/spriteSceneComponent.d.ts +6 -6
- package/Sprites/spriteSceneComponent.js.map +1 -1
- package/Sprites/thinSprite.d.ts +5 -6
- package/Sprites/thinSprite.js +1 -2
- package/Sprites/thinSprite.js.map +1 -1
- package/States/IStencilState.d.ts +1 -1
- package/States/IStencilState.js.map +1 -1
- package/States/alphaCullingState.d.ts +1 -1
- package/States/alphaCullingState.js +1 -1
- package/States/alphaCullingState.js.map +1 -1
- package/States/depthCullingState.d.ts +1 -1
- package/States/depthCullingState.js +1 -1
- package/States/depthCullingState.js.map +1 -1
- package/States/stencilState.d.ts +1 -1
- package/States/stencilState.js +1 -1
- package/States/stencilState.js.map +1 -1
- package/States/stencilStateComposer.d.ts +1 -1
- package/States/stencilStateComposer.js +1 -1
- package/States/stencilStateComposer.js.map +1 -1
- package/XR/features/WebXRControllerPhysics.d.ts +1 -1
- package/XR/features/WebXRControllerPhysics.js +1 -1
- package/XR/features/WebXRControllerPhysics.js.map +1 -1
- package/XR/features/WebXRControllerPointerSelection.d.ts +3 -6
- package/XR/features/WebXRControllerPointerSelection.js +3 -6
- package/XR/features/WebXRControllerPointerSelection.js.map +1 -1
- package/XR/features/WebXRLayers.d.ts +2 -2
- package/XR/features/WebXRLayers.js +4 -4
- package/XR/features/WebXRLayers.js.map +1 -1
- package/XR/features/WebXRNearInteraction.js +2 -2
- package/XR/features/WebXRNearInteraction.js.map +1 -1
- package/XR/motionController/webXRAbstractMotionController.d.ts +3 -4
- package/XR/motionController/webXRAbstractMotionController.js +2 -3
- package/XR/motionController/webXRAbstractMotionController.js.map +1 -1
- package/XR/native/nativeXRFrame.d.ts +2 -2
- package/XR/native/nativeXRFrame.js +1 -1
- package/XR/native/nativeXRFrame.js.map +1 -1
- package/XR/native/nativeXRRenderTarget.d.ts +3 -3
- package/XR/native/nativeXRRenderTarget.js +3 -3
- package/XR/native/nativeXRRenderTarget.js.map +1 -1
- package/XR/webXRCamera.d.ts +2 -2
- package/XR/webXRCamera.js +1 -1
- package/XR/webXRCamera.js.map +1 -1
- package/XR/webXRDefaultExperience.d.ts +6 -6
- package/XR/webXRDefaultExperience.js.map +1 -1
- package/XR/webXRExperienceHelper.d.ts +21 -1
- package/XR/webXRExperienceHelper.js +37 -7
- package/XR/webXRExperienceHelper.js.map +1 -1
- package/XR/webXRInputSource.d.ts +1 -1
- package/XR/webXRInputSource.js.map +1 -1
- package/XR/webXRLayerWrapper.d.ts +1 -1
- package/XR/webXRLayerWrapper.js +1 -1
- package/XR/webXRLayerWrapper.js.map +1 -1
- package/XR/webXRRenderTargetTextureProvider.d.ts +1 -1
- package/XR/webXRRenderTargetTextureProvider.js +1 -1
- package/XR/webXRRenderTargetTextureProvider.js.map +1 -1
- package/XR/webXRSessionManager.d.ts +1 -2
- package/XR/webXRSessionManager.js +1 -2
- package/XR/webXRSessionManager.js.map +1 -1
- package/XR/webXRWebGLLayer.d.ts +2 -2
- package/XR/webXRWebGLLayer.js +2 -2
- package/XR/webXRWebGLLayer.js.map +1 -1
- package/abstractScene.d.ts +1 -1
- package/abstractScene.js +1 -1
- package/abstractScene.js.map +1 -1
- package/node.d.ts +40 -52
- package/node.js +40 -55
- package/node.js.map +1 -1
- package/package.json +1 -1
- package/scene.d.ts +83 -107
- package/scene.js +94 -108
- package/scene.js.map +1 -1
- package/sceneComponent.d.ts +4 -2
- package/sceneComponent.js +4 -2
- package/sceneComponent.js.map +1 -1
- package/types.d.ts +2 -2
- package/types.js +1 -1
- package/types.js.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"particleSystem.js","sourceRoot":"","sources":["../../../../../lts/core/generated/Particles/particleSystem.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable import/no-internal-modules */\r\nimport type { Immutable, Nullable } from \"../types\";\r\nimport { FactorGradient, ColorGradient, Color3Gradient, GradientHelper } from \"../Misc/gradients\";\r\nimport type { Observer } from \"../Misc/observable\";\r\nimport { Observable } from \"../Misc/observable\";\r\nimport { Vector3, Matrix, TmpVectors, Vector4 } from \"../Maths/math.vector\";\r\nimport { Scalar } from \"../Maths/math.scalar\";\r\nimport { VertexBuffer, Buffer } from \"../Buffers/buffer\";\r\n\r\nimport type { Effect } from \"../Materials/effect\";\r\nimport { ImageProcessingConfiguration } from \"../Materials/imageProcessingConfiguration\";\r\nimport { RawTexture } from \"../Materials/Textures/rawTexture\";\r\nimport { EngineStore } from \"../Engines/engineStore\";\r\nimport type { IDisposable } from \"../scene\";\r\nimport type { IParticleEmitterType } from \"../Particles/EmitterTypes/index\";\r\nimport {\r\n BoxParticleEmitter,\r\n HemisphericParticleEmitter,\r\n SphereParticleEmitter,\r\n SphereDirectedParticleEmitter,\r\n CylinderParticleEmitter,\r\n ConeParticleEmitter,\r\n PointParticleEmitter,\r\n MeshParticleEmitter,\r\n CylinderDirectedParticleEmitter,\r\n} from \"../Particles/EmitterTypes/index\";\r\nimport type { IParticleSystem } from \"./IParticleSystem\";\r\nimport { BaseParticleSystem } from \"./baseParticleSystem\";\r\nimport { Particle } from \"./particle\";\r\nimport { SubEmitter, SubEmitterType } from \"./subEmitter\";\r\nimport { Constants } from \"../Engines/constants\";\r\nimport { SerializationHelper } from \"../Misc/decorators\";\r\nimport { GetClass } from \"../Misc/typeStore\";\r\nimport type { IAnimatable } from \"../Animations/animatable.interface\";\r\nimport { DrawWrapper } from \"../Materials/drawWrapper\";\r\n\r\nimport \"../Shaders/particles.fragment\";\r\nimport \"../Shaders/particles.vertex\";\r\nimport type { DataBuffer } from \"../Buffers/dataBuffer\";\r\nimport { Color4, Color3, TmpColors } from \"../Maths/math.color\";\r\nimport type { ISize } from \"../Maths/math.size\";\r\nimport type { BaseTexture } from \"../Materials/Textures/baseTexture\";\r\nimport { ThinEngine } from \"../Engines/thinEngine\";\r\nimport { ThinMaterialHelper } from \"../Materials/thinMaterialHelper\";\r\n\r\nimport \"../Engines/Extensions/engine.alpha\";\r\n\r\ndeclare type AbstractMesh = import(\"../Meshes/abstractMesh\").AbstractMesh;\r\ndeclare type ProceduralTexture = import(\"../Materials/Textures/Procedurals/proceduralTexture\").ProceduralTexture;\r\ndeclare type Scene = import(\"../scene\").Scene;\r\ndeclare type Engine = import(\"../Engines/engine\").Engine;\r\n\r\n/**\r\n * This represents a particle system in Babylon.\r\n * Particles are often small sprites used to simulate hard-to-reproduce phenomena like fire, smoke, water, or abstract visual effects like magic glitter and faery dust.\r\n * Particles can take different shapes while emitted like box, sphere, cone or you can write your custom function.\r\n * @example https://doc.babylonjs.com/babylon101/particles\r\n */\r\nexport class ParticleSystem extends BaseParticleSystem implements IDisposable, IAnimatable, IParticleSystem {\r\n /**\r\n * Billboard mode will only apply to Y axis\r\n */\r\n public static readonly BILLBOARDMODE_Y = Constants.PARTICLES_BILLBOARDMODE_Y;\r\n /**\r\n * Billboard mode will apply to all axes\r\n */\r\n public static readonly BILLBOARDMODE_ALL = Constants.PARTICLES_BILLBOARDMODE_ALL;\r\n /**\r\n * Special billboard mode where the particle will be biilboard to the camera but rotated to align with direction\r\n */\r\n public static readonly BILLBOARDMODE_STRETCHED = Constants.PARTICLES_BILLBOARDMODE_STRETCHED;\r\n\r\n /**\r\n * This function can be defined to provide custom update for active particles.\r\n * This function will be called instead of regular update (age, position, color, etc.).\r\n * Do not forget that this function will be called on every frame so try to keep it simple and fast :)\r\n */\r\n public updateFunction: (particles: Particle[]) => void;\r\n\r\n private _emitterWorldMatrix: Matrix;\r\n private _emitterInverseWorldMatrix: Matrix = Matrix.Identity();\r\n\r\n /**\r\n * This function can be defined to specify initial direction for every new particle.\r\n * It by default use the emitterType defined function\r\n */\r\n public startDirectionFunction: (worldMatrix: Matrix, directionToUpdate: Vector3, particle: Particle, isLocal: boolean) => void;\r\n /**\r\n * This function can be defined to specify initial position for every new particle.\r\n * It by default use the emitterType defined function\r\n */\r\n public startPositionFunction: (worldMatrix: Matrix, positionToUpdate: Vector3, particle: Particle, isLocal: boolean) => void;\r\n\r\n /**\r\n * @hidden\r\n */\r\n public _inheritedVelocityOffset = new Vector3();\r\n /**\r\n * An event triggered when the system is disposed\r\n */\r\n public onDisposeObservable = new Observable<IParticleSystem>();\r\n /**\r\n * An event triggered when the system is stopped\r\n */\r\n public onStoppedObservable = new Observable<IParticleSystem>();\r\n\r\n private _onDisposeObserver: Nullable<Observer<IParticleSystem>>;\r\n /**\r\n * Sets a callback that will be triggered when the system is disposed\r\n */\r\n public set onDispose(callback: () => void) {\r\n if (this._onDisposeObserver) {\r\n this.onDisposeObservable.remove(this._onDisposeObserver);\r\n }\r\n this._onDisposeObserver = this.onDisposeObservable.add(callback);\r\n }\r\n\r\n private _particles = new Array<Particle>();\r\n private _epsilon: number;\r\n private _capacity: number;\r\n private _stockParticles = new Array<Particle>();\r\n private _newPartsExcess = 0;\r\n private _vertexData: Float32Array;\r\n private _vertexBuffer: Nullable<Buffer>;\r\n private _vertexBuffers: { [key: string]: VertexBuffer } = {};\r\n private _spriteBuffer: Nullable<Buffer>;\r\n private _indexBuffer: Nullable<DataBuffer>;\r\n private _drawWrappers: DrawWrapper[][]; // first index is render pass id, second index is blend mode\r\n private _customWrappers: { [blendMode: number]: Nullable<DrawWrapper> };\r\n private _scaledColorStep = new Color4(0, 0, 0, 0);\r\n private _colorDiff = new Color4(0, 0, 0, 0);\r\n private _scaledDirection = Vector3.Zero();\r\n private _scaledGravity = Vector3.Zero();\r\n private _currentRenderId = -1;\r\n private _alive: boolean;\r\n private _useInstancing = false;\r\n private _vertexArrayObject: Nullable<WebGLVertexArrayObject>;\r\n\r\n private _started = false;\r\n private _stopped = false;\r\n private _actualFrame = 0;\r\n private _scaledUpdateSpeed: number;\r\n private _vertexBufferSize: number;\r\n\r\n /** @hidden */\r\n public _currentEmitRateGradient: Nullable<FactorGradient>;\r\n /** @hidden */\r\n public _currentEmitRate1 = 0;\r\n /** @hidden */\r\n public _currentEmitRate2 = 0;\r\n\r\n /** @hidden */\r\n public _currentStartSizeGradient: Nullable<FactorGradient>;\r\n /** @hidden */\r\n public _currentStartSize1 = 0;\r\n /** @hidden */\r\n public _currentStartSize2 = 0;\r\n\r\n private readonly _rawTextureWidth = 256;\r\n private _rampGradientsTexture: Nullable<RawTexture>;\r\n private _useRampGradients = false;\r\n\r\n /** Gets or sets a matrix to use to compute projection */\r\n public defaultProjectionMatrix: Matrix;\r\n\r\n /** Gets or sets a matrix to use to compute view */\r\n public defaultViewMatrix: Matrix;\r\n\r\n /** Gets or sets a boolean indicating that ramp gradients must be used\r\n * @see https://doc.babylonjs.com/babylon101/particles#ramp-gradients\r\n */\r\n public get useRampGradients(): boolean {\r\n return this._useRampGradients;\r\n }\r\n\r\n public set useRampGradients(value: boolean) {\r\n if (this._useRampGradients === value) {\r\n return;\r\n }\r\n\r\n this._useRampGradients = value;\r\n\r\n this._resetEffect();\r\n }\r\n\r\n // Sub-emitters\r\n /**\r\n * The Sub-emitters templates that will be used to generate the sub particle system to be associated with the system, this property is used by the root particle system only.\r\n * When a particle is spawned, an array will be chosen at random and all the emitters in that array will be attached to the particle. (Default: [])\r\n */\r\n public subEmitters: Array<ParticleSystem | SubEmitter | Array<SubEmitter>>;\r\n // the subEmitters field above converted to a constant type\r\n private _subEmitters: Array<Array<SubEmitter>>;\r\n /**\r\n * @hidden\r\n * If the particle systems emitter should be disposed when the particle system is disposed\r\n */\r\n public _disposeEmitterOnDispose = false;\r\n /**\r\n * The current active Sub-systems, this property is used by the root particle system only.\r\n */\r\n public activeSubSystems: Array<ParticleSystem>;\r\n\r\n /**\r\n * Specifies if the particles are updated in emitter local space or world space\r\n */\r\n public isLocal = false;\r\n\r\n private _rootParticleSystem: Nullable<ParticleSystem>;\r\n //end of Sub-emitter\r\n\r\n /**\r\n * Gets the current list of active particles\r\n */\r\n public get particles(): Particle[] {\r\n return this._particles;\r\n }\r\n\r\n /**\r\n * Gets the number of particles active at the same time.\r\n * @returns The number of active particles.\r\n */\r\n public getActiveCount() {\r\n return this._particles.length;\r\n }\r\n\r\n /**\r\n * Returns the string \"ParticleSystem\"\r\n * @returns a string containing the class name\r\n */\r\n public getClassName(): string {\r\n return \"ParticleSystem\";\r\n }\r\n\r\n /**\r\n * Gets a boolean indicating that the system is stopping\r\n * @returns true if the system is currently stopping\r\n */\r\n public isStopping() {\r\n return this._stopped && this.isAlive();\r\n }\r\n\r\n /**\r\n * Gets the custom effect used to render the particles\r\n * @param blendMode Blend mode for which the effect should be retrieved\r\n * @returns The effect\r\n */\r\n public getCustomEffect(blendMode: number = 0): Nullable<Effect> {\r\n return this._customWrappers[blendMode]?.effect ?? this._customWrappers[0]!.effect;\r\n }\r\n\r\n private _getCustomDrawWrapper(blendMode: number = 0): Nullable<DrawWrapper> {\r\n return this._customWrappers[blendMode] ?? this._customWrappers[0];\r\n }\r\n\r\n /**\r\n * Sets the custom effect used to render the particles\r\n * @param effect The effect to set\r\n * @param blendMode Blend mode for which the effect should be set\r\n */\r\n public setCustomEffect(effect: Nullable<Effect>, blendMode: number = 0) {\r\n this._customWrappers[blendMode] = new DrawWrapper(this._engine);\r\n this._customWrappers[blendMode]!.effect = effect;\r\n if (this._customWrappers[blendMode]!.drawContext) {\r\n this._customWrappers[blendMode]!.drawContext!.useInstancing = this._useInstancing;\r\n }\r\n }\r\n\r\n /** @hidden */\r\n private _onBeforeDrawParticlesObservable: Nullable<Observable<Nullable<Effect>>> = null;\r\n\r\n /**\r\n * Observable that will be called just before the particles are drawn\r\n */\r\n public get onBeforeDrawParticlesObservable(): Observable<Nullable<Effect>> {\r\n if (!this._onBeforeDrawParticlesObservable) {\r\n this._onBeforeDrawParticlesObservable = new Observable<Nullable<Effect>>();\r\n }\r\n\r\n return this._onBeforeDrawParticlesObservable;\r\n }\r\n\r\n /**\r\n * Gets the name of the particle vertex shader\r\n */\r\n public get vertexShaderName(): string {\r\n return \"particles\";\r\n }\r\n\r\n /**\r\n * Gets the vertex buffers used by the particle system\r\n */\r\n public get vertexBuffers(): Immutable<{ [key: string]: VertexBuffer }> {\r\n return this._vertexBuffers;\r\n }\r\n\r\n /**\r\n * Gets the index buffer used by the particle system (or null if no index buffer is used (if _useInstancing=true))\r\n */\r\n public get indexBuffer(): Nullable<DataBuffer> {\r\n return this._indexBuffer;\r\n }\r\n\r\n /**\r\n * Instantiates a particle system.\r\n * Particles are often small sprites used to simulate hard-to-reproduce phenomena like fire, smoke, water, or abstract visual effects like magic glitter and faery dust.\r\n * @param name The name of the particle system\r\n * @param capacity The max number of particles alive at the same time\r\n * @param sceneOrEngine The scene the particle system belongs to or the engine to use if no scene\r\n * @param customEffect a custom effect used to change the way particles are rendered by default\r\n * @param isAnimationSheetEnabled Must be true if using a spritesheet to animate the particles texture\r\n * @param epsilon Offset used to render the particles\r\n */\r\n constructor(\r\n name: string,\r\n capacity: number,\r\n sceneOrEngine: Scene | ThinEngine,\r\n customEffect: Nullable<Effect> = null,\r\n isAnimationSheetEnabled: boolean = false,\r\n epsilon: number = 0.01\r\n ) {\r\n super(name);\r\n\r\n this._capacity = capacity;\r\n\r\n this._epsilon = epsilon;\r\n this._isAnimationSheetEnabled = isAnimationSheetEnabled;\r\n\r\n if (!sceneOrEngine || sceneOrEngine.getClassName() === \"Scene\") {\r\n this._scene = (sceneOrEngine as Scene) || EngineStore.LastCreatedScene;\r\n this._engine = this._scene.getEngine();\r\n this.uniqueId = this._scene.getUniqueId();\r\n this._scene.particleSystems.push(this);\r\n } else {\r\n this._engine = sceneOrEngine as ThinEngine;\r\n this.defaultProjectionMatrix = Matrix.PerspectiveFovLH(0.8, 1, 0.1, 100, this._engine.isNDCHalfZRange);\r\n }\r\n\r\n if (this._engine.getCaps().vertexArrayObject) {\r\n this._vertexArrayObject = null;\r\n }\r\n\r\n // Setup the default processing configuration to the scene.\r\n this._attachImageProcessingConfiguration(null);\r\n\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n this._customWrappers = { 0: new DrawWrapper(this._engine) };\r\n this._customWrappers[0]!.effect = customEffect;\r\n\r\n this._drawWrappers = [];\r\n this._useInstancing = this._engine.getCaps().instancedArrays;\r\n\r\n this._createIndexBuffer();\r\n this._createVertexBuffers();\r\n\r\n // Default emitter type\r\n this.particleEmitterType = new BoxParticleEmitter();\r\n let noiseTextureData: Nullable<Uint8Array> = null;\r\n\r\n // Update\r\n this.updateFunction = (particles: Particle[]): void => {\r\n let noiseTextureSize: Nullable<ISize> = null;\r\n\r\n if (this.noiseTexture) {\r\n // We need to get texture data back to CPU\r\n noiseTextureSize = this.noiseTexture.getSize();\r\n this.noiseTexture.getContent()?.then((data) => {\r\n noiseTextureData = data as Uint8Array;\r\n });\r\n }\r\n\r\n for (let index = 0; index < particles.length; index++) {\r\n const particle = particles[index];\r\n\r\n let scaledUpdateSpeed = this._scaledUpdateSpeed;\r\n const previousAge = particle.age;\r\n particle.age += scaledUpdateSpeed;\r\n\r\n // Evaluate step to death\r\n if (particle.age > particle.lifeTime) {\r\n const diff = particle.age - previousAge;\r\n const oldDiff = particle.lifeTime - previousAge;\r\n\r\n scaledUpdateSpeed = (oldDiff * scaledUpdateSpeed) / diff;\r\n\r\n particle.age = particle.lifeTime;\r\n }\r\n\r\n const ratio = particle.age / particle.lifeTime;\r\n\r\n // Color\r\n if (this._colorGradients && this._colorGradients.length > 0) {\r\n GradientHelper.GetCurrentGradient(ratio, this._colorGradients, (currentGradient, nextGradient, scale) => {\r\n if (currentGradient !== particle._currentColorGradient) {\r\n particle._currentColor1.copyFrom(particle._currentColor2);\r\n (<ColorGradient>nextGradient).getColorToRef(particle._currentColor2);\r\n particle._currentColorGradient = <ColorGradient>currentGradient;\r\n }\r\n Color4.LerpToRef(particle._currentColor1, particle._currentColor2, scale, particle.color);\r\n });\r\n } else {\r\n particle.colorStep.scaleToRef(scaledUpdateSpeed, this._scaledColorStep);\r\n particle.color.addInPlace(this._scaledColorStep);\r\n\r\n if (particle.color.a < 0) {\r\n particle.color.a = 0;\r\n }\r\n }\r\n\r\n // Angular speed\r\n if (this._angularSpeedGradients && this._angularSpeedGradients.length > 0) {\r\n GradientHelper.GetCurrentGradient(ratio, this._angularSpeedGradients, (currentGradient, nextGradient, scale) => {\r\n if (currentGradient !== particle._currentAngularSpeedGradient) {\r\n particle._currentAngularSpeed1 = particle._currentAngularSpeed2;\r\n particle._currentAngularSpeed2 = (<FactorGradient>nextGradient).getFactor();\r\n particle._currentAngularSpeedGradient = <FactorGradient>currentGradient;\r\n }\r\n particle.angularSpeed = Scalar.Lerp(particle._currentAngularSpeed1, particle._currentAngularSpeed2, scale);\r\n });\r\n }\r\n particle.angle += particle.angularSpeed * scaledUpdateSpeed;\r\n\r\n // Direction\r\n let directionScale = scaledUpdateSpeed;\r\n\r\n /// Velocity\r\n if (this._velocityGradients && this._velocityGradients.length > 0) {\r\n GradientHelper.GetCurrentGradient(ratio, this._velocityGradients, (currentGradient, nextGradient, scale) => {\r\n if (currentGradient !== particle._currentVelocityGradient) {\r\n particle._currentVelocity1 = particle._currentVelocity2;\r\n particle._currentVelocity2 = (<FactorGradient>nextGradient).getFactor();\r\n particle._currentVelocityGradient = <FactorGradient>currentGradient;\r\n }\r\n directionScale *= Scalar.Lerp(particle._currentVelocity1, particle._currentVelocity2, scale);\r\n });\r\n }\r\n\r\n particle.direction.scaleToRef(directionScale, this._scaledDirection);\r\n\r\n /// Limit velocity\r\n if (this._limitVelocityGradients && this._limitVelocityGradients.length > 0) {\r\n GradientHelper.GetCurrentGradient(ratio, this._limitVelocityGradients, (currentGradient, nextGradient, scale) => {\r\n if (currentGradient !== particle._currentLimitVelocityGradient) {\r\n particle._currentLimitVelocity1 = particle._currentLimitVelocity2;\r\n particle._currentLimitVelocity2 = (<FactorGradient>nextGradient).getFactor();\r\n particle._currentLimitVelocityGradient = <FactorGradient>currentGradient;\r\n }\r\n\r\n const limitVelocity = Scalar.Lerp(particle._currentLimitVelocity1, particle._currentLimitVelocity2, scale);\r\n const currentVelocity = particle.direction.length();\r\n\r\n if (currentVelocity > limitVelocity) {\r\n particle.direction.scaleInPlace(this.limitVelocityDamping);\r\n }\r\n });\r\n }\r\n\r\n /// Drag\r\n if (this._dragGradients && this._dragGradients.length > 0) {\r\n GradientHelper.GetCurrentGradient(ratio, this._dragGradients, (currentGradient, nextGradient, scale) => {\r\n if (currentGradient !== particle._currentDragGradient) {\r\n particle._currentDrag1 = particle._currentDrag2;\r\n particle._currentDrag2 = (<FactorGradient>nextGradient).getFactor();\r\n particle._currentDragGradient = <FactorGradient>currentGradient;\r\n }\r\n\r\n const drag = Scalar.Lerp(particle._currentDrag1, particle._currentDrag2, scale);\r\n\r\n this._scaledDirection.scaleInPlace(1.0 - drag);\r\n });\r\n }\r\n\r\n if (this.isLocal && particle._localPosition) {\r\n particle._localPosition!.addInPlace(this._scaledDirection);\r\n Vector3.TransformCoordinatesToRef(particle._localPosition!, this._emitterWorldMatrix, particle.position);\r\n } else {\r\n particle.position.addInPlace(this._scaledDirection);\r\n }\r\n\r\n // Noise\r\n if (noiseTextureData && noiseTextureSize && particle._randomNoiseCoordinates1) {\r\n const fetchedColorR = this._fetchR(\r\n particle._randomNoiseCoordinates1.x,\r\n particle._randomNoiseCoordinates1.y,\r\n noiseTextureSize.width,\r\n noiseTextureSize.height,\r\n noiseTextureData\r\n );\r\n const fetchedColorG = this._fetchR(\r\n particle._randomNoiseCoordinates1.z,\r\n particle._randomNoiseCoordinates2.x,\r\n noiseTextureSize.width,\r\n noiseTextureSize.height,\r\n noiseTextureData\r\n );\r\n const fetchedColorB = this._fetchR(\r\n particle._randomNoiseCoordinates2.y,\r\n particle._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(\r\n (2 * fetchedColorR - 1) * this.noiseStrength.x,\r\n (2 * fetchedColorG - 1) * this.noiseStrength.y,\r\n (2 * fetchedColorB - 1) * this.noiseStrength.z\r\n );\r\n\r\n force.scaleToRef(scaledUpdateSpeed, scaledForce);\r\n particle.direction.addInPlace(scaledForce);\r\n }\r\n\r\n // Gravity\r\n this.gravity.scaleToRef(scaledUpdateSpeed, this._scaledGravity);\r\n particle.direction.addInPlace(this._scaledGravity);\r\n\r\n // Size\r\n if (this._sizeGradients && this._sizeGradients.length > 0) {\r\n GradientHelper.GetCurrentGradient(ratio, this._sizeGradients, (currentGradient, nextGradient, scale) => {\r\n if (currentGradient !== particle._currentSizeGradient) {\r\n particle._currentSize1 = particle._currentSize2;\r\n particle._currentSize2 = (<FactorGradient>nextGradient).getFactor();\r\n particle._currentSizeGradient = <FactorGradient>currentGradient;\r\n }\r\n particle.size = Scalar.Lerp(particle._currentSize1, particle._currentSize2, scale);\r\n });\r\n }\r\n\r\n // Remap data\r\n if (this._useRampGradients) {\r\n if (this._colorRemapGradients && this._colorRemapGradients.length > 0) {\r\n GradientHelper.GetCurrentGradient(ratio, this._colorRemapGradients, (currentGradient, nextGradient, scale) => {\r\n const min = Scalar.Lerp((<FactorGradient>currentGradient).factor1, (<FactorGradient>nextGradient).factor1, scale);\r\n const max = Scalar.Lerp((<FactorGradient>currentGradient).factor2!, (<FactorGradient>nextGradient).factor2!, scale);\r\n\r\n particle.remapData.x = min;\r\n particle.remapData.y = max - min;\r\n });\r\n }\r\n\r\n if (this._alphaRemapGradients && this._alphaRemapGradients.length > 0) {\r\n GradientHelper.GetCurrentGradient(ratio, this._alphaRemapGradients, (currentGradient, nextGradient, scale) => {\r\n const min = Scalar.Lerp((<FactorGradient>currentGradient).factor1, (<FactorGradient>nextGradient).factor1, scale);\r\n const max = Scalar.Lerp((<FactorGradient>currentGradient).factor2!, (<FactorGradient>nextGradient).factor2!, scale);\r\n\r\n particle.remapData.z = min;\r\n particle.remapData.w = max - min;\r\n });\r\n }\r\n }\r\n\r\n if (this._isAnimationSheetEnabled) {\r\n particle.updateCellIndex();\r\n }\r\n\r\n // Update the position of the attached sub-emitters to match their attached particle\r\n particle._inheritParticleInfoToSubEmitters();\r\n\r\n if (particle.age >= particle.lifeTime) {\r\n // Recycle by swapping with last particle\r\n this._emitFromParticle(particle);\r\n if (particle._attachedSubEmitters) {\r\n particle._attachedSubEmitters.forEach((subEmitter) => {\r\n subEmitter.particleSystem.disposeOnStop = true;\r\n subEmitter.particleSystem.stop();\r\n });\r\n particle._attachedSubEmitters = null;\r\n }\r\n this.recycleParticle(particle);\r\n index--;\r\n continue;\r\n }\r\n }\r\n };\r\n }\r\n\r\n private _addFactorGradient(factorGradients: FactorGradient[], gradient: number, factor: number, factor2?: number) {\r\n const newGradient = new FactorGradient(gradient, factor, factor2);\r\n factorGradients.push(newGradient);\r\n\r\n factorGradients.sort((a, b) => {\r\n if (a.gradient < b.gradient) {\r\n return -1;\r\n } else if (a.gradient > b.gradient) {\r\n return 1;\r\n }\r\n\r\n return 0;\r\n });\r\n }\r\n\r\n private _removeFactorGradient(factorGradients: Nullable<FactorGradient[]>, gradient: number) {\r\n if (!factorGradients) {\r\n return;\r\n }\r\n\r\n let index = 0;\r\n for (const factorGradient of factorGradients) {\r\n if (factorGradient.gradient === gradient) {\r\n factorGradients.splice(index, 1);\r\n break;\r\n }\r\n index++;\r\n }\r\n }\r\n\r\n /**\r\n * Adds a new life time gradient\r\n * @param gradient defines the gradient to use (between 0 and 1)\r\n * @param factor defines the life time factor to affect to the specified gradient\r\n * @param factor2 defines an additional factor used to define a range ([factor, factor2]) with main value to pick the final value from\r\n * @returns the current particle system\r\n */\r\n public addLifeTimeGradient(gradient: number, factor: number, factor2?: number): IParticleSystem {\r\n if (!this._lifeTimeGradients) {\r\n this._lifeTimeGradients = [];\r\n }\r\n\r\n this._addFactorGradient(this._lifeTimeGradients, gradient, factor, factor2);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Remove a specific life time gradient\r\n * @param gradient defines the gradient to remove\r\n * @returns the current particle system\r\n */\r\n public removeLifeTimeGradient(gradient: number): IParticleSystem {\r\n this._removeFactorGradient(this._lifeTimeGradients, gradient);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Adds a new size gradient\r\n * @param gradient defines the gradient to use (between 0 and 1)\r\n * @param factor defines the size factor to affect to the specified gradient\r\n * @param factor2 defines an additional factor used to define a range ([factor, factor2]) with main value to pick the final value from\r\n * @returns the current particle system\r\n */\r\n public addSizeGradient(gradient: number, factor: number, factor2?: number): IParticleSystem {\r\n if (!this._sizeGradients) {\r\n this._sizeGradients = [];\r\n }\r\n\r\n this._addFactorGradient(this._sizeGradients, gradient, factor, factor2);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Remove a specific size gradient\r\n * @param gradient defines the gradient to remove\r\n * @returns the current particle system\r\n */\r\n public removeSizeGradient(gradient: number): IParticleSystem {\r\n this._removeFactorGradient(this._sizeGradients, gradient);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Adds a new color remap gradient\r\n * @param gradient defines the gradient to use (between 0 and 1)\r\n * @param min defines the color remap minimal range\r\n * @param max defines the color remap maximal range\r\n * @returns the current particle system\r\n */\r\n public addColorRemapGradient(gradient: number, min: number, max: number): IParticleSystem {\r\n if (!this._colorRemapGradients) {\r\n this._colorRemapGradients = [];\r\n }\r\n\r\n this._addFactorGradient(this._colorRemapGradients, gradient, min, max);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Remove a specific color remap gradient\r\n * @param gradient defines the gradient to remove\r\n * @returns the current particle system\r\n */\r\n public removeColorRemapGradient(gradient: number): IParticleSystem {\r\n this._removeFactorGradient(this._colorRemapGradients, gradient);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Adds a new alpha remap gradient\r\n * @param gradient defines the gradient to use (between 0 and 1)\r\n * @param min defines the alpha remap minimal range\r\n * @param max defines the alpha remap maximal range\r\n * @returns the current particle system\r\n */\r\n public addAlphaRemapGradient(gradient: number, min: number, max: number): IParticleSystem {\r\n if (!this._alphaRemapGradients) {\r\n this._alphaRemapGradients = [];\r\n }\r\n\r\n this._addFactorGradient(this._alphaRemapGradients, gradient, min, max);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Remove a specific alpha remap gradient\r\n * @param gradient defines the gradient to remove\r\n * @returns the current particle system\r\n */\r\n public removeAlphaRemapGradient(gradient: number): IParticleSystem {\r\n this._removeFactorGradient(this._alphaRemapGradients, gradient);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Adds a new angular speed gradient\r\n * @param gradient defines the gradient to use (between 0 and 1)\r\n * @param factor defines the angular speed to affect to the specified gradient\r\n * @param factor2 defines an additional factor used to define a range ([factor, factor2]) with main value to pick the final value from\r\n * @returns the current particle system\r\n */\r\n public addAngularSpeedGradient(gradient: number, factor: number, factor2?: number): IParticleSystem {\r\n if (!this._angularSpeedGradients) {\r\n this._angularSpeedGradients = [];\r\n }\r\n\r\n this._addFactorGradient(this._angularSpeedGradients, gradient, factor, factor2);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Remove a specific angular speed gradient\r\n * @param gradient defines the gradient to remove\r\n * @returns the current particle system\r\n */\r\n public removeAngularSpeedGradient(gradient: number): IParticleSystem {\r\n this._removeFactorGradient(this._angularSpeedGradients, gradient);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Adds a new velocity gradient\r\n * @param gradient defines the gradient to use (between 0 and 1)\r\n * @param factor defines the velocity to affect to the specified gradient\r\n * @param factor2 defines an additional factor used to define a range ([factor, factor2]) with main value to pick the final value from\r\n * @returns the current particle system\r\n */\r\n public addVelocityGradient(gradient: number, factor: number, factor2?: number): IParticleSystem {\r\n if (!this._velocityGradients) {\r\n this._velocityGradients = [];\r\n }\r\n\r\n this._addFactorGradient(this._velocityGradients, gradient, factor, factor2);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Remove a specific velocity gradient\r\n * @param gradient defines the gradient to remove\r\n * @returns the current particle system\r\n */\r\n public removeVelocityGradient(gradient: number): IParticleSystem {\r\n this._removeFactorGradient(this._velocityGradients, gradient);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Adds a new limit velocity gradient\r\n * @param gradient defines the gradient to use (between 0 and 1)\r\n * @param factor defines the limit velocity value to affect to the specified gradient\r\n * @param factor2 defines an additional factor used to define a range ([factor, factor2]) with main value to pick the final value from\r\n * @returns the current particle system\r\n */\r\n public addLimitVelocityGradient(gradient: number, factor: number, factor2?: number): IParticleSystem {\r\n if (!this._limitVelocityGradients) {\r\n this._limitVelocityGradients = [];\r\n }\r\n\r\n this._addFactorGradient(this._limitVelocityGradients, gradient, factor, factor2);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Remove a specific limit velocity gradient\r\n * @param gradient defines the gradient to remove\r\n * @returns the current particle system\r\n */\r\n public removeLimitVelocityGradient(gradient: number): IParticleSystem {\r\n this._removeFactorGradient(this._limitVelocityGradients, gradient);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Adds a new drag gradient\r\n * @param gradient defines the gradient to use (between 0 and 1)\r\n * @param factor defines the drag value to affect to the specified gradient\r\n * @param factor2 defines an additional factor used to define a range ([factor, factor2]) with main value to pick the final value from\r\n * @returns the current particle system\r\n */\r\n public addDragGradient(gradient: number, factor: number, factor2?: number): IParticleSystem {\r\n if (!this._dragGradients) {\r\n this._dragGradients = [];\r\n }\r\n\r\n this._addFactorGradient(this._dragGradients, gradient, factor, factor2);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Remove a specific drag gradient\r\n * @param gradient defines the gradient to remove\r\n * @returns the current particle system\r\n */\r\n public removeDragGradient(gradient: number): IParticleSystem {\r\n this._removeFactorGradient(this._dragGradients, gradient);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Adds a new emit rate gradient (please note that this will only work if you set the targetStopDuration property)\r\n * @param gradient defines the gradient to use (between 0 and 1)\r\n * @param factor defines the emit rate value to affect to the specified gradient\r\n * @param factor2 defines an additional factor used to define a range ([factor, factor2]) with main value to pick the final value from\r\n * @returns the current particle system\r\n */\r\n public addEmitRateGradient(gradient: number, factor: number, factor2?: number): IParticleSystem {\r\n if (!this._emitRateGradients) {\r\n this._emitRateGradients = [];\r\n }\r\n\r\n this._addFactorGradient(this._emitRateGradients, gradient, factor, factor2);\r\n return this;\r\n }\r\n\r\n /**\r\n * Remove a specific emit rate gradient\r\n * @param gradient defines the gradient to remove\r\n * @returns the current particle system\r\n */\r\n public removeEmitRateGradient(gradient: number): IParticleSystem {\r\n this._removeFactorGradient(this._emitRateGradients, gradient);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Adds a new start size gradient (please note that this will only work if you set the targetStopDuration property)\r\n * @param gradient defines the gradient to use (between 0 and 1)\r\n * @param factor defines the start size value to affect to the specified gradient\r\n * @param factor2 defines an additional factor used to define a range ([factor, factor2]) with main value to pick the final value from\r\n * @returns the current particle system\r\n */\r\n public addStartSizeGradient(gradient: number, factor: number, factor2?: number): IParticleSystem {\r\n if (!this._startSizeGradients) {\r\n this._startSizeGradients = [];\r\n }\r\n\r\n this._addFactorGradient(this._startSizeGradients, gradient, factor, factor2);\r\n return this;\r\n }\r\n\r\n /**\r\n * Remove a specific start size gradient\r\n * @param gradient defines the gradient to remove\r\n * @returns the current particle system\r\n */\r\n public removeStartSizeGradient(gradient: number): IParticleSystem {\r\n this._removeFactorGradient(this._startSizeGradients, gradient);\r\n\r\n return this;\r\n }\r\n\r\n private _createRampGradientTexture() {\r\n if (!this._rampGradients || !this._rampGradients.length || this._rampGradientsTexture || !this._scene) {\r\n return;\r\n }\r\n\r\n const data = new Uint8Array(this._rawTextureWidth * 4);\r\n const tmpColor = TmpColors.Color3[0];\r\n\r\n for (let x = 0; x < this._rawTextureWidth; x++) {\r\n const ratio = x / this._rawTextureWidth;\r\n\r\n GradientHelper.GetCurrentGradient(ratio, this._rampGradients, (currentGradient, nextGradient, scale) => {\r\n Color3.LerpToRef((<Color3Gradient>currentGradient).color, (<Color3Gradient>nextGradient).color, scale, tmpColor);\r\n data[x * 4] = tmpColor.r * 255;\r\n data[x * 4 + 1] = tmpColor.g * 255;\r\n data[x * 4 + 2] = tmpColor.b * 255;\r\n data[x * 4 + 3] = 255;\r\n });\r\n }\r\n\r\n this._rampGradientsTexture = RawTexture.CreateRGBATexture(data, this._rawTextureWidth, 1, this._scene, false, false, Constants.TEXTURE_NEAREST_SAMPLINGMODE);\r\n }\r\n\r\n /**\r\n * Gets the current list of ramp gradients.\r\n * You must use addRampGradient and removeRampGradient to update this list\r\n * @returns the list of ramp gradients\r\n */\r\n public getRampGradients(): Nullable<Array<Color3Gradient>> {\r\n return this._rampGradients;\r\n }\r\n\r\n /** Force the system to rebuild all gradients that need to be resync */\r\n public forceRefreshGradients() {\r\n this._syncRampGradientTexture();\r\n }\r\n\r\n private _syncRampGradientTexture() {\r\n if (!this._rampGradients) {\r\n return;\r\n }\r\n\r\n this._rampGradients.sort((a, b) => {\r\n if (a.gradient < b.gradient) {\r\n return -1;\r\n } else if (a.gradient > b.gradient) {\r\n return 1;\r\n }\r\n\r\n return 0;\r\n });\r\n\r\n if (this._rampGradientsTexture) {\r\n this._rampGradientsTexture.dispose();\r\n this._rampGradientsTexture = null;\r\n }\r\n\r\n this._createRampGradientTexture();\r\n }\r\n\r\n /**\r\n * Adds a new ramp gradient used to remap particle colors\r\n * @param gradient defines the gradient to use (between 0 and 1)\r\n * @param color defines the color to affect to the specified gradient\r\n * @returns the current particle system\r\n */\r\n public addRampGradient(gradient: number, color: Color3): ParticleSystem {\r\n if (!this._rampGradients) {\r\n this._rampGradients = [];\r\n }\r\n\r\n const rampGradient = new Color3Gradient(gradient, color);\r\n this._rampGradients.push(rampGradient);\r\n\r\n this._syncRampGradientTexture();\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Remove a specific ramp gradient\r\n * @param gradient defines the gradient to remove\r\n * @returns the current particle system\r\n */\r\n public removeRampGradient(gradient: number): ParticleSystem {\r\n this._removeGradientAndTexture(gradient, this._rampGradients, this._rampGradientsTexture);\r\n this._rampGradientsTexture = null;\r\n\r\n if (this._rampGradients && this._rampGradients.length > 0) {\r\n this._createRampGradientTexture();\r\n }\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Adds a new color gradient\r\n * @param gradient defines the gradient to use (between 0 and 1)\r\n * @param color1 defines the color to affect to the specified gradient\r\n * @param color2 defines an additional color used to define a range ([color, color2]) with main color to pick the final color from\r\n * @returns this particle system\r\n */\r\n public addColorGradient(gradient: number, color1: Color4, color2?: Color4): IParticleSystem {\r\n if (!this._colorGradients) {\r\n this._colorGradients = [];\r\n }\r\n\r\n const colorGradient = new ColorGradient(gradient, color1, color2);\r\n this._colorGradients.push(colorGradient);\r\n\r\n this._colorGradients.sort((a, b) => {\r\n if (a.gradient < b.gradient) {\r\n return -1;\r\n } else if (a.gradient > b.gradient) {\r\n return 1;\r\n }\r\n\r\n return 0;\r\n });\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Remove a specific color gradient\r\n * @param gradient defines the gradient to remove\r\n * @returns this particle system\r\n */\r\n public removeColorGradient(gradient: number): IParticleSystem {\r\n if (!this._colorGradients) {\r\n return this;\r\n }\r\n\r\n let index = 0;\r\n for (const colorGradient of this._colorGradients) {\r\n if (colorGradient.gradient === gradient) {\r\n this._colorGradients.splice(index, 1);\r\n break;\r\n }\r\n index++;\r\n }\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Resets the draw wrappers cache\r\n */\r\n public resetDrawCache(): void {\r\n for (const drawWrappers of this._drawWrappers) {\r\n if (drawWrappers) {\r\n for (const drawWrapper of drawWrappers) {\r\n drawWrapper?.dispose();\r\n }\r\n }\r\n }\r\n\r\n this._drawWrappers = [];\r\n }\r\n\r\n private _fetchR(u: number, v: number, width: number, height: number, pixels: Uint8Array): number {\r\n u = Math.abs(u) * 0.5 + 0.5;\r\n v = Math.abs(v) * 0.5 + 0.5;\r\n\r\n const wrappedU = (u * width) % width | 0;\r\n const wrappedV = (v * height) % height | 0;\r\n\r\n const position = (wrappedU + wrappedV * width) * 4;\r\n return pixels[position] / 255;\r\n }\r\n\r\n protected _reset() {\r\n this._resetEffect();\r\n }\r\n\r\n private _resetEffect() {\r\n if (this._vertexBuffer) {\r\n this._vertexBuffer.dispose();\r\n this._vertexBuffer = null;\r\n }\r\n\r\n if (this._spriteBuffer) {\r\n this._spriteBuffer.dispose();\r\n this._spriteBuffer = null;\r\n }\r\n\r\n if (this._vertexArrayObject) {\r\n this._engine.releaseVertexArrayObject(this._vertexArrayObject);\r\n this._vertexArrayObject = null;\r\n }\r\n\r\n this._createVertexBuffers();\r\n }\r\n\r\n private _createVertexBuffers() {\r\n this._vertexBufferSize = this._useInstancing ? 10 : 12;\r\n if (this._isAnimationSheetEnabled) {\r\n this._vertexBufferSize += 1;\r\n }\r\n\r\n if (!this._isBillboardBased || this.billboardMode === ParticleSystem.BILLBOARDMODE_STRETCHED) {\r\n this._vertexBufferSize += 3;\r\n }\r\n\r\n if (this._useRampGradients) {\r\n this._vertexBufferSize += 4;\r\n }\r\n\r\n const engine = this._engine;\r\n const vertexSize = this._vertexBufferSize * (this._useInstancing ? 1 : 4);\r\n this._vertexData = new Float32Array(this._capacity * vertexSize);\r\n this._vertexBuffer = new Buffer(engine, this._vertexData, true, vertexSize);\r\n\r\n let dataOffset = 0;\r\n const positions = this._vertexBuffer.createVertexBuffer(VertexBuffer.PositionKind, dataOffset, 3, this._vertexBufferSize, this._useInstancing);\r\n this._vertexBuffers[VertexBuffer.PositionKind] = positions;\r\n dataOffset += 3;\r\n\r\n const colors = this._vertexBuffer.createVertexBuffer(VertexBuffer.ColorKind, dataOffset, 4, this._vertexBufferSize, this._useInstancing);\r\n this._vertexBuffers[VertexBuffer.ColorKind] = colors;\r\n dataOffset += 4;\r\n\r\n const options = this._vertexBuffer.createVertexBuffer(\"angle\", dataOffset, 1, this._vertexBufferSize, this._useInstancing);\r\n this._vertexBuffers[\"angle\"] = options;\r\n dataOffset += 1;\r\n\r\n const size = this._vertexBuffer.createVertexBuffer(\"size\", dataOffset, 2, this._vertexBufferSize, this._useInstancing);\r\n this._vertexBuffers[\"size\"] = size;\r\n dataOffset += 2;\r\n\r\n if (this._isAnimationSheetEnabled) {\r\n const cellIndexBuffer = this._vertexBuffer.createVertexBuffer(\"cellIndex\", dataOffset, 1, this._vertexBufferSize, this._useInstancing);\r\n this._vertexBuffers[\"cellIndex\"] = cellIndexBuffer;\r\n dataOffset += 1;\r\n }\r\n\r\n if (!this._isBillboardBased || this.billboardMode === ParticleSystem.BILLBOARDMODE_STRETCHED) {\r\n const directionBuffer = this._vertexBuffer.createVertexBuffer(\"direction\", dataOffset, 3, this._vertexBufferSize, this._useInstancing);\r\n this._vertexBuffers[\"direction\"] = directionBuffer;\r\n dataOffset += 3;\r\n }\r\n\r\n if (this._useRampGradients) {\r\n const rampDataBuffer = this._vertexBuffer.createVertexBuffer(\"remapData\", dataOffset, 4, this._vertexBufferSize, this._useInstancing);\r\n this._vertexBuffers[\"remapData\"] = rampDataBuffer;\r\n dataOffset += 4;\r\n }\r\n\r\n let offsets: VertexBuffer;\r\n if (this._useInstancing) {\r\n const spriteData = new Float32Array([0, 0, 1, 0, 0, 1, 1, 1]);\r\n this._spriteBuffer = new Buffer(engine, spriteData, false, 2);\r\n offsets = this._spriteBuffer.createVertexBuffer(\"offset\", 0, 2);\r\n } else {\r\n offsets = this._vertexBuffer.createVertexBuffer(\"offset\", dataOffset, 2, this._vertexBufferSize, this._useInstancing);\r\n dataOffset += 2;\r\n }\r\n this._vertexBuffers[\"offset\"] = offsets;\r\n\r\n this.resetDrawCache();\r\n }\r\n\r\n private _createIndexBuffer() {\r\n if (this._useInstancing) {\r\n return;\r\n }\r\n const indices = [];\r\n let index = 0;\r\n for (let count = 0; count < this._capacity; count++) {\r\n indices.push(index);\r\n indices.push(index + 1);\r\n indices.push(index + 2);\r\n indices.push(index);\r\n indices.push(index + 2);\r\n indices.push(index + 3);\r\n index += 4;\r\n }\r\n\r\n this._indexBuffer = this._engine.createIndexBuffer(indices);\r\n }\r\n\r\n /**\r\n * Gets the maximum number of particles active at the same time.\r\n * @returns The max number of active particles.\r\n */\r\n public getCapacity(): number {\r\n return this._capacity;\r\n }\r\n\r\n /**\r\n * Gets whether there are still active particles in the system.\r\n * @returns True if it is alive, otherwise false.\r\n */\r\n public isAlive(): boolean {\r\n return this._alive;\r\n }\r\n\r\n /**\r\n * Gets if the system has been started. (Note: this will still be true after stop is called)\r\n * @returns True if it has been started, otherwise false.\r\n */\r\n public isStarted(): boolean {\r\n return this._started;\r\n }\r\n\r\n private _prepareSubEmitterInternalArray() {\r\n this._subEmitters = new Array<Array<SubEmitter>>();\r\n if (this.subEmitters) {\r\n this.subEmitters.forEach((subEmitter) => {\r\n if (subEmitter instanceof ParticleSystem) {\r\n this._subEmitters.push([new SubEmitter(subEmitter)]);\r\n } else if (subEmitter instanceof SubEmitter) {\r\n this._subEmitters.push([subEmitter]);\r\n } else if (subEmitter instanceof Array) {\r\n this._subEmitters.push(subEmitter);\r\n }\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Starts the particle system and begins to emit\r\n * @param delay defines the delay in milliseconds before starting the system (this.startDelay by default)\r\n */\r\n public start(delay = this.startDelay): void {\r\n if (!this.targetStopDuration && this._hasTargetStopDurationDependantGradient()) {\r\n throw \"Particle system started with a targetStopDuration dependant gradient (eg. startSizeGradients) but no targetStopDuration set\";\r\n }\r\n if (delay) {\r\n setTimeout(() => {\r\n this.start(0);\r\n }, delay);\r\n return;\r\n }\r\n // Convert the subEmitters field to the constant type field _subEmitters\r\n this._prepareSubEmitterInternalArray();\r\n\r\n this._started = true;\r\n this._stopped = false;\r\n this._actualFrame = 0;\r\n if (this._subEmitters && this._subEmitters.length != 0) {\r\n this.activeSubSystems = new Array<ParticleSystem>();\r\n }\r\n\r\n // Reset emit gradient so it acts the same on every start\r\n if (this._emitRateGradients) {\r\n if (this._emitRateGradients.length > 0) {\r\n this._currentEmitRateGradient = this._emitRateGradients[0];\r\n this._currentEmitRate1 = this._currentEmitRateGradient.getFactor();\r\n this._currentEmitRate2 = this._currentEmitRate1;\r\n }\r\n if (this._emitRateGradients.length > 1) {\r\n this._currentEmitRate2 = this._emitRateGradients[1].getFactor();\r\n }\r\n }\r\n // Reset start size gradient so it acts the same on every start\r\n if (this._startSizeGradients) {\r\n if (this._startSizeGradients.length > 0) {\r\n this._currentStartSizeGradient = this._startSizeGradients[0];\r\n this._currentStartSize1 = this._currentStartSizeGradient.getFactor();\r\n this._currentStartSize2 = this._currentStartSize1;\r\n }\r\n if (this._startSizeGradients.length > 1) {\r\n this._currentStartSize2 = this._startSizeGradients[1].getFactor();\r\n }\r\n }\r\n\r\n if (this.preWarmCycles) {\r\n if (this.emitter?.getClassName().indexOf(\"Mesh\") !== -1) {\r\n (this.emitter as any).computeWorldMatrix(true);\r\n }\r\n\r\n const noiseTextureAsProcedural = this.noiseTexture as ProceduralTexture;\r\n\r\n if (noiseTextureAsProcedural && noiseTextureAsProcedural.onGeneratedObservable) {\r\n noiseTextureAsProcedural.onGeneratedObservable.addOnce(() => {\r\n setTimeout(() => {\r\n for (let index = 0; index < this.preWarmCycles; index++) {\r\n this.animate(true);\r\n noiseTextureAsProcedural.render();\r\n }\r\n });\r\n });\r\n } else {\r\n for (let index = 0; index < this.preWarmCycles; index++) {\r\n this.animate(true);\r\n }\r\n }\r\n }\r\n\r\n // Animations\r\n if (this.beginAnimationOnStart && this.animations && this.animations.length > 0 && this._scene) {\r\n this._scene.beginAnimation(this, this.beginAnimationFrom, this.beginAnimationTo, this.beginAnimationLoop);\r\n }\r\n }\r\n\r\n /**\r\n * Stops the particle system.\r\n * @param stopSubEmitters if true it will stop the current system and all created sub-Systems if false it will stop the current root system only, this param is used by the root particle system only. the default value is true.\r\n */\r\n public stop(stopSubEmitters = true): void {\r\n if (this._stopped) {\r\n return;\r\n }\r\n\r\n this.onStoppedObservable.notifyObservers(this);\r\n\r\n this._stopped = true;\r\n\r\n if (stopSubEmitters) {\r\n this._stopSubEmitters();\r\n }\r\n }\r\n\r\n // animation sheet\r\n\r\n /**\r\n * Remove all active particles\r\n */\r\n public reset(): void {\r\n this._stockParticles.length = 0;\r\n this._particles.length = 0;\r\n }\r\n\r\n /**\r\n * @param index\r\n * @param particle\r\n * @param offsetX\r\n * @param offsetY\r\n * @hidden (for internal use only)\r\n */\r\n public _appendParticleVertex(index: number, particle: Particle, offsetX: number, offsetY: number): void {\r\n let offset = index * this._vertexBufferSize;\r\n\r\n this._vertexData[offset++] = particle.position.x + this.worldOffset.x;\r\n this._vertexData[offset++] = particle.position.y + this.worldOffset.y;\r\n this._vertexData[offset++] = particle.position.z + this.worldOffset.z;\r\n this._vertexData[offset++] = particle.color.r;\r\n this._vertexData[offset++] = particle.color.g;\r\n this._vertexData[offset++] = particle.color.b;\r\n this._vertexData[offset++] = particle.color.a;\r\n this._vertexData[offset++] = particle.angle;\r\n\r\n this._vertexData[offset++] = particle.scale.x * particle.size;\r\n this._vertexData[offset++] = particle.scale.y * particle.size;\r\n\r\n if (this._isAnimationSheetEnabled) {\r\n this._vertexData[offset++] = particle.cellIndex;\r\n }\r\n\r\n if (!this._isBillboardBased) {\r\n if (particle._initialDirection) {\r\n let initialDirection = particle._initialDirection;\r\n if (this.isLocal) {\r\n Vector3.TransformNormalToRef(initialDirection, this._emitterWorldMatrix, TmpVectors.Vector3[0]);\r\n initialDirection = TmpVectors.Vector3[0];\r\n }\r\n if (initialDirection.x === 0 && initialDirection.z === 0) {\r\n initialDirection.x = 0.001;\r\n }\r\n\r\n this._vertexData[offset++] = initialDirection.x;\r\n this._vertexData[offset++] = initialDirection.y;\r\n this._vertexData[offset++] = initialDirection.z;\r\n } else {\r\n let direction = particle.direction;\r\n if (this.isLocal) {\r\n Vector3.TransformNormalToRef(direction, this._emitterWorldMatrix, TmpVectors.Vector3[0]);\r\n direction = TmpVectors.Vector3[0];\r\n }\r\n\r\n if (direction.x === 0 && direction.z === 0) {\r\n direction.x = 0.001;\r\n }\r\n this._vertexData[offset++] = direction.x;\r\n this._vertexData[offset++] = direction.y;\r\n this._vertexData[offset++] = direction.z;\r\n }\r\n } else if (this.billboardMode === ParticleSystem.BILLBOARDMODE_STRETCHED) {\r\n this._vertexData[offset++] = particle.direction.x;\r\n this._vertexData[offset++] = particle.direction.y;\r\n this._vertexData[offset++] = particle.direction.z;\r\n }\r\n\r\n if (this._useRampGradients && particle.remapData) {\r\n this._vertexData[offset++] = particle.remapData.x;\r\n this._vertexData[offset++] = particle.remapData.y;\r\n this._vertexData[offset++] = particle.remapData.z;\r\n this._vertexData[offset++] = particle.remapData.w;\r\n }\r\n\r\n if (!this._useInstancing) {\r\n if (this._isAnimationSheetEnabled) {\r\n if (offsetX === 0) {\r\n offsetX = this._epsilon;\r\n } else if (offsetX === 1) {\r\n offsetX = 1 - this._epsilon;\r\n }\r\n\r\n if (offsetY === 0) {\r\n offsetY = this._epsilon;\r\n } else if (offsetY === 1) {\r\n offsetY = 1 - this._epsilon;\r\n }\r\n }\r\n\r\n this._vertexData[offset++] = offsetX;\r\n this._vertexData[offset++] = offsetY;\r\n }\r\n }\r\n\r\n // start of sub system methods\r\n\r\n /**\r\n * \"Recycles\" one of the particle by copying it back to the \"stock\" of particles and removing it from the active list.\r\n * Its lifetime will start back at 0.\r\n * @param particle\r\n */\r\n public recycleParticle: (particle: Particle) => void = (particle) => {\r\n // move particle from activeParticle list to stock particles\r\n const lastParticle = <Particle>this._particles.pop();\r\n if (lastParticle !== particle) {\r\n lastParticle.copyTo(particle);\r\n }\r\n this._stockParticles.push(lastParticle);\r\n };\r\n\r\n private _stopSubEmitters(): void {\r\n if (!this.activeSubSystems) {\r\n return;\r\n }\r\n this.activeSubSystems.forEach((subSystem) => {\r\n subSystem.stop(true);\r\n });\r\n this.activeSubSystems = new Array<ParticleSystem>();\r\n }\r\n\r\n private _createParticle: () => Particle = () => {\r\n let particle: Particle;\r\n if (this._stockParticles.length !== 0) {\r\n particle = <Particle>this._stockParticles.pop();\r\n particle._reset();\r\n } else {\r\n particle = new Particle(this);\r\n }\r\n\r\n // Attach emitters\r\n if (this._subEmitters && this._subEmitters.length > 0) {\r\n const subEmitters = this._subEmitters[Math.floor(Math.random() * this._subEmitters.length)];\r\n particle._attachedSubEmitters = [];\r\n subEmitters.forEach((subEmitter) => {\r\n if (subEmitter.type === SubEmitterType.ATTACHED) {\r\n const newEmitter = subEmitter.clone();\r\n (<Array<SubEmitter>>particle._attachedSubEmitters).push(newEmitter);\r\n newEmitter.particleSystem.start();\r\n }\r\n });\r\n }\r\n return particle;\r\n };\r\n\r\n private _removeFromRoot(): void {\r\n if (!this._rootParticleSystem) {\r\n return;\r\n }\r\n\r\n const index = this._rootParticleSystem.activeSubSystems.indexOf(this);\r\n if (index !== -1) {\r\n this._rootParticleSystem.activeSubSystems.splice(index, 1);\r\n }\r\n\r\n this._rootParticleSystem = null;\r\n }\r\n\r\n private _emitFromParticle: (particle: Particle) => void = (particle) => {\r\n if (!this._subEmitters || this._subEmitters.length === 0) {\r\n return;\r\n }\r\n const templateIndex = Math.floor(Math.random() * this._subEmitters.length);\r\n\r\n this._subEmitters[templateIndex].forEach((subEmitter) => {\r\n if (subEmitter.type === SubEmitterType.END) {\r\n const subSystem = subEmitter.clone();\r\n particle._inheritParticleInfoToSubEmitter(subSystem);\r\n subSystem.particleSystem._rootParticleSystem = this;\r\n this.activeSubSystems.push(subSystem.particleSystem);\r\n subSystem.particleSystem.start();\r\n }\r\n });\r\n };\r\n\r\n // End of sub system methods\r\n\r\n private _update(newParticles: number): void {\r\n // Update current\r\n this._alive = this._particles.length > 0;\r\n\r\n if ((<AbstractMesh>this.emitter).position) {\r\n const emitterMesh = <AbstractMesh>this.emitter;\r\n this._emitterWorldMatrix = emitterMesh.getWorldMatrix();\r\n } else {\r\n const emitterPosition = <Vector3>this.emitter;\r\n this._emitterWorldMatrix = Matrix.Translation(emitterPosition.x, emitterPosition.y, emitterPosition.z);\r\n }\r\n\r\n this._emitterWorldMatrix.invertToRef(this._emitterInverseWorldMatrix);\r\n this.updateFunction(this._particles);\r\n\r\n // Add new ones\r\n let particle: Particle;\r\n for (let index = 0; index < newParticles; index++) {\r\n if (this._particles.length === this._capacity) {\r\n break;\r\n }\r\n\r\n particle = this._createParticle();\r\n\r\n this._particles.push(particle);\r\n\r\n // Life time\r\n if (this.targetStopDuration && this._lifeTimeGradients && this._lifeTimeGradients.length > 0) {\r\n const ratio = Scalar.Clamp(this._actualFrame / this.targetStopDuration);\r\n GradientHelper.GetCurrentGradient(ratio, this._lifeTimeGradients, (currentGradient, nextGradient) => {\r\n const factorGradient1 = <FactorGradient>currentGradient;\r\n const factorGradient2 = <FactorGradient>nextGradient;\r\n const lifeTime1 = factorGradient1.getFactor();\r\n const lifeTime2 = factorGradient2.getFactor();\r\n const gradient = (ratio - factorGradient1.gradient) / (factorGradient2.gradient - factorGradient1.gradient);\r\n particle.lifeTime = Scalar.Lerp(lifeTime1, lifeTime2, gradient);\r\n });\r\n } else {\r\n particle.lifeTime = Scalar.RandomRange(this.minLifeTime, this.maxLifeTime);\r\n }\r\n\r\n // Emitter\r\n const emitPower = Scalar.RandomRange(this.minEmitPower, this.maxEmitPower);\r\n\r\n if (this.startPositionFunction) {\r\n this.startPositionFunction(this._emitterWorldMatrix, particle.position, particle, this.isLocal);\r\n } else {\r\n this.particleEmitterType.startPositionFunction(this._emitterWorldMatrix, particle.position, particle, this.isLocal);\r\n }\r\n\r\n if (this.isLocal) {\r\n if (!particle._localPosition) {\r\n particle._localPosition = particle.position.clone();\r\n } else {\r\n particle._localPosition.copyFrom(particle.position);\r\n }\r\n Vector3.TransformCoordinatesToRef(particle._localPosition!, this._emitterWorldMatrix, particle.position);\r\n }\r\n\r\n if (this.startDirectionFunction) {\r\n this.startDirectionFunction(this._emitterWorldMatrix, particle.direction, particle, this.isLocal);\r\n } else {\r\n this.particleEmitterType.startDirectionFunction(this._emitterWorldMatrix, particle.direction, particle, this.isLocal, this._emitterInverseWorldMatrix);\r\n }\r\n\r\n if (emitPower === 0) {\r\n if (!particle._initialDirection) {\r\n particle._initialDirection = particle.direction.clone();\r\n } else {\r\n particle._initialDirection.copyFrom(particle.direction);\r\n }\r\n } else {\r\n particle._initialDirection = null;\r\n }\r\n\r\n particle.direction.scaleInPlace(emitPower);\r\n\r\n // Size\r\n if (!this._sizeGradients || this._sizeGradients.length === 0) {\r\n particle.size = Scalar.RandomRange(this.minSize, this.maxSize);\r\n } else {\r\n particle._currentSizeGradient = this._sizeGradients[0];\r\n particle._currentSize1 = particle._currentSizeGradient.getFactor();\r\n particle.size = particle._currentSize1;\r\n\r\n if (this._sizeGradients.length > 1) {\r\n particle._currentSize2 = this._sizeGradients[1].getFactor();\r\n } else {\r\n particle._currentSize2 = particle._currentSize1;\r\n }\r\n }\r\n // Size and scale\r\n particle.scale.copyFromFloats(Scalar.RandomRange(this.minScaleX, this.maxScaleX), Scalar.RandomRange(this.minScaleY, this.maxScaleY));\r\n\r\n // Adjust scale by start size\r\n if (this._startSizeGradients && this._startSizeGradients[0] && this.targetStopDuration) {\r\n const ratio = this._actualFrame / this.targetStopDuration;\r\n GradientHelper.GetCurrentGradient(ratio, this._startSizeGradients, (currentGradient, nextGradient, scale) => {\r\n if (currentGradient !== this._currentStartSizeGradient) {\r\n this._currentStartSize1 = this._currentStartSize2;\r\n this._currentStartSize2 = (<FactorGradient>nextGradient).getFactor();\r\n this._currentStartSizeGradient = <FactorGradient>currentGradient;\r\n }\r\n\r\n const value = Scalar.Lerp(this._currentStartSize1, this._currentStartSize2, scale);\r\n particle.scale.scaleInPlace(value);\r\n });\r\n }\r\n\r\n // Angle\r\n if (!this._angularSpeedGradients || this._angularSpeedGradients.length === 0) {\r\n particle.angularSpeed = Scalar.RandomRange(this.minAngularSpeed, this.maxAngularSpeed);\r\n } else {\r\n particle._currentAngularSpeedGradient = this._angularSpeedGradients[0];\r\n particle.angularSpeed = particle._currentAngularSpeedGradient.getFactor();\r\n particle._currentAngularSpeed1 = particle.angularSpeed;\r\n\r\n if (this._angularSpeedGradients.length > 1) {\r\n particle._currentAngularSpeed2 = this._angularSpeedGradients[1].getFactor();\r\n } else {\r\n particle._currentAngularSpeed2 = particle._currentAngularSpeed1;\r\n }\r\n }\r\n particle.angle = Scalar.RandomRange(this.minInitialRotation, this.maxInitialRotation);\r\n\r\n // Velocity\r\n if (this._velocityGradients && this._velocityGradients.length > 0) {\r\n particle._currentVelocityGradient = this._velocityGradients[0];\r\n particle._currentVelocity1 = particle._currentVelocityGradient.getFactor();\r\n\r\n if (this._velocityGradients.length > 1) {\r\n particle._currentVelocity2 = this._velocityGradients[1].getFactor();\r\n } else {\r\n particle._currentVelocity2 = particle._currentVelocity1;\r\n }\r\n }\r\n\r\n // Limit velocity\r\n if (this._limitVelocityGradients && this._limitVelocityGradients.length > 0) {\r\n particle._currentLimitVelocityGradient = this._limitVelocityGradients[0];\r\n particle._currentLimitVelocity1 = particle._currentLimitVelocityGradient.getFactor();\r\n\r\n if (this._limitVelocityGradients.length > 1) {\r\n particle._currentLimitVelocity2 = this._limitVelocityGradients[1].getFactor();\r\n } else {\r\n particle._currentLimitVelocity2 = particle._currentLimitVelocity1;\r\n }\r\n }\r\n\r\n // Drag\r\n if (this._dragGradients && this._dragGradients.length > 0) {\r\n particle._currentDragGradient = this._dragGradients[0];\r\n particle._currentDrag1 = particle._currentDragGradient.getFactor();\r\n\r\n if (this._dragGradients.length > 1) {\r\n particle._currentDrag2 = this._dragGradients[1].getFactor();\r\n } else {\r\n particle._currentDrag2 = particle._currentDrag1;\r\n }\r\n }\r\n\r\n // Color\r\n if (!this._colorGradients || this._colorGradients.length === 0) {\r\n const step = Scalar.RandomRange(0, 1.0);\r\n\r\n Color4.LerpToRef(this.color1, this.color2, step, particle.color);\r\n\r\n this.colorDead.subtractToRef(particle.color, this._colorDiff);\r\n this._colorDiff.scaleToRef(1.0 / particle.lifeTime, particle.colorStep);\r\n } else {\r\n particle._currentColorGradient = this._colorGradients[0];\r\n particle._currentColorGradient.getColorToRef(particle.color);\r\n particle._currentColor1.copyFrom(particle.color);\r\n\r\n if (this._colorGradients.length > 1) {\r\n this._colorGradients[1].getColorToRef(particle._currentColor2);\r\n } else {\r\n particle._currentColor2.copyFrom(particle.color);\r\n }\r\n }\r\n\r\n // Sheet\r\n if (this._isAnimationSheetEnabled) {\r\n particle._initialStartSpriteCellID = this.startSpriteCellID;\r\n particle._initialEndSpriteCellID = this.endSpriteCellID;\r\n particle._initialSpriteCellLoop = this.spriteCellLoop;\r\n }\r\n\r\n // Inherited Velocity\r\n particle.direction.addInPlace(this._inheritedVelocityOffset);\r\n\r\n // Ramp\r\n if (this._useRampGradients) {\r\n particle.remapData = new Vector4(0, 1, 0, 1);\r\n }\r\n\r\n // Noise texture coordinates\r\n if (this.noiseTexture) {\r\n if (particle._randomNoiseCoordinates1) {\r\n particle._randomNoiseCoordinates1.copyFromFloats(Math.random(), Math.random(), Math.random());\r\n particle._randomNoiseCoordinates2.copyFromFloats(Math.random(), Math.random(), Math.random());\r\n } else {\r\n particle._randomNoiseCoordinates1 = new Vector3(Math.random(), Math.random(), Math.random());\r\n particle._randomNoiseCoordinates2 = new Vector3(Math.random(), Math.random(), Math.random());\r\n }\r\n }\r\n\r\n // Update the position of the attached sub-emitters to match their attached particle\r\n particle._inheritParticleInfoToSubEmitters();\r\n }\r\n }\r\n\r\n /**\r\n * @param isAnimationSheetEnabled\r\n * @param isBillboardBased\r\n * @param useRampGradients\r\n * @hidden\r\n */\r\n public static _GetAttributeNamesOrOptions(isAnimationSheetEnabled = false, isBillboardBased = false, useRampGradients = false): string[] {\r\n const attributeNamesOrOptions = [VertexBuffer.PositionKind, VertexBuffer.ColorKind, \"angle\", \"offset\", \"size\"];\r\n\r\n if (isAnimationSheetEnabled) {\r\n attributeNamesOrOptions.push(\"cellIndex\");\r\n }\r\n\r\n if (!isBillboardBased) {\r\n attributeNamesOrOptions.push(\"direction\");\r\n }\r\n\r\n if (useRampGradients) {\r\n attributeNamesOrOptions.push(\"remapData\");\r\n }\r\n\r\n return attributeNamesOrOptions;\r\n }\r\n\r\n /**\r\n * @param isAnimationSheetEnabled\r\n * @hidden\r\n */\r\n public static _GetEffectCreationOptions(isAnimationSheetEnabled = false): string[] {\r\n const effectCreationOption = [\r\n \"invView\",\r\n \"view\",\r\n \"projection\",\r\n \"vClipPlane\",\r\n \"vClipPlane2\",\r\n \"vClipPlane3\",\r\n \"vClipPlane4\",\r\n \"vClipPlane5\",\r\n \"vClipPlane6\",\r\n \"textureMask\",\r\n \"translationPivot\",\r\n \"eyePosition\",\r\n ];\r\n\r\n if (isAnimationSheetEnabled) {\r\n effectCreationOption.push(\"particlesInfos\");\r\n }\r\n\r\n return effectCreationOption;\r\n }\r\n\r\n /**\r\n * Fill the defines array according to the current settings of the particle system\r\n * @param defines Array to be updated\r\n * @param blendMode blend mode to take into account when updating the array\r\n */\r\n public fillDefines(defines: Array<string>, blendMode: number) {\r\n if (this._scene) {\r\n if (this._scene.clipPlane) {\r\n defines.push(\"#define CLIPPLANE\");\r\n }\r\n\r\n if (this._scene.clipPlane2) {\r\n defines.push(\"#define CLIPPLANE2\");\r\n }\r\n\r\n if (this._scene.clipPlane3) {\r\n defines.push(\"#define CLIPPLANE3\");\r\n }\r\n\r\n if (this._scene.clipPlane4) {\r\n defines.push(\"#define CLIPPLANE4\");\r\n }\r\n\r\n if (this._scene.clipPlane5) {\r\n defines.push(\"#define CLIPPLANE5\");\r\n }\r\n\r\n if (this._scene.clipPlane6) {\r\n defines.push(\"#define CLIPPLANE6\");\r\n }\r\n }\r\n\r\n if (this._isAnimationSheetEnabled) {\r\n defines.push(\"#define ANIMATESHEET\");\r\n }\r\n\r\n if (blendMode === ParticleSystem.BLENDMODE_MULTIPLY) {\r\n defines.push(\"#define BLENDMULTIPLYMODE\");\r\n }\r\n\r\n if (this._useRampGradients) {\r\n defines.push(\"#define RAMPGRADIENT\");\r\n }\r\n\r\n if (this._isBillboardBased) {\r\n defines.push(\"#define BILLBOARD\");\r\n\r\n switch (this.billboardMode) {\r\n case ParticleSystem.BILLBOARDMODE_Y:\r\n defines.push(\"#define BILLBOARDY\");\r\n break;\r\n case ParticleSystem.BILLBOARDMODE_STRETCHED:\r\n defines.push(\"#define BILLBOARDSTRETCHED\");\r\n break;\r\n case ParticleSystem.BILLBOARDMODE_ALL:\r\n defines.push(\"#define BILLBOARDMODE_ALL\");\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n if (this._imageProcessingConfiguration) {\r\n this._imageProcessingConfiguration.prepareDefines(this._imageProcessingConfigurationDefines);\r\n defines.push(this._imageProcessingConfigurationDefines.toString());\r\n }\r\n }\r\n\r\n /**\r\n * Fill the uniforms, attributes and samplers arrays according to the current settings of the particle system\r\n * @param uniforms Uniforms array to fill\r\n * @param attributes Attributes array to fill\r\n * @param samplers Samplers array to fill\r\n */\r\n public fillUniformsAttributesAndSamplerNames(uniforms: Array<string>, attributes: Array<string>, samplers: Array<string>) {\r\n attributes.push(\r\n ...ParticleSystem._GetAttributeNamesOrOptions(\r\n this._isAnimationSheetEnabled,\r\n this._isBillboardBased && this.billboardMode !== ParticleSystem.BILLBOARDMODE_STRETCHED,\r\n this._useRampGradients\r\n )\r\n );\r\n\r\n uniforms.push(...ParticleSystem._GetEffectCreationOptions(this._isAnimationSheetEnabled));\r\n\r\n samplers.push(\"diffuseSampler\", \"rampSampler\");\r\n\r\n if (this._imageProcessingConfiguration) {\r\n ImageProcessingConfiguration.PrepareUniforms(uniforms, this._imageProcessingConfigurationDefines);\r\n ImageProcessingConfiguration.PrepareSamplers(samplers, this._imageProcessingConfigurationDefines);\r\n }\r\n }\r\n\r\n /**\r\n * @param blendMode\r\n * @hidden\r\n */\r\n private _getWrapper(blendMode: number): DrawWrapper {\r\n const customWrapper = this._getCustomDrawWrapper(blendMode);\r\n\r\n if (customWrapper?.effect) {\r\n return customWrapper;\r\n }\r\n\r\n const defines: Array<string> = [];\r\n\r\n this.fillDefines(defines, blendMode);\r\n\r\n // Effect\r\n const currentRenderPassId = this._engine._features.supportRenderPasses ? (this._engine as Engine).currentRenderPassId : Constants.RENDERPASS_MAIN;\r\n let drawWrappers = this._drawWrappers[currentRenderPassId];\r\n if (!drawWrappers) {\r\n drawWrappers = this._drawWrappers[currentRenderPassId] = [];\r\n }\r\n let drawWrapper = drawWrappers[blendMode];\r\n if (!drawWrapper) {\r\n drawWrapper = new DrawWrapper(this._engine);\r\n if (drawWrapper.drawContext) {\r\n drawWrapper.drawContext.useInstancing = this._useInstancing;\r\n }\r\n drawWrappers[blendMode] = drawWrapper;\r\n }\r\n\r\n const join = defines.join(\"\\n\");\r\n if (drawWrapper.defines !== join) {\r\n const attributesNamesOrOptions: Array<string> = [];\r\n const effectCreationOption: Array<string> = [];\r\n const samplers: Array<string> = [];\r\n\r\n this.fillUniformsAttributesAndSamplerNames(effectCreationOption, attributesNamesOrOptions, samplers);\r\n\r\n drawWrapper.setEffect(this._engine.createEffect(\"particles\", attributesNamesOrOptions, effectCreationOption, samplers, join), join);\r\n }\r\n\r\n return drawWrapper;\r\n }\r\n\r\n /**\r\n * Animates the particle system for the current frame by emitting new particles and or animating the living ones.\r\n * @param preWarmOnly will prevent the system from updating the vertex buffer (default is false)\r\n */\r\n public animate(preWarmOnly = false): void {\r\n if (!this._started) {\r\n return;\r\n }\r\n\r\n if (!preWarmOnly && this._scene) {\r\n // Check\r\n if (!this.isReady()) {\r\n return;\r\n }\r\n\r\n if (this._currentRenderId === this._scene.getFrameId()) {\r\n return;\r\n }\r\n this._currentRenderId = this._scene.getFrameId();\r\n }\r\n\r\n this._scaledUpdateSpeed = this.updateSpeed * (preWarmOnly ? this.preWarmStepOffset : this._scene?.getAnimationRatio() || 1);\r\n\r\n // Determine the number of particles we need to create\r\n let newParticles;\r\n\r\n if (this.manualEmitCount > -1) {\r\n newParticles = this.manualEmitCount;\r\n this._newPartsExcess = 0;\r\n this.manualEmitCount = 0;\r\n } else {\r\n let rate = this.emitRate;\r\n\r\n if (this._emitRateGradients && this._emitRateGradients.length > 0 && this.targetStopDuration) {\r\n const ratio = this._actualFrame / this.targetStopDuration;\r\n GradientHelper.GetCurrentGradient(ratio, this._emitRateGradients, (currentGradient, nextGradient, scale) => {\r\n if (currentGradient !== this._currentEmitRateGradient) {\r\n this._currentEmitRate1 = this._currentEmitRate2;\r\n this._currentEmitRate2 = (<FactorGradient>nextGradient).getFactor();\r\n this._currentEmitRateGradient = <FactorGradient>currentGradient;\r\n }\r\n\r\n rate = Scalar.Lerp(this._currentEmitRate1, this._currentEmitRate2, scale);\r\n });\r\n }\r\n\r\n newParticles = (rate * this._scaledUpdateSpeed) >> 0;\r\n this._newPartsExcess += rate * this._scaledUpdateSpeed - newParticles;\r\n }\r\n\r\n if (this._newPartsExcess > 1.0) {\r\n newParticles += this._newPartsExcess >> 0;\r\n this._newPartsExcess -= this._newPartsExcess >> 0;\r\n }\r\n\r\n this._alive = false;\r\n\r\n if (!this._stopped) {\r\n this._actualFrame += this._scaledUpdateSpeed;\r\n\r\n if (this.targetStopDuration && this._actualFrame >= this.targetStopDuration) {\r\n this.stop();\r\n }\r\n } else {\r\n newParticles = 0;\r\n }\r\n this._update(newParticles);\r\n\r\n // Stopped?\r\n if (this._stopped) {\r\n if (!this._alive) {\r\n this._started = false;\r\n if (this.onAnimationEnd) {\r\n this.onAnimationEnd();\r\n }\r\n if (this.disposeOnStop && this._scene) {\r\n this._scene._toBeDisposed.push(this);\r\n }\r\n }\r\n }\r\n\r\n if (!preWarmOnly) {\r\n // Update VBO\r\n let offset = 0;\r\n for (let index = 0; index < this._particles.length; index++) {\r\n const particle = this._particles[index];\r\n this._appendParticleVertices(offset, particle);\r\n offset += this._useInstancing ? 1 : 4;\r\n }\r\n\r\n if (this._vertexBuffer) {\r\n this._vertexBuffer.updateDirectly(this._vertexData, 0, this._particles.length);\r\n }\r\n }\r\n\r\n if (this.manualEmitCount === 0 && this.disposeOnStop) {\r\n this.stop();\r\n }\r\n }\r\n\r\n private _appendParticleVertices(offset: number, particle: Particle) {\r\n this._appendParticleVertex(offset++, particle, 0, 0);\r\n if (!this._useInstancing) {\r\n this._appendParticleVertex(offset++, particle, 1, 0);\r\n this._appendParticleVertex(offset++, particle, 1, 1);\r\n this._appendParticleVertex(offset++, particle, 0, 1);\r\n }\r\n }\r\n\r\n /**\r\n * Rebuilds the particle system.\r\n */\r\n public rebuild(): void {\r\n if (this._engine.getCaps().vertexArrayObject) {\r\n this._vertexArrayObject = null;\r\n }\r\n\r\n this._createIndexBuffer();\r\n\r\n this._spriteBuffer?._rebuild();\r\n\r\n this._vertexBuffer?._rebuild();\r\n\r\n for (const key in this._vertexBuffers) {\r\n this._vertexBuffers[key]._rebuild();\r\n }\r\n\r\n this.resetDrawCache();\r\n }\r\n\r\n /**\r\n * Is this system ready to be used/rendered\r\n * @returns true if the system is ready\r\n */\r\n public isReady(): boolean {\r\n if (!this.emitter || (this._imageProcessingConfiguration && !this._imageProcessingConfiguration.isReady()) || !this.particleTexture || !this.particleTexture.isReady()) {\r\n return false;\r\n }\r\n\r\n if (this.blendMode !== ParticleSystem.BLENDMODE_MULTIPLYADD) {\r\n if (!this._getWrapper(this.blendMode).effect!.isReady()) {\r\n return false;\r\n }\r\n } else {\r\n if (!this._getWrapper(ParticleSystem.BLENDMODE_MULTIPLY).effect!.isReady()) {\r\n return false;\r\n }\r\n if (!this._getWrapper(ParticleSystem.BLENDMODE_ADD).effect!.isReady()) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n private _render(blendMode: number) {\r\n const drawWrapper = this._getWrapper(blendMode);\r\n const effect = drawWrapper.effect!;\r\n\r\n const engine = this._engine;\r\n\r\n // Render\r\n engine.enableEffect(drawWrapper);\r\n\r\n const viewMatrix = this.defaultViewMatrix ?? this._scene!.getViewMatrix();\r\n effect.setTexture(\"diffuseSampler\", this.particleTexture);\r\n effect.setMatrix(\"view\", viewMatrix);\r\n effect.setMatrix(\"projection\", this.defaultProjectionMatrix ?? this._scene!.getProjectionMatrix());\r\n\r\n if (this._isAnimationSheetEnabled && this.particleTexture) {\r\n const baseSize = this.particleTexture.getBaseSize();\r\n effect.setFloat3(\"particlesInfos\", this.spriteCellWidth / baseSize.width, this.spriteCellHeight / baseSize.height, this.spriteCellWidth / baseSize.width);\r\n }\r\n\r\n effect.setVector2(\"translationPivot\", this.translationPivot);\r\n effect.setFloat4(\"textureMask\", this.textureMask.r, this.textureMask.g, this.textureMask.b, this.textureMask.a);\r\n\r\n if (this._isBillboardBased && this._scene) {\r\n const camera = this._scene.activeCamera!;\r\n effect.setVector3(\"eyePosition\", camera.globalPosition);\r\n }\r\n\r\n if (this._rampGradientsTexture) {\r\n if (!this._rampGradients || !this._rampGradients.length) {\r\n this._rampGradientsTexture.dispose();\r\n this._rampGradientsTexture = null;\r\n }\r\n effect.setTexture(\"rampSampler\", this._rampGradientsTexture);\r\n }\r\n\r\n const defines = effect.defines;\r\n\r\n if (this._scene) {\r\n if (this._scene.clipPlane || this._scene.clipPlane2 || this._scene.clipPlane3 || this._scene.clipPlane4 || this._scene.clipPlane5 || this._scene.clipPlane6) {\r\n ThinMaterialHelper.BindClipPlane(effect, this._scene);\r\n }\r\n }\r\n\r\n if (defines.indexOf(\"#define BILLBOARDMODE_ALL\") >= 0) {\r\n viewMatrix.invertToRef(TmpVectors.Matrix[0]);\r\n effect.setMatrix(\"invView\", TmpVectors.Matrix[0]);\r\n }\r\n\r\n if (this._vertexArrayObject !== undefined) {\r\n if (!this._vertexArrayObject) {\r\n this._vertexArrayObject = this._engine.recordVertexArrayObject(this._vertexBuffers, this._indexBuffer, effect);\r\n }\r\n\r\n this._engine.bindVertexArrayObject(this._vertexArrayObject, this._indexBuffer);\r\n } else {\r\n engine.bindBuffers(this._vertexBuffers, this._indexBuffer, effect);\r\n }\r\n\r\n // image processing\r\n if (this._imageProcessingConfiguration && !this._imageProcessingConfiguration.applyByPostProcess) {\r\n this._imageProcessingConfiguration.bind(effect);\r\n }\r\n\r\n // Draw order\r\n switch (blendMode) {\r\n case ParticleSystem.BLENDMODE_ADD:\r\n engine.setAlphaMode(Constants.ALPHA_ADD);\r\n break;\r\n case ParticleSystem.BLENDMODE_ONEONE:\r\n engine.setAlphaMode(Constants.ALPHA_ONEONE);\r\n break;\r\n case ParticleSystem.BLENDMODE_STANDARD:\r\n engine.setAlphaMode(Constants.ALPHA_COMBINE);\r\n break;\r\n case ParticleSystem.BLENDMODE_MULTIPLY:\r\n engine.setAlphaMode(Constants.ALPHA_MULTIPLY);\r\n break;\r\n }\r\n\r\n if (this._onBeforeDrawParticlesObservable) {\r\n this._onBeforeDrawParticlesObservable.notifyObservers(effect);\r\n }\r\n\r\n if (this._useInstancing) {\r\n engine.drawArraysType(Constants.MATERIAL_TriangleStripDrawMode, 0, 4, this._particles.length);\r\n } else {\r\n engine.drawElementsType(Constants.MATERIAL_TriangleFillMode, 0, this._particles.length * 6);\r\n }\r\n\r\n return this._particles.length;\r\n }\r\n\r\n /**\r\n * Renders the particle system in its current state.\r\n * @returns the current number of particles\r\n */\r\n public render(): number {\r\n // Check\r\n if (!this.isReady() || !this._particles.length) {\r\n return 0;\r\n }\r\n\r\n const engine = this._engine as any;\r\n if (engine.setState) {\r\n engine.setState(false);\r\n\r\n if (this.forceDepthWrite) {\r\n engine.setDepthWrite(true);\r\n }\r\n }\r\n\r\n let outparticles = 0;\r\n\r\n if (this.blendMode === ParticleSystem.BLENDMODE_MULTIPLYADD) {\r\n outparticles = this._render(ParticleSystem.BLENDMODE_MULTIPLY) + this._render(ParticleSystem.BLENDMODE_ADD);\r\n } else {\r\n outparticles = this._render(this.blendMode);\r\n }\r\n\r\n this._engine.unbindInstanceAttributes();\r\n this._engine.setAlphaMode(Constants.ALPHA_DISABLE);\r\n\r\n return outparticles;\r\n }\r\n\r\n /**\r\n * Disposes the particle system and free the associated resources\r\n * @param disposeTexture defines if the particle texture must be disposed as well (true by default)\r\n */\r\n public dispose(disposeTexture = true): void {\r\n this.resetDrawCache();\r\n\r\n if (this._vertexBuffer) {\r\n this._vertexBuffer.dispose();\r\n this._vertexBuffer = null;\r\n }\r\n\r\n if (this._spriteBuffer) {\r\n this._spriteBuffer.dispose();\r\n this._spriteBuffer = null;\r\n }\r\n\r\n if (this._indexBuffer) {\r\n this._engine._releaseBuffer(this._indexBuffer);\r\n this._indexBuffer = null;\r\n }\r\n\r\n if (this._vertexArrayObject) {\r\n this._engine.releaseVertexArrayObject(this._vertexArrayObject);\r\n this._vertexArrayObject = null;\r\n }\r\n\r\n if (disposeTexture && this.particleTexture) {\r\n this.particleTexture.dispose();\r\n this.particleTexture = null;\r\n }\r\n\r\n if (disposeTexture && this.noiseTexture) {\r\n this.noiseTexture.dispose();\r\n this.noiseTexture = null;\r\n }\r\n\r\n if (this._rampGradientsTexture) {\r\n this._rampGradientsTexture.dispose();\r\n this._rampGradientsTexture = null;\r\n }\r\n\r\n this._removeFromRoot();\r\n\r\n if (this.subEmitters && !this._subEmitters) {\r\n this._prepareSubEmitterInternalArray();\r\n }\r\n\r\n if (this._subEmitters && this._subEmitters.length) {\r\n for (let index = 0; index < this._subEmitters.length; index++) {\r\n for (const subEmitter of this._subEmitters[index]) {\r\n subEmitter.dispose();\r\n }\r\n }\r\n\r\n this._subEmitters = [];\r\n this.subEmitters = [];\r\n }\r\n\r\n if (this._disposeEmitterOnDispose && this.emitter && (this.emitter as AbstractMesh).dispose) {\r\n (<AbstractMesh>this.emitter).dispose(true);\r\n }\r\n\r\n if (this._onBeforeDrawParticlesObservable) {\r\n this._onBeforeDrawParticlesObservable.clear();\r\n }\r\n\r\n // Remove from scene\r\n if (this._scene) {\r\n const index = this._scene.particleSystems.indexOf(this);\r\n if (index > -1) {\r\n this._scene.particleSystems.splice(index, 1);\r\n }\r\n\r\n this._scene._activeParticleSystems.dispose();\r\n }\r\n\r\n // Callback\r\n this.onDisposeObservable.notifyObservers(this);\r\n this.onDisposeObservable.clear();\r\n this.onStoppedObservable.clear();\r\n\r\n this.reset();\r\n }\r\n\r\n // Clone\r\n /**\r\n * Clones the particle system.\r\n * @param name The name of the cloned object\r\n * @param newEmitter The new emitter to use\r\n * @returns the cloned particle system\r\n */\r\n public clone(name: string, newEmitter: any): ParticleSystem {\r\n const custom = { ...this._customWrappers };\r\n let program: any = null;\r\n const engine = this._engine as Engine;\r\n if (engine.createEffectForParticles) {\r\n if (this.customShader != null) {\r\n program = this.customShader;\r\n const defines: string = program.shaderOptions.defines.length > 0 ? program.shaderOptions.defines.join(\"\\n\") : \"\";\r\n const effect = engine.createEffectForParticles(program.shaderPath.fragmentElement, program.shaderOptions.uniforms, program.shaderOptions.samplers, defines);\r\n if (!custom[0]) {\r\n this.setCustomEffect(effect, 0);\r\n } else {\r\n custom[0].effect = effect;\r\n }\r\n }\r\n }\r\n\r\n const serialization = this.serialize();\r\n const result = ParticleSystem.Parse(serialization, this._scene || this._engine, this._rootUrl);\r\n result.name = name;\r\n result.customShader = program;\r\n result._customWrappers = custom;\r\n\r\n if (newEmitter === undefined) {\r\n newEmitter = this.emitter;\r\n }\r\n\r\n if (this.noiseTexture) {\r\n result.noiseTexture = this.noiseTexture.clone();\r\n }\r\n\r\n result.emitter = newEmitter;\r\n if (!this.preventAutoStart) {\r\n result.start();\r\n }\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Serializes the particle system to a JSON object\r\n * @param serializeTexture defines if the texture must be serialized as well\r\n * @returns the JSON object\r\n */\r\n public serialize(serializeTexture = false): any {\r\n const serializationObject: any = {};\r\n\r\n ParticleSystem._Serialize(serializationObject, this, serializeTexture);\r\n\r\n serializationObject.textureMask = this.textureMask.asArray();\r\n serializationObject.customShader = this.customShader;\r\n serializationObject.preventAutoStart = this.preventAutoStart;\r\n\r\n // SubEmitters\r\n if (this.subEmitters) {\r\n serializationObject.subEmitters = [];\r\n\r\n if (!this._subEmitters) {\r\n this._prepareSubEmitterInternalArray();\r\n }\r\n\r\n for (const subs of this._subEmitters) {\r\n const cell = [];\r\n for (const sub of subs) {\r\n cell.push(sub.serialize(serializeTexture));\r\n }\r\n\r\n serializationObject.subEmitters.push(cell);\r\n }\r\n }\r\n\r\n return serializationObject;\r\n }\r\n\r\n /**\r\n * @param serializationObject\r\n * @param particleSystem\r\n * @param serializeTexture\r\n * @hidden\r\n */\r\n public static _Serialize(serializationObject: any, particleSystem: IParticleSystem, serializeTexture: boolean) {\r\n serializationObject.name = particleSystem.name;\r\n serializationObject.id = particleSystem.id;\r\n\r\n serializationObject.capacity = particleSystem.getCapacity();\r\n\r\n serializationObject.disposeOnStop = particleSystem.disposeOnStop;\r\n serializationObject.manualEmitCount = particleSystem.manualEmitCount;\r\n\r\n // Emitter\r\n if ((<AbstractMesh>particleSystem.emitter).position) {\r\n const emitterMesh = <AbstractMesh>particleSystem.emitter;\r\n serializationObject.emitterId = emitterMesh.id;\r\n } else {\r\n const emitterPosition = <Vector3>particleSystem.emitter;\r\n serializationObject.emitter = emitterPosition.asArray();\r\n }\r\n\r\n // Emitter\r\n if (particleSystem.particleEmitterType) {\r\n serializationObject.particleEmitterType = particleSystem.particleEmitterType.serialize();\r\n }\r\n\r\n if (particleSystem.particleTexture) {\r\n if (serializeTexture) {\r\n serializationObject.texture = particleSystem.particleTexture.serialize();\r\n } else {\r\n serializationObject.textureName = particleSystem.particleTexture.name;\r\n serializationObject.invertY = !!(particleSystem.particleTexture as any)._invertY;\r\n }\r\n }\r\n\r\n serializationObject.isLocal = particleSystem.isLocal;\r\n\r\n // Animations\r\n SerializationHelper.AppendSerializedAnimations(particleSystem, serializationObject);\r\n serializationObject.beginAnimationOnStart = particleSystem.beginAnimationOnStart;\r\n serializationObject.beginAnimationFrom = particleSystem.beginAnimationFrom;\r\n serializationObject.beginAnimationTo = particleSystem.beginAnimationTo;\r\n serializationObject.beginAnimationLoop = particleSystem.beginAnimationLoop;\r\n\r\n // Particle system\r\n serializationObject.startDelay = particleSystem.startDelay;\r\n serializationObject.renderingGroupId = particleSystem.renderingGroupId;\r\n serializationObject.isBillboardBased = particleSystem.isBillboardBased;\r\n serializationObject.billboardMode = particleSystem.billboardMode;\r\n serializationObject.minAngularSpeed = particleSystem.minAngularSpeed;\r\n serializationObject.maxAngularSpeed = particleSystem.maxAngularSpeed;\r\n serializationObject.minSize = particleSystem.minSize;\r\n serializationObject.maxSize = particleSystem.maxSize;\r\n serializationObject.minScaleX = particleSystem.minScaleX;\r\n serializationObject.maxScaleX = particleSystem.maxScaleX;\r\n serializationObject.minScaleY = particleSystem.minScaleY;\r\n serializationObject.maxScaleY = particleSystem.maxScaleY;\r\n serializationObject.minEmitPower = particleSystem.minEmitPower;\r\n serializationObject.maxEmitPower = particleSystem.maxEmitPower;\r\n serializationObject.minLifeTime = particleSystem.minLifeTime;\r\n serializationObject.maxLifeTime = particleSystem.maxLifeTime;\r\n serializationObject.emitRate = particleSystem.emitRate;\r\n serializationObject.gravity = particleSystem.gravity.asArray();\r\n serializationObject.noiseStrength = particleSystem.noiseStrength.asArray();\r\n serializationObject.color1 = particleSystem.color1.asArray();\r\n serializationObject.color2 = particleSystem.color2.asArray();\r\n serializationObject.colorDead = particleSystem.colorDead.asArray();\r\n serializationObject.updateSpeed = particleSystem.updateSpeed;\r\n serializationObject.targetStopDuration = particleSystem.targetStopDuration;\r\n serializationObject.blendMode = particleSystem.blendMode;\r\n serializationObject.preWarmCycles = particleSystem.preWarmCycles;\r\n serializationObject.preWarmStepOffset = particleSystem.preWarmStepOffset;\r\n serializationObject.minInitialRotation = particleSystem.minInitialRotation;\r\n serializationObject.maxInitialRotation = particleSystem.maxInitialRotation;\r\n serializationObject.startSpriteCellID = particleSystem.startSpriteCellID;\r\n serializationObject.spriteCellLoop = particleSystem.spriteCellLoop;\r\n serializationObject.endSpriteCellID = particleSystem.endSpriteCellID;\r\n serializationObject.spriteCellChangeSpeed = particleSystem.spriteCellChangeSpeed;\r\n serializationObject.spriteCellWidth = particleSystem.spriteCellWidth;\r\n serializationObject.spriteCellHeight = particleSystem.spriteCellHeight;\r\n serializationObject.spriteRandomStartCell = particleSystem.spriteRandomStartCell;\r\n serializationObject.isAnimationSheetEnabled = particleSystem.isAnimationSheetEnabled;\r\n\r\n const colorGradients = particleSystem.getColorGradients();\r\n if (colorGradients) {\r\n serializationObject.colorGradients = [];\r\n for (const colorGradient of colorGradients) {\r\n const serializedGradient: any = {\r\n gradient: colorGradient.gradient,\r\n color1: colorGradient.color1.asArray(),\r\n };\r\n\r\n if (colorGradient.color2) {\r\n serializedGradient.color2 = colorGradient.color2.asArray();\r\n } else {\r\n serializedGradient.color2 = colorGradient.color1.asArray();\r\n }\r\n\r\n serializationObject.colorGradients.push(serializedGradient);\r\n }\r\n }\r\n\r\n const rampGradients = particleSystem.getRampGradients();\r\n if (rampGradients) {\r\n serializationObject.rampGradients = [];\r\n for (const rampGradient of rampGradients) {\r\n const serializedGradient: any = {\r\n gradient: rampGradient.gradient,\r\n color: rampGradient.color.asArray(),\r\n };\r\n\r\n serializationObject.rampGradients.push(serializedGradient);\r\n }\r\n serializationObject.useRampGradients = particleSystem.useRampGradients;\r\n }\r\n\r\n const colorRemapGradients = particleSystem.getColorRemapGradients();\r\n if (colorRemapGradients) {\r\n serializationObject.colorRemapGradients = [];\r\n for (const colorRemapGradient of colorRemapGradients) {\r\n const serializedGradient: any = {\r\n gradient: colorRemapGradient.gradient,\r\n factor1: colorRemapGradient.factor1,\r\n };\r\n\r\n if (colorRemapGradient.factor2 !== undefined) {\r\n serializedGradient.factor2 = colorRemapGradient.factor2;\r\n } else {\r\n serializedGradient.factor2 = colorRemapGradient.factor1;\r\n }\r\n\r\n serializationObject.colorRemapGradients.push(serializedGradient);\r\n }\r\n }\r\n\r\n const alphaRemapGradients = particleSystem.getAlphaRemapGradients();\r\n if (alphaRemapGradients) {\r\n serializationObject.alphaRemapGradients = [];\r\n for (const alphaRemapGradient of alphaRemapGradients) {\r\n const serializedGradient: any = {\r\n gradient: alphaRemapGradient.gradient,\r\n factor1: alphaRemapGradient.factor1,\r\n };\r\n\r\n if (alphaRemapGradient.factor2 !== undefined) {\r\n serializedGradient.factor2 = alphaRemapGradient.factor2;\r\n } else {\r\n serializedGradient.factor2 = alphaRemapGradient.factor1;\r\n }\r\n\r\n serializationObject.alphaRemapGradients.push(serializedGradient);\r\n }\r\n }\r\n\r\n const sizeGradients = particleSystem.getSizeGradients();\r\n if (sizeGradients) {\r\n serializationObject.sizeGradients = [];\r\n for (const sizeGradient of sizeGradients) {\r\n const serializedGradient: any = {\r\n gradient: sizeGradient.gradient,\r\n factor1: sizeGradient.factor1,\r\n };\r\n\r\n if (sizeGradient.factor2 !== undefined) {\r\n serializedGradient.factor2 = sizeGradient.factor2;\r\n } else {\r\n serializedGradient.factor2 = sizeGradient.factor1;\r\n }\r\n\r\n serializationObject.sizeGradients.push(serializedGradient);\r\n }\r\n }\r\n\r\n const angularSpeedGradients = particleSystem.getAngularSpeedGradients();\r\n if (angularSpeedGradients) {\r\n serializationObject.angularSpeedGradients = [];\r\n for (const angularSpeedGradient of angularSpeedGradients) {\r\n const serializedGradient: any = {\r\n gradient: angularSpeedGradient.gradient,\r\n factor1: angularSpeedGradient.factor1,\r\n };\r\n\r\n if (angularSpeedGradient.factor2 !== undefined) {\r\n serializedGradient.factor2 = angularSpeedGradient.factor2;\r\n } else {\r\n serializedGradient.factor2 = angularSpeedGradient.factor1;\r\n }\r\n\r\n serializationObject.angularSpeedGradients.push(serializedGradient);\r\n }\r\n }\r\n\r\n const velocityGradients = particleSystem.getVelocityGradients();\r\n if (velocityGradients) {\r\n serializationObject.velocityGradients = [];\r\n for (const velocityGradient of velocityGradients) {\r\n const serializedGradient: any = {\r\n gradient: velocityGradient.gradient,\r\n factor1: velocityGradient.factor1,\r\n };\r\n\r\n if (velocityGradient.factor2 !== undefined) {\r\n serializedGradient.factor2 = velocityGradient.factor2;\r\n } else {\r\n serializedGradient.factor2 = velocityGradient.factor1;\r\n }\r\n\r\n serializationObject.velocityGradients.push(serializedGradient);\r\n }\r\n }\r\n\r\n const dragGradients = particleSystem.getDragGradients();\r\n if (dragGradients) {\r\n serializationObject.dragGradients = [];\r\n for (const dragGradient of dragGradients) {\r\n const serializedGradient: any = {\r\n gradient: dragGradient.gradient,\r\n factor1: dragGradient.factor1,\r\n };\r\n\r\n if (dragGradient.factor2 !== undefined) {\r\n serializedGradient.factor2 = dragGradient.factor2;\r\n } else {\r\n serializedGradient.factor2 = dragGradient.factor1;\r\n }\r\n\r\n serializationObject.dragGradients.push(serializedGradient);\r\n }\r\n }\r\n\r\n const emitRateGradients = particleSystem.getEmitRateGradients();\r\n if (emitRateGradients) {\r\n serializationObject.emitRateGradients = [];\r\n for (const emitRateGradient of emitRateGradients) {\r\n const serializedGradient: any = {\r\n gradient: emitRateGradient.gradient,\r\n factor1: emitRateGradient.factor1,\r\n };\r\n\r\n if (emitRateGradient.factor2 !== undefined) {\r\n serializedGradient.factor2 = emitRateGradient.factor2;\r\n } else {\r\n serializedGradient.factor2 = emitRateGradient.factor1;\r\n }\r\n\r\n serializationObject.emitRateGradients.push(serializedGradient);\r\n }\r\n }\r\n\r\n const startSizeGradients = particleSystem.getStartSizeGradients();\r\n if (startSizeGradients) {\r\n serializationObject.startSizeGradients = [];\r\n for (const startSizeGradient of startSizeGradients) {\r\n const serializedGradient: any = {\r\n gradient: startSizeGradient.gradient,\r\n factor1: startSizeGradient.factor1,\r\n };\r\n\r\n if (startSizeGradient.factor2 !== undefined) {\r\n serializedGradient.factor2 = startSizeGradient.factor2;\r\n } else {\r\n serializedGradient.factor2 = startSizeGradient.factor1;\r\n }\r\n\r\n serializationObject.startSizeGradients.push(serializedGradient);\r\n }\r\n }\r\n\r\n const lifeTimeGradients = particleSystem.getLifeTimeGradients();\r\n if (lifeTimeGradients) {\r\n serializationObject.lifeTimeGradients = [];\r\n for (const lifeTimeGradient of lifeTimeGradients) {\r\n const serializedGradient: any = {\r\n gradient: lifeTimeGradient.gradient,\r\n factor1: lifeTimeGradient.factor1,\r\n };\r\n\r\n if (lifeTimeGradient.factor2 !== undefined) {\r\n serializedGradient.factor2 = lifeTimeGradient.factor2;\r\n } else {\r\n serializedGradient.factor2 = lifeTimeGradient.factor1;\r\n }\r\n\r\n serializationObject.lifeTimeGradients.push(serializedGradient);\r\n }\r\n }\r\n\r\n const limitVelocityGradients = particleSystem.getLimitVelocityGradients();\r\n if (limitVelocityGradients) {\r\n serializationObject.limitVelocityGradients = [];\r\n for (const limitVelocityGradient of limitVelocityGradients) {\r\n const serializedGradient: any = {\r\n gradient: limitVelocityGradient.gradient,\r\n factor1: limitVelocityGradient.factor1,\r\n };\r\n\r\n if (limitVelocityGradient.factor2 !== undefined) {\r\n serializedGradient.factor2 = limitVelocityGradient.factor2;\r\n } else {\r\n serializedGradient.factor2 = limitVelocityGradient.factor1;\r\n }\r\n\r\n serializationObject.limitVelocityGradients.push(serializedGradient);\r\n }\r\n\r\n serializationObject.limitVelocityDamping = particleSystem.limitVelocityDamping;\r\n }\r\n\r\n if (particleSystem.noiseTexture) {\r\n serializationObject.noiseTexture = particleSystem.noiseTexture.serialize();\r\n }\r\n }\r\n\r\n /**\r\n * @param parsedParticleSystem\r\n * @param particleSystem\r\n * @param sceneOrEngine\r\n * @param rootUrl\r\n * @hidden\r\n */\r\n public static _Parse(parsedParticleSystem: any, particleSystem: IParticleSystem, sceneOrEngine: Scene | ThinEngine, rootUrl: string) {\r\n let scene: Nullable<Scene>;\r\n\r\n if (sceneOrEngine instanceof ThinEngine) {\r\n scene = null;\r\n } else {\r\n scene = sceneOrEngine as Scene;\r\n }\r\n\r\n const internalClass = GetClass(\"BABYLON.Texture\");\r\n if (internalClass && scene) {\r\n // Texture\r\n if (parsedParticleSystem.texture) {\r\n particleSystem.particleTexture = internalClass.Parse(parsedParticleSystem.texture, scene, rootUrl) as BaseTexture;\r\n } else if (parsedParticleSystem.textureName) {\r\n particleSystem.particleTexture = new internalClass(\r\n rootUrl + parsedParticleSystem.textureName,\r\n scene,\r\n false,\r\n parsedParticleSystem.invertY !== undefined ? parsedParticleSystem.invertY : true\r\n );\r\n particleSystem.particleTexture!.name = parsedParticleSystem.textureName;\r\n }\r\n }\r\n\r\n // Emitter\r\n if (!parsedParticleSystem.emitterId && parsedParticleSystem.emitterId !== 0 && parsedParticleSystem.emitter === undefined) {\r\n particleSystem.emitter = Vector3.Zero();\r\n } else if (parsedParticleSystem.emitterId && scene) {\r\n particleSystem.emitter = scene.getLastMeshById(parsedParticleSystem.emitterId);\r\n } else {\r\n particleSystem.emitter = Vector3.FromArray(parsedParticleSystem.emitter);\r\n }\r\n\r\n particleSystem.isLocal = !!parsedParticleSystem.isLocal;\r\n\r\n // Misc.\r\n if (parsedParticleSystem.renderingGroupId !== undefined) {\r\n particleSystem.renderingGroupId = parsedParticleSystem.renderingGroupId;\r\n }\r\n\r\n if (parsedParticleSystem.isBillboardBased !== undefined) {\r\n particleSystem.isBillboardBased = parsedParticleSystem.isBillboardBased;\r\n }\r\n\r\n if (parsedParticleSystem.billboardMode !== undefined) {\r\n particleSystem.billboardMode = parsedParticleSystem.billboardMode;\r\n }\r\n\r\n // Animations\r\n if (parsedParticleSystem.animations) {\r\n for (let animationIndex = 0; animationIndex < parsedParticleSystem.animations.length; animationIndex++) {\r\n const parsedAnimation = parsedParticleSystem.animations[animationIndex];\r\n const internalClass = GetClass(\"BABYLON.Animation\");\r\n if (internalClass) {\r\n particleSystem.animations.push(internalClass.Parse(parsedAnimation));\r\n }\r\n }\r\n particleSystem.beginAnimationOnStart = parsedParticleSystem.beginAnimationOnStart;\r\n particleSystem.beginAnimationFrom = parsedParticleSystem.beginAnimationFrom;\r\n particleSystem.beginAnimationTo = parsedParticleSystem.beginAnimationTo;\r\n particleSystem.beginAnimationLoop = parsedParticleSystem.beginAnimationLoop;\r\n }\r\n\r\n if (parsedParticleSystem.autoAnimate && scene) {\r\n scene.beginAnimation(\r\n particleSystem,\r\n parsedParticleSystem.autoAnimateFrom,\r\n parsedParticleSystem.autoAnimateTo,\r\n parsedParticleSystem.autoAnimateLoop,\r\n parsedParticleSystem.autoAnimateSpeed || 1.0\r\n );\r\n }\r\n\r\n // Particle system\r\n particleSystem.startDelay = parsedParticleSystem.startDelay | 0;\r\n particleSystem.minAngularSpeed = parsedParticleSystem.minAngularSpeed;\r\n particleSystem.maxAngularSpeed = parsedParticleSystem.maxAngularSpeed;\r\n particleSystem.minSize = parsedParticleSystem.minSize;\r\n particleSystem.maxSize = parsedParticleSystem.maxSize;\r\n\r\n if (parsedParticleSystem.minScaleX) {\r\n particleSystem.minScaleX = parsedParticleSystem.minScaleX;\r\n particleSystem.maxScaleX = parsedParticleSystem.maxScaleX;\r\n particleSystem.minScaleY = parsedParticleSystem.minScaleY;\r\n particleSystem.maxScaleY = parsedParticleSystem.maxScaleY;\r\n }\r\n\r\n if (parsedParticleSystem.preWarmCycles !== undefined) {\r\n particleSystem.preWarmCycles = parsedParticleSystem.preWarmCycles;\r\n particleSystem.preWarmStepOffset = parsedParticleSystem.preWarmStepOffset;\r\n }\r\n\r\n if (parsedParticleSystem.minInitialRotation !== undefined) {\r\n particleSystem.minInitialRotation = parsedParticleSystem.minInitialRotation;\r\n particleSystem.maxInitialRotation = parsedParticleSystem.maxInitialRotation;\r\n }\r\n\r\n particleSystem.minLifeTime = parsedParticleSystem.minLifeTime;\r\n particleSystem.maxLifeTime = parsedParticleSystem.maxLifeTime;\r\n particleSystem.minEmitPower = parsedParticleSystem.minEmitPower;\r\n particleSystem.maxEmitPower = parsedParticleSystem.maxEmitPower;\r\n particleSystem.emitRate = parsedParticleSystem.emitRate;\r\n particleSystem.gravity = Vector3.FromArray(parsedParticleSystem.gravity);\r\n if (parsedParticleSystem.noiseStrength) {\r\n particleSystem.noiseStrength = Vector3.FromArray(parsedParticleSystem.noiseStrength);\r\n }\r\n particleSystem.color1 = Color4.FromArray(parsedParticleSystem.color1);\r\n particleSystem.color2 = Color4.FromArray(parsedParticleSystem.color2);\r\n particleSystem.colorDead = Color4.FromArray(parsedParticleSystem.colorDead);\r\n particleSystem.updateSpeed = parsedParticleSystem.updateSpeed;\r\n particleSystem.targetStopDuration = parsedParticleSystem.targetStopDuration;\r\n particleSystem.blendMode = parsedParticleSystem.blendMode;\r\n\r\n if (parsedParticleSystem.colorGradients) {\r\n for (const colorGradient of parsedParticleSystem.colorGradients) {\r\n particleSystem.addColorGradient(\r\n colorGradient.gradient,\r\n Color4.FromArray(colorGradient.color1),\r\n colorGradient.color2 ? Color4.FromArray(colorGradient.color2) : undefined\r\n );\r\n }\r\n }\r\n\r\n if (parsedParticleSystem.rampGradients) {\r\n for (const rampGradient of parsedParticleSystem.rampGradients) {\r\n particleSystem.addRampGradient(rampGradient.gradient, Color3.FromArray(rampGradient.color));\r\n }\r\n particleSystem.useRampGradients = parsedParticleSystem.useRampGradients;\r\n }\r\n\r\n if (parsedParticleSystem.colorRemapGradients) {\r\n for (const colorRemapGradient of parsedParticleSystem.colorRemapGradients) {\r\n particleSystem.addColorRemapGradient(\r\n colorRemapGradient.gradient,\r\n colorRemapGradient.factor1 !== undefined ? colorRemapGradient.factor1 : colorRemapGradient.factor,\r\n colorRemapGradient.factor2\r\n );\r\n }\r\n }\r\n\r\n if (parsedParticleSystem.alphaRemapGradients) {\r\n for (const alphaRemapGradient of parsedParticleSystem.alphaRemapGradients) {\r\n particleSystem.addAlphaRemapGradient(\r\n alphaRemapGradient.gradient,\r\n alphaRemapGradient.factor1 !== undefined ? alphaRemapGradient.factor1 : alphaRemapGradient.factor,\r\n alphaRemapGradient.factor2\r\n );\r\n }\r\n }\r\n\r\n if (parsedParticleSystem.sizeGradients) {\r\n for (const sizeGradient of parsedParticleSystem.sizeGradients) {\r\n particleSystem.addSizeGradient(sizeGradient.gradient, sizeGradient.factor1 !== undefined ? sizeGradient.factor1 : sizeGradient.factor, sizeGradient.factor2);\r\n }\r\n }\r\n\r\n if (parsedParticleSystem.angularSpeedGradients) {\r\n for (const angularSpeedGradient of parsedParticleSystem.angularSpeedGradients) {\r\n particleSystem.addAngularSpeedGradient(\r\n angularSpeedGradient.gradient,\r\n angularSpeedGradient.factor1 !== undefined ? angularSpeedGradient.factor1 : angularSpeedGradient.factor,\r\n angularSpeedGradient.factor2\r\n );\r\n }\r\n }\r\n\r\n if (parsedParticleSystem.velocityGradients) {\r\n for (const velocityGradient of parsedParticleSystem.velocityGradients) {\r\n particleSystem.addVelocityGradient(\r\n velocityGradient.gradient,\r\n velocityGradient.factor1 !== undefined ? velocityGradient.factor1 : velocityGradient.factor,\r\n velocityGradient.factor2\r\n );\r\n }\r\n }\r\n\r\n if (parsedParticleSystem.dragGradients) {\r\n for (const dragGradient of parsedParticleSystem.dragGradients) {\r\n particleSystem.addDragGradient(dragGradient.gradient, dragGradient.factor1 !== undefined ? dragGradient.factor1 : dragGradient.factor, dragGradient.factor2);\r\n }\r\n }\r\n\r\n if (parsedParticleSystem.emitRateGradients) {\r\n for (const emitRateGradient of parsedParticleSystem.emitRateGradients) {\r\n particleSystem.addEmitRateGradient(\r\n emitRateGradient.gradient,\r\n emitRateGradient.factor1 !== undefined ? emitRateGradient.factor1 : emitRateGradient.factor,\r\n emitRateGradient.factor2\r\n );\r\n }\r\n }\r\n\r\n if (parsedParticleSystem.startSizeGradients) {\r\n for (const startSizeGradient of parsedParticleSystem.startSizeGradients) {\r\n particleSystem.addStartSizeGradient(\r\n startSizeGradient.gradient,\r\n startSizeGradient.factor1 !== undefined ? startSizeGradient.factor1 : startSizeGradient.factor,\r\n startSizeGradient.factor2\r\n );\r\n }\r\n }\r\n\r\n if (parsedParticleSystem.lifeTimeGradients) {\r\n for (const lifeTimeGradient of parsedParticleSystem.lifeTimeGradients) {\r\n particleSystem.addLifeTimeGradient(\r\n lifeTimeGradient.gradient,\r\n lifeTimeGradient.factor1 !== undefined ? lifeTimeGradient.factor1 : lifeTimeGradient.factor,\r\n lifeTimeGradient.factor2\r\n );\r\n }\r\n }\r\n\r\n if (parsedParticleSystem.limitVelocityGradients) {\r\n for (const limitVelocityGradient of parsedParticleSystem.limitVelocityGradients) {\r\n particleSystem.addLimitVelocityGradient(\r\n limitVelocityGradient.gradient,\r\n limitVelocityGradient.factor1 !== undefined ? limitVelocityGradient.factor1 : limitVelocityGradient.factor,\r\n limitVelocityGradient.factor2\r\n );\r\n }\r\n particleSystem.limitVelocityDamping = parsedParticleSystem.limitVelocityDamping;\r\n }\r\n\r\n if (parsedParticleSystem.noiseTexture && scene) {\r\n const internalClass = GetClass(\"BABYLON.ProceduralTexture\");\r\n particleSystem.noiseTexture = internalClass.Parse(parsedParticleSystem.noiseTexture, scene, rootUrl);\r\n }\r\n\r\n // Emitter\r\n let emitterType: IParticleEmitterType;\r\n if (parsedParticleSystem.particleEmitterType) {\r\n switch (parsedParticleSystem.particleEmitterType.type) {\r\n case \"SphereParticleEmitter\":\r\n emitterType = new SphereParticleEmitter();\r\n break;\r\n case \"SphereDirectedParticleEmitter\":\r\n emitterType = new SphereDirectedParticleEmitter();\r\n break;\r\n case \"ConeEmitter\":\r\n case \"ConeParticleEmitter\":\r\n emitterType = new ConeParticleEmitter();\r\n break;\r\n case \"CylinderParticleEmitter\":\r\n emitterType = new CylinderParticleEmitter();\r\n break;\r\n case \"CylinderDirectedParticleEmitter\":\r\n emitterType = new CylinderDirectedParticleEmitter();\r\n break;\r\n case \"HemisphericParticleEmitter\":\r\n emitterType = new HemisphericParticleEmitter();\r\n break;\r\n case \"PointParticleEmitter\":\r\n emitterType = new PointParticleEmitter();\r\n break;\r\n case \"MeshParticleEmitter\":\r\n emitterType = new MeshParticleEmitter();\r\n break;\r\n case \"BoxEmitter\":\r\n case \"BoxParticleEmitter\":\r\n default:\r\n emitterType = new BoxParticleEmitter();\r\n break;\r\n }\r\n\r\n emitterType.parse(parsedParticleSystem.particleEmitterType, scene);\r\n } else {\r\n emitterType = new BoxParticleEmitter();\r\n emitterType.parse(parsedParticleSystem, scene);\r\n }\r\n particleSystem.particleEmitterType = emitterType;\r\n\r\n // Animation sheet\r\n particleSystem.startSpriteCellID = parsedParticleSystem.startSpriteCellID;\r\n particleSystem.endSpriteCellID = parsedParticleSystem.endSpriteCellID;\r\n particleSystem.spriteCellLoop = parsedParticleSystem.spriteCellLoop ?? true;\r\n particleSystem.spriteCellWidth = parsedParticleSystem.spriteCellWidth;\r\n particleSystem.spriteCellHeight = parsedParticleSystem.spriteCellHeight;\r\n particleSystem.spriteCellChangeSpeed = parsedParticleSystem.spriteCellChangeSpeed;\r\n particleSystem.spriteRandomStartCell = parsedParticleSystem.spriteRandomStartCell;\r\n\r\n particleSystem.disposeOnStop = parsedParticleSystem.disposeOnStop ?? false;\r\n particleSystem.manualEmitCount = parsedParticleSystem.manualEmitCount ?? -1;\r\n }\r\n\r\n /**\r\n * Parses a JSON object to create a particle system.\r\n * @param parsedParticleSystem The JSON object to parse\r\n * @param sceneOrEngine The scene or the engine to create the particle system in\r\n * @param rootUrl The root url to use to load external dependencies like texture\r\n * @param doNotStart Ignore the preventAutoStart attribute and does not start\r\n * @param capacity defines the system capacity (if null or undefined the sotred capacity will be used)\r\n * @returns the Parsed particle system\r\n */\r\n public static Parse(parsedParticleSystem: any, sceneOrEngine: Scene | ThinEngine, rootUrl: string, doNotStart = false, capacity?: number): ParticleSystem {\r\n const name = parsedParticleSystem.name;\r\n let custom: Nullable<Effect> = null;\r\n let program: any = null;\r\n let engine: ThinEngine;\r\n let scene: Nullable<Scene>;\r\n\r\n if (sceneOrEngine instanceof ThinEngine) {\r\n engine = sceneOrEngine;\r\n } else {\r\n scene = sceneOrEngine as Scene;\r\n engine = scene.getEngine();\r\n }\r\n\r\n if (parsedParticleSystem.customShader && (engine as any).createEffectForParticles) {\r\n program = parsedParticleSystem.customShader;\r\n const defines: string = program.shaderOptions.defines.length > 0 ? program.shaderOptions.defines.join(\"\\n\") : \"\";\r\n custom = (engine as any).createEffectForParticles(program.shaderPath.fragmentElement, program.shaderOptions.uniforms, program.shaderOptions.samplers, defines);\r\n }\r\n const particleSystem = new ParticleSystem(name, capacity || parsedParticleSystem.capacity, sceneOrEngine, custom, parsedParticleSystem.isAnimationSheetEnabled);\r\n particleSystem.customShader = program;\r\n particleSystem._rootUrl = rootUrl;\r\n\r\n if (parsedParticleSystem.id) {\r\n particleSystem.id = parsedParticleSystem.id;\r\n }\r\n\r\n // SubEmitters\r\n if (parsedParticleSystem.subEmitters) {\r\n particleSystem.subEmitters = [];\r\n for (const cell of parsedParticleSystem.subEmitters) {\r\n const cellArray = [];\r\n for (const sub of cell) {\r\n cellArray.push(SubEmitter.Parse(sub, sceneOrEngine, rootUrl));\r\n }\r\n\r\n particleSystem.subEmitters.push(cellArray);\r\n }\r\n }\r\n\r\n ParticleSystem._Parse(parsedParticleSystem, particleSystem, sceneOrEngine, rootUrl);\r\n\r\n if (parsedParticleSystem.textureMask) {\r\n particleSystem.textureMask = Color4.FromArray(parsedParticleSystem.textureMask);\r\n }\r\n\r\n // Auto start\r\n if (parsedParticleSystem.preventAutoStart) {\r\n particleSystem.preventAutoStart = parsedParticleSystem.preventAutoStart;\r\n }\r\n\r\n if (!doNotStart && !particleSystem.preventAutoStart) {\r\n particleSystem.start();\r\n }\r\n\r\n return particleSystem;\r\n }\r\n}\r\n\r\nSubEmitter._ParseParticleSystem = ParticleSystem.Parse;\r\n"]}
|
|
1
|
+
{"version":3,"file":"particleSystem.js","sourceRoot":"","sources":["../../../../../lts/core/generated/Particles/particleSystem.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable import/no-internal-modules */\r\nimport type { Immutable, Nullable } from \"../types\";\r\nimport { FactorGradient, ColorGradient, Color3Gradient, GradientHelper } from \"../Misc/gradients\";\r\nimport type { Observer } from \"../Misc/observable\";\r\nimport { Observable } from \"../Misc/observable\";\r\nimport { Vector3, Matrix, TmpVectors, Vector4 } from \"../Maths/math.vector\";\r\nimport { Scalar } from \"../Maths/math.scalar\";\r\nimport { VertexBuffer, Buffer } from \"../Buffers/buffer\";\r\n\r\nimport type { Effect } from \"../Materials/effect\";\r\nimport { ImageProcessingConfiguration } from \"../Materials/imageProcessingConfiguration\";\r\nimport { RawTexture } from \"../Materials/Textures/rawTexture\";\r\nimport { EngineStore } from \"../Engines/engineStore\";\r\nimport type { IDisposable } from \"../scene\";\r\nimport type { IParticleEmitterType } from \"../Particles/EmitterTypes/index\";\r\nimport {\r\n BoxParticleEmitter,\r\n HemisphericParticleEmitter,\r\n SphereParticleEmitter,\r\n SphereDirectedParticleEmitter,\r\n CylinderParticleEmitter,\r\n ConeParticleEmitter,\r\n PointParticleEmitter,\r\n MeshParticleEmitter,\r\n CylinderDirectedParticleEmitter,\r\n} from \"../Particles/EmitterTypes/index\";\r\nimport type { IParticleSystem } from \"./IParticleSystem\";\r\nimport { BaseParticleSystem } from \"./baseParticleSystem\";\r\nimport { Particle } from \"./particle\";\r\nimport { SubEmitter, SubEmitterType } from \"./subEmitter\";\r\nimport { Constants } from \"../Engines/constants\";\r\nimport { SerializationHelper } from \"../Misc/decorators\";\r\nimport { GetClass } from \"../Misc/typeStore\";\r\nimport type { IAnimatable } from \"../Animations/animatable.interface\";\r\nimport { DrawWrapper } from \"../Materials/drawWrapper\";\r\n\r\nimport \"../Shaders/particles.fragment\";\r\nimport \"../Shaders/particles.vertex\";\r\nimport type { DataBuffer } from \"../Buffers/dataBuffer\";\r\nimport { Color4, Color3, TmpColors } from \"../Maths/math.color\";\r\nimport type { ISize } from \"../Maths/math.size\";\r\nimport type { BaseTexture } from \"../Materials/Textures/baseTexture\";\r\nimport { ThinEngine } from \"../Engines/thinEngine\";\r\nimport { ThinMaterialHelper } from \"../Materials/thinMaterialHelper\";\r\nimport { MaterialHelper } from \"../Materials/materialHelper\";\r\n\r\nimport \"../Engines/Extensions/engine.alpha\";\r\n\r\ndeclare type AbstractMesh = import(\"../Meshes/abstractMesh\").AbstractMesh;\r\ndeclare type ProceduralTexture = import(\"../Materials/Textures/Procedurals/proceduralTexture\").ProceduralTexture;\r\ndeclare type Scene = import(\"../scene\").Scene;\r\ndeclare type Engine = import(\"../Engines/engine\").Engine;\r\n\r\n/**\r\n * This represents a particle system in Babylon.\r\n * Particles are often small sprites used to simulate hard-to-reproduce phenomena like fire, smoke, water, or abstract visual effects like magic glitter and faery dust.\r\n * Particles can take different shapes while emitted like box, sphere, cone or you can write your custom function.\r\n * @example https://doc.babylonjs.com/babylon101/particles\r\n */\r\nexport class ParticleSystem extends BaseParticleSystem implements IDisposable, IAnimatable, IParticleSystem {\r\n /**\r\n * Billboard mode will only apply to Y axis\r\n */\r\n public static readonly BILLBOARDMODE_Y = Constants.PARTICLES_BILLBOARDMODE_Y;\r\n /**\r\n * Billboard mode will apply to all axes\r\n */\r\n public static readonly BILLBOARDMODE_ALL = Constants.PARTICLES_BILLBOARDMODE_ALL;\r\n /**\r\n * Special billboard mode where the particle will be biilboard to the camera but rotated to align with direction\r\n */\r\n public static readonly BILLBOARDMODE_STRETCHED = Constants.PARTICLES_BILLBOARDMODE_STRETCHED;\r\n\r\n /**\r\n * This function can be defined to provide custom update for active particles.\r\n * This function will be called instead of regular update (age, position, color, etc.).\r\n * Do not forget that this function will be called on every frame so try to keep it simple and fast :)\r\n */\r\n public updateFunction: (particles: Particle[]) => void;\r\n\r\n private _emitterWorldMatrix: Matrix;\r\n private _emitterInverseWorldMatrix: Matrix = Matrix.Identity();\r\n\r\n /**\r\n * This function can be defined to specify initial direction for every new particle.\r\n * It by default use the emitterType defined function\r\n */\r\n public startDirectionFunction: (worldMatrix: Matrix, directionToUpdate: Vector3, particle: Particle, isLocal: boolean) => void;\r\n /**\r\n * This function can be defined to specify initial position for every new particle.\r\n * It by default use the emitterType defined function\r\n */\r\n public startPositionFunction: (worldMatrix: Matrix, positionToUpdate: Vector3, particle: Particle, isLocal: boolean) => void;\r\n\r\n /**\r\n * @internal\r\n */\r\n public _inheritedVelocityOffset = new Vector3();\r\n /**\r\n * An event triggered when the system is disposed\r\n */\r\n public onDisposeObservable = new Observable<IParticleSystem>();\r\n /**\r\n * An event triggered when the system is stopped\r\n */\r\n public onStoppedObservable = new Observable<IParticleSystem>();\r\n\r\n private _onDisposeObserver: Nullable<Observer<IParticleSystem>>;\r\n /**\r\n * Sets a callback that will be triggered when the system is disposed\r\n */\r\n public set onDispose(callback: () => void) {\r\n if (this._onDisposeObserver) {\r\n this.onDisposeObservable.remove(this._onDisposeObserver);\r\n }\r\n this._onDisposeObserver = this.onDisposeObservable.add(callback);\r\n }\r\n\r\n private _particles = new Array<Particle>();\r\n private _epsilon: number;\r\n private _capacity: number;\r\n private _stockParticles = new Array<Particle>();\r\n private _newPartsExcess = 0;\r\n private _vertexData: Float32Array;\r\n private _vertexBuffer: Nullable<Buffer>;\r\n private _vertexBuffers: { [key: string]: VertexBuffer } = {};\r\n private _spriteBuffer: Nullable<Buffer>;\r\n private _indexBuffer: Nullable<DataBuffer>;\r\n private _drawWrappers: DrawWrapper[][]; // first index is render pass id, second index is blend mode\r\n private _customWrappers: { [blendMode: number]: Nullable<DrawWrapper> };\r\n private _scaledColorStep = new Color4(0, 0, 0, 0);\r\n private _colorDiff = new Color4(0, 0, 0, 0);\r\n private _scaledDirection = Vector3.Zero();\r\n private _scaledGravity = Vector3.Zero();\r\n private _currentRenderId = -1;\r\n private _alive: boolean;\r\n private _useInstancing = false;\r\n private _vertexArrayObject: Nullable<WebGLVertexArrayObject>;\r\n\r\n private _started = false;\r\n private _stopped = false;\r\n private _actualFrame = 0;\r\n private _scaledUpdateSpeed: number;\r\n private _vertexBufferSize: number;\r\n\r\n /** @internal */\r\n public _currentEmitRateGradient: Nullable<FactorGradient>;\r\n /** @internal */\r\n public _currentEmitRate1 = 0;\r\n /** @internal */\r\n public _currentEmitRate2 = 0;\r\n\r\n /** @internal */\r\n public _currentStartSizeGradient: Nullable<FactorGradient>;\r\n /** @internal */\r\n public _currentStartSize1 = 0;\r\n /** @internal */\r\n public _currentStartSize2 = 0;\r\n\r\n private readonly _rawTextureWidth = 256;\r\n private _rampGradientsTexture: Nullable<RawTexture>;\r\n private _useRampGradients = false;\r\n\r\n /** Gets or sets a matrix to use to compute projection */\r\n public defaultProjectionMatrix: Matrix;\r\n\r\n /** Gets or sets a matrix to use to compute view */\r\n public defaultViewMatrix: Matrix;\r\n\r\n /** Gets or sets a boolean indicating that ramp gradients must be used\r\n * @see https://doc.babylonjs.com/babylon101/particles#ramp-gradients\r\n */\r\n public get useRampGradients(): boolean {\r\n return this._useRampGradients;\r\n }\r\n\r\n public set useRampGradients(value: boolean) {\r\n if (this._useRampGradients === value) {\r\n return;\r\n }\r\n\r\n this._useRampGradients = value;\r\n\r\n this._resetEffect();\r\n }\r\n\r\n // Sub-emitters\r\n /**\r\n * The Sub-emitters templates that will be used to generate the sub particle system to be associated with the system, this property is used by the root particle system only.\r\n * When a particle is spawned, an array will be chosen at random and all the emitters in that array will be attached to the particle. (Default: [])\r\n */\r\n public subEmitters: Array<ParticleSystem | SubEmitter | Array<SubEmitter>>;\r\n // the subEmitters field above converted to a constant type\r\n private _subEmitters: Array<Array<SubEmitter>>;\r\n /**\r\n * @internal\r\n * If the particle systems emitter should be disposed when the particle system is disposed\r\n */\r\n public _disposeEmitterOnDispose = false;\r\n /**\r\n * The current active Sub-systems, this property is used by the root particle system only.\r\n */\r\n public activeSubSystems: Array<ParticleSystem>;\r\n\r\n /**\r\n * Specifies if the particles are updated in emitter local space or world space\r\n */\r\n public isLocal = false;\r\n\r\n private _rootParticleSystem: Nullable<ParticleSystem>;\r\n //end of Sub-emitter\r\n\r\n /**\r\n * Gets the current list of active particles\r\n */\r\n public get particles(): Particle[] {\r\n return this._particles;\r\n }\r\n\r\n /**\r\n * Gets the number of particles active at the same time.\r\n * @returns The number of active particles.\r\n */\r\n public getActiveCount() {\r\n return this._particles.length;\r\n }\r\n\r\n /**\r\n * Returns the string \"ParticleSystem\"\r\n * @returns a string containing the class name\r\n */\r\n public getClassName(): string {\r\n return \"ParticleSystem\";\r\n }\r\n\r\n /**\r\n * Gets a boolean indicating that the system is stopping\r\n * @returns true if the system is currently stopping\r\n */\r\n public isStopping() {\r\n return this._stopped && this.isAlive();\r\n }\r\n\r\n /**\r\n * Gets the custom effect used to render the particles\r\n * @param blendMode Blend mode for which the effect should be retrieved\r\n * @returns The effect\r\n */\r\n public getCustomEffect(blendMode: number = 0): Nullable<Effect> {\r\n return this._customWrappers[blendMode]?.effect ?? this._customWrappers[0]!.effect;\r\n }\r\n\r\n private _getCustomDrawWrapper(blendMode: number = 0): Nullable<DrawWrapper> {\r\n return this._customWrappers[blendMode] ?? this._customWrappers[0];\r\n }\r\n\r\n /**\r\n * Sets the custom effect used to render the particles\r\n * @param effect The effect to set\r\n * @param blendMode Blend mode for which the effect should be set\r\n */\r\n public setCustomEffect(effect: Nullable<Effect>, blendMode: number = 0) {\r\n this._customWrappers[blendMode] = new DrawWrapper(this._engine);\r\n this._customWrappers[blendMode]!.effect = effect;\r\n if (this._customWrappers[blendMode]!.drawContext) {\r\n this._customWrappers[blendMode]!.drawContext!.useInstancing = this._useInstancing;\r\n }\r\n }\r\n\r\n /** @internal */\r\n private _onBeforeDrawParticlesObservable: Nullable<Observable<Nullable<Effect>>> = null;\r\n\r\n /**\r\n * Observable that will be called just before the particles are drawn\r\n */\r\n public get onBeforeDrawParticlesObservable(): Observable<Nullable<Effect>> {\r\n if (!this._onBeforeDrawParticlesObservable) {\r\n this._onBeforeDrawParticlesObservable = new Observable<Nullable<Effect>>();\r\n }\r\n\r\n return this._onBeforeDrawParticlesObservable;\r\n }\r\n\r\n /**\r\n * Gets the name of the particle vertex shader\r\n */\r\n public get vertexShaderName(): string {\r\n return \"particles\";\r\n }\r\n\r\n /**\r\n * Gets the vertex buffers used by the particle system\r\n */\r\n public get vertexBuffers(): Immutable<{ [key: string]: VertexBuffer }> {\r\n return this._vertexBuffers;\r\n }\r\n\r\n /**\r\n * Gets the index buffer used by the particle system (or null if no index buffer is used (if _useInstancing=true))\r\n */\r\n public get indexBuffer(): Nullable<DataBuffer> {\r\n return this._indexBuffer;\r\n }\r\n\r\n /**\r\n * Instantiates a particle system.\r\n * Particles are often small sprites used to simulate hard-to-reproduce phenomena like fire, smoke, water, or abstract visual effects like magic glitter and faery dust.\r\n * @param name The name of the particle system\r\n * @param capacity The max number of particles alive at the same time\r\n * @param sceneOrEngine The scene the particle system belongs to or the engine to use if no scene\r\n * @param customEffect a custom effect used to change the way particles are rendered by default\r\n * @param isAnimationSheetEnabled Must be true if using a spritesheet to animate the particles texture\r\n * @param epsilon Offset used to render the particles\r\n */\r\n constructor(\r\n name: string,\r\n capacity: number,\r\n sceneOrEngine: Scene | ThinEngine,\r\n customEffect: Nullable<Effect> = null,\r\n isAnimationSheetEnabled: boolean = false,\r\n epsilon: number = 0.01\r\n ) {\r\n super(name);\r\n\r\n this._capacity = capacity;\r\n\r\n this._epsilon = epsilon;\r\n this._isAnimationSheetEnabled = isAnimationSheetEnabled;\r\n\r\n if (!sceneOrEngine || sceneOrEngine.getClassName() === \"Scene\") {\r\n this._scene = (sceneOrEngine as Scene) || EngineStore.LastCreatedScene;\r\n this._engine = this._scene.getEngine();\r\n this.uniqueId = this._scene.getUniqueId();\r\n this._scene.particleSystems.push(this);\r\n } else {\r\n this._engine = sceneOrEngine as ThinEngine;\r\n this.defaultProjectionMatrix = Matrix.PerspectiveFovLH(0.8, 1, 0.1, 100, this._engine.isNDCHalfZRange);\r\n }\r\n\r\n if (this._engine.getCaps().vertexArrayObject) {\r\n this._vertexArrayObject = null;\r\n }\r\n\r\n // Setup the default processing configuration to the scene.\r\n this._attachImageProcessingConfiguration(null);\r\n\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n this._customWrappers = { 0: new DrawWrapper(this._engine) };\r\n this._customWrappers[0]!.effect = customEffect;\r\n\r\n this._drawWrappers = [];\r\n this._useInstancing = this._engine.getCaps().instancedArrays;\r\n\r\n this._createIndexBuffer();\r\n this._createVertexBuffers();\r\n\r\n // Default emitter type\r\n this.particleEmitterType = new BoxParticleEmitter();\r\n let noiseTextureData: Nullable<Uint8Array> = null;\r\n\r\n // Update\r\n this.updateFunction = (particles: Particle[]): void => {\r\n let noiseTextureSize: Nullable<ISize> = null;\r\n\r\n if (this.noiseTexture) {\r\n // We need to get texture data back to CPU\r\n noiseTextureSize = this.noiseTexture.getSize();\r\n this.noiseTexture.getContent()?.then((data) => {\r\n noiseTextureData = data as Uint8Array;\r\n });\r\n }\r\n\r\n for (let index = 0; index < particles.length; index++) {\r\n const particle = particles[index];\r\n\r\n let scaledUpdateSpeed = this._scaledUpdateSpeed;\r\n const previousAge = particle.age;\r\n particle.age += scaledUpdateSpeed;\r\n\r\n // Evaluate step to death\r\n if (particle.age > particle.lifeTime) {\r\n const diff = particle.age - previousAge;\r\n const oldDiff = particle.lifeTime - previousAge;\r\n\r\n scaledUpdateSpeed = (oldDiff * scaledUpdateSpeed) / diff;\r\n\r\n particle.age = particle.lifeTime;\r\n }\r\n\r\n const ratio = particle.age / particle.lifeTime;\r\n\r\n // Color\r\n if (this._colorGradients && this._colorGradients.length > 0) {\r\n GradientHelper.GetCurrentGradient(ratio, this._colorGradients, (currentGradient, nextGradient, scale) => {\r\n if (currentGradient !== particle._currentColorGradient) {\r\n particle._currentColor1.copyFrom(particle._currentColor2);\r\n (<ColorGradient>nextGradient).getColorToRef(particle._currentColor2);\r\n particle._currentColorGradient = <ColorGradient>currentGradient;\r\n }\r\n Color4.LerpToRef(particle._currentColor1, particle._currentColor2, scale, particle.color);\r\n });\r\n } else {\r\n particle.colorStep.scaleToRef(scaledUpdateSpeed, this._scaledColorStep);\r\n particle.color.addInPlace(this._scaledColorStep);\r\n\r\n if (particle.color.a < 0) {\r\n particle.color.a = 0;\r\n }\r\n }\r\n\r\n // Angular speed\r\n if (this._angularSpeedGradients && this._angularSpeedGradients.length > 0) {\r\n GradientHelper.GetCurrentGradient(ratio, this._angularSpeedGradients, (currentGradient, nextGradient, scale) => {\r\n if (currentGradient !== particle._currentAngularSpeedGradient) {\r\n particle._currentAngularSpeed1 = particle._currentAngularSpeed2;\r\n particle._currentAngularSpeed2 = (<FactorGradient>nextGradient).getFactor();\r\n particle._currentAngularSpeedGradient = <FactorGradient>currentGradient;\r\n }\r\n particle.angularSpeed = Scalar.Lerp(particle._currentAngularSpeed1, particle._currentAngularSpeed2, scale);\r\n });\r\n }\r\n particle.angle += particle.angularSpeed * scaledUpdateSpeed;\r\n\r\n // Direction\r\n let directionScale = scaledUpdateSpeed;\r\n\r\n /// Velocity\r\n if (this._velocityGradients && this._velocityGradients.length > 0) {\r\n GradientHelper.GetCurrentGradient(ratio, this._velocityGradients, (currentGradient, nextGradient, scale) => {\r\n if (currentGradient !== particle._currentVelocityGradient) {\r\n particle._currentVelocity1 = particle._currentVelocity2;\r\n particle._currentVelocity2 = (<FactorGradient>nextGradient).getFactor();\r\n particle._currentVelocityGradient = <FactorGradient>currentGradient;\r\n }\r\n directionScale *= Scalar.Lerp(particle._currentVelocity1, particle._currentVelocity2, scale);\r\n });\r\n }\r\n\r\n particle.direction.scaleToRef(directionScale, this._scaledDirection);\r\n\r\n /// Limit velocity\r\n if (this._limitVelocityGradients && this._limitVelocityGradients.length > 0) {\r\n GradientHelper.GetCurrentGradient(ratio, this._limitVelocityGradients, (currentGradient, nextGradient, scale) => {\r\n if (currentGradient !== particle._currentLimitVelocityGradient) {\r\n particle._currentLimitVelocity1 = particle._currentLimitVelocity2;\r\n particle._currentLimitVelocity2 = (<FactorGradient>nextGradient).getFactor();\r\n particle._currentLimitVelocityGradient = <FactorGradient>currentGradient;\r\n }\r\n\r\n const limitVelocity = Scalar.Lerp(particle._currentLimitVelocity1, particle._currentLimitVelocity2, scale);\r\n const currentVelocity = particle.direction.length();\r\n\r\n if (currentVelocity > limitVelocity) {\r\n particle.direction.scaleInPlace(this.limitVelocityDamping);\r\n }\r\n });\r\n }\r\n\r\n /// Drag\r\n if (this._dragGradients && this._dragGradients.length > 0) {\r\n GradientHelper.GetCurrentGradient(ratio, this._dragGradients, (currentGradient, nextGradient, scale) => {\r\n if (currentGradient !== particle._currentDragGradient) {\r\n particle._currentDrag1 = particle._currentDrag2;\r\n particle._currentDrag2 = (<FactorGradient>nextGradient).getFactor();\r\n particle._currentDragGradient = <FactorGradient>currentGradient;\r\n }\r\n\r\n const drag = Scalar.Lerp(particle._currentDrag1, particle._currentDrag2, scale);\r\n\r\n this._scaledDirection.scaleInPlace(1.0 - drag);\r\n });\r\n }\r\n\r\n if (this.isLocal && particle._localPosition) {\r\n particle._localPosition!.addInPlace(this._scaledDirection);\r\n Vector3.TransformCoordinatesToRef(particle._localPosition!, this._emitterWorldMatrix, particle.position);\r\n } else {\r\n particle.position.addInPlace(this._scaledDirection);\r\n }\r\n\r\n // Noise\r\n if (noiseTextureData && noiseTextureSize && particle._randomNoiseCoordinates1) {\r\n const fetchedColorR = this._fetchR(\r\n particle._randomNoiseCoordinates1.x,\r\n particle._randomNoiseCoordinates1.y,\r\n noiseTextureSize.width,\r\n noiseTextureSize.height,\r\n noiseTextureData\r\n );\r\n const fetchedColorG = this._fetchR(\r\n particle._randomNoiseCoordinates1.z,\r\n particle._randomNoiseCoordinates2.x,\r\n noiseTextureSize.width,\r\n noiseTextureSize.height,\r\n noiseTextureData\r\n );\r\n const fetchedColorB = this._fetchR(\r\n particle._randomNoiseCoordinates2.y,\r\n particle._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(\r\n (2 * fetchedColorR - 1) * this.noiseStrength.x,\r\n (2 * fetchedColorG - 1) * this.noiseStrength.y,\r\n (2 * fetchedColorB - 1) * this.noiseStrength.z\r\n );\r\n\r\n force.scaleToRef(scaledUpdateSpeed, scaledForce);\r\n particle.direction.addInPlace(scaledForce);\r\n }\r\n\r\n // Gravity\r\n this.gravity.scaleToRef(scaledUpdateSpeed, this._scaledGravity);\r\n particle.direction.addInPlace(this._scaledGravity);\r\n\r\n // Size\r\n if (this._sizeGradients && this._sizeGradients.length > 0) {\r\n GradientHelper.GetCurrentGradient(ratio, this._sizeGradients, (currentGradient, nextGradient, scale) => {\r\n if (currentGradient !== particle._currentSizeGradient) {\r\n particle._currentSize1 = particle._currentSize2;\r\n particle._currentSize2 = (<FactorGradient>nextGradient).getFactor();\r\n particle._currentSizeGradient = <FactorGradient>currentGradient;\r\n }\r\n particle.size = Scalar.Lerp(particle._currentSize1, particle._currentSize2, scale);\r\n });\r\n }\r\n\r\n // Remap data\r\n if (this._useRampGradients) {\r\n if (this._colorRemapGradients && this._colorRemapGradients.length > 0) {\r\n GradientHelper.GetCurrentGradient(ratio, this._colorRemapGradients, (currentGradient, nextGradient, scale) => {\r\n const min = Scalar.Lerp((<FactorGradient>currentGradient).factor1, (<FactorGradient>nextGradient).factor1, scale);\r\n const max = Scalar.Lerp((<FactorGradient>currentGradient).factor2!, (<FactorGradient>nextGradient).factor2!, scale);\r\n\r\n particle.remapData.x = min;\r\n particle.remapData.y = max - min;\r\n });\r\n }\r\n\r\n if (this._alphaRemapGradients && this._alphaRemapGradients.length > 0) {\r\n GradientHelper.GetCurrentGradient(ratio, this._alphaRemapGradients, (currentGradient, nextGradient, scale) => {\r\n const min = Scalar.Lerp((<FactorGradient>currentGradient).factor1, (<FactorGradient>nextGradient).factor1, scale);\r\n const max = Scalar.Lerp((<FactorGradient>currentGradient).factor2!, (<FactorGradient>nextGradient).factor2!, scale);\r\n\r\n particle.remapData.z = min;\r\n particle.remapData.w = max - min;\r\n });\r\n }\r\n }\r\n\r\n if (this._isAnimationSheetEnabled) {\r\n particle.updateCellIndex();\r\n }\r\n\r\n // Update the position of the attached sub-emitters to match their attached particle\r\n particle._inheritParticleInfoToSubEmitters();\r\n\r\n if (particle.age >= particle.lifeTime) {\r\n // Recycle by swapping with last particle\r\n this._emitFromParticle(particle);\r\n if (particle._attachedSubEmitters) {\r\n particle._attachedSubEmitters.forEach((subEmitter) => {\r\n subEmitter.particleSystem.disposeOnStop = true;\r\n subEmitter.particleSystem.stop();\r\n });\r\n particle._attachedSubEmitters = null;\r\n }\r\n this.recycleParticle(particle);\r\n index--;\r\n continue;\r\n }\r\n }\r\n };\r\n }\r\n\r\n private _addFactorGradient(factorGradients: FactorGradient[], gradient: number, factor: number, factor2?: number) {\r\n const newGradient = new FactorGradient(gradient, factor, factor2);\r\n factorGradients.push(newGradient);\r\n\r\n factorGradients.sort((a, b) => {\r\n if (a.gradient < b.gradient) {\r\n return -1;\r\n } else if (a.gradient > b.gradient) {\r\n return 1;\r\n }\r\n\r\n return 0;\r\n });\r\n }\r\n\r\n private _removeFactorGradient(factorGradients: Nullable<FactorGradient[]>, gradient: number) {\r\n if (!factorGradients) {\r\n return;\r\n }\r\n\r\n let index = 0;\r\n for (const factorGradient of factorGradients) {\r\n if (factorGradient.gradient === gradient) {\r\n factorGradients.splice(index, 1);\r\n break;\r\n }\r\n index++;\r\n }\r\n }\r\n\r\n /**\r\n * Adds a new life time gradient\r\n * @param gradient defines the gradient to use (between 0 and 1)\r\n * @param factor defines the life time factor to affect to the specified gradient\r\n * @param factor2 defines an additional factor used to define a range ([factor, factor2]) with main value to pick the final value from\r\n * @returns the current particle system\r\n */\r\n public addLifeTimeGradient(gradient: number, factor: number, factor2?: number): IParticleSystem {\r\n if (!this._lifeTimeGradients) {\r\n this._lifeTimeGradients = [];\r\n }\r\n\r\n this._addFactorGradient(this._lifeTimeGradients, gradient, factor, factor2);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Remove a specific life time gradient\r\n * @param gradient defines the gradient to remove\r\n * @returns the current particle system\r\n */\r\n public removeLifeTimeGradient(gradient: number): IParticleSystem {\r\n this._removeFactorGradient(this._lifeTimeGradients, gradient);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Adds a new size gradient\r\n * @param gradient defines the gradient to use (between 0 and 1)\r\n * @param factor defines the size factor to affect to the specified gradient\r\n * @param factor2 defines an additional factor used to define a range ([factor, factor2]) with main value to pick the final value from\r\n * @returns the current particle system\r\n */\r\n public addSizeGradient(gradient: number, factor: number, factor2?: number): IParticleSystem {\r\n if (!this._sizeGradients) {\r\n this._sizeGradients = [];\r\n }\r\n\r\n this._addFactorGradient(this._sizeGradients, gradient, factor, factor2);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Remove a specific size gradient\r\n * @param gradient defines the gradient to remove\r\n * @returns the current particle system\r\n */\r\n public removeSizeGradient(gradient: number): IParticleSystem {\r\n this._removeFactorGradient(this._sizeGradients, gradient);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Adds a new color remap gradient\r\n * @param gradient defines the gradient to use (between 0 and 1)\r\n * @param min defines the color remap minimal range\r\n * @param max defines the color remap maximal range\r\n * @returns the current particle system\r\n */\r\n public addColorRemapGradient(gradient: number, min: number, max: number): IParticleSystem {\r\n if (!this._colorRemapGradients) {\r\n this._colorRemapGradients = [];\r\n }\r\n\r\n this._addFactorGradient(this._colorRemapGradients, gradient, min, max);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Remove a specific color remap gradient\r\n * @param gradient defines the gradient to remove\r\n * @returns the current particle system\r\n */\r\n public removeColorRemapGradient(gradient: number): IParticleSystem {\r\n this._removeFactorGradient(this._colorRemapGradients, gradient);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Adds a new alpha remap gradient\r\n * @param gradient defines the gradient to use (between 0 and 1)\r\n * @param min defines the alpha remap minimal range\r\n * @param max defines the alpha remap maximal range\r\n * @returns the current particle system\r\n */\r\n public addAlphaRemapGradient(gradient: number, min: number, max: number): IParticleSystem {\r\n if (!this._alphaRemapGradients) {\r\n this._alphaRemapGradients = [];\r\n }\r\n\r\n this._addFactorGradient(this._alphaRemapGradients, gradient, min, max);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Remove a specific alpha remap gradient\r\n * @param gradient defines the gradient to remove\r\n * @returns the current particle system\r\n */\r\n public removeAlphaRemapGradient(gradient: number): IParticleSystem {\r\n this._removeFactorGradient(this._alphaRemapGradients, gradient);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Adds a new angular speed gradient\r\n * @param gradient defines the gradient to use (between 0 and 1)\r\n * @param factor defines the angular speed to affect to the specified gradient\r\n * @param factor2 defines an additional factor used to define a range ([factor, factor2]) with main value to pick the final value from\r\n * @returns the current particle system\r\n */\r\n public addAngularSpeedGradient(gradient: number, factor: number, factor2?: number): IParticleSystem {\r\n if (!this._angularSpeedGradients) {\r\n this._angularSpeedGradients = [];\r\n }\r\n\r\n this._addFactorGradient(this._angularSpeedGradients, gradient, factor, factor2);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Remove a specific angular speed gradient\r\n * @param gradient defines the gradient to remove\r\n * @returns the current particle system\r\n */\r\n public removeAngularSpeedGradient(gradient: number): IParticleSystem {\r\n this._removeFactorGradient(this._angularSpeedGradients, gradient);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Adds a new velocity gradient\r\n * @param gradient defines the gradient to use (between 0 and 1)\r\n * @param factor defines the velocity to affect to the specified gradient\r\n * @param factor2 defines an additional factor used to define a range ([factor, factor2]) with main value to pick the final value from\r\n * @returns the current particle system\r\n */\r\n public addVelocityGradient(gradient: number, factor: number, factor2?: number): IParticleSystem {\r\n if (!this._velocityGradients) {\r\n this._velocityGradients = [];\r\n }\r\n\r\n this._addFactorGradient(this._velocityGradients, gradient, factor, factor2);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Remove a specific velocity gradient\r\n * @param gradient defines the gradient to remove\r\n * @returns the current particle system\r\n */\r\n public removeVelocityGradient(gradient: number): IParticleSystem {\r\n this._removeFactorGradient(this._velocityGradients, gradient);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Adds a new limit velocity gradient\r\n * @param gradient defines the gradient to use (between 0 and 1)\r\n * @param factor defines the limit velocity value to affect to the specified gradient\r\n * @param factor2 defines an additional factor used to define a range ([factor, factor2]) with main value to pick the final value from\r\n * @returns the current particle system\r\n */\r\n public addLimitVelocityGradient(gradient: number, factor: number, factor2?: number): IParticleSystem {\r\n if (!this._limitVelocityGradients) {\r\n this._limitVelocityGradients = [];\r\n }\r\n\r\n this._addFactorGradient(this._limitVelocityGradients, gradient, factor, factor2);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Remove a specific limit velocity gradient\r\n * @param gradient defines the gradient to remove\r\n * @returns the current particle system\r\n */\r\n public removeLimitVelocityGradient(gradient: number): IParticleSystem {\r\n this._removeFactorGradient(this._limitVelocityGradients, gradient);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Adds a new drag gradient\r\n * @param gradient defines the gradient to use (between 0 and 1)\r\n * @param factor defines the drag value to affect to the specified gradient\r\n * @param factor2 defines an additional factor used to define a range ([factor, factor2]) with main value to pick the final value from\r\n * @returns the current particle system\r\n */\r\n public addDragGradient(gradient: number, factor: number, factor2?: number): IParticleSystem {\r\n if (!this._dragGradients) {\r\n this._dragGradients = [];\r\n }\r\n\r\n this._addFactorGradient(this._dragGradients, gradient, factor, factor2);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Remove a specific drag gradient\r\n * @param gradient defines the gradient to remove\r\n * @returns the current particle system\r\n */\r\n public removeDragGradient(gradient: number): IParticleSystem {\r\n this._removeFactorGradient(this._dragGradients, gradient);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Adds a new emit rate gradient (please note that this will only work if you set the targetStopDuration property)\r\n * @param gradient defines the gradient to use (between 0 and 1)\r\n * @param factor defines the emit rate value to affect to the specified gradient\r\n * @param factor2 defines an additional factor used to define a range ([factor, factor2]) with main value to pick the final value from\r\n * @returns the current particle system\r\n */\r\n public addEmitRateGradient(gradient: number, factor: number, factor2?: number): IParticleSystem {\r\n if (!this._emitRateGradients) {\r\n this._emitRateGradients = [];\r\n }\r\n\r\n this._addFactorGradient(this._emitRateGradients, gradient, factor, factor2);\r\n return this;\r\n }\r\n\r\n /**\r\n * Remove a specific emit rate gradient\r\n * @param gradient defines the gradient to remove\r\n * @returns the current particle system\r\n */\r\n public removeEmitRateGradient(gradient: number): IParticleSystem {\r\n this._removeFactorGradient(this._emitRateGradients, gradient);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Adds a new start size gradient (please note that this will only work if you set the targetStopDuration property)\r\n * @param gradient defines the gradient to use (between 0 and 1)\r\n * @param factor defines the start size value to affect to the specified gradient\r\n * @param factor2 defines an additional factor used to define a range ([factor, factor2]) with main value to pick the final value from\r\n * @returns the current particle system\r\n */\r\n public addStartSizeGradient(gradient: number, factor: number, factor2?: number): IParticleSystem {\r\n if (!this._startSizeGradients) {\r\n this._startSizeGradients = [];\r\n }\r\n\r\n this._addFactorGradient(this._startSizeGradients, gradient, factor, factor2);\r\n return this;\r\n }\r\n\r\n /**\r\n * Remove a specific start size gradient\r\n * @param gradient defines the gradient to remove\r\n * @returns the current particle system\r\n */\r\n public removeStartSizeGradient(gradient: number): IParticleSystem {\r\n this._removeFactorGradient(this._startSizeGradients, gradient);\r\n\r\n return this;\r\n }\r\n\r\n private _createRampGradientTexture() {\r\n if (!this._rampGradients || !this._rampGradients.length || this._rampGradientsTexture || !this._scene) {\r\n return;\r\n }\r\n\r\n const data = new Uint8Array(this._rawTextureWidth * 4);\r\n const tmpColor = TmpColors.Color3[0];\r\n\r\n for (let x = 0; x < this._rawTextureWidth; x++) {\r\n const ratio = x / this._rawTextureWidth;\r\n\r\n GradientHelper.GetCurrentGradient(ratio, this._rampGradients, (currentGradient, nextGradient, scale) => {\r\n Color3.LerpToRef((<Color3Gradient>currentGradient).color, (<Color3Gradient>nextGradient).color, scale, tmpColor);\r\n data[x * 4] = tmpColor.r * 255;\r\n data[x * 4 + 1] = tmpColor.g * 255;\r\n data[x * 4 + 2] = tmpColor.b * 255;\r\n data[x * 4 + 3] = 255;\r\n });\r\n }\r\n\r\n this._rampGradientsTexture = RawTexture.CreateRGBATexture(data, this._rawTextureWidth, 1, this._scene, false, false, Constants.TEXTURE_NEAREST_SAMPLINGMODE);\r\n }\r\n\r\n /**\r\n * Gets the current list of ramp gradients.\r\n * You must use addRampGradient and removeRampGradient to update this list\r\n * @returns the list of ramp gradients\r\n */\r\n public getRampGradients(): Nullable<Array<Color3Gradient>> {\r\n return this._rampGradients;\r\n }\r\n\r\n /** Force the system to rebuild all gradients that need to be resync */\r\n public forceRefreshGradients() {\r\n this._syncRampGradientTexture();\r\n }\r\n\r\n private _syncRampGradientTexture() {\r\n if (!this._rampGradients) {\r\n return;\r\n }\r\n\r\n this._rampGradients.sort((a, b) => {\r\n if (a.gradient < b.gradient) {\r\n return -1;\r\n } else if (a.gradient > b.gradient) {\r\n return 1;\r\n }\r\n\r\n return 0;\r\n });\r\n\r\n if (this._rampGradientsTexture) {\r\n this._rampGradientsTexture.dispose();\r\n this._rampGradientsTexture = null;\r\n }\r\n\r\n this._createRampGradientTexture();\r\n }\r\n\r\n /**\r\n * Adds a new ramp gradient used to remap particle colors\r\n * @param gradient defines the gradient to use (between 0 and 1)\r\n * @param color defines the color to affect to the specified gradient\r\n * @returns the current particle system\r\n */\r\n public addRampGradient(gradient: number, color: Color3): ParticleSystem {\r\n if (!this._rampGradients) {\r\n this._rampGradients = [];\r\n }\r\n\r\n const rampGradient = new Color3Gradient(gradient, color);\r\n this._rampGradients.push(rampGradient);\r\n\r\n this._syncRampGradientTexture();\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Remove a specific ramp gradient\r\n * @param gradient defines the gradient to remove\r\n * @returns the current particle system\r\n */\r\n public removeRampGradient(gradient: number): ParticleSystem {\r\n this._removeGradientAndTexture(gradient, this._rampGradients, this._rampGradientsTexture);\r\n this._rampGradientsTexture = null;\r\n\r\n if (this._rampGradients && this._rampGradients.length > 0) {\r\n this._createRampGradientTexture();\r\n }\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Adds a new color gradient\r\n * @param gradient defines the gradient to use (between 0 and 1)\r\n * @param color1 defines the color to affect to the specified gradient\r\n * @param color2 defines an additional color used to define a range ([color, color2]) with main color to pick the final color from\r\n * @returns this particle system\r\n */\r\n public addColorGradient(gradient: number, color1: Color4, color2?: Color4): IParticleSystem {\r\n if (!this._colorGradients) {\r\n this._colorGradients = [];\r\n }\r\n\r\n const colorGradient = new ColorGradient(gradient, color1, color2);\r\n this._colorGradients.push(colorGradient);\r\n\r\n this._colorGradients.sort((a, b) => {\r\n if (a.gradient < b.gradient) {\r\n return -1;\r\n } else if (a.gradient > b.gradient) {\r\n return 1;\r\n }\r\n\r\n return 0;\r\n });\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Remove a specific color gradient\r\n * @param gradient defines the gradient to remove\r\n * @returns this particle system\r\n */\r\n public removeColorGradient(gradient: number): IParticleSystem {\r\n if (!this._colorGradients) {\r\n return this;\r\n }\r\n\r\n let index = 0;\r\n for (const colorGradient of this._colorGradients) {\r\n if (colorGradient.gradient === gradient) {\r\n this._colorGradients.splice(index, 1);\r\n break;\r\n }\r\n index++;\r\n }\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Resets the draw wrappers cache\r\n */\r\n public resetDrawCache(): void {\r\n for (const drawWrappers of this._drawWrappers) {\r\n if (drawWrappers) {\r\n for (const drawWrapper of drawWrappers) {\r\n drawWrapper?.dispose();\r\n }\r\n }\r\n }\r\n\r\n this._drawWrappers = [];\r\n }\r\n\r\n private _fetchR(u: number, v: number, width: number, height: number, pixels: Uint8Array): number {\r\n u = Math.abs(u) * 0.5 + 0.5;\r\n v = Math.abs(v) * 0.5 + 0.5;\r\n\r\n const wrappedU = (u * width) % width | 0;\r\n const wrappedV = (v * height) % height | 0;\r\n\r\n const position = (wrappedU + wrappedV * width) * 4;\r\n return pixels[position] / 255;\r\n }\r\n\r\n protected _reset() {\r\n this._resetEffect();\r\n }\r\n\r\n private _resetEffect() {\r\n if (this._vertexBuffer) {\r\n this._vertexBuffer.dispose();\r\n this._vertexBuffer = null;\r\n }\r\n\r\n if (this._spriteBuffer) {\r\n this._spriteBuffer.dispose();\r\n this._spriteBuffer = null;\r\n }\r\n\r\n if (this._vertexArrayObject) {\r\n this._engine.releaseVertexArrayObject(this._vertexArrayObject);\r\n this._vertexArrayObject = null;\r\n }\r\n\r\n this._createVertexBuffers();\r\n }\r\n\r\n private _createVertexBuffers() {\r\n this._vertexBufferSize = this._useInstancing ? 10 : 12;\r\n if (this._isAnimationSheetEnabled) {\r\n this._vertexBufferSize += 1;\r\n }\r\n\r\n if (!this._isBillboardBased || this.billboardMode === ParticleSystem.BILLBOARDMODE_STRETCHED) {\r\n this._vertexBufferSize += 3;\r\n }\r\n\r\n if (this._useRampGradients) {\r\n this._vertexBufferSize += 4;\r\n }\r\n\r\n const engine = this._engine;\r\n const vertexSize = this._vertexBufferSize * (this._useInstancing ? 1 : 4);\r\n this._vertexData = new Float32Array(this._capacity * vertexSize);\r\n this._vertexBuffer = new Buffer(engine, this._vertexData, true, vertexSize);\r\n\r\n let dataOffset = 0;\r\n const positions = this._vertexBuffer.createVertexBuffer(VertexBuffer.PositionKind, dataOffset, 3, this._vertexBufferSize, this._useInstancing);\r\n this._vertexBuffers[VertexBuffer.PositionKind] = positions;\r\n dataOffset += 3;\r\n\r\n const colors = this._vertexBuffer.createVertexBuffer(VertexBuffer.ColorKind, dataOffset, 4, this._vertexBufferSize, this._useInstancing);\r\n this._vertexBuffers[VertexBuffer.ColorKind] = colors;\r\n dataOffset += 4;\r\n\r\n const options = this._vertexBuffer.createVertexBuffer(\"angle\", dataOffset, 1, this._vertexBufferSize, this._useInstancing);\r\n this._vertexBuffers[\"angle\"] = options;\r\n dataOffset += 1;\r\n\r\n const size = this._vertexBuffer.createVertexBuffer(\"size\", dataOffset, 2, this._vertexBufferSize, this._useInstancing);\r\n this._vertexBuffers[\"size\"] = size;\r\n dataOffset += 2;\r\n\r\n if (this._isAnimationSheetEnabled) {\r\n const cellIndexBuffer = this._vertexBuffer.createVertexBuffer(\"cellIndex\", dataOffset, 1, this._vertexBufferSize, this._useInstancing);\r\n this._vertexBuffers[\"cellIndex\"] = cellIndexBuffer;\r\n dataOffset += 1;\r\n }\r\n\r\n if (!this._isBillboardBased || this.billboardMode === ParticleSystem.BILLBOARDMODE_STRETCHED) {\r\n const directionBuffer = this._vertexBuffer.createVertexBuffer(\"direction\", dataOffset, 3, this._vertexBufferSize, this._useInstancing);\r\n this._vertexBuffers[\"direction\"] = directionBuffer;\r\n dataOffset += 3;\r\n }\r\n\r\n if (this._useRampGradients) {\r\n const rampDataBuffer = this._vertexBuffer.createVertexBuffer(\"remapData\", dataOffset, 4, this._vertexBufferSize, this._useInstancing);\r\n this._vertexBuffers[\"remapData\"] = rampDataBuffer;\r\n dataOffset += 4;\r\n }\r\n\r\n let offsets: VertexBuffer;\r\n if (this._useInstancing) {\r\n const spriteData = new Float32Array([0, 0, 1, 0, 0, 1, 1, 1]);\r\n this._spriteBuffer = new Buffer(engine, spriteData, false, 2);\r\n offsets = this._spriteBuffer.createVertexBuffer(\"offset\", 0, 2);\r\n } else {\r\n offsets = this._vertexBuffer.createVertexBuffer(\"offset\", dataOffset, 2, this._vertexBufferSize, this._useInstancing);\r\n dataOffset += 2;\r\n }\r\n this._vertexBuffers[\"offset\"] = offsets;\r\n\r\n this.resetDrawCache();\r\n }\r\n\r\n private _createIndexBuffer() {\r\n if (this._useInstancing) {\r\n return;\r\n }\r\n const indices = [];\r\n let index = 0;\r\n for (let count = 0; count < this._capacity; count++) {\r\n indices.push(index);\r\n indices.push(index + 1);\r\n indices.push(index + 2);\r\n indices.push(index);\r\n indices.push(index + 2);\r\n indices.push(index + 3);\r\n index += 4;\r\n }\r\n\r\n this._indexBuffer = this._engine.createIndexBuffer(indices);\r\n }\r\n\r\n /**\r\n * Gets the maximum number of particles active at the same time.\r\n * @returns The max number of active particles.\r\n */\r\n public getCapacity(): number {\r\n return this._capacity;\r\n }\r\n\r\n /**\r\n * Gets whether there are still active particles in the system.\r\n * @returns True if it is alive, otherwise false.\r\n */\r\n public isAlive(): boolean {\r\n return this._alive;\r\n }\r\n\r\n /**\r\n * Gets if the system has been started. (Note: this will still be true after stop is called)\r\n * @returns True if it has been started, otherwise false.\r\n */\r\n public isStarted(): boolean {\r\n return this._started;\r\n }\r\n\r\n private _prepareSubEmitterInternalArray() {\r\n this._subEmitters = new Array<Array<SubEmitter>>();\r\n if (this.subEmitters) {\r\n this.subEmitters.forEach((subEmitter) => {\r\n if (subEmitter instanceof ParticleSystem) {\r\n this._subEmitters.push([new SubEmitter(subEmitter)]);\r\n } else if (subEmitter instanceof SubEmitter) {\r\n this._subEmitters.push([subEmitter]);\r\n } else if (subEmitter instanceof Array) {\r\n this._subEmitters.push(subEmitter);\r\n }\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Starts the particle system and begins to emit\r\n * @param delay defines the delay in milliseconds before starting the system (this.startDelay by default)\r\n */\r\n public start(delay = this.startDelay): void {\r\n if (!this.targetStopDuration && this._hasTargetStopDurationDependantGradient()) {\r\n throw \"Particle system started with a targetStopDuration dependant gradient (eg. startSizeGradients) but no targetStopDuration set\";\r\n }\r\n if (delay) {\r\n setTimeout(() => {\r\n this.start(0);\r\n }, delay);\r\n return;\r\n }\r\n // Convert the subEmitters field to the constant type field _subEmitters\r\n this._prepareSubEmitterInternalArray();\r\n\r\n this._started = true;\r\n this._stopped = false;\r\n this._actualFrame = 0;\r\n if (this._subEmitters && this._subEmitters.length != 0) {\r\n this.activeSubSystems = new Array<ParticleSystem>();\r\n }\r\n\r\n // Reset emit gradient so it acts the same on every start\r\n if (this._emitRateGradients) {\r\n if (this._emitRateGradients.length > 0) {\r\n this._currentEmitRateGradient = this._emitRateGradients[0];\r\n this._currentEmitRate1 = this._currentEmitRateGradient.getFactor();\r\n this._currentEmitRate2 = this._currentEmitRate1;\r\n }\r\n if (this._emitRateGradients.length > 1) {\r\n this._currentEmitRate2 = this._emitRateGradients[1].getFactor();\r\n }\r\n }\r\n // Reset start size gradient so it acts the same on every start\r\n if (this._startSizeGradients) {\r\n if (this._startSizeGradients.length > 0) {\r\n this._currentStartSizeGradient = this._startSizeGradients[0];\r\n this._currentStartSize1 = this._currentStartSizeGradient.getFactor();\r\n this._currentStartSize2 = this._currentStartSize1;\r\n }\r\n if (this._startSizeGradients.length > 1) {\r\n this._currentStartSize2 = this._startSizeGradients[1].getFactor();\r\n }\r\n }\r\n\r\n if (this.preWarmCycles) {\r\n if (this.emitter?.getClassName().indexOf(\"Mesh\") !== -1) {\r\n (this.emitter as any).computeWorldMatrix(true);\r\n }\r\n\r\n const noiseTextureAsProcedural = this.noiseTexture as ProceduralTexture;\r\n\r\n if (noiseTextureAsProcedural && noiseTextureAsProcedural.onGeneratedObservable) {\r\n noiseTextureAsProcedural.onGeneratedObservable.addOnce(() => {\r\n setTimeout(() => {\r\n for (let index = 0; index < this.preWarmCycles; index++) {\r\n this.animate(true);\r\n noiseTextureAsProcedural.render();\r\n }\r\n });\r\n });\r\n } else {\r\n for (let index = 0; index < this.preWarmCycles; index++) {\r\n this.animate(true);\r\n }\r\n }\r\n }\r\n\r\n // Animations\r\n if (this.beginAnimationOnStart && this.animations && this.animations.length > 0 && this._scene) {\r\n this._scene.beginAnimation(this, this.beginAnimationFrom, this.beginAnimationTo, this.beginAnimationLoop);\r\n }\r\n }\r\n\r\n /**\r\n * Stops the particle system.\r\n * @param stopSubEmitters if true it will stop the current system and all created sub-Systems if false it will stop the current root system only, this param is used by the root particle system only. the default value is true.\r\n */\r\n public stop(stopSubEmitters = true): void {\r\n if (this._stopped) {\r\n return;\r\n }\r\n\r\n this.onStoppedObservable.notifyObservers(this);\r\n\r\n this._stopped = true;\r\n\r\n if (stopSubEmitters) {\r\n this._stopSubEmitters();\r\n }\r\n }\r\n\r\n // animation sheet\r\n\r\n /**\r\n * Remove all active particles\r\n */\r\n public reset(): void {\r\n this._stockParticles.length = 0;\r\n this._particles.length = 0;\r\n }\r\n\r\n /**\r\n * @internal (for internal use only)\r\n */\r\n public _appendParticleVertex(index: number, particle: Particle, offsetX: number, offsetY: number): void {\r\n let offset = index * this._vertexBufferSize;\r\n\r\n this._vertexData[offset++] = particle.position.x + this.worldOffset.x;\r\n this._vertexData[offset++] = particle.position.y + this.worldOffset.y;\r\n this._vertexData[offset++] = particle.position.z + this.worldOffset.z;\r\n this._vertexData[offset++] = particle.color.r;\r\n this._vertexData[offset++] = particle.color.g;\r\n this._vertexData[offset++] = particle.color.b;\r\n this._vertexData[offset++] = particle.color.a;\r\n this._vertexData[offset++] = particle.angle;\r\n\r\n this._vertexData[offset++] = particle.scale.x * particle.size;\r\n this._vertexData[offset++] = particle.scale.y * particle.size;\r\n\r\n if (this._isAnimationSheetEnabled) {\r\n this._vertexData[offset++] = particle.cellIndex;\r\n }\r\n\r\n if (!this._isBillboardBased) {\r\n if (particle._initialDirection) {\r\n let initialDirection = particle._initialDirection;\r\n if (this.isLocal) {\r\n Vector3.TransformNormalToRef(initialDirection, this._emitterWorldMatrix, TmpVectors.Vector3[0]);\r\n initialDirection = TmpVectors.Vector3[0];\r\n }\r\n if (initialDirection.x === 0 && initialDirection.z === 0) {\r\n initialDirection.x = 0.001;\r\n }\r\n\r\n this._vertexData[offset++] = initialDirection.x;\r\n this._vertexData[offset++] = initialDirection.y;\r\n this._vertexData[offset++] = initialDirection.z;\r\n } else {\r\n let direction = particle.direction;\r\n if (this.isLocal) {\r\n Vector3.TransformNormalToRef(direction, this._emitterWorldMatrix, TmpVectors.Vector3[0]);\r\n direction = TmpVectors.Vector3[0];\r\n }\r\n\r\n if (direction.x === 0 && direction.z === 0) {\r\n direction.x = 0.001;\r\n }\r\n this._vertexData[offset++] = direction.x;\r\n this._vertexData[offset++] = direction.y;\r\n this._vertexData[offset++] = direction.z;\r\n }\r\n } else if (this.billboardMode === ParticleSystem.BILLBOARDMODE_STRETCHED) {\r\n this._vertexData[offset++] = particle.direction.x;\r\n this._vertexData[offset++] = particle.direction.y;\r\n this._vertexData[offset++] = particle.direction.z;\r\n }\r\n\r\n if (this._useRampGradients && particle.remapData) {\r\n this._vertexData[offset++] = particle.remapData.x;\r\n this._vertexData[offset++] = particle.remapData.y;\r\n this._vertexData[offset++] = particle.remapData.z;\r\n this._vertexData[offset++] = particle.remapData.w;\r\n }\r\n\r\n if (!this._useInstancing) {\r\n if (this._isAnimationSheetEnabled) {\r\n if (offsetX === 0) {\r\n offsetX = this._epsilon;\r\n } else if (offsetX === 1) {\r\n offsetX = 1 - this._epsilon;\r\n }\r\n\r\n if (offsetY === 0) {\r\n offsetY = this._epsilon;\r\n } else if (offsetY === 1) {\r\n offsetY = 1 - this._epsilon;\r\n }\r\n }\r\n\r\n this._vertexData[offset++] = offsetX;\r\n this._vertexData[offset++] = offsetY;\r\n }\r\n }\r\n\r\n // start of sub system methods\r\n\r\n /**\r\n * \"Recycles\" one of the particle by copying it back to the \"stock\" of particles and removing it from the active list.\r\n * Its lifetime will start back at 0.\r\n * @param particle\r\n */\r\n public recycleParticle: (particle: Particle) => void = (particle) => {\r\n // move particle from activeParticle list to stock particles\r\n const lastParticle = <Particle>this._particles.pop();\r\n if (lastParticle !== particle) {\r\n lastParticle.copyTo(particle);\r\n }\r\n this._stockParticles.push(lastParticle);\r\n };\r\n\r\n private _stopSubEmitters(): void {\r\n if (!this.activeSubSystems) {\r\n return;\r\n }\r\n this.activeSubSystems.forEach((subSystem) => {\r\n subSystem.stop(true);\r\n });\r\n this.activeSubSystems = new Array<ParticleSystem>();\r\n }\r\n\r\n private _createParticle: () => Particle = () => {\r\n let particle: Particle;\r\n if (this._stockParticles.length !== 0) {\r\n particle = <Particle>this._stockParticles.pop();\r\n particle._reset();\r\n } else {\r\n particle = new Particle(this);\r\n }\r\n\r\n // Attach emitters\r\n if (this._subEmitters && this._subEmitters.length > 0) {\r\n const subEmitters = this._subEmitters[Math.floor(Math.random() * this._subEmitters.length)];\r\n particle._attachedSubEmitters = [];\r\n subEmitters.forEach((subEmitter) => {\r\n if (subEmitter.type === SubEmitterType.ATTACHED) {\r\n const newEmitter = subEmitter.clone();\r\n (<Array<SubEmitter>>particle._attachedSubEmitters).push(newEmitter);\r\n newEmitter.particleSystem.start();\r\n }\r\n });\r\n }\r\n return particle;\r\n };\r\n\r\n private _removeFromRoot(): void {\r\n if (!this._rootParticleSystem) {\r\n return;\r\n }\r\n\r\n const index = this._rootParticleSystem.activeSubSystems.indexOf(this);\r\n if (index !== -1) {\r\n this._rootParticleSystem.activeSubSystems.splice(index, 1);\r\n }\r\n\r\n this._rootParticleSystem = null;\r\n }\r\n\r\n private _emitFromParticle: (particle: Particle) => void = (particle) => {\r\n if (!this._subEmitters || this._subEmitters.length === 0) {\r\n return;\r\n }\r\n const templateIndex = Math.floor(Math.random() * this._subEmitters.length);\r\n\r\n this._subEmitters[templateIndex].forEach((subEmitter) => {\r\n if (subEmitter.type === SubEmitterType.END) {\r\n const subSystem = subEmitter.clone();\r\n particle._inheritParticleInfoToSubEmitter(subSystem);\r\n subSystem.particleSystem._rootParticleSystem = this;\r\n this.activeSubSystems.push(subSystem.particleSystem);\r\n subSystem.particleSystem.start();\r\n }\r\n });\r\n };\r\n\r\n // End of sub system methods\r\n\r\n private _update(newParticles: number): void {\r\n // Update current\r\n this._alive = this._particles.length > 0;\r\n\r\n if ((<AbstractMesh>this.emitter).position) {\r\n const emitterMesh = <AbstractMesh>this.emitter;\r\n this._emitterWorldMatrix = emitterMesh.getWorldMatrix();\r\n } else {\r\n const emitterPosition = <Vector3>this.emitter;\r\n this._emitterWorldMatrix = Matrix.Translation(emitterPosition.x, emitterPosition.y, emitterPosition.z);\r\n }\r\n\r\n this._emitterWorldMatrix.invertToRef(this._emitterInverseWorldMatrix);\r\n this.updateFunction(this._particles);\r\n\r\n // Add new ones\r\n let particle: Particle;\r\n for (let index = 0; index < newParticles; index++) {\r\n if (this._particles.length === this._capacity) {\r\n break;\r\n }\r\n\r\n particle = this._createParticle();\r\n\r\n this._particles.push(particle);\r\n\r\n // Life time\r\n if (this.targetStopDuration && this._lifeTimeGradients && this._lifeTimeGradients.length > 0) {\r\n const ratio = Scalar.Clamp(this._actualFrame / this.targetStopDuration);\r\n GradientHelper.GetCurrentGradient(ratio, this._lifeTimeGradients, (currentGradient, nextGradient) => {\r\n const factorGradient1 = <FactorGradient>currentGradient;\r\n const factorGradient2 = <FactorGradient>nextGradient;\r\n const lifeTime1 = factorGradient1.getFactor();\r\n const lifeTime2 = factorGradient2.getFactor();\r\n const gradient = (ratio - factorGradient1.gradient) / (factorGradient2.gradient - factorGradient1.gradient);\r\n particle.lifeTime = Scalar.Lerp(lifeTime1, lifeTime2, gradient);\r\n });\r\n } else {\r\n particle.lifeTime = Scalar.RandomRange(this.minLifeTime, this.maxLifeTime);\r\n }\r\n\r\n // Emitter\r\n const emitPower = Scalar.RandomRange(this.minEmitPower, this.maxEmitPower);\r\n\r\n if (this.startPositionFunction) {\r\n this.startPositionFunction(this._emitterWorldMatrix, particle.position, particle, this.isLocal);\r\n } else {\r\n this.particleEmitterType.startPositionFunction(this._emitterWorldMatrix, particle.position, particle, this.isLocal);\r\n }\r\n\r\n if (this.isLocal) {\r\n if (!particle._localPosition) {\r\n particle._localPosition = particle.position.clone();\r\n } else {\r\n particle._localPosition.copyFrom(particle.position);\r\n }\r\n Vector3.TransformCoordinatesToRef(particle._localPosition!, this._emitterWorldMatrix, particle.position);\r\n }\r\n\r\n if (this.startDirectionFunction) {\r\n this.startDirectionFunction(this._emitterWorldMatrix, particle.direction, particle, this.isLocal);\r\n } else {\r\n this.particleEmitterType.startDirectionFunction(this._emitterWorldMatrix, particle.direction, particle, this.isLocal, this._emitterInverseWorldMatrix);\r\n }\r\n\r\n if (emitPower === 0) {\r\n if (!particle._initialDirection) {\r\n particle._initialDirection = particle.direction.clone();\r\n } else {\r\n particle._initialDirection.copyFrom(particle.direction);\r\n }\r\n } else {\r\n particle._initialDirection = null;\r\n }\r\n\r\n particle.direction.scaleInPlace(emitPower);\r\n\r\n // Size\r\n if (!this._sizeGradients || this._sizeGradients.length === 0) {\r\n particle.size = Scalar.RandomRange(this.minSize, this.maxSize);\r\n } else {\r\n particle._currentSizeGradient = this._sizeGradients[0];\r\n particle._currentSize1 = particle._currentSizeGradient.getFactor();\r\n particle.size = particle._currentSize1;\r\n\r\n if (this._sizeGradients.length > 1) {\r\n particle._currentSize2 = this._sizeGradients[1].getFactor();\r\n } else {\r\n particle._currentSize2 = particle._currentSize1;\r\n }\r\n }\r\n // Size and scale\r\n particle.scale.copyFromFloats(Scalar.RandomRange(this.minScaleX, this.maxScaleX), Scalar.RandomRange(this.minScaleY, this.maxScaleY));\r\n\r\n // Adjust scale by start size\r\n if (this._startSizeGradients && this._startSizeGradients[0] && this.targetStopDuration) {\r\n const ratio = this._actualFrame / this.targetStopDuration;\r\n GradientHelper.GetCurrentGradient(ratio, this._startSizeGradients, (currentGradient, nextGradient, scale) => {\r\n if (currentGradient !== this._currentStartSizeGradient) {\r\n this._currentStartSize1 = this._currentStartSize2;\r\n this._currentStartSize2 = (<FactorGradient>nextGradient).getFactor();\r\n this._currentStartSizeGradient = <FactorGradient>currentGradient;\r\n }\r\n\r\n const value = Scalar.Lerp(this._currentStartSize1, this._currentStartSize2, scale);\r\n particle.scale.scaleInPlace(value);\r\n });\r\n }\r\n\r\n // Angle\r\n if (!this._angularSpeedGradients || this._angularSpeedGradients.length === 0) {\r\n particle.angularSpeed = Scalar.RandomRange(this.minAngularSpeed, this.maxAngularSpeed);\r\n } else {\r\n particle._currentAngularSpeedGradient = this._angularSpeedGradients[0];\r\n particle.angularSpeed = particle._currentAngularSpeedGradient.getFactor();\r\n particle._currentAngularSpeed1 = particle.angularSpeed;\r\n\r\n if (this._angularSpeedGradients.length > 1) {\r\n particle._currentAngularSpeed2 = this._angularSpeedGradients[1].getFactor();\r\n } else {\r\n particle._currentAngularSpeed2 = particle._currentAngularSpeed1;\r\n }\r\n }\r\n particle.angle = Scalar.RandomRange(this.minInitialRotation, this.maxInitialRotation);\r\n\r\n // Velocity\r\n if (this._velocityGradients && this._velocityGradients.length > 0) {\r\n particle._currentVelocityGradient = this._velocityGradients[0];\r\n particle._currentVelocity1 = particle._currentVelocityGradient.getFactor();\r\n\r\n if (this._velocityGradients.length > 1) {\r\n particle._currentVelocity2 = this._velocityGradients[1].getFactor();\r\n } else {\r\n particle._currentVelocity2 = particle._currentVelocity1;\r\n }\r\n }\r\n\r\n // Limit velocity\r\n if (this._limitVelocityGradients && this._limitVelocityGradients.length > 0) {\r\n particle._currentLimitVelocityGradient = this._limitVelocityGradients[0];\r\n particle._currentLimitVelocity1 = particle._currentLimitVelocityGradient.getFactor();\r\n\r\n if (this._limitVelocityGradients.length > 1) {\r\n particle._currentLimitVelocity2 = this._limitVelocityGradients[1].getFactor();\r\n } else {\r\n particle._currentLimitVelocity2 = particle._currentLimitVelocity1;\r\n }\r\n }\r\n\r\n // Drag\r\n if (this._dragGradients && this._dragGradients.length > 0) {\r\n particle._currentDragGradient = this._dragGradients[0];\r\n particle._currentDrag1 = particle._currentDragGradient.getFactor();\r\n\r\n if (this._dragGradients.length > 1) {\r\n particle._currentDrag2 = this._dragGradients[1].getFactor();\r\n } else {\r\n particle._currentDrag2 = particle._currentDrag1;\r\n }\r\n }\r\n\r\n // Color\r\n if (!this._colorGradients || this._colorGradients.length === 0) {\r\n const step = Scalar.RandomRange(0, 1.0);\r\n\r\n Color4.LerpToRef(this.color1, this.color2, step, particle.color);\r\n\r\n this.colorDead.subtractToRef(particle.color, this._colorDiff);\r\n this._colorDiff.scaleToRef(1.0 / particle.lifeTime, particle.colorStep);\r\n } else {\r\n particle._currentColorGradient = this._colorGradients[0];\r\n particle._currentColorGradient.getColorToRef(particle.color);\r\n particle._currentColor1.copyFrom(particle.color);\r\n\r\n if (this._colorGradients.length > 1) {\r\n this._colorGradients[1].getColorToRef(particle._currentColor2);\r\n } else {\r\n particle._currentColor2.copyFrom(particle.color);\r\n }\r\n }\r\n\r\n // Sheet\r\n if (this._isAnimationSheetEnabled) {\r\n particle._initialStartSpriteCellID = this.startSpriteCellID;\r\n particle._initialEndSpriteCellID = this.endSpriteCellID;\r\n particle._initialSpriteCellLoop = this.spriteCellLoop;\r\n }\r\n\r\n // Inherited Velocity\r\n particle.direction.addInPlace(this._inheritedVelocityOffset);\r\n\r\n // Ramp\r\n if (this._useRampGradients) {\r\n particle.remapData = new Vector4(0, 1, 0, 1);\r\n }\r\n\r\n // Noise texture coordinates\r\n if (this.noiseTexture) {\r\n if (particle._randomNoiseCoordinates1) {\r\n particle._randomNoiseCoordinates1.copyFromFloats(Math.random(), Math.random(), Math.random());\r\n particle._randomNoiseCoordinates2.copyFromFloats(Math.random(), Math.random(), Math.random());\r\n } else {\r\n particle._randomNoiseCoordinates1 = new Vector3(Math.random(), Math.random(), Math.random());\r\n particle._randomNoiseCoordinates2 = new Vector3(Math.random(), Math.random(), Math.random());\r\n }\r\n }\r\n\r\n // Update the position of the attached sub-emitters to match their attached particle\r\n particle._inheritParticleInfoToSubEmitters();\r\n }\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public static _GetAttributeNamesOrOptions(isAnimationSheetEnabled = false, isBillboardBased = false, useRampGradients = false): string[] {\r\n const attributeNamesOrOptions = [VertexBuffer.PositionKind, VertexBuffer.ColorKind, \"angle\", \"offset\", \"size\"];\r\n\r\n if (isAnimationSheetEnabled) {\r\n attributeNamesOrOptions.push(\"cellIndex\");\r\n }\r\n\r\n if (!isBillboardBased) {\r\n attributeNamesOrOptions.push(\"direction\");\r\n }\r\n\r\n if (useRampGradients) {\r\n attributeNamesOrOptions.push(\"remapData\");\r\n }\r\n\r\n return attributeNamesOrOptions;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public static _GetEffectCreationOptions(isAnimationSheetEnabled = false, useLogarithmicDepth = false): string[] {\r\n const effectCreationOption = [\r\n \"invView\",\r\n \"view\",\r\n \"projection\",\r\n \"vClipPlane\",\r\n \"vClipPlane2\",\r\n \"vClipPlane3\",\r\n \"vClipPlane4\",\r\n \"vClipPlane5\",\r\n \"vClipPlane6\",\r\n \"textureMask\",\r\n \"translationPivot\",\r\n \"eyePosition\",\r\n ];\r\n\r\n if (isAnimationSheetEnabled) {\r\n effectCreationOption.push(\"particlesInfos\");\r\n }\r\n if (useLogarithmicDepth) {\r\n effectCreationOption.push(\"logarithmicDepthConstant\");\r\n }\r\n\r\n return effectCreationOption;\r\n }\r\n\r\n /**\r\n * Fill the defines array according to the current settings of the particle system\r\n * @param defines Array to be updated\r\n * @param blendMode blend mode to take into account when updating the array\r\n */\r\n public fillDefines(defines: Array<string>, blendMode: number) {\r\n if (this._scene) {\r\n if (this._scene.clipPlane) {\r\n defines.push(\"#define CLIPPLANE\");\r\n }\r\n\r\n if (this._scene.clipPlane2) {\r\n defines.push(\"#define CLIPPLANE2\");\r\n }\r\n\r\n if (this._scene.clipPlane3) {\r\n defines.push(\"#define CLIPPLANE3\");\r\n }\r\n\r\n if (this._scene.clipPlane4) {\r\n defines.push(\"#define CLIPPLANE4\");\r\n }\r\n\r\n if (this._scene.clipPlane5) {\r\n defines.push(\"#define CLIPPLANE5\");\r\n }\r\n\r\n if (this._scene.clipPlane6) {\r\n defines.push(\"#define CLIPPLANE6\");\r\n }\r\n }\r\n\r\n if (this._isAnimationSheetEnabled) {\r\n defines.push(\"#define ANIMATESHEET\");\r\n }\r\n\r\n if (this.useLogarithmicDepth) {\r\n defines.push(\"#define LOGARITHMICDEPTH\");\r\n }\r\n\r\n if (blendMode === ParticleSystem.BLENDMODE_MULTIPLY) {\r\n defines.push(\"#define BLENDMULTIPLYMODE\");\r\n }\r\n\r\n if (this._useRampGradients) {\r\n defines.push(\"#define RAMPGRADIENT\");\r\n }\r\n\r\n if (this._isBillboardBased) {\r\n defines.push(\"#define BILLBOARD\");\r\n\r\n switch (this.billboardMode) {\r\n case ParticleSystem.BILLBOARDMODE_Y:\r\n defines.push(\"#define BILLBOARDY\");\r\n break;\r\n case ParticleSystem.BILLBOARDMODE_STRETCHED:\r\n defines.push(\"#define BILLBOARDSTRETCHED\");\r\n break;\r\n case ParticleSystem.BILLBOARDMODE_ALL:\r\n defines.push(\"#define BILLBOARDMODE_ALL\");\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n if (this._imageProcessingConfiguration) {\r\n this._imageProcessingConfiguration.prepareDefines(this._imageProcessingConfigurationDefines);\r\n defines.push(this._imageProcessingConfigurationDefines.toString());\r\n }\r\n }\r\n\r\n /**\r\n * Fill the uniforms, attributes and samplers arrays according to the current settings of the particle system\r\n * @param uniforms Uniforms array to fill\r\n * @param attributes Attributes array to fill\r\n * @param samplers Samplers array to fill\r\n */\r\n public fillUniformsAttributesAndSamplerNames(uniforms: Array<string>, attributes: Array<string>, samplers: Array<string>) {\r\n attributes.push(\r\n ...ParticleSystem._GetAttributeNamesOrOptions(\r\n this._isAnimationSheetEnabled,\r\n this._isBillboardBased && this.billboardMode !== ParticleSystem.BILLBOARDMODE_STRETCHED,\r\n this._useRampGradients\r\n )\r\n );\r\n\r\n uniforms.push(...ParticleSystem._GetEffectCreationOptions(this._isAnimationSheetEnabled, this.useLogarithmicDepth));\r\n\r\n samplers.push(\"diffuseSampler\", \"rampSampler\");\r\n\r\n if (this._imageProcessingConfiguration) {\r\n ImageProcessingConfiguration.PrepareUniforms(uniforms, this._imageProcessingConfigurationDefines);\r\n ImageProcessingConfiguration.PrepareSamplers(samplers, this._imageProcessingConfigurationDefines);\r\n }\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n private _getWrapper(blendMode: number): DrawWrapper {\r\n const customWrapper = this._getCustomDrawWrapper(blendMode);\r\n\r\n if (customWrapper?.effect) {\r\n return customWrapper;\r\n }\r\n\r\n const defines: Array<string> = [];\r\n\r\n this.fillDefines(defines, blendMode);\r\n\r\n // Effect\r\n const currentRenderPassId = this._engine._features.supportRenderPasses ? (this._engine as Engine).currentRenderPassId : Constants.RENDERPASS_MAIN;\r\n let drawWrappers = this._drawWrappers[currentRenderPassId];\r\n if (!drawWrappers) {\r\n drawWrappers = this._drawWrappers[currentRenderPassId] = [];\r\n }\r\n let drawWrapper = drawWrappers[blendMode];\r\n if (!drawWrapper) {\r\n drawWrapper = new DrawWrapper(this._engine);\r\n if (drawWrapper.drawContext) {\r\n drawWrapper.drawContext.useInstancing = this._useInstancing;\r\n }\r\n drawWrappers[blendMode] = drawWrapper;\r\n }\r\n\r\n const join = defines.join(\"\\n\");\r\n if (drawWrapper.defines !== join) {\r\n const attributesNamesOrOptions: Array<string> = [];\r\n const effectCreationOption: Array<string> = [];\r\n const samplers: Array<string> = [];\r\n\r\n this.fillUniformsAttributesAndSamplerNames(effectCreationOption, attributesNamesOrOptions, samplers);\r\n\r\n drawWrapper.setEffect(this._engine.createEffect(\"particles\", attributesNamesOrOptions, effectCreationOption, samplers, join), join);\r\n }\r\n\r\n return drawWrapper;\r\n }\r\n\r\n /**\r\n * Animates the particle system for the current frame by emitting new particles and or animating the living ones.\r\n * @param preWarmOnly will prevent the system from updating the vertex buffer (default is false)\r\n */\r\n public animate(preWarmOnly = false): void {\r\n if (!this._started) {\r\n return;\r\n }\r\n\r\n if (!preWarmOnly && this._scene) {\r\n // Check\r\n if (!this.isReady()) {\r\n return;\r\n }\r\n\r\n if (this._currentRenderId === this._scene.getFrameId()) {\r\n return;\r\n }\r\n this._currentRenderId = this._scene.getFrameId();\r\n }\r\n\r\n this._scaledUpdateSpeed = this.updateSpeed * (preWarmOnly ? this.preWarmStepOffset : this._scene?.getAnimationRatio() || 1);\r\n\r\n // Determine the number of particles we need to create\r\n let newParticles;\r\n\r\n if (this.manualEmitCount > -1) {\r\n newParticles = this.manualEmitCount;\r\n this._newPartsExcess = 0;\r\n this.manualEmitCount = 0;\r\n } else {\r\n let rate = this.emitRate;\r\n\r\n if (this._emitRateGradients && this._emitRateGradients.length > 0 && this.targetStopDuration) {\r\n const ratio = this._actualFrame / this.targetStopDuration;\r\n GradientHelper.GetCurrentGradient(ratio, this._emitRateGradients, (currentGradient, nextGradient, scale) => {\r\n if (currentGradient !== this._currentEmitRateGradient) {\r\n this._currentEmitRate1 = this._currentEmitRate2;\r\n this._currentEmitRate2 = (<FactorGradient>nextGradient).getFactor();\r\n this._currentEmitRateGradient = <FactorGradient>currentGradient;\r\n }\r\n\r\n rate = Scalar.Lerp(this._currentEmitRate1, this._currentEmitRate2, scale);\r\n });\r\n }\r\n\r\n newParticles = (rate * this._scaledUpdateSpeed) >> 0;\r\n this._newPartsExcess += rate * this._scaledUpdateSpeed - newParticles;\r\n }\r\n\r\n if (this._newPartsExcess > 1.0) {\r\n newParticles += this._newPartsExcess >> 0;\r\n this._newPartsExcess -= this._newPartsExcess >> 0;\r\n }\r\n\r\n this._alive = false;\r\n\r\n if (!this._stopped) {\r\n this._actualFrame += this._scaledUpdateSpeed;\r\n\r\n if (this.targetStopDuration && this._actualFrame >= this.targetStopDuration) {\r\n this.stop();\r\n }\r\n } else {\r\n newParticles = 0;\r\n }\r\n this._update(newParticles);\r\n\r\n // Stopped?\r\n if (this._stopped) {\r\n if (!this._alive) {\r\n this._started = false;\r\n if (this.onAnimationEnd) {\r\n this.onAnimationEnd();\r\n }\r\n if (this.disposeOnStop && this._scene) {\r\n this._scene._toBeDisposed.push(this);\r\n }\r\n }\r\n }\r\n\r\n if (!preWarmOnly) {\r\n // Update VBO\r\n let offset = 0;\r\n for (let index = 0; index < this._particles.length; index++) {\r\n const particle = this._particles[index];\r\n this._appendParticleVertices(offset, particle);\r\n offset += this._useInstancing ? 1 : 4;\r\n }\r\n\r\n if (this._vertexBuffer) {\r\n this._vertexBuffer.updateDirectly(this._vertexData, 0, this._particles.length);\r\n }\r\n }\r\n\r\n if (this.manualEmitCount === 0 && this.disposeOnStop) {\r\n this.stop();\r\n }\r\n }\r\n\r\n private _appendParticleVertices(offset: number, particle: Particle) {\r\n this._appendParticleVertex(offset++, particle, 0, 0);\r\n if (!this._useInstancing) {\r\n this._appendParticleVertex(offset++, particle, 1, 0);\r\n this._appendParticleVertex(offset++, particle, 1, 1);\r\n this._appendParticleVertex(offset++, particle, 0, 1);\r\n }\r\n }\r\n\r\n /**\r\n * Rebuilds the particle system.\r\n */\r\n public rebuild(): void {\r\n if (this._engine.getCaps().vertexArrayObject) {\r\n this._vertexArrayObject = null;\r\n }\r\n\r\n this._createIndexBuffer();\r\n\r\n this._spriteBuffer?._rebuild();\r\n\r\n this._vertexBuffer?._rebuild();\r\n\r\n for (const key in this._vertexBuffers) {\r\n this._vertexBuffers[key]._rebuild();\r\n }\r\n\r\n this.resetDrawCache();\r\n }\r\n\r\n /**\r\n * Is this system ready to be used/rendered\r\n * @returns true if the system is ready\r\n */\r\n public isReady(): boolean {\r\n if (!this.emitter || (this._imageProcessingConfiguration && !this._imageProcessingConfiguration.isReady()) || !this.particleTexture || !this.particleTexture.isReady()) {\r\n return false;\r\n }\r\n\r\n if (this.blendMode !== ParticleSystem.BLENDMODE_MULTIPLYADD) {\r\n if (!this._getWrapper(this.blendMode).effect!.isReady()) {\r\n return false;\r\n }\r\n } else {\r\n if (!this._getWrapper(ParticleSystem.BLENDMODE_MULTIPLY).effect!.isReady()) {\r\n return false;\r\n }\r\n if (!this._getWrapper(ParticleSystem.BLENDMODE_ADD).effect!.isReady()) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n private _render(blendMode: number) {\r\n const drawWrapper = this._getWrapper(blendMode);\r\n const effect = drawWrapper.effect!;\r\n\r\n const engine = this._engine;\r\n\r\n // Render\r\n engine.enableEffect(drawWrapper);\r\n\r\n const viewMatrix = this.defaultViewMatrix ?? this._scene!.getViewMatrix();\r\n effect.setTexture(\"diffuseSampler\", this.particleTexture);\r\n effect.setMatrix(\"view\", viewMatrix);\r\n effect.setMatrix(\"projection\", this.defaultProjectionMatrix ?? this._scene!.getProjectionMatrix());\r\n\r\n if (this._isAnimationSheetEnabled && this.particleTexture) {\r\n const baseSize = this.particleTexture.getBaseSize();\r\n effect.setFloat3(\"particlesInfos\", this.spriteCellWidth / baseSize.width, this.spriteCellHeight / baseSize.height, this.spriteCellWidth / baseSize.width);\r\n }\r\n\r\n effect.setVector2(\"translationPivot\", this.translationPivot);\r\n effect.setFloat4(\"textureMask\", this.textureMask.r, this.textureMask.g, this.textureMask.b, this.textureMask.a);\r\n\r\n if (this._isBillboardBased && this._scene) {\r\n const camera = this._scene.activeCamera!;\r\n effect.setVector3(\"eyePosition\", camera.globalPosition);\r\n }\r\n\r\n if (this._rampGradientsTexture) {\r\n if (!this._rampGradients || !this._rampGradients.length) {\r\n this._rampGradientsTexture.dispose();\r\n this._rampGradientsTexture = null;\r\n }\r\n effect.setTexture(\"rampSampler\", this._rampGradientsTexture);\r\n }\r\n\r\n const defines = effect.defines;\r\n\r\n if (this._scene) {\r\n if (this._scene.clipPlane || this._scene.clipPlane2 || this._scene.clipPlane3 || this._scene.clipPlane4 || this._scene.clipPlane5 || this._scene.clipPlane6) {\r\n ThinMaterialHelper.BindClipPlane(effect, this._scene);\r\n }\r\n }\r\n\r\n if (defines.indexOf(\"#define BILLBOARDMODE_ALL\") >= 0) {\r\n viewMatrix.invertToRef(TmpVectors.Matrix[0]);\r\n effect.setMatrix(\"invView\", TmpVectors.Matrix[0]);\r\n }\r\n\r\n if (this._vertexArrayObject !== undefined) {\r\n if (!this._vertexArrayObject) {\r\n this._vertexArrayObject = this._engine.recordVertexArrayObject(this._vertexBuffers, this._indexBuffer, effect);\r\n }\r\n\r\n this._engine.bindVertexArrayObject(this._vertexArrayObject, this._indexBuffer);\r\n } else {\r\n engine.bindBuffers(this._vertexBuffers, this._indexBuffer, effect);\r\n }\r\n\r\n // Log. depth\r\n if (this.useLogarithmicDepth && this._scene) {\r\n MaterialHelper.BindLogDepth(defines, effect, this._scene);\r\n }\r\n\r\n // image processing\r\n if (this._imageProcessingConfiguration && !this._imageProcessingConfiguration.applyByPostProcess) {\r\n this._imageProcessingConfiguration.bind(effect);\r\n }\r\n\r\n // Draw order\r\n switch (blendMode) {\r\n case ParticleSystem.BLENDMODE_ADD:\r\n engine.setAlphaMode(Constants.ALPHA_ADD);\r\n break;\r\n case ParticleSystem.BLENDMODE_ONEONE:\r\n engine.setAlphaMode(Constants.ALPHA_ONEONE);\r\n break;\r\n case ParticleSystem.BLENDMODE_STANDARD:\r\n engine.setAlphaMode(Constants.ALPHA_COMBINE);\r\n break;\r\n case ParticleSystem.BLENDMODE_MULTIPLY:\r\n engine.setAlphaMode(Constants.ALPHA_MULTIPLY);\r\n break;\r\n }\r\n\r\n if (this._onBeforeDrawParticlesObservable) {\r\n this._onBeforeDrawParticlesObservable.notifyObservers(effect);\r\n }\r\n\r\n if (this._useInstancing) {\r\n engine.drawArraysType(Constants.MATERIAL_TriangleStripDrawMode, 0, 4, this._particles.length);\r\n } else {\r\n engine.drawElementsType(Constants.MATERIAL_TriangleFillMode, 0, this._particles.length * 6);\r\n }\r\n\r\n return this._particles.length;\r\n }\r\n\r\n /**\r\n * Renders the particle system in its current state.\r\n * @returns the current number of particles\r\n */\r\n public render(): number {\r\n // Check\r\n if (!this.isReady() || !this._particles.length) {\r\n return 0;\r\n }\r\n\r\n const engine = this._engine as any;\r\n if (engine.setState) {\r\n engine.setState(false);\r\n\r\n if (this.forceDepthWrite) {\r\n engine.setDepthWrite(true);\r\n }\r\n }\r\n\r\n let outparticles = 0;\r\n\r\n if (this.blendMode === ParticleSystem.BLENDMODE_MULTIPLYADD) {\r\n outparticles = this._render(ParticleSystem.BLENDMODE_MULTIPLY) + this._render(ParticleSystem.BLENDMODE_ADD);\r\n } else {\r\n outparticles = this._render(this.blendMode);\r\n }\r\n\r\n this._engine.unbindInstanceAttributes();\r\n this._engine.setAlphaMode(Constants.ALPHA_DISABLE);\r\n\r\n return outparticles;\r\n }\r\n\r\n /**\r\n * Disposes the particle system and free the associated resources\r\n * @param disposeTexture defines if the particle texture must be disposed as well (true by default)\r\n */\r\n public dispose(disposeTexture = true): void {\r\n this.resetDrawCache();\r\n\r\n if (this._vertexBuffer) {\r\n this._vertexBuffer.dispose();\r\n this._vertexBuffer = null;\r\n }\r\n\r\n if (this._spriteBuffer) {\r\n this._spriteBuffer.dispose();\r\n this._spriteBuffer = null;\r\n }\r\n\r\n if (this._indexBuffer) {\r\n this._engine._releaseBuffer(this._indexBuffer);\r\n this._indexBuffer = null;\r\n }\r\n\r\n if (this._vertexArrayObject) {\r\n this._engine.releaseVertexArrayObject(this._vertexArrayObject);\r\n this._vertexArrayObject = null;\r\n }\r\n\r\n if (disposeTexture && this.particleTexture) {\r\n this.particleTexture.dispose();\r\n this.particleTexture = null;\r\n }\r\n\r\n if (disposeTexture && this.noiseTexture) {\r\n this.noiseTexture.dispose();\r\n this.noiseTexture = null;\r\n }\r\n\r\n if (this._rampGradientsTexture) {\r\n this._rampGradientsTexture.dispose();\r\n this._rampGradientsTexture = null;\r\n }\r\n\r\n this._removeFromRoot();\r\n\r\n if (this.subEmitters && !this._subEmitters) {\r\n this._prepareSubEmitterInternalArray();\r\n }\r\n\r\n if (this._subEmitters && this._subEmitters.length) {\r\n for (let index = 0; index < this._subEmitters.length; index++) {\r\n for (const subEmitter of this._subEmitters[index]) {\r\n subEmitter.dispose();\r\n }\r\n }\r\n\r\n this._subEmitters = [];\r\n this.subEmitters = [];\r\n }\r\n\r\n if (this._disposeEmitterOnDispose && this.emitter && (this.emitter as AbstractMesh).dispose) {\r\n (<AbstractMesh>this.emitter).dispose(true);\r\n }\r\n\r\n if (this._onBeforeDrawParticlesObservable) {\r\n this._onBeforeDrawParticlesObservable.clear();\r\n }\r\n\r\n // Remove from scene\r\n if (this._scene) {\r\n const index = this._scene.particleSystems.indexOf(this);\r\n if (index > -1) {\r\n this._scene.particleSystems.splice(index, 1);\r\n }\r\n\r\n this._scene._activeParticleSystems.dispose();\r\n }\r\n\r\n // Callback\r\n this.onDisposeObservable.notifyObservers(this);\r\n this.onDisposeObservable.clear();\r\n this.onStoppedObservable.clear();\r\n\r\n this.reset();\r\n }\r\n\r\n // Clone\r\n /**\r\n * Clones the particle system.\r\n * @param name The name of the cloned object\r\n * @param newEmitter The new emitter to use\r\n * @returns the cloned particle system\r\n */\r\n public clone(name: string, newEmitter: any): ParticleSystem {\r\n const custom = { ...this._customWrappers };\r\n let program: any = null;\r\n const engine = this._engine as Engine;\r\n if (engine.createEffectForParticles) {\r\n if (this.customShader != null) {\r\n program = this.customShader;\r\n const defines: string = program.shaderOptions.defines.length > 0 ? program.shaderOptions.defines.join(\"\\n\") : \"\";\r\n const effect = engine.createEffectForParticles(program.shaderPath.fragmentElement, program.shaderOptions.uniforms, program.shaderOptions.samplers, defines);\r\n if (!custom[0]) {\r\n this.setCustomEffect(effect, 0);\r\n } else {\r\n custom[0].effect = effect;\r\n }\r\n }\r\n }\r\n\r\n const serialization = this.serialize();\r\n const result = ParticleSystem.Parse(serialization, this._scene || this._engine, this._rootUrl);\r\n result.name = name;\r\n result.customShader = program;\r\n result._customWrappers = custom;\r\n\r\n if (newEmitter === undefined) {\r\n newEmitter = this.emitter;\r\n }\r\n\r\n if (this.noiseTexture) {\r\n result.noiseTexture = this.noiseTexture.clone();\r\n }\r\n\r\n result.emitter = newEmitter;\r\n if (!this.preventAutoStart) {\r\n result.start();\r\n }\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Serializes the particle system to a JSON object\r\n * @param serializeTexture defines if the texture must be serialized as well\r\n * @returns the JSON object\r\n */\r\n public serialize(serializeTexture = false): any {\r\n const serializationObject: any = {};\r\n\r\n ParticleSystem._Serialize(serializationObject, this, serializeTexture);\r\n\r\n serializationObject.textureMask = this.textureMask.asArray();\r\n serializationObject.customShader = this.customShader;\r\n serializationObject.preventAutoStart = this.preventAutoStart;\r\n\r\n // SubEmitters\r\n if (this.subEmitters) {\r\n serializationObject.subEmitters = [];\r\n\r\n if (!this._subEmitters) {\r\n this._prepareSubEmitterInternalArray();\r\n }\r\n\r\n for (const subs of this._subEmitters) {\r\n const cell = [];\r\n for (const sub of subs) {\r\n cell.push(sub.serialize(serializeTexture));\r\n }\r\n\r\n serializationObject.subEmitters.push(cell);\r\n }\r\n }\r\n\r\n return serializationObject;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public static _Serialize(serializationObject: any, particleSystem: IParticleSystem, serializeTexture: boolean) {\r\n serializationObject.name = particleSystem.name;\r\n serializationObject.id = particleSystem.id;\r\n\r\n serializationObject.capacity = particleSystem.getCapacity();\r\n\r\n serializationObject.disposeOnStop = particleSystem.disposeOnStop;\r\n serializationObject.manualEmitCount = particleSystem.manualEmitCount;\r\n\r\n // Emitter\r\n if ((<AbstractMesh>particleSystem.emitter).position) {\r\n const emitterMesh = <AbstractMesh>particleSystem.emitter;\r\n serializationObject.emitterId = emitterMesh.id;\r\n } else {\r\n const emitterPosition = <Vector3>particleSystem.emitter;\r\n serializationObject.emitter = emitterPosition.asArray();\r\n }\r\n\r\n // Emitter\r\n if (particleSystem.particleEmitterType) {\r\n serializationObject.particleEmitterType = particleSystem.particleEmitterType.serialize();\r\n }\r\n\r\n if (particleSystem.particleTexture) {\r\n if (serializeTexture) {\r\n serializationObject.texture = particleSystem.particleTexture.serialize();\r\n } else {\r\n serializationObject.textureName = particleSystem.particleTexture.name;\r\n serializationObject.invertY = !!(particleSystem.particleTexture as any)._invertY;\r\n }\r\n }\r\n\r\n serializationObject.isLocal = particleSystem.isLocal;\r\n\r\n // Animations\r\n SerializationHelper.AppendSerializedAnimations(particleSystem, serializationObject);\r\n serializationObject.beginAnimationOnStart = particleSystem.beginAnimationOnStart;\r\n serializationObject.beginAnimationFrom = particleSystem.beginAnimationFrom;\r\n serializationObject.beginAnimationTo = particleSystem.beginAnimationTo;\r\n serializationObject.beginAnimationLoop = particleSystem.beginAnimationLoop;\r\n\r\n // Particle system\r\n serializationObject.startDelay = particleSystem.startDelay;\r\n serializationObject.renderingGroupId = particleSystem.renderingGroupId;\r\n serializationObject.isBillboardBased = particleSystem.isBillboardBased;\r\n serializationObject.billboardMode = particleSystem.billboardMode;\r\n serializationObject.minAngularSpeed = particleSystem.minAngularSpeed;\r\n serializationObject.maxAngularSpeed = particleSystem.maxAngularSpeed;\r\n serializationObject.minSize = particleSystem.minSize;\r\n serializationObject.maxSize = particleSystem.maxSize;\r\n serializationObject.minScaleX = particleSystem.minScaleX;\r\n serializationObject.maxScaleX = particleSystem.maxScaleX;\r\n serializationObject.minScaleY = particleSystem.minScaleY;\r\n serializationObject.maxScaleY = particleSystem.maxScaleY;\r\n serializationObject.minEmitPower = particleSystem.minEmitPower;\r\n serializationObject.maxEmitPower = particleSystem.maxEmitPower;\r\n serializationObject.minLifeTime = particleSystem.minLifeTime;\r\n serializationObject.maxLifeTime = particleSystem.maxLifeTime;\r\n serializationObject.emitRate = particleSystem.emitRate;\r\n serializationObject.gravity = particleSystem.gravity.asArray();\r\n serializationObject.noiseStrength = particleSystem.noiseStrength.asArray();\r\n serializationObject.color1 = particleSystem.color1.asArray();\r\n serializationObject.color2 = particleSystem.color2.asArray();\r\n serializationObject.colorDead = particleSystem.colorDead.asArray();\r\n serializationObject.updateSpeed = particleSystem.updateSpeed;\r\n serializationObject.targetStopDuration = particleSystem.targetStopDuration;\r\n serializationObject.blendMode = particleSystem.blendMode;\r\n serializationObject.preWarmCycles = particleSystem.preWarmCycles;\r\n serializationObject.preWarmStepOffset = particleSystem.preWarmStepOffset;\r\n serializationObject.minInitialRotation = particleSystem.minInitialRotation;\r\n serializationObject.maxInitialRotation = particleSystem.maxInitialRotation;\r\n serializationObject.startSpriteCellID = particleSystem.startSpriteCellID;\r\n serializationObject.spriteCellLoop = particleSystem.spriteCellLoop;\r\n serializationObject.endSpriteCellID = particleSystem.endSpriteCellID;\r\n serializationObject.spriteCellChangeSpeed = particleSystem.spriteCellChangeSpeed;\r\n serializationObject.spriteCellWidth = particleSystem.spriteCellWidth;\r\n serializationObject.spriteCellHeight = particleSystem.spriteCellHeight;\r\n serializationObject.spriteRandomStartCell = particleSystem.spriteRandomStartCell;\r\n serializationObject.isAnimationSheetEnabled = particleSystem.isAnimationSheetEnabled;\r\n serializationObject.useLogarithmicDepth = particleSystem.useLogarithmicDepth;\r\n\r\n const colorGradients = particleSystem.getColorGradients();\r\n if (colorGradients) {\r\n serializationObject.colorGradients = [];\r\n for (const colorGradient of colorGradients) {\r\n const serializedGradient: any = {\r\n gradient: colorGradient.gradient,\r\n color1: colorGradient.color1.asArray(),\r\n };\r\n\r\n if (colorGradient.color2) {\r\n serializedGradient.color2 = colorGradient.color2.asArray();\r\n } else {\r\n serializedGradient.color2 = colorGradient.color1.asArray();\r\n }\r\n\r\n serializationObject.colorGradients.push(serializedGradient);\r\n }\r\n }\r\n\r\n const rampGradients = particleSystem.getRampGradients();\r\n if (rampGradients) {\r\n serializationObject.rampGradients = [];\r\n for (const rampGradient of rampGradients) {\r\n const serializedGradient: any = {\r\n gradient: rampGradient.gradient,\r\n color: rampGradient.color.asArray(),\r\n };\r\n\r\n serializationObject.rampGradients.push(serializedGradient);\r\n }\r\n serializationObject.useRampGradients = particleSystem.useRampGradients;\r\n }\r\n\r\n const colorRemapGradients = particleSystem.getColorRemapGradients();\r\n if (colorRemapGradients) {\r\n serializationObject.colorRemapGradients = [];\r\n for (const colorRemapGradient of colorRemapGradients) {\r\n const serializedGradient: any = {\r\n gradient: colorRemapGradient.gradient,\r\n factor1: colorRemapGradient.factor1,\r\n };\r\n\r\n if (colorRemapGradient.factor2 !== undefined) {\r\n serializedGradient.factor2 = colorRemapGradient.factor2;\r\n } else {\r\n serializedGradient.factor2 = colorRemapGradient.factor1;\r\n }\r\n\r\n serializationObject.colorRemapGradients.push(serializedGradient);\r\n }\r\n }\r\n\r\n const alphaRemapGradients = particleSystem.getAlphaRemapGradients();\r\n if (alphaRemapGradients) {\r\n serializationObject.alphaRemapGradients = [];\r\n for (const alphaRemapGradient of alphaRemapGradients) {\r\n const serializedGradient: any = {\r\n gradient: alphaRemapGradient.gradient,\r\n factor1: alphaRemapGradient.factor1,\r\n };\r\n\r\n if (alphaRemapGradient.factor2 !== undefined) {\r\n serializedGradient.factor2 = alphaRemapGradient.factor2;\r\n } else {\r\n serializedGradient.factor2 = alphaRemapGradient.factor1;\r\n }\r\n\r\n serializationObject.alphaRemapGradients.push(serializedGradient);\r\n }\r\n }\r\n\r\n const sizeGradients = particleSystem.getSizeGradients();\r\n if (sizeGradients) {\r\n serializationObject.sizeGradients = [];\r\n for (const sizeGradient of sizeGradients) {\r\n const serializedGradient: any = {\r\n gradient: sizeGradient.gradient,\r\n factor1: sizeGradient.factor1,\r\n };\r\n\r\n if (sizeGradient.factor2 !== undefined) {\r\n serializedGradient.factor2 = sizeGradient.factor2;\r\n } else {\r\n serializedGradient.factor2 = sizeGradient.factor1;\r\n }\r\n\r\n serializationObject.sizeGradients.push(serializedGradient);\r\n }\r\n }\r\n\r\n const angularSpeedGradients = particleSystem.getAngularSpeedGradients();\r\n if (angularSpeedGradients) {\r\n serializationObject.angularSpeedGradients = [];\r\n for (const angularSpeedGradient of angularSpeedGradients) {\r\n const serializedGradient: any = {\r\n gradient: angularSpeedGradient.gradient,\r\n factor1: angularSpeedGradient.factor1,\r\n };\r\n\r\n if (angularSpeedGradient.factor2 !== undefined) {\r\n serializedGradient.factor2 = angularSpeedGradient.factor2;\r\n } else {\r\n serializedGradient.factor2 = angularSpeedGradient.factor1;\r\n }\r\n\r\n serializationObject.angularSpeedGradients.push(serializedGradient);\r\n }\r\n }\r\n\r\n const velocityGradients = particleSystem.getVelocityGradients();\r\n if (velocityGradients) {\r\n serializationObject.velocityGradients = [];\r\n for (const velocityGradient of velocityGradients) {\r\n const serializedGradient: any = {\r\n gradient: velocityGradient.gradient,\r\n factor1: velocityGradient.factor1,\r\n };\r\n\r\n if (velocityGradient.factor2 !== undefined) {\r\n serializedGradient.factor2 = velocityGradient.factor2;\r\n } else {\r\n serializedGradient.factor2 = velocityGradient.factor1;\r\n }\r\n\r\n serializationObject.velocityGradients.push(serializedGradient);\r\n }\r\n }\r\n\r\n const dragGradients = particleSystem.getDragGradients();\r\n if (dragGradients) {\r\n serializationObject.dragGradients = [];\r\n for (const dragGradient of dragGradients) {\r\n const serializedGradient: any = {\r\n gradient: dragGradient.gradient,\r\n factor1: dragGradient.factor1,\r\n };\r\n\r\n if (dragGradient.factor2 !== undefined) {\r\n serializedGradient.factor2 = dragGradient.factor2;\r\n } else {\r\n serializedGradient.factor2 = dragGradient.factor1;\r\n }\r\n\r\n serializationObject.dragGradients.push(serializedGradient);\r\n }\r\n }\r\n\r\n const emitRateGradients = particleSystem.getEmitRateGradients();\r\n if (emitRateGradients) {\r\n serializationObject.emitRateGradients = [];\r\n for (const emitRateGradient of emitRateGradients) {\r\n const serializedGradient: any = {\r\n gradient: emitRateGradient.gradient,\r\n factor1: emitRateGradient.factor1,\r\n };\r\n\r\n if (emitRateGradient.factor2 !== undefined) {\r\n serializedGradient.factor2 = emitRateGradient.factor2;\r\n } else {\r\n serializedGradient.factor2 = emitRateGradient.factor1;\r\n }\r\n\r\n serializationObject.emitRateGradients.push(serializedGradient);\r\n }\r\n }\r\n\r\n const startSizeGradients = particleSystem.getStartSizeGradients();\r\n if (startSizeGradients) {\r\n serializationObject.startSizeGradients = [];\r\n for (const startSizeGradient of startSizeGradients) {\r\n const serializedGradient: any = {\r\n gradient: startSizeGradient.gradient,\r\n factor1: startSizeGradient.factor1,\r\n };\r\n\r\n if (startSizeGradient.factor2 !== undefined) {\r\n serializedGradient.factor2 = startSizeGradient.factor2;\r\n } else {\r\n serializedGradient.factor2 = startSizeGradient.factor1;\r\n }\r\n\r\n serializationObject.startSizeGradients.push(serializedGradient);\r\n }\r\n }\r\n\r\n const lifeTimeGradients = particleSystem.getLifeTimeGradients();\r\n if (lifeTimeGradients) {\r\n serializationObject.lifeTimeGradients = [];\r\n for (const lifeTimeGradient of lifeTimeGradients) {\r\n const serializedGradient: any = {\r\n gradient: lifeTimeGradient.gradient,\r\n factor1: lifeTimeGradient.factor1,\r\n };\r\n\r\n if (lifeTimeGradient.factor2 !== undefined) {\r\n serializedGradient.factor2 = lifeTimeGradient.factor2;\r\n } else {\r\n serializedGradient.factor2 = lifeTimeGradient.factor1;\r\n }\r\n\r\n serializationObject.lifeTimeGradients.push(serializedGradient);\r\n }\r\n }\r\n\r\n const limitVelocityGradients = particleSystem.getLimitVelocityGradients();\r\n if (limitVelocityGradients) {\r\n serializationObject.limitVelocityGradients = [];\r\n for (const limitVelocityGradient of limitVelocityGradients) {\r\n const serializedGradient: any = {\r\n gradient: limitVelocityGradient.gradient,\r\n factor1: limitVelocityGradient.factor1,\r\n };\r\n\r\n if (limitVelocityGradient.factor2 !== undefined) {\r\n serializedGradient.factor2 = limitVelocityGradient.factor2;\r\n } else {\r\n serializedGradient.factor2 = limitVelocityGradient.factor1;\r\n }\r\n\r\n serializationObject.limitVelocityGradients.push(serializedGradient);\r\n }\r\n\r\n serializationObject.limitVelocityDamping = particleSystem.limitVelocityDamping;\r\n }\r\n\r\n if (particleSystem.noiseTexture) {\r\n serializationObject.noiseTexture = particleSystem.noiseTexture.serialize();\r\n }\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public static _Parse(parsedParticleSystem: any, particleSystem: IParticleSystem, sceneOrEngine: Scene | ThinEngine, rootUrl: string) {\r\n let scene: Nullable<Scene>;\r\n\r\n if (sceneOrEngine instanceof ThinEngine) {\r\n scene = null;\r\n } else {\r\n scene = sceneOrEngine as Scene;\r\n }\r\n\r\n const internalClass = GetClass(\"BABYLON.Texture\");\r\n if (internalClass && scene) {\r\n // Texture\r\n if (parsedParticleSystem.texture) {\r\n particleSystem.particleTexture = internalClass.Parse(parsedParticleSystem.texture, scene, rootUrl) as BaseTexture;\r\n } else if (parsedParticleSystem.textureName) {\r\n particleSystem.particleTexture = new internalClass(\r\n rootUrl + parsedParticleSystem.textureName,\r\n scene,\r\n false,\r\n parsedParticleSystem.invertY !== undefined ? parsedParticleSystem.invertY : true\r\n );\r\n particleSystem.particleTexture!.name = parsedParticleSystem.textureName;\r\n }\r\n }\r\n\r\n // Emitter\r\n if (!parsedParticleSystem.emitterId && parsedParticleSystem.emitterId !== 0 && parsedParticleSystem.emitter === undefined) {\r\n particleSystem.emitter = Vector3.Zero();\r\n } else if (parsedParticleSystem.emitterId && scene) {\r\n particleSystem.emitter = scene.getLastMeshById(parsedParticleSystem.emitterId);\r\n } else {\r\n particleSystem.emitter = Vector3.FromArray(parsedParticleSystem.emitter);\r\n }\r\n\r\n particleSystem.isLocal = !!parsedParticleSystem.isLocal;\r\n\r\n // Misc.\r\n if (parsedParticleSystem.renderingGroupId !== undefined) {\r\n particleSystem.renderingGroupId = parsedParticleSystem.renderingGroupId;\r\n }\r\n\r\n if (parsedParticleSystem.isBillboardBased !== undefined) {\r\n particleSystem.isBillboardBased = parsedParticleSystem.isBillboardBased;\r\n }\r\n\r\n if (parsedParticleSystem.billboardMode !== undefined) {\r\n particleSystem.billboardMode = parsedParticleSystem.billboardMode;\r\n }\r\n\r\n if (parsedParticleSystem.useLogarithmicDepth !== undefined) {\r\n particleSystem.useLogarithmicDepth = parsedParticleSystem.useLogarithmicDepth;\r\n }\r\n\r\n // Animations\r\n if (parsedParticleSystem.animations) {\r\n for (let animationIndex = 0; animationIndex < parsedParticleSystem.animations.length; animationIndex++) {\r\n const parsedAnimation = parsedParticleSystem.animations[animationIndex];\r\n const internalClass = GetClass(\"BABYLON.Animation\");\r\n if (internalClass) {\r\n particleSystem.animations.push(internalClass.Parse(parsedAnimation));\r\n }\r\n }\r\n particleSystem.beginAnimationOnStart = parsedParticleSystem.beginAnimationOnStart;\r\n particleSystem.beginAnimationFrom = parsedParticleSystem.beginAnimationFrom;\r\n particleSystem.beginAnimationTo = parsedParticleSystem.beginAnimationTo;\r\n particleSystem.beginAnimationLoop = parsedParticleSystem.beginAnimationLoop;\r\n }\r\n\r\n if (parsedParticleSystem.autoAnimate && scene) {\r\n scene.beginAnimation(\r\n particleSystem,\r\n parsedParticleSystem.autoAnimateFrom,\r\n parsedParticleSystem.autoAnimateTo,\r\n parsedParticleSystem.autoAnimateLoop,\r\n parsedParticleSystem.autoAnimateSpeed || 1.0\r\n );\r\n }\r\n\r\n // Particle system\r\n particleSystem.startDelay = parsedParticleSystem.startDelay | 0;\r\n particleSystem.minAngularSpeed = parsedParticleSystem.minAngularSpeed;\r\n particleSystem.maxAngularSpeed = parsedParticleSystem.maxAngularSpeed;\r\n particleSystem.minSize = parsedParticleSystem.minSize;\r\n particleSystem.maxSize = parsedParticleSystem.maxSize;\r\n\r\n if (parsedParticleSystem.minScaleX) {\r\n particleSystem.minScaleX = parsedParticleSystem.minScaleX;\r\n particleSystem.maxScaleX = parsedParticleSystem.maxScaleX;\r\n particleSystem.minScaleY = parsedParticleSystem.minScaleY;\r\n particleSystem.maxScaleY = parsedParticleSystem.maxScaleY;\r\n }\r\n\r\n if (parsedParticleSystem.preWarmCycles !== undefined) {\r\n particleSystem.preWarmCycles = parsedParticleSystem.preWarmCycles;\r\n particleSystem.preWarmStepOffset = parsedParticleSystem.preWarmStepOffset;\r\n }\r\n\r\n if (parsedParticleSystem.minInitialRotation !== undefined) {\r\n particleSystem.minInitialRotation = parsedParticleSystem.minInitialRotation;\r\n particleSystem.maxInitialRotation = parsedParticleSystem.maxInitialRotation;\r\n }\r\n\r\n particleSystem.minLifeTime = parsedParticleSystem.minLifeTime;\r\n particleSystem.maxLifeTime = parsedParticleSystem.maxLifeTime;\r\n particleSystem.minEmitPower = parsedParticleSystem.minEmitPower;\r\n particleSystem.maxEmitPower = parsedParticleSystem.maxEmitPower;\r\n particleSystem.emitRate = parsedParticleSystem.emitRate;\r\n particleSystem.gravity = Vector3.FromArray(parsedParticleSystem.gravity);\r\n if (parsedParticleSystem.noiseStrength) {\r\n particleSystem.noiseStrength = Vector3.FromArray(parsedParticleSystem.noiseStrength);\r\n }\r\n particleSystem.color1 = Color4.FromArray(parsedParticleSystem.color1);\r\n particleSystem.color2 = Color4.FromArray(parsedParticleSystem.color2);\r\n particleSystem.colorDead = Color4.FromArray(parsedParticleSystem.colorDead);\r\n particleSystem.updateSpeed = parsedParticleSystem.updateSpeed;\r\n particleSystem.targetStopDuration = parsedParticleSystem.targetStopDuration;\r\n particleSystem.blendMode = parsedParticleSystem.blendMode;\r\n\r\n if (parsedParticleSystem.colorGradients) {\r\n for (const colorGradient of parsedParticleSystem.colorGradients) {\r\n particleSystem.addColorGradient(\r\n colorGradient.gradient,\r\n Color4.FromArray(colorGradient.color1),\r\n colorGradient.color2 ? Color4.FromArray(colorGradient.color2) : undefined\r\n );\r\n }\r\n }\r\n\r\n if (parsedParticleSystem.rampGradients) {\r\n for (const rampGradient of parsedParticleSystem.rampGradients) {\r\n particleSystem.addRampGradient(rampGradient.gradient, Color3.FromArray(rampGradient.color));\r\n }\r\n particleSystem.useRampGradients = parsedParticleSystem.useRampGradients;\r\n }\r\n\r\n if (parsedParticleSystem.colorRemapGradients) {\r\n for (const colorRemapGradient of parsedParticleSystem.colorRemapGradients) {\r\n particleSystem.addColorRemapGradient(\r\n colorRemapGradient.gradient,\r\n colorRemapGradient.factor1 !== undefined ? colorRemapGradient.factor1 : colorRemapGradient.factor,\r\n colorRemapGradient.factor2\r\n );\r\n }\r\n }\r\n\r\n if (parsedParticleSystem.alphaRemapGradients) {\r\n for (const alphaRemapGradient of parsedParticleSystem.alphaRemapGradients) {\r\n particleSystem.addAlphaRemapGradient(\r\n alphaRemapGradient.gradient,\r\n alphaRemapGradient.factor1 !== undefined ? alphaRemapGradient.factor1 : alphaRemapGradient.factor,\r\n alphaRemapGradient.factor2\r\n );\r\n }\r\n }\r\n\r\n if (parsedParticleSystem.sizeGradients) {\r\n for (const sizeGradient of parsedParticleSystem.sizeGradients) {\r\n particleSystem.addSizeGradient(sizeGradient.gradient, sizeGradient.factor1 !== undefined ? sizeGradient.factor1 : sizeGradient.factor, sizeGradient.factor2);\r\n }\r\n }\r\n\r\n if (parsedParticleSystem.angularSpeedGradients) {\r\n for (const angularSpeedGradient of parsedParticleSystem.angularSpeedGradients) {\r\n particleSystem.addAngularSpeedGradient(\r\n angularSpeedGradient.gradient,\r\n angularSpeedGradient.factor1 !== undefined ? angularSpeedGradient.factor1 : angularSpeedGradient.factor,\r\n angularSpeedGradient.factor2\r\n );\r\n }\r\n }\r\n\r\n if (parsedParticleSystem.velocityGradients) {\r\n for (const velocityGradient of parsedParticleSystem.velocityGradients) {\r\n particleSystem.addVelocityGradient(\r\n velocityGradient.gradient,\r\n velocityGradient.factor1 !== undefined ? velocityGradient.factor1 : velocityGradient.factor,\r\n velocityGradient.factor2\r\n );\r\n }\r\n }\r\n\r\n if (parsedParticleSystem.dragGradients) {\r\n for (const dragGradient of parsedParticleSystem.dragGradients) {\r\n particleSystem.addDragGradient(dragGradient.gradient, dragGradient.factor1 !== undefined ? dragGradient.factor1 : dragGradient.factor, dragGradient.factor2);\r\n }\r\n }\r\n\r\n if (parsedParticleSystem.emitRateGradients) {\r\n for (const emitRateGradient of parsedParticleSystem.emitRateGradients) {\r\n particleSystem.addEmitRateGradient(\r\n emitRateGradient.gradient,\r\n emitRateGradient.factor1 !== undefined ? emitRateGradient.factor1 : emitRateGradient.factor,\r\n emitRateGradient.factor2\r\n );\r\n }\r\n }\r\n\r\n if (parsedParticleSystem.startSizeGradients) {\r\n for (const startSizeGradient of parsedParticleSystem.startSizeGradients) {\r\n particleSystem.addStartSizeGradient(\r\n startSizeGradient.gradient,\r\n startSizeGradient.factor1 !== undefined ? startSizeGradient.factor1 : startSizeGradient.factor,\r\n startSizeGradient.factor2\r\n );\r\n }\r\n }\r\n\r\n if (parsedParticleSystem.lifeTimeGradients) {\r\n for (const lifeTimeGradient of parsedParticleSystem.lifeTimeGradients) {\r\n particleSystem.addLifeTimeGradient(\r\n lifeTimeGradient.gradient,\r\n lifeTimeGradient.factor1 !== undefined ? lifeTimeGradient.factor1 : lifeTimeGradient.factor,\r\n lifeTimeGradient.factor2\r\n );\r\n }\r\n }\r\n\r\n if (parsedParticleSystem.limitVelocityGradients) {\r\n for (const limitVelocityGradient of parsedParticleSystem.limitVelocityGradients) {\r\n particleSystem.addLimitVelocityGradient(\r\n limitVelocityGradient.gradient,\r\n limitVelocityGradient.factor1 !== undefined ? limitVelocityGradient.factor1 : limitVelocityGradient.factor,\r\n limitVelocityGradient.factor2\r\n );\r\n }\r\n particleSystem.limitVelocityDamping = parsedParticleSystem.limitVelocityDamping;\r\n }\r\n\r\n if (parsedParticleSystem.noiseTexture && scene) {\r\n const internalClass = GetClass(\"BABYLON.ProceduralTexture\");\r\n particleSystem.noiseTexture = internalClass.Parse(parsedParticleSystem.noiseTexture, scene, rootUrl);\r\n }\r\n\r\n // Emitter\r\n let emitterType: IParticleEmitterType;\r\n if (parsedParticleSystem.particleEmitterType) {\r\n switch (parsedParticleSystem.particleEmitterType.type) {\r\n case \"SphereParticleEmitter\":\r\n emitterType = new SphereParticleEmitter();\r\n break;\r\n case \"SphereDirectedParticleEmitter\":\r\n emitterType = new SphereDirectedParticleEmitter();\r\n break;\r\n case \"ConeEmitter\":\r\n case \"ConeParticleEmitter\":\r\n emitterType = new ConeParticleEmitter();\r\n break;\r\n case \"CylinderParticleEmitter\":\r\n emitterType = new CylinderParticleEmitter();\r\n break;\r\n case \"CylinderDirectedParticleEmitter\":\r\n emitterType = new CylinderDirectedParticleEmitter();\r\n break;\r\n case \"HemisphericParticleEmitter\":\r\n emitterType = new HemisphericParticleEmitter();\r\n break;\r\n case \"PointParticleEmitter\":\r\n emitterType = new PointParticleEmitter();\r\n break;\r\n case \"MeshParticleEmitter\":\r\n emitterType = new MeshParticleEmitter();\r\n break;\r\n case \"BoxEmitter\":\r\n case \"BoxParticleEmitter\":\r\n default:\r\n emitterType = new BoxParticleEmitter();\r\n break;\r\n }\r\n\r\n emitterType.parse(parsedParticleSystem.particleEmitterType, scene);\r\n } else {\r\n emitterType = new BoxParticleEmitter();\r\n emitterType.parse(parsedParticleSystem, scene);\r\n }\r\n particleSystem.particleEmitterType = emitterType;\r\n\r\n // Animation sheet\r\n particleSystem.startSpriteCellID = parsedParticleSystem.startSpriteCellID;\r\n particleSystem.endSpriteCellID = parsedParticleSystem.endSpriteCellID;\r\n particleSystem.spriteCellLoop = parsedParticleSystem.spriteCellLoop ?? true;\r\n particleSystem.spriteCellWidth = parsedParticleSystem.spriteCellWidth;\r\n particleSystem.spriteCellHeight = parsedParticleSystem.spriteCellHeight;\r\n particleSystem.spriteCellChangeSpeed = parsedParticleSystem.spriteCellChangeSpeed;\r\n particleSystem.spriteRandomStartCell = parsedParticleSystem.spriteRandomStartCell;\r\n\r\n particleSystem.disposeOnStop = parsedParticleSystem.disposeOnStop ?? false;\r\n particleSystem.manualEmitCount = parsedParticleSystem.manualEmitCount ?? -1;\r\n }\r\n\r\n /**\r\n * Parses a JSON object to create a particle system.\r\n * @param parsedParticleSystem The JSON object to parse\r\n * @param sceneOrEngine The scene or the engine to create the particle system in\r\n * @param rootUrl The root url to use to load external dependencies like texture\r\n * @param doNotStart Ignore the preventAutoStart attribute and does not start\r\n * @param capacity defines the system capacity (if null or undefined the sotred capacity will be used)\r\n * @returns the Parsed particle system\r\n */\r\n public static Parse(parsedParticleSystem: any, sceneOrEngine: Scene | ThinEngine, rootUrl: string, doNotStart = false, capacity?: number): ParticleSystem {\r\n const name = parsedParticleSystem.name;\r\n let custom: Nullable<Effect> = null;\r\n let program: any = null;\r\n let engine: ThinEngine;\r\n let scene: Nullable<Scene>;\r\n\r\n if (sceneOrEngine instanceof ThinEngine) {\r\n engine = sceneOrEngine;\r\n } else {\r\n scene = sceneOrEngine as Scene;\r\n engine = scene.getEngine();\r\n }\r\n\r\n if (parsedParticleSystem.customShader && (engine as any).createEffectForParticles) {\r\n program = parsedParticleSystem.customShader;\r\n const defines: string = program.shaderOptions.defines.length > 0 ? program.shaderOptions.defines.join(\"\\n\") : \"\";\r\n custom = (engine as any).createEffectForParticles(program.shaderPath.fragmentElement, program.shaderOptions.uniforms, program.shaderOptions.samplers, defines);\r\n }\r\n const particleSystem = new ParticleSystem(name, capacity || parsedParticleSystem.capacity, sceneOrEngine, custom, parsedParticleSystem.isAnimationSheetEnabled);\r\n particleSystem.customShader = program;\r\n particleSystem._rootUrl = rootUrl;\r\n\r\n if (parsedParticleSystem.id) {\r\n particleSystem.id = parsedParticleSystem.id;\r\n }\r\n\r\n // SubEmitters\r\n if (parsedParticleSystem.subEmitters) {\r\n particleSystem.subEmitters = [];\r\n for (const cell of parsedParticleSystem.subEmitters) {\r\n const cellArray = [];\r\n for (const sub of cell) {\r\n cellArray.push(SubEmitter.Parse(sub, sceneOrEngine, rootUrl));\r\n }\r\n\r\n particleSystem.subEmitters.push(cellArray);\r\n }\r\n }\r\n\r\n ParticleSystem._Parse(parsedParticleSystem, particleSystem, sceneOrEngine, rootUrl);\r\n\r\n if (parsedParticleSystem.textureMask) {\r\n particleSystem.textureMask = Color4.FromArray(parsedParticleSystem.textureMask);\r\n }\r\n\r\n // Auto start\r\n if (parsedParticleSystem.preventAutoStart) {\r\n particleSystem.preventAutoStart = parsedParticleSystem.preventAutoStart;\r\n }\r\n\r\n if (!doNotStart && !particleSystem.preventAutoStart) {\r\n particleSystem.start();\r\n }\r\n\r\n return particleSystem;\r\n }\r\n}\r\n\r\nSubEmitter._ParseParticleSystem = ParticleSystem.Parse;\r\n"]}
|