@onerjs/core 8.53.5 → 8.53.7

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 (841) hide show
  1. package/Animations/animationGroup.d.ts +0 -1
  2. package/Animations/animationGroup.js +0 -1
  3. package/Animations/animationGroup.js.map +1 -1
  4. package/Animations/animationGroup.pure.js +2 -0
  5. package/Animations/animationGroup.pure.js.map +1 -1
  6. package/Animations/runtimeAnimation.js +11 -0
  7. package/Animations/runtimeAnimation.js.map +1 -1
  8. package/Audio/audioSceneComponent.pure.js +1 -1
  9. package/AudioV2/abstractAudio/abstractSound.d.ts +2 -1
  10. package/AudioV2/abstractAudio/abstractSound.js +7 -2
  11. package/AudioV2/abstractAudio/abstractSound.js.map +1 -1
  12. package/AudioV2/abstractAudio/abstractSoundInstance.d.ts +3 -1
  13. package/AudioV2/abstractAudio/abstractSoundInstance.js.map +1 -1
  14. package/AudioV2/abstractAudio/staticSound.d.ts +6 -0
  15. package/AudioV2/abstractAudio/staticSound.js +17 -1
  16. package/AudioV2/abstractAudio/staticSound.js.map +1 -1
  17. package/AudioV2/abstractAudio/staticSoundInstance.d.ts +4 -2
  18. package/AudioV2/abstractAudio/staticSoundInstance.js.map +1 -1
  19. package/AudioV2/abstractAudio/streamingSound.d.ts +6 -0
  20. package/AudioV2/abstractAudio/streamingSound.js +9 -1
  21. package/AudioV2/abstractAudio/streamingSound.js.map +1 -1
  22. package/AudioV2/webAudio/webAudioStaticSound.d.ts +7 -1
  23. package/AudioV2/webAudio/webAudioStaticSound.js +56 -8
  24. package/AudioV2/webAudio/webAudioStaticSound.js.map +1 -1
  25. package/AudioV2/webAudio/webAudioStreamingSound.d.ts +3 -1
  26. package/AudioV2/webAudio/webAudioStreamingSound.js +16 -4
  27. package/AudioV2/webAudio/webAudioStreamingSound.js.map +1 -1
  28. package/BakedVertexAnimation/bakedVertexAnimationManager.d.ts +2 -2
  29. package/BakedVertexAnimation/bakedVertexAnimationManager.js +151 -121
  30. package/BakedVertexAnimation/bakedVertexAnimationManager.js.map +1 -1
  31. package/Behaviors/Cameras/interpolatingBehavior.d.ts +17 -2
  32. package/Behaviors/Cameras/interpolatingBehavior.js +53 -23
  33. package/Behaviors/Cameras/interpolatingBehavior.js.map +1 -1
  34. package/Bones/bone.pure.js +3 -3
  35. package/Buffers/buffer.pure.js +0 -12
  36. package/Buffers/buffer.pure.js.map +1 -1
  37. package/Cameras/Inputs/BaseCameraMouseWheelInput.js +141 -126
  38. package/Cameras/Inputs/BaseCameraMouseWheelInput.js.map +1 -1
  39. package/Cameras/Inputs/BaseCameraPointersInput.d.ts +2 -1
  40. package/Cameras/Inputs/BaseCameraPointersInput.js +290 -277
  41. package/Cameras/Inputs/BaseCameraPointersInput.js.map +1 -1
  42. package/Cameras/Inputs/arcRotateCameraGamepadInput.js +115 -102
  43. package/Cameras/Inputs/arcRotateCameraGamepadInput.js.map +1 -1
  44. package/Cameras/Inputs/arcRotateCameraKeyboardMoveInput.d.ts +3 -0
  45. package/Cameras/Inputs/arcRotateCameraKeyboardMoveInput.js +334 -273
  46. package/Cameras/Inputs/arcRotateCameraKeyboardMoveInput.js.map +1 -1
  47. package/Cameras/Inputs/arcRotateCameraMouseWheelInput.js +273 -258
  48. package/Cameras/Inputs/arcRotateCameraMouseWheelInput.js.map +1 -1
  49. package/Cameras/Inputs/arcRotateCameraPointersInput.js +237 -213
  50. package/Cameras/Inputs/arcRotateCameraPointersInput.js.map +1 -1
  51. package/Cameras/Inputs/flyCameraKeyboardInput.js +199 -168
  52. package/Cameras/Inputs/flyCameraKeyboardInput.js.map +1 -1
  53. package/Cameras/Inputs/flyCameraMouseInput.js +243 -229
  54. package/Cameras/Inputs/flyCameraMouseInput.js.map +1 -1
  55. package/Cameras/Inputs/followCameraKeyboardMoveInput.js +311 -266
  56. package/Cameras/Inputs/followCameraKeyboardMoveInput.js.map +1 -1
  57. package/Cameras/Inputs/followCameraMouseWheelInput.js +139 -119
  58. package/Cameras/Inputs/followCameraMouseWheelInput.js.map +1 -1
  59. package/Cameras/Inputs/followCameraPointersInput.js +239 -203
  60. package/Cameras/Inputs/followCameraPointersInput.js.map +1 -1
  61. package/Cameras/Inputs/freeCameraGamepadInput.js +127 -114
  62. package/Cameras/Inputs/freeCameraGamepadInput.js.map +1 -1
  63. package/Cameras/Inputs/freeCameraKeyboardMoveInput.js +278 -244
  64. package/Cameras/Inputs/freeCameraKeyboardMoveInput.js.map +1 -1
  65. package/Cameras/Inputs/freeCameraMouseInput.js +216 -202
  66. package/Cameras/Inputs/freeCameraMouseInput.js.map +1 -1
  67. package/Cameras/Inputs/freeCameraMouseWheelInput.js +368 -353
  68. package/Cameras/Inputs/freeCameraMouseWheelInput.js.map +1 -1
  69. package/Cameras/Inputs/freeCameraTouchInput.js +185 -172
  70. package/Cameras/Inputs/freeCameraTouchInput.js.map +1 -1
  71. package/Cameras/Inputs/geospatialCameraKeyboardInput.d.ts +2 -0
  72. package/Cameras/Inputs/geospatialCameraKeyboardInput.js +291 -246
  73. package/Cameras/Inputs/geospatialCameraKeyboardInput.js.map +1 -1
  74. package/Cameras/Inputs/geospatialCameraPointersInput.d.ts +11 -1
  75. package/Cameras/Inputs/geospatialCameraPointersInput.js +18 -2
  76. package/Cameras/Inputs/geospatialCameraPointersInput.js.map +1 -1
  77. package/Cameras/Inputs/orbitCameraPointersInput.js +112 -96
  78. package/Cameras/Inputs/orbitCameraPointersInput.js.map +1 -1
  79. package/Cameras/VR/vrExperienceHelper.d.ts +0 -2
  80. package/Cameras/VR/vrExperienceHelper.js +0 -2
  81. package/Cameras/VR/vrExperienceHelper.js.map +1 -1
  82. package/Cameras/VR/vrExperienceHelper.pure.js +5 -0
  83. package/Cameras/VR/vrExperienceHelper.pure.js.map +1 -1
  84. package/Cameras/arcRotateCamera.pure.js +1559 -1479
  85. package/Cameras/arcRotateCamera.pure.js.map +1 -1
  86. package/Cameras/camera.pure.js +1225 -1178
  87. package/Cameras/camera.pure.js.map +1 -1
  88. package/Cameras/flyCamera.pure.js +369 -351
  89. package/Cameras/flyCamera.pure.js.map +1 -1
  90. package/Cameras/followCamera.pure.js +229 -192
  91. package/Cameras/followCamera.pure.js.map +1 -1
  92. package/Cameras/freeCamera.pure.js +373 -351
  93. package/Cameras/freeCamera.pure.js.map +1 -1
  94. package/Cameras/geospatialCamera.pure.d.ts +30 -7
  95. package/Cameras/geospatialCamera.pure.js +502 -457
  96. package/Cameras/geospatialCamera.pure.js.map +1 -1
  97. package/Cameras/geospatialCameraMovement.js +2 -2
  98. package/Cameras/geospatialCameraMovement.js.map +1 -1
  99. package/Cameras/targetCamera.pure.d.ts +7 -0
  100. package/Cameras/targetCamera.pure.js +550 -509
  101. package/Cameras/targetCamera.pure.js.map +1 -1
  102. package/Cameras/universalCamera.pure.js +98 -85
  103. package/Cameras/universalCamera.pure.js.map +1 -1
  104. package/Collisions/gpuPicker.d.ts +111 -4
  105. package/Collisions/gpuPicker.js +696 -119
  106. package/Collisions/gpuPicker.js.map +1 -1
  107. package/Compute/computeShader.pure.js +372 -355
  108. package/Compute/computeShader.pure.js.map +1 -1
  109. package/Culling/Helper/transformFeedbackBoundingHelper.pure.js +2 -2
  110. package/Decorators/nodeDecorator.d.ts +11 -1
  111. package/Decorators/nodeDecorator.js +43 -6
  112. package/Decorators/nodeDecorator.js.map +1 -1
  113. package/Engines/AbstractEngine/abstractEngine.loadFile.pure.js +8 -0
  114. package/Engines/AbstractEngine/abstractEngine.loadFile.pure.js.map +1 -1
  115. package/Engines/Native/nativeHelpers.js +15 -0
  116. package/Engines/Native/nativeHelpers.js.map +1 -1
  117. package/Engines/Native/nativeInterfaces.d.ts +7 -2
  118. package/Engines/Native/nativeInterfaces.js.map +1 -1
  119. package/Engines/Native/nativeRenderTargetWrapper.d.ts +5 -0
  120. package/Engines/Native/nativeRenderTargetWrapper.js +35 -1
  121. package/Engines/Native/nativeRenderTargetWrapper.js.map +1 -1
  122. package/Engines/Processors/shaderProcessor.js +5 -3
  123. package/Engines/Processors/shaderProcessor.js.map +1 -1
  124. package/Engines/WebGPU/Extensions/engine.videoTexture.pure.js +16 -3
  125. package/Engines/WebGPU/Extensions/engine.videoTexture.pure.js.map +1 -1
  126. package/Engines/WebGPU/webgpuClearQuad.pure.js +7 -1
  127. package/Engines/WebGPU/webgpuClearQuad.pure.js.map +1 -1
  128. package/Engines/abstractEngine.functions.d.ts +8 -2
  129. package/Engines/abstractEngine.functions.js +12 -4
  130. package/Engines/abstractEngine.functions.js.map +1 -1
  131. package/Engines/abstractEngine.pure.d.ts +20 -1
  132. package/Engines/abstractEngine.pure.js +21 -134
  133. package/Engines/abstractEngine.pure.js.map +1 -1
  134. package/Engines/engine.d.ts +208 -0
  135. package/Engines/engine.pure.js +0 -15
  136. package/Engines/engine.pure.js.map +1 -1
  137. package/Engines/nullEngine.pure.d.ts +66 -0
  138. package/Engines/nullEngine.pure.js +97 -0
  139. package/Engines/nullEngine.pure.js.map +1 -1
  140. package/Engines/thinEngine.pure.d.ts +0 -13
  141. package/Engines/thinEngine.pure.js +4 -23
  142. package/Engines/thinEngine.pure.js.map +1 -1
  143. package/Engines/thinNativeEngine.d.ts +0 -1
  144. package/Engines/thinNativeEngine.js +0 -1
  145. package/Engines/thinNativeEngine.js.map +1 -1
  146. package/Engines/thinNativeEngine.pure.d.ts +27 -0
  147. package/Engines/thinNativeEngine.pure.js +383 -17
  148. package/Engines/thinNativeEngine.pure.js.map +1 -1
  149. package/Engines/webgpuEngine.d.ts +1 -0
  150. package/Engines/webgpuEngine.js +1 -0
  151. package/Engines/webgpuEngine.js.map +1 -1
  152. package/Engines/webgpuEngine.pure.d.ts +9 -0
  153. package/Engines/webgpuEngine.pure.js +7 -0
  154. package/Engines/webgpuEngine.pure.js.map +1 -1
  155. package/FlowGraph/flowGraph.js +9 -0
  156. package/FlowGraph/flowGraph.js.map +1 -1
  157. package/FlowGraph/flowGraphContext.js +597 -584
  158. package/FlowGraph/flowGraphContext.js.map +1 -1
  159. package/FlowGraph/flowGraphDataConnection.pure.d.ts +14 -0
  160. package/FlowGraph/flowGraphDataConnection.pure.js +38 -1
  161. package/FlowGraph/flowGraphDataConnection.pure.js.map +1 -1
  162. package/FlowGraph/serialization.d.ts +11 -0
  163. package/FlowGraph/serialization.js +11 -1
  164. package/FlowGraph/serialization.js.map +1 -1
  165. package/FrameGraph/Node/Blocks/Layers/glowLayerBlock.pure.js +182 -170
  166. package/FrameGraph/Node/Blocks/Layers/glowLayerBlock.pure.js.map +1 -1
  167. package/FrameGraph/Node/Blocks/Layers/highlightLayerBlock.pure.js +196 -184
  168. package/FrameGraph/Node/Blocks/Layers/highlightLayerBlock.pure.js.map +1 -1
  169. package/FrameGraph/Node/Blocks/Layers/selectionOutlineLayerBlock.pure.js +222 -210
  170. package/FrameGraph/Node/Blocks/Layers/selectionOutlineLayerBlock.pure.js.map +1 -1
  171. package/FrameGraph/Node/Blocks/PostProcesses/basePostProcessBlock.js +123 -111
  172. package/FrameGraph/Node/Blocks/PostProcesses/basePostProcessBlock.js.map +1 -1
  173. package/FrameGraph/Node/Blocks/PostProcesses/baseWithPropertiesPostProcessBlock.js +158 -146
  174. package/FrameGraph/Node/Blocks/PostProcesses/baseWithPropertiesPostProcessBlock.js.map +1 -1
  175. package/FrameGraph/Node/Blocks/PostProcesses/blackAndWhitePostProcessBlock.pure.js +63 -51
  176. package/FrameGraph/Node/Blocks/PostProcesses/blackAndWhitePostProcessBlock.pure.js.map +1 -1
  177. package/FrameGraph/Node/Blocks/PostProcesses/bloomPostProcessBlock.pure.js +122 -110
  178. package/FrameGraph/Node/Blocks/PostProcesses/bloomPostProcessBlock.pure.js.map +1 -1
  179. package/FrameGraph/Node/Blocks/PostProcesses/blurPostProcessBlock.pure.js +76 -64
  180. package/FrameGraph/Node/Blocks/PostProcesses/blurPostProcessBlock.pure.js.map +1 -1
  181. package/FrameGraph/Node/Blocks/PostProcesses/chromaticAberrationPostProcessBlock.pure.js +89 -77
  182. package/FrameGraph/Node/Blocks/PostProcesses/chromaticAberrationPostProcessBlock.pure.js.map +1 -1
  183. package/FrameGraph/Node/Blocks/PostProcesses/circleOfConfusionPostProcessBlock.pure.js +134 -122
  184. package/FrameGraph/Node/Blocks/PostProcesses/circleOfConfusionPostProcessBlock.pure.js.map +1 -1
  185. package/FrameGraph/Node/Blocks/PostProcesses/colorCorrectionPostProcessBlock.pure.js +58 -46
  186. package/FrameGraph/Node/Blocks/PostProcesses/colorCorrectionPostProcessBlock.pure.js.map +1 -1
  187. package/FrameGraph/Node/Blocks/PostProcesses/convolutionPostProcessBlock.pure.js +107 -95
  188. package/FrameGraph/Node/Blocks/PostProcesses/convolutionPostProcessBlock.pure.js.map +1 -1
  189. package/FrameGraph/Node/Blocks/PostProcesses/depthOfFieldPostProcessBlock.pure.js +181 -169
  190. package/FrameGraph/Node/Blocks/PostProcesses/depthOfFieldPostProcessBlock.pure.js.map +1 -1
  191. package/FrameGraph/Node/Blocks/PostProcesses/extractHighlightsPostProcessBlock.pure.js +63 -51
  192. package/FrameGraph/Node/Blocks/PostProcesses/extractHighlightsPostProcessBlock.pure.js.map +1 -1
  193. package/FrameGraph/Node/Blocks/PostProcesses/filterPostProcessBlock.pure.js +63 -51
  194. package/FrameGraph/Node/Blocks/PostProcesses/filterPostProcessBlock.pure.js.map +1 -1
  195. package/FrameGraph/Node/Blocks/PostProcesses/grainPostProcessBlock.pure.js +76 -64
  196. package/FrameGraph/Node/Blocks/PostProcesses/grainPostProcessBlock.pure.js.map +1 -1
  197. package/FrameGraph/Node/Blocks/PostProcesses/imageProcessingPostProcessBlock.pure.js +246 -234
  198. package/FrameGraph/Node/Blocks/PostProcesses/imageProcessingPostProcessBlock.pure.js.map +1 -1
  199. package/FrameGraph/Node/Blocks/PostProcesses/motionBlurPostProcessBlock.pure.js +108 -96
  200. package/FrameGraph/Node/Blocks/PostProcesses/motionBlurPostProcessBlock.pure.js.map +1 -1
  201. package/FrameGraph/Node/Blocks/PostProcesses/screenSpaceCurvaturePostProcessBlock.pure.js +87 -75
  202. package/FrameGraph/Node/Blocks/PostProcesses/screenSpaceCurvaturePostProcessBlock.pure.js.map +1 -1
  203. package/FrameGraph/Node/Blocks/PostProcesses/sharpenPostProcessBlock.pure.js +76 -64
  204. package/FrameGraph/Node/Blocks/PostProcesses/sharpenPostProcessBlock.pure.js.map +1 -1
  205. package/FrameGraph/Node/Blocks/PostProcesses/ssao2PostProcessBlock.pure.js +313 -301
  206. package/FrameGraph/Node/Blocks/PostProcesses/ssao2PostProcessBlock.pure.js.map +1 -1
  207. package/FrameGraph/Node/Blocks/PostProcesses/ssrPostProcessBlock.pure.js +502 -490
  208. package/FrameGraph/Node/Blocks/PostProcesses/ssrPostProcessBlock.pure.js.map +1 -1
  209. package/FrameGraph/Node/Blocks/PostProcesses/taaPostProcessBlock.pure.js +147 -135
  210. package/FrameGraph/Node/Blocks/PostProcesses/taaPostProcessBlock.pure.js.map +1 -1
  211. package/FrameGraph/Node/Blocks/PostProcesses/tonemapPostProcessBlock.pure.js +90 -78
  212. package/FrameGraph/Node/Blocks/PostProcesses/tonemapPostProcessBlock.pure.js.map +1 -1
  213. package/FrameGraph/Node/Blocks/PostProcesses/volumetricLightingBlock.pure.js +179 -167
  214. package/FrameGraph/Node/Blocks/PostProcesses/volumetricLightingBlock.pure.js.map +1 -1
  215. package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.js +462 -451
  216. package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.js.map +1 -1
  217. package/FrameGraph/Node/Blocks/Rendering/baseShadowGeneratorBlock.js +265 -253
  218. package/FrameGraph/Node/Blocks/Rendering/baseShadowGeneratorBlock.js.map +1 -1
  219. package/FrameGraph/Node/Blocks/Rendering/csmShadowGeneratorBlock.pure.js +204 -192
  220. package/FrameGraph/Node/Blocks/Rendering/csmShadowGeneratorBlock.pure.js.map +1 -1
  221. package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.pure.js +611 -550
  222. package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.pure.js.map +1 -1
  223. package/FrameGraph/Node/Blocks/Rendering/iblShadowsRendererBlock.pure.js +320 -308
  224. package/FrameGraph/Node/Blocks/Rendering/iblShadowsRendererBlock.pure.js.map +1 -1
  225. package/FrameGraph/Node/Blocks/Rendering/utilityLayerRendererBlock.pure.js +87 -75
  226. package/FrameGraph/Node/Blocks/Rendering/utilityLayerRendererBlock.pure.js.map +1 -1
  227. package/FrameGraph/Node/Blocks/Textures/clearBlock.pure.js +154 -142
  228. package/FrameGraph/Node/Blocks/Textures/clearBlock.pure.js.map +1 -1
  229. package/FrameGraph/Node/Blocks/Textures/copyTextureBlock.pure.js +150 -138
  230. package/FrameGraph/Node/Blocks/Textures/copyTextureBlock.pure.js.map +1 -1
  231. package/FrameGraph/Node/Blocks/inputBlock.pure.js +270 -256
  232. package/FrameGraph/Node/Blocks/inputBlock.pure.js.map +1 -1
  233. package/FrameGraph/Node/Blocks/lightingVolumeBlock.pure.js +95 -83
  234. package/FrameGraph/Node/Blocks/lightingVolumeBlock.pure.js.map +1 -1
  235. package/FrameGraph/Node/nodeRenderGraph.js +715 -693
  236. package/FrameGraph/Node/nodeRenderGraph.js.map +1 -1
  237. package/FrameGraph/Node/nodeRenderGraphBlock.js +548 -533
  238. package/FrameGraph/Node/nodeRenderGraphBlock.js.map +1 -1
  239. package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsAccumulationTask.d.ts +2 -2
  240. package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsAccumulationTask.js +43 -51
  241. package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsAccumulationTask.js.map +1 -1
  242. package/FrameGraph/Tasks/Rendering/iblShadowsRendererTask.d.ts +0 -1
  243. package/FrameGraph/Tasks/Rendering/iblShadowsRendererTask.js +0 -1
  244. package/FrameGraph/Tasks/Rendering/iblShadowsRendererTask.js.map +1 -1
  245. package/FrameGraph/Tasks/Rendering/iblShadowsRendererTask.pure.d.ts +0 -1
  246. package/FrameGraph/Tasks/Rendering/iblShadowsRendererTask.pure.js +66 -35
  247. package/FrameGraph/Tasks/Rendering/iblShadowsRendererTask.pure.js.map +1 -1
  248. package/Helpers/environmentHelper.js +2 -2
  249. package/Helpers/environmentHelper.js.map +1 -1
  250. package/Layers/effectLayer.js +529 -519
  251. package/Layers/effectLayer.js.map +1 -1
  252. package/Layers/glowLayer.pure.js +428 -413
  253. package/Layers/glowLayer.pure.js.map +1 -1
  254. package/Layers/highlightLayer.pure.js +473 -458
  255. package/Layers/highlightLayer.pure.js.map +1 -1
  256. package/Layers/selectionOutlineLayer.pure.js +360 -345
  257. package/Layers/selectionOutlineLayer.pure.js.map +1 -1
  258. package/Lights/Clustered/clusteredLightContainer.pure.d.ts +1 -1
  259. package/Lights/Clustered/clusteredLightContainer.pure.js +583 -558
  260. package/Lights/Clustered/clusteredLightContainer.pure.js.map +1 -1
  261. package/Lights/Shadows/shadowGenerator.js +6 -1
  262. package/Lights/Shadows/shadowGenerator.js.map +1 -1
  263. package/Lights/areaLight.pure.js +61 -39
  264. package/Lights/areaLight.pure.js.map +1 -1
  265. package/Lights/directionalLight.pure.js +308 -284
  266. package/Lights/directionalLight.pure.js.map +1 -1
  267. package/Lights/hemisphericLight.pure.js +123 -104
  268. package/Lights/hemisphericLight.pure.js.map +1 -1
  269. package/Lights/light.d.ts +5 -3
  270. package/Lights/light.js +869 -827
  271. package/Lights/light.js.map +1 -1
  272. package/Lights/pointLight.pure.js +185 -174
  273. package/Lights/pointLight.pure.js.map +1 -1
  274. package/Lights/rectAreaLight.pure.d.ts +17 -0
  275. package/Lights/rectAreaLight.pure.js +238 -159
  276. package/Lights/rectAreaLight.pure.js.map +1 -1
  277. package/Lights/shadowLight.js +280 -268
  278. package/Lights/shadowLight.js.map +1 -1
  279. package/Lights/spotLight.pure.js +460 -427
  280. package/Lights/spotLight.pure.js.map +1 -1
  281. package/Loading/Plugins/babylonFileLoader.pure.js +17 -5
  282. package/Loading/Plugins/babylonFileLoader.pure.js.map +1 -1
  283. package/Loading/sceneLoader.d.ts +5 -1
  284. package/Loading/sceneLoader.js +299 -402
  285. package/Loading/sceneLoader.js.map +1 -1
  286. package/Materials/Background/backgroundMaterial.pure.d.ts +18 -18
  287. package/Materials/Background/backgroundMaterial.pure.js +949 -794
  288. package/Materials/Background/backgroundMaterial.pure.js.map +1 -1
  289. package/Materials/GaussianSplatting/gaussianSplattingGpuPickingMaterialPlugin.pure.d.ts +15 -0
  290. package/Materials/GaussianSplatting/gaussianSplattingGpuPickingMaterialPlugin.pure.js +34 -1
  291. package/Materials/GaussianSplatting/gaussianSplattingGpuPickingMaterialPlugin.pure.js.map +1 -1
  292. package/Materials/GaussianSplatting/gaussianSplattingMaterial.pure.d.ts +9 -0
  293. package/Materials/GaussianSplatting/gaussianSplattingMaterial.pure.js +26 -2
  294. package/Materials/GaussianSplatting/gaussianSplattingMaterial.pure.js.map +1 -1
  295. package/Materials/GaussianSplatting/gaussianSplattingSolidColorMaterialPlugin.pure.d.ts +2 -1
  296. package/Materials/GaussianSplatting/gaussianSplattingSolidColorMaterialPlugin.pure.js +169 -149
  297. package/Materials/GaussianSplatting/gaussianSplattingSolidColorMaterialPlugin.pure.js.map +1 -1
  298. package/Materials/Node/Blocks/Dual/imageSourceBlock.pure.js +1 -1
  299. package/Materials/Node/Blocks/Dual/lightBlock.pure.js +442 -429
  300. package/Materials/Node/Blocks/Dual/lightBlock.pure.js.map +1 -1
  301. package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.pure.js +396 -383
  302. package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.pure.js.map +1 -1
  303. package/Materials/Node/Blocks/Dual/sceneDepthBlock.pure.js +237 -220
  304. package/Materials/Node/Blocks/Dual/sceneDepthBlock.pure.js.map +1 -1
  305. package/Materials/Node/Blocks/Dual/textureBlock.pure.js +1 -1
  306. package/Materials/Node/Blocks/Fragment/ambientOcclusionBlock.pure.js +150 -133
  307. package/Materials/Node/Blocks/Fragment/ambientOcclusionBlock.pure.js.map +1 -1
  308. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.pure.js +265 -250
  309. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.pure.js.map +1 -1
  310. package/Materials/Node/Blocks/Fragment/heightToNormalBlock.pure.js +159 -142
  311. package/Materials/Node/Blocks/Fragment/heightToNormalBlock.pure.js.map +1 -1
  312. package/Materials/Node/Blocks/Fragment/imageProcessingBlock.pure.js +214 -201
  313. package/Materials/Node/Blocks/Fragment/imageProcessingBlock.pure.js.map +1 -1
  314. package/Materials/Node/Blocks/Fragment/perturbNormalBlock.pure.js +419 -400
  315. package/Materials/Node/Blocks/Fragment/perturbNormalBlock.pure.js.map +1 -1
  316. package/Materials/Node/Blocks/GaussianSplatting/gaussianSplattingBlock.pure.js +3 -1
  317. package/Materials/Node/Blocks/GaussianSplatting/gaussianSplattingBlock.pure.js.map +1 -1
  318. package/Materials/Node/Blocks/PBR/clearCoatBlock.pure.js +302 -289
  319. package/Materials/Node/Blocks/PBR/clearCoatBlock.pure.js.map +1 -1
  320. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.pure.js +1327 -1272
  321. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.pure.js.map +1 -1
  322. package/Materials/Node/Blocks/PBR/reflectionBlock.pure.js +352 -337
  323. package/Materials/Node/Blocks/PBR/reflectionBlock.pure.js.map +1 -1
  324. package/Materials/Node/Blocks/PBR/refractionBlock.pure.js +297 -277
  325. package/Materials/Node/Blocks/PBR/refractionBlock.pure.js.map +1 -1
  326. package/Materials/Node/Blocks/PBR/sheenBlock.pure.js +146 -131
  327. package/Materials/Node/Blocks/PBR/sheenBlock.pure.js.map +1 -1
  328. package/Materials/Node/Blocks/PBR/subSurfaceBlock.pure.js +158 -145
  329. package/Materials/Node/Blocks/PBR/subSurfaceBlock.pure.js.map +1 -1
  330. package/Materials/Node/Blocks/clampBlock.pure.js +92 -77
  331. package/Materials/Node/Blocks/clampBlock.pure.js.map +1 -1
  332. package/Materials/Node/Blocks/cloudBlock.pure.js +145 -132
  333. package/Materials/Node/Blocks/cloudBlock.pure.js.map +1 -1
  334. package/Materials/Node/Blocks/conditionalBlock.pure.js +182 -169
  335. package/Materials/Node/Blocks/conditionalBlock.pure.js.map +1 -1
  336. package/Materials/Node/Blocks/curveBlock.pure.js +259 -246
  337. package/Materials/Node/Blocks/curveBlock.pure.js.map +1 -1
  338. package/Materials/Node/Blocks/debugBlock.pure.js +119 -106
  339. package/Materials/Node/Blocks/debugBlock.pure.js.map +1 -1
  340. package/Materials/Node/Blocks/loopBlock.pure.js +123 -110
  341. package/Materials/Node/Blocks/loopBlock.pure.js.map +1 -1
  342. package/Materials/Node/Blocks/meshAttributeExistsBlock.pure.js +185 -172
  343. package/Materials/Node/Blocks/meshAttributeExistsBlock.pure.js.map +1 -1
  344. package/Materials/Node/Blocks/remapBlock.pure.js +127 -112
  345. package/Materials/Node/Blocks/remapBlock.pure.js.map +1 -1
  346. package/Materials/Node/Blocks/transformBlock.pure.js +196 -185
  347. package/Materials/Node/Blocks/transformBlock.pure.js.map +1 -1
  348. package/Materials/Node/Blocks/triPlanarBlock.pure.js +451 -438
  349. package/Materials/Node/Blocks/triPlanarBlock.pure.js.map +1 -1
  350. package/Materials/Node/Blocks/trigonometryBlock.pure.js +184 -171
  351. package/Materials/Node/Blocks/trigonometryBlock.pure.js.map +1 -1
  352. package/Materials/Node/Blocks/waveBlock.pure.js +97 -84
  353. package/Materials/Node/Blocks/waveBlock.pure.js.map +1 -1
  354. package/Materials/Node/Blocks/worleyNoise3DBlock.pure.js +276 -263
  355. package/Materials/Node/Blocks/worleyNoise3DBlock.pure.js.map +1 -1
  356. package/Materials/Node/nodeMaterial.pure.js +1765 -1737
  357. package/Materials/Node/nodeMaterial.pure.js.map +1 -1
  358. package/Materials/Node/nodeMaterialBuildState.d.ts +3 -3
  359. package/Materials/PBR/openpbrMaterial.pure.d.ts +102 -102
  360. package/Materials/PBR/openpbrMaterial.pure.js +3115 -2243
  361. package/Materials/PBR/openpbrMaterial.pure.js.map +1 -1
  362. package/Materials/PBR/pbrAnisotropicConfiguration.d.ts +3 -3
  363. package/Materials/PBR/pbrAnisotropicConfiguration.js +255 -227
  364. package/Materials/PBR/pbrAnisotropicConfiguration.js.map +1 -1
  365. package/Materials/PBR/pbrBRDFConfiguration.d.ts +9 -9
  366. package/Materials/PBR/pbrBRDFConfiguration.js +203 -155
  367. package/Materials/PBR/pbrBRDFConfiguration.js.map +1 -1
  368. package/Materials/PBR/pbrBaseMaterial.pure.d.ts +1 -1
  369. package/Materials/PBR/pbrBaseMaterial.pure.js +1751 -1736
  370. package/Materials/PBR/pbrBaseMaterial.pure.js.map +1 -1
  371. package/Materials/PBR/pbrBaseSimpleMaterial.d.ts +13 -13
  372. package/Materials/PBR/pbrBaseSimpleMaterial.js +205 -117
  373. package/Materials/PBR/pbrBaseSimpleMaterial.js.map +1 -1
  374. package/Materials/PBR/pbrClearCoatConfiguration.d.ts +9 -9
  375. package/Materials/PBR/pbrClearCoatConfiguration.js +464 -406
  376. package/Materials/PBR/pbrClearCoatConfiguration.js.map +1 -1
  377. package/Materials/PBR/pbrIridescenceConfiguration.d.ts +3 -3
  378. package/Materials/PBR/pbrIridescenceConfiguration.js +271 -239
  379. package/Materials/PBR/pbrIridescenceConfiguration.js.map +1 -1
  380. package/Materials/PBR/pbrMaterial.pure.d.ts +66 -66
  381. package/Materials/PBR/pbrMaterial.pure.js +1041 -685
  382. package/Materials/PBR/pbrMaterial.pure.js.map +1 -1
  383. package/Materials/PBR/pbrMetallicRoughnessMaterial.pure.d.ts +5 -5
  384. package/Materials/PBR/pbrMetallicRoughnessMaterial.pure.js +176 -115
  385. package/Materials/PBR/pbrMetallicRoughnessMaterial.pure.js.map +1 -1
  386. package/Materials/PBR/pbrSheenConfiguration.d.ts +7 -7
  387. package/Materials/PBR/pbrSheenConfiguration.js +314 -270
  388. package/Materials/PBR/pbrSheenConfiguration.js.map +1 -1
  389. package/Materials/PBR/pbrSpecularGlossinessMaterial.pure.d.ts +5 -5
  390. package/Materials/PBR/pbrSpecularGlossinessMaterial.pure.js +172 -117
  391. package/Materials/PBR/pbrSpecularGlossinessMaterial.pure.js.map +1 -1
  392. package/Materials/PBR/pbrSubSurfaceConfiguration.d.ts +16 -16
  393. package/Materials/PBR/pbrSubSurfaceConfiguration.js +864 -764
  394. package/Materials/PBR/pbrSubSurfaceConfiguration.js.map +1 -1
  395. package/Materials/Textures/HTML/htmlInCanvasPolyfill.d.ts +43 -0
  396. package/Materials/Textures/HTML/htmlInCanvasPolyfill.js +64 -0
  397. package/Materials/Textures/HTML/htmlInCanvasPolyfill.js.map +1 -0
  398. package/Materials/Textures/HTML/htmlInteractionManager.d.ts +69 -0
  399. package/Materials/Textures/HTML/htmlInteractionManager.js +130 -0
  400. package/Materials/Textures/HTML/htmlInteractionManager.js.map +1 -0
  401. package/Materials/Textures/HTML/htmlRaycastInteractionManager.d.ts +84 -0
  402. package/Materials/Textures/HTML/htmlRaycastInteractionManager.js +246 -0
  403. package/Materials/Textures/HTML/htmlRaycastInteractionManager.js.map +1 -0
  404. package/Materials/Textures/HTML/htmlTexture.d.ts +148 -0
  405. package/Materials/Textures/HTML/htmlTexture.js +455 -0
  406. package/Materials/Textures/HTML/htmlTexture.js.map +1 -0
  407. package/Materials/Textures/HTML/index.d.ts +4 -0
  408. package/Materials/Textures/HTML/index.js +5 -0
  409. package/Materials/Textures/HTML/index.js.map +1 -0
  410. package/Materials/Textures/HTML/pure.d.ts +5 -0
  411. package/Materials/Textures/HTML/pure.js +6 -0
  412. package/Materials/Textures/HTML/pure.js.map +1 -0
  413. package/Materials/Textures/Procedurals/proceduralTexture.pure.js +671 -643
  414. package/Materials/Textures/Procedurals/proceduralTexture.pure.js.map +1 -1
  415. package/Materials/Textures/baseTexture.pure.js +880 -825
  416. package/Materials/Textures/baseTexture.pure.js.map +1 -1
  417. package/Materials/Textures/cubeTexture.d.ts +0 -1
  418. package/Materials/Textures/cubeTexture.js +0 -1
  419. package/Materials/Textures/cubeTexture.js.map +1 -1
  420. package/Materials/Textures/cubeTexture.pure.js +368 -333
  421. package/Materials/Textures/cubeTexture.pure.js.map +1 -1
  422. package/Materials/Textures/dynamicTexture.d.ts +0 -1
  423. package/Materials/Textures/dynamicTexture.js +0 -1
  424. package/Materials/Textures/dynamicTexture.js.map +1 -1
  425. package/Materials/Textures/dynamicTexture.pure.js +2 -0
  426. package/Materials/Textures/dynamicTexture.pure.js.map +1 -1
  427. package/Materials/Textures/htmlElementTexture.d.ts +0 -2
  428. package/Materials/Textures/htmlElementTexture.js +0 -2
  429. package/Materials/Textures/htmlElementTexture.js.map +1 -1
  430. package/Materials/Textures/htmlElementTexture.pure.js +4 -0
  431. package/Materials/Textures/htmlElementTexture.pure.js.map +1 -1
  432. package/Materials/Textures/index.d.ts +1 -0
  433. package/Materials/Textures/index.js +1 -1
  434. package/Materials/Textures/index.js.map +1 -1
  435. package/Materials/Textures/multiRenderTarget.d.ts +0 -1
  436. package/Materials/Textures/multiRenderTarget.js +0 -1
  437. package/Materials/Textures/multiRenderTarget.js.map +1 -1
  438. package/Materials/Textures/multiRenderTarget.pure.js +2 -0
  439. package/Materials/Textures/multiRenderTarget.pure.js.map +1 -1
  440. package/Materials/Textures/pure.d.ts +1 -0
  441. package/Materials/Textures/pure.js +1 -0
  442. package/Materials/Textures/pure.js.map +1 -1
  443. package/Materials/Textures/texture.pure.js +961 -923
  444. package/Materials/Textures/texture.pure.js.map +1 -1
  445. package/Materials/Textures/videoTexture.pure.d.ts +3 -0
  446. package/Materials/Textures/videoTexture.pure.js +450 -401
  447. package/Materials/Textures/videoTexture.pure.js.map +1 -1
  448. package/Materials/colorCurves.pure.js +510 -477
  449. package/Materials/colorCurves.pure.js.map +1 -1
  450. package/Materials/effect.pure.js +0 -7
  451. package/Materials/effect.pure.js.map +1 -1
  452. package/Materials/imageProcessing.js +12 -4
  453. package/Materials/imageProcessing.js.map +1 -1
  454. package/Materials/imageProcessingConfiguration.pure.js +647 -587
  455. package/Materials/imageProcessingConfiguration.pure.js.map +1 -1
  456. package/Materials/material.decalMapConfiguration.pure.d.ts +2 -2
  457. package/Materials/material.decalMapConfiguration.pure.js +149 -130
  458. package/Materials/material.decalMapConfiguration.pure.js.map +1 -1
  459. package/Materials/material.detailMapConfiguration.d.ts +3 -3
  460. package/Materials/material.detailMapConfiguration.js +213 -175
  461. package/Materials/material.detailMapConfiguration.js.map +1 -1
  462. package/Materials/material.pure.js +1815 -1721
  463. package/Materials/material.pure.js.map +1 -1
  464. package/Materials/materialPluginBase.pure.js +270 -249
  465. package/Materials/materialPluginBase.pure.js.map +1 -1
  466. package/Materials/materialPluginManager.pure.js +18 -8
  467. package/Materials/materialPluginManager.pure.js.map +1 -1
  468. package/Materials/materialStencilState.js +211 -200
  469. package/Materials/materialStencilState.js.map +1 -1
  470. package/Materials/meshDebugPluginMaterial.pure.d.ts +2 -2
  471. package/Materials/meshDebugPluginMaterial.pure.js +397 -275
  472. package/Materials/meshDebugPluginMaterial.pure.js.map +1 -1
  473. package/Materials/standardMaterial.pure.d.ts +32 -32
  474. package/Materials/standardMaterial.pure.js +1804 -1394
  475. package/Materials/standardMaterial.pure.js.map +1 -1
  476. package/Maths/math.color.pure.js +5 -5
  477. package/Maths/math.functions.js +38 -30
  478. package/Maths/math.functions.js.map +1 -1
  479. package/Maths/math.vector.pure.js +25 -25
  480. package/Meshes/GaussianSplatting/gaussianSplattingMesh.pure.js +18 -8
  481. package/Meshes/GaussianSplatting/gaussianSplattingMesh.pure.js.map +1 -1
  482. package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.pure.d.ts +86 -1
  483. package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.pure.js +255 -104
  484. package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.pure.js.map +1 -1
  485. package/Meshes/GaussianSplatting/gaussianSplattingSortWorker.d.ts +39 -0
  486. package/Meshes/GaussianSplatting/gaussianSplattingSortWorker.js +322 -0
  487. package/Meshes/GaussianSplatting/gaussianSplattingSortWorker.js.map +1 -0
  488. package/Meshes/GreasedLine/greasedLineMesh.pure.js +4 -4
  489. package/Meshes/GreasedLine/greasedLineRibbonMesh.pure.js +3 -3
  490. package/Meshes/Node/Blocks/Instances/instantiateBaseBlock.js +107 -94
  491. package/Meshes/Node/Blocks/Instances/instantiateBaseBlock.js.map +1 -1
  492. package/Meshes/Node/Blocks/Instances/instantiateOnFacesBlock.pure.js +276 -263
  493. package/Meshes/Node/Blocks/Instances/instantiateOnFacesBlock.pure.js.map +1 -1
  494. package/Meshes/Node/Blocks/Instances/instantiateOnVerticesBlock.pure.js +247 -232
  495. package/Meshes/Node/Blocks/Instances/instantiateOnVerticesBlock.pure.js.map +1 -1
  496. package/Meshes/Node/Blocks/Instances/instantiateOnVolumeBlock.pure.js +299 -284
  497. package/Meshes/Node/Blocks/Instances/instantiateOnVolumeBlock.pure.js.map +1 -1
  498. package/Meshes/Node/Blocks/Set/aggregatorBlock.pure.js +196 -181
  499. package/Meshes/Node/Blocks/Set/aggregatorBlock.pure.js.map +1 -1
  500. package/Meshes/Node/Blocks/Set/latticeBlock.pure.js +198 -179
  501. package/Meshes/Node/Blocks/Set/latticeBlock.pure.js.map +1 -1
  502. package/Meshes/Node/Blocks/Set/setColorsBlock.pure.js +151 -138
  503. package/Meshes/Node/Blocks/Set/setColorsBlock.pure.js.map +1 -1
  504. package/Meshes/Node/Blocks/Set/setMaterialIDBlock.pure.js +107 -94
  505. package/Meshes/Node/Blocks/Set/setMaterialIDBlock.pure.js.map +1 -1
  506. package/Meshes/Node/Blocks/Set/setNormalsBlock.pure.js +138 -125
  507. package/Meshes/Node/Blocks/Set/setNormalsBlock.pure.js.map +1 -1
  508. package/Meshes/Node/Blocks/Set/setPositionsBlock.pure.js +213 -200
  509. package/Meshes/Node/Blocks/Set/setPositionsBlock.pure.js.map +1 -1
  510. package/Meshes/Node/Blocks/Set/setTangentsBlock.pure.js +138 -125
  511. package/Meshes/Node/Blocks/Set/setTangentsBlock.pure.js.map +1 -1
  512. package/Meshes/Node/Blocks/Set/setUVsBlock.pure.js +179 -164
  513. package/Meshes/Node/Blocks/Set/setUVsBlock.pure.js.map +1 -1
  514. package/Meshes/Node/Blocks/Sources/boxBlock.pure.js +183 -170
  515. package/Meshes/Node/Blocks/Sources/boxBlock.pure.js.map +1 -1
  516. package/Meshes/Node/Blocks/Sources/capsuleBlock.pure.js +125 -112
  517. package/Meshes/Node/Blocks/Sources/capsuleBlock.pure.js.map +1 -1
  518. package/Meshes/Node/Blocks/Sources/cylinderBlock.pure.js +153 -140
  519. package/Meshes/Node/Blocks/Sources/cylinderBlock.pure.js.map +1 -1
  520. package/Meshes/Node/Blocks/Sources/discBlock.pure.js +112 -99
  521. package/Meshes/Node/Blocks/Sources/discBlock.pure.js.map +1 -1
  522. package/Meshes/Node/Blocks/Sources/gridBlock.pure.js +133 -120
  523. package/Meshes/Node/Blocks/Sources/gridBlock.pure.js.map +1 -1
  524. package/Meshes/Node/Blocks/Sources/icoSphereBlock.pure.js +128 -115
  525. package/Meshes/Node/Blocks/Sources/icoSphereBlock.pure.js.map +1 -1
  526. package/Meshes/Node/Blocks/Sources/meshBlock.pure.js +116 -103
  527. package/Meshes/Node/Blocks/Sources/meshBlock.pure.js.map +1 -1
  528. package/Meshes/Node/Blocks/Sources/planeBlock.pure.js +160 -147
  529. package/Meshes/Node/Blocks/Sources/planeBlock.pure.js.map +1 -1
  530. package/Meshes/Node/Blocks/Sources/sphereBlock.pure.js +144 -131
  531. package/Meshes/Node/Blocks/Sources/sphereBlock.pure.js.map +1 -1
  532. package/Meshes/Node/Blocks/Sources/torusBlock.pure.js +112 -99
  533. package/Meshes/Node/Blocks/Sources/torusBlock.pure.js.map +1 -1
  534. package/Meshes/Node/Blocks/Textures/geometryTextureFetchBlock.pure.js +200 -185
  535. package/Meshes/Node/Blocks/Textures/geometryTextureFetchBlock.pure.js.map +1 -1
  536. package/Meshes/Node/Blocks/bevelBlock.pure.js +111 -98
  537. package/Meshes/Node/Blocks/bevelBlock.pure.js.map +1 -1
  538. package/Meshes/Node/Blocks/booleanGeometryBlock.pure.js +182 -165
  539. package/Meshes/Node/Blocks/booleanGeometryBlock.pure.js.map +1 -1
  540. package/Meshes/Node/Blocks/cleanGeometryBlock.pure.js +89 -76
  541. package/Meshes/Node/Blocks/cleanGeometryBlock.pure.js.map +1 -1
  542. package/Meshes/Node/Blocks/conditionBlock.pure.js +184 -169
  543. package/Meshes/Node/Blocks/conditionBlock.pure.js.map +1 -1
  544. package/Meshes/Node/Blocks/extrudeGeometryBlock.pure.js +270 -255
  545. package/Meshes/Node/Blocks/extrudeGeometryBlock.pure.js.map +1 -1
  546. package/Meshes/Node/Blocks/geometryCollectionBlock.pure.js +172 -159
  547. package/Meshes/Node/Blocks/geometryCollectionBlock.pure.js.map +1 -1
  548. package/Meshes/Node/Blocks/geometryCurveBlock.pure.js +230 -217
  549. package/Meshes/Node/Blocks/geometryCurveBlock.pure.js.map +1 -1
  550. package/Meshes/Node/Blocks/geometryEaseBlock.pure.js +256 -245
  551. package/Meshes/Node/Blocks/geometryEaseBlock.pure.js.map +1 -1
  552. package/Meshes/Node/Blocks/geometryOptimizeBlock.pure.js +206 -189
  553. package/Meshes/Node/Blocks/geometryOptimizeBlock.pure.js.map +1 -1
  554. package/Meshes/Node/Blocks/geometryTransformBlock.pure.js +166 -153
  555. package/Meshes/Node/Blocks/geometryTransformBlock.pure.js.map +1 -1
  556. package/Meshes/Node/Blocks/geometryTrigonometryBlock.pure.js +221 -208
  557. package/Meshes/Node/Blocks/geometryTrigonometryBlock.pure.js.map +1 -1
  558. package/Meshes/Node/Blocks/mappingBlock.pure.js +150 -137
  559. package/Meshes/Node/Blocks/mappingBlock.pure.js.map +1 -1
  560. package/Meshes/Node/Blocks/mathBlock.pure.js +269 -256
  561. package/Meshes/Node/Blocks/mathBlock.pure.js.map +1 -1
  562. package/Meshes/Node/Blocks/mergeGeometryBlock.pure.js +141 -128
  563. package/Meshes/Node/Blocks/mergeGeometryBlock.pure.js.map +1 -1
  564. package/Meshes/Node/Blocks/randomBlock.pure.js +161 -148
  565. package/Meshes/Node/Blocks/randomBlock.pure.js.map +1 -1
  566. package/Meshes/Node/Blocks/subdivideBlock.pure.js +102 -87
  567. package/Meshes/Node/Blocks/subdivideBlock.pure.js.map +1 -1
  568. package/Meshes/Node/nodeGeometry.js +560 -538
  569. package/Meshes/Node/nodeGeometry.js.map +1 -1
  570. package/Meshes/Node/nodeGeometryBlock.js +473 -458
  571. package/Meshes/Node/nodeGeometryBlock.js.map +1 -1
  572. package/Meshes/abstractMesh.pure.js +2218 -2207
  573. package/Meshes/abstractMesh.pure.js.map +1 -1
  574. package/Meshes/geometry.js +30 -15
  575. package/Meshes/geometry.js.map +1 -1
  576. package/Meshes/mesh.pure.js +26 -14
  577. package/Meshes/mesh.pure.js.map +1 -1
  578. package/Meshes/mesh.vertexData.js +1665 -1655
  579. package/Meshes/mesh.vertexData.js.map +1 -1
  580. package/Meshes/transformNode.pure.js +1400 -1372
  581. package/Meshes/transformNode.pure.js.map +1 -1
  582. package/Misc/decorators.d.ts +34 -19
  583. package/Misc/decorators.functions.d.ts +33 -2
  584. package/Misc/decorators.functions.js +114 -35
  585. package/Misc/decorators.functions.js.map +1 -1
  586. package/Misc/decorators.js +96 -68
  587. package/Misc/decorators.js.map +1 -1
  588. package/Misc/decorators.serialization.js +47 -40
  589. package/Misc/decorators.serialization.js.map +1 -1
  590. package/Misc/decorators.serializationUtilities.d.ts +24 -0
  591. package/Misc/decorators.serializationUtilities.js +20 -0
  592. package/Misc/decorators.serializationUtilities.js.map +1 -0
  593. package/Misc/dumpTools.pure.js +43 -33
  594. package/Misc/dumpTools.pure.js.map +1 -1
  595. package/Misc/fileTools.pure.js +8 -0
  596. package/Misc/fileTools.pure.js.map +1 -1
  597. package/Misc/observable.pure.js +0 -7
  598. package/Misc/observable.pure.js.map +1 -1
  599. package/Misc/snapshotRenderingHelper.d.ts +4 -1
  600. package/Misc/snapshotRenderingHelper.js.map +1 -1
  601. package/Misc/symbolMetadataPolyfill.d.ts +11 -0
  602. package/Misc/symbolMetadataPolyfill.js +22 -0
  603. package/Misc/symbolMetadataPolyfill.js.map +1 -0
  604. package/Misc/tools.pure.js +2 -2
  605. package/Misc/tools.pure.js.map +1 -1
  606. package/Morph/morphTarget.js +382 -365
  607. package/Morph/morphTarget.js.map +1 -1
  608. package/Particles/Node/Blocks/Conditions/particleConditionBlock.pure.js +160 -145
  609. package/Particles/Node/Blocks/Conditions/particleConditionBlock.pure.js.map +1 -1
  610. package/Particles/Node/Blocks/Emitters/coneShapeBlock.pure.js +187 -174
  611. package/Particles/Node/Blocks/Emitters/coneShapeBlock.pure.js.map +1 -1
  612. package/Particles/Node/Blocks/Emitters/meshShapeBlock.pure.js +238 -219
  613. package/Particles/Node/Blocks/Emitters/meshShapeBlock.pure.js.map +1 -1
  614. package/Particles/Node/Blocks/Emitters/setupSpriteSheetBlock.pure.js +140 -115
  615. package/Particles/Node/Blocks/Emitters/setupSpriteSheetBlock.pure.js.map +1 -1
  616. package/Particles/Node/Blocks/Emitters/sphereShapeBlock.pure.js +157 -144
  617. package/Particles/Node/Blocks/Emitters/sphereShapeBlock.pure.js.map +1 -1
  618. package/Particles/Node/Blocks/Triggers/particleTriggerBlock.pure.js +133 -119
  619. package/Particles/Node/Blocks/Triggers/particleTriggerBlock.pure.js.map +1 -1
  620. package/Particles/Node/Blocks/Update/alignAngleBlock.pure.js +93 -80
  621. package/Particles/Node/Blocks/Update/alignAngleBlock.pure.js.map +1 -1
  622. package/Particles/Node/Blocks/particleDebugBlock.pure.js +117 -105
  623. package/Particles/Node/Blocks/particleDebugBlock.pure.js.map +1 -1
  624. package/Particles/Node/Blocks/particleFloatToIntBlock.pure.js +105 -92
  625. package/Particles/Node/Blocks/particleFloatToIntBlock.pure.js.map +1 -1
  626. package/Particles/Node/Blocks/particleGradientValueBlock.pure.js +82 -69
  627. package/Particles/Node/Blocks/particleGradientValueBlock.pure.js.map +1 -1
  628. package/Particles/Node/Blocks/particleLocalVariableBlock.pure.js +113 -101
  629. package/Particles/Node/Blocks/particleLocalVariableBlock.pure.js.map +1 -1
  630. package/Particles/Node/Blocks/particleMathBlock.pure.js +278 -265
  631. package/Particles/Node/Blocks/particleMathBlock.pure.js.map +1 -1
  632. package/Particles/Node/Blocks/particleNumberMathBlock.pure.js +155 -142
  633. package/Particles/Node/Blocks/particleNumberMathBlock.pure.js.map +1 -1
  634. package/Particles/Node/Blocks/particleRandomBlock.pure.js +156 -143
  635. package/Particles/Node/Blocks/particleRandomBlock.pure.js.map +1 -1
  636. package/Particles/Node/Blocks/particleTrigonometryBlock.pure.js +217 -204
  637. package/Particles/Node/Blocks/particleTrigonometryBlock.pure.js.map +1 -1
  638. package/Particles/Node/Blocks/particleVectorMathBlock.pure.js +106 -93
  639. package/Particles/Node/Blocks/particleVectorMathBlock.pure.js.map +1 -1
  640. package/Particles/Node/Blocks/systemBlock.pure.js +366 -330
  641. package/Particles/Node/Blocks/systemBlock.pure.js.map +1 -1
  642. package/Particles/Node/nodeParticleBlock.js +339 -324
  643. package/Particles/Node/nodeParticleBlock.js.map +1 -1
  644. package/Particles/Node/nodeParticleSystemSet.js +494 -473
  645. package/Particles/Node/nodeParticleSystemSet.js.map +1 -1
  646. package/Particles/gpuParticleSystem.d.ts +0 -1
  647. package/Particles/gpuParticleSystem.js +0 -1
  648. package/Particles/gpuParticleSystem.js.map +1 -1
  649. package/Particles/gpuParticleSystem.pure.d.ts +4 -3
  650. package/Particles/gpuParticleSystem.pure.js +27 -16
  651. package/Particles/gpuParticleSystem.pure.js.map +1 -1
  652. package/Particles/particleSystem.pure.js +57 -2
  653. package/Particles/particleSystem.pure.js.map +1 -1
  654. package/Particles/thinParticleSystem.d.ts +0 -1
  655. package/Particles/thinParticleSystem.js +0 -1
  656. package/Particles/thinParticleSystem.js.map +1 -1
  657. package/Particles/thinParticleSystem.pure.js +2 -0
  658. package/Particles/thinParticleSystem.pure.js.map +1 -1
  659. package/Particles/webgl2ParticleSystem.pure.js +2 -0
  660. package/Particles/webgl2ParticleSystem.pure.js.map +1 -1
  661. package/Physics/v1/physicsImpostor.pure.js +4 -4
  662. package/PostProcesses/RenderPipeline/Pipelines/defaultRenderingPipeline.pure.js +675 -656
  663. package/PostProcesses/RenderPipeline/Pipelines/defaultRenderingPipeline.pure.js.map +1 -1
  664. package/PostProcesses/RenderPipeline/Pipelines/lensRenderingPipeline.d.ts +0 -1
  665. package/PostProcesses/RenderPipeline/Pipelines/lensRenderingPipeline.js +0 -1
  666. package/PostProcesses/RenderPipeline/Pipelines/lensRenderingPipeline.js.map +1 -1
  667. package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.pure.js +521 -486
  668. package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.pure.js.map +1 -1
  669. package/PostProcesses/RenderPipeline/Pipelines/ssaoRenderingPipeline.d.ts +0 -1
  670. package/PostProcesses/RenderPipeline/Pipelines/ssaoRenderingPipeline.js +0 -1
  671. package/PostProcesses/RenderPipeline/Pipelines/ssaoRenderingPipeline.js.map +1 -1
  672. package/PostProcesses/RenderPipeline/Pipelines/ssaoRenderingPipeline.pure.js +241 -220
  673. package/PostProcesses/RenderPipeline/Pipelines/ssaoRenderingPipeline.pure.js.map +1 -1
  674. package/PostProcesses/RenderPipeline/Pipelines/ssrRenderingPipeline.pure.js +852 -835
  675. package/PostProcesses/RenderPipeline/Pipelines/ssrRenderingPipeline.pure.js.map +1 -1
  676. package/PostProcesses/RenderPipeline/Pipelines/standardRenderingPipeline.pure.js +1135 -1073
  677. package/PostProcesses/RenderPipeline/Pipelines/standardRenderingPipeline.pure.js.map +1 -1
  678. package/PostProcesses/RenderPipeline/Pipelines/taaRenderingPipeline.pure.js +319 -303
  679. package/PostProcesses/RenderPipeline/Pipelines/taaRenderingPipeline.pure.js.map +1 -1
  680. package/PostProcesses/RenderPipeline/postProcessRenderPipeline.js +212 -199
  681. package/PostProcesses/RenderPipeline/postProcessRenderPipeline.js.map +1 -1
  682. package/PostProcesses/blackAndWhitePostProcess.pure.js +67 -55
  683. package/PostProcesses/blackAndWhitePostProcess.pure.js.map +1 -1
  684. package/PostProcesses/bloomMergePostProcess.pure.js +74 -62
  685. package/PostProcesses/bloomMergePostProcess.pure.js.map +1 -1
  686. package/PostProcesses/blurPostProcess.pure.js +127 -115
  687. package/PostProcesses/blurPostProcess.pure.js.map +1 -1
  688. package/PostProcesses/chromaticAberrationPostProcess.pure.js +130 -118
  689. package/PostProcesses/chromaticAberrationPostProcess.pure.js.map +1 -1
  690. package/PostProcesses/circleOfConfusionPostProcess.pure.js +115 -104
  691. package/PostProcesses/circleOfConfusionPostProcess.pure.js.map +1 -1
  692. package/PostProcesses/colorCorrectionPostProcess.pure.js +55 -43
  693. package/PostProcesses/colorCorrectionPostProcess.pure.js.map +1 -1
  694. package/PostProcesses/convolutionPostProcess.pure.js +96 -84
  695. package/PostProcesses/convolutionPostProcess.pure.js.map +1 -1
  696. package/PostProcesses/extractHighlightsPostProcess.pure.js +68 -57
  697. package/PostProcesses/extractHighlightsPostProcess.pure.js.map +1 -1
  698. package/PostProcesses/filterPostProcess.pure.js +66 -54
  699. package/PostProcesses/filterPostProcess.pure.js.map +1 -1
  700. package/PostProcesses/fxaaPostProcess.pure.js.map +1 -1
  701. package/PostProcesses/grainPostProcess.pure.js +82 -70
  702. package/PostProcesses/grainPostProcess.pure.js.map +1 -1
  703. package/PostProcesses/imageProcessingPostProcess.js +334 -322
  704. package/PostProcesses/imageProcessingPostProcess.js.map +1 -1
  705. package/PostProcesses/motionBlurPostProcess.pure.js +246 -235
  706. package/PostProcesses/motionBlurPostProcess.pure.js.map +1 -1
  707. package/PostProcesses/passPostProcess.pure.js +75 -63
  708. package/PostProcesses/passPostProcess.pure.js.map +1 -1
  709. package/PostProcesses/postProcess.pure.js +899 -835
  710. package/PostProcesses/postProcess.pure.js.map +1 -1
  711. package/PostProcesses/refractionPostProcess.pure.js +114 -87
  712. package/PostProcesses/refractionPostProcess.pure.js.map +1 -1
  713. package/PostProcesses/screenSpaceCurvaturePostProcess.pure.js +108 -96
  714. package/PostProcesses/screenSpaceCurvaturePostProcess.pure.js.map +1 -1
  715. package/PostProcesses/screenSpaceReflectionPostProcess.pure.js +241 -220
  716. package/PostProcesses/screenSpaceReflectionPostProcess.pure.js.map +1 -1
  717. package/PostProcesses/sharpenPostProcess.pure.js +86 -74
  718. package/PostProcesses/sharpenPostProcess.pure.js.map +1 -1
  719. package/PostProcesses/tonemapPostProcess.pure.js +82 -70
  720. package/PostProcesses/tonemapPostProcess.pure.js.map +1 -1
  721. package/PostProcesses/volumetricLightScatteringPostProcess.pure.js +500 -465
  722. package/PostProcesses/volumetricLightScatteringPostProcess.pure.js.map +1 -1
  723. package/PostProcesses/vrMultiviewToSingleviewPostProcess.d.ts +0 -1
  724. package/PostProcesses/vrMultiviewToSingleviewPostProcess.js +0 -1
  725. package/PostProcesses/vrMultiviewToSingleviewPostProcess.js.map +1 -1
  726. package/PostProcesses/vrMultiviewToSingleviewPostProcess.pure.js +2 -0
  727. package/PostProcesses/vrMultiviewToSingleviewPostProcess.pure.js.map +1 -1
  728. package/Probes/reflectionProbe.pure.js +238 -224
  729. package/Probes/reflectionProbe.pure.js.map +1 -1
  730. package/Rendering/GlobalIllumination/giRSMManager.pure.d.ts +1 -1
  731. package/Rendering/GlobalIllumination/giRSMManager.pure.js +138 -105
  732. package/Rendering/GlobalIllumination/giRSMManager.pure.js.map +1 -1
  733. package/Rendering/IBLShadows/iblShadowsPluginMaterial.pure.d.ts +1 -1
  734. package/Rendering/IBLShadows/iblShadowsPluginMaterial.pure.js +155 -138
  735. package/Rendering/IBLShadows/iblShadowsPluginMaterial.pure.js.map +1 -1
  736. package/Rendering/IBLShadows/iblShadowsRenderPipeline.d.ts +0 -2
  737. package/Rendering/IBLShadows/iblShadowsRenderPipeline.js +0 -2
  738. package/Rendering/IBLShadows/iblShadowsRenderPipeline.js.map +1 -1
  739. package/Rendering/IBLShadows/iblShadowsRenderPipeline.pure.js +5 -0
  740. package/Rendering/IBLShadows/iblShadowsRenderPipeline.pure.js.map +1 -1
  741. package/Rendering/IBLShadows/iblShadowsVoxelRenderer.d.ts +0 -1
  742. package/Rendering/IBLShadows/iblShadowsVoxelRenderer.js +0 -1
  743. package/Rendering/IBLShadows/iblShadowsVoxelRenderer.js.map +1 -1
  744. package/Rendering/IBLShadows/iblShadowsVoxelRenderer.pure.d.ts +1 -0
  745. package/Rendering/IBLShadows/iblShadowsVoxelRenderer.pure.js +34 -0
  746. package/Rendering/IBLShadows/iblShadowsVoxelRenderer.pure.js.map +1 -1
  747. package/Rendering/edgesRenderer.pure.js.map +1 -1
  748. package/Rendering/prePassRenderer.d.ts +0 -2
  749. package/Rendering/prePassRenderer.js +0 -2
  750. package/Rendering/prePassRenderer.js.map +1 -1
  751. package/Rendering/prePassRenderer.pure.js +2 -0
  752. package/Rendering/prePassRenderer.pure.js.map +1 -1
  753. package/Rendering/reflectiveShadowMap.pure.d.ts +1 -1
  754. package/Rendering/reflectiveShadowMap.pure.js +151 -130
  755. package/Rendering/reflectiveShadowMap.pure.js.map +1 -1
  756. package/Rendering/thinDepthPeelingRenderer.d.ts +0 -1
  757. package/Rendering/thinDepthPeelingRenderer.js +0 -1
  758. package/Rendering/thinDepthPeelingRenderer.js.map +1 -1
  759. package/Shaders/ShadersInclude/gaussianSplatting.js +1 -0
  760. package/Shaders/ShadersInclude/gaussianSplatting.js.map +1 -1
  761. package/Shaders/ShadersInclude/openpbrEnvironmentLighting.js +35 -5
  762. package/Shaders/ShadersInclude/openpbrEnvironmentLighting.js.map +1 -1
  763. package/Shaders/gaussianSplatting.fragment.js +17 -1
  764. package/Shaders/gaussianSplatting.fragment.js.map +1 -1
  765. package/Shaders/gaussianSplatting.vertex.js +1 -1
  766. package/Shaders/gaussianSplatting.vertex.js.map +1 -1
  767. package/Shaders/gaussianSplattingDepth.vertex.js +1 -1
  768. package/Shaders/gaussianSplattingDepth.vertex.js.map +1 -1
  769. package/Shaders/picking.fragment.js +39 -3
  770. package/Shaders/picking.fragment.js.map +1 -1
  771. package/ShadersWGSL/ShadersInclude/gaussianSplatting.js +3 -1
  772. package/ShadersWGSL/ShadersInclude/gaussianSplatting.js.map +1 -1
  773. package/ShadersWGSL/ShadersInclude/helperFunctions.js +2 -2
  774. package/ShadersWGSL/ShadersInclude/helperFunctions.js.map +1 -1
  775. package/ShadersWGSL/ShadersInclude/openpbrEnvironmentLighting.js +39 -7
  776. package/ShadersWGSL/ShadersInclude/openpbrEnvironmentLighting.js.map +1 -1
  777. package/ShadersWGSL/ShadersInclude/openpbrIblFunctions.js +4 -3
  778. package/ShadersWGSL/ShadersInclude/openpbrIblFunctions.js.map +1 -1
  779. package/ShadersWGSL/gaussianSplatting.fragment.js +14 -1
  780. package/ShadersWGSL/gaussianSplatting.fragment.js.map +1 -1
  781. package/ShadersWGSL/gaussianSplatting.vertex.js +2 -2
  782. package/ShadersWGSL/gaussianSplatting.vertex.js.map +1 -1
  783. package/ShadersWGSL/gaussianSplattingDepth.vertex.js +2 -2
  784. package/ShadersWGSL/gaussianSplattingDepth.vertex.js.map +1 -1
  785. package/ShadersWGSL/lightingVolume.compute.js +2 -2
  786. package/ShadersWGSL/lightingVolume.compute.js.map +1 -1
  787. package/ShadersWGSL/picking.fragment.js +22 -1
  788. package/ShadersWGSL/picking.fragment.js.map +1 -1
  789. package/XR/features/Layers/WebXRCompositionLayer.d.ts +3 -2
  790. package/XR/features/Layers/WebXRCompositionLayer.js +2 -2
  791. package/XR/features/Layers/WebXRCompositionLayer.js.map +1 -1
  792. package/XR/features/Layers/WebXRWebGPUCompositionLayer.d.ts +59 -0
  793. package/XR/features/Layers/WebXRWebGPUCompositionLayer.js +120 -0
  794. package/XR/features/Layers/WebXRWebGPUCompositionLayer.js.map +1 -0
  795. package/XR/features/Layers/WebXRWebGPUProjectionLayer.d.ts +25 -0
  796. package/XR/features/Layers/WebXRWebGPUProjectionLayer.js +69 -0
  797. package/XR/features/Layers/WebXRWebGPUProjectionLayer.js.map +1 -0
  798. package/XR/features/WebXRLayers.pure.d.ts +8 -0
  799. package/XR/features/WebXRLayers.pure.js +43 -6
  800. package/XR/features/WebXRLayers.pure.js.map +1 -1
  801. package/XR/native/nativeXRRenderTarget.d.ts +2 -2
  802. package/XR/native/nativeXRRenderTarget.js +2 -2
  803. package/XR/native/nativeXRRenderTarget.js.map +1 -1
  804. package/XR/webXRExperienceHelper.js +10 -1
  805. package/XR/webXRExperienceHelper.js.map +1 -1
  806. package/XR/webXRGraphicsBinding.d.ts +90 -0
  807. package/XR/webXRGraphicsBinding.js +85 -0
  808. package/XR/webXRGraphicsBinding.js.map +1 -0
  809. package/XR/webXRLayerRenderTargetTexture.d.ts +24 -0
  810. package/XR/webXRLayerRenderTargetTexture.js +30 -0
  811. package/XR/webXRLayerRenderTargetTexture.js.map +1 -0
  812. package/XR/webXRManagedOutputCanvas.d.ts +14 -0
  813. package/XR/webXRManagedOutputCanvas.js +24 -5
  814. package/XR/webXRManagedOutputCanvas.js.map +1 -1
  815. package/XR/webXRRenderTargetTextureProvider.d.ts +25 -4
  816. package/XR/webXRRenderTargetTextureProvider.js +33 -35
  817. package/XR/webXRRenderTargetTextureProvider.js.map +1 -1
  818. package/XR/webXRSessionManager.d.ts +11 -0
  819. package/XR/webXRSessionManager.js +37 -0
  820. package/XR/webXRSessionManager.js.map +1 -1
  821. package/XR/webXRTypes.d.ts +9 -6
  822. package/XR/webXRTypes.js.map +1 -1
  823. package/XR/webXRWebGLLayer.d.ts +2 -2
  824. package/XR/webXRWebGLLayer.js +2 -2
  825. package/XR/webXRWebGLLayer.js.map +1 -1
  826. package/XR/webXRWebGLRenderTargetTextureProvider.d.ts +12 -0
  827. package/XR/webXRWebGLRenderTargetTextureProvider.js +58 -0
  828. package/XR/webXRWebGLRenderTargetTextureProvider.js.map +1 -0
  829. package/XR/webXRWebGPURenderTargetTextureProvider.d.ts +69 -0
  830. package/XR/webXRWebGPURenderTargetTextureProvider.js +148 -0
  831. package/XR/webXRWebGPURenderTargetTextureProvider.js.map +1 -0
  832. package/index.d.ts +1 -0
  833. package/index.js +1 -0
  834. package/index.js.map +1 -1
  835. package/node.js +878 -845
  836. package/node.js.map +1 -1
  837. package/package.json +8 -14
  838. package/scene.pure.d.ts +12 -0
  839. package/scene.pure.js +36 -0
  840. package/scene.pure.js.map +1 -1
  841. package/tslib.es6.js +304 -150
@@ -1 +1 @@
1
- {"version":3,"file":"babylonFileLoader.pure.js","sourceRoot":"","sources":["../../../../../dev/core/src/Loading/Plugins/babylonFileLoader.pure.ts"],"names":[],"mappings":"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","sourcesContent":["/** This file must only contain pure code and pure imports */\r\n\r\nimport { Logger } from \"../../Misc/logger\";\r\nimport { Camera } from \"../../Cameras/camera.pure\";\r\nimport { Mesh } from \"../../Meshes/mesh.pure\";\r\nimport { Geometry } from \"../../Meshes/geometry\";\r\nimport { TransformNode } from \"../../Meshes/transformNode.pure\";\r\nimport { Material } from \"../../Materials/material.pure\";\r\nimport { MultiMaterial } from \"../../Materials/multiMaterial.pure\";\r\nimport { CubeTexture } from \"../../Materials/Textures/cubeTexture.pure\";\r\nimport { HDRCubeTexture } from \"../../Materials/Textures/hdrCubeTexture.pure\";\r\nimport { AnimationGroupParse } from \"../../Animations/animationGroup.pure\";\r\nimport { Light } from \"../../Lights/light\";\r\nimport { SceneLoaderFlags } from \"../sceneLoaderFlags\";\r\nimport { Constants } from \"../../Engines/constants\";\r\nimport { AssetContainer } from \"../../assetContainer\";\r\nimport { ActionManager } from \"../../Actions/actionManager\";\r\nimport { Skeleton } from \"../../Bones/skeleton\";\r\nimport { MorphTargetManager } from \"../../Morph/morphTargetManager\";\r\nimport { ReflectionProbe } from \"../../Probes/reflectionProbe.pure\";\r\nimport { GetClass } from \"../../Misc/typeStore\";\r\nimport { PostProcess } from \"../../PostProcesses/postProcess.pure\";\r\nimport { SpriteManager } from \"core/Sprites/spriteManager\";\r\nimport { Parse, GetIndividualParser } from \"./babylonFileParser.function\";\r\nimport { Observable } from \"../../Misc/observable.pure\";\r\nimport { type MorphTarget } from \"../../Morph/morphTarget\";\r\nimport { type Nullable } from \"../../types\";\r\nimport { type Scene } from \"../../scene.pure\";\r\nimport { Vector3 } from \"../../Maths/math.vector.pure\";\r\nimport { Color3, Color4 } from \"../../Maths/math.color.pure\";\r\nimport { type AbstractMesh } from \"../../Meshes/abstractMesh.pure\";\r\nimport { type Node } from \"../../node\";\r\nimport { SceneComponentConstants } from \"../../sceneComponent\";\r\nimport { RegisterSceneLoaderPlugin } from \"../../Loading/sceneLoader\";\r\nimport { type IParticleSystem } from \"../../Particles/IParticleSystem\";\r\nimport { CannonJSPlugin } from \"../../Physics/v1/Plugins/cannonJSPlugin.pure\";\r\nimport { OimoJSPlugin } from \"../../Physics/v1/Plugins/oimoJSPlugin\";\r\nimport { AmmoJSPlugin } from \"../../Physics/v1/Plugins/ammoJSPlugin\";\r\nimport { Texture } from \"../../Materials/Textures/texture.pure\";\r\n\r\n/** @internal */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention, no-var\r\nexport var _BabylonLoaderRegistered = true;\r\n\r\n/**\r\n * Helps setting up some configuration for the babylon file loader.\r\n */\r\nexport class BabylonFileLoaderConfiguration {\r\n /**\r\n * The loader does not allow injecting custom physics engine into the plugins.\r\n * Unfortunately in ES6, we need to manually inject them into the plugin.\r\n * So you could set this variable to your engine import to make it work.\r\n */\r\n public static LoaderInjectedPhysicsEngine: any = undefined;\r\n}\r\n\r\nlet TempIndexContainer: { [key: string]: Node } = {};\r\nexport let TempMaterialIndexContainer: { [key: string]: Material } = {};\r\nlet TempMorphTargetIndexContainer: { [key: number]: MorphTarget } = {};\r\nexport let TempMorphTargetManagerIndexContainer: { [key: string]: MorphTargetManager } = {};\r\nexport let TempSkeletonIndexContainer: { [key: number]: Skeleton } = {};\r\n\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport const logOperation = (operation: string, producer: { file: string; name: string; version: string; exporter_version: string }) => {\r\n return (\r\n operation +\r\n \" of \" +\r\n (producer ? producer.file + \" from \" + producer.name + \" version: \" + producer.version + \", exporter version: \" + producer.exporter_version : \"unknown\")\r\n );\r\n};\r\n\r\nexport const LoadDetailLevels = (scene: Scene, mesh: AbstractMesh) => {\r\n const mastermesh: Mesh = mesh as Mesh;\r\n\r\n // Every value specified in the ids array of the lod data points to another mesh which should be used as the lower LOD level.\r\n // The distances (or coverages) array values specified are used along with the lod mesh ids as a hint to determine the switching threshold for the various LODs.\r\n if (mesh._waitingData.lods) {\r\n if (mesh._waitingData.lods.ids && mesh._waitingData.lods.ids.length > 0) {\r\n const lodmeshes: string[] = mesh._waitingData.lods.ids;\r\n const wasenabled: boolean = mastermesh.isEnabled(false);\r\n if (mesh._waitingData.lods.distances) {\r\n const distances: number[] = mesh._waitingData.lods.distances;\r\n if (distances.length >= lodmeshes.length) {\r\n const culling: number = distances.length > lodmeshes.length ? distances[distances.length - 1] : 0;\r\n mastermesh.setEnabled(false);\r\n for (let index = 0; index < lodmeshes.length; index++) {\r\n const lodid: string = lodmeshes[index];\r\n const lodmesh: Mesh = scene.getMeshById(lodid) as Mesh;\r\n if (lodmesh != null) {\r\n mastermesh.addLODLevel(distances[index], lodmesh);\r\n }\r\n }\r\n if (culling > 0) {\r\n mastermesh.addLODLevel(culling, null);\r\n }\r\n if (wasenabled === true) {\r\n mastermesh.setEnabled(true);\r\n }\r\n } else {\r\n Logger.Warn(\"Invalid level of detail distances for \" + mesh.name);\r\n }\r\n }\r\n }\r\n mesh._waitingData.lods = null;\r\n }\r\n};\r\n\r\nconst FindParent = (parentId: any, parentInstanceIndex: any, scene: Scene) => {\r\n if (typeof parentId !== \"number\") {\r\n const parentEntry = scene.getLastEntryById(parentId);\r\n if (parentEntry && parentInstanceIndex !== undefined && parentInstanceIndex !== null) {\r\n const instance = (parentEntry as Mesh).instances[parseInt(parentInstanceIndex)];\r\n return instance;\r\n }\r\n return parentEntry;\r\n }\r\n\r\n const parent = TempIndexContainer[parentId];\r\n if (parent && parentInstanceIndex !== undefined && parentInstanceIndex !== null) {\r\n const instance = (parent as Mesh).instances[parseInt(parentInstanceIndex)];\r\n return instance;\r\n }\r\n\r\n return parent;\r\n};\r\n\r\nexport const FindMaterial = (materialId: any, scene: Scene) => {\r\n if (typeof materialId !== \"number\") {\r\n return scene.getLastMaterialById(materialId, true);\r\n }\r\n\r\n return TempMaterialIndexContainer[materialId];\r\n};\r\n\r\nconst FindMorphTargetManager = (managerId: any, scene: Scene) => {\r\n if (TempMorphTargetManagerIndexContainer[managerId]) {\r\n return TempMorphTargetManagerIndexContainer[managerId];\r\n }\r\n return scene.getMorphTargetManagerById(managerId);\r\n};\r\n\r\n/**\r\n * @experimental\r\n * Loads an AssetContainer from a serialized Babylon scene.\r\n * @param scene The scene to load the asset container into.\r\n * @param serializedScene The serialized scene data. This can be either a JSON string, or an object (e.g. from a call to JSON.parse).\r\n * @param rootUrl The root URL for loading assets.\r\n * @returns The loaded AssetContainer.\r\n */\r\nexport function LoadAssetContainerFromSerializedScene(scene: Scene, serializedScene: string | object, rootUrl: string): AssetContainer {\r\n return LoadAssetContainer(scene, serializedScene, rootUrl);\r\n}\r\n\r\nexport const LoadAssetContainer = (\r\n scene: Scene,\r\n data: string | object,\r\n rootUrl: string,\r\n onError?: (message: string, exception?: any) => void,\r\n addToScene = false\r\n): AssetContainer => {\r\n const container = new AssetContainer(scene);\r\n\r\n // When loading into a container (not directly into the scene), suppress entity-added\r\n // observables to prevent scene events during loading. Entities still get added to scene\r\n // arrays (so the linking code can find them), but no events fire.\r\n // They are removed from the scene at the end via container.removeAllFromScene().\r\n let savedObservables: Record<string, Observable<any>> | undefined;\r\n if (!addToScene) {\r\n savedObservables = {\r\n mesh: scene.onNewMeshAddedObservable,\r\n transformNode: scene.onNewTransformNodeAddedObservable,\r\n light: scene.onNewLightAddedObservable,\r\n camera: scene.onNewCameraAddedObservable,\r\n material: scene.onNewMaterialAddedObservable,\r\n multiMaterial: scene.onNewMultiMaterialAddedObservable,\r\n texture: scene.onNewTextureAddedObservable,\r\n skeleton: scene.onNewSkeletonAddedObservable,\r\n geometry: scene.onNewGeometryAddedObservable,\r\n animationGroup: scene.onNewAnimationGroupAddedObservable,\r\n particleSystem: scene.onNewParticleSystemAddedObservable,\r\n };\r\n scene.onNewMeshAddedObservable = new Observable();\r\n scene.onNewTransformNodeAddedObservable = new Observable();\r\n scene.onNewLightAddedObservable = new Observable();\r\n scene.onNewCameraAddedObservable = new Observable();\r\n scene.onNewMaterialAddedObservable = new Observable();\r\n scene.onNewMultiMaterialAddedObservable = new Observable();\r\n scene.onNewTextureAddedObservable = new Observable();\r\n scene.onNewSkeletonAddedObservable = new Observable();\r\n scene.onNewGeometryAddedObservable = new Observable();\r\n scene.onNewAnimationGroupAddedObservable = new Observable();\r\n scene.onNewParticleSystemAddedObservable = new Observable();\r\n }\r\n\r\n // Entire method running in try block, so ALWAYS logs as far as it got, only actually writes details\r\n // when SceneLoader.debugLogging = true (default), or exception encountered.\r\n // Everything stored in var log instead of writing separate lines to support only writing in exception,\r\n // and avoid problems with multiple concurrent .babylon loads.\r\n let log = \"importScene has failed JSON parse\";\r\n try {\r\n // eslint-disable-next-line no-var\r\n var parsedData = typeof data === \"object\" ? data : JSON.parse(data);\r\n log = \"\";\r\n const fullDetails = SceneLoaderFlags.loggingLevel === Constants.SCENELOADER_DETAILED_LOGGING;\r\n\r\n let index: number;\r\n let cache: number;\r\n\r\n // Environment texture\r\n if (parsedData.environmentTexture !== undefined && parsedData.environmentTexture !== null) {\r\n // PBR needed for both HDR texture (gamma space) & a sky box\r\n const isPBR = parsedData.isPBR !== undefined ? parsedData.isPBR : true;\r\n if (parsedData.environmentTextureType && parsedData.environmentTextureType === \"BABYLON.HDRCubeTexture\") {\r\n const hdrSize: number = parsedData.environmentTextureSize ? parsedData.environmentTextureSize : 128;\r\n const hdrTexture = new HDRCubeTexture(\r\n (parsedData.environmentTexture.match(/https?:\\/\\//g) ? \"\" : rootUrl) + parsedData.environmentTexture,\r\n scene,\r\n hdrSize,\r\n true,\r\n !isPBR,\r\n undefined,\r\n parsedData.environmentTexturePrefilterOnLoad\r\n );\r\n if (parsedData.environmentTextureRotationY) {\r\n hdrTexture.rotationY = parsedData.environmentTextureRotationY;\r\n }\r\n scene.environmentTexture = hdrTexture;\r\n } else {\r\n if (typeof parsedData.environmentTexture === \"object\") {\r\n const environmentTexture = CubeTexture.Parse(parsedData.environmentTexture, scene, rootUrl);\r\n scene.environmentTexture = environmentTexture;\r\n } else if ((parsedData.environmentTexture as string).endsWith(\".env\")) {\r\n const compressedTexture = new CubeTexture(\r\n (parsedData.environmentTexture.match(/https?:\\/\\//g) ? \"\" : rootUrl) + parsedData.environmentTexture,\r\n scene,\r\n parsedData.environmentTextureForcedExtension\r\n );\r\n if (parsedData.environmentTextureRotationY) {\r\n compressedTexture.rotationY = parsedData.environmentTextureRotationY;\r\n }\r\n scene.environmentTexture = compressedTexture;\r\n } else {\r\n const cubeTexture = CubeTexture.CreateFromPrefilteredData(\r\n (parsedData.environmentTexture.match(/https?:\\/\\//g) ? \"\" : rootUrl) + parsedData.environmentTexture,\r\n scene,\r\n parsedData.environmentTextureForcedExtension\r\n );\r\n if (parsedData.environmentTextureRotationY) {\r\n cubeTexture.rotationY = parsedData.environmentTextureRotationY;\r\n }\r\n scene.environmentTexture = cubeTexture;\r\n }\r\n }\r\n if (parsedData.createDefaultSkybox === true) {\r\n const skyboxScale = scene.activeCamera !== undefined && scene.activeCamera !== null ? (scene.activeCamera.maxZ - scene.activeCamera.minZ) / 2 : 1000;\r\n const skyboxBlurLevel = parsedData.skyboxBlurLevel || 0;\r\n scene.createDefaultSkybox(scene.environmentTexture, isPBR, skyboxScale, skyboxBlurLevel);\r\n }\r\n container.environmentTexture = scene.environmentTexture;\r\n }\r\n\r\n // Environment Intensity\r\n if (parsedData.environmentIntensity !== undefined && parsedData.environmentIntensity !== null) {\r\n scene.environmentIntensity = parsedData.environmentIntensity;\r\n }\r\n\r\n // IBL Intensity\r\n if (parsedData.iblIntensity !== undefined && parsedData.iblIntensity !== null) {\r\n scene.iblIntensity = parsedData.iblIntensity;\r\n }\r\n\r\n // Lights\r\n if (parsedData.lights !== undefined && parsedData.lights !== null) {\r\n for (index = 0, cache = parsedData.lights.length; index < cache; index++) {\r\n const parsedLight = parsedData.lights[index];\r\n const light = Light.Parse(parsedLight, scene);\r\n if (light) {\r\n TempIndexContainer[parsedLight.uniqueId] = light;\r\n container.lights.push(light);\r\n light._parentContainer = container;\r\n log += index === 0 ? \"\\n\\tLights:\" : \"\";\r\n log += \"\\n\\t\\t\" + light.toString(fullDetails);\r\n }\r\n }\r\n }\r\n\r\n // Reflection probes\r\n if (parsedData.reflectionProbes !== undefined && parsedData.reflectionProbes !== null) {\r\n for (index = 0, cache = parsedData.reflectionProbes.length; index < cache; index++) {\r\n const parsedReflectionProbe = parsedData.reflectionProbes[index];\r\n const reflectionProbe = ReflectionProbe.Parse(parsedReflectionProbe, scene, rootUrl);\r\n if (reflectionProbe) {\r\n container.reflectionProbes.push(reflectionProbe);\r\n reflectionProbe._parentContainer = container;\r\n log += index === 0 ? \"\\n\\tReflection Probes:\" : \"\";\r\n log += \"\\n\\t\\t\" + reflectionProbe.toString(fullDetails);\r\n }\r\n }\r\n }\r\n\r\n // Animations\r\n if (parsedData.animations !== undefined && parsedData.animations !== null) {\r\n for (index = 0, cache = parsedData.animations.length; index < cache; index++) {\r\n const parsedAnimation = parsedData.animations[index];\r\n const internalClass = GetClass(\"BABYLON.Animation\");\r\n if (internalClass) {\r\n const animation = internalClass.Parse(parsedAnimation);\r\n scene.animations.push(animation);\r\n container.animations.push(animation);\r\n log += index === 0 ? \"\\n\\tAnimations:\" : \"\";\r\n log += \"\\n\\t\\t\" + animation.toString(fullDetails);\r\n }\r\n }\r\n }\r\n\r\n // Materials\r\n if (parsedData.materials !== undefined && parsedData.materials !== null) {\r\n for (index = 0, cache = parsedData.materials.length; index < cache; index++) {\r\n const parsedMaterial = parsedData.materials[index];\r\n const mat = Material.Parse(parsedMaterial, scene, rootUrl);\r\n if (mat) {\r\n TempMaterialIndexContainer[parsedMaterial.uniqueId || parsedMaterial.id] = mat;\r\n container.materials.push(mat);\r\n mat._parentContainer = container;\r\n log += index === 0 ? \"\\n\\tMaterials:\" : \"\";\r\n log += \"\\n\\t\\t\" + mat.toString(fullDetails);\r\n\r\n // Textures\r\n const textures = mat.getActiveTextures();\r\n for (const t of textures) {\r\n if (container.textures.indexOf(t) == -1) {\r\n container.textures.push(t);\r\n t._parentContainer = container;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (parsedData.textures !== undefined && parsedData.textures !== null) {\r\n for (index = 0, cache = parsedData.textures.length; index < cache; index++) {\r\n const parsedTexture = parsedData.textures[index];\r\n const texture = Texture.Parse(parsedTexture, scene, rootUrl);\r\n if (texture) {\r\n if (container.textures.indexOf(texture) == -1) {\r\n container.textures.push(texture);\r\n texture._parentContainer = container;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (parsedData.multiMaterials !== undefined && parsedData.multiMaterials !== null) {\r\n for (index = 0, cache = parsedData.multiMaterials.length; index < cache; index++) {\r\n const parsedMultiMaterial = parsedData.multiMaterials[index];\r\n const mmat = MultiMaterial.ParseMultiMaterial(parsedMultiMaterial, scene);\r\n TempMaterialIndexContainer[parsedMultiMaterial.uniqueId || parsedMultiMaterial.id] = mmat;\r\n container.multiMaterials.push(mmat);\r\n mmat._parentContainer = container;\r\n\r\n log += index === 0 ? \"\\n\\tMultiMaterials:\" : \"\";\r\n log += \"\\n\\t\\t\" + mmat.toString(fullDetails);\r\n\r\n // Textures\r\n const textures = mmat.getActiveTextures();\r\n for (const t of textures) {\r\n if (container.textures.indexOf(t) == -1) {\r\n container.textures.push(t);\r\n t._parentContainer = container;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Morph target managers\r\n if (parsedData.morphTargetManagers !== undefined && parsedData.morphTargetManagers !== null) {\r\n for (const parsedManager of parsedData.morphTargetManagers) {\r\n const manager = MorphTargetManager.Parse(parsedManager, scene);\r\n TempMorphTargetManagerIndexContainer[parsedManager.id] = manager;\r\n container.morphTargetManagers.push(manager);\r\n manager._parentContainer = container;\r\n\r\n // Morph targets - add to TempMorphTargetIndexContainer to later connect animations -> morph targets\r\n for (let index = 0; index < parsedManager.targets.length; index++) {\r\n const parsedTarget = parsedManager.targets[index];\r\n if (parsedTarget.uniqueId !== undefined && parsedTarget.uniqueId !== null) {\r\n const target = manager.getTarget(index);\r\n TempMorphTargetIndexContainer[parsedTarget.uniqueId] = target;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Skeletons\r\n if (parsedData.skeletons !== undefined && parsedData.skeletons !== null) {\r\n for (index = 0, cache = parsedData.skeletons.length; index < cache; index++) {\r\n const parsedSkeleton = parsedData.skeletons[index];\r\n const skeleton = Skeleton.Parse(parsedSkeleton, scene);\r\n if (parsedSkeleton.uniqueId !== undefined && parsedSkeleton.uniqueId !== null) {\r\n TempSkeletonIndexContainer[parsedSkeleton.uniqueId] = skeleton;\r\n }\r\n container.skeletons.push(skeleton);\r\n skeleton._parentContainer = container;\r\n log += index === 0 ? \"\\n\\tSkeletons:\" : \"\";\r\n log += \"\\n\\t\\t\" + skeleton.toString(fullDetails);\r\n\r\n // Bones - add to TempIndexContainer to later connect animations -> bones\r\n for (let boneIndex = 0; boneIndex < parsedSkeleton.bones.length; boneIndex++) {\r\n const parsedBone = parsedSkeleton.bones[boneIndex];\r\n const bone = skeleton.bones[boneIndex]; // This was instantiated in Skeleton.Parse\r\n TempIndexContainer[parsedBone.uniqueId] = bone;\r\n }\r\n }\r\n }\r\n\r\n // Geometries\r\n const geometries = parsedData.geometries;\r\n if (geometries !== undefined && geometries !== null) {\r\n const addedGeometry = new Array<Nullable<Geometry>>();\r\n\r\n // VertexData\r\n const vertexData = geometries.vertexData;\r\n if (vertexData !== undefined && vertexData !== null) {\r\n for (index = 0, cache = vertexData.length; index < cache; index++) {\r\n const parsedVertexData = vertexData[index];\r\n\r\n addedGeometry.push(Geometry.Parse(parsedVertexData, scene, rootUrl));\r\n }\r\n }\r\n\r\n for (const g of addedGeometry) {\r\n if (g) {\r\n container.geometries.push(g);\r\n g._parentContainer = container;\r\n }\r\n }\r\n }\r\n\r\n // Transform nodes\r\n if (parsedData.transformNodes !== undefined && parsedData.transformNodes !== null) {\r\n for (index = 0, cache = parsedData.transformNodes.length; index < cache; index++) {\r\n const parsedTransformNode = parsedData.transformNodes[index];\r\n const node = TransformNode.Parse(parsedTransformNode, scene, rootUrl);\r\n TempIndexContainer[parsedTransformNode.uniqueId] = node;\r\n container.transformNodes.push(node);\r\n node._parentContainer = container;\r\n }\r\n }\r\n\r\n // Meshes\r\n if (parsedData.meshes !== undefined && parsedData.meshes !== null) {\r\n for (index = 0, cache = parsedData.meshes.length; index < cache; index++) {\r\n const parsedMesh = parsedData.meshes[index];\r\n const mesh = <AbstractMesh>Mesh.Parse(parsedMesh, scene, rootUrl);\r\n TempIndexContainer[parsedMesh.uniqueId] = mesh;\r\n container.meshes.push(mesh);\r\n mesh._parentContainer = container;\r\n if (mesh.hasInstances) {\r\n for (const instance of (mesh as Mesh).instances) {\r\n container.meshes.push(instance);\r\n instance._parentContainer = container;\r\n }\r\n }\r\n // Load partProxies from GaussianSplattingMesh into AssetContainer\r\n if (mesh.getClassName() === \"GaussianSplattingMesh\") {\r\n const partProxies = (mesh as any)._partProxies as AbstractMesh[] | Map<number, AbstractMesh> | undefined;\r\n const proxies = Array.isArray(partProxies) ? partProxies : partProxies ? Array.from(partProxies.values()) : [];\r\n for (const partProxy of proxies) {\r\n if (!partProxy) {\r\n continue;\r\n }\r\n container.meshes.push(partProxy);\r\n partProxy._parentContainer = container;\r\n if (partProxy._waitingParsedUniqueId != null) {\r\n TempIndexContainer[partProxy._waitingParsedUniqueId] = partProxy;\r\n }\r\n }\r\n }\r\n log += index === 0 ? \"\\n\\tMeshes:\" : \"\";\r\n log += \"\\n\\t\\t\" + mesh.toString(fullDetails);\r\n }\r\n }\r\n\r\n // Cameras\r\n if (parsedData.cameras !== undefined && parsedData.cameras !== null) {\r\n for (index = 0, cache = parsedData.cameras.length; index < cache; index++) {\r\n const parsedCamera = parsedData.cameras[index];\r\n const camera = Camera.Parse(parsedCamera, scene);\r\n TempIndexContainer[parsedCamera.uniqueId] = camera;\r\n container.cameras.push(camera);\r\n camera._parentContainer = container;\r\n log += index === 0 ? \"\\n\\tCameras:\" : \"\";\r\n log += \"\\n\\t\\t\" + camera.toString(fullDetails);\r\n }\r\n }\r\n\r\n // Postprocesses\r\n if (parsedData.postProcesses !== undefined && parsedData.postProcesses !== null) {\r\n for (index = 0, cache = parsedData.postProcesses.length; index < cache; index++) {\r\n const parsedPostProcess = parsedData.postProcesses[index];\r\n const postProcess = PostProcess.Parse(parsedPostProcess, scene, rootUrl);\r\n if (postProcess) {\r\n container.postProcesses.push(postProcess);\r\n postProcess._parentContainer = container;\r\n log += index === 0 ? \"\\nPostprocesses:\" : \"\";\r\n log += \"\\n\\t\\t\" + postProcess.toString();\r\n }\r\n }\r\n }\r\n\r\n // Animation Groups\r\n if (parsedData.animationGroups !== undefined && parsedData.animationGroups !== null && parsedData.animationGroups.length) {\r\n // Build the nodeMap only for scenes with animationGroups.\r\n let nodeMap: Nullable<Map<Node[\"id\"], Node>> = null;\r\n\r\n // Helper to get nodes by id more efficiently, building the nodeMap only on first access.\r\n const getNodeById = (id: Node[\"id\"]) => {\r\n if (!nodeMap) {\r\n nodeMap = new Map<Node[\"id\"], Node>();\r\n\r\n // Nodes in scene does not change when parsing animationGroups, so it's safe to build a map.\r\n // This follows the order of scene.getNodeById: mesh, transformNode, light, camera, bone\r\n for (let index = 0; index < scene.meshes.length; index++) {\r\n // This follows the behavior of scene.getXXXById, which picks the first match\r\n if (!nodeMap.has(scene.meshes[index].id)) {\r\n nodeMap.set(scene.meshes[index].id, scene.meshes[index]);\r\n }\r\n }\r\n for (let index = 0; index < scene.transformNodes.length; index++) {\r\n if (!nodeMap.has(scene.transformNodes[index].id)) {\r\n nodeMap.set(scene.transformNodes[index].id, scene.transformNodes[index]);\r\n }\r\n }\r\n for (let index = 0; index < scene.lights.length; index++) {\r\n if (!nodeMap.has(scene.lights[index].id)) {\r\n nodeMap.set(scene.lights[index].id, scene.lights[index]);\r\n }\r\n }\r\n for (let index = 0; index < scene.cameras.length; index++) {\r\n if (!nodeMap.has(scene.cameras[index].id)) {\r\n nodeMap.set(scene.cameras[index].id, scene.cameras[index]);\r\n }\r\n }\r\n for (let skeletonIndex = 0; skeletonIndex < scene.skeletons.length; skeletonIndex++) {\r\n const skeleton = scene.skeletons[skeletonIndex];\r\n for (let boneIndex = 0; boneIndex < skeleton.bones.length; boneIndex++) {\r\n if (!nodeMap.has(skeleton.bones[boneIndex].id)) {\r\n nodeMap.set(skeleton.bones[boneIndex].id, skeleton.bones[boneIndex]);\r\n }\r\n }\r\n }\r\n }\r\n\r\n return nodeMap.get(id);\r\n };\r\n\r\n const targetLookup = (parsedTargetAnimation: any) => {\r\n let target = null;\r\n const isMorphTarget = parsedTargetAnimation.animation.property === \"influence\";\r\n const uniqueId = parsedTargetAnimation.targetUniqueId;\r\n\r\n // Attempt to find animation targets by uniqueId first (tracked in TempXXXIndexContainer).\r\n if (uniqueId !== undefined && uniqueId !== null) {\r\n target = isMorphTarget ? TempMorphTargetIndexContainer[uniqueId] : TempIndexContainer[uniqueId];\r\n }\r\n\r\n // Backwards compatibility: If no uniqueId is provided or no match is found,\r\n // fall back to searching by id in the scene.\r\n if (!target) {\r\n const id = parsedTargetAnimation.targetId;\r\n target = isMorphTarget ? scene.getMorphTargetById(id) : getNodeById(id);\r\n }\r\n\r\n return target;\r\n };\r\n\r\n for (index = 0, cache = parsedData.animationGroups.length; index < cache; index++) {\r\n const parsedAnimationGroup = parsedData.animationGroups[index];\r\n const animationGroup = AnimationGroupParse(parsedAnimationGroup, scene, targetLookup);\r\n container.animationGroups.push(animationGroup);\r\n animationGroup._parentContainer = container;\r\n log += index === 0 ? \"\\n\\tAnimationGroups:\" : \"\";\r\n log += \"\\n\\t\\t\" + animationGroup.toString(fullDetails);\r\n }\r\n }\r\n\r\n // Sprites\r\n if (parsedData.spriteManagers) {\r\n for (let index = 0, cache = parsedData.spriteManagers.length; index < cache; index++) {\r\n const parsedSpriteManager = parsedData.spriteManagers[index];\r\n const spriteManager = SpriteManager.Parse(parsedSpriteManager, scene, rootUrl);\r\n container.spriteManagers.push(spriteManager);\r\n spriteManager._parentContainer = container;\r\n log += \"\\n\\t\\tSpriteManager \" + spriteManager.name;\r\n }\r\n }\r\n\r\n // Browsing all the graph to connect the dots\r\n for (index = 0, cache = scene.cameras.length; index < cache; index++) {\r\n const camera = scene.cameras[index];\r\n if (camera._waitingParentId !== null) {\r\n camera.parent = FindParent(camera._waitingParentId, camera._waitingParentInstanceIndex, scene);\r\n camera._waitingParentId = null;\r\n camera._waitingParentInstanceIndex = null;\r\n }\r\n }\r\n\r\n for (index = 0, cache = scene.lights.length; index < cache; index++) {\r\n const light = scene.lights[index];\r\n if (light && light._waitingParentId !== null) {\r\n light.parent = FindParent(light._waitingParentId, light._waitingParentInstanceIndex, scene);\r\n light._waitingParentId = null;\r\n light._waitingParentInstanceIndex = null;\r\n }\r\n }\r\n\r\n // Connect parents & children and parse actions and lods\r\n for (index = 0, cache = scene.transformNodes.length; index < cache; index++) {\r\n const transformNode = scene.transformNodes[index];\r\n if (transformNode._waitingParentId !== null) {\r\n transformNode.parent = FindParent(transformNode._waitingParentId, transformNode._waitingParentInstanceIndex, scene);\r\n transformNode._waitingParentId = null;\r\n transformNode._waitingParentInstanceIndex = null;\r\n }\r\n }\r\n for (index = 0, cache = scene.meshes.length; index < cache; index++) {\r\n const mesh = scene.meshes[index];\r\n if (mesh._waitingParentId !== null) {\r\n mesh.parent = FindParent(mesh._waitingParentId, mesh._waitingParentInstanceIndex, scene);\r\n mesh._waitingParentId = null;\r\n mesh._waitingParentInstanceIndex = null;\r\n }\r\n if (mesh._waitingData.lods) {\r\n LoadDetailLevels(scene, mesh);\r\n }\r\n }\r\n\r\n // link multimats with materials\r\n for (const multimat of scene.multiMaterials) {\r\n for (const subMaterial of multimat._waitingSubMaterialsUniqueIds) {\r\n multimat.subMaterials.push(FindMaterial(subMaterial, scene));\r\n }\r\n multimat._waitingSubMaterialsUniqueIds = [];\r\n }\r\n\r\n // link meshes with materials\r\n for (const mesh of scene.meshes) {\r\n if (mesh._waitingMaterialId !== null) {\r\n mesh.material = FindMaterial(mesh._waitingMaterialId, scene);\r\n mesh._waitingMaterialId = null;\r\n }\r\n }\r\n\r\n // link meshes with morph target managers\r\n for (const mesh of scene.meshes) {\r\n if (mesh._waitingMorphTargetManagerId !== null) {\r\n mesh.morphTargetManager = FindMorphTargetManager(mesh._waitingMorphTargetManagerId, scene);\r\n mesh._waitingMorphTargetManagerId = null;\r\n }\r\n }\r\n\r\n // link meshes with skeletons\r\n for (const mesh of scene.meshes) {\r\n // First try to get it via uniqueId\r\n if (mesh._waitingSkeletonUniqueId !== null) {\r\n mesh.skeleton = TempSkeletonIndexContainer[mesh._waitingSkeletonUniqueId];\r\n }\r\n\r\n // If not possible or not found, try to get it from the scene (backwards compatibility)\r\n if (mesh._waitingSkeletonId !== null && !mesh.skeleton) {\r\n mesh.skeleton = scene.getLastSkeletonById(mesh._waitingSkeletonId);\r\n }\r\n\r\n mesh._waitingSkeletonId = null;\r\n mesh._waitingSkeletonUniqueId = null;\r\n }\r\n\r\n // link bones to transform nodes\r\n for (index = 0, cache = scene.skeletons.length; index < cache; index++) {\r\n const skeleton = scene.skeletons[index];\r\n if (skeleton._hasWaitingData) {\r\n if (skeleton.bones != null) {\r\n for (const bone of skeleton.bones) {\r\n let linkTransformNode: Nullable<Node> = null;\r\n // First try to get it via uniqueId\r\n if (bone._waitingTransformNodeUniqueId !== null) {\r\n linkTransformNode = TempIndexContainer[bone._waitingTransformNodeUniqueId];\r\n }\r\n\r\n // If not possible or not found, try to get it from the scene (backwards compatibility)\r\n if (bone._waitingTransformNodeId !== null && !linkTransformNode) {\r\n linkTransformNode = scene.getLastEntryById(bone._waitingTransformNodeId);\r\n }\r\n\r\n if (linkTransformNode) {\r\n bone.linkTransformNode(linkTransformNode as TransformNode);\r\n }\r\n\r\n bone._waitingTransformNodeId = null;\r\n bone._waitingTransformNodeUniqueId = null;\r\n }\r\n }\r\n\r\n skeleton._hasWaitingData = null;\r\n }\r\n }\r\n\r\n // freeze world matrix application\r\n for (index = 0, cache = scene.transformNodes.length; index < cache; index++) {\r\n const currentTransformNode = scene.transformNodes[index];\r\n if (currentTransformNode._waitingFreezeWorldMatrix) {\r\n currentTransformNode.freezeWorldMatrix();\r\n currentTransformNode._waitingFreezeWorldMatrix = null;\r\n }\r\n }\r\n for (index = 0, cache = scene.meshes.length; index < cache; index++) {\r\n const currentMesh = scene.meshes[index];\r\n if (currentMesh._waitingData.freezeWorldMatrix) {\r\n currentMesh.freezeWorldMatrix();\r\n currentMesh._waitingData.freezeWorldMatrix = null;\r\n } else {\r\n currentMesh.computeWorldMatrix(true);\r\n }\r\n }\r\n\r\n // Lights exclusions / inclusions\r\n for (index = 0, cache = scene.lights.length; index < cache; index++) {\r\n const light = scene.lights[index];\r\n // Excluded check\r\n if (light._excludedMeshesIds.length > 0) {\r\n for (let excludedIndex = 0; excludedIndex < light._excludedMeshesIds.length; excludedIndex++) {\r\n const excludedMesh = scene.getMeshById(light._excludedMeshesIds[excludedIndex]);\r\n\r\n if (excludedMesh) {\r\n light.excludedMeshes.push(excludedMesh);\r\n }\r\n }\r\n\r\n light._excludedMeshesIds = [];\r\n }\r\n\r\n // Included check\r\n if (light._includedOnlyMeshesIds.length > 0) {\r\n for (let includedOnlyIndex = 0; includedOnlyIndex < light._includedOnlyMeshesIds.length; includedOnlyIndex++) {\r\n const includedOnlyMesh = scene.getMeshById(light._includedOnlyMeshesIds[includedOnlyIndex]);\r\n\r\n if (includedOnlyMesh) {\r\n light.includedOnlyMeshes.push(includedOnlyMesh);\r\n }\r\n }\r\n\r\n light._includedOnlyMeshesIds = [];\r\n }\r\n }\r\n\r\n for (const g of scene.geometries) {\r\n g._loadedUniqueId = \"\";\r\n }\r\n\r\n Parse(parsedData, scene, container, rootUrl);\r\n\r\n // Actions (scene) Done last as it can access other objects.\r\n for (index = 0, cache = scene.meshes.length; index < cache; index++) {\r\n const mesh = scene.meshes[index];\r\n if (mesh._waitingData.actions) {\r\n ActionManager.Parse(mesh._waitingData.actions, mesh, scene);\r\n mesh._waitingData.actions = null;\r\n }\r\n }\r\n if (parsedData.actions !== undefined && parsedData.actions !== null) {\r\n ActionManager.Parse(parsedData.actions, null, scene);\r\n }\r\n } catch (err) {\r\n const msg = logOperation(\"loadAssets\", parsedData ? parsedData.producer : \"Unknown\") + log;\r\n if (onError) {\r\n onError(msg, err);\r\n } else {\r\n Logger.Log(msg);\r\n throw err;\r\n }\r\n } finally {\r\n TempIndexContainer = {};\r\n TempMaterialIndexContainer = {};\r\n TempMorphTargetIndexContainer = {};\r\n TempMorphTargetManagerIndexContainer = {};\r\n TempSkeletonIndexContainer = {};\r\n\r\n if (!addToScene) {\r\n // Restore observables before removing from scene\r\n if (savedObservables) {\r\n scene.onNewMeshAddedObservable = savedObservables.mesh;\r\n scene.onNewTransformNodeAddedObservable = savedObservables.transformNode;\r\n scene.onNewLightAddedObservable = savedObservables.light;\r\n scene.onNewCameraAddedObservable = savedObservables.camera;\r\n scene.onNewMaterialAddedObservable = savedObservables.material;\r\n scene.onNewMultiMaterialAddedObservable = savedObservables.multiMaterial;\r\n scene.onNewTextureAddedObservable = savedObservables.texture;\r\n scene.onNewSkeletonAddedObservable = savedObservables.skeleton;\r\n scene.onNewGeometryAddedObservable = savedObservables.geometry;\r\n scene.onNewAnimationGroupAddedObservable = savedObservables.animationGroup;\r\n scene.onNewParticleSystemAddedObservable = savedObservables.particleSystem;\r\n }\r\n // Removes entities from scene arrays and moves them to the container\r\n container.removeAllFromScene();\r\n }\r\n if (log !== null && SceneLoaderFlags.loggingLevel !== Constants.SCENELOADER_NO_LOGGING) {\r\n Logger.Log(\r\n logOperation(\"loadAssets\", parsedData ? parsedData.producer : \"Unknown\") + (SceneLoaderFlags.loggingLevel !== Constants.SCENELOADER_MINIMAL_LOGGING ? log : \"\")\r\n );\r\n }\r\n }\r\n\r\n return container;\r\n};\r\n\r\nlet _Registered = false;\r\n/**\r\n * Register side effects for babylonFileLoader.\r\n * Safe to call multiple times; only the first call has an effect.\r\n */\r\nexport function RegisterBabylonFileLoader(): void {\r\n if (_Registered) {\r\n return;\r\n }\r\n _Registered = true;\r\n\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n const ParseMaterialByPredicate = (predicate: (parsedMaterial: any) => boolean, parsedData: any, scene: Scene, rootUrl: string) => {\r\n if (!parsedData.materials) {\r\n return null;\r\n }\r\n\r\n for (let index = 0, cache = parsedData.materials.length; index < cache; index++) {\r\n const parsedMaterial = parsedData.materials[index];\r\n if (predicate(parsedMaterial)) {\r\n return { parsedMaterial, material: Material.Parse(parsedMaterial, scene, rootUrl) };\r\n }\r\n }\r\n return null;\r\n };\r\n\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n const IsDescendantOf = (mesh: any, names: Array<any>, hierarchyIds: Array<number>) => {\r\n for (const i in names) {\r\n if (mesh.name === names[i]) {\r\n hierarchyIds.push(mesh.id);\r\n return true;\r\n }\r\n }\r\n if (mesh.parentId !== undefined && hierarchyIds.indexOf(mesh.parentId) !== -1) {\r\n hierarchyIds.push(mesh.id);\r\n return true;\r\n }\r\n return false;\r\n };\r\n\r\n RegisterSceneLoaderPlugin({\r\n name: \"babylon.js\",\r\n extensions: \".babylon\",\r\n canDirectLoad: (data: string) => {\r\n if (data.indexOf(\"babylon\") !== -1) {\r\n // We consider that the producer string is filled\r\n return true;\r\n }\r\n\r\n return false;\r\n },\r\n importMesh: (\r\n meshesNames: any,\r\n scene: Scene,\r\n data: any,\r\n rootUrl: string,\r\n meshes: AbstractMesh[],\r\n particleSystems: IParticleSystem[],\r\n skeletons: Skeleton[],\r\n onError?: (message: string, exception?: any) => void\r\n ): boolean => {\r\n // Entire method running in try block, so ALWAYS logs as far as it got, only actually writes details\r\n // when SceneLoader.debugLogging = true (default), or exception encountered.\r\n // Everything stored in var log instead of writing separate lines to support only writing in exception,\r\n // and avoid problems with multiple concurrent .babylon loads.\r\n let log = \"importMesh has failed JSON parse\";\r\n try {\r\n // eslint-disable-next-line no-var\r\n var parsedData = JSON.parse(data);\r\n log = \"\";\r\n const fullDetails = SceneLoaderFlags.loggingLevel === Constants.SCENELOADER_DETAILED_LOGGING;\r\n if (!meshesNames) {\r\n meshesNames = null;\r\n } else if (!Array.isArray(meshesNames)) {\r\n meshesNames = [meshesNames];\r\n }\r\n\r\n const hierarchyIds: number[] = [];\r\n const parsedIdToNodeMap = new Map<number, Node>();\r\n\r\n // Transform nodes (the overall idea is to load all of them as this is super fast and then get rid of the ones we don't need)\r\n const loadedTransformNodes = [];\r\n if (parsedData.transformNodes !== undefined && parsedData.transformNodes !== null) {\r\n for (let index = 0, cache = parsedData.transformNodes.length; index < cache; index++) {\r\n const parsedJSONTransformNode = parsedData.transformNodes[index];\r\n const parsedTransformNode = TransformNode.Parse(parsedJSONTransformNode, scene, rootUrl);\r\n loadedTransformNodes.push(parsedTransformNode);\r\n parsedIdToNodeMap.set(parsedTransformNode._waitingParsedUniqueId!, parsedTransformNode);\r\n parsedTransformNode._waitingParsedUniqueId = null;\r\n }\r\n }\r\n if (parsedData.meshes !== undefined && parsedData.meshes !== null) {\r\n const loadedSkeletonsIds = [];\r\n const loadedMaterialsIds: string[] = [];\r\n const loadedMaterialsUniqueIds: string[] = [];\r\n const loadedMorphTargetManagerIds: number[] = [];\r\n for (let index = 0, cache = parsedData.meshes.length; index < cache; index++) {\r\n const parsedMesh = parsedData.meshes[index];\r\n\r\n if (meshesNames === null || IsDescendantOf(parsedMesh, meshesNames, hierarchyIds)) {\r\n if (meshesNames !== null) {\r\n // Remove found mesh name from list.\r\n delete meshesNames[meshesNames.indexOf(parsedMesh.name)];\r\n }\r\n\r\n //Geometry?\r\n if (parsedMesh.geometryId !== undefined && parsedMesh.geometryId !== null) {\r\n //does the file contain geometries?\r\n if (parsedData.geometries !== undefined && parsedData.geometries !== null) {\r\n //find the correct geometry and add it to the scene\r\n let found: boolean = false;\r\n const geoms = [\"boxes\", \"spheres\", \"cylinders\", \"toruses\", \"grounds\", \"planes\", \"torusKnots\", \"vertexData\"];\r\n for (const geometryType of geoms) {\r\n if (!parsedData.geometries[geometryType] || !Array.isArray(parsedData.geometries[geometryType])) {\r\n continue;\r\n }\r\n const geom = parsedData.geometries[geometryType];\r\n for (const parsedGeometryData of geom) {\r\n if (parsedGeometryData.id === parsedMesh.geometryId) {\r\n switch (geometryType) {\r\n case \"vertexData\":\r\n Geometry.Parse(parsedGeometryData, scene, rootUrl);\r\n break;\r\n }\r\n found = true;\r\n break;\r\n }\r\n }\r\n\r\n if (found) {\r\n break;\r\n }\r\n }\r\n if (found === false) {\r\n Logger.Warn(\"Geometry not found for mesh \" + parsedMesh.id);\r\n }\r\n }\r\n }\r\n\r\n // Material ?\r\n if (parsedMesh.materialUniqueId || parsedMesh.materialId) {\r\n // if we have a unique ID, look up and store in loadedMaterialsUniqueIds, else use loadedMaterialsIds\r\n const materialArray = parsedMesh.materialUniqueId ? loadedMaterialsUniqueIds : loadedMaterialsIds;\r\n let materialFound = materialArray.indexOf(parsedMesh.materialUniqueId || parsedMesh.materialId) !== -1;\r\n if (materialFound === false && parsedData.multiMaterials !== undefined && parsedData.multiMaterials !== null) {\r\n // Loads a submaterial of a multimaterial\r\n const loadSubMaterial = (subMatId: string, predicate: (parsedMaterial: any) => boolean) => {\r\n materialArray.push(subMatId);\r\n const mat = ParseMaterialByPredicate(predicate, parsedData, scene, rootUrl);\r\n if (mat && mat.material) {\r\n TempMaterialIndexContainer[mat.parsedMaterial.uniqueId || mat.parsedMaterial.id] = mat.material;\r\n log += \"\\n\\tMaterial \" + mat.material.toString(fullDetails);\r\n }\r\n };\r\n for (let multimatIndex = 0, multimatCache = parsedData.multiMaterials.length; multimatIndex < multimatCache; multimatIndex++) {\r\n const parsedMultiMaterial = parsedData.multiMaterials[multimatIndex];\r\n if (\r\n (parsedMesh.materialUniqueId && parsedMultiMaterial.uniqueId === parsedMesh.materialUniqueId) ||\r\n parsedMultiMaterial.id === parsedMesh.materialId\r\n ) {\r\n if (parsedMultiMaterial.materialsUniqueIds) {\r\n // if the materials inside the multimat are stored by unique id\r\n for (const subMatId of parsedMultiMaterial.materialsUniqueIds) {\r\n loadSubMaterial(subMatId, (parsedMaterial) => parsedMaterial.uniqueId === subMatId);\r\n }\r\n } else {\r\n // if the mats are stored by id instead\r\n for (const subMatId of parsedMultiMaterial.materials) {\r\n loadSubMaterial(subMatId, (parsedMaterial) => parsedMaterial.id === subMatId);\r\n }\r\n }\r\n materialArray.push(parsedMultiMaterial.uniqueId || parsedMultiMaterial.id);\r\n const mmat = MultiMaterial.ParseMultiMaterial(parsedMultiMaterial, scene);\r\n TempMaterialIndexContainer[parsedMultiMaterial.uniqueId || parsedMultiMaterial.id] = mmat;\r\n if (mmat) {\r\n materialFound = true;\r\n log += \"\\n\\tMulti-Material \" + mmat.toString(fullDetails);\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (materialFound === false) {\r\n materialArray.push(parsedMesh.materialUniqueId || parsedMesh.materialId);\r\n const mat = ParseMaterialByPredicate(\r\n (parsedMaterial) =>\r\n (parsedMesh.materialUniqueId && parsedMaterial.uniqueId === parsedMesh.materialUniqueId) || parsedMaterial.id === parsedMesh.materialId,\r\n parsedData,\r\n scene,\r\n rootUrl\r\n );\r\n if (!mat || !mat.material) {\r\n Logger.Warn(\"Material not found for mesh \" + parsedMesh.id);\r\n } else {\r\n TempMaterialIndexContainer[mat.parsedMaterial.uniqueId || mat.parsedMaterial.id] = mat.material;\r\n log += \"\\n\\tMaterial \" + mat.material.toString(fullDetails);\r\n }\r\n }\r\n }\r\n\r\n // Skeleton ?\r\n if (\r\n parsedMesh.skeletonId !== null &&\r\n parsedMesh.skeletonId !== undefined &&\r\n parsedData.skeletonId !== -1 &&\r\n parsedData.skeletons !== undefined &&\r\n parsedData.skeletons !== null\r\n ) {\r\n const skeletonAlreadyLoaded = loadedSkeletonsIds.indexOf(parsedMesh.skeletonId) > -1;\r\n if (!skeletonAlreadyLoaded) {\r\n for (let skeletonIndex = 0, skeletonCache = parsedData.skeletons.length; skeletonIndex < skeletonCache; skeletonIndex++) {\r\n const parsedSkeleton = parsedData.skeletons[skeletonIndex];\r\n if (parsedSkeleton.id === parsedMesh.skeletonId) {\r\n const skeleton = Skeleton.Parse(parsedSkeleton, scene);\r\n loadedSkeletonsIds.push(parsedSkeleton.id);\r\n if (parsedSkeleton.uniqueId !== undefined && parsedSkeleton.uniqueId !== null) {\r\n TempSkeletonIndexContainer[parsedSkeleton.uniqueId] = skeleton;\r\n }\r\n skeletons.push(skeleton);\r\n log += \"\\n\\tSkeleton \" + skeleton.toString(fullDetails);\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Morph target managers ?\r\n if (parsedMesh.morphTargetManagerId > -1 && parsedData.morphTargetManagers !== undefined && parsedData.morphTargetManagers !== null) {\r\n const morphTargetManagerAlreadyLoaded = loadedMorphTargetManagerIds.indexOf(parsedMesh.morphTargetManagerId) > -1;\r\n if (!morphTargetManagerAlreadyLoaded) {\r\n for (let morphTargetManagerIndex = 0; morphTargetManagerIndex < parsedData.morphTargetManagers.length; morphTargetManagerIndex++) {\r\n const parsedManager = parsedData.morphTargetManagers[morphTargetManagerIndex];\r\n if (parsedManager.id === parsedMesh.morphTargetManagerId) {\r\n const morphTargetManager = MorphTargetManager.Parse(parsedManager, scene);\r\n TempMorphTargetManagerIndexContainer[parsedManager.id] = morphTargetManager;\r\n loadedMorphTargetManagerIds.push(parsedManager.id);\r\n log += \"\\nMorph target manager\" + morphTargetManager.toString();\r\n }\r\n }\r\n }\r\n }\r\n\r\n const mesh = Mesh.Parse(parsedMesh, scene, rootUrl);\r\n meshes.push(mesh);\r\n parsedIdToNodeMap.set(mesh._waitingParsedUniqueId!, mesh);\r\n mesh._waitingParsedUniqueId = null;\r\n if (mesh.getClassName() === \"GaussianSplattingMesh\") {\r\n const partProxies = (mesh as any)._partProxies as AbstractMesh[] | Map<number, AbstractMesh> | undefined;\r\n const proxies = Array.isArray(partProxies) ? partProxies : partProxies ? Array.from(partProxies.values()) : [];\r\n for (const partProxy of proxies) {\r\n if (!partProxy || partProxy._waitingParsedUniqueId == null) {\r\n continue;\r\n }\r\n parsedIdToNodeMap.set(partProxy._waitingParsedUniqueId, partProxy);\r\n partProxy._waitingParsedUniqueId = null;\r\n }\r\n }\r\n log += \"\\n\\tMesh \" + mesh.toString(fullDetails);\r\n }\r\n }\r\n\r\n // link multimats with materials\r\n for (const multimat of scene.multiMaterials) {\r\n for (const subMaterial of multimat._waitingSubMaterialsUniqueIds) {\r\n multimat.subMaterials.push(FindMaterial(subMaterial, scene));\r\n }\r\n multimat._waitingSubMaterialsUniqueIds = [];\r\n }\r\n\r\n // link meshes with materials\r\n for (const mesh of scene.meshes) {\r\n if (mesh._waitingMaterialId !== null) {\r\n mesh.material = FindMaterial(mesh._waitingMaterialId, scene);\r\n mesh._waitingMaterialId = null;\r\n }\r\n }\r\n\r\n // link meshes with morph target managers\r\n for (const mesh of scene.meshes) {\r\n if (mesh._waitingMorphTargetManagerId !== null) {\r\n mesh.morphTargetManager = TempMorphTargetManagerIndexContainer[mesh._waitingMorphTargetManagerId];\r\n mesh._waitingMorphTargetManagerId = null;\r\n }\r\n }\r\n\r\n // Connecting parents and lods\r\n for (let index = 0, cache = scene.transformNodes.length; index < cache; index++) {\r\n const transformNode = scene.transformNodes[index];\r\n if (transformNode._waitingParentId !== null) {\r\n let parent = parsedIdToNodeMap.get(parseInt(transformNode._waitingParentId)) || null;\r\n if (parent === null) {\r\n parent = scene.getLastEntryById(transformNode._waitingParentId);\r\n }\r\n let parentNode = parent;\r\n if (transformNode._waitingParentInstanceIndex) {\r\n parentNode = (parent as Mesh).instances[parseInt(transformNode._waitingParentInstanceIndex)];\r\n transformNode._waitingParentInstanceIndex = null;\r\n }\r\n transformNode.parent = parentNode;\r\n transformNode._waitingParentId = null;\r\n }\r\n }\r\n let currentMesh: AbstractMesh;\r\n for (let index = 0, cache = scene.meshes.length; index < cache; index++) {\r\n currentMesh = scene.meshes[index];\r\n if (currentMesh._waitingParentId) {\r\n let parent = parsedIdToNodeMap.get(parseInt(currentMesh._waitingParentId)) || null;\r\n if (parent === null) {\r\n parent = scene.getLastEntryById(currentMesh._waitingParentId);\r\n }\r\n let parentNode = parent;\r\n if (currentMesh._waitingParentInstanceIndex) {\r\n parentNode = (parent as Mesh).instances[parseInt(currentMesh._waitingParentInstanceIndex)];\r\n currentMesh._waitingParentInstanceIndex = null;\r\n }\r\n currentMesh.parent = parentNode;\r\n currentMesh._waitingParentId = null;\r\n }\r\n if (currentMesh._waitingData.lods) {\r\n LoadDetailLevels(scene, currentMesh);\r\n }\r\n }\r\n\r\n // Remove unused transform nodes\r\n for (const transformNode of loadedTransformNodes) {\r\n const childMeshes = transformNode.getChildMeshes(false);\r\n if (!childMeshes.length) {\r\n transformNode.dispose();\r\n }\r\n }\r\n\r\n // link meshes with skeletons\r\n for (const mesh of scene.meshes) {\r\n // First try to get it via uniqueId\r\n if (mesh._waitingSkeletonUniqueId !== null) {\r\n mesh.skeleton = TempSkeletonIndexContainer[mesh._waitingSkeletonUniqueId];\r\n }\r\n\r\n // If not possible or not found, try to get it from the scene (backwards compatibility)\r\n if (mesh._waitingSkeletonId !== null && !mesh.skeleton) {\r\n mesh.skeleton = scene.getLastSkeletonById(mesh._waitingSkeletonId);\r\n }\r\n\r\n mesh._waitingSkeletonId = null;\r\n mesh._waitingSkeletonUniqueId = null;\r\n }\r\n\r\n // link bones to transform nodes\r\n for (let index = 0, cache = scene.skeletons.length; index < cache; index++) {\r\n const skeleton = scene.skeletons[index];\r\n if (skeleton._hasWaitingData) {\r\n if (skeleton.bones != null) {\r\n for (const bone of skeleton.bones) {\r\n let linkTransformNode: Nullable<Node> = null;\r\n // First try to get it via uniqueId\r\n if (bone._waitingTransformNodeUniqueId !== null) {\r\n linkTransformNode = parsedIdToNodeMap.get(bone._waitingTransformNodeUniqueId) ?? null;\r\n }\r\n\r\n // If not possible or not found, try to get it from the scene (backwards compatibility)\r\n if (bone._waitingTransformNodeId !== null && !linkTransformNode) {\r\n linkTransformNode = scene.getLastEntryById(bone._waitingTransformNodeId);\r\n }\r\n\r\n if (linkTransformNode) {\r\n bone.linkTransformNode(linkTransformNode as TransformNode);\r\n }\r\n\r\n bone._waitingTransformNodeId = null;\r\n bone._waitingTransformNodeUniqueId = null;\r\n }\r\n }\r\n\r\n skeleton._hasWaitingData = null;\r\n }\r\n }\r\n\r\n // freeze and compute world matrix application\r\n for (let index = 0, cache = scene.transformNodes.length; index < cache; index++) {\r\n const currentTransformNode = scene.transformNodes[index];\r\n if (currentTransformNode._waitingFreezeWorldMatrix) {\r\n currentTransformNode.freezeWorldMatrix();\r\n currentTransformNode._waitingFreezeWorldMatrix = null;\r\n }\r\n }\r\n for (let index = 0, cache = scene.meshes.length; index < cache; index++) {\r\n currentMesh = scene.meshes[index];\r\n if (currentMesh._waitingData.freezeWorldMatrix) {\r\n currentMesh.freezeWorldMatrix();\r\n currentMesh._waitingData.freezeWorldMatrix = null;\r\n } else {\r\n currentMesh.computeWorldMatrix(true);\r\n }\r\n }\r\n }\r\n\r\n // Particles\r\n if (parsedData.particleSystems !== undefined && parsedData.particleSystems !== null) {\r\n const parser = GetIndividualParser(SceneComponentConstants.NAME_PARTICLESYSTEM);\r\n if (parser) {\r\n for (let index = 0, cache = parsedData.particleSystems.length; index < cache; index++) {\r\n const parsedParticleSystem = parsedData.particleSystems[index];\r\n if (hierarchyIds.indexOf(parsedParticleSystem.emitterId) !== -1) {\r\n particleSystems.push(parser(parsedParticleSystem, scene, rootUrl));\r\n }\r\n }\r\n }\r\n }\r\n\r\n for (const g of scene.geometries) {\r\n g._loadedUniqueId = \"\";\r\n }\r\n\r\n return true;\r\n } catch (err) {\r\n const msg = logOperation(\"importMesh\", parsedData ? parsedData.producer : \"Unknown\") + log;\r\n if (onError) {\r\n onError(msg, err);\r\n } else {\r\n Logger.Log(msg);\r\n throw err;\r\n }\r\n } finally {\r\n if (log !== null && SceneLoaderFlags.loggingLevel !== Constants.SCENELOADER_NO_LOGGING) {\r\n Logger.Log(\r\n logOperation(\"importMesh\", parsedData ? parsedData.producer : \"Unknown\") +\r\n (SceneLoaderFlags.loggingLevel !== Constants.SCENELOADER_MINIMAL_LOGGING ? log : \"\")\r\n );\r\n }\r\n TempMaterialIndexContainer = {};\r\n TempMorphTargetManagerIndexContainer = {};\r\n TempSkeletonIndexContainer = {};\r\n }\r\n\r\n return false;\r\n },\r\n load: (scene: Scene, data: string, rootUrl: string, onError?: (message: string, exception?: any) => void): boolean => {\r\n // Entire method running in try block, so ALWAYS logs as far as it got, only actually writes details\r\n // when SceneLoader.debugLogging = true (default), or exception encountered.\r\n // Everything stored in var log instead of writing separate lines to support only writing in exception,\r\n // and avoid problems with multiple concurrent .babylon loads.\r\n let log = \"importScene has failed JSON parse\";\r\n try {\r\n // eslint-disable-next-line no-var\r\n var parsedData = JSON.parse(data);\r\n log = \"\";\r\n\r\n // Scene\r\n if (parsedData.useDelayedTextureLoading !== undefined && parsedData.useDelayedTextureLoading !== null) {\r\n scene.useDelayedTextureLoading = parsedData.useDelayedTextureLoading && !SceneLoaderFlags.ForceFullSceneLoadingForIncremental;\r\n }\r\n if (parsedData.autoClear !== undefined && parsedData.autoClear !== null) {\r\n scene.autoClear = parsedData.autoClear;\r\n }\r\n if (parsedData.clearColor !== undefined && parsedData.clearColor !== null) {\r\n scene.clearColor = Color4.FromArray(parsedData.clearColor);\r\n }\r\n if (parsedData.ambientColor !== undefined && parsedData.ambientColor !== null) {\r\n scene.ambientColor = Color3.FromArray(parsedData.ambientColor);\r\n }\r\n if (parsedData.gravity !== undefined && parsedData.gravity !== null) {\r\n scene.gravity = Vector3.FromArray(parsedData.gravity);\r\n }\r\n\r\n if (parsedData.useRightHandedSystem !== undefined) {\r\n scene.useRightHandedSystem = !!parsedData.useRightHandedSystem;\r\n }\r\n\r\n // Fog\r\n if (parsedData.fogMode !== undefined && parsedData.fogMode !== null) {\r\n scene.fogMode = parsedData.fogMode;\r\n }\r\n if (parsedData.fogColor !== undefined && parsedData.fogColor !== null) {\r\n scene.fogColor = Color3.FromArray(parsedData.fogColor);\r\n }\r\n if (parsedData.fogStart !== undefined && parsedData.fogStart !== null) {\r\n scene.fogStart = parsedData.fogStart;\r\n }\r\n if (parsedData.fogEnd !== undefined && parsedData.fogEnd !== null) {\r\n scene.fogEnd = parsedData.fogEnd;\r\n }\r\n if (parsedData.fogDensity !== undefined && parsedData.fogDensity !== null) {\r\n scene.fogDensity = parsedData.fogDensity;\r\n }\r\n log += \"\\tFog mode for scene: \";\r\n switch (scene.fogMode) {\r\n case 0:\r\n log += \"none\\n\";\r\n break;\r\n // getters not compiling, so using hardcoded\r\n case 1:\r\n log += \"exp\\n\";\r\n break;\r\n case 2:\r\n log += \"exp2\\n\";\r\n break;\r\n case 3:\r\n log += \"linear\\n\";\r\n break;\r\n }\r\n\r\n //Physics\r\n if (parsedData.physicsEnabled) {\r\n let physicsPlugin;\r\n if (parsedData.physicsEngine === \"cannon\" || parsedData.physicsEngine === CannonJSPlugin.name) {\r\n physicsPlugin = new CannonJSPlugin(undefined, undefined, BabylonFileLoaderConfiguration.LoaderInjectedPhysicsEngine);\r\n } else if (parsedData.physicsEngine === \"oimo\" || parsedData.physicsEngine === OimoJSPlugin.name) {\r\n physicsPlugin = new OimoJSPlugin(undefined, BabylonFileLoaderConfiguration.LoaderInjectedPhysicsEngine);\r\n } else if (parsedData.physicsEngine === \"ammo\" || parsedData.physicsEngine === AmmoJSPlugin.name) {\r\n physicsPlugin = new AmmoJSPlugin(undefined, BabylonFileLoaderConfiguration.LoaderInjectedPhysicsEngine, undefined);\r\n }\r\n log = \"\\tPhysics engine \" + (parsedData.physicsEngine ? parsedData.physicsEngine : \"oimo\") + \" enabled\\n\";\r\n //else - default engine, which is currently oimo\r\n const physicsGravity = parsedData.gravity\r\n ? Vector3.FromArray(parsedData.gravity)\r\n : parsedData.physicsGravity\r\n ? Vector3.FromArray(parsedData.physicsGravity)\r\n : null;\r\n scene.enablePhysics(physicsGravity, physicsPlugin);\r\n }\r\n\r\n // Metadata\r\n if (parsedData.metadata !== undefined && parsedData.metadata !== null) {\r\n scene.metadata = parsedData.metadata;\r\n }\r\n\r\n //collisions, if defined. otherwise, default is true\r\n if (parsedData.collisionsEnabled !== undefined && parsedData.collisionsEnabled !== null) {\r\n scene.collisionsEnabled = parsedData.collisionsEnabled;\r\n }\r\n\r\n const container = LoadAssetContainer(scene, data, rootUrl, onError, true);\r\n if (!container) {\r\n return false;\r\n }\r\n\r\n if (parsedData.autoAnimate) {\r\n scene.beginAnimation(scene, parsedData.autoAnimateFrom, parsedData.autoAnimateTo, parsedData.autoAnimateLoop, parsedData.autoAnimateSpeed || 1.0);\r\n }\r\n\r\n if (parsedData.activeCameraID !== undefined && parsedData.activeCameraID !== null) {\r\n scene.setActiveCameraById(parsedData.activeCameraID);\r\n }\r\n\r\n // Finish\r\n return true;\r\n } catch (err) {\r\n const msg = logOperation(\"importScene\", parsedData ? parsedData.producer : \"Unknown\") + log;\r\n if (onError) {\r\n onError(msg, err);\r\n } else {\r\n Logger.Log(msg);\r\n throw err;\r\n }\r\n } finally {\r\n if (log !== null && SceneLoaderFlags.loggingLevel !== Constants.SCENELOADER_NO_LOGGING) {\r\n Logger.Log(\r\n logOperation(\"importScene\", parsedData ? parsedData.producer : \"Unknown\") +\r\n (SceneLoaderFlags.loggingLevel !== Constants.SCENELOADER_MINIMAL_LOGGING ? log : \"\")\r\n );\r\n }\r\n }\r\n return false;\r\n },\r\n loadAssetContainer: (scene: Scene, data: string, rootUrl: string, onError?: (message: string, exception?: any) => void): AssetContainer => {\r\n const container = LoadAssetContainer(scene, data, rootUrl, onError);\r\n return container;\r\n },\r\n });\r\n}\r\n"]}
1
+ {"version":3,"file":"babylonFileLoader.pure.js","sourceRoot":"","sources":["../../../../../dev/core/src/Loading/Plugins/babylonFileLoader.pure.ts"],"names":[],"mappings":"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","sourcesContent":["/** This file must only contain pure code and pure imports */\r\n\r\nimport { Logger } from \"../../Misc/logger\";\r\nimport { Camera, RegisterCamera } from \"../../Cameras/camera.pure\";\r\nimport { Mesh } from \"../../Meshes/mesh.pure\";\r\nimport { Geometry } from \"../../Meshes/geometry\";\r\nimport { TransformNode } from \"../../Meshes/transformNode.pure\";\r\nimport { Material } from \"../../Materials/material.pure\";\r\nimport { MultiMaterial } from \"../../Materials/multiMaterial.pure\";\r\nimport { CubeTexture, CubeTextureCreateFromPrefilteredData, CubeTextureParse } from \"../../Materials/Textures/cubeTexture.pure\";\r\nimport { HDRCubeTexture } from \"../../Materials/Textures/hdrCubeTexture.pure\";\r\nimport { AnimationGroupParse } from \"../../Animations/animationGroup.pure\";\r\nimport { Light } from \"../../Lights/light\";\r\nimport { SceneLoaderFlags } from \"../sceneLoaderFlags\";\r\nimport { Constants } from \"../../Engines/constants\";\r\nimport { AssetContainer } from \"../../assetContainer\";\r\nimport { ActionManager } from \"../../Actions/actionManager\";\r\nimport { Skeleton } from \"../../Bones/skeleton\";\r\nimport { MorphTargetManager } from \"../../Morph/morphTargetManager\";\r\nimport { ReflectionProbe } from \"../../Probes/reflectionProbe.pure\";\r\nimport { GetClass } from \"../../Misc/typeStore\";\r\nimport { PostProcess } from \"../../PostProcesses/postProcess.pure\";\r\nimport { SpriteManager } from \"core/Sprites/spriteManager\";\r\nimport { Parse, GetIndividualParser } from \"./babylonFileParser.function\";\r\nimport { Observable } from \"../../Misc/observable.pure\";\r\nimport { type MorphTarget } from \"../../Morph/morphTarget\";\r\nimport { type Nullable } from \"../../types\";\r\nimport { type Scene } from \"../../scene.pure\";\r\nimport { Vector3 } from \"../../Maths/math.vector.pure\";\r\nimport { Color3, Color4 } from \"../../Maths/math.color.pure\";\r\nimport { type AbstractMesh } from \"../../Meshes/abstractMesh.pure\";\r\nimport { type Node } from \"../../node\";\r\nimport { SceneComponentConstants } from \"../../sceneComponent\";\r\nimport { RegisterSceneLoaderPlugin } from \"../../Loading/sceneLoader\";\r\nimport { type IParticleSystem } from \"../../Particles/IParticleSystem\";\r\nimport { CannonJSPlugin } from \"../../Physics/v1/Plugins/cannonJSPlugin.pure\";\r\nimport { OimoJSPlugin } from \"../../Physics/v1/Plugins/oimoJSPlugin\";\r\nimport { AmmoJSPlugin } from \"../../Physics/v1/Plugins/ammoJSPlugin\";\r\nimport { Texture } from \"../../Materials/Textures/texture.pure\";\r\n\r\n/** @internal */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention, no-var\r\nexport var _BabylonLoaderRegistered = true;\r\n\r\n/**\r\n * Helps setting up some configuration for the babylon file loader.\r\n */\r\nexport class BabylonFileLoaderConfiguration {\r\n /**\r\n * The loader does not allow injecting custom physics engine into the plugins.\r\n * Unfortunately in ES6, we need to manually inject them into the plugin.\r\n * So you could set this variable to your engine import to make it work.\r\n */\r\n public static LoaderInjectedPhysicsEngine: any = undefined;\r\n}\r\n\r\nlet TempIndexContainer: { [key: string]: Node } = {};\r\nexport let TempMaterialIndexContainer: { [key: string]: Material } = {};\r\nlet TempMorphTargetIndexContainer: { [key: number]: MorphTarget } = {};\r\nexport let TempMorphTargetManagerIndexContainer: { [key: string]: MorphTargetManager } = {};\r\nexport let TempSkeletonIndexContainer: { [key: number]: Skeleton } = {};\r\n\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport const logOperation = (operation: string, producer: { file: string; name: string; version: string; exporter_version: string }) => {\r\n return (\r\n operation +\r\n \" of \" +\r\n (producer ? producer.file + \" from \" + producer.name + \" version: \" + producer.version + \", exporter version: \" + producer.exporter_version : \"unknown\")\r\n );\r\n};\r\n\r\nexport const LoadDetailLevels = (scene: Scene, mesh: AbstractMesh) => {\r\n const mastermesh: Mesh = mesh as Mesh;\r\n\r\n // Every value specified in the ids array of the lod data points to another mesh which should be used as the lower LOD level.\r\n // The distances (or coverages) array values specified are used along with the lod mesh ids as a hint to determine the switching threshold for the various LODs.\r\n if (mesh._waitingData.lods) {\r\n if (mesh._waitingData.lods.ids && mesh._waitingData.lods.ids.length > 0) {\r\n const lodmeshes: string[] = mesh._waitingData.lods.ids;\r\n const wasenabled: boolean = mastermesh.isEnabled(false);\r\n if (mesh._waitingData.lods.distances) {\r\n const distances: number[] = mesh._waitingData.lods.distances;\r\n if (distances.length >= lodmeshes.length) {\r\n const culling: number = distances.length > lodmeshes.length ? distances[distances.length - 1] : 0;\r\n mastermesh.setEnabled(false);\r\n for (let index = 0; index < lodmeshes.length; index++) {\r\n const lodid: string = lodmeshes[index];\r\n const lodmesh: Mesh = scene.getMeshById(lodid) as Mesh;\r\n if (lodmesh != null) {\r\n mastermesh.addLODLevel(distances[index], lodmesh);\r\n }\r\n }\r\n if (culling > 0) {\r\n mastermesh.addLODLevel(culling, null);\r\n }\r\n if (wasenabled === true) {\r\n mastermesh.setEnabled(true);\r\n }\r\n } else {\r\n Logger.Warn(\"Invalid level of detail distances for \" + mesh.name);\r\n }\r\n }\r\n }\r\n mesh._waitingData.lods = null;\r\n }\r\n};\r\n\r\nconst FindParent = (parentId: any, parentInstanceIndex: any, scene: Scene) => {\r\n if (typeof parentId !== \"number\") {\r\n const parentEntry = scene.getLastEntryById(parentId);\r\n if (parentEntry && parentInstanceIndex !== undefined && parentInstanceIndex !== null) {\r\n const instance = (parentEntry as Mesh).instances[parseInt(parentInstanceIndex)];\r\n return instance;\r\n }\r\n return parentEntry;\r\n }\r\n\r\n const parent = TempIndexContainer[parentId];\r\n if (parent && parentInstanceIndex !== undefined && parentInstanceIndex !== null) {\r\n const instance = (parent as Mesh).instances[parseInt(parentInstanceIndex)];\r\n return instance;\r\n }\r\n\r\n return parent;\r\n};\r\n\r\nexport const FindMaterial = (materialId: any, scene: Scene) => {\r\n if (typeof materialId !== \"number\") {\r\n return scene.getLastMaterialById(materialId, true);\r\n }\r\n\r\n return TempMaterialIndexContainer[materialId];\r\n};\r\n\r\nconst FindMorphTargetManager = (managerId: any, scene: Scene) => {\r\n if (TempMorphTargetManagerIndexContainer[managerId]) {\r\n return TempMorphTargetManagerIndexContainer[managerId];\r\n }\r\n return scene.getMorphTargetManagerById(managerId);\r\n};\r\n\r\n/**\r\n * @experimental\r\n * Loads an AssetContainer from a serialized Babylon scene.\r\n * @param scene The scene to load the asset container into.\r\n * @param serializedScene The serialized scene data. This can be either a JSON string, or an object (e.g. from a call to JSON.parse).\r\n * @param rootUrl The root URL for loading assets.\r\n * @returns The loaded AssetContainer.\r\n */\r\nexport function LoadAssetContainerFromSerializedScene(scene: Scene, serializedScene: string | object, rootUrl: string): AssetContainer {\r\n return LoadAssetContainer(scene, serializedScene, rootUrl);\r\n}\r\n\r\nexport const LoadAssetContainer = (\r\n scene: Scene,\r\n data: string | object,\r\n rootUrl: string,\r\n onError?: (message: string, exception?: any) => void,\r\n addToScene = false\r\n): AssetContainer => {\r\n const container = new AssetContainer(scene);\r\n\r\n // When loading into a container (not directly into the scene), suppress entity-added\r\n // observables to prevent scene events during loading. Entities still get added to scene\r\n // arrays (so the linking code can find them), but no events fire.\r\n // They are removed from the scene at the end via container.removeAllFromScene().\r\n let savedObservables: Record<string, Observable<any>> | undefined;\r\n if (!addToScene) {\r\n savedObservables = {\r\n mesh: scene.onNewMeshAddedObservable,\r\n transformNode: scene.onNewTransformNodeAddedObservable,\r\n light: scene.onNewLightAddedObservable,\r\n camera: scene.onNewCameraAddedObservable,\r\n material: scene.onNewMaterialAddedObservable,\r\n multiMaterial: scene.onNewMultiMaterialAddedObservable,\r\n texture: scene.onNewTextureAddedObservable,\r\n skeleton: scene.onNewSkeletonAddedObservable,\r\n geometry: scene.onNewGeometryAddedObservable,\r\n animationGroup: scene.onNewAnimationGroupAddedObservable,\r\n particleSystem: scene.onNewParticleSystemAddedObservable,\r\n };\r\n scene.onNewMeshAddedObservable = new Observable();\r\n scene.onNewTransformNodeAddedObservable = new Observable();\r\n scene.onNewLightAddedObservable = new Observable();\r\n scene.onNewCameraAddedObservable = new Observable();\r\n scene.onNewMaterialAddedObservable = new Observable();\r\n scene.onNewMultiMaterialAddedObservable = new Observable();\r\n scene.onNewTextureAddedObservable = new Observable();\r\n scene.onNewSkeletonAddedObservable = new Observable();\r\n scene.onNewGeometryAddedObservable = new Observable();\r\n scene.onNewAnimationGroupAddedObservable = new Observable();\r\n scene.onNewParticleSystemAddedObservable = new Observable();\r\n }\r\n\r\n // Entire method running in try block, so ALWAYS logs as far as it got, only actually writes details\r\n // when SceneLoader.debugLogging = true (default), or exception encountered.\r\n // Everything stored in var log instead of writing separate lines to support only writing in exception,\r\n // and avoid problems with multiple concurrent .babylon loads.\r\n let log = \"importScene has failed JSON parse\";\r\n try {\r\n // eslint-disable-next-line no-var\r\n var parsedData = typeof data === \"object\" ? data : JSON.parse(data);\r\n log = \"\";\r\n const fullDetails = SceneLoaderFlags.loggingLevel === Constants.SCENELOADER_DETAILED_LOGGING;\r\n\r\n let index: number;\r\n let cache: number;\r\n\r\n // Environment texture\r\n if (parsedData.environmentTexture !== undefined && parsedData.environmentTexture !== null) {\r\n // PBR needed for both HDR texture (gamma space) & a sky box\r\n const isPBR = parsedData.isPBR !== undefined ? parsedData.isPBR : true;\r\n if (parsedData.environmentTextureType && parsedData.environmentTextureType === \"BABYLON.HDRCubeTexture\") {\r\n const hdrSize: number = parsedData.environmentTextureSize ? parsedData.environmentTextureSize : 128;\r\n const hdrTexture = new HDRCubeTexture(\r\n (parsedData.environmentTexture.match(/https?:\\/\\//g) ? \"\" : rootUrl) + parsedData.environmentTexture,\r\n scene,\r\n hdrSize,\r\n true,\r\n !isPBR,\r\n undefined,\r\n parsedData.environmentTexturePrefilterOnLoad\r\n );\r\n if (parsedData.environmentTextureRotationY) {\r\n hdrTexture.rotationY = parsedData.environmentTextureRotationY;\r\n }\r\n scene.environmentTexture = hdrTexture;\r\n } else {\r\n if (typeof parsedData.environmentTexture === \"object\") {\r\n const environmentTexture = CubeTextureParse(parsedData.environmentTexture, scene, rootUrl);\r\n scene.environmentTexture = environmentTexture;\r\n } else if ((parsedData.environmentTexture as string).endsWith(\".env\")) {\r\n const compressedTexture = new CubeTexture(\r\n (parsedData.environmentTexture.match(/https?:\\/\\//g) ? \"\" : rootUrl) + parsedData.environmentTexture,\r\n scene,\r\n parsedData.environmentTextureForcedExtension\r\n );\r\n if (parsedData.environmentTextureRotationY) {\r\n compressedTexture.rotationY = parsedData.environmentTextureRotationY;\r\n }\r\n scene.environmentTexture = compressedTexture;\r\n } else {\r\n const cubeTexture = CubeTextureCreateFromPrefilteredData(\r\n (parsedData.environmentTexture.match(/https?:\\/\\//g) ? \"\" : rootUrl) + parsedData.environmentTexture,\r\n scene,\r\n parsedData.environmentTextureForcedExtension\r\n );\r\n if (parsedData.environmentTextureRotationY) {\r\n cubeTexture.rotationY = parsedData.environmentTextureRotationY;\r\n }\r\n scene.environmentTexture = cubeTexture;\r\n }\r\n }\r\n if (parsedData.createDefaultSkybox === true) {\r\n const skyboxScale = scene.activeCamera !== undefined && scene.activeCamera !== null ? (scene.activeCamera.maxZ - scene.activeCamera.minZ) / 2 : 1000;\r\n const skyboxBlurLevel = parsedData.skyboxBlurLevel || 0;\r\n scene.createDefaultSkybox(scene.environmentTexture, isPBR, skyboxScale, skyboxBlurLevel);\r\n }\r\n container.environmentTexture = scene.environmentTexture;\r\n }\r\n\r\n // Environment Intensity\r\n if (parsedData.environmentIntensity !== undefined && parsedData.environmentIntensity !== null) {\r\n scene.environmentIntensity = parsedData.environmentIntensity;\r\n }\r\n\r\n // IBL Intensity\r\n if (parsedData.iblIntensity !== undefined && parsedData.iblIntensity !== null) {\r\n scene.iblIntensity = parsedData.iblIntensity;\r\n }\r\n\r\n // Lights\r\n if (parsedData.lights !== undefined && parsedData.lights !== null) {\r\n for (index = 0, cache = parsedData.lights.length; index < cache; index++) {\r\n const parsedLight = parsedData.lights[index];\r\n const light = Light.Parse(parsedLight, scene, rootUrl);\r\n if (light) {\r\n TempIndexContainer[parsedLight.uniqueId] = light;\r\n container.lights.push(light);\r\n light._parentContainer = container;\r\n log += index === 0 ? \"\\n\\tLights:\" : \"\";\r\n log += \"\\n\\t\\t\" + light.toString(fullDetails);\r\n }\r\n }\r\n }\r\n\r\n // Reflection probes\r\n if (parsedData.reflectionProbes !== undefined && parsedData.reflectionProbes !== null) {\r\n for (index = 0, cache = parsedData.reflectionProbes.length; index < cache; index++) {\r\n const parsedReflectionProbe = parsedData.reflectionProbes[index];\r\n const reflectionProbe = ReflectionProbe.Parse(parsedReflectionProbe, scene, rootUrl);\r\n if (reflectionProbe) {\r\n container.reflectionProbes.push(reflectionProbe);\r\n reflectionProbe._parentContainer = container;\r\n log += index === 0 ? \"\\n\\tReflection Probes:\" : \"\";\r\n log += \"\\n\\t\\t\" + reflectionProbe.toString(fullDetails);\r\n }\r\n }\r\n }\r\n\r\n // Animations\r\n if (parsedData.animations !== undefined && parsedData.animations !== null) {\r\n for (index = 0, cache = parsedData.animations.length; index < cache; index++) {\r\n const parsedAnimation = parsedData.animations[index];\r\n const internalClass = GetClass(\"BABYLON.Animation\");\r\n if (internalClass) {\r\n const animation = internalClass.Parse(parsedAnimation);\r\n scene.animations.push(animation);\r\n container.animations.push(animation);\r\n log += index === 0 ? \"\\n\\tAnimations:\" : \"\";\r\n log += \"\\n\\t\\t\" + animation.toString(fullDetails);\r\n }\r\n }\r\n }\r\n\r\n // Materials\r\n if (parsedData.materials !== undefined && parsedData.materials !== null) {\r\n for (index = 0, cache = parsedData.materials.length; index < cache; index++) {\r\n const parsedMaterial = parsedData.materials[index];\r\n const mat = Material.Parse(parsedMaterial, scene, rootUrl);\r\n if (mat) {\r\n TempMaterialIndexContainer[parsedMaterial.uniqueId || parsedMaterial.id] = mat;\r\n container.materials.push(mat);\r\n mat._parentContainer = container;\r\n log += index === 0 ? \"\\n\\tMaterials:\" : \"\";\r\n log += \"\\n\\t\\t\" + mat.toString(fullDetails);\r\n\r\n // Textures\r\n const textures = mat.getActiveTextures();\r\n for (const t of textures) {\r\n if (container.textures.indexOf(t) == -1) {\r\n container.textures.push(t);\r\n t._parentContainer = container;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (parsedData.textures !== undefined && parsedData.textures !== null) {\r\n for (index = 0, cache = parsedData.textures.length; index < cache; index++) {\r\n const parsedTexture = parsedData.textures[index];\r\n const texture = Texture.Parse(parsedTexture, scene, rootUrl);\r\n if (texture) {\r\n if (container.textures.indexOf(texture) == -1) {\r\n container.textures.push(texture);\r\n texture._parentContainer = container;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (parsedData.multiMaterials !== undefined && parsedData.multiMaterials !== null) {\r\n for (index = 0, cache = parsedData.multiMaterials.length; index < cache; index++) {\r\n const parsedMultiMaterial = parsedData.multiMaterials[index];\r\n const mmat = MultiMaterial.ParseMultiMaterial(parsedMultiMaterial, scene);\r\n TempMaterialIndexContainer[parsedMultiMaterial.uniqueId || parsedMultiMaterial.id] = mmat;\r\n container.multiMaterials.push(mmat);\r\n mmat._parentContainer = container;\r\n\r\n log += index === 0 ? \"\\n\\tMultiMaterials:\" : \"\";\r\n log += \"\\n\\t\\t\" + mmat.toString(fullDetails);\r\n\r\n // Textures\r\n const textures = mmat.getActiveTextures();\r\n for (const t of textures) {\r\n if (container.textures.indexOf(t) == -1) {\r\n container.textures.push(t);\r\n t._parentContainer = container;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Morph target managers\r\n if (parsedData.morphTargetManagers !== undefined && parsedData.morphTargetManagers !== null) {\r\n for (const parsedManager of parsedData.morphTargetManagers) {\r\n const manager = MorphTargetManager.Parse(parsedManager, scene);\r\n TempMorphTargetManagerIndexContainer[parsedManager.id] = manager;\r\n container.morphTargetManagers.push(manager);\r\n manager._parentContainer = container;\r\n\r\n // Morph targets - add to TempMorphTargetIndexContainer to later connect animations -> morph targets\r\n for (let index = 0; index < parsedManager.targets.length; index++) {\r\n const parsedTarget = parsedManager.targets[index];\r\n if (parsedTarget.uniqueId !== undefined && parsedTarget.uniqueId !== null) {\r\n const target = manager.getTarget(index);\r\n TempMorphTargetIndexContainer[parsedTarget.uniqueId] = target;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Skeletons\r\n if (parsedData.skeletons !== undefined && parsedData.skeletons !== null) {\r\n for (index = 0, cache = parsedData.skeletons.length; index < cache; index++) {\r\n const parsedSkeleton = parsedData.skeletons[index];\r\n const skeleton = Skeleton.Parse(parsedSkeleton, scene);\r\n if (parsedSkeleton.uniqueId !== undefined && parsedSkeleton.uniqueId !== null) {\r\n TempSkeletonIndexContainer[parsedSkeleton.uniqueId] = skeleton;\r\n }\r\n container.skeletons.push(skeleton);\r\n skeleton._parentContainer = container;\r\n log += index === 0 ? \"\\n\\tSkeletons:\" : \"\";\r\n log += \"\\n\\t\\t\" + skeleton.toString(fullDetails);\r\n\r\n // Bones - add to TempIndexContainer to later connect animations -> bones\r\n for (let boneIndex = 0; boneIndex < parsedSkeleton.bones.length; boneIndex++) {\r\n const parsedBone = parsedSkeleton.bones[boneIndex];\r\n const bone = skeleton.bones[boneIndex]; // This was instantiated in Skeleton.Parse\r\n TempIndexContainer[parsedBone.uniqueId] = bone;\r\n }\r\n }\r\n }\r\n\r\n // Geometries\r\n const geometries = parsedData.geometries;\r\n if (geometries !== undefined && geometries !== null) {\r\n const addedGeometry = new Array<Nullable<Geometry>>();\r\n\r\n // VertexData\r\n const vertexData = geometries.vertexData;\r\n if (vertexData !== undefined && vertexData !== null) {\r\n for (index = 0, cache = vertexData.length; index < cache; index++) {\r\n const parsedVertexData = vertexData[index];\r\n\r\n addedGeometry.push(Geometry.Parse(parsedVertexData, scene, rootUrl));\r\n }\r\n }\r\n\r\n for (const g of addedGeometry) {\r\n if (g) {\r\n container.geometries.push(g);\r\n g._parentContainer = container;\r\n }\r\n }\r\n }\r\n\r\n // Transform nodes\r\n if (parsedData.transformNodes !== undefined && parsedData.transformNodes !== null) {\r\n for (index = 0, cache = parsedData.transformNodes.length; index < cache; index++) {\r\n const parsedTransformNode = parsedData.transformNodes[index];\r\n const node = TransformNode.Parse(parsedTransformNode, scene, rootUrl);\r\n TempIndexContainer[parsedTransformNode.uniqueId] = node;\r\n container.transformNodes.push(node);\r\n node._parentContainer = container;\r\n }\r\n }\r\n\r\n // Meshes\r\n if (parsedData.meshes !== undefined && parsedData.meshes !== null) {\r\n for (index = 0, cache = parsedData.meshes.length; index < cache; index++) {\r\n const parsedMesh = parsedData.meshes[index];\r\n const mesh = <AbstractMesh>Mesh.Parse(parsedMesh, scene, rootUrl);\r\n TempIndexContainer[parsedMesh.uniqueId] = mesh;\r\n container.meshes.push(mesh);\r\n mesh._parentContainer = container;\r\n if (mesh.hasInstances) {\r\n for (const instance of (mesh as Mesh).instances) {\r\n container.meshes.push(instance);\r\n instance._parentContainer = container;\r\n }\r\n }\r\n // Load partProxies from GaussianSplattingMesh into AssetContainer\r\n if (mesh.getClassName() === \"GaussianSplattingMesh\") {\r\n const partProxies = (mesh as any)._partProxies as AbstractMesh[] | Map<number, AbstractMesh> | undefined;\r\n const proxies = Array.isArray(partProxies) ? partProxies : partProxies ? Array.from(partProxies.values()) : [];\r\n for (const partProxy of proxies) {\r\n if (!partProxy) {\r\n continue;\r\n }\r\n container.meshes.push(partProxy);\r\n partProxy._parentContainer = container;\r\n if (partProxy._waitingParsedUniqueId != null) {\r\n TempIndexContainer[partProxy._waitingParsedUniqueId] = partProxy;\r\n }\r\n }\r\n }\r\n log += index === 0 ? \"\\n\\tMeshes:\" : \"\";\r\n log += \"\\n\\t\\t\" + mesh.toString(fullDetails);\r\n }\r\n }\r\n\r\n // Cameras\r\n if (parsedData.cameras !== undefined && parsedData.cameras !== null) {\r\n for (index = 0, cache = parsedData.cameras.length; index < cache; index++) {\r\n const parsedCamera = parsedData.cameras[index];\r\n const camera = Camera.Parse(parsedCamera, scene);\r\n TempIndexContainer[parsedCamera.uniqueId] = camera;\r\n container.cameras.push(camera);\r\n camera._parentContainer = container;\r\n log += index === 0 ? \"\\n\\tCameras:\" : \"\";\r\n log += \"\\n\\t\\t\" + camera.toString(fullDetails);\r\n }\r\n }\r\n\r\n // Postprocesses\r\n if (parsedData.postProcesses !== undefined && parsedData.postProcesses !== null) {\r\n for (index = 0, cache = parsedData.postProcesses.length; index < cache; index++) {\r\n const parsedPostProcess = parsedData.postProcesses[index];\r\n const postProcess = PostProcess.Parse(parsedPostProcess, scene, rootUrl);\r\n if (postProcess) {\r\n container.postProcesses.push(postProcess);\r\n postProcess._parentContainer = container;\r\n log += index === 0 ? \"\\nPostprocesses:\" : \"\";\r\n log += \"\\n\\t\\t\" + postProcess.toString();\r\n }\r\n }\r\n }\r\n\r\n // Animation Groups\r\n if (parsedData.animationGroups !== undefined && parsedData.animationGroups !== null && parsedData.animationGroups.length) {\r\n // Build the nodeMap only for scenes with animationGroups.\r\n let nodeMap: Nullable<Map<Node[\"id\"], Node>> = null;\r\n\r\n // Helper to get nodes by id more efficiently, building the nodeMap only on first access.\r\n const getNodeById = (id: Node[\"id\"]) => {\r\n if (!nodeMap) {\r\n nodeMap = new Map<Node[\"id\"], Node>();\r\n\r\n // Nodes in scene does not change when parsing animationGroups, so it's safe to build a map.\r\n // This follows the order of scene.getNodeById: mesh, transformNode, light, camera, bone\r\n for (let index = 0; index < scene.meshes.length; index++) {\r\n // This follows the behavior of scene.getXXXById, which picks the first match\r\n if (!nodeMap.has(scene.meshes[index].id)) {\r\n nodeMap.set(scene.meshes[index].id, scene.meshes[index]);\r\n }\r\n }\r\n for (let index = 0; index < scene.transformNodes.length; index++) {\r\n if (!nodeMap.has(scene.transformNodes[index].id)) {\r\n nodeMap.set(scene.transformNodes[index].id, scene.transformNodes[index]);\r\n }\r\n }\r\n for (let index = 0; index < scene.lights.length; index++) {\r\n if (!nodeMap.has(scene.lights[index].id)) {\r\n nodeMap.set(scene.lights[index].id, scene.lights[index]);\r\n }\r\n }\r\n for (let index = 0; index < scene.cameras.length; index++) {\r\n if (!nodeMap.has(scene.cameras[index].id)) {\r\n nodeMap.set(scene.cameras[index].id, scene.cameras[index]);\r\n }\r\n }\r\n for (let skeletonIndex = 0; skeletonIndex < scene.skeletons.length; skeletonIndex++) {\r\n const skeleton = scene.skeletons[skeletonIndex];\r\n for (let boneIndex = 0; boneIndex < skeleton.bones.length; boneIndex++) {\r\n if (!nodeMap.has(skeleton.bones[boneIndex].id)) {\r\n nodeMap.set(skeleton.bones[boneIndex].id, skeleton.bones[boneIndex]);\r\n }\r\n }\r\n }\r\n }\r\n\r\n return nodeMap.get(id);\r\n };\r\n\r\n const targetLookup = (parsedTargetAnimation: any) => {\r\n let target = null;\r\n const isMorphTarget = parsedTargetAnimation.animation.property === \"influence\";\r\n const uniqueId = parsedTargetAnimation.targetUniqueId;\r\n\r\n // Attempt to find animation targets by uniqueId first (tracked in TempXXXIndexContainer).\r\n if (uniqueId !== undefined && uniqueId !== null) {\r\n target = isMorphTarget ? TempMorphTargetIndexContainer[uniqueId] : TempIndexContainer[uniqueId];\r\n }\r\n\r\n // Backwards compatibility: If no uniqueId is provided or no match is found,\r\n // fall back to searching by id in the scene.\r\n if (!target) {\r\n const id = parsedTargetAnimation.targetId;\r\n target = isMorphTarget ? scene.getMorphTargetById(id) : getNodeById(id);\r\n }\r\n\r\n return target;\r\n };\r\n\r\n for (index = 0, cache = parsedData.animationGroups.length; index < cache; index++) {\r\n const parsedAnimationGroup = parsedData.animationGroups[index];\r\n const animationGroup = AnimationGroupParse(parsedAnimationGroup, scene, targetLookup);\r\n container.animationGroups.push(animationGroup);\r\n animationGroup._parentContainer = container;\r\n log += index === 0 ? \"\\n\\tAnimationGroups:\" : \"\";\r\n log += \"\\n\\t\\t\" + animationGroup.toString(fullDetails);\r\n }\r\n }\r\n\r\n // Sprites\r\n if (parsedData.spriteManagers) {\r\n for (let index = 0, cache = parsedData.spriteManagers.length; index < cache; index++) {\r\n const parsedSpriteManager = parsedData.spriteManagers[index];\r\n const spriteManager = SpriteManager.Parse(parsedSpriteManager, scene, rootUrl);\r\n container.spriteManagers.push(spriteManager);\r\n spriteManager._parentContainer = container;\r\n log += \"\\n\\t\\tSpriteManager \" + spriteManager.name;\r\n }\r\n }\r\n\r\n // Browsing all the graph to connect the dots\r\n for (index = 0, cache = scene.cameras.length; index < cache; index++) {\r\n const camera = scene.cameras[index];\r\n if (camera._waitingParentId !== null) {\r\n camera.parent = FindParent(camera._waitingParentId, camera._waitingParentInstanceIndex, scene);\r\n camera._waitingParentId = null;\r\n camera._waitingParentInstanceIndex = null;\r\n }\r\n }\r\n\r\n for (index = 0, cache = scene.lights.length; index < cache; index++) {\r\n const light = scene.lights[index];\r\n if (light && light._waitingParentId !== null) {\r\n light.parent = FindParent(light._waitingParentId, light._waitingParentInstanceIndex, scene);\r\n light._waitingParentId = null;\r\n light._waitingParentInstanceIndex = null;\r\n }\r\n }\r\n\r\n // Connect parents & children and parse actions and lods\r\n for (index = 0, cache = scene.transformNodes.length; index < cache; index++) {\r\n const transformNode = scene.transformNodes[index];\r\n if (transformNode._waitingParentId !== null) {\r\n transformNode.parent = FindParent(transformNode._waitingParentId, transformNode._waitingParentInstanceIndex, scene);\r\n transformNode._waitingParentId = null;\r\n transformNode._waitingParentInstanceIndex = null;\r\n }\r\n }\r\n for (index = 0, cache = scene.meshes.length; index < cache; index++) {\r\n const mesh = scene.meshes[index];\r\n if (mesh._waitingParentId !== null) {\r\n mesh.parent = FindParent(mesh._waitingParentId, mesh._waitingParentInstanceIndex, scene);\r\n mesh._waitingParentId = null;\r\n mesh._waitingParentInstanceIndex = null;\r\n }\r\n if (mesh._waitingData.lods) {\r\n LoadDetailLevels(scene, mesh);\r\n }\r\n }\r\n\r\n // link multimats with materials\r\n for (const multimat of scene.multiMaterials) {\r\n for (const subMaterial of multimat._waitingSubMaterialsUniqueIds) {\r\n multimat.subMaterials.push(FindMaterial(subMaterial, scene));\r\n }\r\n multimat._waitingSubMaterialsUniqueIds = [];\r\n }\r\n\r\n // link meshes with materials\r\n for (const mesh of scene.meshes) {\r\n if (mesh._waitingMaterialId !== null) {\r\n mesh.material = FindMaterial(mesh._waitingMaterialId, scene);\r\n mesh._waitingMaterialId = null;\r\n }\r\n }\r\n\r\n // link meshes with morph target managers\r\n for (const mesh of scene.meshes) {\r\n if (mesh._waitingMorphTargetManagerId !== null) {\r\n mesh.morphTargetManager = FindMorphTargetManager(mesh._waitingMorphTargetManagerId, scene);\r\n mesh._waitingMorphTargetManagerId = null;\r\n }\r\n }\r\n\r\n // link meshes with skeletons\r\n for (const mesh of scene.meshes) {\r\n // First try to get it via uniqueId\r\n if (mesh._waitingSkeletonUniqueId !== null) {\r\n mesh.skeleton = TempSkeletonIndexContainer[mesh._waitingSkeletonUniqueId];\r\n }\r\n\r\n // If not possible or not found, try to get it from the scene (backwards compatibility)\r\n if (mesh._waitingSkeletonId !== null && !mesh.skeleton) {\r\n mesh.skeleton = scene.getLastSkeletonById(mesh._waitingSkeletonId);\r\n }\r\n\r\n mesh._waitingSkeletonId = null;\r\n mesh._waitingSkeletonUniqueId = null;\r\n }\r\n\r\n // link bones to transform nodes\r\n for (index = 0, cache = scene.skeletons.length; index < cache; index++) {\r\n const skeleton = scene.skeletons[index];\r\n if (skeleton._hasWaitingData) {\r\n if (skeleton.bones != null) {\r\n for (const bone of skeleton.bones) {\r\n let linkTransformNode: Nullable<Node> = null;\r\n // First try to get it via uniqueId\r\n if (bone._waitingTransformNodeUniqueId !== null) {\r\n linkTransformNode = TempIndexContainer[bone._waitingTransformNodeUniqueId];\r\n }\r\n\r\n // If not possible or not found, try to get it from the scene (backwards compatibility)\r\n if (bone._waitingTransformNodeId !== null && !linkTransformNode) {\r\n linkTransformNode = scene.getLastEntryById(bone._waitingTransformNodeId);\r\n }\r\n\r\n if (linkTransformNode) {\r\n bone.linkTransformNode(linkTransformNode as TransformNode);\r\n }\r\n\r\n bone._waitingTransformNodeId = null;\r\n bone._waitingTransformNodeUniqueId = null;\r\n }\r\n }\r\n\r\n skeleton._hasWaitingData = null;\r\n }\r\n }\r\n\r\n // freeze world matrix application\r\n for (index = 0, cache = scene.transformNodes.length; index < cache; index++) {\r\n const currentTransformNode = scene.transformNodes[index];\r\n if (currentTransformNode._waitingFreezeWorldMatrix) {\r\n currentTransformNode.freezeWorldMatrix();\r\n currentTransformNode._waitingFreezeWorldMatrix = null;\r\n }\r\n }\r\n for (index = 0, cache = scene.meshes.length; index < cache; index++) {\r\n const currentMesh = scene.meshes[index];\r\n if (currentMesh._waitingData.freezeWorldMatrix) {\r\n currentMesh.freezeWorldMatrix();\r\n currentMesh._waitingData.freezeWorldMatrix = null;\r\n } else {\r\n currentMesh.computeWorldMatrix(true);\r\n }\r\n }\r\n\r\n // Lights exclusions / inclusions\r\n for (index = 0, cache = scene.lights.length; index < cache; index++) {\r\n const light = scene.lights[index];\r\n // Excluded check\r\n if (light._excludedMeshesIds.length > 0) {\r\n for (let excludedIndex = 0; excludedIndex < light._excludedMeshesIds.length; excludedIndex++) {\r\n const excludedMesh = scene.getMeshById(light._excludedMeshesIds[excludedIndex]);\r\n\r\n if (excludedMesh) {\r\n light.excludedMeshes.push(excludedMesh);\r\n }\r\n }\r\n\r\n light._excludedMeshesIds = [];\r\n }\r\n\r\n // Included check\r\n if (light._includedOnlyMeshesIds.length > 0) {\r\n for (let includedOnlyIndex = 0; includedOnlyIndex < light._includedOnlyMeshesIds.length; includedOnlyIndex++) {\r\n const includedOnlyMesh = scene.getMeshById(light._includedOnlyMeshesIds[includedOnlyIndex]);\r\n\r\n if (includedOnlyMesh) {\r\n light.includedOnlyMeshes.push(includedOnlyMesh);\r\n }\r\n }\r\n\r\n light._includedOnlyMeshesIds = [];\r\n }\r\n }\r\n\r\n for (const g of scene.geometries) {\r\n g._loadedUniqueId = \"\";\r\n }\r\n\r\n Parse(parsedData, scene, container, rootUrl);\r\n\r\n // Actions (scene) Done last as it can access other objects.\r\n for (index = 0, cache = scene.meshes.length; index < cache; index++) {\r\n const mesh = scene.meshes[index];\r\n if (mesh._waitingData.actions) {\r\n ActionManager.Parse(mesh._waitingData.actions, mesh, scene);\r\n mesh._waitingData.actions = null;\r\n }\r\n }\r\n if (parsedData.actions !== undefined && parsedData.actions !== null) {\r\n ActionManager.Parse(parsedData.actions, null, scene);\r\n }\r\n } catch (err) {\r\n const msg = logOperation(\"loadAssets\", parsedData ? parsedData.producer : \"Unknown\") + log;\r\n if (onError) {\r\n onError(msg, err);\r\n } else {\r\n Logger.Log(msg);\r\n throw err;\r\n }\r\n } finally {\r\n TempIndexContainer = {};\r\n TempMaterialIndexContainer = {};\r\n TempMorphTargetIndexContainer = {};\r\n TempMorphTargetManagerIndexContainer = {};\r\n TempSkeletonIndexContainer = {};\r\n\r\n if (!addToScene) {\r\n // Restore observables before removing from scene\r\n if (savedObservables) {\r\n scene.onNewMeshAddedObservable = savedObservables.mesh;\r\n scene.onNewTransformNodeAddedObservable = savedObservables.transformNode;\r\n scene.onNewLightAddedObservable = savedObservables.light;\r\n scene.onNewCameraAddedObservable = savedObservables.camera;\r\n scene.onNewMaterialAddedObservable = savedObservables.material;\r\n scene.onNewMultiMaterialAddedObservable = savedObservables.multiMaterial;\r\n scene.onNewTextureAddedObservable = savedObservables.texture;\r\n scene.onNewSkeletonAddedObservable = savedObservables.skeleton;\r\n scene.onNewGeometryAddedObservable = savedObservables.geometry;\r\n scene.onNewAnimationGroupAddedObservable = savedObservables.animationGroup;\r\n scene.onNewParticleSystemAddedObservable = savedObservables.particleSystem;\r\n }\r\n // Removes entities from scene arrays and moves them to the container\r\n container.removeAllFromScene();\r\n }\r\n if (log !== null && SceneLoaderFlags.loggingLevel !== Constants.SCENELOADER_NO_LOGGING) {\r\n Logger.Log(\r\n logOperation(\"loadAssets\", parsedData ? parsedData.producer : \"Unknown\") + (SceneLoaderFlags.loggingLevel !== Constants.SCENELOADER_MINIMAL_LOGGING ? log : \"\")\r\n );\r\n }\r\n }\r\n\r\n return container;\r\n};\r\n\r\nlet _Registered = false;\r\n/**\r\n * Register side effects for babylonFileLoader.\r\n * Safe to call multiple times; only the first call has an effect.\r\n */\r\nexport function RegisterBabylonFileLoader(): void {\r\n if (_Registered) {\r\n return;\r\n }\r\n _Registered = true;\r\n\r\n // The loader parses cameras through the Camera.Parse static, which is only\r\n // installed by the render-time camera registration. Because this module imports\r\n // camera.pure (side-effect free), pull the registration in here so a tree-shaken\r\n // build that only imports the .babylon loader can still parse cameras. Without\r\n // this, Camera.Parse throws mid-load and the scene ends up with no active camera.\r\n RegisterCamera();\r\n\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n const ParseMaterialByPredicate = (predicate: (parsedMaterial: any) => boolean, parsedData: any, scene: Scene, rootUrl: string) => {\r\n if (!parsedData.materials) {\r\n return null;\r\n }\r\n\r\n for (let index = 0, cache = parsedData.materials.length; index < cache; index++) {\r\n const parsedMaterial = parsedData.materials[index];\r\n if (predicate(parsedMaterial)) {\r\n return { parsedMaterial, material: Material.Parse(parsedMaterial, scene, rootUrl) };\r\n }\r\n }\r\n return null;\r\n };\r\n\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n const IsDescendantOf = (mesh: any, names: Array<any>, hierarchyIds: Array<number>) => {\r\n for (const i in names) {\r\n if (mesh.name === names[i]) {\r\n hierarchyIds.push(mesh.id);\r\n return true;\r\n }\r\n }\r\n if (mesh.parentId !== undefined && hierarchyIds.indexOf(mesh.parentId) !== -1) {\r\n hierarchyIds.push(mesh.id);\r\n return true;\r\n }\r\n return false;\r\n };\r\n\r\n RegisterSceneLoaderPlugin({\r\n name: \"babylon.js\",\r\n extensions: \".babylon\",\r\n canDirectLoad: (data: string) => {\r\n if (data.indexOf(\"babylon\") !== -1) {\r\n // We consider that the producer string is filled\r\n return true;\r\n }\r\n\r\n return false;\r\n },\r\n importMesh: (\r\n meshesNames: any,\r\n scene: Scene,\r\n data: any,\r\n rootUrl: string,\r\n meshes: AbstractMesh[],\r\n particleSystems: IParticleSystem[],\r\n skeletons: Skeleton[],\r\n onError?: (message: string, exception?: any) => void\r\n ): boolean => {\r\n // Entire method running in try block, so ALWAYS logs as far as it got, only actually writes details\r\n // when SceneLoader.debugLogging = true (default), or exception encountered.\r\n // Everything stored in var log instead of writing separate lines to support only writing in exception,\r\n // and avoid problems with multiple concurrent .babylon loads.\r\n let log = \"importMesh has failed JSON parse\";\r\n try {\r\n // eslint-disable-next-line no-var\r\n var parsedData = JSON.parse(data);\r\n log = \"\";\r\n const fullDetails = SceneLoaderFlags.loggingLevel === Constants.SCENELOADER_DETAILED_LOGGING;\r\n if (!meshesNames) {\r\n meshesNames = null;\r\n } else if (!Array.isArray(meshesNames)) {\r\n meshesNames = [meshesNames];\r\n }\r\n\r\n const hierarchyIds: number[] = [];\r\n const parsedIdToNodeMap = new Map<number, Node>();\r\n\r\n // Transform nodes (the overall idea is to load all of them as this is super fast and then get rid of the ones we don't need)\r\n const loadedTransformNodes = [];\r\n if (parsedData.transformNodes !== undefined && parsedData.transformNodes !== null) {\r\n for (let index = 0, cache = parsedData.transformNodes.length; index < cache; index++) {\r\n const parsedJSONTransformNode = parsedData.transformNodes[index];\r\n const parsedTransformNode = TransformNode.Parse(parsedJSONTransformNode, scene, rootUrl);\r\n loadedTransformNodes.push(parsedTransformNode);\r\n parsedIdToNodeMap.set(parsedTransformNode._waitingParsedUniqueId!, parsedTransformNode);\r\n parsedTransformNode._waitingParsedUniqueId = null;\r\n }\r\n }\r\n if (parsedData.meshes !== undefined && parsedData.meshes !== null) {\r\n const loadedSkeletonsIds = [];\r\n const loadedMaterialsIds: string[] = [];\r\n const loadedMaterialsUniqueIds: string[] = [];\r\n const loadedMorphTargetManagerIds: number[] = [];\r\n for (let index = 0, cache = parsedData.meshes.length; index < cache; index++) {\r\n const parsedMesh = parsedData.meshes[index];\r\n\r\n if (meshesNames === null || IsDescendantOf(parsedMesh, meshesNames, hierarchyIds)) {\r\n if (meshesNames !== null) {\r\n // Remove found mesh name from list.\r\n delete meshesNames[meshesNames.indexOf(parsedMesh.name)];\r\n }\r\n\r\n //Geometry?\r\n if (parsedMesh.geometryId !== undefined && parsedMesh.geometryId !== null) {\r\n //does the file contain geometries?\r\n if (parsedData.geometries !== undefined && parsedData.geometries !== null) {\r\n //find the correct geometry and add it to the scene\r\n let found: boolean = false;\r\n const geoms = [\"boxes\", \"spheres\", \"cylinders\", \"toruses\", \"grounds\", \"planes\", \"torusKnots\", \"vertexData\"];\r\n for (const geometryType of geoms) {\r\n if (!parsedData.geometries[geometryType] || !Array.isArray(parsedData.geometries[geometryType])) {\r\n continue;\r\n }\r\n const geom = parsedData.geometries[geometryType];\r\n for (const parsedGeometryData of geom) {\r\n if (parsedGeometryData.id === parsedMesh.geometryId) {\r\n switch (geometryType) {\r\n case \"vertexData\":\r\n Geometry.Parse(parsedGeometryData, scene, rootUrl);\r\n break;\r\n }\r\n found = true;\r\n break;\r\n }\r\n }\r\n\r\n if (found) {\r\n break;\r\n }\r\n }\r\n if (found === false) {\r\n Logger.Warn(\"Geometry not found for mesh \" + parsedMesh.id);\r\n }\r\n }\r\n }\r\n\r\n // Material ?\r\n if (parsedMesh.materialUniqueId || parsedMesh.materialId) {\r\n // if we have a unique ID, look up and store in loadedMaterialsUniqueIds, else use loadedMaterialsIds\r\n const materialArray = parsedMesh.materialUniqueId ? loadedMaterialsUniqueIds : loadedMaterialsIds;\r\n let materialFound = materialArray.indexOf(parsedMesh.materialUniqueId || parsedMesh.materialId) !== -1;\r\n if (materialFound === false && parsedData.multiMaterials !== undefined && parsedData.multiMaterials !== null) {\r\n // Loads a submaterial of a multimaterial\r\n const loadSubMaterial = (subMatId: string, predicate: (parsedMaterial: any) => boolean) => {\r\n materialArray.push(subMatId);\r\n const mat = ParseMaterialByPredicate(predicate, parsedData, scene, rootUrl);\r\n if (mat && mat.material) {\r\n TempMaterialIndexContainer[mat.parsedMaterial.uniqueId || mat.parsedMaterial.id] = mat.material;\r\n log += \"\\n\\tMaterial \" + mat.material.toString(fullDetails);\r\n }\r\n };\r\n for (let multimatIndex = 0, multimatCache = parsedData.multiMaterials.length; multimatIndex < multimatCache; multimatIndex++) {\r\n const parsedMultiMaterial = parsedData.multiMaterials[multimatIndex];\r\n if (\r\n (parsedMesh.materialUniqueId && parsedMultiMaterial.uniqueId === parsedMesh.materialUniqueId) ||\r\n parsedMultiMaterial.id === parsedMesh.materialId\r\n ) {\r\n if (parsedMultiMaterial.materialsUniqueIds) {\r\n // if the materials inside the multimat are stored by unique id\r\n for (const subMatId of parsedMultiMaterial.materialsUniqueIds) {\r\n loadSubMaterial(subMatId, (parsedMaterial) => parsedMaterial.uniqueId === subMatId);\r\n }\r\n } else {\r\n // if the mats are stored by id instead\r\n for (const subMatId of parsedMultiMaterial.materials) {\r\n loadSubMaterial(subMatId, (parsedMaterial) => parsedMaterial.id === subMatId);\r\n }\r\n }\r\n materialArray.push(parsedMultiMaterial.uniqueId || parsedMultiMaterial.id);\r\n const mmat = MultiMaterial.ParseMultiMaterial(parsedMultiMaterial, scene);\r\n TempMaterialIndexContainer[parsedMultiMaterial.uniqueId || parsedMultiMaterial.id] = mmat;\r\n if (mmat) {\r\n materialFound = true;\r\n log += \"\\n\\tMulti-Material \" + mmat.toString(fullDetails);\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (materialFound === false) {\r\n materialArray.push(parsedMesh.materialUniqueId || parsedMesh.materialId);\r\n const mat = ParseMaterialByPredicate(\r\n (parsedMaterial) =>\r\n (parsedMesh.materialUniqueId && parsedMaterial.uniqueId === parsedMesh.materialUniqueId) || parsedMaterial.id === parsedMesh.materialId,\r\n parsedData,\r\n scene,\r\n rootUrl\r\n );\r\n if (!mat || !mat.material) {\r\n Logger.Warn(\"Material not found for mesh \" + parsedMesh.id);\r\n } else {\r\n TempMaterialIndexContainer[mat.parsedMaterial.uniqueId || mat.parsedMaterial.id] = mat.material;\r\n log += \"\\n\\tMaterial \" + mat.material.toString(fullDetails);\r\n }\r\n }\r\n }\r\n\r\n // Skeleton ?\r\n if (\r\n parsedMesh.skeletonId !== null &&\r\n parsedMesh.skeletonId !== undefined &&\r\n parsedData.skeletonId !== -1 &&\r\n parsedData.skeletons !== undefined &&\r\n parsedData.skeletons !== null\r\n ) {\r\n const skeletonAlreadyLoaded = loadedSkeletonsIds.indexOf(parsedMesh.skeletonId) > -1;\r\n if (!skeletonAlreadyLoaded) {\r\n for (let skeletonIndex = 0, skeletonCache = parsedData.skeletons.length; skeletonIndex < skeletonCache; skeletonIndex++) {\r\n const parsedSkeleton = parsedData.skeletons[skeletonIndex];\r\n if (parsedSkeleton.id === parsedMesh.skeletonId) {\r\n const skeleton = Skeleton.Parse(parsedSkeleton, scene);\r\n loadedSkeletonsIds.push(parsedSkeleton.id);\r\n if (parsedSkeleton.uniqueId !== undefined && parsedSkeleton.uniqueId !== null) {\r\n TempSkeletonIndexContainer[parsedSkeleton.uniqueId] = skeleton;\r\n }\r\n skeletons.push(skeleton);\r\n log += \"\\n\\tSkeleton \" + skeleton.toString(fullDetails);\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Morph target managers ?\r\n if (parsedMesh.morphTargetManagerId > -1 && parsedData.morphTargetManagers !== undefined && parsedData.morphTargetManagers !== null) {\r\n const morphTargetManagerAlreadyLoaded = loadedMorphTargetManagerIds.indexOf(parsedMesh.morphTargetManagerId) > -1;\r\n if (!morphTargetManagerAlreadyLoaded) {\r\n for (let morphTargetManagerIndex = 0; morphTargetManagerIndex < parsedData.morphTargetManagers.length; morphTargetManagerIndex++) {\r\n const parsedManager = parsedData.morphTargetManagers[morphTargetManagerIndex];\r\n if (parsedManager.id === parsedMesh.morphTargetManagerId) {\r\n const morphTargetManager = MorphTargetManager.Parse(parsedManager, scene);\r\n TempMorphTargetManagerIndexContainer[parsedManager.id] = morphTargetManager;\r\n loadedMorphTargetManagerIds.push(parsedManager.id);\r\n log += \"\\nMorph target manager\" + morphTargetManager.toString();\r\n }\r\n }\r\n }\r\n }\r\n\r\n const mesh = Mesh.Parse(parsedMesh, scene, rootUrl);\r\n meshes.push(mesh);\r\n parsedIdToNodeMap.set(mesh._waitingParsedUniqueId!, mesh);\r\n mesh._waitingParsedUniqueId = null;\r\n if (mesh.getClassName() === \"GaussianSplattingMesh\") {\r\n const partProxies = (mesh as any)._partProxies as AbstractMesh[] | Map<number, AbstractMesh> | undefined;\r\n const proxies = Array.isArray(partProxies) ? partProxies : partProxies ? Array.from(partProxies.values()) : [];\r\n for (const partProxy of proxies) {\r\n if (!partProxy || partProxy._waitingParsedUniqueId == null) {\r\n continue;\r\n }\r\n parsedIdToNodeMap.set(partProxy._waitingParsedUniqueId, partProxy);\r\n partProxy._waitingParsedUniqueId = null;\r\n }\r\n }\r\n log += \"\\n\\tMesh \" + mesh.toString(fullDetails);\r\n }\r\n }\r\n\r\n // link multimats with materials\r\n for (const multimat of scene.multiMaterials) {\r\n for (const subMaterial of multimat._waitingSubMaterialsUniqueIds) {\r\n multimat.subMaterials.push(FindMaterial(subMaterial, scene));\r\n }\r\n multimat._waitingSubMaterialsUniqueIds = [];\r\n }\r\n\r\n // link meshes with materials\r\n for (const mesh of scene.meshes) {\r\n if (mesh._waitingMaterialId !== null) {\r\n mesh.material = FindMaterial(mesh._waitingMaterialId, scene);\r\n mesh._waitingMaterialId = null;\r\n }\r\n }\r\n\r\n // link meshes with morph target managers\r\n for (const mesh of scene.meshes) {\r\n if (mesh._waitingMorphTargetManagerId !== null) {\r\n mesh.morphTargetManager = TempMorphTargetManagerIndexContainer[mesh._waitingMorphTargetManagerId];\r\n mesh._waitingMorphTargetManagerId = null;\r\n }\r\n }\r\n\r\n // Connecting parents and lods\r\n for (let index = 0, cache = scene.transformNodes.length; index < cache; index++) {\r\n const transformNode = scene.transformNodes[index];\r\n if (transformNode._waitingParentId !== null) {\r\n let parent = parsedIdToNodeMap.get(parseInt(transformNode._waitingParentId)) || null;\r\n if (parent === null) {\r\n parent = scene.getLastEntryById(transformNode._waitingParentId);\r\n }\r\n let parentNode = parent;\r\n if (transformNode._waitingParentInstanceIndex) {\r\n parentNode = (parent as Mesh).instances[parseInt(transformNode._waitingParentInstanceIndex)];\r\n transformNode._waitingParentInstanceIndex = null;\r\n }\r\n transformNode.parent = parentNode;\r\n transformNode._waitingParentId = null;\r\n }\r\n }\r\n let currentMesh: AbstractMesh;\r\n for (let index = 0, cache = scene.meshes.length; index < cache; index++) {\r\n currentMesh = scene.meshes[index];\r\n if (currentMesh._waitingParentId) {\r\n let parent = parsedIdToNodeMap.get(parseInt(currentMesh._waitingParentId)) || null;\r\n if (parent === null) {\r\n parent = scene.getLastEntryById(currentMesh._waitingParentId);\r\n }\r\n let parentNode = parent;\r\n if (currentMesh._waitingParentInstanceIndex) {\r\n parentNode = (parent as Mesh).instances[parseInt(currentMesh._waitingParentInstanceIndex)];\r\n currentMesh._waitingParentInstanceIndex = null;\r\n }\r\n currentMesh.parent = parentNode;\r\n currentMesh._waitingParentId = null;\r\n }\r\n if (currentMesh._waitingData.lods) {\r\n LoadDetailLevels(scene, currentMesh);\r\n }\r\n }\r\n\r\n // Remove unused transform nodes\r\n for (const transformNode of loadedTransformNodes) {\r\n const childMeshes = transformNode.getChildMeshes(false);\r\n if (!childMeshes.length) {\r\n transformNode.dispose();\r\n }\r\n }\r\n\r\n // link meshes with skeletons\r\n for (const mesh of scene.meshes) {\r\n // First try to get it via uniqueId\r\n if (mesh._waitingSkeletonUniqueId !== null) {\r\n mesh.skeleton = TempSkeletonIndexContainer[mesh._waitingSkeletonUniqueId];\r\n }\r\n\r\n // If not possible or not found, try to get it from the scene (backwards compatibility)\r\n if (mesh._waitingSkeletonId !== null && !mesh.skeleton) {\r\n mesh.skeleton = scene.getLastSkeletonById(mesh._waitingSkeletonId);\r\n }\r\n\r\n mesh._waitingSkeletonId = null;\r\n mesh._waitingSkeletonUniqueId = null;\r\n }\r\n\r\n // link bones to transform nodes\r\n for (let index = 0, cache = scene.skeletons.length; index < cache; index++) {\r\n const skeleton = scene.skeletons[index];\r\n if (skeleton._hasWaitingData) {\r\n if (skeleton.bones != null) {\r\n for (const bone of skeleton.bones) {\r\n let linkTransformNode: Nullable<Node> = null;\r\n // First try to get it via uniqueId\r\n if (bone._waitingTransformNodeUniqueId !== null) {\r\n linkTransformNode = parsedIdToNodeMap.get(bone._waitingTransformNodeUniqueId) ?? null;\r\n }\r\n\r\n // If not possible or not found, try to get it from the scene (backwards compatibility)\r\n if (bone._waitingTransformNodeId !== null && !linkTransformNode) {\r\n linkTransformNode = scene.getLastEntryById(bone._waitingTransformNodeId);\r\n }\r\n\r\n if (linkTransformNode) {\r\n bone.linkTransformNode(linkTransformNode as TransformNode);\r\n }\r\n\r\n bone._waitingTransformNodeId = null;\r\n bone._waitingTransformNodeUniqueId = null;\r\n }\r\n }\r\n\r\n skeleton._hasWaitingData = null;\r\n }\r\n }\r\n\r\n // freeze and compute world matrix application\r\n for (let index = 0, cache = scene.transformNodes.length; index < cache; index++) {\r\n const currentTransformNode = scene.transformNodes[index];\r\n if (currentTransformNode._waitingFreezeWorldMatrix) {\r\n currentTransformNode.freezeWorldMatrix();\r\n currentTransformNode._waitingFreezeWorldMatrix = null;\r\n }\r\n }\r\n for (let index = 0, cache = scene.meshes.length; index < cache; index++) {\r\n currentMesh = scene.meshes[index];\r\n if (currentMesh._waitingData.freezeWorldMatrix) {\r\n currentMesh.freezeWorldMatrix();\r\n currentMesh._waitingData.freezeWorldMatrix = null;\r\n } else {\r\n currentMesh.computeWorldMatrix(true);\r\n }\r\n }\r\n }\r\n\r\n // Particles\r\n if (parsedData.particleSystems !== undefined && parsedData.particleSystems !== null) {\r\n const parser = GetIndividualParser(SceneComponentConstants.NAME_PARTICLESYSTEM);\r\n if (parser) {\r\n for (let index = 0, cache = parsedData.particleSystems.length; index < cache; index++) {\r\n const parsedParticleSystem = parsedData.particleSystems[index];\r\n if (hierarchyIds.indexOf(parsedParticleSystem.emitterId) !== -1) {\r\n particleSystems.push(parser(parsedParticleSystem, scene, rootUrl));\r\n }\r\n }\r\n }\r\n }\r\n\r\n for (const g of scene.geometries) {\r\n g._loadedUniqueId = \"\";\r\n }\r\n\r\n return true;\r\n } catch (err) {\r\n const msg = logOperation(\"importMesh\", parsedData ? parsedData.producer : \"Unknown\") + log;\r\n if (onError) {\r\n onError(msg, err);\r\n } else {\r\n Logger.Log(msg);\r\n throw err;\r\n }\r\n } finally {\r\n if (log !== null && SceneLoaderFlags.loggingLevel !== Constants.SCENELOADER_NO_LOGGING) {\r\n Logger.Log(\r\n logOperation(\"importMesh\", parsedData ? parsedData.producer : \"Unknown\") +\r\n (SceneLoaderFlags.loggingLevel !== Constants.SCENELOADER_MINIMAL_LOGGING ? log : \"\")\r\n );\r\n }\r\n TempMaterialIndexContainer = {};\r\n TempMorphTargetManagerIndexContainer = {};\r\n TempSkeletonIndexContainer = {};\r\n }\r\n\r\n return false;\r\n },\r\n load: (scene: Scene, data: string, rootUrl: string, onError?: (message: string, exception?: any) => void): boolean => {\r\n // Entire method running in try block, so ALWAYS logs as far as it got, only actually writes details\r\n // when SceneLoader.debugLogging = true (default), or exception encountered.\r\n // Everything stored in var log instead of writing separate lines to support only writing in exception,\r\n // and avoid problems with multiple concurrent .babylon loads.\r\n let log = \"importScene has failed JSON parse\";\r\n try {\r\n // eslint-disable-next-line no-var\r\n var parsedData = JSON.parse(data);\r\n log = \"\";\r\n\r\n // Scene\r\n if (parsedData.useDelayedTextureLoading !== undefined && parsedData.useDelayedTextureLoading !== null) {\r\n scene.useDelayedTextureLoading = parsedData.useDelayedTextureLoading && !SceneLoaderFlags.ForceFullSceneLoadingForIncremental;\r\n }\r\n if (parsedData.autoClear !== undefined && parsedData.autoClear !== null) {\r\n scene.autoClear = parsedData.autoClear;\r\n }\r\n if (parsedData.clearColor !== undefined && parsedData.clearColor !== null) {\r\n scene.clearColor = Color4.FromArray(parsedData.clearColor);\r\n }\r\n if (parsedData.ambientColor !== undefined && parsedData.ambientColor !== null) {\r\n scene.ambientColor = Color3.FromArray(parsedData.ambientColor);\r\n }\r\n if (parsedData.gravity !== undefined && parsedData.gravity !== null) {\r\n scene.gravity = Vector3.FromArray(parsedData.gravity);\r\n }\r\n\r\n if (parsedData.useRightHandedSystem !== undefined) {\r\n scene.useRightHandedSystem = !!parsedData.useRightHandedSystem;\r\n }\r\n\r\n // Fog\r\n if (parsedData.fogMode !== undefined && parsedData.fogMode !== null) {\r\n scene.fogMode = parsedData.fogMode;\r\n }\r\n if (parsedData.fogColor !== undefined && parsedData.fogColor !== null) {\r\n scene.fogColor = Color3.FromArray(parsedData.fogColor);\r\n }\r\n if (parsedData.fogStart !== undefined && parsedData.fogStart !== null) {\r\n scene.fogStart = parsedData.fogStart;\r\n }\r\n if (parsedData.fogEnd !== undefined && parsedData.fogEnd !== null) {\r\n scene.fogEnd = parsedData.fogEnd;\r\n }\r\n if (parsedData.fogDensity !== undefined && parsedData.fogDensity !== null) {\r\n scene.fogDensity = parsedData.fogDensity;\r\n }\r\n log += \"\\tFog mode for scene: \";\r\n switch (scene.fogMode) {\r\n case 0:\r\n log += \"none\\n\";\r\n break;\r\n // getters not compiling, so using hardcoded\r\n case 1:\r\n log += \"exp\\n\";\r\n break;\r\n case 2:\r\n log += \"exp2\\n\";\r\n break;\r\n case 3:\r\n log += \"linear\\n\";\r\n break;\r\n }\r\n\r\n //Physics\r\n if (parsedData.physicsEnabled) {\r\n let physicsPlugin;\r\n if (parsedData.physicsEngine === \"cannon\" || parsedData.physicsEngine === CannonJSPlugin.name) {\r\n physicsPlugin = new CannonJSPlugin(undefined, undefined, BabylonFileLoaderConfiguration.LoaderInjectedPhysicsEngine);\r\n } else if (parsedData.physicsEngine === \"oimo\" || parsedData.physicsEngine === OimoJSPlugin.name) {\r\n physicsPlugin = new OimoJSPlugin(undefined, BabylonFileLoaderConfiguration.LoaderInjectedPhysicsEngine);\r\n } else if (parsedData.physicsEngine === \"ammo\" || parsedData.physicsEngine === AmmoJSPlugin.name) {\r\n physicsPlugin = new AmmoJSPlugin(undefined, BabylonFileLoaderConfiguration.LoaderInjectedPhysicsEngine, undefined);\r\n }\r\n log = \"\\tPhysics engine \" + (parsedData.physicsEngine ? parsedData.physicsEngine : \"oimo\") + \" enabled\\n\";\r\n //else - default engine, which is currently oimo\r\n const physicsGravity = parsedData.gravity\r\n ? Vector3.FromArray(parsedData.gravity)\r\n : parsedData.physicsGravity\r\n ? Vector3.FromArray(parsedData.physicsGravity)\r\n : null;\r\n scene.enablePhysics(physicsGravity, physicsPlugin);\r\n }\r\n\r\n // Metadata\r\n if (parsedData.metadata !== undefined && parsedData.metadata !== null) {\r\n scene.metadata = parsedData.metadata;\r\n }\r\n\r\n //collisions, if defined. otherwise, default is true\r\n if (parsedData.collisionsEnabled !== undefined && parsedData.collisionsEnabled !== null) {\r\n scene.collisionsEnabled = parsedData.collisionsEnabled;\r\n }\r\n\r\n const container = LoadAssetContainer(scene, data, rootUrl, onError, true);\r\n if (!container) {\r\n return false;\r\n }\r\n\r\n if (parsedData.autoAnimate) {\r\n scene.beginAnimation(scene, parsedData.autoAnimateFrom, parsedData.autoAnimateTo, parsedData.autoAnimateLoop, parsedData.autoAnimateSpeed || 1.0);\r\n }\r\n\r\n if (parsedData.activeCameraID !== undefined && parsedData.activeCameraID !== null) {\r\n scene.setActiveCameraById(parsedData.activeCameraID);\r\n }\r\n\r\n // If no active camera has been resolved (e.g. the serialized activeCameraID\r\n // does not match any loaded camera) but the scene does contain cameras,\r\n // fall back to the first one so the scene can still be rendered.\r\n if (!scene.activeCamera && scene.cameras.length > 0) {\r\n scene.activeCamera = scene.cameras[0];\r\n }\r\n\r\n // Finish\r\n return true;\r\n } catch (err) {\r\n const msg = logOperation(\"importScene\", parsedData ? parsedData.producer : \"Unknown\") + log;\r\n if (onError) {\r\n onError(msg, err);\r\n } else {\r\n Logger.Log(msg);\r\n throw err;\r\n }\r\n } finally {\r\n if (log !== null && SceneLoaderFlags.loggingLevel !== Constants.SCENELOADER_NO_LOGGING) {\r\n Logger.Log(\r\n logOperation(\"importScene\", parsedData ? parsedData.producer : \"Unknown\") +\r\n (SceneLoaderFlags.loggingLevel !== Constants.SCENELOADER_MINIMAL_LOGGING ? log : \"\")\r\n );\r\n }\r\n }\r\n return false;\r\n },\r\n loadAssetContainer: (scene: Scene, data: string, rootUrl: string, onError?: (message: string, exception?: any) => void): AssetContainer => {\r\n const container = LoadAssetContainer(scene, data, rootUrl, onError);\r\n return container;\r\n },\r\n });\r\n}\r\n"]}