@onerjs/core 8.41.6 → 8.41.8

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 (342) hide show
  1. package/Animations/animation.d.ts +6 -2
  2. package/Animations/animation.js +28 -4
  3. package/Animations/animation.js.map +1 -1
  4. package/Animations/animationGroup.d.ts +2 -1
  5. package/Animations/animationGroup.js +3 -2
  6. package/Animations/animationGroup.js.map +1 -1
  7. package/Animations/animatorAvatar.d.ts +161 -0
  8. package/Animations/animatorAvatar.js +573 -0
  9. package/Animations/animatorAvatar.js.map +1 -0
  10. package/Animations/index.d.ts +1 -0
  11. package/Animations/index.js +1 -0
  12. package/Animations/index.js.map +1 -1
  13. package/AudioV2/webAudio/webAudioSoundSource.d.ts +2 -2
  14. package/AudioV2/webAudio/webAudioSoundSource.js +12 -2
  15. package/AudioV2/webAudio/webAudioSoundSource.js.map +1 -1
  16. package/Bones/index.d.ts +1 -0
  17. package/Bones/index.js +1 -0
  18. package/Bones/index.js.map +1 -1
  19. package/Bones/skeleton.d.ts +13 -0
  20. package/Bones/skeleton.functions.d.ts +26 -0
  21. package/Bones/skeleton.functions.js +91 -0
  22. package/Bones/skeleton.functions.js.map +1 -0
  23. package/Bones/skeleton.js +26 -0
  24. package/Bones/skeleton.js.map +1 -1
  25. package/Cameras/geospatialCamera.js +21 -20
  26. package/Cameras/geospatialCamera.js.map +1 -1
  27. package/Cameras/geospatialCameraMovement.d.ts +8 -1
  28. package/Cameras/geospatialCameraMovement.js +29 -8
  29. package/Cameras/geospatialCameraMovement.js.map +1 -1
  30. package/Collisions/gpuPicker.d.ts +11 -0
  31. package/Collisions/gpuPicker.js +148 -19
  32. package/Collisions/gpuPicker.js.map +1 -1
  33. package/Debug/skeletonViewer.d.ts +4 -8
  34. package/Debug/skeletonViewer.js +13 -22
  35. package/Debug/skeletonViewer.js.map +1 -1
  36. package/Engines/AbstractEngine/abstractEngine.views.js +5 -2
  37. package/Engines/AbstractEngine/abstractEngine.views.js.map +1 -1
  38. package/Engines/Extensions/engine.multiview.d.ts +2 -0
  39. package/Engines/Extensions/engine.multiview.js +7 -3
  40. package/Engines/Extensions/engine.multiview.js.map +1 -1
  41. package/Engines/abstractEngine.d.ts +2 -0
  42. package/Engines/abstractEngine.js +11 -2
  43. package/Engines/abstractEngine.js.map +1 -1
  44. package/Engines/constants.d.ts +4 -0
  45. package/Engines/constants.js +4 -0
  46. package/Engines/constants.js.map +1 -1
  47. package/Instrumentation/engineInstrumentation.js +2 -1
  48. package/Instrumentation/engineInstrumentation.js.map +1 -1
  49. package/Layers/effectLayer.js +1 -3
  50. package/Layers/effectLayer.js.map +1 -1
  51. package/Lights/Shadows/cascadedShadowGenerator.js +1 -1
  52. package/Lights/Shadows/cascadedShadowGenerator.js.map +1 -1
  53. package/Lights/Shadows/shadowGenerator.js +2 -3
  54. package/Lights/Shadows/shadowGenerator.js.map +1 -1
  55. package/Materials/Background/backgroundMaterial.js +37 -2
  56. package/Materials/Background/backgroundMaterial.js.map +1 -1
  57. package/Materials/GaussianSplatting/gaussianSplattingGpuPickingMaterialPlugin.d.ts +109 -0
  58. package/Materials/GaussianSplatting/gaussianSplattingGpuPickingMaterialPlugin.js +210 -0
  59. package/Materials/GaussianSplatting/gaussianSplattingGpuPickingMaterialPlugin.js.map +1 -0
  60. package/Materials/GaussianSplatting/gaussianSplattingMaterial.d.ts +1 -0
  61. package/Materials/GaussianSplatting/gaussianSplattingMaterial.js +71 -15
  62. package/Materials/GaussianSplatting/gaussianSplattingMaterial.js.map +1 -1
  63. package/Materials/GaussianSplatting/gaussianSplattingSolidColorMaterialPlugin.d.ts +86 -0
  64. package/Materials/GaussianSplatting/gaussianSplattingSolidColorMaterialPlugin.js +161 -0
  65. package/Materials/GaussianSplatting/gaussianSplattingSolidColorMaterialPlugin.js.map +1 -0
  66. package/Materials/GreasedLine/greasedLinePluginMaterial.js +0 -6
  67. package/Materials/GreasedLine/greasedLinePluginMaterial.js.map +1 -1
  68. package/Materials/GreasedLine/greasedLinePluginMaterialShadersGLSL.js +0 -1
  69. package/Materials/GreasedLine/greasedLinePluginMaterialShadersGLSL.js.map +1 -1
  70. package/Materials/GreasedLine/greasedLinePluginMaterialShadersWGSL.js +0 -1
  71. package/Materials/GreasedLine/greasedLinePluginMaterialShadersWGSL.js.map +1 -1
  72. package/Materials/Node/Blocks/Dual/clipPlanesBlock.d.ts +14 -0
  73. package/Materials/Node/Blocks/Dual/clipPlanesBlock.js +14 -0
  74. package/Materials/Node/Blocks/Dual/clipPlanesBlock.js.map +1 -1
  75. package/Materials/Node/Blocks/Dual/currentScreenBlock.d.ts +20 -1
  76. package/Materials/Node/Blocks/Dual/currentScreenBlock.js +20 -1
  77. package/Materials/Node/Blocks/Dual/currentScreenBlock.js.map +1 -1
  78. package/Materials/Node/Blocks/Dual/depthSourceBlock.d.ts +13 -0
  79. package/Materials/Node/Blocks/Dual/depthSourceBlock.js +13 -0
  80. package/Materials/Node/Blocks/Dual/depthSourceBlock.js.map +1 -1
  81. package/Materials/Node/Blocks/Dual/fogBlock.d.ts +21 -0
  82. package/Materials/Node/Blocks/Dual/fogBlock.js +21 -0
  83. package/Materials/Node/Blocks/Dual/fogBlock.js.map +1 -1
  84. package/Materials/Node/Blocks/Dual/imageSourceBlock.d.ts +21 -0
  85. package/Materials/Node/Blocks/Dual/imageSourceBlock.js +21 -0
  86. package/Materials/Node/Blocks/Dual/imageSourceBlock.js.map +1 -1
  87. package/Materials/Node/Blocks/Dual/lightBlock.d.ts +38 -0
  88. package/Materials/Node/Blocks/Dual/lightBlock.js +38 -0
  89. package/Materials/Node/Blocks/Dual/lightBlock.js.map +1 -1
  90. package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.d.ts +29 -0
  91. package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.js +29 -0
  92. package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.js.map +1 -1
  93. package/Materials/Node/Blocks/Dual/reflectionTextureBlock.d.ts +5 -0
  94. package/Materials/Node/Blocks/Dual/reflectionTextureBlock.js +5 -0
  95. package/Materials/Node/Blocks/Dual/reflectionTextureBlock.js.map +1 -1
  96. package/Materials/Node/Blocks/Dual/sceneDepthBlock.d.ts +16 -0
  97. package/Materials/Node/Blocks/Dual/sceneDepthBlock.js +16 -0
  98. package/Materials/Node/Blocks/Dual/sceneDepthBlock.js.map +1 -1
  99. package/Materials/Node/Blocks/Dual/smartFilterTextureBlock.d.ts +16 -0
  100. package/Materials/Node/Blocks/Dual/smartFilterTextureBlock.js +16 -0
  101. package/Materials/Node/Blocks/Dual/smartFilterTextureBlock.js.map +1 -1
  102. package/Materials/Node/Blocks/Dual/textureBlock.d.ts +34 -0
  103. package/Materials/Node/Blocks/Dual/textureBlock.js +34 -0
  104. package/Materials/Node/Blocks/Dual/textureBlock.js.map +1 -1
  105. package/Materials/Node/Blocks/Fragment/TBNBlock.d.ts +17 -0
  106. package/Materials/Node/Blocks/Fragment/TBNBlock.js +17 -2
  107. package/Materials/Node/Blocks/Fragment/TBNBlock.js.map +1 -1
  108. package/Materials/Node/Blocks/Fragment/ambientOcclusionBlock.d.ts +7 -0
  109. package/Materials/Node/Blocks/Fragment/ambientOcclusionBlock.js +7 -0
  110. package/Materials/Node/Blocks/Fragment/ambientOcclusionBlock.js.map +1 -1
  111. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.d.ts +21 -0
  112. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.js +21 -0
  113. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.js.map +1 -1
  114. package/Materials/Node/Blocks/Fragment/heightToNormalBlock.d.ts +10 -0
  115. package/Materials/Node/Blocks/Fragment/heightToNormalBlock.js +10 -0
  116. package/Materials/Node/Blocks/Fragment/heightToNormalBlock.js.map +1 -1
  117. package/Materials/Node/Blocks/Fragment/imageProcessingBlock.d.ts +28 -0
  118. package/Materials/Node/Blocks/Fragment/imageProcessingBlock.js +28 -0
  119. package/Materials/Node/Blocks/Fragment/imageProcessingBlock.js.map +1 -1
  120. package/Materials/Node/Blocks/Fragment/perturbNormalBlock.d.ts +30 -0
  121. package/Materials/Node/Blocks/Fragment/perturbNormalBlock.js +30 -1
  122. package/Materials/Node/Blocks/Fragment/perturbNormalBlock.js.map +1 -1
  123. package/Materials/Node/Blocks/Fragment/screenSizeBlock.d.ts +4 -0
  124. package/Materials/Node/Blocks/Fragment/screenSizeBlock.js +4 -0
  125. package/Materials/Node/Blocks/Fragment/screenSizeBlock.js.map +1 -1
  126. package/Materials/Node/Blocks/Fragment/screenSpaceBlock.d.ts +5 -0
  127. package/Materials/Node/Blocks/Fragment/screenSpaceBlock.js +5 -0
  128. package/Materials/Node/Blocks/Fragment/screenSpaceBlock.js.map +1 -1
  129. package/Materials/Node/Blocks/Fragment/twirlBlock.d.ts +3 -0
  130. package/Materials/Node/Blocks/Fragment/twirlBlock.js +3 -0
  131. package/Materials/Node/Blocks/Fragment/twirlBlock.js.map +1 -1
  132. package/Materials/Node/Blocks/GaussianSplatting/splatReaderBlock.d.ts +6 -0
  133. package/Materials/Node/Blocks/GaussianSplatting/splatReaderBlock.js +6 -0
  134. package/Materials/Node/Blocks/GaussianSplatting/splatReaderBlock.js.map +1 -1
  135. package/Materials/Node/Blocks/Input/inputBlock.d.ts +16 -0
  136. package/Materials/Node/Blocks/Input/inputBlock.js +16 -1
  137. package/Materials/Node/Blocks/Input/inputBlock.js.map +1 -1
  138. package/Materials/Node/Blocks/Input/prePassTextureBlock.d.ts +5 -0
  139. package/Materials/Node/Blocks/Input/prePassTextureBlock.js +5 -0
  140. package/Materials/Node/Blocks/Input/prePassTextureBlock.js.map +1 -1
  141. package/Materials/Node/Blocks/PBR/anisotropyBlock.d.ts +10 -0
  142. package/Materials/Node/Blocks/PBR/anisotropyBlock.js +10 -1
  143. package/Materials/Node/Blocks/PBR/anisotropyBlock.js.map +1 -1
  144. package/Materials/Node/Blocks/PBR/clearCoatBlock.d.ts +23 -0
  145. package/Materials/Node/Blocks/PBR/clearCoatBlock.js +23 -1
  146. package/Materials/Node/Blocks/PBR/clearCoatBlock.js.map +1 -1
  147. package/Materials/Node/Blocks/PBR/iridescenceBlock.d.ts +17 -0
  148. package/Materials/Node/Blocks/PBR/iridescenceBlock.js +17 -0
  149. package/Materials/Node/Blocks/PBR/iridescenceBlock.js.map +1 -1
  150. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.d.ts +41 -0
  151. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js +41 -0
  152. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js.map +1 -1
  153. package/Materials/Node/Blocks/PBR/reflectionBlock.d.ts +21 -0
  154. package/Materials/Node/Blocks/PBR/reflectionBlock.js +21 -0
  155. package/Materials/Node/Blocks/PBR/reflectionBlock.js.map +1 -1
  156. package/Materials/Node/Blocks/PBR/refractionBlock.d.ts +29 -0
  157. package/Materials/Node/Blocks/PBR/refractionBlock.js +29 -0
  158. package/Materials/Node/Blocks/PBR/refractionBlock.js.map +1 -1
  159. package/Materials/Node/Blocks/PBR/sheenBlock.d.ts +14 -0
  160. package/Materials/Node/Blocks/PBR/sheenBlock.js +14 -0
  161. package/Materials/Node/Blocks/PBR/sheenBlock.js.map +1 -1
  162. package/Materials/Node/Blocks/PBR/subSurfaceBlock.d.ts +7 -0
  163. package/Materials/Node/Blocks/PBR/subSurfaceBlock.js +7 -0
  164. package/Materials/Node/Blocks/PBR/subSurfaceBlock.js.map +1 -1
  165. package/Materials/Node/Blocks/Particle/particleTextureBlock.d.ts +23 -0
  166. package/Materials/Node/Blocks/Particle/particleTextureBlock.js +23 -0
  167. package/Materials/Node/Blocks/Particle/particleTextureBlock.js.map +1 -1
  168. package/Materials/Node/Blocks/Teleport/teleportInBlock.d.ts +6 -0
  169. package/Materials/Node/Blocks/Teleport/teleportInBlock.js +6 -0
  170. package/Materials/Node/Blocks/Teleport/teleportInBlock.js.map +1 -1
  171. package/Materials/Node/Blocks/Teleport/teleportOutBlock.d.ts +17 -0
  172. package/Materials/Node/Blocks/Teleport/teleportOutBlock.js +17 -0
  173. package/Materials/Node/Blocks/Teleport/teleportOutBlock.js.map +1 -1
  174. package/Materials/Node/Blocks/Vertex/bonesBlock.d.ts +22 -0
  175. package/Materials/Node/Blocks/Vertex/bonesBlock.js +22 -0
  176. package/Materials/Node/Blocks/Vertex/bonesBlock.js.map +1 -1
  177. package/Materials/Node/Blocks/Vertex/instancesBlock.d.ts +13 -0
  178. package/Materials/Node/Blocks/Vertex/instancesBlock.js +13 -0
  179. package/Materials/Node/Blocks/Vertex/instancesBlock.js.map +1 -1
  180. package/Materials/Node/Blocks/Vertex/lightInformationBlock.d.ts +20 -0
  181. package/Materials/Node/Blocks/Vertex/lightInformationBlock.js +20 -0
  182. package/Materials/Node/Blocks/Vertex/lightInformationBlock.js.map +1 -1
  183. package/Materials/Node/Blocks/Vertex/morphTargetsBlock.d.ts +27 -0
  184. package/Materials/Node/Blocks/Vertex/morphTargetsBlock.js +27 -0
  185. package/Materials/Node/Blocks/Vertex/morphTargetsBlock.js.map +1 -1
  186. package/Materials/Node/Blocks/clampBlock.d.ts +10 -0
  187. package/Materials/Node/Blocks/clampBlock.js +10 -0
  188. package/Materials/Node/Blocks/clampBlock.js.map +1 -1
  189. package/Materials/Node/Blocks/cloudBlock.d.ts +10 -0
  190. package/Materials/Node/Blocks/cloudBlock.js +10 -0
  191. package/Materials/Node/Blocks/cloudBlock.js.map +1 -1
  192. package/Materials/Node/Blocks/colorMergerBlock.d.ts +10 -0
  193. package/Materials/Node/Blocks/colorMergerBlock.js +10 -0
  194. package/Materials/Node/Blocks/colorMergerBlock.js.map +1 -1
  195. package/Materials/Node/Blocks/conditionalBlock.d.ts +14 -0
  196. package/Materials/Node/Blocks/conditionalBlock.js +14 -0
  197. package/Materials/Node/Blocks/conditionalBlock.js.map +1 -1
  198. package/Materials/Node/Blocks/curveBlock.d.ts +10 -0
  199. package/Materials/Node/Blocks/curveBlock.js +10 -0
  200. package/Materials/Node/Blocks/curveBlock.js.map +1 -1
  201. package/Materials/Node/Blocks/customBlock.d.ts +10 -0
  202. package/Materials/Node/Blocks/customBlock.js +10 -0
  203. package/Materials/Node/Blocks/customBlock.js.map +1 -1
  204. package/Materials/Node/Blocks/debugBlock.d.ts +10 -0
  205. package/Materials/Node/Blocks/debugBlock.js +10 -0
  206. package/Materials/Node/Blocks/debugBlock.js.map +1 -1
  207. package/Materials/Node/Blocks/fresnelBlock.d.ts +4 -0
  208. package/Materials/Node/Blocks/fresnelBlock.js +4 -0
  209. package/Materials/Node/Blocks/fresnelBlock.js.map +1 -1
  210. package/Materials/Node/Blocks/gradientBlock.d.ts +10 -0
  211. package/Materials/Node/Blocks/gradientBlock.js +10 -0
  212. package/Materials/Node/Blocks/gradientBlock.js.map +1 -1
  213. package/Materials/Node/Blocks/loopBlock.d.ts +10 -0
  214. package/Materials/Node/Blocks/loopBlock.js +10 -0
  215. package/Materials/Node/Blocks/loopBlock.js.map +1 -1
  216. package/Materials/Node/Blocks/matrixBuilderBlock.d.ts +1 -0
  217. package/Materials/Node/Blocks/matrixBuilderBlock.js +1 -0
  218. package/Materials/Node/Blocks/matrixBuilderBlock.js.map +1 -1
  219. package/Materials/Node/Blocks/meshAttributeExistsBlock.d.ts +10 -0
  220. package/Materials/Node/Blocks/meshAttributeExistsBlock.js +10 -0
  221. package/Materials/Node/Blocks/meshAttributeExistsBlock.js.map +1 -1
  222. package/Materials/Node/Blocks/pannerBlock.d.ts +5 -0
  223. package/Materials/Node/Blocks/pannerBlock.js +5 -0
  224. package/Materials/Node/Blocks/pannerBlock.js.map +1 -1
  225. package/Materials/Node/Blocks/remapBlock.d.ts +10 -0
  226. package/Materials/Node/Blocks/remapBlock.js +10 -0
  227. package/Materials/Node/Blocks/remapBlock.js.map +1 -1
  228. package/Materials/Node/Blocks/rotate2dBlock.d.ts +1 -0
  229. package/Materials/Node/Blocks/rotate2dBlock.js +1 -0
  230. package/Materials/Node/Blocks/rotate2dBlock.js.map +1 -1
  231. package/Materials/Node/Blocks/transformBlock.d.ts +10 -0
  232. package/Materials/Node/Blocks/transformBlock.js +10 -0
  233. package/Materials/Node/Blocks/transformBlock.js.map +1 -1
  234. package/Materials/Node/Blocks/triPlanarBlock.d.ts +22 -0
  235. package/Materials/Node/Blocks/triPlanarBlock.js +22 -0
  236. package/Materials/Node/Blocks/triPlanarBlock.js.map +1 -1
  237. package/Materials/Node/Blocks/trigonometryBlock.d.ts +10 -0
  238. package/Materials/Node/Blocks/trigonometryBlock.js +10 -0
  239. package/Materials/Node/Blocks/trigonometryBlock.js.map +1 -1
  240. package/Materials/Node/Blocks/vectorMergerBlock.d.ts +10 -0
  241. package/Materials/Node/Blocks/vectorMergerBlock.js +10 -0
  242. package/Materials/Node/Blocks/vectorMergerBlock.js.map +1 -1
  243. package/Materials/Node/Blocks/viewDirectionBlock.d.ts +5 -0
  244. package/Materials/Node/Blocks/viewDirectionBlock.js +5 -0
  245. package/Materials/Node/Blocks/viewDirectionBlock.js.map +1 -1
  246. package/Materials/Node/Blocks/waveBlock.d.ts +10 -0
  247. package/Materials/Node/Blocks/waveBlock.js +10 -0
  248. package/Materials/Node/Blocks/waveBlock.js.map +1 -1
  249. package/Materials/Node/Blocks/worleyNoise3DBlock.d.ts +1 -0
  250. package/Materials/Node/Blocks/worleyNoise3DBlock.js +1 -0
  251. package/Materials/Node/Blocks/worleyNoise3DBlock.js.map +1 -1
  252. package/Materials/Node/nodeMaterial.d.ts +13 -0
  253. package/Materials/Node/nodeMaterial.js +14 -2
  254. package/Materials/Node/nodeMaterial.js.map +1 -1
  255. package/Materials/Node/nodeMaterialBlock.d.ts +0 -3
  256. package/Materials/Node/nodeMaterialBlock.js +1 -6
  257. package/Materials/Node/nodeMaterialBlock.js.map +1 -1
  258. package/Materials/Node/nodeMaterialBlockConnectionPoint.js +1 -2
  259. package/Materials/Node/nodeMaterialBlockConnectionPoint.js.map +1 -1
  260. package/Materials/Textures/mirrorTexture.js +1 -1
  261. package/Materials/Textures/mirrorTexture.js.map +1 -1
  262. package/Materials/index.d.ts +2 -0
  263. package/Materials/index.js +2 -0
  264. package/Materials/index.js.map +1 -1
  265. package/Maths/math.constants.d.ts +2 -1
  266. package/Maths/math.constants.js +3 -2
  267. package/Maths/math.constants.js.map +1 -1
  268. package/Meshes/GaussianSplatting/gaussianSplattingMesh.js +17 -1
  269. package/Meshes/GaussianSplatting/gaussianSplattingMesh.js.map +1 -1
  270. package/Meshes/instancedMesh.js +1 -0
  271. package/Meshes/instancedMesh.js.map +1 -1
  272. package/Meshes/mesh.d.ts +5 -0
  273. package/Meshes/mesh.js +39 -16
  274. package/Meshes/mesh.js.map +1 -1
  275. package/Misc/dataStorage.d.ts +13 -0
  276. package/Misc/dataStorage.js +25 -0
  277. package/Misc/dataStorage.js.map +1 -1
  278. package/Morph/morphTarget.d.ts +9 -5
  279. package/Morph/morphTarget.js +15 -7
  280. package/Morph/morphTarget.js.map +1 -1
  281. package/Morph/morphTargetManager.d.ts +3 -1
  282. package/Morph/morphTargetManager.js +5 -2
  283. package/Morph/morphTargetManager.js.map +1 -1
  284. package/Particles/Node/Blocks/Emitters/boxShapeBlock.js +1 -1
  285. package/Particles/Node/Blocks/Emitters/boxShapeBlock.js.map +1 -1
  286. package/Particles/Node/Blocks/Emitters/coneShapeBlock.js +1 -1
  287. package/Particles/Node/Blocks/Emitters/coneShapeBlock.js.map +1 -1
  288. package/Particles/Node/Blocks/Emitters/customShapeBlock.js +1 -1
  289. package/Particles/Node/Blocks/Emitters/customShapeBlock.js.map +1 -1
  290. package/Particles/Node/Blocks/Emitters/cylinderShapeBlock.js +1 -1
  291. package/Particles/Node/Blocks/Emitters/cylinderShapeBlock.js.map +1 -1
  292. package/Particles/Node/Blocks/Emitters/emitters.functions.js +3 -3
  293. package/Particles/Node/Blocks/Emitters/emitters.functions.js.map +1 -1
  294. package/Particles/Node/Blocks/Emitters/meshShapeBlock.js +1 -1
  295. package/Particles/Node/Blocks/Emitters/meshShapeBlock.js.map +1 -1
  296. package/Particles/Node/Blocks/Emitters/pointShapeBlock.js +1 -1
  297. package/Particles/Node/Blocks/Emitters/pointShapeBlock.js.map +1 -1
  298. package/Particles/Node/Blocks/Emitters/sphereShapeBlock.js +1 -1
  299. package/Particles/Node/Blocks/Emitters/sphereShapeBlock.js.map +1 -1
  300. package/Particles/Node/Blocks/Update/basicPositionUpdateBlock.js +2 -2
  301. package/Particles/Node/Blocks/Update/basicPositionUpdateBlock.js.map +1 -1
  302. package/Particles/Node/Blocks/Update/updateNoiseBlock.js +7 -7
  303. package/Particles/Node/Blocks/Update/updateNoiseBlock.js.map +1 -1
  304. package/Particles/Node/Blocks/particleLocalVariableBlock.js +2 -2
  305. package/Particles/Node/Blocks/particleLocalVariableBlock.js.map +1 -1
  306. package/Particles/Node/nodeParticleBuildState.js +7 -7
  307. package/Particles/Node/nodeParticleBuildState.js.map +1 -1
  308. package/Particles/Node/nodeParticleSystemSet.helper.js +9 -4
  309. package/Particles/Node/nodeParticleSystemSet.helper.js.map +1 -1
  310. package/Particles/particle.d.ts +73 -61
  311. package/Particles/particle.js +106 -91
  312. package/Particles/particle.js.map +1 -1
  313. package/Particles/particleSystem.js +5 -5
  314. package/Particles/particleSystem.js.map +1 -1
  315. package/Particles/thinParticleSystem.function.js +83 -83
  316. package/Particles/thinParticleSystem.function.js.map +1 -1
  317. package/Particles/thinParticleSystem.js +8 -8
  318. package/Particles/thinParticleSystem.js.map +1 -1
  319. package/Physics/v2/Plugins/havokPlugin.d.ts +14 -1
  320. package/Physics/v2/Plugins/havokPlugin.js +154 -10
  321. package/Physics/v2/Plugins/havokPlugin.js.map +1 -1
  322. package/Probes/reflectionProbe.js +9 -6
  323. package/Probes/reflectionProbe.js.map +1 -1
  324. package/Rendering/objectRenderer.d.ts +3 -1
  325. package/Rendering/objectRenderer.js +28 -8
  326. package/Rendering/objectRenderer.js.map +1 -1
  327. package/Rendering/reflectiveShadowMap.js +1 -1
  328. package/Rendering/reflectiveShadowMap.js.map +1 -1
  329. package/Rendering/thinDepthPeelingRenderer.js +8 -0
  330. package/Rendering/thinDepthPeelingRenderer.js.map +1 -1
  331. package/Shaders/gaussianSplatting.fragment.js +8 -2
  332. package/Shaders/gaussianSplatting.fragment.js.map +1 -1
  333. package/Shaders/gaussianSplatting.vertex.js +8 -2
  334. package/Shaders/gaussianSplatting.vertex.js.map +1 -1
  335. package/ShadersWGSL/gaussianSplatting.fragment.js +7 -1
  336. package/ShadersWGSL/gaussianSplatting.fragment.js.map +1 -1
  337. package/ShadersWGSL/gaussianSplatting.vertex.js +8 -2
  338. package/ShadersWGSL/gaussianSplatting.vertex.js.map +1 -1
  339. package/package.json +1 -1
  340. package/scene.d.ts +22 -1
  341. package/scene.js +15 -15
  342. package/scene.js.map +1 -1
@@ -43,4 +43,17 @@ export declare class DataStorage {
43
43
  * @param value The value to write
44
44
  */
45
45
  static WriteNumber(key: string, value: number): void;
46
+ /**
47
+ * Reads a JSON value from the data storage
48
+ * @param key The key to read
49
+ * @param defaultValue The value if the key doesn't exist
50
+ * @returns The JSON value
51
+ */
52
+ static ReadJson<T>(key: string, defaultValue: T): T;
53
+ /**
54
+ * Writes a JSON value to the data storage
55
+ * @param key The key to write
56
+ * @param value The JSON value to write
57
+ */
58
+ static WriteJson<T>(key: string, value: T): void;
46
59
  }
@@ -1,3 +1,4 @@
1
+ import { Logger } from "./logger.js";
1
2
  /**
2
3
  * Class for storing data to local storage if available or in-memory storage otherwise
3
4
  */
@@ -75,6 +76,30 @@ export class DataStorage {
75
76
  static WriteNumber(key, value) {
76
77
  this._Storage.setItem(key, value.toString());
77
78
  }
79
+ /**
80
+ * Reads a JSON value from the data storage
81
+ * @param key The key to read
82
+ * @param defaultValue The value if the key doesn't exist
83
+ * @returns The JSON value
84
+ */
85
+ static ReadJson(key, defaultValue) {
86
+ const value = this._Storage.getItem(key);
87
+ try {
88
+ return value !== null ? JSON.parse(value) : defaultValue;
89
+ }
90
+ catch (e) {
91
+ Logger.Warn(`Failed to parse JSON from storage for key "${key}". Returning default value.`, e);
92
+ return defaultValue;
93
+ }
94
+ }
95
+ /**
96
+ * Writes a JSON value to the data storage
97
+ * @param key The key to write
98
+ * @param value The JSON value to write
99
+ */
100
+ static WriteJson(key, value) {
101
+ this._Storage.setItem(key, JSON.stringify(value));
102
+ }
78
103
  }
79
104
  DataStorage._Storage = DataStorage._GetStorage();
80
105
  //# sourceMappingURL=dataStorage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dataStorage.js","sourceRoot":"","sources":["../../../../dev/core/src/Misc/dataStorage.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,MAAM,OAAO,WAAW;IAGZ,MAAM,CAAC,WAAW;QACtB,IAAI,CAAC;YACD,YAAY,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YACjC,YAAY,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;YAChC,OAAO,YAAY,CAAC;QACxB,CAAC;QAAC,MAAM,CAAC;YACL,MAAM,eAAe,GAA8B,EAAE,CAAC;YACtD,OAAO;gBACH,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;oBACb,MAAM,KAAK,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;oBACnC,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;gBAC9C,CAAC;gBACD,OAAO,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;oBACpB,eAAe,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;gBACjC,CAAC;aACJ,CAAC;QACN,CAAC;IACL,CAAC;IAED;;;;;OAKG;IACI,MAAM,CAAC,UAAU,CAAC,GAAW,EAAE,YAAoB;QACtD,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACzC,OAAO,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC;IACjD,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAC,WAAW,CAAC,GAAW,EAAE,KAAa;QAChD,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACtC,CAAC;IAED;;;;;OAKG;IACI,MAAM,CAAC,WAAW,CAAC,GAAW,EAAE,YAAqB;QACxD,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACzC,OAAO,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC;IAC5D,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAC,YAAY,CAAC,GAAW,EAAE,KAAc;QAClD,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IACzD,CAAC;IAED;;;;;OAKG;IACI,MAAM,CAAC,UAAU,CAAC,GAAW,EAAE,YAAoB;QACtD,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACzC,OAAO,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;IAC7D,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAC,WAAW,CAAC,GAAW,EAAE,KAAa;QAChD,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;IACjD,CAAC;;AA/Ec,oBAAQ,GAAa,WAAW,CAAC,WAAW,EAAE,CAAC","sourcesContent":["interface IStorage {\r\n getItem: (key: string) => string | null;\r\n setItem: (key: string, value: string) => void;\r\n}\r\n\r\n/**\r\n * Class for storing data to local storage if available or in-memory storage otherwise\r\n */\r\nexport class DataStorage {\r\n private static _Storage: IStorage = DataStorage._GetStorage();\r\n\r\n private static _GetStorage(): IStorage {\r\n try {\r\n localStorage.setItem(\"test\", \"\");\r\n localStorage.removeItem(\"test\");\r\n return localStorage;\r\n } catch {\r\n const inMemoryStorage: { [key: string]: string } = {};\r\n return {\r\n getItem: (key) => {\r\n const value = inMemoryStorage[key];\r\n return value === undefined ? null : value;\r\n },\r\n setItem: (key, value) => {\r\n inMemoryStorage[key] = value;\r\n },\r\n };\r\n }\r\n }\r\n\r\n /**\r\n * Reads a string from the data storage\r\n * @param key The key to read\r\n * @param defaultValue The value if the key doesn't exist\r\n * @returns The string value\r\n */\r\n public static ReadString(key: string, defaultValue: string): string {\r\n const value = this._Storage.getItem(key);\r\n return value !== null ? value : defaultValue;\r\n }\r\n\r\n /**\r\n * Writes a string to the data storage\r\n * @param key The key to write\r\n * @param value The value to write\r\n */\r\n public static WriteString(key: string, value: string): void {\r\n this._Storage.setItem(key, value);\r\n }\r\n\r\n /**\r\n * Reads a boolean from the data storage\r\n * @param key The key to read\r\n * @param defaultValue The value if the key doesn't exist\r\n * @returns The boolean value\r\n */\r\n public static ReadBoolean(key: string, defaultValue: boolean): boolean {\r\n const value = this._Storage.getItem(key);\r\n return value !== null ? value === \"true\" : defaultValue;\r\n }\r\n\r\n /**\r\n * Writes a boolean to the data storage\r\n * @param key The key to write\r\n * @param value The value to write\r\n */\r\n public static WriteBoolean(key: string, value: boolean) {\r\n this._Storage.setItem(key, value ? \"true\" : \"false\");\r\n }\r\n\r\n /**\r\n * Reads a number from the data storage\r\n * @param key The key to read\r\n * @param defaultValue The value if the key doesn't exist\r\n * @returns The number value\r\n */\r\n public static ReadNumber(key: string, defaultValue: number): number {\r\n const value = this._Storage.getItem(key);\r\n return value !== null ? parseFloat(value) : defaultValue;\r\n }\r\n\r\n /**\r\n * Writes a number to the data storage\r\n * @param key The key to write\r\n * @param value The value to write\r\n */\r\n public static WriteNumber(key: string, value: number) {\r\n this._Storage.setItem(key, value.toString());\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"dataStorage.js","sourceRoot":"","sources":["../../../../dev/core/src/Misc/dataStorage.ts"],"names":[],"mappings":"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","sourcesContent":["import { Logger } from \"./logger\";\r\n\r\ninterface IStorage {\r\n getItem: (key: string) => string | null;\r\n setItem: (key: string, value: string) => void;\r\n}\r\n\r\n/**\r\n * Class for storing data to local storage if available or in-memory storage otherwise\r\n */\r\nexport class DataStorage {\r\n private static _Storage: IStorage = DataStorage._GetStorage();\r\n\r\n private static _GetStorage(): IStorage {\r\n try {\r\n localStorage.setItem(\"test\", \"\");\r\n localStorage.removeItem(\"test\");\r\n return localStorage;\r\n } catch {\r\n const inMemoryStorage: { [key: string]: string } = {};\r\n return {\r\n getItem: (key) => {\r\n const value = inMemoryStorage[key];\r\n return value === undefined ? null : value;\r\n },\r\n setItem: (key, value) => {\r\n inMemoryStorage[key] = value;\r\n },\r\n };\r\n }\r\n }\r\n\r\n /**\r\n * Reads a string from the data storage\r\n * @param key The key to read\r\n * @param defaultValue The value if the key doesn't exist\r\n * @returns The string value\r\n */\r\n public static ReadString(key: string, defaultValue: string): string {\r\n const value = this._Storage.getItem(key);\r\n return value !== null ? value : defaultValue;\r\n }\r\n\r\n /**\r\n * Writes a string to the data storage\r\n * @param key The key to write\r\n * @param value The value to write\r\n */\r\n public static WriteString(key: string, value: string): void {\r\n this._Storage.setItem(key, value);\r\n }\r\n\r\n /**\r\n * Reads a boolean from the data storage\r\n * @param key The key to read\r\n * @param defaultValue The value if the key doesn't exist\r\n * @returns The boolean value\r\n */\r\n public static ReadBoolean(key: string, defaultValue: boolean): boolean {\r\n const value = this._Storage.getItem(key);\r\n return value !== null ? value === \"true\" : defaultValue;\r\n }\r\n\r\n /**\r\n * Writes a boolean to the data storage\r\n * @param key The key to write\r\n * @param value The value to write\r\n */\r\n public static WriteBoolean(key: string, value: boolean) {\r\n this._Storage.setItem(key, value ? \"true\" : \"false\");\r\n }\r\n\r\n /**\r\n * Reads a number from the data storage\r\n * @param key The key to read\r\n * @param defaultValue The value if the key doesn't exist\r\n * @returns The number value\r\n */\r\n public static ReadNumber(key: string, defaultValue: number): number {\r\n const value = this._Storage.getItem(key);\r\n return value !== null ? parseFloat(value) : defaultValue;\r\n }\r\n\r\n /**\r\n * Writes a number to the data storage\r\n * @param key The key to write\r\n * @param value The value to write\r\n */\r\n public static WriteNumber(key: string, value: number) {\r\n this._Storage.setItem(key, value.toString());\r\n }\r\n\r\n /**\r\n * Reads a JSON value from the data storage\r\n * @param key The key to read\r\n * @param defaultValue The value if the key doesn't exist\r\n * @returns The JSON value\r\n */\r\n public static ReadJson<T>(key: string, defaultValue: T): T {\r\n const value = this._Storage.getItem(key);\r\n try {\r\n return value !== null ? JSON.parse(value) : defaultValue;\r\n } catch (e) {\r\n Logger.Warn(`Failed to parse JSON from storage for key \"${key}\". Returning default value.`, e);\r\n return defaultValue;\r\n }\r\n }\r\n\r\n /**\r\n * Writes a JSON value to the data storage\r\n * @param key The key to write\r\n * @param value The JSON value to write\r\n */\r\n public static WriteJson<T>(key: string, value: T) {\r\n this._Storage.setItem(key, JSON.stringify(value));\r\n }\r\n}\r\n"]}
@@ -5,12 +5,12 @@ import type { Scene } from "../scene.js";
5
5
  import type { AbstractMesh } from "../Meshes/abstractMesh.js";
6
6
  import type { AnimationPropertiesOverride } from "../Animations/animationPropertiesOverride.js";
7
7
  import type { Animation } from "../Animations/animation.js";
8
+ import type { MorphTargetManager } from "./morphTargetManager.js";
8
9
  /**
9
10
  * Defines a target to use with MorphTargetManager
10
11
  * @see https://doc.babylonjs.com/features/featuresDeepDive/mesh/morphTargets
11
12
  */
12
13
  export declare class MorphTarget implements IAnimatable {
13
- /** defines the name of the target */
14
14
  name: string;
15
15
  /**
16
16
  * Gets or sets the list of animations
@@ -40,6 +40,10 @@ export declare class MorphTarget implements IAnimatable {
40
40
  * Gets or sets the id of the morph Target
41
41
  */
42
42
  id: string;
43
+ /**
44
+ * Gets or sets the morph target manager this morph target is associated with
45
+ */
46
+ morphTargetManager: Nullable<MorphTargetManager>;
43
47
  private _animationPropertiesOverride;
44
48
  /**
45
49
  * Gets or sets the animation properties override
@@ -51,10 +55,9 @@ export declare class MorphTarget implements IAnimatable {
51
55
  * @param name defines the name of the target
52
56
  * @param influence defines the influence to use
53
57
  * @param scene defines the scene the morphtarget belongs to
58
+ * @param morphTargetManager morph target manager this morph target is associated with
54
59
  */
55
- constructor(
56
- /** defines the name of the target */
57
- name: string, influence?: number, scene?: Nullable<Scene>);
60
+ constructor(name: string, influence?: number, scene?: Nullable<Scene>, morphTargetManager?: Nullable<MorphTargetManager>);
58
61
  /**
59
62
  * Gets the unique ID of this manager
60
63
  */
@@ -163,9 +166,10 @@ export declare class MorphTarget implements IAnimatable {
163
166
  * Creates a new target from serialized data
164
167
  * @param serializationObject defines the serialized data to use
165
168
  * @param scene defines the hosting scene
169
+ * @param morphTargetManager morph target manager this morph target is associated with
166
170
  * @returns a new MorphTarget
167
171
  */
168
- static Parse(serializationObject: any, scene?: Scene): MorphTarget;
172
+ static Parse(serializationObject: any, scene?: Scene, morphTargetManager?: Nullable<MorphTargetManager>): MorphTarget;
169
173
  /**
170
174
  * Creates a MorphTarget from mesh data
171
175
  * @param mesh defines the source mesh
@@ -43,10 +43,9 @@ export class MorphTarget {
43
43
  * @param name defines the name of the target
44
44
  * @param influence defines the influence to use
45
45
  * @param scene defines the scene the morphtarget belongs to
46
+ * @param morphTargetManager morph target manager this morph target is associated with
46
47
  */
47
- constructor(
48
- /** defines the name of the target */
49
- name, influence = 0, scene = null) {
48
+ constructor(name, influence = 0, scene = null, morphTargetManager = null) {
50
49
  this.name = name;
51
50
  /**
52
51
  * Gets or sets the list of animations
@@ -65,8 +64,13 @@ export class MorphTarget {
65
64
  this.onInfluenceChanged = new Observable();
66
65
  /** @internal */
67
66
  this._onDataLayoutChanged = new Observable();
67
+ /**
68
+ * Gets or sets the morph target manager this morph target is associated with
69
+ */
70
+ this.morphTargetManager = null;
68
71
  this._animationPropertiesOverride = null;
69
72
  this.id = name;
73
+ this.morphTargetManager = morphTargetManager;
70
74
  this._scene = scene || EngineStore.LastCreatedScene;
71
75
  this.influence = influence;
72
76
  if (this._scene) {
@@ -243,7 +247,7 @@ export class MorphTarget {
243
247
  * @returns a new MorphTarget
244
248
  */
245
249
  clone() {
246
- const newOne = SerializationHelper.Clone(() => new MorphTarget(this.name, this.influence, this._scene), this);
250
+ const newOne = SerializationHelper.Clone(() => new MorphTarget(this.name, this.influence, this._scene, this.morphTargetManager), this);
247
251
  newOne._positions = this._positions;
248
252
  newOne._normals = this._normals;
249
253
  newOne._tangents = this._tangents;
@@ -296,10 +300,11 @@ export class MorphTarget {
296
300
  * Creates a new target from serialized data
297
301
  * @param serializationObject defines the serialized data to use
298
302
  * @param scene defines the hosting scene
303
+ * @param morphTargetManager morph target manager this morph target is associated with
299
304
  * @returns a new MorphTarget
300
305
  */
301
- static Parse(serializationObject, scene) {
302
- const result = new MorphTarget(serializationObject.name, serializationObject.influence);
306
+ static Parse(serializationObject, scene, morphTargetManager = null) {
307
+ const result = new MorphTarget(serializationObject.name, serializationObject.influence, scene, morphTargetManager);
303
308
  result.setPositions(serializationObject.positions);
304
309
  if (serializationObject.id != null) {
305
310
  result.id = serializationObject.id;
@@ -345,7 +350,7 @@ export class MorphTarget {
345
350
  if (!name) {
346
351
  name = mesh.name;
347
352
  }
348
- const result = new MorphTarget(name, influence, mesh.getScene());
353
+ const result = new MorphTarget(name, influence, mesh.getScene(), mesh.morphTargetManager);
349
354
  result.setPositions(mesh.getVerticesData(VertexBuffer.PositionKind));
350
355
  if (mesh.isVerticesDataPresent(VertexBuffer.NormalKind)) {
351
356
  result.setNormals(mesh.getVerticesData(VertexBuffer.NormalKind));
@@ -368,4 +373,7 @@ export class MorphTarget {
368
373
  __decorate([
369
374
  serialize()
370
375
  ], MorphTarget.prototype, "id", void 0);
376
+ __decorate([
377
+ serialize()
378
+ ], MorphTarget.prototype, "morphTargetManager", void 0);
371
379
  //# sourceMappingURL=morphTarget.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"morphTarget.js","sourceRoot":"","sources":["../../../../dev/core/src/Morph/morphTarget.ts"],"names":[],"mappings":"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","sourcesContent":["import type { IAnimatable } from \"../Animations/animatable.interface\";\r\nimport { Observable } from \"../Misc/observable\";\r\nimport type { Nullable, FloatArray } from \"../types\";\r\nimport type { Scene } from \"../scene\";\r\nimport { EngineStore } from \"../Engines/engineStore\";\r\nimport type { AbstractMesh } from \"../Meshes/abstractMesh\";\r\nimport { VertexBuffer } from \"../Buffers/buffer\";\r\nimport type { AnimationPropertiesOverride } from \"../Animations/animationPropertiesOverride\";\r\nimport { serialize } from \"../Misc/decorators\";\r\nimport { SerializationHelper } from \"../Misc/decorators.serialization\";\r\nimport { GetClass } from \"../Misc/typeStore\";\r\n\r\nimport type { Animation } from \"../Animations/animation\";\r\n\r\n/**\r\n * Defines a target to use with MorphTargetManager\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/mesh/morphTargets\r\n */\r\nexport class MorphTarget implements IAnimatable {\r\n /**\r\n * Gets or sets the list of animations\r\n */\r\n public animations: Animation[] = [];\r\n\r\n private _scene: Nullable<Scene>;\r\n private _positions: Nullable<FloatArray> = null;\r\n private _normals: Nullable<FloatArray> = null;\r\n private _tangents: Nullable<FloatArray> = null;\r\n private _uvs: Nullable<FloatArray> = null;\r\n private _uv2s: Nullable<FloatArray> = null;\r\n private _colors: Nullable<FloatArray> = null;\r\n private _influence: number;\r\n private _uniqueId = 0;\r\n\r\n /**\r\n * Observable raised when the influence changes\r\n */\r\n public onInfluenceChanged = new Observable<boolean>();\r\n\r\n /** @internal */\r\n public _onDataLayoutChanged = new Observable<void>();\r\n\r\n /**\r\n * Gets or sets the influence of this target (ie. its weight in the overall morphing)\r\n */\r\n public get influence(): number {\r\n return this._influence;\r\n }\r\n\r\n public set influence(influence: number) {\r\n if (this._influence === influence) {\r\n return;\r\n }\r\n\r\n const previous = this._influence;\r\n this._influence = influence;\r\n\r\n if (this.onInfluenceChanged.hasObservers()) {\r\n this.onInfluenceChanged.notifyObservers(previous === 0 || influence === 0);\r\n }\r\n }\r\n\r\n /**\r\n * Gets or sets the id of the morph Target\r\n */\r\n @serialize()\r\n public id: string;\r\n\r\n private _animationPropertiesOverride: Nullable<AnimationPropertiesOverride> = null;\r\n\r\n /**\r\n * Gets or sets the animation properties override\r\n */\r\n public get animationPropertiesOverride(): Nullable<AnimationPropertiesOverride> {\r\n if (!this._animationPropertiesOverride && this._scene) {\r\n return this._scene.animationPropertiesOverride;\r\n }\r\n return this._animationPropertiesOverride;\r\n }\r\n\r\n public set animationPropertiesOverride(value: Nullable<AnimationPropertiesOverride>) {\r\n this._animationPropertiesOverride = value;\r\n }\r\n\r\n /**\r\n * Creates a new MorphTarget\r\n * @param name defines the name of the target\r\n * @param influence defines the influence to use\r\n * @param scene defines the scene the morphtarget belongs to\r\n */\r\n public constructor(\r\n /** defines the name of the target */\r\n public name: string,\r\n influence = 0,\r\n scene: Nullable<Scene> = null\r\n ) {\r\n this.id = name;\r\n this._scene = scene || EngineStore.LastCreatedScene;\r\n this.influence = influence;\r\n\r\n if (this._scene) {\r\n this._uniqueId = this._scene.getUniqueId();\r\n }\r\n }\r\n\r\n /**\r\n * Gets the unique ID of this manager\r\n */\r\n public get uniqueId(): number {\r\n return this._uniqueId;\r\n }\r\n\r\n /**\r\n * Gets a boolean defining if the target contains position data\r\n */\r\n public get hasPositions(): boolean {\r\n return !!this._positions;\r\n }\r\n\r\n /**\r\n * Gets a boolean defining if the target contains normal data\r\n */\r\n public get hasNormals(): boolean {\r\n return !!this._normals;\r\n }\r\n\r\n /**\r\n * Gets a boolean defining if the target contains tangent data\r\n */\r\n public get hasTangents(): boolean {\r\n return !!this._tangents;\r\n }\r\n\r\n /**\r\n * Gets a boolean defining if the target contains texture coordinates data\r\n */\r\n public get hasUVs(): boolean {\r\n return !!this._uvs;\r\n }\r\n\r\n /**\r\n * Gets a boolean defining if the target contains texture coordinates 2 data\r\n */\r\n public get hasUV2s(): boolean {\r\n return !!this._uv2s;\r\n }\r\n\r\n public get hasColors(): boolean {\r\n return !!this._colors;\r\n }\r\n\r\n /**\r\n * Gets the number of vertices stored in this target\r\n */\r\n public get vertexCount(): number {\r\n return this._positions\r\n ? this._positions.length / 3\r\n : this._normals\r\n ? this._normals.length / 3\r\n : this._tangents\r\n ? this._tangents.length / 3\r\n : this._uvs\r\n ? this._uvs.length / 2\r\n : this._uv2s\r\n ? this._uv2s.length / 2\r\n : this._colors\r\n ? this._colors.length / 4\r\n : 0;\r\n }\r\n\r\n /**\r\n * Affects position data to this target\r\n * @param data defines the position data to use\r\n */\r\n public setPositions(data: Nullable<FloatArray>) {\r\n const hadPositions = this.hasPositions;\r\n\r\n this._positions = data;\r\n\r\n if (hadPositions !== this.hasPositions) {\r\n this._onDataLayoutChanged.notifyObservers(undefined);\r\n }\r\n }\r\n\r\n /**\r\n * Gets the position data stored in this target\r\n * @returns a FloatArray containing the position data (or null if not present)\r\n */\r\n public getPositions(): Nullable<FloatArray> {\r\n return this._positions;\r\n }\r\n\r\n /**\r\n * Affects normal data to this target\r\n * @param data defines the normal data to use\r\n */\r\n public setNormals(data: Nullable<FloatArray>) {\r\n const hadNormals = this.hasNormals;\r\n\r\n this._normals = data;\r\n\r\n if (hadNormals !== this.hasNormals) {\r\n this._onDataLayoutChanged.notifyObservers(undefined);\r\n }\r\n }\r\n\r\n /**\r\n * Gets the normal data stored in this target\r\n * @returns a FloatArray containing the normal data (or null if not present)\r\n */\r\n public getNormals(): Nullable<FloatArray> {\r\n return this._normals;\r\n }\r\n\r\n /**\r\n * Affects tangent data to this target\r\n * @param data defines the tangent data to use\r\n */\r\n public setTangents(data: Nullable<FloatArray>) {\r\n const hadTangents = this.hasTangents;\r\n\r\n this._tangents = data;\r\n\r\n if (hadTangents !== this.hasTangents) {\r\n this._onDataLayoutChanged.notifyObservers(undefined);\r\n }\r\n }\r\n\r\n /**\r\n * Gets the tangent data stored in this target\r\n * @returns a FloatArray containing the tangent data (or null if not present)\r\n */\r\n public getTangents(): Nullable<FloatArray> {\r\n return this._tangents;\r\n }\r\n\r\n /**\r\n * Affects texture coordinates data to this target\r\n * @param data defines the texture coordinates data to use\r\n */\r\n public setUVs(data: Nullable<FloatArray>) {\r\n const hadUVs = this.hasUVs;\r\n\r\n this._uvs = data;\r\n\r\n if (hadUVs !== this.hasUVs) {\r\n this._onDataLayoutChanged.notifyObservers(undefined);\r\n }\r\n }\r\n\r\n /**\r\n * Gets the texture coordinates data stored in this target\r\n * @returns a FloatArray containing the texture coordinates data (or null if not present)\r\n */\r\n public getUVs(): Nullable<FloatArray> {\r\n return this._uvs;\r\n }\r\n\r\n /**\r\n * Affects texture coordinates 2 data to this target\r\n * @param data defines the texture coordinates 2 data to use\r\n */\r\n public setUV2s(data: Nullable<FloatArray>) {\r\n const hadUV2s = this.hasUV2s;\r\n\r\n this._uv2s = data;\r\n\r\n if (hadUV2s !== this.hasUV2s) {\r\n this._onDataLayoutChanged.notifyObservers(undefined);\r\n }\r\n }\r\n\r\n /**\r\n * Gets the texture coordinates 2 data stored in this target\r\n * @returns a FloatArray containing the texture coordinates 2 data (or null if not present)\r\n */\r\n public getUV2s(): Nullable<FloatArray> {\r\n return this._uv2s;\r\n }\r\n\r\n /**\r\n * Affects color data to this target\r\n * @param data defines the color data to use\r\n */\r\n public setColors(data: Nullable<FloatArray>) {\r\n const hadColors = this.hasColors;\r\n\r\n this._colors = data;\r\n\r\n if (hadColors !== this.hasColors) {\r\n this._onDataLayoutChanged.notifyObservers(undefined);\r\n }\r\n }\r\n\r\n /**\r\n * Gets the color data stored in this target\r\n * @returns a FloatArray containing the color data (or null if not present)\r\n */\r\n public getColors(): Nullable<FloatArray> {\r\n return this._colors;\r\n }\r\n\r\n /**\r\n * Clone the current target\r\n * @returns a new MorphTarget\r\n */\r\n public clone(): MorphTarget {\r\n const newOne = SerializationHelper.Clone(() => new MorphTarget(this.name, this.influence, this._scene), this);\r\n\r\n newOne._positions = this._positions;\r\n newOne._normals = this._normals;\r\n newOne._tangents = this._tangents;\r\n newOne._uvs = this._uvs;\r\n newOne._uv2s = this._uv2s;\r\n newOne._colors = this._colors;\r\n\r\n return newOne;\r\n }\r\n\r\n /**\r\n * Serializes the current target into a Serialization object\r\n * @returns the serialized object\r\n */\r\n public serialize(): any {\r\n const serializationObject: any = {};\r\n\r\n serializationObject.name = this.name;\r\n serializationObject.influence = this.influence;\r\n\r\n if (this.id != null) {\r\n serializationObject.id = this.id;\r\n }\r\n serializationObject.uniqueId = this.uniqueId;\r\n\r\n serializationObject.positions = Array.prototype.slice.call(this.getPositions());\r\n if (this.hasNormals) {\r\n serializationObject.normals = Array.prototype.slice.call(this.getNormals());\r\n }\r\n if (this.hasTangents) {\r\n serializationObject.tangents = Array.prototype.slice.call(this.getTangents());\r\n }\r\n if (this.hasUVs) {\r\n serializationObject.uvs = Array.prototype.slice.call(this.getUVs());\r\n }\r\n if (this.hasUV2s) {\r\n serializationObject.uv2s = Array.prototype.slice.call(this.getUV2s());\r\n }\r\n if (this.hasColors) {\r\n serializationObject.colors = Array.prototype.slice.call(this.getColors());\r\n }\r\n\r\n // Animations\r\n SerializationHelper.AppendSerializedAnimations(this, serializationObject);\r\n\r\n return serializationObject;\r\n }\r\n\r\n /**\r\n * Returns the string \"MorphTarget\"\r\n * @returns \"MorphTarget\"\r\n */\r\n public getClassName(): string {\r\n return \"MorphTarget\";\r\n }\r\n\r\n // Statics\r\n\r\n /**\r\n * Creates a new target from serialized data\r\n * @param serializationObject defines the serialized data to use\r\n * @param scene defines the hosting scene\r\n * @returns a new MorphTarget\r\n */\r\n public static Parse(serializationObject: any, scene?: Scene): MorphTarget {\r\n const result = new MorphTarget(serializationObject.name, serializationObject.influence);\r\n\r\n result.setPositions(serializationObject.positions);\r\n\r\n if (serializationObject.id != null) {\r\n result.id = serializationObject.id;\r\n }\r\n if (serializationObject.normals) {\r\n result.setNormals(serializationObject.normals);\r\n }\r\n if (serializationObject.tangents) {\r\n result.setTangents(serializationObject.tangents);\r\n }\r\n if (serializationObject.uvs) {\r\n result.setUVs(serializationObject.uvs);\r\n }\r\n if (serializationObject.uv2s) {\r\n result.setUV2s(serializationObject.uv2s);\r\n }\r\n if (serializationObject.colors) {\r\n result.setColors(serializationObject.colors);\r\n }\r\n\r\n // Animations\r\n if (serializationObject.animations) {\r\n for (let animationIndex = 0; animationIndex < serializationObject.animations.length; animationIndex++) {\r\n const parsedAnimation = serializationObject.animations[animationIndex];\r\n const internalClass = GetClass(\"BABYLON.Animation\");\r\n if (internalClass) {\r\n result.animations.push(internalClass.Parse(parsedAnimation));\r\n }\r\n }\r\n\r\n if (serializationObject.autoAnimate && scene) {\r\n scene.beginAnimation(\r\n result,\r\n serializationObject.autoAnimateFrom,\r\n serializationObject.autoAnimateTo,\r\n serializationObject.autoAnimateLoop,\r\n serializationObject.autoAnimateSpeed || 1.0\r\n );\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Creates a MorphTarget from mesh data\r\n * @param mesh defines the source mesh\r\n * @param name defines the name to use for the new target\r\n * @param influence defines the influence to attach to the target\r\n * @returns a new MorphTarget\r\n */\r\n public static FromMesh(mesh: AbstractMesh, name?: string, influence?: number): MorphTarget {\r\n if (!name) {\r\n name = mesh.name;\r\n }\r\n\r\n const result = new MorphTarget(name, influence, mesh.getScene());\r\n\r\n result.setPositions(<FloatArray>mesh.getVerticesData(VertexBuffer.PositionKind));\r\n\r\n if (mesh.isVerticesDataPresent(VertexBuffer.NormalKind)) {\r\n result.setNormals(<FloatArray>mesh.getVerticesData(VertexBuffer.NormalKind));\r\n }\r\n if (mesh.isVerticesDataPresent(VertexBuffer.TangentKind)) {\r\n result.setTangents(<FloatArray>mesh.getVerticesData(VertexBuffer.TangentKind));\r\n }\r\n if (mesh.isVerticesDataPresent(VertexBuffer.UVKind)) {\r\n result.setUVs(<FloatArray>mesh.getVerticesData(VertexBuffer.UVKind));\r\n }\r\n if (mesh.isVerticesDataPresent(VertexBuffer.UV2Kind)) {\r\n result.setUV2s(<FloatArray>mesh.getVerticesData(VertexBuffer.UV2Kind));\r\n }\r\n if (mesh.isVerticesDataPresent(VertexBuffer.ColorKind)) {\r\n result.setColors(<FloatArray>mesh.getVerticesData(VertexBuffer.ColorKind));\r\n }\r\n\r\n return result;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"morphTarget.js","sourceRoot":"","sources":["../../../../dev/core/src/Morph/morphTarget.ts"],"names":[],"mappings":"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","sourcesContent":["import type { IAnimatable } from \"../Animations/animatable.interface\";\r\nimport { Observable } from \"../Misc/observable\";\r\nimport type { Nullable, FloatArray } from \"../types\";\r\nimport type { Scene } from \"../scene\";\r\nimport { EngineStore } from \"../Engines/engineStore\";\r\nimport type { AbstractMesh } from \"../Meshes/abstractMesh\";\r\nimport { VertexBuffer } from \"../Buffers/buffer\";\r\nimport type { AnimationPropertiesOverride } from \"../Animations/animationPropertiesOverride\";\r\nimport { serialize } from \"../Misc/decorators\";\r\nimport { SerializationHelper } from \"../Misc/decorators.serialization\";\r\nimport { GetClass } from \"../Misc/typeStore\";\r\nimport type { Animation } from \"../Animations/animation\";\r\nimport type { MorphTargetManager } from \"./morphTargetManager\";\r\n\r\n/**\r\n * Defines a target to use with MorphTargetManager\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/mesh/morphTargets\r\n */\r\nexport class MorphTarget implements IAnimatable {\r\n /**\r\n * Gets or sets the list of animations\r\n */\r\n public animations: Animation[] = [];\r\n\r\n private _scene: Nullable<Scene>;\r\n private _positions: Nullable<FloatArray> = null;\r\n private _normals: Nullable<FloatArray> = null;\r\n private _tangents: Nullable<FloatArray> = null;\r\n private _uvs: Nullable<FloatArray> = null;\r\n private _uv2s: Nullable<FloatArray> = null;\r\n private _colors: Nullable<FloatArray> = null;\r\n private _influence: number;\r\n private _uniqueId = 0;\r\n\r\n /**\r\n * Observable raised when the influence changes\r\n */\r\n public onInfluenceChanged = new Observable<boolean>();\r\n\r\n /** @internal */\r\n public _onDataLayoutChanged = new Observable<void>();\r\n\r\n /**\r\n * Gets or sets the influence of this target (ie. its weight in the overall morphing)\r\n */\r\n public get influence(): number {\r\n return this._influence;\r\n }\r\n\r\n public set influence(influence: number) {\r\n if (this._influence === influence) {\r\n return;\r\n }\r\n\r\n const previous = this._influence;\r\n this._influence = influence;\r\n\r\n if (this.onInfluenceChanged.hasObservers()) {\r\n this.onInfluenceChanged.notifyObservers(previous === 0 || influence === 0);\r\n }\r\n }\r\n\r\n /**\r\n * Gets or sets the id of the morph Target\r\n */\r\n @serialize()\r\n public id: string;\r\n\r\n /**\r\n * Gets or sets the morph target manager this morph target is associated with\r\n */\r\n @serialize()\r\n public morphTargetManager: Nullable<MorphTargetManager> = null;\r\n\r\n private _animationPropertiesOverride: Nullable<AnimationPropertiesOverride> = null;\r\n\r\n /**\r\n * Gets or sets the animation properties override\r\n */\r\n public get animationPropertiesOverride(): Nullable<AnimationPropertiesOverride> {\r\n if (!this._animationPropertiesOverride && this._scene) {\r\n return this._scene.animationPropertiesOverride;\r\n }\r\n return this._animationPropertiesOverride;\r\n }\r\n\r\n public set animationPropertiesOverride(value: Nullable<AnimationPropertiesOverride>) {\r\n this._animationPropertiesOverride = value;\r\n }\r\n\r\n /**\r\n * Creates a new MorphTarget\r\n * @param name defines the name of the target\r\n * @param influence defines the influence to use\r\n * @param scene defines the scene the morphtarget belongs to\r\n * @param morphTargetManager morph target manager this morph target is associated with\r\n */\r\n public constructor(\r\n public name: string,\r\n influence = 0,\r\n scene: Nullable<Scene> = null,\r\n morphTargetManager: Nullable<MorphTargetManager> = null\r\n ) {\r\n this.id = name;\r\n this.morphTargetManager = morphTargetManager;\r\n this._scene = scene || EngineStore.LastCreatedScene;\r\n this.influence = influence;\r\n\r\n if (this._scene) {\r\n this._uniqueId = this._scene.getUniqueId();\r\n }\r\n }\r\n\r\n /**\r\n * Gets the unique ID of this manager\r\n */\r\n public get uniqueId(): number {\r\n return this._uniqueId;\r\n }\r\n\r\n /**\r\n * Gets a boolean defining if the target contains position data\r\n */\r\n public get hasPositions(): boolean {\r\n return !!this._positions;\r\n }\r\n\r\n /**\r\n * Gets a boolean defining if the target contains normal data\r\n */\r\n public get hasNormals(): boolean {\r\n return !!this._normals;\r\n }\r\n\r\n /**\r\n * Gets a boolean defining if the target contains tangent data\r\n */\r\n public get hasTangents(): boolean {\r\n return !!this._tangents;\r\n }\r\n\r\n /**\r\n * Gets a boolean defining if the target contains texture coordinates data\r\n */\r\n public get hasUVs(): boolean {\r\n return !!this._uvs;\r\n }\r\n\r\n /**\r\n * Gets a boolean defining if the target contains texture coordinates 2 data\r\n */\r\n public get hasUV2s(): boolean {\r\n return !!this._uv2s;\r\n }\r\n\r\n public get hasColors(): boolean {\r\n return !!this._colors;\r\n }\r\n\r\n /**\r\n * Gets the number of vertices stored in this target\r\n */\r\n public get vertexCount(): number {\r\n return this._positions\r\n ? this._positions.length / 3\r\n : this._normals\r\n ? this._normals.length / 3\r\n : this._tangents\r\n ? this._tangents.length / 3\r\n : this._uvs\r\n ? this._uvs.length / 2\r\n : this._uv2s\r\n ? this._uv2s.length / 2\r\n : this._colors\r\n ? this._colors.length / 4\r\n : 0;\r\n }\r\n\r\n /**\r\n * Affects position data to this target\r\n * @param data defines the position data to use\r\n */\r\n public setPositions(data: Nullable<FloatArray>) {\r\n const hadPositions = this.hasPositions;\r\n\r\n this._positions = data;\r\n\r\n if (hadPositions !== this.hasPositions) {\r\n this._onDataLayoutChanged.notifyObservers(undefined);\r\n }\r\n }\r\n\r\n /**\r\n * Gets the position data stored in this target\r\n * @returns a FloatArray containing the position data (or null if not present)\r\n */\r\n public getPositions(): Nullable<FloatArray> {\r\n return this._positions;\r\n }\r\n\r\n /**\r\n * Affects normal data to this target\r\n * @param data defines the normal data to use\r\n */\r\n public setNormals(data: Nullable<FloatArray>) {\r\n const hadNormals = this.hasNormals;\r\n\r\n this._normals = data;\r\n\r\n if (hadNormals !== this.hasNormals) {\r\n this._onDataLayoutChanged.notifyObservers(undefined);\r\n }\r\n }\r\n\r\n /**\r\n * Gets the normal data stored in this target\r\n * @returns a FloatArray containing the normal data (or null if not present)\r\n */\r\n public getNormals(): Nullable<FloatArray> {\r\n return this._normals;\r\n }\r\n\r\n /**\r\n * Affects tangent data to this target\r\n * @param data defines the tangent data to use\r\n */\r\n public setTangents(data: Nullable<FloatArray>) {\r\n const hadTangents = this.hasTangents;\r\n\r\n this._tangents = data;\r\n\r\n if (hadTangents !== this.hasTangents) {\r\n this._onDataLayoutChanged.notifyObservers(undefined);\r\n }\r\n }\r\n\r\n /**\r\n * Gets the tangent data stored in this target\r\n * @returns a FloatArray containing the tangent data (or null if not present)\r\n */\r\n public getTangents(): Nullable<FloatArray> {\r\n return this._tangents;\r\n }\r\n\r\n /**\r\n * Affects texture coordinates data to this target\r\n * @param data defines the texture coordinates data to use\r\n */\r\n public setUVs(data: Nullable<FloatArray>) {\r\n const hadUVs = this.hasUVs;\r\n\r\n this._uvs = data;\r\n\r\n if (hadUVs !== this.hasUVs) {\r\n this._onDataLayoutChanged.notifyObservers(undefined);\r\n }\r\n }\r\n\r\n /**\r\n * Gets the texture coordinates data stored in this target\r\n * @returns a FloatArray containing the texture coordinates data (or null if not present)\r\n */\r\n public getUVs(): Nullable<FloatArray> {\r\n return this._uvs;\r\n }\r\n\r\n /**\r\n * Affects texture coordinates 2 data to this target\r\n * @param data defines the texture coordinates 2 data to use\r\n */\r\n public setUV2s(data: Nullable<FloatArray>) {\r\n const hadUV2s = this.hasUV2s;\r\n\r\n this._uv2s = data;\r\n\r\n if (hadUV2s !== this.hasUV2s) {\r\n this._onDataLayoutChanged.notifyObservers(undefined);\r\n }\r\n }\r\n\r\n /**\r\n * Gets the texture coordinates 2 data stored in this target\r\n * @returns a FloatArray containing the texture coordinates 2 data (or null if not present)\r\n */\r\n public getUV2s(): Nullable<FloatArray> {\r\n return this._uv2s;\r\n }\r\n\r\n /**\r\n * Affects color data to this target\r\n * @param data defines the color data to use\r\n */\r\n public setColors(data: Nullable<FloatArray>) {\r\n const hadColors = this.hasColors;\r\n\r\n this._colors = data;\r\n\r\n if (hadColors !== this.hasColors) {\r\n this._onDataLayoutChanged.notifyObservers(undefined);\r\n }\r\n }\r\n\r\n /**\r\n * Gets the color data stored in this target\r\n * @returns a FloatArray containing the color data (or null if not present)\r\n */\r\n public getColors(): Nullable<FloatArray> {\r\n return this._colors;\r\n }\r\n\r\n /**\r\n * Clone the current target\r\n * @returns a new MorphTarget\r\n */\r\n public clone(): MorphTarget {\r\n const newOne = SerializationHelper.Clone(() => new MorphTarget(this.name, this.influence, this._scene, this.morphTargetManager), this);\r\n\r\n newOne._positions = this._positions;\r\n newOne._normals = this._normals;\r\n newOne._tangents = this._tangents;\r\n newOne._uvs = this._uvs;\r\n newOne._uv2s = this._uv2s;\r\n newOne._colors = this._colors;\r\n\r\n return newOne;\r\n }\r\n\r\n /**\r\n * Serializes the current target into a Serialization object\r\n * @returns the serialized object\r\n */\r\n public serialize(): any {\r\n const serializationObject: any = {};\r\n\r\n serializationObject.name = this.name;\r\n serializationObject.influence = this.influence;\r\n\r\n if (this.id != null) {\r\n serializationObject.id = this.id;\r\n }\r\n serializationObject.uniqueId = this.uniqueId;\r\n\r\n serializationObject.positions = Array.prototype.slice.call(this.getPositions());\r\n if (this.hasNormals) {\r\n serializationObject.normals = Array.prototype.slice.call(this.getNormals());\r\n }\r\n if (this.hasTangents) {\r\n serializationObject.tangents = Array.prototype.slice.call(this.getTangents());\r\n }\r\n if (this.hasUVs) {\r\n serializationObject.uvs = Array.prototype.slice.call(this.getUVs());\r\n }\r\n if (this.hasUV2s) {\r\n serializationObject.uv2s = Array.prototype.slice.call(this.getUV2s());\r\n }\r\n if (this.hasColors) {\r\n serializationObject.colors = Array.prototype.slice.call(this.getColors());\r\n }\r\n\r\n // Animations\r\n SerializationHelper.AppendSerializedAnimations(this, serializationObject);\r\n\r\n return serializationObject;\r\n }\r\n\r\n /**\r\n * Returns the string \"MorphTarget\"\r\n * @returns \"MorphTarget\"\r\n */\r\n public getClassName(): string {\r\n return \"MorphTarget\";\r\n }\r\n\r\n // Statics\r\n\r\n /**\r\n * Creates a new target from serialized data\r\n * @param serializationObject defines the serialized data to use\r\n * @param scene defines the hosting scene\r\n * @param morphTargetManager morph target manager this morph target is associated with\r\n * @returns a new MorphTarget\r\n */\r\n public static Parse(serializationObject: any, scene?: Scene, morphTargetManager: Nullable<MorphTargetManager> = null): MorphTarget {\r\n const result = new MorphTarget(serializationObject.name, serializationObject.influence, scene, morphTargetManager);\r\n\r\n result.setPositions(serializationObject.positions);\r\n\r\n if (serializationObject.id != null) {\r\n result.id = serializationObject.id;\r\n }\r\n if (serializationObject.normals) {\r\n result.setNormals(serializationObject.normals);\r\n }\r\n if (serializationObject.tangents) {\r\n result.setTangents(serializationObject.tangents);\r\n }\r\n if (serializationObject.uvs) {\r\n result.setUVs(serializationObject.uvs);\r\n }\r\n if (serializationObject.uv2s) {\r\n result.setUV2s(serializationObject.uv2s);\r\n }\r\n if (serializationObject.colors) {\r\n result.setColors(serializationObject.colors);\r\n }\r\n\r\n // Animations\r\n if (serializationObject.animations) {\r\n for (let animationIndex = 0; animationIndex < serializationObject.animations.length; animationIndex++) {\r\n const parsedAnimation = serializationObject.animations[animationIndex];\r\n const internalClass = GetClass(\"BABYLON.Animation\");\r\n if (internalClass) {\r\n result.animations.push(internalClass.Parse(parsedAnimation));\r\n }\r\n }\r\n\r\n if (serializationObject.autoAnimate && scene) {\r\n scene.beginAnimation(\r\n result,\r\n serializationObject.autoAnimateFrom,\r\n serializationObject.autoAnimateTo,\r\n serializationObject.autoAnimateLoop,\r\n serializationObject.autoAnimateSpeed || 1.0\r\n );\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Creates a MorphTarget from mesh data\r\n * @param mesh defines the source mesh\r\n * @param name defines the name to use for the new target\r\n * @param influence defines the influence to attach to the target\r\n * @returns a new MorphTarget\r\n */\r\n public static FromMesh(mesh: AbstractMesh, name?: string, influence?: number): MorphTarget {\r\n if (!name) {\r\n name = mesh.name;\r\n }\r\n\r\n const result = new MorphTarget(name, influence, mesh.getScene(), mesh.morphTargetManager);\r\n\r\n result.setPositions(<FloatArray>mesh.getVerticesData(VertexBuffer.PositionKind));\r\n\r\n if (mesh.isVerticesDataPresent(VertexBuffer.NormalKind)) {\r\n result.setNormals(<FloatArray>mesh.getVerticesData(VertexBuffer.NormalKind));\r\n }\r\n if (mesh.isVerticesDataPresent(VertexBuffer.TangentKind)) {\r\n result.setTangents(<FloatArray>mesh.getVerticesData(VertexBuffer.TangentKind));\r\n }\r\n if (mesh.isVerticesDataPresent(VertexBuffer.UVKind)) {\r\n result.setUVs(<FloatArray>mesh.getVerticesData(VertexBuffer.UVKind));\r\n }\r\n if (mesh.isVerticesDataPresent(VertexBuffer.UV2Kind)) {\r\n result.setUV2s(<FloatArray>mesh.getVerticesData(VertexBuffer.UV2Kind));\r\n }\r\n if (mesh.isVerticesDataPresent(VertexBuffer.ColorKind)) {\r\n result.setColors(<FloatArray>mesh.getVerticesData(VertexBuffer.ColorKind));\r\n }\r\n\r\n return result;\r\n }\r\n}\r\n"]}
@@ -9,6 +9,7 @@ import type { IAssetContainer } from "../IAssetContainer.js";
9
9
  * @see https://doc.babylonjs.com/features/featuresDeepDive/mesh/morphTargets
10
10
  */
11
11
  export declare class MorphTargetManager implements IDisposable {
12
+ meshName?: string | undefined;
12
13
  /** Enable storing morph target data into textures when set to true (true by default) */
13
14
  static EnableTextureStorage: boolean;
14
15
  /** Maximum number of active morph targets supported in the "vertex attribute" mode (i.e., not the "texture" mode) */
@@ -84,8 +85,9 @@ export declare class MorphTargetManager implements IDisposable {
84
85
  /**
85
86
  * Creates a new MorphTargetManager
86
87
  * @param scene defines the current scene
88
+ * @param meshName name of the mesh this morph target manager is associated with
87
89
  */
88
- constructor(scene?: Nullable<Scene>);
90
+ constructor(scene?: Nullable<Scene>, meshName?: string | undefined);
89
91
  private _numMaxInfluencers;
90
92
  /**
91
93
  * Gets or sets the maximum number of influencers (targets) (default value: 0).
@@ -31,8 +31,10 @@ export class MorphTargetManager {
31
31
  /**
32
32
  * Creates a new MorphTargetManager
33
33
  * @param scene defines the current scene
34
+ * @param meshName name of the mesh this morph target manager is associated with
34
35
  */
35
- constructor(scene = null) {
36
+ constructor(scene = null, meshName) {
37
+ this.meshName = meshName;
36
38
  this._targets = new Array();
37
39
  this._targetInfluenceChangedObservers = new Array();
38
40
  this._targetDataLayoutChangedObservers = new Array();
@@ -369,6 +371,7 @@ export class MorphTargetManager {
369
371
  serialize() {
370
372
  const serializationObject = {};
371
373
  serializationObject.id = this.uniqueId;
374
+ serializationObject.meshName = this.meshName;
372
375
  serializationObject.targets = [];
373
376
  for (const target of this._targets) {
374
377
  serializationObject.targets.push(target.serialize());
@@ -576,7 +579,7 @@ export class MorphTargetManager {
576
579
  static Parse(serializationObject, scene) {
577
580
  const result = new MorphTargetManager(scene);
578
581
  for (const targetData of serializationObject.targets) {
579
- result.addTarget(MorphTarget.Parse(targetData, scene));
582
+ result.addTarget(MorphTarget.Parse(targetData, scene, result));
580
583
  }
581
584
  if (serializationObject.metadata) {
582
585
  result.metadata = serializationObject.metadata;
@@ -1 +1 @@
1
- {"version":3,"file":"morphTargetManager.js","sourceRoot":"","sources":["../../../../dev/core/src/Morph/morphTargetManager.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Observer } from \"../Misc/observable\";\r\nimport { SmartArray } from \"../Misc/smartArray\";\r\nimport { Logger } from \"../Misc/logger\";\r\nimport type { Nullable } from \"../types\";\r\nimport type { IDisposable, Scene } from \"../scene\";\r\nimport { EngineStore } from \"../Engines/engineStore\";\r\nimport type { Mesh } from \"../Meshes/mesh\";\r\nimport { MorphTarget } from \"./morphTarget\";\r\nimport { Constants } from \"../Engines/constants\";\r\nimport type { Effect } from \"../Materials/effect\";\r\nimport { RawTexture2DArray } from \"../Materials/Textures/rawTexture2DArray\";\r\nimport type { IAssetContainer } from \"core/IAssetContainer\";\r\n/**\r\n * This class is used to deform meshes using morphing between different targets\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/mesh/morphTargets\r\n */\r\nexport class MorphTargetManager implements IDisposable {\r\n /** Enable storing morph target data into textures when set to true (true by default) */\r\n public static EnableTextureStorage = true;\r\n\r\n /** Maximum number of active morph targets supported in the \"vertex attribute\" mode (i.e., not the \"texture\" mode) */\r\n public static MaxActiveMorphTargetsInVertexAttributeMode = 8;\r\n\r\n /**\r\n * When used in texture mode, if greather than 0, this will override the the morph manager numMaxInfluencers value.\r\n */\r\n public static ConstantTargetCountForTextureMode = 0;\r\n\r\n private _targets = new Array<MorphTarget>();\r\n private _targetInfluenceChangedObservers = new Array<Nullable<Observer<boolean>>>();\r\n private _targetDataLayoutChangedObservers = new Array<Nullable<Observer<void>>>();\r\n private _activeTargets = new SmartArray<MorphTarget>(16);\r\n private _scene: Nullable<Scene>;\r\n private _influences: Float32Array;\r\n private _supportsPositions = false;\r\n private _supportsNormals = false;\r\n private _supportsTangents = false;\r\n private _supportsUVs = false;\r\n private _supportsUV2s = false;\r\n private _supportsColors = false;\r\n private _vertexCount = 0;\r\n private _uniqueId = 0;\r\n private _tempInfluences = new Array<number>();\r\n private _canUseTextureForTargets = false;\r\n private _blockCounter = 0;\r\n private _mustSynchronize = true;\r\n private _forceUpdateWhenUnfrozen = false;\r\n\r\n /** @internal */\r\n public _textureVertexStride = 0;\r\n\r\n /** @internal */\r\n public _textureWidth = 0;\r\n\r\n /** @internal */\r\n public _textureHeight = 1;\r\n\r\n /** @internal */\r\n public _morphTargetTextureIndices: Float32Array;\r\n\r\n /** @internal */\r\n public _parentContainer: Nullable<IAssetContainer> = null;\r\n\r\n /** @internal */\r\n public _targetStoreTexture: Nullable<RawTexture2DArray>;\r\n\r\n /**\r\n * Gets or sets a boolean indicating if influencers must be optimized (eg. recompiling the shader if less influencers are used)\r\n */\r\n public optimizeInfluencers = true;\r\n\r\n /**\r\n * Gets or sets a boolean indicating if positions must be morphed\r\n */\r\n public enablePositionMorphing = true;\r\n\r\n /**\r\n * Gets or sets a boolean indicating if normals must be morphed\r\n */\r\n public enableNormalMorphing = true;\r\n\r\n /**\r\n * Gets or sets a boolean indicating if tangents must be morphed\r\n */\r\n public enableTangentMorphing = true;\r\n\r\n /**\r\n * Gets or sets a boolean indicating if UV must be morphed\r\n */\r\n public enableUVMorphing = true;\r\n\r\n /**\r\n * Gets or sets a boolean indicating if UV2 must be morphed\r\n */\r\n public enableUV2Morphing = true;\r\n\r\n /**\r\n * Gets or sets a boolean indicating if colors must be morphed\r\n */\r\n public enableColorMorphing = true;\r\n\r\n /**\r\n * Sets a boolean indicating that adding new target or updating an existing target will not update the underlying data buffers\r\n */\r\n public set areUpdatesFrozen(block: boolean) {\r\n if (block) {\r\n this._blockCounter++;\r\n } else {\r\n this._blockCounter--;\r\n if (this._blockCounter <= 0) {\r\n this._blockCounter = 0;\r\n\r\n this._syncActiveTargets(this._forceUpdateWhenUnfrozen);\r\n this._forceUpdateWhenUnfrozen = false;\r\n }\r\n }\r\n }\r\n\r\n public get areUpdatesFrozen() {\r\n return this._blockCounter > 0;\r\n }\r\n\r\n /**\r\n * Creates a new MorphTargetManager\r\n * @param scene defines the current scene\r\n */\r\n public constructor(scene: Nullable<Scene> = null) {\r\n if (!scene) {\r\n scene = EngineStore.LastCreatedScene;\r\n }\r\n\r\n this._scene = scene;\r\n\r\n if (this._scene) {\r\n this._scene.addMorphTargetManager(this);\r\n\r\n this._uniqueId = this._scene.getUniqueId();\r\n\r\n const engineCaps = this._scene.getEngine().getCaps();\r\n this._canUseTextureForTargets =\r\n engineCaps.canUseGLVertexID && engineCaps.textureFloat && engineCaps.maxVertexTextureImageUnits > 0 && engineCaps.texture2DArrayMaxLayerCount > 1;\r\n }\r\n }\r\n\r\n private _numMaxInfluencers = 0;\r\n\r\n /**\r\n * Gets or sets the maximum number of influencers (targets) (default value: 0).\r\n * Setting a value for this property can lead to a smoother experience, as only one shader will be compiled, which will use this value as the maximum number of influencers.\r\n * If you leave the value at 0 (default), a new shader will be compiled every time the number of active influencers changes. This can cause problems, as compiling a shader takes time.\r\n * If you assign a non-zero value to this property, you need to ensure that this value is greater than the maximum number of (active) influencers you'll need for this morph manager.\r\n * Otherwise, the number of active influencers will be truncated at the value you set for this property, which can lead to unexpected results.\r\n * Note that this property has no effect if \"useTextureToStoreTargets\" is false.\r\n * Note as well that if MorphTargetManager.ConstantTargetCountForTextureMode is greater than 0, this property will be ignored and the constant value will be used instead.\r\n */\r\n public get numMaxInfluencers(): number {\r\n if (MorphTargetManager.ConstantTargetCountForTextureMode > 0 && this.isUsingTextureForTargets) {\r\n return MorphTargetManager.ConstantTargetCountForTextureMode;\r\n }\r\n return this._numMaxInfluencers;\r\n }\r\n\r\n public set numMaxInfluencers(value: number) {\r\n if (this._numMaxInfluencers === value) {\r\n return;\r\n }\r\n\r\n this._numMaxInfluencers = value;\r\n this._mustSynchronize = true;\r\n this._syncActiveTargets();\r\n }\r\n\r\n /**\r\n * Gets the unique ID of this manager\r\n */\r\n public get uniqueId(): number {\r\n return this._uniqueId;\r\n }\r\n\r\n /**\r\n * Gets the number of vertices handled by this manager\r\n */\r\n public get vertexCount(): number {\r\n return this._vertexCount;\r\n }\r\n\r\n /**\r\n * Gets a boolean indicating if this manager supports morphing of positions\r\n */\r\n public get supportsPositions(): boolean {\r\n return this._supportsPositions && this.enablePositionMorphing;\r\n }\r\n\r\n /**\r\n * Gets a boolean indicating if this manager supports morphing of normals\r\n */\r\n public get supportsNormals(): boolean {\r\n return this._supportsNormals && this.enableNormalMorphing;\r\n }\r\n\r\n /**\r\n * Gets a boolean indicating if this manager supports morphing of tangents\r\n */\r\n public get supportsTangents(): boolean {\r\n return this._supportsTangents && this.enableTangentMorphing;\r\n }\r\n\r\n /**\r\n * Gets a boolean indicating if this manager supports morphing of texture coordinates\r\n */\r\n public get supportsUVs(): boolean {\r\n return this._supportsUVs && this.enableUVMorphing;\r\n }\r\n\r\n /**\r\n * Gets a boolean indicating if this manager supports morphing of texture coordinates 2\r\n */\r\n public get supportsUV2s(): boolean {\r\n return this._supportsUV2s && this.enableUV2Morphing;\r\n }\r\n\r\n /**\r\n * Gets a boolean indicating if this manager supports morphing of colors\r\n */\r\n public get supportsColors(): boolean {\r\n return this._supportsColors && this.enableColorMorphing;\r\n }\r\n\r\n /**\r\n * Gets a boolean indicating if this manager has data for morphing positions\r\n */\r\n public get hasPositions(): boolean {\r\n return this._supportsPositions;\r\n }\r\n\r\n /**\r\n * Gets a boolean indicating if this manager has data for morphing normals\r\n */\r\n public get hasNormals(): boolean {\r\n return this._supportsNormals;\r\n }\r\n\r\n /**\r\n * Gets a boolean indicating if this manager has data for morphing tangents\r\n */\r\n public get hasTangents(): boolean {\r\n return this._supportsTangents;\r\n }\r\n\r\n /**\r\n * Gets a boolean indicating if this manager has data for morphing texture coordinates\r\n */\r\n public get hasUVs(): boolean {\r\n return this._supportsUVs;\r\n }\r\n\r\n /**\r\n * Gets a boolean indicating if this manager has data for morphing texture coordinates 2\r\n */\r\n public get hasUV2s(): boolean {\r\n return this._supportsUV2s;\r\n }\r\n\r\n /**\r\n * Gets a boolean indicating if this manager has data for morphing colors\r\n */\r\n public get hasColors(): boolean {\r\n return this._supportsColors;\r\n }\r\n\r\n /**\r\n * Gets the number of targets stored in this manager\r\n */\r\n public get numTargets(): number {\r\n return this._targets.length;\r\n }\r\n\r\n /**\r\n * Gets the number of influencers (ie. the number of targets with influences > 0)\r\n */\r\n public get numInfluencers(): number {\r\n if (this._influencesAreDirty) {\r\n this._syncActiveTargets();\r\n }\r\n return this._activeTargets.length;\r\n }\r\n\r\n /**\r\n * Gets the list of influences (one per target)\r\n */\r\n public get influences(): Float32Array {\r\n if (this._influencesAreDirty) {\r\n this._syncActiveTargets();\r\n }\r\n return this._influences;\r\n }\r\n\r\n private _useTextureToStoreTargets = true;\r\n /**\r\n * Gets or sets a boolean indicating that targets should be stored as a texture instead of using vertex attributes (default is true).\r\n * Please note that this option is not available if the hardware does not support it\r\n */\r\n public get useTextureToStoreTargets(): boolean {\r\n return this._useTextureToStoreTargets;\r\n }\r\n\r\n public set useTextureToStoreTargets(value: boolean) {\r\n if (this._useTextureToStoreTargets === value) {\r\n return;\r\n }\r\n this._useTextureToStoreTargets = value;\r\n this._mustSynchronize = true;\r\n this._syncActiveTargets();\r\n }\r\n\r\n /**\r\n * Gets a boolean indicating that the targets are stored into a texture (instead of as attributes)\r\n */\r\n public get isUsingTextureForTargets() {\r\n return (\r\n MorphTargetManager.EnableTextureStorage &&\r\n this.useTextureToStoreTargets &&\r\n this._canUseTextureForTargets &&\r\n !this._scene?.getEngine().getCaps().disableMorphTargetTexture\r\n );\r\n }\r\n\r\n /**\r\n * Gets or sets an object used to store user defined information for the MorphTargetManager\r\n */\r\n public metadata: any = null;\r\n\r\n /**\r\n * Gets the active target at specified index. An active target is a target with an influence > 0\r\n * @param index defines the index to check\r\n * @returns the requested target\r\n */\r\n public getActiveTarget(index: number): MorphTarget {\r\n if (this._influencesAreDirty) {\r\n this._syncActiveTargets();\r\n }\r\n return this._activeTargets.data[index];\r\n }\r\n\r\n /**\r\n * Gets the target at specified index\r\n * @param index defines the index to check\r\n * @returns the requested target\r\n */\r\n public getTarget(index: number): MorphTarget {\r\n return this._targets[index];\r\n }\r\n\r\n /**\r\n * Gets the first target with the specified name\r\n * @param name defines the name to check\r\n * @returns the requested target\r\n */\r\n public getTargetByName(name: string): Nullable<MorphTarget> {\r\n for (const target of this._targets) {\r\n if (target.name === name) {\r\n return target;\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private _influencesAreDirty = false;\r\n private _needUpdateInfluences = false;\r\n\r\n /**\r\n * Add a new target to this manager\r\n * @param target defines the target to add\r\n */\r\n public addTarget(target: MorphTarget): void {\r\n this._targets.push(target);\r\n this._targetInfluenceChangedObservers.push(\r\n target.onInfluenceChanged.add((needUpdate) => {\r\n if (this.areUpdatesFrozen && needUpdate) {\r\n this._forceUpdateWhenUnfrozen = true;\r\n }\r\n this._influencesAreDirty = true;\r\n this._needUpdateInfluences = this._needUpdateInfluences || needUpdate;\r\n })\r\n );\r\n this._targetDataLayoutChangedObservers.push(\r\n target._onDataLayoutChanged.add(() => {\r\n this._mustSynchronize = true;\r\n this._syncActiveTargets();\r\n })\r\n );\r\n this._mustSynchronize = true;\r\n this._syncActiveTargets();\r\n }\r\n\r\n /**\r\n * Removes a target from the manager\r\n * @param target defines the target to remove\r\n */\r\n public removeTarget(target: MorphTarget): void {\r\n const index = this._targets.indexOf(target);\r\n if (index >= 0) {\r\n this._targets.splice(index, 1);\r\n\r\n target.onInfluenceChanged.remove(this._targetInfluenceChangedObservers.splice(index, 1)[0]);\r\n target._onDataLayoutChanged.remove(this._targetDataLayoutChangedObservers.splice(index, 1)[0]);\r\n this._mustSynchronize = true;\r\n this._syncActiveTargets();\r\n }\r\n\r\n if (this._scene) {\r\n this._scene.stopAnimation(target);\r\n }\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _bind(effect: Effect) {\r\n if (this._influencesAreDirty) {\r\n this._syncActiveTargets();\r\n }\r\n effect.setFloat3(\"morphTargetTextureInfo\", this._textureVertexStride, this._textureWidth, this._textureHeight);\r\n effect.setFloatArray(\"morphTargetTextureIndices\", this._morphTargetTextureIndices);\r\n effect.setTexture(\"morphTargets\", this._targetStoreTexture);\r\n effect.setFloat(\"morphTargetCount\", this.numInfluencers);\r\n }\r\n\r\n /**\r\n * Clone the current manager\r\n * @returns a new MorphTargetManager\r\n */\r\n public clone(): MorphTargetManager {\r\n const copy = new MorphTargetManager(this._scene);\r\n copy.areUpdatesFrozen = true;\r\n\r\n for (const target of this._targets) {\r\n copy.addTarget(target.clone());\r\n }\r\n copy.areUpdatesFrozen = false;\r\n\r\n copy.enablePositionMorphing = this.enablePositionMorphing;\r\n copy.enableNormalMorphing = this.enableNormalMorphing;\r\n copy.enableTangentMorphing = this.enableTangentMorphing;\r\n copy.enableUVMorphing = this.enableUVMorphing;\r\n copy.enableUV2Morphing = this.enableUV2Morphing;\r\n copy.enableColorMorphing = this.enableColorMorphing;\r\n copy.metadata = this.metadata;\r\n\r\n return copy;\r\n }\r\n\r\n /**\r\n * Serializes the current manager into a Serialization object\r\n * @returns the serialized object\r\n */\r\n public serialize(): any {\r\n const serializationObject: any = {};\r\n\r\n serializationObject.id = this.uniqueId;\r\n\r\n serializationObject.targets = [];\r\n for (const target of this._targets) {\r\n serializationObject.targets.push(target.serialize());\r\n }\r\n\r\n if (this.metadata) {\r\n serializationObject.metadata = this.metadata;\r\n }\r\n\r\n return serializationObject;\r\n }\r\n\r\n private _syncActiveTargets(needUpdate = false): void {\r\n if (this.areUpdatesFrozen) {\r\n return;\r\n }\r\n\r\n needUpdate = needUpdate || this._needUpdateInfluences;\r\n\r\n this._needUpdateInfluences = false;\r\n this._influencesAreDirty = false;\r\n\r\n const wasUsingTextureForTargets = !!this._targetStoreTexture;\r\n const isUsingTextureForTargets = this.isUsingTextureForTargets;\r\n\r\n if (this._mustSynchronize || wasUsingTextureForTargets !== isUsingTextureForTargets) {\r\n this._mustSynchronize = false;\r\n this.synchronize();\r\n }\r\n\r\n let influenceCount = 0;\r\n this._activeTargets.reset();\r\n\r\n if (!this._morphTargetTextureIndices || this._morphTargetTextureIndices.length !== this._targets.length) {\r\n this._morphTargetTextureIndices = new Float32Array(this._targets.length);\r\n }\r\n\r\n let targetIndex = -1;\r\n for (const target of this._targets) {\r\n targetIndex++;\r\n if (target.influence === 0 && this.optimizeInfluencers) {\r\n continue;\r\n }\r\n\r\n if (this._activeTargets.length >= MorphTargetManager.MaxActiveMorphTargetsInVertexAttributeMode && !this.isUsingTextureForTargets) {\r\n break;\r\n }\r\n\r\n this._activeTargets.push(target);\r\n this._morphTargetTextureIndices[influenceCount] = targetIndex;\r\n this._tempInfluences[influenceCount++] = target.influence;\r\n }\r\n\r\n if (this._morphTargetTextureIndices.length !== influenceCount) {\r\n this._morphTargetTextureIndices = this._morphTargetTextureIndices.slice(0, influenceCount);\r\n }\r\n\r\n if (!this._influences || this._influences.length !== influenceCount) {\r\n this._influences = new Float32Array(influenceCount);\r\n }\r\n\r\n for (let index = 0; index < influenceCount; index++) {\r\n this._influences[index] = this._tempInfluences[index];\r\n }\r\n\r\n if (needUpdate && this._scene) {\r\n for (const mesh of this._scene.meshes) {\r\n if ((<any>mesh).morphTargetManager === this) {\r\n if (isUsingTextureForTargets) {\r\n mesh._markSubMeshesAsAttributesDirty();\r\n } else {\r\n (<Mesh>mesh)._syncGeometryWithMorphTargetManager();\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Synchronize the targets with all the meshes using this morph target manager\r\n */\r\n public synchronize(): void {\r\n if (!this._scene || this.areUpdatesFrozen) {\r\n return;\r\n }\r\n\r\n const engine = this._scene.getEngine();\r\n\r\n this._supportsPositions = true;\r\n this._supportsNormals = true;\r\n this._supportsTangents = true;\r\n this._supportsUVs = true;\r\n this._supportsUV2s = true;\r\n this._supportsColors = true;\r\n this._vertexCount = 0;\r\n\r\n this._targetStoreTexture?.dispose();\r\n this._targetStoreTexture = null;\r\n\r\n if (this.isUsingTextureForTargets && this._targets.length > engine.getCaps().texture2DArrayMaxLayerCount) {\r\n this.useTextureToStoreTargets = false;\r\n }\r\n\r\n for (const target of this._targets) {\r\n this._supportsPositions = this._supportsPositions && target.hasPositions;\r\n this._supportsNormals = this._supportsNormals && target.hasNormals;\r\n this._supportsTangents = this._supportsTangents && target.hasTangents;\r\n this._supportsUVs = this._supportsUVs && target.hasUVs;\r\n this._supportsUV2s = this._supportsUV2s && target.hasUV2s;\r\n this._supportsColors = this._supportsColors && target.hasColors;\r\n\r\n const vertexCount = target.vertexCount;\r\n if (this._vertexCount === 0) {\r\n this._vertexCount = vertexCount;\r\n } else if (this._vertexCount !== vertexCount) {\r\n Logger.Error(\r\n `Incompatible target. Targets must all have the same vertices count. Current vertex count: ${this._vertexCount}, vertex count for target \"${target.name}\": ${vertexCount}`\r\n );\r\n return;\r\n }\r\n }\r\n\r\n if (this.isUsingTextureForTargets) {\r\n this._textureVertexStride = 0;\r\n\r\n this._supportsPositions && this._textureVertexStride++;\r\n this._supportsNormals && this._textureVertexStride++;\r\n this._supportsTangents && this._textureVertexStride++;\r\n this._supportsUVs && this._textureVertexStride++;\r\n this._supportsUV2s && this._textureVertexStride++;\r\n this._supportsColors && this._textureVertexStride++;\r\n\r\n this._textureWidth = this._vertexCount * this._textureVertexStride || 1;\r\n this._textureHeight = 1;\r\n\r\n const maxTextureSize = engine.getCaps().maxTextureSize;\r\n if (this._textureWidth > maxTextureSize) {\r\n this._textureHeight = Math.ceil(this._textureWidth / maxTextureSize);\r\n this._textureWidth = maxTextureSize;\r\n }\r\n\r\n const targetCount = this._targets.length;\r\n const data = new Float32Array(targetCount * this._textureWidth * this._textureHeight * 4);\r\n\r\n let offset = 0;\r\n for (let index = 0; index < targetCount; index++) {\r\n const target = this._targets[index];\r\n\r\n const positions = target.getPositions();\r\n const normals = target.getNormals();\r\n const uvs = target.getUVs();\r\n const tangents = target.getTangents();\r\n const uv2s = target.getUV2s();\r\n const colors = target.getColors();\r\n\r\n offset = index * this._textureWidth * this._textureHeight * 4;\r\n for (let vertex = 0; vertex < this._vertexCount; vertex++) {\r\n if (this._supportsPositions && positions) {\r\n data[offset] = positions[vertex * 3];\r\n data[offset + 1] = positions[vertex * 3 + 1];\r\n data[offset + 2] = positions[vertex * 3 + 2];\r\n offset += 4;\r\n }\r\n\r\n if (this._supportsNormals && normals) {\r\n data[offset] = normals[vertex * 3];\r\n data[offset + 1] = normals[vertex * 3 + 1];\r\n data[offset + 2] = normals[vertex * 3 + 2];\r\n offset += 4;\r\n }\r\n\r\n if (this._supportsUVs && uvs) {\r\n data[offset] = uvs[vertex * 2];\r\n data[offset + 1] = uvs[vertex * 2 + 1];\r\n offset += 4;\r\n }\r\n\r\n if (this._supportsTangents && tangents) {\r\n data[offset] = tangents[vertex * 3];\r\n data[offset + 1] = tangents[vertex * 3 + 1];\r\n data[offset + 2] = tangents[vertex * 3 + 2];\r\n offset += 4;\r\n }\r\n\r\n if (this._supportsUV2s && uv2s) {\r\n data[offset] = uv2s[vertex * 2];\r\n data[offset + 1] = uv2s[vertex * 2 + 1];\r\n offset += 4;\r\n }\r\n\r\n if (this._supportsColors && colors) {\r\n data[offset] = colors[vertex * 4];\r\n data[offset + 1] = colors[vertex * 4 + 1];\r\n data[offset + 2] = colors[vertex * 4 + 2];\r\n data[offset + 3] = colors[vertex * 4 + 3];\r\n offset += 4;\r\n }\r\n }\r\n }\r\n\r\n this._targetStoreTexture = RawTexture2DArray.CreateRGBATexture(\r\n data,\r\n this._textureWidth,\r\n this._textureHeight,\r\n targetCount,\r\n this._scene,\r\n false,\r\n false,\r\n Constants.TEXTURE_NEAREST_SAMPLINGMODE,\r\n Constants.TEXTURETYPE_FLOAT\r\n );\r\n this._targetStoreTexture.name = `Morph texture_${this.uniqueId}`;\r\n }\r\n\r\n // Flag meshes as dirty to resync with the active targets\r\n for (const mesh of this._scene.meshes) {\r\n if ((<any>mesh).morphTargetManager === this) {\r\n (<Mesh>mesh)._syncGeometryWithMorphTargetManager();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Release all resources\r\n */\r\n public dispose() {\r\n if (this._targetStoreTexture) {\r\n this._targetStoreTexture.dispose();\r\n }\r\n\r\n this._targetStoreTexture = null;\r\n this.metadata = null;\r\n\r\n // Remove from scene\r\n if (this._scene) {\r\n this._scene.removeMorphTargetManager(this);\r\n\r\n if (this._parentContainer) {\r\n const index = this._parentContainer.morphTargetManagers.indexOf(this);\r\n if (index > -1) {\r\n this._parentContainer.morphTargetManagers.splice(index, 1);\r\n }\r\n this._parentContainer = null;\r\n }\r\n\r\n for (const morph of this._targets) {\r\n this._scene.stopAnimation(morph);\r\n }\r\n }\r\n }\r\n\r\n // Statics\r\n\r\n /**\r\n * Creates a new MorphTargetManager from serialized data\r\n * @param serializationObject defines the serialized data\r\n * @param scene defines the hosting scene\r\n * @returns the new MorphTargetManager\r\n */\r\n public static Parse(serializationObject: any, scene: Scene): MorphTargetManager {\r\n const result = new MorphTargetManager(scene);\r\n\r\n for (const targetData of serializationObject.targets) {\r\n result.addTarget(MorphTarget.Parse(targetData, scene));\r\n }\r\n\r\n if (serializationObject.metadata) {\r\n result.metadata = serializationObject.metadata;\r\n }\r\n\r\n return result;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"morphTargetManager.js","sourceRoot":"","sources":["../../../../dev/core/src/Morph/morphTargetManager.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Observer } from \"../Misc/observable\";\r\nimport { SmartArray } from \"../Misc/smartArray\";\r\nimport { Logger } from \"../Misc/logger\";\r\nimport type { Nullable } from \"../types\";\r\nimport type { IDisposable, Scene } from \"../scene\";\r\nimport { EngineStore } from \"../Engines/engineStore\";\r\nimport type { Mesh } from \"../Meshes/mesh\";\r\nimport { MorphTarget } from \"./morphTarget\";\r\nimport { Constants } from \"../Engines/constants\";\r\nimport type { Effect } from \"../Materials/effect\";\r\nimport { RawTexture2DArray } from \"../Materials/Textures/rawTexture2DArray\";\r\nimport type { IAssetContainer } from \"core/IAssetContainer\";\r\n/**\r\n * This class is used to deform meshes using morphing between different targets\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/mesh/morphTargets\r\n */\r\nexport class MorphTargetManager implements IDisposable {\r\n /** Enable storing morph target data into textures when set to true (true by default) */\r\n public static EnableTextureStorage = true;\r\n\r\n /** Maximum number of active morph targets supported in the \"vertex attribute\" mode (i.e., not the \"texture\" mode) */\r\n public static MaxActiveMorphTargetsInVertexAttributeMode = 8;\r\n\r\n /**\r\n * When used in texture mode, if greather than 0, this will override the the morph manager numMaxInfluencers value.\r\n */\r\n public static ConstantTargetCountForTextureMode = 0;\r\n\r\n private _targets = new Array<MorphTarget>();\r\n private _targetInfluenceChangedObservers = new Array<Nullable<Observer<boolean>>>();\r\n private _targetDataLayoutChangedObservers = new Array<Nullable<Observer<void>>>();\r\n private _activeTargets = new SmartArray<MorphTarget>(16);\r\n private _scene: Nullable<Scene>;\r\n private _influences: Float32Array;\r\n private _supportsPositions = false;\r\n private _supportsNormals = false;\r\n private _supportsTangents = false;\r\n private _supportsUVs = false;\r\n private _supportsUV2s = false;\r\n private _supportsColors = false;\r\n private _vertexCount = 0;\r\n private _uniqueId = 0;\r\n private _tempInfluences = new Array<number>();\r\n private _canUseTextureForTargets = false;\r\n private _blockCounter = 0;\r\n private _mustSynchronize = true;\r\n private _forceUpdateWhenUnfrozen = false;\r\n\r\n /** @internal */\r\n public _textureVertexStride = 0;\r\n\r\n /** @internal */\r\n public _textureWidth = 0;\r\n\r\n /** @internal */\r\n public _textureHeight = 1;\r\n\r\n /** @internal */\r\n public _morphTargetTextureIndices: Float32Array;\r\n\r\n /** @internal */\r\n public _parentContainer: Nullable<IAssetContainer> = null;\r\n\r\n /** @internal */\r\n public _targetStoreTexture: Nullable<RawTexture2DArray>;\r\n\r\n /**\r\n * Gets or sets a boolean indicating if influencers must be optimized (eg. recompiling the shader if less influencers are used)\r\n */\r\n public optimizeInfluencers = true;\r\n\r\n /**\r\n * Gets or sets a boolean indicating if positions must be morphed\r\n */\r\n public enablePositionMorphing = true;\r\n\r\n /**\r\n * Gets or sets a boolean indicating if normals must be morphed\r\n */\r\n public enableNormalMorphing = true;\r\n\r\n /**\r\n * Gets or sets a boolean indicating if tangents must be morphed\r\n */\r\n public enableTangentMorphing = true;\r\n\r\n /**\r\n * Gets or sets a boolean indicating if UV must be morphed\r\n */\r\n public enableUVMorphing = true;\r\n\r\n /**\r\n * Gets or sets a boolean indicating if UV2 must be morphed\r\n */\r\n public enableUV2Morphing = true;\r\n\r\n /**\r\n * Gets or sets a boolean indicating if colors must be morphed\r\n */\r\n public enableColorMorphing = true;\r\n\r\n /**\r\n * Sets a boolean indicating that adding new target or updating an existing target will not update the underlying data buffers\r\n */\r\n public set areUpdatesFrozen(block: boolean) {\r\n if (block) {\r\n this._blockCounter++;\r\n } else {\r\n this._blockCounter--;\r\n if (this._blockCounter <= 0) {\r\n this._blockCounter = 0;\r\n\r\n this._syncActiveTargets(this._forceUpdateWhenUnfrozen);\r\n this._forceUpdateWhenUnfrozen = false;\r\n }\r\n }\r\n }\r\n\r\n public get areUpdatesFrozen() {\r\n return this._blockCounter > 0;\r\n }\r\n\r\n /**\r\n * Creates a new MorphTargetManager\r\n * @param scene defines the current scene\r\n * @param meshName name of the mesh this morph target manager is associated with\r\n */\r\n public constructor(\r\n scene: Nullable<Scene> = null,\r\n public meshName?: string\r\n ) {\r\n if (!scene) {\r\n scene = EngineStore.LastCreatedScene;\r\n }\r\n\r\n this._scene = scene;\r\n\r\n if (this._scene) {\r\n this._scene.addMorphTargetManager(this);\r\n\r\n this._uniqueId = this._scene.getUniqueId();\r\n\r\n const engineCaps = this._scene.getEngine().getCaps();\r\n this._canUseTextureForTargets =\r\n engineCaps.canUseGLVertexID && engineCaps.textureFloat && engineCaps.maxVertexTextureImageUnits > 0 && engineCaps.texture2DArrayMaxLayerCount > 1;\r\n }\r\n }\r\n\r\n private _numMaxInfluencers = 0;\r\n\r\n /**\r\n * Gets or sets the maximum number of influencers (targets) (default value: 0).\r\n * Setting a value for this property can lead to a smoother experience, as only one shader will be compiled, which will use this value as the maximum number of influencers.\r\n * If you leave the value at 0 (default), a new shader will be compiled every time the number of active influencers changes. This can cause problems, as compiling a shader takes time.\r\n * If you assign a non-zero value to this property, you need to ensure that this value is greater than the maximum number of (active) influencers you'll need for this morph manager.\r\n * Otherwise, the number of active influencers will be truncated at the value you set for this property, which can lead to unexpected results.\r\n * Note that this property has no effect if \"useTextureToStoreTargets\" is false.\r\n * Note as well that if MorphTargetManager.ConstantTargetCountForTextureMode is greater than 0, this property will be ignored and the constant value will be used instead.\r\n */\r\n public get numMaxInfluencers(): number {\r\n if (MorphTargetManager.ConstantTargetCountForTextureMode > 0 && this.isUsingTextureForTargets) {\r\n return MorphTargetManager.ConstantTargetCountForTextureMode;\r\n }\r\n return this._numMaxInfluencers;\r\n }\r\n\r\n public set numMaxInfluencers(value: number) {\r\n if (this._numMaxInfluencers === value) {\r\n return;\r\n }\r\n\r\n this._numMaxInfluencers = value;\r\n this._mustSynchronize = true;\r\n this._syncActiveTargets();\r\n }\r\n\r\n /**\r\n * Gets the unique ID of this manager\r\n */\r\n public get uniqueId(): number {\r\n return this._uniqueId;\r\n }\r\n\r\n /**\r\n * Gets the number of vertices handled by this manager\r\n */\r\n public get vertexCount(): number {\r\n return this._vertexCount;\r\n }\r\n\r\n /**\r\n * Gets a boolean indicating if this manager supports morphing of positions\r\n */\r\n public get supportsPositions(): boolean {\r\n return this._supportsPositions && this.enablePositionMorphing;\r\n }\r\n\r\n /**\r\n * Gets a boolean indicating if this manager supports morphing of normals\r\n */\r\n public get supportsNormals(): boolean {\r\n return this._supportsNormals && this.enableNormalMorphing;\r\n }\r\n\r\n /**\r\n * Gets a boolean indicating if this manager supports morphing of tangents\r\n */\r\n public get supportsTangents(): boolean {\r\n return this._supportsTangents && this.enableTangentMorphing;\r\n }\r\n\r\n /**\r\n * Gets a boolean indicating if this manager supports morphing of texture coordinates\r\n */\r\n public get supportsUVs(): boolean {\r\n return this._supportsUVs && this.enableUVMorphing;\r\n }\r\n\r\n /**\r\n * Gets a boolean indicating if this manager supports morphing of texture coordinates 2\r\n */\r\n public get supportsUV2s(): boolean {\r\n return this._supportsUV2s && this.enableUV2Morphing;\r\n }\r\n\r\n /**\r\n * Gets a boolean indicating if this manager supports morphing of colors\r\n */\r\n public get supportsColors(): boolean {\r\n return this._supportsColors && this.enableColorMorphing;\r\n }\r\n\r\n /**\r\n * Gets a boolean indicating if this manager has data for morphing positions\r\n */\r\n public get hasPositions(): boolean {\r\n return this._supportsPositions;\r\n }\r\n\r\n /**\r\n * Gets a boolean indicating if this manager has data for morphing normals\r\n */\r\n public get hasNormals(): boolean {\r\n return this._supportsNormals;\r\n }\r\n\r\n /**\r\n * Gets a boolean indicating if this manager has data for morphing tangents\r\n */\r\n public get hasTangents(): boolean {\r\n return this._supportsTangents;\r\n }\r\n\r\n /**\r\n * Gets a boolean indicating if this manager has data for morphing texture coordinates\r\n */\r\n public get hasUVs(): boolean {\r\n return this._supportsUVs;\r\n }\r\n\r\n /**\r\n * Gets a boolean indicating if this manager has data for morphing texture coordinates 2\r\n */\r\n public get hasUV2s(): boolean {\r\n return this._supportsUV2s;\r\n }\r\n\r\n /**\r\n * Gets a boolean indicating if this manager has data for morphing colors\r\n */\r\n public get hasColors(): boolean {\r\n return this._supportsColors;\r\n }\r\n\r\n /**\r\n * Gets the number of targets stored in this manager\r\n */\r\n public get numTargets(): number {\r\n return this._targets.length;\r\n }\r\n\r\n /**\r\n * Gets the number of influencers (ie. the number of targets with influences > 0)\r\n */\r\n public get numInfluencers(): number {\r\n if (this._influencesAreDirty) {\r\n this._syncActiveTargets();\r\n }\r\n return this._activeTargets.length;\r\n }\r\n\r\n /**\r\n * Gets the list of influences (one per target)\r\n */\r\n public get influences(): Float32Array {\r\n if (this._influencesAreDirty) {\r\n this._syncActiveTargets();\r\n }\r\n return this._influences;\r\n }\r\n\r\n private _useTextureToStoreTargets = true;\r\n /**\r\n * Gets or sets a boolean indicating that targets should be stored as a texture instead of using vertex attributes (default is true).\r\n * Please note that this option is not available if the hardware does not support it\r\n */\r\n public get useTextureToStoreTargets(): boolean {\r\n return this._useTextureToStoreTargets;\r\n }\r\n\r\n public set useTextureToStoreTargets(value: boolean) {\r\n if (this._useTextureToStoreTargets === value) {\r\n return;\r\n }\r\n this._useTextureToStoreTargets = value;\r\n this._mustSynchronize = true;\r\n this._syncActiveTargets();\r\n }\r\n\r\n /**\r\n * Gets a boolean indicating that the targets are stored into a texture (instead of as attributes)\r\n */\r\n public get isUsingTextureForTargets() {\r\n return (\r\n MorphTargetManager.EnableTextureStorage &&\r\n this.useTextureToStoreTargets &&\r\n this._canUseTextureForTargets &&\r\n !this._scene?.getEngine().getCaps().disableMorphTargetTexture\r\n );\r\n }\r\n\r\n /**\r\n * Gets or sets an object used to store user defined information for the MorphTargetManager\r\n */\r\n public metadata: any = null;\r\n\r\n /**\r\n * Gets the active target at specified index. An active target is a target with an influence > 0\r\n * @param index defines the index to check\r\n * @returns the requested target\r\n */\r\n public getActiveTarget(index: number): MorphTarget {\r\n if (this._influencesAreDirty) {\r\n this._syncActiveTargets();\r\n }\r\n return this._activeTargets.data[index];\r\n }\r\n\r\n /**\r\n * Gets the target at specified index\r\n * @param index defines the index to check\r\n * @returns the requested target\r\n */\r\n public getTarget(index: number): MorphTarget {\r\n return this._targets[index];\r\n }\r\n\r\n /**\r\n * Gets the first target with the specified name\r\n * @param name defines the name to check\r\n * @returns the requested target\r\n */\r\n public getTargetByName(name: string): Nullable<MorphTarget> {\r\n for (const target of this._targets) {\r\n if (target.name === name) {\r\n return target;\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private _influencesAreDirty = false;\r\n private _needUpdateInfluences = false;\r\n\r\n /**\r\n * Add a new target to this manager\r\n * @param target defines the target to add\r\n */\r\n public addTarget(target: MorphTarget): void {\r\n this._targets.push(target);\r\n this._targetInfluenceChangedObservers.push(\r\n target.onInfluenceChanged.add((needUpdate) => {\r\n if (this.areUpdatesFrozen && needUpdate) {\r\n this._forceUpdateWhenUnfrozen = true;\r\n }\r\n this._influencesAreDirty = true;\r\n this._needUpdateInfluences = this._needUpdateInfluences || needUpdate;\r\n })\r\n );\r\n this._targetDataLayoutChangedObservers.push(\r\n target._onDataLayoutChanged.add(() => {\r\n this._mustSynchronize = true;\r\n this._syncActiveTargets();\r\n })\r\n );\r\n this._mustSynchronize = true;\r\n this._syncActiveTargets();\r\n }\r\n\r\n /**\r\n * Removes a target from the manager\r\n * @param target defines the target to remove\r\n */\r\n public removeTarget(target: MorphTarget): void {\r\n const index = this._targets.indexOf(target);\r\n if (index >= 0) {\r\n this._targets.splice(index, 1);\r\n\r\n target.onInfluenceChanged.remove(this._targetInfluenceChangedObservers.splice(index, 1)[0]);\r\n target._onDataLayoutChanged.remove(this._targetDataLayoutChangedObservers.splice(index, 1)[0]);\r\n this._mustSynchronize = true;\r\n this._syncActiveTargets();\r\n }\r\n\r\n if (this._scene) {\r\n this._scene.stopAnimation(target);\r\n }\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _bind(effect: Effect) {\r\n if (this._influencesAreDirty) {\r\n this._syncActiveTargets();\r\n }\r\n effect.setFloat3(\"morphTargetTextureInfo\", this._textureVertexStride, this._textureWidth, this._textureHeight);\r\n effect.setFloatArray(\"morphTargetTextureIndices\", this._morphTargetTextureIndices);\r\n effect.setTexture(\"morphTargets\", this._targetStoreTexture);\r\n effect.setFloat(\"morphTargetCount\", this.numInfluencers);\r\n }\r\n\r\n /**\r\n * Clone the current manager\r\n * @returns a new MorphTargetManager\r\n */\r\n public clone(): MorphTargetManager {\r\n const copy = new MorphTargetManager(this._scene);\r\n copy.areUpdatesFrozen = true;\r\n\r\n for (const target of this._targets) {\r\n copy.addTarget(target.clone());\r\n }\r\n copy.areUpdatesFrozen = false;\r\n\r\n copy.enablePositionMorphing = this.enablePositionMorphing;\r\n copy.enableNormalMorphing = this.enableNormalMorphing;\r\n copy.enableTangentMorphing = this.enableTangentMorphing;\r\n copy.enableUVMorphing = this.enableUVMorphing;\r\n copy.enableUV2Morphing = this.enableUV2Morphing;\r\n copy.enableColorMorphing = this.enableColorMorphing;\r\n copy.metadata = this.metadata;\r\n\r\n return copy;\r\n }\r\n\r\n /**\r\n * Serializes the current manager into a Serialization object\r\n * @returns the serialized object\r\n */\r\n public serialize(): any {\r\n const serializationObject: any = {};\r\n\r\n serializationObject.id = this.uniqueId;\r\n serializationObject.meshName = this.meshName;\r\n\r\n serializationObject.targets = [];\r\n for (const target of this._targets) {\r\n serializationObject.targets.push(target.serialize());\r\n }\r\n\r\n if (this.metadata) {\r\n serializationObject.metadata = this.metadata;\r\n }\r\n\r\n return serializationObject;\r\n }\r\n\r\n private _syncActiveTargets(needUpdate = false): void {\r\n if (this.areUpdatesFrozen) {\r\n return;\r\n }\r\n\r\n needUpdate = needUpdate || this._needUpdateInfluences;\r\n\r\n this._needUpdateInfluences = false;\r\n this._influencesAreDirty = false;\r\n\r\n const wasUsingTextureForTargets = !!this._targetStoreTexture;\r\n const isUsingTextureForTargets = this.isUsingTextureForTargets;\r\n\r\n if (this._mustSynchronize || wasUsingTextureForTargets !== isUsingTextureForTargets) {\r\n this._mustSynchronize = false;\r\n this.synchronize();\r\n }\r\n\r\n let influenceCount = 0;\r\n this._activeTargets.reset();\r\n\r\n if (!this._morphTargetTextureIndices || this._morphTargetTextureIndices.length !== this._targets.length) {\r\n this._morphTargetTextureIndices = new Float32Array(this._targets.length);\r\n }\r\n\r\n let targetIndex = -1;\r\n for (const target of this._targets) {\r\n targetIndex++;\r\n if (target.influence === 0 && this.optimizeInfluencers) {\r\n continue;\r\n }\r\n\r\n if (this._activeTargets.length >= MorphTargetManager.MaxActiveMorphTargetsInVertexAttributeMode && !this.isUsingTextureForTargets) {\r\n break;\r\n }\r\n\r\n this._activeTargets.push(target);\r\n this._morphTargetTextureIndices[influenceCount] = targetIndex;\r\n this._tempInfluences[influenceCount++] = target.influence;\r\n }\r\n\r\n if (this._morphTargetTextureIndices.length !== influenceCount) {\r\n this._morphTargetTextureIndices = this._morphTargetTextureIndices.slice(0, influenceCount);\r\n }\r\n\r\n if (!this._influences || this._influences.length !== influenceCount) {\r\n this._influences = new Float32Array(influenceCount);\r\n }\r\n\r\n for (let index = 0; index < influenceCount; index++) {\r\n this._influences[index] = this._tempInfluences[index];\r\n }\r\n\r\n if (needUpdate && this._scene) {\r\n for (const mesh of this._scene.meshes) {\r\n if ((<any>mesh).morphTargetManager === this) {\r\n if (isUsingTextureForTargets) {\r\n mesh._markSubMeshesAsAttributesDirty();\r\n } else {\r\n (<Mesh>mesh)._syncGeometryWithMorphTargetManager();\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Synchronize the targets with all the meshes using this morph target manager\r\n */\r\n public synchronize(): void {\r\n if (!this._scene || this.areUpdatesFrozen) {\r\n return;\r\n }\r\n\r\n const engine = this._scene.getEngine();\r\n\r\n this._supportsPositions = true;\r\n this._supportsNormals = true;\r\n this._supportsTangents = true;\r\n this._supportsUVs = true;\r\n this._supportsUV2s = true;\r\n this._supportsColors = true;\r\n this._vertexCount = 0;\r\n\r\n this._targetStoreTexture?.dispose();\r\n this._targetStoreTexture = null;\r\n\r\n if (this.isUsingTextureForTargets && this._targets.length > engine.getCaps().texture2DArrayMaxLayerCount) {\r\n this.useTextureToStoreTargets = false;\r\n }\r\n\r\n for (const target of this._targets) {\r\n this._supportsPositions = this._supportsPositions && target.hasPositions;\r\n this._supportsNormals = this._supportsNormals && target.hasNormals;\r\n this._supportsTangents = this._supportsTangents && target.hasTangents;\r\n this._supportsUVs = this._supportsUVs && target.hasUVs;\r\n this._supportsUV2s = this._supportsUV2s && target.hasUV2s;\r\n this._supportsColors = this._supportsColors && target.hasColors;\r\n\r\n const vertexCount = target.vertexCount;\r\n if (this._vertexCount === 0) {\r\n this._vertexCount = vertexCount;\r\n } else if (this._vertexCount !== vertexCount) {\r\n Logger.Error(\r\n `Incompatible target. Targets must all have the same vertices count. Current vertex count: ${this._vertexCount}, vertex count for target \"${target.name}\": ${vertexCount}`\r\n );\r\n return;\r\n }\r\n }\r\n\r\n if (this.isUsingTextureForTargets) {\r\n this._textureVertexStride = 0;\r\n\r\n this._supportsPositions && this._textureVertexStride++;\r\n this._supportsNormals && this._textureVertexStride++;\r\n this._supportsTangents && this._textureVertexStride++;\r\n this._supportsUVs && this._textureVertexStride++;\r\n this._supportsUV2s && this._textureVertexStride++;\r\n this._supportsColors && this._textureVertexStride++;\r\n\r\n this._textureWidth = this._vertexCount * this._textureVertexStride || 1;\r\n this._textureHeight = 1;\r\n\r\n const maxTextureSize = engine.getCaps().maxTextureSize;\r\n if (this._textureWidth > maxTextureSize) {\r\n this._textureHeight = Math.ceil(this._textureWidth / maxTextureSize);\r\n this._textureWidth = maxTextureSize;\r\n }\r\n\r\n const targetCount = this._targets.length;\r\n const data = new Float32Array(targetCount * this._textureWidth * this._textureHeight * 4);\r\n\r\n let offset = 0;\r\n for (let index = 0; index < targetCount; index++) {\r\n const target = this._targets[index];\r\n\r\n const positions = target.getPositions();\r\n const normals = target.getNormals();\r\n const uvs = target.getUVs();\r\n const tangents = target.getTangents();\r\n const uv2s = target.getUV2s();\r\n const colors = target.getColors();\r\n\r\n offset = index * this._textureWidth * this._textureHeight * 4;\r\n for (let vertex = 0; vertex < this._vertexCount; vertex++) {\r\n if (this._supportsPositions && positions) {\r\n data[offset] = positions[vertex * 3];\r\n data[offset + 1] = positions[vertex * 3 + 1];\r\n data[offset + 2] = positions[vertex * 3 + 2];\r\n offset += 4;\r\n }\r\n\r\n if (this._supportsNormals && normals) {\r\n data[offset] = normals[vertex * 3];\r\n data[offset + 1] = normals[vertex * 3 + 1];\r\n data[offset + 2] = normals[vertex * 3 + 2];\r\n offset += 4;\r\n }\r\n\r\n if (this._supportsUVs && uvs) {\r\n data[offset] = uvs[vertex * 2];\r\n data[offset + 1] = uvs[vertex * 2 + 1];\r\n offset += 4;\r\n }\r\n\r\n if (this._supportsTangents && tangents) {\r\n data[offset] = tangents[vertex * 3];\r\n data[offset + 1] = tangents[vertex * 3 + 1];\r\n data[offset + 2] = tangents[vertex * 3 + 2];\r\n offset += 4;\r\n }\r\n\r\n if (this._supportsUV2s && uv2s) {\r\n data[offset] = uv2s[vertex * 2];\r\n data[offset + 1] = uv2s[vertex * 2 + 1];\r\n offset += 4;\r\n }\r\n\r\n if (this._supportsColors && colors) {\r\n data[offset] = colors[vertex * 4];\r\n data[offset + 1] = colors[vertex * 4 + 1];\r\n data[offset + 2] = colors[vertex * 4 + 2];\r\n data[offset + 3] = colors[vertex * 4 + 3];\r\n offset += 4;\r\n }\r\n }\r\n }\r\n\r\n this._targetStoreTexture = RawTexture2DArray.CreateRGBATexture(\r\n data,\r\n this._textureWidth,\r\n this._textureHeight,\r\n targetCount,\r\n this._scene,\r\n false,\r\n false,\r\n Constants.TEXTURE_NEAREST_SAMPLINGMODE,\r\n Constants.TEXTURETYPE_FLOAT\r\n );\r\n this._targetStoreTexture.name = `Morph texture_${this.uniqueId}`;\r\n }\r\n\r\n // Flag meshes as dirty to resync with the active targets\r\n for (const mesh of this._scene.meshes) {\r\n if ((<any>mesh).morphTargetManager === this) {\r\n (<Mesh>mesh)._syncGeometryWithMorphTargetManager();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Release all resources\r\n */\r\n public dispose() {\r\n if (this._targetStoreTexture) {\r\n this._targetStoreTexture.dispose();\r\n }\r\n\r\n this._targetStoreTexture = null;\r\n this.metadata = null;\r\n\r\n // Remove from scene\r\n if (this._scene) {\r\n this._scene.removeMorphTargetManager(this);\r\n\r\n if (this._parentContainer) {\r\n const index = this._parentContainer.morphTargetManagers.indexOf(this);\r\n if (index > -1) {\r\n this._parentContainer.morphTargetManagers.splice(index, 1);\r\n }\r\n this._parentContainer = null;\r\n }\r\n\r\n for (const morph of this._targets) {\r\n this._scene.stopAnimation(morph);\r\n }\r\n }\r\n }\r\n\r\n // Statics\r\n\r\n /**\r\n * Creates a new MorphTargetManager from serialized data\r\n * @param serializationObject defines the serialized data\r\n * @param scene defines the hosting scene\r\n * @returns the new MorphTargetManager\r\n */\r\n public static Parse(serializationObject: any, scene: Scene): MorphTargetManager {\r\n const result = new MorphTargetManager(scene);\r\n\r\n for (const targetData of serializationObject.targets) {\r\n result.addTarget(MorphTarget.Parse(targetData, scene, result));\r\n }\r\n\r\n if (serializationObject.metadata) {\r\n result.metadata = serializationObject.metadata;\r\n }\r\n\r\n return result;\r\n }\r\n}\r\n"]}
@@ -84,7 +84,7 @@ export class BoxShapeBlock extends NodeParticleBlock {
84
84
  else {
85
85
  Vector3.TransformNormalFromFloatsToRef(randX, randY, randZ, state.emitterWorldMatrix, particle.direction);
86
86
  }
87
- particle._initialDirection = particle.direction.clone();
87
+ particle._properties.initialDirection = particle.direction.clone();
88
88
  };
89
89
  system._positionCreation.process = (particle) => {
90
90
  state.particleContext = particle;