@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.
Files changed (1729) hide show
  1. package/Actions/action.d.ts +12 -21
  2. package/Actions/action.js +8 -17
  3. package/Actions/action.js.map +1 -1
  4. package/Actions/actionManager.d.ts +2 -5
  5. package/Actions/actionManager.js +2 -5
  6. package/Actions/actionManager.js.map +1 -1
  7. package/Actions/condition.d.ts +9 -50
  8. package/Actions/condition.js +3 -26
  9. package/Actions/condition.js.map +1 -1
  10. package/Actions/directActions.d.ts +7 -7
  11. package/Actions/directActions.js +7 -7
  12. package/Actions/directActions.js.map +1 -1
  13. package/Actions/directAudioActions.d.ts +2 -2
  14. package/Actions/directAudioActions.js +2 -2
  15. package/Actions/directAudioActions.js.map +1 -1
  16. package/Actions/interpolateValueAction.d.ts +1 -1
  17. package/Actions/interpolateValueAction.js +1 -1
  18. package/Actions/interpolateValueAction.js.map +1 -1
  19. package/Animations/animatable.d.ts +5 -6
  20. package/Animations/animatable.js +1 -2
  21. package/Animations/animatable.js.map +1 -1
  22. package/Animations/animation.d.ts +6 -20
  23. package/Animations/animation.js +6 -20
  24. package/Animations/animation.js.map +1 -1
  25. package/Animations/animationEvent.d.ts +1 -1
  26. package/Animations/animationEvent.js +1 -1
  27. package/Animations/animationEvent.js.map +1 -1
  28. package/Animations/animationGroup.d.ts +1 -1
  29. package/Animations/animationGroup.js +1 -1
  30. package/Animations/animationGroup.js.map +1 -1
  31. package/Animations/easing.d.ts +13 -26
  32. package/Animations/easing.js +13 -26
  33. package/Animations/easing.js.map +1 -1
  34. package/Animations/runtimeAnimation.d.ts +3 -4
  35. package/Animations/runtimeAnimation.js +1 -2
  36. package/Animations/runtimeAnimation.js.map +1 -1
  37. package/Audio/audioEngine.js +1 -2
  38. package/Audio/audioEngine.js.map +1 -1
  39. package/Audio/audioSceneComponent.d.ts +1 -1
  40. package/Audio/audioSceneComponent.js.map +1 -1
  41. package/Audio/sound.d.ts +3 -4
  42. package/Audio/sound.js +2 -3
  43. package/Audio/sound.js.map +1 -1
  44. package/BakedVertexAnimation/bakedVertexAnimationManager.d.ts +1 -1
  45. package/BakedVertexAnimation/bakedVertexAnimationManager.js +1 -1
  46. package/BakedVertexAnimation/bakedVertexAnimationManager.js.map +1 -1
  47. package/Behaviors/Meshes/attachToBoxBehavior.js +1 -1
  48. package/Behaviors/Meshes/attachToBoxBehavior.js.map +1 -1
  49. package/Behaviors/Meshes/baseSixDofDragBehavior.js +5 -5
  50. package/Behaviors/Meshes/baseSixDofDragBehavior.js.map +1 -1
  51. package/Behaviors/Meshes/followBehavior.d.ts +1 -1
  52. package/Behaviors/Meshes/followBehavior.js +1 -1
  53. package/Behaviors/Meshes/followBehavior.js.map +1 -1
  54. package/Behaviors/Meshes/pointerDragBehavior.d.ts +1 -1
  55. package/Behaviors/Meshes/pointerDragBehavior.js +1 -1
  56. package/Behaviors/Meshes/pointerDragBehavior.js.map +1 -1
  57. package/Bones/bone.d.ts +7 -9
  58. package/Bones/bone.js +7 -9
  59. package/Bones/bone.js.map +1 -1
  60. package/Bones/skeleton.d.ts +6 -8
  61. package/Bones/skeleton.js +6 -8
  62. package/Bones/skeleton.js.map +1 -1
  63. package/Buffers/buffer.d.ts +6 -6
  64. package/Buffers/buffer.js +14 -16
  65. package/Buffers/buffer.js.map +1 -1
  66. package/Buffers/storageBuffer.d.ts +1 -1
  67. package/Buffers/storageBuffer.js +1 -1
  68. package/Buffers/storageBuffer.js.map +1 -1
  69. package/Cameras/Inputs/arcRotateCameraVRDeviceOrientationInput.d.ts +1 -2
  70. package/Cameras/Inputs/arcRotateCameraVRDeviceOrientationInput.js +1 -2
  71. package/Cameras/Inputs/arcRotateCameraVRDeviceOrientationInput.js.map +1 -1
  72. package/Cameras/Inputs/flyCameraKeyboardInput.d.ts +1 -1
  73. package/Cameras/Inputs/flyCameraKeyboardInput.js +1 -1
  74. package/Cameras/Inputs/flyCameraKeyboardInput.js.map +1 -1
  75. package/Cameras/Inputs/freeCameraDeviceOrientationInput.d.ts +6 -3
  76. package/Cameras/Inputs/freeCameraDeviceOrientationInput.js +18 -5
  77. package/Cameras/Inputs/freeCameraDeviceOrientationInput.js.map +1 -1
  78. package/Cameras/Inputs/freeCameraKeyboardMoveInput.d.ts +1 -1
  79. package/Cameras/Inputs/freeCameraKeyboardMoveInput.js +1 -1
  80. package/Cameras/Inputs/freeCameraKeyboardMoveInput.js.map +1 -1
  81. package/Cameras/Inputs/freeCameraMouseInput.d.ts +1 -1
  82. package/Cameras/Inputs/freeCameraMouseInput.js +1 -1
  83. package/Cameras/Inputs/freeCameraMouseInput.js.map +1 -1
  84. package/Cameras/RigModes/stereoscopicAnaglyphRigMode.d.ts +1 -2
  85. package/Cameras/RigModes/stereoscopicAnaglyphRigMode.js +1 -2
  86. package/Cameras/RigModes/stereoscopicAnaglyphRigMode.js.map +1 -1
  87. package/Cameras/RigModes/stereoscopicRigMode.d.ts +1 -2
  88. package/Cameras/RigModes/stereoscopicRigMode.js +1 -2
  89. package/Cameras/RigModes/stereoscopicRigMode.js.map +1 -1
  90. package/Cameras/RigModes/vrRigMode.d.ts +1 -3
  91. package/Cameras/RigModes/vrRigMode.js +1 -3
  92. package/Cameras/RigModes/vrRigMode.js.map +1 -1
  93. package/Cameras/RigModes/webVRRigMode.d.ts +1 -3
  94. package/Cameras/RigModes/webVRRigMode.js +1 -3
  95. package/Cameras/RigModes/webVRRigMode.js.map +1 -1
  96. package/Cameras/Stereoscopic/stereoscopicScreenUniversalCamera.d.ts +2 -3
  97. package/Cameras/Stereoscopic/stereoscopicScreenUniversalCamera.js +2 -3
  98. package/Cameras/Stereoscopic/stereoscopicScreenUniversalCamera.js.map +1 -1
  99. package/Cameras/VR/vrCameraMetrics.d.ts +4 -4
  100. package/Cameras/VR/vrCameraMetrics.js +4 -4
  101. package/Cameras/VR/vrCameraMetrics.js.map +1 -1
  102. package/Cameras/VR/vrExperienceHelper.js +20 -48
  103. package/Cameras/VR/vrExperienceHelper.js.map +1 -1
  104. package/Cameras/VR/webVRCamera.d.ts +9 -9
  105. package/Cameras/VR/webVRCamera.js +9 -9
  106. package/Cameras/VR/webVRCamera.js.map +1 -1
  107. package/Cameras/arcRotateCamera.d.ts +11 -12
  108. package/Cameras/arcRotateCamera.js +8 -9
  109. package/Cameras/arcRotateCamera.js.map +1 -1
  110. package/Cameras/camera.d.ts +29 -38
  111. package/Cameras/camera.js +27 -36
  112. package/Cameras/camera.js.map +1 -1
  113. package/Cameras/deviceOrientationCamera.d.ts +1 -1
  114. package/Cameras/deviceOrientationCamera.js +1 -1
  115. package/Cameras/deviceOrientationCamera.js.map +1 -1
  116. package/Cameras/flyCamera.d.ts +8 -12
  117. package/Cameras/flyCamera.js +6 -10
  118. package/Cameras/flyCamera.js.map +1 -1
  119. package/Cameras/followCamera.d.ts +2 -2
  120. package/Cameras/followCamera.js +2 -2
  121. package/Cameras/followCamera.js.map +1 -1
  122. package/Cameras/freeCamera.d.ts +6 -7
  123. package/Cameras/freeCamera.js +4 -5
  124. package/Cameras/freeCamera.js.map +1 -1
  125. package/Cameras/freeCameraInputsManager.d.ts +2 -2
  126. package/Cameras/freeCameraInputsManager.js +2 -2
  127. package/Cameras/freeCameraInputsManager.js.map +1 -1
  128. package/Cameras/targetCamera.d.ts +21 -24
  129. package/Cameras/targetCamera.js +20 -23
  130. package/Cameras/targetCamera.js.map +1 -1
  131. package/Cameras/touchCamera.d.ts +1 -1
  132. package/Cameras/touchCamera.js +1 -1
  133. package/Cameras/touchCamera.js.map +1 -1
  134. package/Collisions/collider.d.ts +13 -44
  135. package/Collisions/collider.js +10 -41
  136. package/Collisions/collider.js.map +1 -1
  137. package/Collisions/collisionCoordinator.d.ts +2 -2
  138. package/Collisions/collisionCoordinator.js +1 -1
  139. package/Collisions/collisionCoordinator.js.map +1 -1
  140. package/Collisions/intersectionInfo.d.ts +1 -1
  141. package/Collisions/intersectionInfo.js +1 -1
  142. package/Collisions/intersectionInfo.js.map +1 -1
  143. package/Collisions/meshCollisionData.d.ts +1 -1
  144. package/Collisions/meshCollisionData.js +1 -1
  145. package/Collisions/meshCollisionData.js.map +1 -1
  146. package/Collisions/pickingInfo.d.ts +1 -1
  147. package/Collisions/pickingInfo.js +1 -1
  148. package/Collisions/pickingInfo.js.map +1 -1
  149. package/Compute/IComputeContext.d.ts +1 -1
  150. package/Compute/IComputeContext.js.map +1 -1
  151. package/Compute/IComputePipelineContext.d.ts +2 -2
  152. package/Compute/IComputePipelineContext.js.map +1 -1
  153. package/Compute/computeEffect.d.ts +5 -5
  154. package/Compute/computeEffect.js +5 -5
  155. package/Compute/computeEffect.js.map +1 -1
  156. package/Culling/Octrees/octreeBlock.d.ts +1 -9
  157. package/Culling/Octrees/octreeBlock.js +1 -9
  158. package/Culling/Octrees/octreeBlock.js.map +1 -1
  159. package/Culling/Octrees/octreeSceneComponent.d.ts +2 -2
  160. package/Culling/Octrees/octreeSceneComponent.js +1 -5
  161. package/Culling/Octrees/octreeSceneComponent.js.map +1 -1
  162. package/Culling/boundingBox.d.ts +4 -5
  163. package/Culling/boundingBox.js +3 -4
  164. package/Culling/boundingBox.js.map +1 -1
  165. package/Culling/boundingInfo.d.ts +1 -2
  166. package/Culling/boundingInfo.js +1 -2
  167. package/Culling/boundingInfo.js.map +1 -1
  168. package/Culling/boundingSphere.d.ts +1 -2
  169. package/Culling/boundingSphere.js +1 -2
  170. package/Culling/boundingSphere.js.map +1 -1
  171. package/Culling/ray.d.ts +6 -6
  172. package/Culling/ray.js.map +1 -1
  173. package/Debug/debugLayer.d.ts +1 -1
  174. package/Debug/debugLayer.js.map +1 -1
  175. package/Debug/physicsViewer.d.ts +6 -6
  176. package/Debug/physicsViewer.js +4 -4
  177. package/Debug/physicsViewer.js.map +1 -1
  178. package/DeviceInput/InputDevices/deviceEnums.d.ts +1 -1
  179. package/DeviceInput/InputDevices/deviceEnums.js +1 -1
  180. package/DeviceInput/InputDevices/deviceEnums.js.map +1 -1
  181. package/DeviceInput/InputDevices/deviceSourceManager.d.ts +3 -3
  182. package/DeviceInput/InputDevices/deviceSourceManager.js +3 -3
  183. package/DeviceInput/InputDevices/deviceSourceManager.js.map +1 -1
  184. package/DeviceInput/internalDeviceSourceManager.d.ts +3 -3
  185. package/DeviceInput/internalDeviceSourceManager.js +1 -1
  186. package/DeviceInput/internalDeviceSourceManager.js.map +1 -1
  187. package/DeviceInput/nativeDeviceInputSystem.d.ts +1 -1
  188. package/DeviceInput/nativeDeviceInputSystem.js +1 -1
  189. package/DeviceInput/nativeDeviceInputSystem.js.map +1 -1
  190. package/DeviceInput/webDeviceInputSystem.d.ts +1 -1
  191. package/DeviceInput/webDeviceInputSystem.js +1 -19
  192. package/DeviceInput/webDeviceInputSystem.js.map +1 -1
  193. package/Engines/Extensions/engine.computeShader.d.ts +7 -7
  194. package/Engines/Extensions/engine.computeShader.js +1 -1
  195. package/Engines/Extensions/engine.computeShader.js.map +1 -1
  196. package/Engines/Extensions/engine.cubeTexture.d.ts +6 -6
  197. package/Engines/Extensions/engine.cubeTexture.js +3 -2
  198. package/Engines/Extensions/engine.cubeTexture.js.map +1 -1
  199. package/Engines/Extensions/engine.debugging.d.ts +4 -4
  200. package/Engines/Extensions/engine.debugging.js.map +1 -1
  201. package/Engines/Extensions/engine.multiview.d.ts +9 -9
  202. package/Engines/Extensions/engine.multiview.js.map +1 -1
  203. package/Engines/Extensions/engine.query.d.ts +22 -22
  204. package/Engines/Extensions/engine.query.js +8 -8
  205. package/Engines/Extensions/engine.query.js.map +1 -1
  206. package/Engines/Extensions/engine.rawTexture.js +3 -7
  207. package/Engines/Extensions/engine.rawTexture.js.map +1 -1
  208. package/Engines/Extensions/engine.readTexture.d.ts +2 -2
  209. package/Engines/Extensions/engine.readTexture.js.map +1 -1
  210. package/Engines/Extensions/engine.renderTarget.d.ts +2 -2
  211. package/Engines/Extensions/engine.renderTarget.js.map +1 -1
  212. package/Engines/Extensions/engine.textureSelector.d.ts +2 -2
  213. package/Engines/Extensions/engine.textureSelector.js.map +1 -1
  214. package/Engines/Extensions/engine.transformFeedback.d.ts +1 -1
  215. package/Engines/Extensions/engine.transformFeedback.js +1 -1
  216. package/Engines/Extensions/engine.transformFeedback.js.map +1 -1
  217. package/Engines/Extensions/engine.views.d.ts +2 -2
  218. package/Engines/Extensions/engine.views.js.map +1 -1
  219. package/Engines/Extensions/engine.webVR.d.ts +13 -13
  220. package/Engines/Extensions/engine.webVR.js.map +1 -1
  221. package/Engines/IDrawContext.d.ts +1 -1
  222. package/Engines/IDrawContext.js.map +1 -1
  223. package/Engines/IMaterialContext.d.ts +1 -1
  224. package/Engines/IMaterialContext.js.map +1 -1
  225. package/Engines/IPipelineContext.d.ts +5 -5
  226. package/Engines/IPipelineContext.js.map +1 -1
  227. package/Engines/Native/nativeDataStream.d.ts +2 -2
  228. package/Engines/Native/nativeDataStream.js +1 -1
  229. package/Engines/Native/nativeDataStream.js.map +1 -1
  230. package/Engines/Native/nativeInterfaces.d.ts +10 -10
  231. package/Engines/Native/nativeInterfaces.js.map +1 -1
  232. package/Engines/Processors/Expressions/Operators/shaderDefineAndOperator.d.ts +1 -1
  233. package/Engines/Processors/Expressions/Operators/shaderDefineAndOperator.js +1 -1
  234. package/Engines/Processors/Expressions/Operators/shaderDefineAndOperator.js.map +1 -1
  235. package/Engines/Processors/Expressions/Operators/shaderDefineArithmeticOperator.d.ts +1 -1
  236. package/Engines/Processors/Expressions/Operators/shaderDefineArithmeticOperator.js +1 -1
  237. package/Engines/Processors/Expressions/Operators/shaderDefineArithmeticOperator.js.map +1 -1
  238. package/Engines/Processors/Expressions/Operators/shaderDefineIsDefinedOperator.d.ts +1 -1
  239. package/Engines/Processors/Expressions/Operators/shaderDefineIsDefinedOperator.js +1 -1
  240. package/Engines/Processors/Expressions/Operators/shaderDefineIsDefinedOperator.js.map +1 -1
  241. package/Engines/Processors/Expressions/Operators/shaderDefineOrOperator.d.ts +1 -1
  242. package/Engines/Processors/Expressions/Operators/shaderDefineOrOperator.js +1 -1
  243. package/Engines/Processors/Expressions/Operators/shaderDefineOrOperator.js.map +1 -1
  244. package/Engines/Processors/Expressions/shaderDefineExpression.d.ts +1 -1
  245. package/Engines/Processors/Expressions/shaderDefineExpression.js +1 -1
  246. package/Engines/Processors/Expressions/shaderDefineExpression.js.map +1 -1
  247. package/Engines/Processors/iShaderProcessor.d.ts +1 -1
  248. package/Engines/Processors/iShaderProcessor.js.map +1 -1
  249. package/Engines/Processors/shaderCodeConditionNode.d.ts +1 -1
  250. package/Engines/Processors/shaderCodeConditionNode.js +1 -1
  251. package/Engines/Processors/shaderCodeConditionNode.js.map +1 -1
  252. package/Engines/Processors/shaderCodeCursor.d.ts +1 -1
  253. package/Engines/Processors/shaderCodeCursor.js +1 -1
  254. package/Engines/Processors/shaderCodeCursor.js.map +1 -1
  255. package/Engines/Processors/shaderCodeNode.d.ts +1 -1
  256. package/Engines/Processors/shaderCodeNode.js +1 -1
  257. package/Engines/Processors/shaderCodeNode.js.map +1 -1
  258. package/Engines/Processors/shaderCodeTestNode.d.ts +1 -1
  259. package/Engines/Processors/shaderCodeTestNode.js +1 -1
  260. package/Engines/Processors/shaderCodeTestNode.js.map +1 -1
  261. package/Engines/Processors/shaderProcessingOptions.d.ts +2 -2
  262. package/Engines/Processors/shaderProcessingOptions.js.map +1 -1
  263. package/Engines/Processors/shaderProcessor.d.ts +2 -2
  264. package/Engines/Processors/shaderProcessor.js +2 -2
  265. package/Engines/Processors/shaderProcessor.js.map +1 -1
  266. package/Engines/WebGL/webGL2ShaderProcessors.d.ts +1 -1
  267. package/Engines/WebGL/webGL2ShaderProcessors.js +1 -1
  268. package/Engines/WebGL/webGL2ShaderProcessors.js.map +1 -1
  269. package/Engines/WebGL/webGLHardwareTexture.d.ts +1 -1
  270. package/Engines/WebGL/webGLHardwareTexture.js +1 -1
  271. package/Engines/WebGL/webGLHardwareTexture.js.map +1 -1
  272. package/Engines/WebGL/webGLPipelineContext.d.ts +6 -25
  273. package/Engines/WebGL/webGLPipelineContext.js +6 -25
  274. package/Engines/WebGL/webGLPipelineContext.js.map +1 -1
  275. package/Engines/WebGL/webGLRenderTargetWrapper.d.ts +2 -2
  276. package/Engines/WebGL/webGLRenderTargetWrapper.js +2 -2
  277. package/Engines/WebGL/webGLRenderTargetWrapper.js.map +1 -1
  278. package/Engines/WebGL/webGLShaderProcessors.d.ts +1 -1
  279. package/Engines/WebGL/webGLShaderProcessors.js +1 -1
  280. package/Engines/WebGL/webGLShaderProcessors.js.map +1 -1
  281. package/Engines/WebGPU/Extensions/engine.computeShader.d.ts +1 -1
  282. package/Engines/WebGPU/Extensions/engine.computeShader.js.map +1 -1
  283. package/Engines/WebGPU/Extensions/engine.rawTexture.js +1 -5
  284. package/Engines/WebGPU/Extensions/engine.rawTexture.js.map +1 -1
  285. package/Engines/WebGPU/webgpuBufferManager.d.ts +1 -1
  286. package/Engines/WebGPU/webgpuBufferManager.js +1 -1
  287. package/Engines/WebGPU/webgpuBufferManager.js.map +1 -1
  288. package/Engines/WebGPU/webgpuBundleList.d.ts +8 -8
  289. package/Engines/WebGPU/webgpuBundleList.js +7 -7
  290. package/Engines/WebGPU/webgpuBundleList.js.map +1 -1
  291. package/Engines/WebGPU/webgpuCacheBindGroups.d.ts +1 -1
  292. package/Engines/WebGPU/webgpuCacheBindGroups.js +1 -1
  293. package/Engines/WebGPU/webgpuCacheBindGroups.js.map +1 -1
  294. package/Engines/WebGPU/webgpuCacheRenderPipeline.d.ts +1 -1
  295. package/Engines/WebGPU/webgpuCacheRenderPipeline.js +1 -1
  296. package/Engines/WebGPU/webgpuCacheRenderPipeline.js.map +1 -1
  297. package/Engines/WebGPU/webgpuCacheRenderPipelineString.d.ts +1 -1
  298. package/Engines/WebGPU/webgpuCacheRenderPipelineString.js +1 -1
  299. package/Engines/WebGPU/webgpuCacheRenderPipelineString.js.map +1 -1
  300. package/Engines/WebGPU/webgpuCacheRenderPipelineTree.d.ts +2 -2
  301. package/Engines/WebGPU/webgpuCacheRenderPipelineTree.js +2 -2
  302. package/Engines/WebGPU/webgpuCacheRenderPipelineTree.js.map +1 -1
  303. package/Engines/WebGPU/webgpuCacheSampler.d.ts +1 -1
  304. package/Engines/WebGPU/webgpuCacheSampler.js +1 -1
  305. package/Engines/WebGPU/webgpuCacheSampler.js.map +1 -1
  306. package/Engines/WebGPU/webgpuClearQuad.d.ts +1 -1
  307. package/Engines/WebGPU/webgpuClearQuad.js +1 -1
  308. package/Engines/WebGPU/webgpuClearQuad.js.map +1 -1
  309. package/Engines/WebGPU/webgpuComputeContext.d.ts +1 -1
  310. package/Engines/WebGPU/webgpuComputeContext.js +1 -1
  311. package/Engines/WebGPU/webgpuComputeContext.js.map +1 -1
  312. package/Engines/WebGPU/webgpuComputePipelineContext.d.ts +2 -2
  313. package/Engines/WebGPU/webgpuComputePipelineContext.js +1 -1
  314. package/Engines/WebGPU/webgpuComputePipelineContext.js.map +1 -1
  315. package/Engines/WebGPU/webgpuConstants.d.ts +38 -38
  316. package/Engines/WebGPU/webgpuConstants.js +38 -38
  317. package/Engines/WebGPU/webgpuConstants.js.map +1 -1
  318. package/Engines/WebGPU/webgpuDepthCullingState.d.ts +1 -1
  319. package/Engines/WebGPU/webgpuDepthCullingState.js +1 -1
  320. package/Engines/WebGPU/webgpuDepthCullingState.js.map +1 -1
  321. package/Engines/WebGPU/webgpuDrawContext.d.ts +1 -1
  322. package/Engines/WebGPU/webgpuDrawContext.js +1 -1
  323. package/Engines/WebGPU/webgpuDrawContext.js.map +1 -1
  324. package/Engines/WebGPU/webgpuExternalTexture.d.ts +1 -1
  325. package/Engines/WebGPU/webgpuExternalTexture.js +1 -1
  326. package/Engines/WebGPU/webgpuExternalTexture.js.map +1 -1
  327. package/Engines/WebGPU/webgpuHardwareTexture.d.ts +9 -9
  328. package/Engines/WebGPU/webgpuHardwareTexture.js +1 -1
  329. package/Engines/WebGPU/webgpuHardwareTexture.js.map +1 -1
  330. package/Engines/WebGPU/webgpuMaterialContext.d.ts +3 -3
  331. package/Engines/WebGPU/webgpuMaterialContext.js +1 -1
  332. package/Engines/WebGPU/webgpuMaterialContext.js.map +1 -1
  333. package/Engines/WebGPU/webgpuOcclusionQuery.d.ts +1 -1
  334. package/Engines/WebGPU/webgpuOcclusionQuery.js +1 -1
  335. package/Engines/WebGPU/webgpuOcclusionQuery.js.map +1 -1
  336. package/Engines/WebGPU/webgpuPipelineContext.d.ts +4 -4
  337. package/Engines/WebGPU/webgpuPipelineContext.js +2 -2
  338. package/Engines/WebGPU/webgpuPipelineContext.js.map +1 -1
  339. package/Engines/WebGPU/webgpuQuerySet.d.ts +1 -1
  340. package/Engines/WebGPU/webgpuQuerySet.js +1 -1
  341. package/Engines/WebGPU/webgpuQuerySet.js.map +1 -1
  342. package/Engines/WebGPU/webgpuRenderPassWrapper.d.ts +1 -1
  343. package/Engines/WebGPU/webgpuRenderPassWrapper.js +1 -1
  344. package/Engines/WebGPU/webgpuRenderPassWrapper.js.map +1 -1
  345. package/Engines/WebGPU/webgpuRenderTargetWrapper.d.ts +2 -2
  346. package/Engines/WebGPU/webgpuRenderTargetWrapper.js +1 -1
  347. package/Engines/WebGPU/webgpuRenderTargetWrapper.js.map +1 -1
  348. package/Engines/WebGPU/webgpuShaderProcessingContext.d.ts +7 -7
  349. package/Engines/WebGPU/webgpuShaderProcessingContext.js +2 -2
  350. package/Engines/WebGPU/webgpuShaderProcessingContext.js.map +1 -1
  351. package/Engines/WebGPU/webgpuShaderProcessor.d.ts +1 -1
  352. package/Engines/WebGPU/webgpuShaderProcessor.js +1 -1
  353. package/Engines/WebGPU/webgpuShaderProcessor.js.map +1 -1
  354. package/Engines/WebGPU/webgpuShaderProcessorsGLSL.d.ts +1 -1
  355. package/Engines/WebGPU/webgpuShaderProcessorsGLSL.js +1 -1
  356. package/Engines/WebGPU/webgpuShaderProcessorsGLSL.js.map +1 -1
  357. package/Engines/WebGPU/webgpuShaderProcessorsWGSL.d.ts +1 -1
  358. package/Engines/WebGPU/webgpuShaderProcessorsWGSL.js +1 -1
  359. package/Engines/WebGPU/webgpuShaderProcessorsWGSL.js.map +1 -1
  360. package/Engines/WebGPU/webgpuSnapshotRendering.d.ts +1 -1
  361. package/Engines/WebGPU/webgpuSnapshotRendering.js +1 -1
  362. package/Engines/WebGPU/webgpuSnapshotRendering.js.map +1 -1
  363. package/Engines/WebGPU/webgpuStencilStateComposer.d.ts +1 -1
  364. package/Engines/WebGPU/webgpuStencilStateComposer.js +1 -1
  365. package/Engines/WebGPU/webgpuStencilStateComposer.js.map +1 -1
  366. package/Engines/WebGPU/webgpuTextureHelper.d.ts +1 -1
  367. package/Engines/WebGPU/webgpuTextureHelper.js +1 -1
  368. package/Engines/WebGPU/webgpuTextureHelper.js.map +1 -1
  369. package/Engines/WebGPU/webgpuTimestampQuery.d.ts +2 -2
  370. package/Engines/WebGPU/webgpuTimestampQuery.js +2 -2
  371. package/Engines/WebGPU/webgpuTimestampQuery.js.map +1 -1
  372. package/Engines/WebGPU/webgpuTintWASM.d.ts +1 -1
  373. package/Engines/WebGPU/webgpuTintWASM.js +1 -1
  374. package/Engines/WebGPU/webgpuTintWASM.js.map +1 -1
  375. package/Engines/constants.d.ts +1 -1
  376. package/Engines/constants.js +1 -1
  377. package/Engines/constants.js.map +1 -1
  378. package/Engines/engine.d.ts +16 -35
  379. package/Engines/engine.js +19 -69
  380. package/Engines/engine.js.map +1 -1
  381. package/Engines/engineFeatures.d.ts +2 -2
  382. package/Engines/engineFeatures.js.map +1 -1
  383. package/Engines/engineStore.d.ts +1 -1
  384. package/Engines/engineStore.js +1 -1
  385. package/Engines/engineStore.js.map +1 -1
  386. package/Engines/nativeEngine.d.ts +15 -47
  387. package/Engines/nativeEngine.js +20 -66
  388. package/Engines/nativeEngine.js.map +1 -1
  389. package/Engines/nullEngine.d.ts +12 -40
  390. package/Engines/nullEngine.js +12 -40
  391. package/Engines/nullEngine.js.map +1 -1
  392. package/Engines/performanceConfigurator.d.ts +6 -7
  393. package/Engines/performanceConfigurator.js +6 -7
  394. package/Engines/performanceConfigurator.js.map +1 -1
  395. package/Engines/renderTargetWrapper.d.ts +8 -9
  396. package/Engines/renderTargetWrapper.js +7 -8
  397. package/Engines/renderTargetWrapper.js.map +1 -1
  398. package/Engines/thinEngine.d.ts +90 -187
  399. package/Engines/thinEngine.js +73 -182
  400. package/Engines/thinEngine.js.map +1 -1
  401. package/Engines/webgpuEngine.d.ts +89 -145
  402. package/Engines/webgpuEngine.js +71 -127
  403. package/Engines/webgpuEngine.js.map +1 -1
  404. package/Events/pointerEvents.d.ts +4 -0
  405. package/Events/pointerEvents.js +4 -0
  406. package/Events/pointerEvents.js.map +1 -1
  407. package/Gamepads/Controllers/oculusTouchController.d.ts +1 -1
  408. package/Gamepads/Controllers/oculusTouchController.js +1 -1
  409. package/Gamepads/Controllers/oculusTouchController.js.map +1 -1
  410. package/Gamepads/Controllers/poseEnabledController.d.ts +9 -10
  411. package/Gamepads/Controllers/poseEnabledController.js +6 -7
  412. package/Gamepads/Controllers/poseEnabledController.js.map +1 -1
  413. package/Gamepads/Controllers/windowsMotionController.d.ts +1 -1
  414. package/Gamepads/Controllers/windowsMotionController.js +1 -1
  415. package/Gamepads/Controllers/windowsMotionController.js.map +1 -1
  416. package/Gamepads/gamepad.d.ts +1 -1
  417. package/Gamepads/gamepad.js +1 -1
  418. package/Gamepads/gamepad.js.map +1 -1
  419. package/Gamepads/gamepadManager.d.ts +2 -2
  420. package/Gamepads/gamepadManager.js +4 -4
  421. package/Gamepads/gamepadManager.js.map +1 -1
  422. package/Gamepads/gamepadSceneComponent.d.ts +1 -1
  423. package/Gamepads/gamepadSceneComponent.js.map +1 -1
  424. package/Gizmos/axisDragGizmo.d.ts +2 -8
  425. package/Gizmos/axisDragGizmo.js +2 -8
  426. package/Gizmos/axisDragGizmo.js.map +1 -1
  427. package/Gizmos/cameraGizmo.d.ts +1 -1
  428. package/Gizmos/cameraGizmo.js +1 -1
  429. package/Gizmos/cameraGizmo.js.map +1 -1
  430. package/Gizmos/lightGizmo.d.ts +1 -1
  431. package/Gizmos/lightGizmo.js +1 -1
  432. package/Gizmos/lightGizmo.js.map +1 -1
  433. package/Gizmos/planeDragGizmo.d.ts +1 -3
  434. package/Gizmos/planeDragGizmo.js +1 -3
  435. package/Gizmos/planeDragGizmo.js.map +1 -1
  436. package/Helpers/sceneHelpers.d.ts +1 -1
  437. package/Helpers/sceneHelpers.js +1 -1
  438. package/Helpers/sceneHelpers.js.map +1 -1
  439. package/Inputs/scene.inputManager.d.ts +3 -3
  440. package/Inputs/scene.inputManager.js +5 -4
  441. package/Inputs/scene.inputManager.js.map +1 -1
  442. package/Instrumentation/timeToken.d.ts +1 -1
  443. package/Instrumentation/timeToken.js +1 -1
  444. package/Instrumentation/timeToken.js.map +1 -1
  445. package/Layers/effectLayer.d.ts +2 -3
  446. package/Layers/effectLayer.js +2 -3
  447. package/Layers/effectLayer.js.map +1 -1
  448. package/Layers/glowLayer.d.ts +1 -1
  449. package/Layers/glowLayer.js +1 -1
  450. package/Layers/glowLayer.js.map +1 -1
  451. package/Layers/highlightLayer.d.ts +1 -1
  452. package/Layers/highlightLayer.js +1 -1
  453. package/Layers/highlightLayer.js.map +1 -1
  454. package/Layers/layer.d.ts +8 -1
  455. package/Layers/layer.js +12 -1
  456. package/Layers/layer.js.map +1 -1
  457. package/Layers/layerSceneComponent.d.ts +4 -2
  458. package/Layers/layerSceneComponent.js +27 -11
  459. package/Layers/layerSceneComponent.js.map +1 -1
  460. package/LensFlares/lensFlare.d.ts +1 -1
  461. package/LensFlares/lensFlare.js.map +1 -1
  462. package/LensFlares/lensFlareSystem.d.ts +4 -6
  463. package/LensFlares/lensFlareSystem.js +4 -6
  464. package/LensFlares/lensFlareSystem.js.map +1 -1
  465. package/Lights/Shadows/cascadedShadowGenerator.d.ts +1 -2
  466. package/Lights/Shadows/cascadedShadowGenerator.js +1 -2
  467. package/Lights/Shadows/cascadedShadowGenerator.js.map +1 -1
  468. package/Lights/Shadows/shadowGenerator.d.ts +1 -2
  469. package/Lights/Shadows/shadowGenerator.js +1 -2
  470. package/Lights/Shadows/shadowGenerator.js.map +1 -1
  471. package/Lights/light.d.ts +9 -9
  472. package/Lights/light.js +6 -6
  473. package/Lights/light.js.map +1 -1
  474. package/Lights/shadowLight.d.ts +3 -3
  475. package/Lights/shadowLight.js +3 -3
  476. package/Lights/shadowLight.js.map +1 -1
  477. package/Loading/Plugins/babylonFileLoader.d.ts +1 -1
  478. package/Loading/Plugins/babylonFileLoader.js +1 -1
  479. package/Loading/Plugins/babylonFileLoader.js.map +1 -1
  480. package/Loading/loadingScreen.js +6 -6
  481. package/Loading/loadingScreen.js.map +1 -1
  482. package/Materials/Background/backgroundMaterial.js +1 -1
  483. package/Materials/Background/backgroundMaterial.js.map +1 -1
  484. package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.d.ts +18 -18
  485. package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.js.map +1 -1
  486. package/Materials/Node/Blocks/Input/inputBlock.d.ts +4 -11
  487. package/Materials/Node/Blocks/Input/inputBlock.js +4 -11
  488. package/Materials/Node/Blocks/Input/inputBlock.js.map +1 -1
  489. package/Materials/Node/Blocks/PBR/anisotropyBlock.d.ts +2 -2
  490. package/Materials/Node/Blocks/PBR/anisotropyBlock.js.map +1 -1
  491. package/Materials/Node/Blocks/PBR/reflectionBlock.d.ts +9 -9
  492. package/Materials/Node/Blocks/PBR/reflectionBlock.js.map +1 -1
  493. package/Materials/Node/Blocks/PBR/refractionBlock.d.ts +12 -12
  494. package/Materials/Node/Blocks/PBR/refractionBlock.js.map +1 -1
  495. package/Materials/Node/nodeMaterial.d.ts +2 -2
  496. package/Materials/Node/nodeMaterial.js +2 -2
  497. package/Materials/Node/nodeMaterial.js.map +1 -1
  498. package/Materials/Node/nodeMaterialBlock.d.ts +8 -14
  499. package/Materials/Node/nodeMaterialBlock.js +6 -12
  500. package/Materials/Node/nodeMaterialBlock.js.map +1 -1
  501. package/Materials/Node/nodeMaterialBlockConnectionPoint.d.ts +8 -8
  502. package/Materials/Node/nodeMaterialBlockConnectionPoint.js +7 -7
  503. package/Materials/Node/nodeMaterialBlockConnectionPoint.js.map +1 -1
  504. package/Materials/Node/nodeMaterialBuildState.d.ts +22 -58
  505. package/Materials/Node/nodeMaterialBuildState.js +21 -57
  506. package/Materials/Node/nodeMaterialBuildState.js.map +1 -1
  507. package/Materials/PBR/pbrAnisotropicConfiguration.d.ts +3 -3
  508. package/Materials/PBR/pbrAnisotropicConfiguration.js +2 -2
  509. package/Materials/PBR/pbrAnisotropicConfiguration.js.map +1 -1
  510. package/Materials/PBR/pbrBRDFConfiguration.d.ts +3 -3
  511. package/Materials/PBR/pbrBRDFConfiguration.js +2 -2
  512. package/Materials/PBR/pbrBRDFConfiguration.js.map +1 -1
  513. package/Materials/PBR/pbrBaseMaterial.d.ts +65 -65
  514. package/Materials/PBR/pbrBaseMaterial.js +65 -65
  515. package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
  516. package/Materials/PBR/pbrClearCoatConfiguration.d.ts +4 -4
  517. package/Materials/PBR/pbrClearCoatConfiguration.js +3 -3
  518. package/Materials/PBR/pbrClearCoatConfiguration.js.map +1 -1
  519. package/Materials/PBR/pbrIridescenceConfiguration.d.ts +6 -6
  520. package/Materials/PBR/pbrIridescenceConfiguration.js +5 -5
  521. package/Materials/PBR/pbrIridescenceConfiguration.js.map +1 -1
  522. package/Materials/PBR/pbrSheenConfiguration.d.ts +3 -3
  523. package/Materials/PBR/pbrSheenConfiguration.js +2 -2
  524. package/Materials/PBR/pbrSheenConfiguration.js.map +1 -1
  525. package/Materials/PBR/pbrSubSurfaceConfiguration.d.ts +6 -6
  526. package/Materials/PBR/pbrSubSurfaceConfiguration.js +5 -5
  527. package/Materials/PBR/pbrSubSurfaceConfiguration.js.map +1 -1
  528. package/Materials/Textures/Loaders/ddsTextureLoader.d.ts +1 -1
  529. package/Materials/Textures/Loaders/ddsTextureLoader.js +1 -1
  530. package/Materials/Textures/Loaders/ddsTextureLoader.js.map +1 -1
  531. package/Materials/Textures/Loaders/envTextureLoader.d.ts +1 -1
  532. package/Materials/Textures/Loaders/envTextureLoader.js +1 -1
  533. package/Materials/Textures/Loaders/envTextureLoader.js.map +1 -1
  534. package/Materials/Textures/Loaders/hdrTextureLoader.d.ts +1 -1
  535. package/Materials/Textures/Loaders/hdrTextureLoader.js +1 -1
  536. package/Materials/Textures/Loaders/hdrTextureLoader.js.map +1 -1
  537. package/Materials/Textures/Loaders/ktxTextureLoader.d.ts +1 -1
  538. package/Materials/Textures/Loaders/ktxTextureLoader.js +1 -1
  539. package/Materials/Textures/Loaders/ktxTextureLoader.js.map +1 -1
  540. package/Materials/Textures/Loaders/tgaTextureLoader.d.ts +1 -1
  541. package/Materials/Textures/Loaders/tgaTextureLoader.js +1 -1
  542. package/Materials/Textures/Loaders/tgaTextureLoader.js.map +1 -1
  543. package/Materials/Textures/MultiviewRenderTarget.d.ts +1 -1
  544. package/Materials/Textures/MultiviewRenderTarget.js +1 -1
  545. package/Materials/Textures/MultiviewRenderTarget.js.map +1 -1
  546. package/Materials/Textures/Procedurals/proceduralTexture.d.ts +6 -7
  547. package/Materials/Textures/Procedurals/proceduralTexture.js +4 -5
  548. package/Materials/Textures/Procedurals/proceduralTexture.js.map +1 -1
  549. package/Materials/Textures/baseTexture.d.ts +17 -23
  550. package/Materials/Textures/baseTexture.js +20 -23
  551. package/Materials/Textures/baseTexture.js.map +1 -1
  552. package/Materials/Textures/cubeTexture.d.ts +1 -1
  553. package/Materials/Textures/cubeTexture.js +1 -1
  554. package/Materials/Textures/cubeTexture.js.map +1 -1
  555. package/Materials/Textures/dynamicTexture.d.ts +1 -1
  556. package/Materials/Textures/dynamicTexture.js +1 -1
  557. package/Materials/Textures/dynamicTexture.js.map +1 -1
  558. package/Materials/Textures/hardwareTextureWrapper.d.ts +1 -1
  559. package/Materials/Textures/hardwareTextureWrapper.js.map +1 -1
  560. package/Materials/Textures/internalTexture.d.ts +35 -37
  561. package/Materials/Textures/internalTexture.js +34 -36
  562. package/Materials/Textures/internalTexture.js.map +1 -1
  563. package/Materials/Textures/multiRenderTarget.d.ts +1 -3
  564. package/Materials/Textures/multiRenderTarget.js +1 -3
  565. package/Materials/Textures/multiRenderTarget.js.map +1 -1
  566. package/Materials/Textures/prePassRenderTarget.d.ts +9 -9
  567. package/Materials/Textures/prePassRenderTarget.js +6 -6
  568. package/Materials/Textures/prePassRenderTarget.js.map +1 -1
  569. package/Materials/Textures/renderTargetTexture.d.ts +7 -11
  570. package/Materials/Textures/renderTargetTexture.js +8 -9
  571. package/Materials/Textures/renderTargetTexture.js.map +1 -1
  572. package/Materials/Textures/texture.d.ts +6 -18
  573. package/Materials/Textures/texture.js +13 -23
  574. package/Materials/Textures/texture.js.map +1 -1
  575. package/Materials/Textures/textureSampler.d.ts +5 -5
  576. package/Materials/Textures/textureSampler.js +5 -5
  577. package/Materials/Textures/textureSampler.js.map +1 -1
  578. package/Materials/Textures/thinRenderTargetTexture.js +1 -1
  579. package/Materials/Textures/thinRenderTargetTexture.js.map +1 -1
  580. package/Materials/Textures/thinTexture.d.ts +2 -2
  581. package/Materials/Textures/thinTexture.js +2 -2
  582. package/Materials/Textures/thinTexture.js.map +1 -1
  583. package/Materials/Textures/videoTexture.d.ts +1 -1
  584. package/Materials/Textures/videoTexture.js +3 -3
  585. package/Materials/Textures/videoTexture.js.map +1 -1
  586. package/Materials/drawWrapper.d.ts +1 -1
  587. package/Materials/drawWrapper.js +1 -1
  588. package/Materials/drawWrapper.js.map +1 -1
  589. package/Materials/effect.d.ts +17 -17
  590. package/Materials/effect.js +28 -22
  591. package/Materials/effect.js.map +1 -1
  592. package/Materials/effectRenderer.d.ts +1 -1
  593. package/Materials/effectRenderer.js.map +1 -1
  594. package/Materials/imageProcessingConfiguration.d.ts +5 -5
  595. package/Materials/imageProcessingConfiguration.js +4 -4
  596. package/Materials/imageProcessingConfiguration.js.map +1 -1
  597. package/Materials/material.d.ts +21 -26
  598. package/Materials/material.detailMapConfiguration.d.ts +3 -3
  599. package/Materials/material.detailMapConfiguration.js +2 -2
  600. package/Materials/material.detailMapConfiguration.js.map +1 -1
  601. package/Materials/material.js +22 -24
  602. package/Materials/material.js.map +1 -1
  603. package/Materials/materialDefines.d.ts +14 -14
  604. package/Materials/materialDefines.js +13 -13
  605. package/Materials/materialDefines.js.map +1 -1
  606. package/Materials/materialHelper.js +2 -7
  607. package/Materials/materialHelper.js.map +1 -1
  608. package/Materials/materialPluginEvent.d.ts +15 -15
  609. package/Materials/materialPluginEvent.js +1 -1
  610. package/Materials/materialPluginEvent.js.map +1 -1
  611. package/Materials/materialPluginManager.d.ts +2 -4
  612. package/Materials/materialPluginManager.js +2 -4
  613. package/Materials/materialPluginManager.js.map +1 -1
  614. package/Materials/multiMaterial.d.ts +1 -1
  615. package/Materials/multiMaterial.js +1 -1
  616. package/Materials/multiMaterial.js.map +1 -1
  617. package/Materials/pushMaterial.d.ts +1 -1
  618. package/Materials/pushMaterial.js +1 -1
  619. package/Materials/pushMaterial.js.map +1 -1
  620. package/Materials/standardMaterial.d.ts +3 -3
  621. package/Materials/standardMaterial.js +3 -3
  622. package/Materials/standardMaterial.js.map +1 -1
  623. package/Materials/uniformBuffer.d.ts +4 -4
  624. package/Materials/uniformBuffer.js +4 -4
  625. package/Materials/uniformBuffer.js.map +1 -1
  626. package/Materials/uniformBufferEffectCommonAccessor.d.ts +1 -1
  627. package/Materials/uniformBufferEffectCommonAccessor.js +1 -1
  628. package/Materials/uniformBufferEffectCommonAccessor.js.map +1 -1
  629. package/Maths/math.color.d.ts +1 -1
  630. package/Maths/math.color.js +1 -1
  631. package/Maths/math.color.js.map +1 -1
  632. package/Maths/math.isovector.d.ts +1 -1
  633. package/Maths/math.isovector.js +1 -1
  634. package/Maths/math.isovector.js.map +1 -1
  635. package/Maths/math.like.d.ts +8 -8
  636. package/Maths/math.like.js.map +1 -1
  637. package/Maths/math.polar.d.ts +343 -0
  638. package/Maths/math.polar.js +537 -0
  639. package/Maths/math.polar.js.map +1 -1
  640. package/Maths/math.vector.d.ts +58 -24
  641. package/Maths/math.vector.js +94 -18
  642. package/Maths/math.vector.js.map +1 -1
  643. package/Meshes/Builders/tubeBuilder.d.ts +2 -2
  644. package/Meshes/Builders/tubeBuilder.js +2 -2
  645. package/Meshes/Builders/tubeBuilder.js.map +1 -1
  646. package/Meshes/WebGL/webGLDataBuffer.d.ts +1 -1
  647. package/Meshes/WebGL/webGLDataBuffer.js +1 -1
  648. package/Meshes/WebGL/webGLDataBuffer.js.map +1 -1
  649. package/Meshes/WebGPU/webgpuDataBuffer.d.ts +1 -1
  650. package/Meshes/WebGPU/webgpuDataBuffer.js +1 -1
  651. package/Meshes/WebGPU/webgpuDataBuffer.js.map +1 -1
  652. package/Meshes/abstractMesh.d.ts +48 -70
  653. package/Meshes/abstractMesh.js +47 -69
  654. package/Meshes/abstractMesh.js.map +1 -1
  655. package/Meshes/buffer.d.ts +1 -1
  656. package/Meshes/buffer.js +1 -1
  657. package/Meshes/buffer.js.map +1 -1
  658. package/Meshes/geodesicMesh.d.ts +15 -28
  659. package/Meshes/geodesicMesh.js +11 -24
  660. package/Meshes/geodesicMesh.js.map +1 -1
  661. package/Meshes/geometry.d.ts +15 -20
  662. package/Meshes/geometry.js +7 -12
  663. package/Meshes/geometry.js.map +1 -1
  664. package/Meshes/groundMesh.d.ts +8 -8
  665. package/Meshes/groundMesh.js.map +1 -1
  666. package/Meshes/instancedMesh.d.ts +12 -16
  667. package/Meshes/instancedMesh.js +11 -15
  668. package/Meshes/instancedMesh.js.map +1 -1
  669. package/Meshes/linesMesh.d.ts +5 -8
  670. package/Meshes/linesMesh.js +5 -8
  671. package/Meshes/linesMesh.js.map +1 -1
  672. package/Meshes/mesh.d.ts +47 -92
  673. package/Meshes/mesh.js +50 -98
  674. package/Meshes/mesh.js.map +1 -1
  675. package/Meshes/mesh.vertexData.d.ts +3 -18
  676. package/Meshes/mesh.vertexData.js +3 -18
  677. package/Meshes/mesh.vertexData.js.map +1 -1
  678. package/Meshes/meshSimplificationSceneComponent.d.ts +1 -1
  679. package/Meshes/meshSimplificationSceneComponent.js.map +1 -1
  680. package/Meshes/subMesh.d.ts +23 -51
  681. package/Meshes/subMesh.js +20 -48
  682. package/Meshes/subMesh.js.map +1 -1
  683. package/Meshes/subMesh.project.d.ts +2 -2
  684. package/Meshes/subMesh.project.js +2 -12
  685. package/Meshes/subMesh.project.js.map +1 -1
  686. package/Meshes/thinInstanceMesh.d.ts +4 -4
  687. package/Meshes/thinInstanceMesh.js.map +1 -1
  688. package/Meshes/transformNode.d.ts +8 -9
  689. package/Meshes/transformNode.js +8 -9
  690. package/Meshes/transformNode.js.map +1 -1
  691. package/Misc/arrayTools.d.ts +3 -3
  692. package/Misc/arrayTools.js +1 -1
  693. package/Misc/arrayTools.js.map +1 -1
  694. package/Misc/assetsManager.d.ts +1 -3
  695. package/Misc/assetsManager.js +1 -3
  696. package/Misc/assetsManager.js.map +1 -1
  697. package/Misc/basis.js +1 -1
  698. package/Misc/basis.js.map +1 -1
  699. package/Misc/coroutine.d.ts +11 -25
  700. package/Misc/coroutine.js +7 -21
  701. package/Misc/coroutine.js.map +1 -1
  702. package/Misc/dds.d.ts +1 -10
  703. package/Misc/dds.js +1 -10
  704. package/Misc/dds.js.map +1 -1
  705. package/Misc/decorators.d.ts +5 -15
  706. package/Misc/decorators.js +6 -16
  707. package/Misc/decorators.js.map +1 -1
  708. package/Misc/depthReducer.d.ts +1 -5
  709. package/Misc/depthReducer.js +1 -5
  710. package/Misc/depthReducer.js.map +1 -1
  711. package/Misc/devTools.d.ts +1 -2
  712. package/Misc/devTools.js +1 -2
  713. package/Misc/devTools.js.map +1 -1
  714. package/Misc/environmentTextureTools.d.ts +1 -6
  715. package/Misc/environmentTextureTools.js +1 -6
  716. package/Misc/environmentTextureTools.js.map +1 -1
  717. package/Misc/fileTools.d.ts +12 -24
  718. package/Misc/fileTools.js +14 -26
  719. package/Misc/fileTools.js.map +1 -1
  720. package/Misc/khronosTextureContainer.d.ts +1 -3
  721. package/Misc/khronosTextureContainer.js +1 -3
  722. package/Misc/khronosTextureContainer.js.map +1 -1
  723. package/Misc/khronosTextureContainer2.d.ts +1 -4
  724. package/Misc/khronosTextureContainer2.js +1 -4
  725. package/Misc/khronosTextureContainer2.js.map +1 -1
  726. package/Misc/observable.d.ts +3 -4
  727. package/Misc/observable.js +2 -3
  728. package/Misc/observable.js.map +1 -1
  729. package/Misc/pivotTools.d.ts +3 -5
  730. package/Misc/pivotTools.js +3 -5
  731. package/Misc/pivotTools.js.map +1 -1
  732. package/Misc/screenshotTools.js +1 -1
  733. package/Misc/screenshotTools.js.map +1 -1
  734. package/Misc/tags.d.ts +2 -6
  735. package/Misc/tags.js +2 -6
  736. package/Misc/tags.js.map +1 -1
  737. package/Misc/tga.d.ts +14 -70
  738. package/Misc/tga.js +14 -70
  739. package/Misc/tga.js.map +1 -1
  740. package/Misc/tools.d.ts +9 -0
  741. package/Misc/tools.js +14 -5
  742. package/Misc/tools.js.map +1 -1
  743. package/Misc/typeStore.d.ts +2 -5
  744. package/Misc/typeStore.js +3 -6
  745. package/Misc/typeStore.js.map +1 -1
  746. package/Misc/virtualJoystick.js +0 -1
  747. package/Misc/virtualJoystick.js.map +1 -1
  748. package/Misc/webRequest.d.ts +2 -2
  749. package/Misc/webRequest.js +1 -1
  750. package/Misc/webRequest.js.map +1 -1
  751. package/Morph/morphTarget.d.ts +1 -1
  752. package/Morph/morphTarget.js +1 -1
  753. package/Morph/morphTarget.js.map +1 -1
  754. package/Morph/morphTargetManager.d.ts +3 -4
  755. package/Morph/morphTargetManager.js +2 -3
  756. package/Morph/morphTargetManager.js.map +1 -1
  757. package/Particles/IGPUParticleSystemPlatform.d.ts +1 -1
  758. package/Particles/IGPUParticleSystemPlatform.js.map +1 -1
  759. package/Particles/IParticleSystem.d.ts +6 -0
  760. package/Particles/IParticleSystem.js.map +1 -1
  761. package/Particles/baseParticleSystem.d.ts +14 -9
  762. package/Particles/baseParticleSystem.js +17 -8
  763. package/Particles/baseParticleSystem.js.map +1 -1
  764. package/Particles/cloudPoint.d.ts +16 -19
  765. package/Particles/cloudPoint.js +21 -29
  766. package/Particles/cloudPoint.js.map +1 -1
  767. package/Particles/computeShaderParticleSystem.d.ts +1 -1
  768. package/Particles/computeShaderParticleSystem.js +1 -1
  769. package/Particles/computeShaderParticleSystem.js.map +1 -1
  770. package/Particles/gpuParticleSystem.d.ts +14 -20
  771. package/Particles/gpuParticleSystem.js +17 -13
  772. package/Particles/gpuParticleSystem.js.map +1 -1
  773. package/Particles/particle.d.ts +30 -31
  774. package/Particles/particle.js +16 -17
  775. package/Particles/particle.js.map +1 -1
  776. package/Particles/particleSystem.d.ts +16 -32
  777. package/Particles/particleSystem.js +30 -31
  778. package/Particles/particleSystem.js.map +1 -1
  779. package/Particles/pointsCloudSystem.d.ts +3 -4
  780. package/Particles/pointsCloudSystem.js +27 -20
  781. package/Particles/pointsCloudSystem.js.map +1 -1
  782. package/Particles/solidParticle.d.ts +21 -31
  783. package/Particles/solidParticle.js +9 -19
  784. package/Particles/solidParticle.js.map +1 -1
  785. package/Particles/solidParticleSystem.d.ts +14 -16
  786. package/Particles/solidParticleSystem.js +14 -16
  787. package/Particles/solidParticleSystem.js.map +1 -1
  788. package/Particles/subEmitter.d.ts +1 -5
  789. package/Particles/subEmitter.js +1 -5
  790. package/Particles/subEmitter.js.map +1 -1
  791. package/Particles/webgl2ParticleSystem.d.ts +1 -1
  792. package/Particles/webgl2ParticleSystem.js +1 -1
  793. package/Particles/webgl2ParticleSystem.js.map +1 -1
  794. package/Physics/IPhysicsEngine.d.ts +1 -1
  795. package/Physics/IPhysicsEngine.js.map +1 -1
  796. package/Physics/Plugins/ammoJSPlugin.d.ts +3 -0
  797. package/Physics/Plugins/ammoJSPlugin.js +21 -2
  798. package/Physics/Plugins/ammoJSPlugin.js.map +1 -1
  799. package/Physics/Plugins/cannonJSPlugin.d.ts +1 -1
  800. package/Physics/Plugins/cannonJSPlugin.js +1 -1
  801. package/Physics/Plugins/cannonJSPlugin.js.map +1 -1
  802. package/Physics/Plugins/oimoJSPlugin.d.ts +1 -1
  803. package/Physics/Plugins/oimoJSPlugin.js +3 -3
  804. package/Physics/Plugins/oimoJSPlugin.js.map +1 -1
  805. package/Physics/physicsEngineComponent.d.ts +4 -4
  806. package/Physics/physicsEngineComponent.js +1 -2
  807. package/Physics/physicsEngineComponent.js.map +1 -1
  808. package/Physics/physicsImpostor.d.ts +13 -7
  809. package/Physics/physicsImpostor.js +9 -6
  810. package/Physics/physicsImpostor.js.map +1 -1
  811. package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.d.ts +1 -1
  812. package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.js +2 -2
  813. package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.js.map +1 -1
  814. package/PostProcesses/RenderPipeline/Pipelines/ssaoRenderingPipeline.d.ts +2 -4
  815. package/PostProcesses/RenderPipeline/Pipelines/ssaoRenderingPipeline.js +2 -4
  816. package/PostProcesses/RenderPipeline/Pipelines/ssaoRenderingPipeline.js.map +1 -1
  817. package/PostProcesses/RenderPipeline/postProcessRenderEffect.d.ts +10 -10
  818. package/PostProcesses/RenderPipeline/postProcessRenderEffect.js +5 -5
  819. package/PostProcesses/RenderPipeline/postProcessRenderEffect.js.map +1 -1
  820. package/PostProcesses/RenderPipeline/postProcessRenderPipeline.d.ts +13 -13
  821. package/PostProcesses/RenderPipeline/postProcessRenderPipeline.js +7 -14
  822. package/PostProcesses/RenderPipeline/postProcessRenderPipeline.js.map +1 -1
  823. package/PostProcesses/RenderPipeline/postProcessRenderPipelineManager.d.ts +1 -1
  824. package/PostProcesses/RenderPipeline/postProcessRenderPipelineManager.js +1 -1
  825. package/PostProcesses/RenderPipeline/postProcessRenderPipelineManager.js.map +1 -1
  826. package/PostProcesses/RenderPipeline/postProcessRenderPipelineManagerSceneComponent.d.ts +1 -1
  827. package/PostProcesses/RenderPipeline/postProcessRenderPipelineManagerSceneComponent.js.map +1 -1
  828. package/PostProcesses/blackAndWhitePostProcess.d.ts +1 -5
  829. package/PostProcesses/blackAndWhitePostProcess.js +1 -5
  830. package/PostProcesses/blackAndWhitePostProcess.js.map +1 -1
  831. package/PostProcesses/bloomEffect.d.ts +4 -4
  832. package/PostProcesses/bloomEffect.js +3 -3
  833. package/PostProcesses/bloomEffect.js.map +1 -1
  834. package/PostProcesses/blurPostProcess.d.ts +1 -5
  835. package/PostProcesses/blurPostProcess.js +1 -5
  836. package/PostProcesses/blurPostProcess.js.map +1 -1
  837. package/PostProcesses/chromaticAberrationPostProcess.d.ts +1 -5
  838. package/PostProcesses/chromaticAberrationPostProcess.js +1 -5
  839. package/PostProcesses/chromaticAberrationPostProcess.js.map +1 -1
  840. package/PostProcesses/colorCorrectionPostProcess.d.ts +1 -5
  841. package/PostProcesses/colorCorrectionPostProcess.js +1 -5
  842. package/PostProcesses/colorCorrectionPostProcess.js.map +1 -1
  843. package/PostProcesses/convolutionPostProcess.d.ts +1 -5
  844. package/PostProcesses/convolutionPostProcess.js +1 -5
  845. package/PostProcesses/convolutionPostProcess.js.map +1 -1
  846. package/PostProcesses/depthOfFieldEffect.d.ts +4 -4
  847. package/PostProcesses/depthOfFieldEffect.js +3 -3
  848. package/PostProcesses/depthOfFieldEffect.js.map +1 -1
  849. package/PostProcesses/displayPassPostProcess.d.ts +1 -5
  850. package/PostProcesses/displayPassPostProcess.js +1 -5
  851. package/PostProcesses/displayPassPostProcess.js.map +1 -1
  852. package/PostProcesses/extractHighlightsPostProcess.d.ts +2 -2
  853. package/PostProcesses/extractHighlightsPostProcess.js +2 -2
  854. package/PostProcesses/extractHighlightsPostProcess.js.map +1 -1
  855. package/PostProcesses/filterPostProcess.d.ts +1 -5
  856. package/PostProcesses/filterPostProcess.js +1 -5
  857. package/PostProcesses/filterPostProcess.js.map +1 -1
  858. package/PostProcesses/fxaaPostProcess.d.ts +1 -5
  859. package/PostProcesses/fxaaPostProcess.js +1 -5
  860. package/PostProcesses/fxaaPostProcess.js.map +1 -1
  861. package/PostProcesses/grainPostProcess.d.ts +1 -5
  862. package/PostProcesses/grainPostProcess.js +1 -5
  863. package/PostProcesses/grainPostProcess.js.map +1 -1
  864. package/PostProcesses/imageProcessingPostProcess.d.ts +1 -1
  865. package/PostProcesses/imageProcessingPostProcess.js +1 -1
  866. package/PostProcesses/imageProcessingPostProcess.js.map +1 -1
  867. package/PostProcesses/motionBlurPostProcess.d.ts +1 -5
  868. package/PostProcesses/motionBlurPostProcess.js +1 -5
  869. package/PostProcesses/motionBlurPostProcess.js.map +1 -1
  870. package/PostProcesses/passPostProcess.d.ts +2 -10
  871. package/PostProcesses/passPostProcess.js +2 -10
  872. package/PostProcesses/passPostProcess.js.map +1 -1
  873. package/PostProcesses/postProcess.d.ts +8 -12
  874. package/PostProcesses/postProcess.js +6 -10
  875. package/PostProcesses/postProcess.js.map +1 -1
  876. package/PostProcesses/postProcessManager.d.ts +3 -3
  877. package/PostProcesses/postProcessManager.js +3 -3
  878. package/PostProcesses/postProcessManager.js.map +1 -1
  879. package/PostProcesses/refractionPostProcess.d.ts +1 -5
  880. package/PostProcesses/refractionPostProcess.js +1 -5
  881. package/PostProcesses/refractionPostProcess.js.map +1 -1
  882. package/PostProcesses/screenSpaceCurvaturePostProcess.d.ts +1 -5
  883. package/PostProcesses/screenSpaceCurvaturePostProcess.js +1 -5
  884. package/PostProcesses/screenSpaceCurvaturePostProcess.js.map +1 -1
  885. package/PostProcesses/screenSpaceReflectionPostProcess.d.ts +1 -5
  886. package/PostProcesses/screenSpaceReflectionPostProcess.js +1 -5
  887. package/PostProcesses/screenSpaceReflectionPostProcess.js.map +1 -1
  888. package/PostProcesses/sharpenPostProcess.d.ts +1 -5
  889. package/PostProcesses/sharpenPostProcess.js +1 -5
  890. package/PostProcesses/sharpenPostProcess.js.map +1 -1
  891. package/PostProcesses/volumetricLightScatteringPostProcess.d.ts +1 -1
  892. package/PostProcesses/volumetricLightScatteringPostProcess.js +1 -1
  893. package/PostProcesses/volumetricLightScatteringPostProcess.js.map +1 -1
  894. package/Probes/reflectionProbe.d.ts +1 -1
  895. package/Probes/reflectionProbe.js +1 -1
  896. package/Probes/reflectionProbe.js.map +1 -1
  897. package/Rendering/boundingBoxRenderer.d.ts +5 -5
  898. package/Rendering/boundingBoxRenderer.js +2 -2
  899. package/Rendering/boundingBoxRenderer.js.map +1 -1
  900. package/Rendering/depthPeelingSceneComponent.d.ts +2 -2
  901. package/Rendering/depthPeelingSceneComponent.js.map +1 -1
  902. package/Rendering/depthRenderer.d.ts +1 -2
  903. package/Rendering/depthRenderer.js +1 -2
  904. package/Rendering/depthRenderer.js.map +1 -1
  905. package/Rendering/depthRendererSceneComponent.d.ts +1 -1
  906. package/Rendering/depthRendererSceneComponent.js.map +1 -1
  907. package/Rendering/edgesRenderer.d.ts +2 -2
  908. package/Rendering/edgesRenderer.js +1 -1
  909. package/Rendering/edgesRenderer.js.map +1 -1
  910. package/Rendering/geometryBufferRenderer.d.ts +10 -16
  911. package/Rendering/geometryBufferRenderer.js +9 -15
  912. package/Rendering/geometryBufferRenderer.js.map +1 -1
  913. package/Rendering/geometryBufferRendererSceneComponent.d.ts +1 -1
  914. package/Rendering/geometryBufferRendererSceneComponent.js.map +1 -1
  915. package/Rendering/outlineRenderer.d.ts +3 -3
  916. package/Rendering/outlineRenderer.js.map +1 -1
  917. package/Rendering/prePassRenderer.d.ts +7 -14
  918. package/Rendering/prePassRenderer.js +8 -15
  919. package/Rendering/prePassRenderer.js.map +1 -1
  920. package/Rendering/prePassRendererSceneComponent.d.ts +2 -2
  921. package/Rendering/prePassRendererSceneComponent.js.map +1 -1
  922. package/Rendering/renderingGroup.d.ts +3 -3
  923. package/Rendering/renderingGroup.js +3 -3
  924. package/Rendering/renderingGroup.js.map +1 -1
  925. package/Rendering/renderingManager.d.ts +15 -8
  926. package/Rendering/renderingManager.js +59 -17
  927. package/Rendering/renderingManager.js.map +1 -1
  928. package/Rendering/subSurfaceConfiguration.d.ts +2 -4
  929. package/Rendering/subSurfaceConfiguration.js +2 -4
  930. package/Rendering/subSurfaceConfiguration.js.map +1 -1
  931. package/Rendering/subSurfaceSceneComponent.d.ts +1 -1
  932. package/Rendering/subSurfaceSceneComponent.js.map +1 -1
  933. package/Rendering/utilityLayerRenderer.d.ts +4 -4
  934. package/Rendering/utilityLayerRenderer.js +15 -10
  935. package/Rendering/utilityLayerRenderer.js.map +1 -1
  936. package/Shaders/ShadersInclude/backgroundFragmentDeclaration.d.ts +1 -1
  937. package/Shaders/ShadersInclude/backgroundFragmentDeclaration.js +1 -1
  938. package/Shaders/ShadersInclude/backgroundFragmentDeclaration.js.map +1 -1
  939. package/Shaders/ShadersInclude/backgroundUboDeclaration.d.ts +1 -1
  940. package/Shaders/ShadersInclude/backgroundUboDeclaration.js +1 -1
  941. package/Shaders/ShadersInclude/backgroundUboDeclaration.js.map +1 -1
  942. package/Shaders/ShadersInclude/backgroundVertexDeclaration.d.ts +1 -1
  943. package/Shaders/ShadersInclude/backgroundVertexDeclaration.js +1 -1
  944. package/Shaders/ShadersInclude/backgroundVertexDeclaration.js.map +1 -1
  945. package/Shaders/ShadersInclude/bakedVertexAnimation.d.ts +1 -1
  946. package/Shaders/ShadersInclude/bakedVertexAnimation.js +1 -1
  947. package/Shaders/ShadersInclude/bakedVertexAnimation.js.map +1 -1
  948. package/Shaders/ShadersInclude/bakedVertexAnimationDeclaration.d.ts +1 -1
  949. package/Shaders/ShadersInclude/bakedVertexAnimationDeclaration.js +1 -1
  950. package/Shaders/ShadersInclude/bakedVertexAnimationDeclaration.js.map +1 -1
  951. package/Shaders/ShadersInclude/bayerDitherFunctions.d.ts +1 -1
  952. package/Shaders/ShadersInclude/bayerDitherFunctions.js +1 -1
  953. package/Shaders/ShadersInclude/bayerDitherFunctions.js.map +1 -1
  954. package/Shaders/ShadersInclude/bonesDeclaration.d.ts +1 -1
  955. package/Shaders/ShadersInclude/bonesDeclaration.js +1 -1
  956. package/Shaders/ShadersInclude/bonesDeclaration.js.map +1 -1
  957. package/Shaders/ShadersInclude/bonesVertex.d.ts +1 -1
  958. package/Shaders/ShadersInclude/bonesVertex.js +1 -1
  959. package/Shaders/ShadersInclude/bonesVertex.js.map +1 -1
  960. package/Shaders/ShadersInclude/boundingBoxRendererFragmentDeclaration.d.ts +1 -1
  961. package/Shaders/ShadersInclude/boundingBoxRendererFragmentDeclaration.js +1 -1
  962. package/Shaders/ShadersInclude/boundingBoxRendererFragmentDeclaration.js.map +1 -1
  963. package/Shaders/ShadersInclude/boundingBoxRendererUboDeclaration.d.ts +1 -1
  964. package/Shaders/ShadersInclude/boundingBoxRendererUboDeclaration.js +1 -1
  965. package/Shaders/ShadersInclude/boundingBoxRendererUboDeclaration.js.map +1 -1
  966. package/Shaders/ShadersInclude/boundingBoxRendererVertexDeclaration.d.ts +1 -1
  967. package/Shaders/ShadersInclude/boundingBoxRendererVertexDeclaration.js +1 -1
  968. package/Shaders/ShadersInclude/boundingBoxRendererVertexDeclaration.js.map +1 -1
  969. package/Shaders/ShadersInclude/bumpFragment.d.ts +1 -1
  970. package/Shaders/ShadersInclude/bumpFragment.js +1 -1
  971. package/Shaders/ShadersInclude/bumpFragment.js.map +1 -1
  972. package/Shaders/ShadersInclude/bumpFragmentFunctions.d.ts +1 -1
  973. package/Shaders/ShadersInclude/bumpFragmentFunctions.js +1 -1
  974. package/Shaders/ShadersInclude/bumpFragmentFunctions.js.map +1 -1
  975. package/Shaders/ShadersInclude/bumpFragmentMainFunctions.d.ts +1 -1
  976. package/Shaders/ShadersInclude/bumpFragmentMainFunctions.js +1 -1
  977. package/Shaders/ShadersInclude/bumpFragmentMainFunctions.js.map +1 -1
  978. package/Shaders/ShadersInclude/bumpVertex.d.ts +1 -1
  979. package/Shaders/ShadersInclude/bumpVertex.js +1 -1
  980. package/Shaders/ShadersInclude/bumpVertex.js.map +1 -1
  981. package/Shaders/ShadersInclude/bumpVertexDeclaration.d.ts +1 -1
  982. package/Shaders/ShadersInclude/bumpVertexDeclaration.js +1 -1
  983. package/Shaders/ShadersInclude/bumpVertexDeclaration.js.map +1 -1
  984. package/Shaders/ShadersInclude/clipPlaneFragment.d.ts +1 -1
  985. package/Shaders/ShadersInclude/clipPlaneFragment.js +1 -1
  986. package/Shaders/ShadersInclude/clipPlaneFragment.js.map +1 -1
  987. package/Shaders/ShadersInclude/clipPlaneFragmentDeclaration.d.ts +1 -1
  988. package/Shaders/ShadersInclude/clipPlaneFragmentDeclaration.js +1 -1
  989. package/Shaders/ShadersInclude/clipPlaneFragmentDeclaration.js.map +1 -1
  990. package/Shaders/ShadersInclude/clipPlaneFragmentDeclaration2.d.ts +1 -1
  991. package/Shaders/ShadersInclude/clipPlaneFragmentDeclaration2.js +1 -1
  992. package/Shaders/ShadersInclude/clipPlaneFragmentDeclaration2.js.map +1 -1
  993. package/Shaders/ShadersInclude/clipPlaneVertex.d.ts +1 -1
  994. package/Shaders/ShadersInclude/clipPlaneVertex.js +1 -1
  995. package/Shaders/ShadersInclude/clipPlaneVertex.js.map +1 -1
  996. package/Shaders/ShadersInclude/clipPlaneVertexDeclaration.d.ts +1 -1
  997. package/Shaders/ShadersInclude/clipPlaneVertexDeclaration.js +1 -1
  998. package/Shaders/ShadersInclude/clipPlaneVertexDeclaration.js.map +1 -1
  999. package/Shaders/ShadersInclude/clipPlaneVertexDeclaration2.d.ts +1 -1
  1000. package/Shaders/ShadersInclude/clipPlaneVertexDeclaration2.js +1 -1
  1001. package/Shaders/ShadersInclude/clipPlaneVertexDeclaration2.js.map +1 -1
  1002. package/Shaders/ShadersInclude/defaultFragmentDeclaration.d.ts +1 -1
  1003. package/Shaders/ShadersInclude/defaultFragmentDeclaration.js +1 -1
  1004. package/Shaders/ShadersInclude/defaultFragmentDeclaration.js.map +1 -1
  1005. package/Shaders/ShadersInclude/defaultUboDeclaration.d.ts +1 -1
  1006. package/Shaders/ShadersInclude/defaultUboDeclaration.js +1 -1
  1007. package/Shaders/ShadersInclude/defaultUboDeclaration.js.map +1 -1
  1008. package/Shaders/ShadersInclude/defaultVertexDeclaration.d.ts +1 -1
  1009. package/Shaders/ShadersInclude/defaultVertexDeclaration.js +1 -1
  1010. package/Shaders/ShadersInclude/defaultVertexDeclaration.js.map +1 -1
  1011. package/Shaders/ShadersInclude/depthPrePass.d.ts +1 -1
  1012. package/Shaders/ShadersInclude/depthPrePass.js +1 -1
  1013. package/Shaders/ShadersInclude/depthPrePass.js.map +1 -1
  1014. package/Shaders/ShadersInclude/diffusionProfile.d.ts +1 -1
  1015. package/Shaders/ShadersInclude/diffusionProfile.js +1 -1
  1016. package/Shaders/ShadersInclude/diffusionProfile.js.map +1 -1
  1017. package/Shaders/ShadersInclude/fibonacci.d.ts +1 -1
  1018. package/Shaders/ShadersInclude/fibonacci.js +1 -1
  1019. package/Shaders/ShadersInclude/fibonacci.js.map +1 -1
  1020. package/Shaders/ShadersInclude/fogFragment.d.ts +1 -1
  1021. package/Shaders/ShadersInclude/fogFragment.js +1 -1
  1022. package/Shaders/ShadersInclude/fogFragment.js.map +1 -1
  1023. package/Shaders/ShadersInclude/fogFragmentDeclaration.d.ts +1 -1
  1024. package/Shaders/ShadersInclude/fogFragmentDeclaration.js +1 -1
  1025. package/Shaders/ShadersInclude/fogFragmentDeclaration.js.map +1 -1
  1026. package/Shaders/ShadersInclude/fogVertex.d.ts +1 -1
  1027. package/Shaders/ShadersInclude/fogVertex.js +1 -1
  1028. package/Shaders/ShadersInclude/fogVertex.js.map +1 -1
  1029. package/Shaders/ShadersInclude/fogVertexDeclaration.d.ts +1 -1
  1030. package/Shaders/ShadersInclude/fogVertexDeclaration.js +1 -1
  1031. package/Shaders/ShadersInclude/fogVertexDeclaration.js.map +1 -1
  1032. package/Shaders/ShadersInclude/fresnelFunction.d.ts +1 -1
  1033. package/Shaders/ShadersInclude/fresnelFunction.js +1 -1
  1034. package/Shaders/ShadersInclude/fresnelFunction.js.map +1 -1
  1035. package/Shaders/ShadersInclude/geometryUboDeclaration.d.ts +1 -1
  1036. package/Shaders/ShadersInclude/geometryUboDeclaration.js +1 -1
  1037. package/Shaders/ShadersInclude/geometryUboDeclaration.js.map +1 -1
  1038. package/Shaders/ShadersInclude/geometryVertexDeclaration.d.ts +1 -1
  1039. package/Shaders/ShadersInclude/geometryVertexDeclaration.js +1 -1
  1040. package/Shaders/ShadersInclude/geometryVertexDeclaration.js.map +1 -1
  1041. package/Shaders/ShadersInclude/harmonicsFunctions.d.ts +1 -1
  1042. package/Shaders/ShadersInclude/harmonicsFunctions.js +1 -1
  1043. package/Shaders/ShadersInclude/harmonicsFunctions.js.map +1 -1
  1044. package/Shaders/ShadersInclude/hdrFilteringFunctions.d.ts +1 -1
  1045. package/Shaders/ShadersInclude/hdrFilteringFunctions.js +1 -1
  1046. package/Shaders/ShadersInclude/hdrFilteringFunctions.js.map +1 -1
  1047. package/Shaders/ShadersInclude/helperFunctions.d.ts +1 -1
  1048. package/Shaders/ShadersInclude/helperFunctions.js +1 -1
  1049. package/Shaders/ShadersInclude/helperFunctions.js.map +1 -1
  1050. package/Shaders/ShadersInclude/imageProcessingCompatibility.d.ts +1 -1
  1051. package/Shaders/ShadersInclude/imageProcessingCompatibility.js +1 -1
  1052. package/Shaders/ShadersInclude/imageProcessingCompatibility.js.map +1 -1
  1053. package/Shaders/ShadersInclude/imageProcessingDeclaration.d.ts +1 -1
  1054. package/Shaders/ShadersInclude/imageProcessingDeclaration.js +1 -1
  1055. package/Shaders/ShadersInclude/imageProcessingDeclaration.js.map +1 -1
  1056. package/Shaders/ShadersInclude/imageProcessingFunctions.d.ts +1 -1
  1057. package/Shaders/ShadersInclude/imageProcessingFunctions.js +1 -1
  1058. package/Shaders/ShadersInclude/imageProcessingFunctions.js.map +1 -1
  1059. package/Shaders/ShadersInclude/importanceSampling.d.ts +1 -1
  1060. package/Shaders/ShadersInclude/importanceSampling.js +1 -1
  1061. package/Shaders/ShadersInclude/importanceSampling.js.map +1 -1
  1062. package/Shaders/ShadersInclude/instancesDeclaration.d.ts +1 -1
  1063. package/Shaders/ShadersInclude/instancesDeclaration.js +1 -1
  1064. package/Shaders/ShadersInclude/instancesDeclaration.js.map +1 -1
  1065. package/Shaders/ShadersInclude/instancesVertex.d.ts +1 -1
  1066. package/Shaders/ShadersInclude/instancesVertex.js +1 -1
  1067. package/Shaders/ShadersInclude/instancesVertex.js.map +1 -1
  1068. package/Shaders/ShadersInclude/kernelBlurFragment.d.ts +1 -1
  1069. package/Shaders/ShadersInclude/kernelBlurFragment.js +1 -1
  1070. package/Shaders/ShadersInclude/kernelBlurFragment.js.map +1 -1
  1071. package/Shaders/ShadersInclude/kernelBlurFragment2.d.ts +1 -1
  1072. package/Shaders/ShadersInclude/kernelBlurFragment2.js +1 -1
  1073. package/Shaders/ShadersInclude/kernelBlurFragment2.js.map +1 -1
  1074. package/Shaders/ShadersInclude/kernelBlurVaryingDeclaration.d.ts +1 -1
  1075. package/Shaders/ShadersInclude/kernelBlurVaryingDeclaration.js +1 -1
  1076. package/Shaders/ShadersInclude/kernelBlurVaryingDeclaration.js.map +1 -1
  1077. package/Shaders/ShadersInclude/kernelBlurVertex.d.ts +1 -1
  1078. package/Shaders/ShadersInclude/kernelBlurVertex.js +1 -1
  1079. package/Shaders/ShadersInclude/kernelBlurVertex.js.map +1 -1
  1080. package/Shaders/ShadersInclude/lightFragment.d.ts +1 -1
  1081. package/Shaders/ShadersInclude/lightFragment.js +1 -1
  1082. package/Shaders/ShadersInclude/lightFragment.js.map +1 -1
  1083. package/Shaders/ShadersInclude/lightFragmentDeclaration.d.ts +1 -1
  1084. package/Shaders/ShadersInclude/lightFragmentDeclaration.js +1 -1
  1085. package/Shaders/ShadersInclude/lightFragmentDeclaration.js.map +1 -1
  1086. package/Shaders/ShadersInclude/lightUboDeclaration.d.ts +1 -1
  1087. package/Shaders/ShadersInclude/lightUboDeclaration.js +1 -1
  1088. package/Shaders/ShadersInclude/lightUboDeclaration.js.map +1 -1
  1089. package/Shaders/ShadersInclude/lightVxFragmentDeclaration.d.ts +1 -1
  1090. package/Shaders/ShadersInclude/lightVxFragmentDeclaration.js +1 -1
  1091. package/Shaders/ShadersInclude/lightVxFragmentDeclaration.js.map +1 -1
  1092. package/Shaders/ShadersInclude/lightVxUboDeclaration.d.ts +1 -1
  1093. package/Shaders/ShadersInclude/lightVxUboDeclaration.js +1 -1
  1094. package/Shaders/ShadersInclude/lightVxUboDeclaration.js.map +1 -1
  1095. package/Shaders/ShadersInclude/lightsFragmentFunctions.d.ts +1 -1
  1096. package/Shaders/ShadersInclude/lightsFragmentFunctions.js +1 -1
  1097. package/Shaders/ShadersInclude/lightsFragmentFunctions.js.map +1 -1
  1098. package/Shaders/ShadersInclude/logDepthDeclaration.d.ts +1 -1
  1099. package/Shaders/ShadersInclude/logDepthDeclaration.js +1 -1
  1100. package/Shaders/ShadersInclude/logDepthDeclaration.js.map +1 -1
  1101. package/Shaders/ShadersInclude/logDepthFragment.d.ts +1 -1
  1102. package/Shaders/ShadersInclude/logDepthFragment.js +1 -1
  1103. package/Shaders/ShadersInclude/logDepthFragment.js.map +1 -1
  1104. package/Shaders/ShadersInclude/logDepthVertex.d.ts +1 -1
  1105. package/Shaders/ShadersInclude/logDepthVertex.js +1 -1
  1106. package/Shaders/ShadersInclude/logDepthVertex.js.map +1 -1
  1107. package/Shaders/ShadersInclude/mainUVVaryingDeclaration.d.ts +1 -1
  1108. package/Shaders/ShadersInclude/mainUVVaryingDeclaration.js +1 -1
  1109. package/Shaders/ShadersInclude/mainUVVaryingDeclaration.js.map +1 -1
  1110. package/Shaders/ShadersInclude/meshFragmentDeclaration.d.ts +1 -1
  1111. package/Shaders/ShadersInclude/meshFragmentDeclaration.js +1 -1
  1112. package/Shaders/ShadersInclude/meshFragmentDeclaration.js.map +1 -1
  1113. package/Shaders/ShadersInclude/meshUboDeclaration.d.ts +1 -1
  1114. package/Shaders/ShadersInclude/meshUboDeclaration.js +1 -1
  1115. package/Shaders/ShadersInclude/meshUboDeclaration.js.map +1 -1
  1116. package/Shaders/ShadersInclude/meshVertexDeclaration.d.ts +1 -1
  1117. package/Shaders/ShadersInclude/meshVertexDeclaration.js +1 -1
  1118. package/Shaders/ShadersInclude/meshVertexDeclaration.js.map +1 -1
  1119. package/Shaders/ShadersInclude/morphTargetsVertex.d.ts +1 -1
  1120. package/Shaders/ShadersInclude/morphTargetsVertex.js +1 -1
  1121. package/Shaders/ShadersInclude/morphTargetsVertex.js.map +1 -1
  1122. package/Shaders/ShadersInclude/morphTargetsVertexDeclaration.d.ts +1 -1
  1123. package/Shaders/ShadersInclude/morphTargetsVertexDeclaration.js +1 -1
  1124. package/Shaders/ShadersInclude/morphTargetsVertexDeclaration.js.map +1 -1
  1125. package/Shaders/ShadersInclude/morphTargetsVertexGlobal.d.ts +1 -1
  1126. package/Shaders/ShadersInclude/morphTargetsVertexGlobal.js +1 -1
  1127. package/Shaders/ShadersInclude/morphTargetsVertexGlobal.js.map +1 -1
  1128. package/Shaders/ShadersInclude/morphTargetsVertexGlobalDeclaration.d.ts +1 -1
  1129. package/Shaders/ShadersInclude/morphTargetsVertexGlobalDeclaration.js +1 -1
  1130. package/Shaders/ShadersInclude/morphTargetsVertexGlobalDeclaration.js.map +1 -1
  1131. package/Shaders/ShadersInclude/mrtFragmentDeclaration.d.ts +1 -1
  1132. package/Shaders/ShadersInclude/mrtFragmentDeclaration.js +1 -1
  1133. package/Shaders/ShadersInclude/mrtFragmentDeclaration.js.map +1 -1
  1134. package/Shaders/ShadersInclude/oitDeclaration.d.ts +1 -1
  1135. package/Shaders/ShadersInclude/oitDeclaration.js +1 -1
  1136. package/Shaders/ShadersInclude/oitDeclaration.js.map +1 -1
  1137. package/Shaders/ShadersInclude/oitFragment.d.ts +1 -1
  1138. package/Shaders/ShadersInclude/oitFragment.js +1 -1
  1139. package/Shaders/ShadersInclude/oitFragment.js.map +1 -1
  1140. package/Shaders/ShadersInclude/packingFunctions.d.ts +1 -1
  1141. package/Shaders/ShadersInclude/packingFunctions.js +1 -1
  1142. package/Shaders/ShadersInclude/packingFunctions.js.map +1 -1
  1143. package/Shaders/ShadersInclude/pbrBRDFFunctions.d.ts +1 -1
  1144. package/Shaders/ShadersInclude/pbrBRDFFunctions.js +1 -1
  1145. package/Shaders/ShadersInclude/pbrBRDFFunctions.js.map +1 -1
  1146. package/Shaders/ShadersInclude/pbrBlockAlbedoOpacity.d.ts +1 -1
  1147. package/Shaders/ShadersInclude/pbrBlockAlbedoOpacity.js +3 -3
  1148. package/Shaders/ShadersInclude/pbrBlockAlbedoOpacity.js.map +1 -1
  1149. package/Shaders/ShadersInclude/pbrBlockAlphaFresnel.d.ts +1 -1
  1150. package/Shaders/ShadersInclude/pbrBlockAlphaFresnel.js +1 -1
  1151. package/Shaders/ShadersInclude/pbrBlockAlphaFresnel.js.map +1 -1
  1152. package/Shaders/ShadersInclude/pbrBlockAmbientOcclusion.d.ts +1 -1
  1153. package/Shaders/ShadersInclude/pbrBlockAmbientOcclusion.js +1 -1
  1154. package/Shaders/ShadersInclude/pbrBlockAmbientOcclusion.js.map +1 -1
  1155. package/Shaders/ShadersInclude/pbrBlockAnisotropic.d.ts +1 -1
  1156. package/Shaders/ShadersInclude/pbrBlockAnisotropic.js +1 -1
  1157. package/Shaders/ShadersInclude/pbrBlockAnisotropic.js.map +1 -1
  1158. package/Shaders/ShadersInclude/pbrBlockClearcoat.d.ts +1 -1
  1159. package/Shaders/ShadersInclude/pbrBlockClearcoat.js +1 -1
  1160. package/Shaders/ShadersInclude/pbrBlockClearcoat.js.map +1 -1
  1161. package/Shaders/ShadersInclude/pbrBlockDirectLighting.d.ts +1 -1
  1162. package/Shaders/ShadersInclude/pbrBlockDirectLighting.js +1 -1
  1163. package/Shaders/ShadersInclude/pbrBlockDirectLighting.js.map +1 -1
  1164. package/Shaders/ShadersInclude/pbrBlockFinalColorComposition.d.ts +1 -1
  1165. package/Shaders/ShadersInclude/pbrBlockFinalColorComposition.js +1 -1
  1166. package/Shaders/ShadersInclude/pbrBlockFinalColorComposition.js.map +1 -1
  1167. package/Shaders/ShadersInclude/pbrBlockFinalLitComponents.d.ts +1 -1
  1168. package/Shaders/ShadersInclude/pbrBlockFinalLitComponents.js +1 -1
  1169. package/Shaders/ShadersInclude/pbrBlockFinalLitComponents.js.map +1 -1
  1170. package/Shaders/ShadersInclude/pbrBlockFinalUnlitComponents.d.ts +1 -1
  1171. package/Shaders/ShadersInclude/pbrBlockFinalUnlitComponents.js +1 -1
  1172. package/Shaders/ShadersInclude/pbrBlockFinalUnlitComponents.js.map +1 -1
  1173. package/Shaders/ShadersInclude/pbrBlockGeometryInfo.d.ts +1 -1
  1174. package/Shaders/ShadersInclude/pbrBlockGeometryInfo.js +1 -1
  1175. package/Shaders/ShadersInclude/pbrBlockGeometryInfo.js.map +1 -1
  1176. package/Shaders/ShadersInclude/pbrBlockImageProcessing.d.ts +1 -1
  1177. package/Shaders/ShadersInclude/pbrBlockImageProcessing.js +1 -1
  1178. package/Shaders/ShadersInclude/pbrBlockImageProcessing.js.map +1 -1
  1179. package/Shaders/ShadersInclude/pbrBlockIridescence.d.ts +1 -1
  1180. package/Shaders/ShadersInclude/pbrBlockIridescence.js +1 -1
  1181. package/Shaders/ShadersInclude/pbrBlockIridescence.js.map +1 -1
  1182. package/Shaders/ShadersInclude/pbrBlockLightmapInit.d.ts +1 -1
  1183. package/Shaders/ShadersInclude/pbrBlockLightmapInit.js +1 -1
  1184. package/Shaders/ShadersInclude/pbrBlockLightmapInit.js.map +1 -1
  1185. package/Shaders/ShadersInclude/pbrBlockNormalFinal.d.ts +1 -1
  1186. package/Shaders/ShadersInclude/pbrBlockNormalFinal.js +1 -1
  1187. package/Shaders/ShadersInclude/pbrBlockNormalFinal.js.map +1 -1
  1188. package/Shaders/ShadersInclude/pbrBlockNormalGeometric.d.ts +1 -1
  1189. package/Shaders/ShadersInclude/pbrBlockNormalGeometric.js +1 -1
  1190. package/Shaders/ShadersInclude/pbrBlockNormalGeometric.js.map +1 -1
  1191. package/Shaders/ShadersInclude/pbrBlockReflectance.d.ts +1 -1
  1192. package/Shaders/ShadersInclude/pbrBlockReflectance.js +1 -1
  1193. package/Shaders/ShadersInclude/pbrBlockReflectance.js.map +1 -1
  1194. package/Shaders/ShadersInclude/pbrBlockReflectance0.d.ts +1 -1
  1195. package/Shaders/ShadersInclude/pbrBlockReflectance0.js +1 -1
  1196. package/Shaders/ShadersInclude/pbrBlockReflectance0.js.map +1 -1
  1197. package/Shaders/ShadersInclude/pbrBlockReflection.d.ts +1 -1
  1198. package/Shaders/ShadersInclude/pbrBlockReflection.js +1 -1
  1199. package/Shaders/ShadersInclude/pbrBlockReflection.js.map +1 -1
  1200. package/Shaders/ShadersInclude/pbrBlockReflectivity.d.ts +1 -1
  1201. package/Shaders/ShadersInclude/pbrBlockReflectivity.js +1 -1
  1202. package/Shaders/ShadersInclude/pbrBlockReflectivity.js.map +1 -1
  1203. package/Shaders/ShadersInclude/pbrBlockSheen.d.ts +1 -1
  1204. package/Shaders/ShadersInclude/pbrBlockSheen.js +1 -1
  1205. package/Shaders/ShadersInclude/pbrBlockSheen.js.map +1 -1
  1206. package/Shaders/ShadersInclude/pbrBlockSubSurface.d.ts +1 -1
  1207. package/Shaders/ShadersInclude/pbrBlockSubSurface.js +1 -1
  1208. package/Shaders/ShadersInclude/pbrBlockSubSurface.js.map +1 -1
  1209. package/Shaders/ShadersInclude/pbrDebug.d.ts +1 -1
  1210. package/Shaders/ShadersInclude/pbrDebug.js +1 -1
  1211. package/Shaders/ShadersInclude/pbrDebug.js.map +1 -1
  1212. package/Shaders/ShadersInclude/pbrDirectLightingFalloffFunctions.d.ts +1 -1
  1213. package/Shaders/ShadersInclude/pbrDirectLightingFalloffFunctions.js +1 -1
  1214. package/Shaders/ShadersInclude/pbrDirectLightingFalloffFunctions.js.map +1 -1
  1215. package/Shaders/ShadersInclude/pbrDirectLightingFunctions.d.ts +1 -1
  1216. package/Shaders/ShadersInclude/pbrDirectLightingFunctions.js +1 -1
  1217. package/Shaders/ShadersInclude/pbrDirectLightingFunctions.js.map +1 -1
  1218. package/Shaders/ShadersInclude/pbrDirectLightingSetupFunctions.d.ts +1 -1
  1219. package/Shaders/ShadersInclude/pbrDirectLightingSetupFunctions.js +1 -1
  1220. package/Shaders/ShadersInclude/pbrDirectLightingSetupFunctions.js.map +1 -1
  1221. package/Shaders/ShadersInclude/pbrFragmentDeclaration.d.ts +1 -1
  1222. package/Shaders/ShadersInclude/pbrFragmentDeclaration.js +1 -1
  1223. package/Shaders/ShadersInclude/pbrFragmentDeclaration.js.map +1 -1
  1224. package/Shaders/ShadersInclude/pbrFragmentExtraDeclaration.d.ts +1 -1
  1225. package/Shaders/ShadersInclude/pbrFragmentExtraDeclaration.js +2 -2
  1226. package/Shaders/ShadersInclude/pbrFragmentExtraDeclaration.js.map +1 -1
  1227. package/Shaders/ShadersInclude/pbrFragmentSamplersDeclaration.d.ts +1 -1
  1228. package/Shaders/ShadersInclude/pbrFragmentSamplersDeclaration.js +1 -1
  1229. package/Shaders/ShadersInclude/pbrFragmentSamplersDeclaration.js.map +1 -1
  1230. package/Shaders/ShadersInclude/pbrHelperFunctions.d.ts +1 -1
  1231. package/Shaders/ShadersInclude/pbrHelperFunctions.js +1 -1
  1232. package/Shaders/ShadersInclude/pbrHelperFunctions.js.map +1 -1
  1233. package/Shaders/ShadersInclude/pbrIBLFunctions.d.ts +1 -1
  1234. package/Shaders/ShadersInclude/pbrIBLFunctions.js +1 -1
  1235. package/Shaders/ShadersInclude/pbrIBLFunctions.js.map +1 -1
  1236. package/Shaders/ShadersInclude/pbrUboDeclaration.d.ts +1 -1
  1237. package/Shaders/ShadersInclude/pbrUboDeclaration.js +1 -1
  1238. package/Shaders/ShadersInclude/pbrUboDeclaration.js.map +1 -1
  1239. package/Shaders/ShadersInclude/pbrVertexDeclaration.d.ts +1 -1
  1240. package/Shaders/ShadersInclude/pbrVertexDeclaration.js +1 -1
  1241. package/Shaders/ShadersInclude/pbrVertexDeclaration.js.map +1 -1
  1242. package/Shaders/ShadersInclude/pointCloudVertex.d.ts +1 -1
  1243. package/Shaders/ShadersInclude/pointCloudVertex.js +1 -1
  1244. package/Shaders/ShadersInclude/pointCloudVertex.js.map +1 -1
  1245. package/Shaders/ShadersInclude/pointCloudVertexDeclaration.d.ts +1 -1
  1246. package/Shaders/ShadersInclude/pointCloudVertexDeclaration.js +1 -1
  1247. package/Shaders/ShadersInclude/pointCloudVertexDeclaration.js.map +1 -1
  1248. package/Shaders/ShadersInclude/prePassDeclaration.d.ts +1 -1
  1249. package/Shaders/ShadersInclude/prePassDeclaration.js +1 -1
  1250. package/Shaders/ShadersInclude/prePassDeclaration.js.map +1 -1
  1251. package/Shaders/ShadersInclude/prePassVertex.d.ts +1 -1
  1252. package/Shaders/ShadersInclude/prePassVertex.js +1 -1
  1253. package/Shaders/ShadersInclude/prePassVertex.js.map +1 -1
  1254. package/Shaders/ShadersInclude/prePassVertexDeclaration.d.ts +1 -1
  1255. package/Shaders/ShadersInclude/prePassVertexDeclaration.js +1 -1
  1256. package/Shaders/ShadersInclude/prePassVertexDeclaration.js.map +1 -1
  1257. package/Shaders/ShadersInclude/reflectionFunction.d.ts +1 -1
  1258. package/Shaders/ShadersInclude/reflectionFunction.js +1 -1
  1259. package/Shaders/ShadersInclude/reflectionFunction.js.map +1 -1
  1260. package/Shaders/ShadersInclude/samplerFragmentAlternateDeclaration.d.ts +1 -1
  1261. package/Shaders/ShadersInclude/samplerFragmentAlternateDeclaration.js +1 -1
  1262. package/Shaders/ShadersInclude/samplerFragmentAlternateDeclaration.js.map +1 -1
  1263. package/Shaders/ShadersInclude/samplerFragmentDeclaration.d.ts +1 -1
  1264. package/Shaders/ShadersInclude/samplerFragmentDeclaration.js +1 -1
  1265. package/Shaders/ShadersInclude/samplerFragmentDeclaration.js.map +1 -1
  1266. package/Shaders/ShadersInclude/samplerVertexDeclaration.d.ts +1 -1
  1267. package/Shaders/ShadersInclude/samplerVertexDeclaration.js +1 -1
  1268. package/Shaders/ShadersInclude/samplerVertexDeclaration.js.map +1 -1
  1269. package/Shaders/ShadersInclude/samplerVertexImplementation.d.ts +1 -1
  1270. package/Shaders/ShadersInclude/samplerVertexImplementation.js +1 -1
  1271. package/Shaders/ShadersInclude/samplerVertexImplementation.js.map +1 -1
  1272. package/Shaders/ShadersInclude/sceneFragmentDeclaration.d.ts +1 -1
  1273. package/Shaders/ShadersInclude/sceneFragmentDeclaration.js +1 -1
  1274. package/Shaders/ShadersInclude/sceneFragmentDeclaration.js.map +1 -1
  1275. package/Shaders/ShadersInclude/sceneUboDeclaration.d.ts +1 -1
  1276. package/Shaders/ShadersInclude/sceneUboDeclaration.js +1 -1
  1277. package/Shaders/ShadersInclude/sceneUboDeclaration.js.map +1 -1
  1278. package/Shaders/ShadersInclude/sceneVertexDeclaration.d.ts +1 -1
  1279. package/Shaders/ShadersInclude/sceneVertexDeclaration.js +1 -1
  1280. package/Shaders/ShadersInclude/sceneVertexDeclaration.js.map +1 -1
  1281. package/Shaders/ShadersInclude/shadowMapFragment.d.ts +1 -1
  1282. package/Shaders/ShadersInclude/shadowMapFragment.js +1 -1
  1283. package/Shaders/ShadersInclude/shadowMapFragment.js.map +1 -1
  1284. package/Shaders/ShadersInclude/shadowMapFragmentExtraDeclaration.d.ts +1 -1
  1285. package/Shaders/ShadersInclude/shadowMapFragmentExtraDeclaration.js +1 -1
  1286. package/Shaders/ShadersInclude/shadowMapFragmentExtraDeclaration.js.map +1 -1
  1287. package/Shaders/ShadersInclude/shadowMapFragmentSoftTransparentShadow.d.ts +1 -1
  1288. package/Shaders/ShadersInclude/shadowMapFragmentSoftTransparentShadow.js +1 -1
  1289. package/Shaders/ShadersInclude/shadowMapFragmentSoftTransparentShadow.js.map +1 -1
  1290. package/Shaders/ShadersInclude/shadowMapUboDeclaration.d.ts +1 -1
  1291. package/Shaders/ShadersInclude/shadowMapUboDeclaration.js +1 -1
  1292. package/Shaders/ShadersInclude/shadowMapUboDeclaration.js.map +1 -1
  1293. package/Shaders/ShadersInclude/shadowMapVertexDeclaration.d.ts +1 -1
  1294. package/Shaders/ShadersInclude/shadowMapVertexDeclaration.js +1 -1
  1295. package/Shaders/ShadersInclude/shadowMapVertexDeclaration.js.map +1 -1
  1296. package/Shaders/ShadersInclude/shadowMapVertexExtraDeclaration.d.ts +1 -1
  1297. package/Shaders/ShadersInclude/shadowMapVertexExtraDeclaration.js +1 -1
  1298. package/Shaders/ShadersInclude/shadowMapVertexExtraDeclaration.js.map +1 -1
  1299. package/Shaders/ShadersInclude/shadowMapVertexMetric.d.ts +1 -1
  1300. package/Shaders/ShadersInclude/shadowMapVertexMetric.js +1 -1
  1301. package/Shaders/ShadersInclude/shadowMapVertexMetric.js.map +1 -1
  1302. package/Shaders/ShadersInclude/shadowMapVertexNormalBias.d.ts +1 -1
  1303. package/Shaders/ShadersInclude/shadowMapVertexNormalBias.js +1 -1
  1304. package/Shaders/ShadersInclude/shadowMapVertexNormalBias.js.map +1 -1
  1305. package/Shaders/ShadersInclude/shadowsFragmentFunctions.d.ts +1 -1
  1306. package/Shaders/ShadersInclude/shadowsFragmentFunctions.js +1 -1
  1307. package/Shaders/ShadersInclude/shadowsFragmentFunctions.js.map +1 -1
  1308. package/Shaders/ShadersInclude/shadowsVertex.d.ts +1 -1
  1309. package/Shaders/ShadersInclude/shadowsVertex.js +1 -1
  1310. package/Shaders/ShadersInclude/shadowsVertex.js.map +1 -1
  1311. package/Shaders/ShadersInclude/subSurfaceScatteringFunctions.d.ts +1 -1
  1312. package/Shaders/ShadersInclude/subSurfaceScatteringFunctions.js +1 -1
  1313. package/Shaders/ShadersInclude/subSurfaceScatteringFunctions.js.map +1 -1
  1314. package/Shaders/ShadersInclude/uvAttributeDeclaration.d.ts +1 -1
  1315. package/Shaders/ShadersInclude/uvAttributeDeclaration.js +1 -1
  1316. package/Shaders/ShadersInclude/uvAttributeDeclaration.js.map +1 -1
  1317. package/Shaders/ShadersInclude/uvVariableDeclaration.d.ts +1 -1
  1318. package/Shaders/ShadersInclude/uvVariableDeclaration.js +1 -1
  1319. package/Shaders/ShadersInclude/uvVariableDeclaration.js.map +1 -1
  1320. package/Shaders/ShadersInclude/vertexColorMixing.d.ts +1 -1
  1321. package/Shaders/ShadersInclude/vertexColorMixing.js +2 -2
  1322. package/Shaders/ShadersInclude/vertexColorMixing.js.map +1 -1
  1323. package/Shaders/anaglyph.fragment.d.ts +1 -1
  1324. package/Shaders/anaglyph.fragment.js +1 -1
  1325. package/Shaders/anaglyph.fragment.js.map +1 -1
  1326. package/Shaders/background.fragment.d.ts +1 -1
  1327. package/Shaders/background.fragment.js +1 -1
  1328. package/Shaders/background.fragment.js.map +1 -1
  1329. package/Shaders/background.vertex.d.ts +1 -1
  1330. package/Shaders/background.vertex.js +1 -1
  1331. package/Shaders/background.vertex.js.map +1 -1
  1332. package/Shaders/blackAndWhite.fragment.d.ts +1 -1
  1333. package/Shaders/blackAndWhite.fragment.js +1 -1
  1334. package/Shaders/blackAndWhite.fragment.js.map +1 -1
  1335. package/Shaders/bloomMerge.fragment.d.ts +1 -1
  1336. package/Shaders/bloomMerge.fragment.js +1 -1
  1337. package/Shaders/bloomMerge.fragment.js.map +1 -1
  1338. package/Shaders/blur.fragment.d.ts +1 -1
  1339. package/Shaders/blur.fragment.js +1 -1
  1340. package/Shaders/blur.fragment.js.map +1 -1
  1341. package/Shaders/boundingBoxRenderer.fragment.d.ts +1 -1
  1342. package/Shaders/boundingBoxRenderer.fragment.js +1 -1
  1343. package/Shaders/boundingBoxRenderer.fragment.js.map +1 -1
  1344. package/Shaders/boundingBoxRenderer.vertex.d.ts +1 -1
  1345. package/Shaders/boundingBoxRenderer.vertex.js +1 -1
  1346. package/Shaders/boundingBoxRenderer.vertex.js.map +1 -1
  1347. package/Shaders/chromaticAberration.fragment.d.ts +1 -1
  1348. package/Shaders/chromaticAberration.fragment.js +2 -1
  1349. package/Shaders/chromaticAberration.fragment.js.map +1 -1
  1350. package/Shaders/circleOfConfusion.fragment.d.ts +1 -1
  1351. package/Shaders/circleOfConfusion.fragment.js +1 -1
  1352. package/Shaders/circleOfConfusion.fragment.js.map +1 -1
  1353. package/Shaders/clearQuad.fragment.d.ts +1 -1
  1354. package/Shaders/clearQuad.fragment.js +1 -1
  1355. package/Shaders/clearQuad.fragment.js.map +1 -1
  1356. package/Shaders/clearQuad.vertex.d.ts +1 -1
  1357. package/Shaders/clearQuad.vertex.js +1 -1
  1358. package/Shaders/clearQuad.vertex.js.map +1 -1
  1359. package/Shaders/color.fragment.d.ts +1 -1
  1360. package/Shaders/color.fragment.js +4 -3
  1361. package/Shaders/color.fragment.js.map +1 -1
  1362. package/Shaders/color.vertex.d.ts +1 -1
  1363. package/Shaders/color.vertex.js +2 -2
  1364. package/Shaders/color.vertex.js.map +1 -1
  1365. package/Shaders/colorCorrection.fragment.d.ts +1 -1
  1366. package/Shaders/colorCorrection.fragment.js +1 -1
  1367. package/Shaders/colorCorrection.fragment.js.map +1 -1
  1368. package/Shaders/convolution.fragment.d.ts +1 -1
  1369. package/Shaders/convolution.fragment.js +1 -1
  1370. package/Shaders/convolution.fragment.js.map +1 -1
  1371. package/Shaders/default.fragment.d.ts +1 -1
  1372. package/Shaders/default.fragment.js +4 -4
  1373. package/Shaders/default.fragment.js.map +1 -1
  1374. package/Shaders/default.vertex.d.ts +1 -1
  1375. package/Shaders/default.vertex.js +2 -2
  1376. package/Shaders/default.vertex.js.map +1 -1
  1377. package/Shaders/depth.fragment.d.ts +1 -1
  1378. package/Shaders/depth.fragment.js +1 -1
  1379. package/Shaders/depth.fragment.js.map +1 -1
  1380. package/Shaders/depth.vertex.d.ts +1 -1
  1381. package/Shaders/depth.vertex.js +1 -1
  1382. package/Shaders/depth.vertex.js.map +1 -1
  1383. package/Shaders/depthBoxBlur.fragment.d.ts +1 -1
  1384. package/Shaders/depthBoxBlur.fragment.js +1 -1
  1385. package/Shaders/depthBoxBlur.fragment.js.map +1 -1
  1386. package/Shaders/depthOfField.fragment.d.ts +1 -1
  1387. package/Shaders/depthOfField.fragment.js +1 -1
  1388. package/Shaders/depthOfField.fragment.js.map +1 -1
  1389. package/Shaders/depthOfFieldMerge.fragment.d.ts +1 -1
  1390. package/Shaders/depthOfFieldMerge.fragment.js +1 -1
  1391. package/Shaders/depthOfFieldMerge.fragment.js.map +1 -1
  1392. package/Shaders/displayPass.fragment.d.ts +1 -1
  1393. package/Shaders/displayPass.fragment.js +1 -1
  1394. package/Shaders/displayPass.fragment.js.map +1 -1
  1395. package/Shaders/extractHighlights.fragment.d.ts +1 -1
  1396. package/Shaders/extractHighlights.fragment.js +1 -1
  1397. package/Shaders/extractHighlights.fragment.js.map +1 -1
  1398. package/Shaders/filter.fragment.d.ts +1 -1
  1399. package/Shaders/filter.fragment.js +1 -1
  1400. package/Shaders/filter.fragment.js.map +1 -1
  1401. package/Shaders/fxaa.fragment.d.ts +1 -1
  1402. package/Shaders/fxaa.fragment.js +1 -1
  1403. package/Shaders/fxaa.fragment.js.map +1 -1
  1404. package/Shaders/fxaa.vertex.d.ts +1 -1
  1405. package/Shaders/fxaa.vertex.js +1 -1
  1406. package/Shaders/fxaa.vertex.js.map +1 -1
  1407. package/Shaders/geometry.fragment.d.ts +1 -1
  1408. package/Shaders/geometry.fragment.js +14 -2
  1409. package/Shaders/geometry.fragment.js.map +1 -1
  1410. package/Shaders/geometry.vertex.d.ts +1 -1
  1411. package/Shaders/geometry.vertex.js +1 -1
  1412. package/Shaders/geometry.vertex.js.map +1 -1
  1413. package/Shaders/glowBlurPostProcess.fragment.d.ts +1 -1
  1414. package/Shaders/glowBlurPostProcess.fragment.js +1 -1
  1415. package/Shaders/glowBlurPostProcess.fragment.js.map +1 -1
  1416. package/Shaders/glowMapGeneration.fragment.d.ts +1 -1
  1417. package/Shaders/glowMapGeneration.fragment.js +1 -1
  1418. package/Shaders/glowMapGeneration.fragment.js.map +1 -1
  1419. package/Shaders/glowMapGeneration.vertex.d.ts +1 -1
  1420. package/Shaders/glowMapGeneration.vertex.js +1 -1
  1421. package/Shaders/glowMapGeneration.vertex.js.map +1 -1
  1422. package/Shaders/glowMapMerge.fragment.d.ts +1 -1
  1423. package/Shaders/glowMapMerge.fragment.js +1 -1
  1424. package/Shaders/glowMapMerge.fragment.js.map +1 -1
  1425. package/Shaders/glowMapMerge.vertex.d.ts +1 -1
  1426. package/Shaders/glowMapMerge.vertex.js +1 -1
  1427. package/Shaders/glowMapMerge.vertex.js.map +1 -1
  1428. package/Shaders/gpuRenderParticles.fragment.d.ts +3 -1
  1429. package/Shaders/gpuRenderParticles.fragment.js +9 -2
  1430. package/Shaders/gpuRenderParticles.fragment.js.map +1 -1
  1431. package/Shaders/gpuRenderParticles.vertex.d.ts +3 -1
  1432. package/Shaders/gpuRenderParticles.vertex.js +5 -1
  1433. package/Shaders/gpuRenderParticles.vertex.js.map +1 -1
  1434. package/Shaders/gpuUpdateParticles.fragment.d.ts +1 -1
  1435. package/Shaders/gpuUpdateParticles.fragment.js +1 -1
  1436. package/Shaders/gpuUpdateParticles.fragment.js.map +1 -1
  1437. package/Shaders/gpuUpdateParticles.vertex.d.ts +1 -1
  1438. package/Shaders/gpuUpdateParticles.vertex.js +1 -1
  1439. package/Shaders/gpuUpdateParticles.vertex.js.map +1 -1
  1440. package/Shaders/grain.fragment.d.ts +1 -1
  1441. package/Shaders/grain.fragment.js +1 -1
  1442. package/Shaders/grain.fragment.js.map +1 -1
  1443. package/Shaders/hdrFiltering.fragment.d.ts +1 -1
  1444. package/Shaders/hdrFiltering.fragment.js +1 -1
  1445. package/Shaders/hdrFiltering.fragment.js.map +1 -1
  1446. package/Shaders/hdrFiltering.vertex.d.ts +1 -1
  1447. package/Shaders/hdrFiltering.vertex.js +1 -1
  1448. package/Shaders/hdrFiltering.vertex.js.map +1 -1
  1449. package/Shaders/highlights.fragment.d.ts +1 -1
  1450. package/Shaders/highlights.fragment.js +1 -1
  1451. package/Shaders/highlights.fragment.js.map +1 -1
  1452. package/Shaders/imageProcessing.fragment.d.ts +1 -1
  1453. package/Shaders/imageProcessing.fragment.js +1 -1
  1454. package/Shaders/imageProcessing.fragment.js.map +1 -1
  1455. package/Shaders/kernelBlur.fragment.d.ts +1 -1
  1456. package/Shaders/kernelBlur.fragment.js +1 -1
  1457. package/Shaders/kernelBlur.fragment.js.map +1 -1
  1458. package/Shaders/kernelBlur.vertex.d.ts +1 -1
  1459. package/Shaders/kernelBlur.vertex.js +1 -1
  1460. package/Shaders/kernelBlur.vertex.js.map +1 -1
  1461. package/Shaders/layer.fragment.d.ts +1 -1
  1462. package/Shaders/layer.fragment.js +1 -1
  1463. package/Shaders/layer.fragment.js.map +1 -1
  1464. package/Shaders/layer.vertex.d.ts +1 -1
  1465. package/Shaders/layer.vertex.js +1 -1
  1466. package/Shaders/layer.vertex.js.map +1 -1
  1467. package/Shaders/lensFlare.fragment.d.ts +1 -1
  1468. package/Shaders/lensFlare.fragment.js +1 -1
  1469. package/Shaders/lensFlare.fragment.js.map +1 -1
  1470. package/Shaders/lensFlare.vertex.d.ts +1 -1
  1471. package/Shaders/lensFlare.vertex.js +1 -1
  1472. package/Shaders/lensFlare.vertex.js.map +1 -1
  1473. package/Shaders/lensHighlights.fragment.d.ts +1 -1
  1474. package/Shaders/lensHighlights.fragment.js +1 -1
  1475. package/Shaders/lensHighlights.fragment.js.map +1 -1
  1476. package/Shaders/line.fragment.d.ts +1 -1
  1477. package/Shaders/line.fragment.js +1 -1
  1478. package/Shaders/line.fragment.js.map +1 -1
  1479. package/Shaders/line.vertex.d.ts +1 -1
  1480. package/Shaders/line.vertex.js +1 -1
  1481. package/Shaders/line.vertex.js.map +1 -1
  1482. package/Shaders/minmaxRedux.fragment.d.ts +1 -1
  1483. package/Shaders/minmaxRedux.fragment.js +1 -1
  1484. package/Shaders/minmaxRedux.fragment.js.map +1 -1
  1485. package/Shaders/motionBlur.fragment.d.ts +1 -1
  1486. package/Shaders/motionBlur.fragment.js +1 -1
  1487. package/Shaders/motionBlur.fragment.js.map +1 -1
  1488. package/Shaders/noise.fragment.d.ts +1 -1
  1489. package/Shaders/noise.fragment.js +1 -1
  1490. package/Shaders/noise.fragment.js.map +1 -1
  1491. package/Shaders/oitBackBlend.fragment.d.ts +1 -1
  1492. package/Shaders/oitBackBlend.fragment.js +1 -1
  1493. package/Shaders/oitBackBlend.fragment.js.map +1 -1
  1494. package/Shaders/oitFinal.fragment.d.ts +1 -1
  1495. package/Shaders/oitFinal.fragment.js +1 -1
  1496. package/Shaders/oitFinal.fragment.js.map +1 -1
  1497. package/Shaders/outline.fragment.d.ts +1 -1
  1498. package/Shaders/outline.fragment.js +1 -1
  1499. package/Shaders/outline.fragment.js.map +1 -1
  1500. package/Shaders/outline.vertex.d.ts +1 -1
  1501. package/Shaders/outline.vertex.js +1 -1
  1502. package/Shaders/outline.vertex.js.map +1 -1
  1503. package/Shaders/particles.fragment.d.ts +3 -1
  1504. package/Shaders/particles.fragment.js +9 -2
  1505. package/Shaders/particles.fragment.js.map +1 -1
  1506. package/Shaders/particles.vertex.d.ts +3 -1
  1507. package/Shaders/particles.vertex.js +5 -1
  1508. package/Shaders/particles.vertex.js.map +1 -1
  1509. package/Shaders/pass.fragment.d.ts +1 -1
  1510. package/Shaders/pass.fragment.js +1 -1
  1511. package/Shaders/pass.fragment.js.map +1 -1
  1512. package/Shaders/passCube.fragment.d.ts +1 -1
  1513. package/Shaders/passCube.fragment.js +1 -1
  1514. package/Shaders/passCube.fragment.js.map +1 -1
  1515. package/Shaders/pbr.fragment.d.ts +1 -1
  1516. package/Shaders/pbr.fragment.js +1 -1
  1517. package/Shaders/pbr.fragment.js.map +1 -1
  1518. package/Shaders/pbr.vertex.d.ts +1 -1
  1519. package/Shaders/pbr.vertex.js +2 -2
  1520. package/Shaders/pbr.vertex.js.map +1 -1
  1521. package/Shaders/postprocess.vertex.d.ts +1 -1
  1522. package/Shaders/postprocess.vertex.js +1 -1
  1523. package/Shaders/postprocess.vertex.js.map +1 -1
  1524. package/Shaders/procedural.vertex.d.ts +1 -1
  1525. package/Shaders/procedural.vertex.js +1 -1
  1526. package/Shaders/procedural.vertex.js.map +1 -1
  1527. package/Shaders/refraction.fragment.d.ts +1 -1
  1528. package/Shaders/refraction.fragment.js +1 -1
  1529. package/Shaders/refraction.fragment.js.map +1 -1
  1530. package/Shaders/rgbdDecode.fragment.d.ts +1 -1
  1531. package/Shaders/rgbdDecode.fragment.js +1 -1
  1532. package/Shaders/rgbdDecode.fragment.js.map +1 -1
  1533. package/Shaders/rgbdEncode.fragment.d.ts +1 -1
  1534. package/Shaders/rgbdEncode.fragment.js +1 -1
  1535. package/Shaders/rgbdEncode.fragment.js.map +1 -1
  1536. package/Shaders/screenSpaceCurvature.fragment.d.ts +1 -1
  1537. package/Shaders/screenSpaceCurvature.fragment.js +1 -1
  1538. package/Shaders/screenSpaceCurvature.fragment.js.map +1 -1
  1539. package/Shaders/screenSpaceReflection.fragment.d.ts +1 -1
  1540. package/Shaders/screenSpaceReflection.fragment.js +1 -1
  1541. package/Shaders/screenSpaceReflection.fragment.js.map +1 -1
  1542. package/Shaders/shadowMap.fragment.d.ts +1 -1
  1543. package/Shaders/shadowMap.fragment.js +1 -1
  1544. package/Shaders/shadowMap.fragment.js.map +1 -1
  1545. package/Shaders/shadowMap.vertex.d.ts +1 -1
  1546. package/Shaders/shadowMap.vertex.js +1 -1
  1547. package/Shaders/shadowMap.vertex.js.map +1 -1
  1548. package/Shaders/sharpen.fragment.d.ts +1 -1
  1549. package/Shaders/sharpen.fragment.js +1 -1
  1550. package/Shaders/sharpen.fragment.js.map +1 -1
  1551. package/Shaders/spriteMap.fragment.d.ts +1 -1
  1552. package/Shaders/spriteMap.fragment.js +1 -1
  1553. package/Shaders/spriteMap.fragment.js.map +1 -1
  1554. package/Shaders/spriteMap.vertex.d.ts +1 -1
  1555. package/Shaders/spriteMap.vertex.js +1 -1
  1556. package/Shaders/spriteMap.vertex.js.map +1 -1
  1557. package/Shaders/sprites.fragment.d.ts +1 -1
  1558. package/Shaders/sprites.fragment.js +1 -1
  1559. package/Shaders/sprites.fragment.js.map +1 -1
  1560. package/Shaders/sprites.vertex.d.ts +1 -1
  1561. package/Shaders/sprites.vertex.js +1 -1
  1562. package/Shaders/sprites.vertex.js.map +1 -1
  1563. package/Shaders/ssao.fragment.d.ts +1 -1
  1564. package/Shaders/ssao.fragment.js +1 -1
  1565. package/Shaders/ssao.fragment.js.map +1 -1
  1566. package/Shaders/ssao2.fragment.d.ts +1 -1
  1567. package/Shaders/ssao2.fragment.js +1 -1
  1568. package/Shaders/ssao2.fragment.js.map +1 -1
  1569. package/Shaders/ssaoCombine.fragment.d.ts +1 -1
  1570. package/Shaders/ssaoCombine.fragment.js +1 -1
  1571. package/Shaders/ssaoCombine.fragment.js.map +1 -1
  1572. package/Shaders/standard.fragment.d.ts +1 -1
  1573. package/Shaders/standard.fragment.js +1 -1
  1574. package/Shaders/standard.fragment.js.map +1 -1
  1575. package/Shaders/stereoscopicInterlace.fragment.d.ts +1 -1
  1576. package/Shaders/stereoscopicInterlace.fragment.js +1 -1
  1577. package/Shaders/stereoscopicInterlace.fragment.js.map +1 -1
  1578. package/Shaders/subSurfaceScattering.fragment.d.ts +1 -1
  1579. package/Shaders/subSurfaceScattering.fragment.js +1 -1
  1580. package/Shaders/subSurfaceScattering.fragment.js.map +1 -1
  1581. package/Shaders/tonemap.fragment.d.ts +1 -1
  1582. package/Shaders/tonemap.fragment.js +1 -1
  1583. package/Shaders/tonemap.fragment.js.map +1 -1
  1584. package/Shaders/volumetricLightScattering.fragment.d.ts +1 -1
  1585. package/Shaders/volumetricLightScattering.fragment.js +1 -1
  1586. package/Shaders/volumetricLightScattering.fragment.js.map +1 -1
  1587. package/Shaders/volumetricLightScatteringPass.fragment.d.ts +1 -1
  1588. package/Shaders/volumetricLightScatteringPass.fragment.js +1 -1
  1589. package/Shaders/volumetricLightScatteringPass.fragment.js.map +1 -1
  1590. package/Shaders/volumetricLightScatteringPass.vertex.d.ts +1 -1
  1591. package/Shaders/volumetricLightScatteringPass.vertex.js +1 -1
  1592. package/Shaders/volumetricLightScatteringPass.vertex.js.map +1 -1
  1593. package/Shaders/vrDistortionCorrection.fragment.d.ts +1 -1
  1594. package/Shaders/vrDistortionCorrection.fragment.js +1 -1
  1595. package/Shaders/vrDistortionCorrection.fragment.js.map +1 -1
  1596. package/Shaders/vrMultiviewToSingleview.fragment.d.ts +1 -1
  1597. package/Shaders/vrMultiviewToSingleview.fragment.js +1 -1
  1598. package/Shaders/vrMultiviewToSingleview.fragment.js.map +1 -1
  1599. package/ShadersWGSL/ShadersInclude/bakedVertexAnimation.d.ts +1 -1
  1600. package/ShadersWGSL/ShadersInclude/bakedVertexAnimation.js +1 -1
  1601. package/ShadersWGSL/ShadersInclude/bakedVertexAnimation.js.map +1 -1
  1602. package/ShadersWGSL/ShadersInclude/bakedVertexAnimationDeclaration.d.ts +1 -1
  1603. package/ShadersWGSL/ShadersInclude/bakedVertexAnimationDeclaration.js +1 -1
  1604. package/ShadersWGSL/ShadersInclude/bakedVertexAnimationDeclaration.js.map +1 -1
  1605. package/ShadersWGSL/ShadersInclude/bonesDeclaration.d.ts +1 -1
  1606. package/ShadersWGSL/ShadersInclude/bonesDeclaration.js +1 -1
  1607. package/ShadersWGSL/ShadersInclude/bonesDeclaration.js.map +1 -1
  1608. package/ShadersWGSL/ShadersInclude/bonesVertex.d.ts +1 -1
  1609. package/ShadersWGSL/ShadersInclude/bonesVertex.js +1 -1
  1610. package/ShadersWGSL/ShadersInclude/bonesVertex.js.map +1 -1
  1611. package/ShadersWGSL/ShadersInclude/clipPlaneFragment.d.ts +1 -1
  1612. package/ShadersWGSL/ShadersInclude/clipPlaneFragment.js +1 -1
  1613. package/ShadersWGSL/ShadersInclude/clipPlaneFragment.js.map +1 -1
  1614. package/ShadersWGSL/ShadersInclude/clipPlaneFragmentDeclaration.d.ts +1 -1
  1615. package/ShadersWGSL/ShadersInclude/clipPlaneFragmentDeclaration.js +1 -1
  1616. package/ShadersWGSL/ShadersInclude/clipPlaneFragmentDeclaration.js.map +1 -1
  1617. package/ShadersWGSL/ShadersInclude/clipPlaneVertex.d.ts +1 -1
  1618. package/ShadersWGSL/ShadersInclude/clipPlaneVertex.js +1 -1
  1619. package/ShadersWGSL/ShadersInclude/clipPlaneVertex.js.map +1 -1
  1620. package/ShadersWGSL/ShadersInclude/clipPlaneVertexDeclaration.d.ts +1 -1
  1621. package/ShadersWGSL/ShadersInclude/clipPlaneVertexDeclaration.js +1 -1
  1622. package/ShadersWGSL/ShadersInclude/clipPlaneVertexDeclaration.js.map +1 -1
  1623. package/ShadersWGSL/ShadersInclude/instancesDeclaration.d.ts +1 -1
  1624. package/ShadersWGSL/ShadersInclude/instancesDeclaration.js +1 -1
  1625. package/ShadersWGSL/ShadersInclude/instancesDeclaration.js.map +1 -1
  1626. package/ShadersWGSL/ShadersInclude/instancesVertex.d.ts +1 -1
  1627. package/ShadersWGSL/ShadersInclude/instancesVertex.js +1 -1
  1628. package/ShadersWGSL/ShadersInclude/instancesVertex.js.map +1 -1
  1629. package/ShadersWGSL/ShadersInclude/meshUboDeclaration.d.ts +1 -1
  1630. package/ShadersWGSL/ShadersInclude/meshUboDeclaration.js +1 -1
  1631. package/ShadersWGSL/ShadersInclude/meshUboDeclaration.js.map +1 -1
  1632. package/ShadersWGSL/ShadersInclude/morphTargetsVertex.d.ts +1 -1
  1633. package/ShadersWGSL/ShadersInclude/morphTargetsVertex.js +1 -1
  1634. package/ShadersWGSL/ShadersInclude/morphTargetsVertex.js.map +1 -1
  1635. package/ShadersWGSL/ShadersInclude/morphTargetsVertexDeclaration.d.ts +1 -1
  1636. package/ShadersWGSL/ShadersInclude/morphTargetsVertexDeclaration.js +1 -1
  1637. package/ShadersWGSL/ShadersInclude/morphTargetsVertexDeclaration.js.map +1 -1
  1638. package/ShadersWGSL/ShadersInclude/morphTargetsVertexGlobal.d.ts +1 -1
  1639. package/ShadersWGSL/ShadersInclude/morphTargetsVertexGlobal.js +1 -1
  1640. package/ShadersWGSL/ShadersInclude/morphTargetsVertexGlobal.js.map +1 -1
  1641. package/ShadersWGSL/ShadersInclude/morphTargetsVertexGlobalDeclaration.d.ts +1 -1
  1642. package/ShadersWGSL/ShadersInclude/morphTargetsVertexGlobalDeclaration.js +1 -1
  1643. package/ShadersWGSL/ShadersInclude/morphTargetsVertexGlobalDeclaration.js.map +1 -1
  1644. package/ShadersWGSL/ShadersInclude/sceneUboDeclaration.d.ts +1 -1
  1645. package/ShadersWGSL/ShadersInclude/sceneUboDeclaration.js +1 -1
  1646. package/ShadersWGSL/ShadersInclude/sceneUboDeclaration.js.map +1 -1
  1647. package/ShadersWGSL/gpuUpdateParticles.compute.d.ts +1 -1
  1648. package/ShadersWGSL/gpuUpdateParticles.compute.js +1 -1
  1649. package/ShadersWGSL/gpuUpdateParticles.compute.js.map +1 -1
  1650. package/Sprites/spriteManager.d.ts +4 -0
  1651. package/Sprites/spriteManager.js +2 -0
  1652. package/Sprites/spriteManager.js.map +1 -1
  1653. package/Sprites/spriteSceneComponent.d.ts +6 -6
  1654. package/Sprites/spriteSceneComponent.js.map +1 -1
  1655. package/Sprites/thinSprite.d.ts +5 -6
  1656. package/Sprites/thinSprite.js +1 -2
  1657. package/Sprites/thinSprite.js.map +1 -1
  1658. package/States/IStencilState.d.ts +1 -1
  1659. package/States/IStencilState.js.map +1 -1
  1660. package/States/alphaCullingState.d.ts +1 -1
  1661. package/States/alphaCullingState.js +1 -1
  1662. package/States/alphaCullingState.js.map +1 -1
  1663. package/States/depthCullingState.d.ts +1 -1
  1664. package/States/depthCullingState.js +1 -1
  1665. package/States/depthCullingState.js.map +1 -1
  1666. package/States/stencilState.d.ts +1 -1
  1667. package/States/stencilState.js +1 -1
  1668. package/States/stencilState.js.map +1 -1
  1669. package/States/stencilStateComposer.d.ts +1 -1
  1670. package/States/stencilStateComposer.js +1 -1
  1671. package/States/stencilStateComposer.js.map +1 -1
  1672. package/XR/features/WebXRControllerPhysics.d.ts +1 -1
  1673. package/XR/features/WebXRControllerPhysics.js +1 -1
  1674. package/XR/features/WebXRControllerPhysics.js.map +1 -1
  1675. package/XR/features/WebXRControllerPointerSelection.d.ts +3 -6
  1676. package/XR/features/WebXRControllerPointerSelection.js +3 -6
  1677. package/XR/features/WebXRControllerPointerSelection.js.map +1 -1
  1678. package/XR/features/WebXRLayers.d.ts +2 -2
  1679. package/XR/features/WebXRLayers.js +4 -4
  1680. package/XR/features/WebXRLayers.js.map +1 -1
  1681. package/XR/features/WebXRNearInteraction.js +2 -2
  1682. package/XR/features/WebXRNearInteraction.js.map +1 -1
  1683. package/XR/motionController/webXRAbstractMotionController.d.ts +3 -4
  1684. package/XR/motionController/webXRAbstractMotionController.js +2 -3
  1685. package/XR/motionController/webXRAbstractMotionController.js.map +1 -1
  1686. package/XR/native/nativeXRFrame.d.ts +2 -2
  1687. package/XR/native/nativeXRFrame.js +1 -1
  1688. package/XR/native/nativeXRFrame.js.map +1 -1
  1689. package/XR/native/nativeXRRenderTarget.d.ts +3 -3
  1690. package/XR/native/nativeXRRenderTarget.js +3 -3
  1691. package/XR/native/nativeXRRenderTarget.js.map +1 -1
  1692. package/XR/webXRCamera.d.ts +2 -2
  1693. package/XR/webXRCamera.js +1 -1
  1694. package/XR/webXRCamera.js.map +1 -1
  1695. package/XR/webXRDefaultExperience.d.ts +6 -6
  1696. package/XR/webXRDefaultExperience.js.map +1 -1
  1697. package/XR/webXRExperienceHelper.d.ts +21 -1
  1698. package/XR/webXRExperienceHelper.js +37 -7
  1699. package/XR/webXRExperienceHelper.js.map +1 -1
  1700. package/XR/webXRInputSource.d.ts +1 -1
  1701. package/XR/webXRInputSource.js.map +1 -1
  1702. package/XR/webXRLayerWrapper.d.ts +1 -1
  1703. package/XR/webXRLayerWrapper.js +1 -1
  1704. package/XR/webXRLayerWrapper.js.map +1 -1
  1705. package/XR/webXRRenderTargetTextureProvider.d.ts +1 -1
  1706. package/XR/webXRRenderTargetTextureProvider.js +1 -1
  1707. package/XR/webXRRenderTargetTextureProvider.js.map +1 -1
  1708. package/XR/webXRSessionManager.d.ts +1 -2
  1709. package/XR/webXRSessionManager.js +1 -2
  1710. package/XR/webXRSessionManager.js.map +1 -1
  1711. package/XR/webXRWebGLLayer.d.ts +2 -2
  1712. package/XR/webXRWebGLLayer.js +2 -2
  1713. package/XR/webXRWebGLLayer.js.map +1 -1
  1714. package/abstractScene.d.ts +1 -1
  1715. package/abstractScene.js +1 -1
  1716. package/abstractScene.js.map +1 -1
  1717. package/node.d.ts +40 -52
  1718. package/node.js +40 -55
  1719. package/node.js.map +1 -1
  1720. package/package.json +1 -1
  1721. package/scene.d.ts +83 -107
  1722. package/scene.js +94 -108
  1723. package/scene.js.map +1 -1
  1724. package/sceneComponent.d.ts +4 -2
  1725. package/sceneComponent.js +4 -2
  1726. package/sceneComponent.js.map +1 -1
  1727. package/types.d.ts +2 -2
  1728. package/types.js +1 -1
  1729. 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"]}