@babylonjs/core 5.0.0-beta.1 → 5.0.0-beta.12

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 (808) hide show
  1. package/Actions/actionManager.d.ts +1 -1
  2. package/Actions/actionManager.js +5 -1
  3. package/Actions/actionManager.js.map +1 -1
  4. package/Animations/animation.d.ts +6 -6
  5. package/Animations/animation.js +9 -5
  6. package/Animations/animation.js.map +1 -1
  7. package/Audio/analyser.d.ts +2 -1
  8. package/Audio/analyser.js +5 -0
  9. package/Audio/analyser.js.map +1 -1
  10. package/Audio/audioSceneComponent.d.ts +1 -1
  11. package/Audio/audioSceneComponent.js +5 -0
  12. package/Audio/audioSceneComponent.js.map +1 -1
  13. package/Audio/sound.d.ts +1 -1
  14. package/Audio/sound.js +17 -4
  15. package/Audio/sound.js.map +1 -1
  16. package/Audio/soundTrack.d.ts +2 -1
  17. package/Audio/soundTrack.js +5 -0
  18. package/Audio/soundTrack.js.map +1 -1
  19. package/BakedVertexAnimation/bakedVertexAnimationManager.d.ts +1 -1
  20. package/BakedVertexAnimation/bakedVertexAnimationManager.js +5 -0
  21. package/BakedVertexAnimation/bakedVertexAnimationManager.js.map +1 -1
  22. package/Behaviors/Meshes/baseSixDofDragBehavior.js +29 -26
  23. package/Behaviors/Meshes/baseSixDofDragBehavior.js.map +1 -1
  24. package/Behaviors/Meshes/pointerDragBehavior.js +2 -0
  25. package/Behaviors/Meshes/pointerDragBehavior.js.map +1 -1
  26. package/Bones/bone.d.ts +2 -1
  27. package/Bones/bone.js +28 -18
  28. package/Bones/bone.js.map +1 -1
  29. package/Bones/skeleton.d.ts +0 -6
  30. package/Bones/skeleton.js +5 -17
  31. package/Bones/skeleton.js.map +1 -1
  32. package/Buffers/buffer.d.ts +4 -0
  33. package/Buffers/buffer.js +13 -3
  34. package/Buffers/buffer.js.map +1 -1
  35. package/Cameras/Inputs/freeCameraMouseInput.d.ts +1 -0
  36. package/Cameras/Inputs/freeCameraMouseInput.js +6 -3
  37. package/Cameras/Inputs/freeCameraMouseInput.js.map +1 -1
  38. package/Cameras/Inputs/freeCameraTouchInput.js +2 -4
  39. package/Cameras/Inputs/freeCameraTouchInput.js.map +1 -1
  40. package/Cameras/Stereoscopic/anaglyphArcRotateCamera.d.ts +1 -1
  41. package/Cameras/Stereoscopic/anaglyphArcRotateCamera.js.map +1 -1
  42. package/Cameras/Stereoscopic/anaglyphFreeCamera.d.ts +1 -1
  43. package/Cameras/Stereoscopic/anaglyphFreeCamera.js.map +1 -1
  44. package/Cameras/Stereoscopic/anaglyphGamepadCamera.d.ts +1 -1
  45. package/Cameras/Stereoscopic/anaglyphGamepadCamera.js.map +1 -1
  46. package/Cameras/Stereoscopic/anaglyphUniversalCamera.d.ts +1 -1
  47. package/Cameras/Stereoscopic/anaglyphUniversalCamera.js.map +1 -1
  48. package/Cameras/Stereoscopic/stereoscopicArcRotateCamera.d.ts +1 -1
  49. package/Cameras/Stereoscopic/stereoscopicArcRotateCamera.js.map +1 -1
  50. package/Cameras/Stereoscopic/stereoscopicFreeCamera.d.ts +1 -1
  51. package/Cameras/Stereoscopic/stereoscopicFreeCamera.js.map +1 -1
  52. package/Cameras/Stereoscopic/stereoscopicGamepadCamera.d.ts +1 -1
  53. package/Cameras/Stereoscopic/stereoscopicGamepadCamera.js.map +1 -1
  54. package/Cameras/Stereoscopic/stereoscopicScreenUniversalCamera.d.ts +1 -1
  55. package/Cameras/Stereoscopic/stereoscopicScreenUniversalCamera.js.map +1 -1
  56. package/Cameras/Stereoscopic/stereoscopicUniversalCamera.d.ts +1 -1
  57. package/Cameras/Stereoscopic/stereoscopicUniversalCamera.js.map +1 -1
  58. package/Cameras/VR/vrDeviceOrientationArcRotateCamera.d.ts +1 -1
  59. package/Cameras/VR/vrDeviceOrientationArcRotateCamera.js.map +1 -1
  60. package/Cameras/VR/vrDeviceOrientationFreeCamera.d.ts +1 -1
  61. package/Cameras/VR/vrDeviceOrientationFreeCamera.js.map +1 -1
  62. package/Cameras/VR/vrDeviceOrientationGamepadCamera.d.ts +1 -1
  63. package/Cameras/VR/vrDeviceOrientationGamepadCamera.js.map +1 -1
  64. package/Cameras/VR/vrExperienceHelper.d.ts +1 -0
  65. package/Cameras/VR/vrExperienceHelper.js +1 -0
  66. package/Cameras/VR/vrExperienceHelper.js.map +1 -1
  67. package/Cameras/VR/webVRCamera.d.ts +2 -1
  68. package/Cameras/VR/webVRCamera.js +3 -2
  69. package/Cameras/VR/webVRCamera.js.map +1 -1
  70. package/Cameras/arcRotateCamera.d.ts +1 -1
  71. package/Cameras/arcRotateCamera.js.map +1 -1
  72. package/Cameras/camera.d.ts +1 -1
  73. package/Cameras/camera.js +1 -1
  74. package/Cameras/camera.js.map +1 -1
  75. package/Cameras/deviceOrientationCamera.d.ts +1 -1
  76. package/Cameras/deviceOrientationCamera.js.map +1 -1
  77. package/Cameras/flyCamera.d.ts +1 -1
  78. package/Cameras/flyCamera.js.map +1 -1
  79. package/Cameras/followCamera.d.ts +1 -1
  80. package/Cameras/followCamera.js.map +1 -1
  81. package/Cameras/freeCamera.d.ts +1 -1
  82. package/Cameras/freeCamera.js.map +1 -1
  83. package/Cameras/gamepadCamera.d.ts +1 -1
  84. package/Cameras/gamepadCamera.js.map +1 -1
  85. package/Cameras/targetCamera.d.ts +1 -1
  86. package/Cameras/targetCamera.js.map +1 -1
  87. package/Cameras/touchCamera.d.ts +1 -1
  88. package/Cameras/touchCamera.js.map +1 -1
  89. package/Cameras/universalCamera.d.ts +1 -1
  90. package/Cameras/universalCamera.js.map +1 -1
  91. package/Cameras/virtualJoysticksCamera.d.ts +1 -1
  92. package/Cameras/virtualJoysticksCamera.js.map +1 -1
  93. package/Collisions/collider.d.ts +1 -1
  94. package/Collisions/collider.js +48 -2
  95. package/Collisions/collider.js.map +1 -1
  96. package/Compat/compatibilityOptions.d.ts +9 -0
  97. package/Compat/compatibilityOptions.js +14 -0
  98. package/Compat/compatibilityOptions.js.map +1 -0
  99. package/Compat/index.d.ts +1 -0
  100. package/Compat/index.js +2 -0
  101. package/Compat/index.js.map +1 -0
  102. package/Compute/computeEffect.js +2 -2
  103. package/Compute/computeEffect.js.map +1 -1
  104. package/Culling/Octrees/octreeSceneComponent.d.ts +1 -1
  105. package/Culling/Octrees/octreeSceneComponent.js +5 -0
  106. package/Culling/Octrees/octreeSceneComponent.js.map +1 -1
  107. package/Culling/ray.d.ts +6 -4
  108. package/Culling/ray.js +35 -13
  109. package/Culling/ray.js.map +1 -1
  110. package/Debug/axesViewer.d.ts +2 -1
  111. package/Debug/axesViewer.js +6 -0
  112. package/Debug/axesViewer.js.map +1 -1
  113. package/Debug/debugLayer.d.ts +1 -1
  114. package/Debug/debugLayer.js +6 -2
  115. package/Debug/debugLayer.js.map +1 -1
  116. package/Debug/physicsViewer.d.ts +1 -1
  117. package/Debug/physicsViewer.js +3 -0
  118. package/Debug/physicsViewer.js.map +1 -1
  119. package/Debug/skeletonViewer.js +3 -4
  120. package/Debug/skeletonViewer.js.map +1 -1
  121. package/DeviceInput/Helpers/eventFactory.d.ts +1 -1
  122. package/DeviceInput/Helpers/eventFactory.js +10 -6
  123. package/DeviceInput/Helpers/eventFactory.js.map +1 -1
  124. package/DeviceInput/InputDevices/deviceEnums.d.ts +55 -2
  125. package/DeviceInput/InputDevices/deviceEnums.js +54 -0
  126. package/DeviceInput/InputDevices/deviceEnums.js.map +1 -1
  127. package/DeviceInput/InputDevices/deviceSource.d.ts +35 -0
  128. package/DeviceInput/InputDevices/deviceSource.js +38 -0
  129. package/DeviceInput/InputDevices/deviceSource.js.map +1 -0
  130. package/DeviceInput/InputDevices/deviceSourceManager.d.ts +23 -66
  131. package/DeviceInput/InputDevices/deviceSourceManager.js +40 -149
  132. package/DeviceInput/InputDevices/deviceSourceManager.js.map +1 -1
  133. package/DeviceInput/InputDevices/deviceTypes.d.ts +2 -2
  134. package/DeviceInput/InputDevices/deviceTypes.js.map +1 -1
  135. package/DeviceInput/{Interfaces → InputDevices}/inputInterfaces.d.ts +1 -5
  136. package/DeviceInput/{Interfaces → InputDevices}/inputInterfaces.js +0 -0
  137. package/DeviceInput/InputDevices/inputInterfaces.js.map +1 -0
  138. package/DeviceInput/InputDevices/internalDeviceSourceManager.d.ts +51 -0
  139. package/DeviceInput/InputDevices/internalDeviceSourceManager.js +138 -0
  140. package/DeviceInput/InputDevices/internalDeviceSourceManager.js.map +1 -0
  141. package/DeviceInput/{Implementations → InputDevices}/nativeDeviceInputSystem.d.ts +3 -7
  142. package/DeviceInput/{Implementations → InputDevices}/nativeDeviceInputSystem.js +11 -16
  143. package/DeviceInput/InputDevices/nativeDeviceInputSystem.js.map +1 -0
  144. package/DeviceInput/{Implementations → InputDevices}/webDeviceInputSystem.d.ts +17 -19
  145. package/DeviceInput/{Implementations → InputDevices}/webDeviceInputSystem.js +212 -166
  146. package/DeviceInput/InputDevices/webDeviceInputSystem.js.map +1 -0
  147. package/DeviceInput/index.d.ts +1 -5
  148. package/DeviceInput/index.js +1 -5
  149. package/DeviceInput/index.js.map +1 -1
  150. package/Engines/Extensions/engine.cubeTexture.d.ts +1 -1
  151. package/Engines/Extensions/engine.cubeTexture.js +6 -2
  152. package/Engines/Extensions/engine.cubeTexture.js.map +1 -1
  153. package/Engines/Extensions/engine.multiview.d.ts +5 -0
  154. package/Engines/Extensions/engine.multiview.js +4 -2
  155. package/Engines/Extensions/engine.multiview.js.map +1 -1
  156. package/Engines/Extensions/engine.query.d.ts +7 -0
  157. package/Engines/Extensions/engine.query.js +12 -0
  158. package/Engines/Extensions/engine.query.js.map +1 -1
  159. package/Engines/Extensions/engine.renderTarget.d.ts +5 -0
  160. package/Engines/Extensions/engine.renderTarget.js.map +1 -1
  161. package/Engines/Extensions/engine.views.d.ts +7 -0
  162. package/Engines/Extensions/engine.views.js +12 -0
  163. package/Engines/Extensions/engine.views.js.map +1 -1
  164. package/Engines/Native/nativeInterfaces.d.ts +3 -2
  165. package/Engines/Native/nativeInterfaces.js.map +1 -1
  166. package/Engines/Processors/Expressions/shaderDefineExpression.js +1 -1
  167. package/Engines/Processors/Expressions/shaderDefineExpression.js.map +1 -1
  168. package/Engines/Processors/shaderCodeInliner.js +13 -13
  169. package/Engines/Processors/shaderCodeInliner.js.map +1 -1
  170. package/Engines/WebGPU/Extensions/engine.computeShader.js +1 -1
  171. package/Engines/WebGPU/Extensions/engine.computeShader.js.map +1 -1
  172. package/Engines/WebGPU/Extensions/engine.cubeTexture.js +4 -1
  173. package/Engines/WebGPU/Extensions/engine.cubeTexture.js.map +1 -1
  174. package/Engines/WebGPU/webgpuCacheBindGroups.js +9 -9
  175. package/Engines/WebGPU/webgpuCacheBindGroups.js.map +1 -1
  176. package/Engines/WebGPU/webgpuCacheRenderPipeline.js +5 -7
  177. package/Engines/WebGPU/webgpuCacheRenderPipeline.js.map +1 -1
  178. package/Engines/WebGPU/webgpuCacheRenderPipelineTree.d.ts +1 -1
  179. package/Engines/WebGPU/webgpuCacheRenderPipelineTree.js.map +1 -1
  180. package/Engines/WebGPU/webgpuCacheSampler.d.ts +2 -0
  181. package/Engines/WebGPU/webgpuCacheSampler.js +23 -2
  182. package/Engines/WebGPU/webgpuCacheSampler.js.map +1 -1
  183. package/Engines/WebGPU/webgpuComputeContext.js +1 -1
  184. package/Engines/WebGPU/webgpuComputeContext.js.map +1 -1
  185. package/Engines/WebGPU/webgpuConstants.d.ts +2 -1
  186. package/Engines/WebGPU/webgpuConstants.js +1 -0
  187. package/Engines/WebGPU/webgpuConstants.js.map +1 -1
  188. package/Engines/WebGPU/webgpuDrawContext.d.ts +1 -1
  189. package/Engines/WebGPU/webgpuDrawContext.js +3 -3
  190. package/Engines/WebGPU/webgpuDrawContext.js.map +1 -1
  191. package/Engines/WebGPU/webgpuHardwareTexture.d.ts +0 -1
  192. package/Engines/WebGPU/webgpuHardwareTexture.js +0 -3
  193. package/Engines/WebGPU/webgpuHardwareTexture.js.map +1 -1
  194. package/Engines/WebGPU/webgpuPipelineContext.d.ts +0 -8
  195. package/Engines/WebGPU/webgpuPipelineContext.js.map +1 -1
  196. package/Engines/WebGPU/webgpuShaderProcessorsGLSL.js +13 -13
  197. package/Engines/WebGPU/webgpuShaderProcessorsGLSL.js.map +1 -1
  198. package/Engines/WebGPU/webgpuShaderProcessorsWGSL.js +30 -30
  199. package/Engines/WebGPU/webgpuShaderProcessorsWGSL.js.map +1 -1
  200. package/Engines/WebGPU/webgpuTextureHelper.d.ts +0 -1
  201. package/Engines/WebGPU/webgpuTextureHelper.js +22 -37
  202. package/Engines/WebGPU/webgpuTextureHelper.js.map +1 -1
  203. package/Engines/engine.d.ts +48 -33
  204. package/Engines/engine.js +2 -6
  205. package/Engines/engine.js.map +1 -1
  206. package/Engines/engineCapabilities.d.ts +4 -0
  207. package/Engines/engineCapabilities.js.map +1 -1
  208. package/Engines/index.d.ts +1 -0
  209. package/Engines/index.js +1 -0
  210. package/Engines/index.js.map +1 -1
  211. package/Engines/nativeEngine.d.ts +1 -0
  212. package/Engines/nativeEngine.js +41 -13
  213. package/Engines/nativeEngine.js.map +1 -1
  214. package/Engines/nullEngine.js +3 -1
  215. package/Engines/nullEngine.js.map +1 -1
  216. package/Engines/renderTargetWrapper.d.ts +8 -0
  217. package/Engines/renderTargetWrapper.js +20 -0
  218. package/Engines/renderTargetWrapper.js.map +1 -1
  219. package/Engines/thinEngine.d.ts +18 -2
  220. package/Engines/thinEngine.js +51 -21
  221. package/Engines/thinEngine.js.map +1 -1
  222. package/Engines/webgpuEngine.d.ts +3 -7
  223. package/Engines/webgpuEngine.js +43 -42
  224. package/Engines/webgpuEngine.js.map +1 -1
  225. package/Events/keyboardEvents.d.ts +7 -1
  226. package/Events/keyboardEvents.js +11 -1
  227. package/Events/keyboardEvents.js.map +1 -1
  228. package/Gamepads/Controllers/daydreamController.js +1 -1
  229. package/Gamepads/Controllers/daydreamController.js.map +1 -1
  230. package/Gamepads/Controllers/oculusTouchController.js +2 -2
  231. package/Gamepads/Controllers/oculusTouchController.js.map +1 -1
  232. package/Gamepads/Controllers/webVRController.d.ts +1 -0
  233. package/Gamepads/Controllers/webVRController.js +1 -0
  234. package/Gamepads/Controllers/webVRController.js.map +1 -1
  235. package/Gamepads/gamepadManager.js +1 -1
  236. package/Gamepads/gamepadManager.js.map +1 -1
  237. package/Gizmos/boundingBoxGizmo.js +0 -10
  238. package/Gizmos/boundingBoxGizmo.js.map +1 -1
  239. package/Gizmos/gizmo.js +1 -1
  240. package/Gizmos/gizmo.js.map +1 -1
  241. package/Gizmos/gizmoManager.d.ts +2 -0
  242. package/Gizmos/gizmoManager.js +28 -24
  243. package/Gizmos/gizmoManager.js.map +1 -1
  244. package/Helpers/environmentHelper.js +2 -2
  245. package/Helpers/environmentHelper.js.map +1 -1
  246. package/Helpers/sceneHelpers.d.ts +1 -0
  247. package/Helpers/sceneHelpers.js.map +1 -1
  248. package/Inputs/scene.inputManager.d.ts +2 -3
  249. package/Inputs/scene.inputManager.js +14 -16
  250. package/Inputs/scene.inputManager.js.map +1 -1
  251. package/Instrumentation/sceneInstrumentation.js +2 -2
  252. package/Instrumentation/sceneInstrumentation.js.map +1 -1
  253. package/Layers/effectLayer.d.ts +2 -1
  254. package/Layers/effectLayer.js +25 -1
  255. package/Layers/effectLayer.js.map +1 -1
  256. package/Layers/effectLayerSceneComponent.d.ts +1 -1
  257. package/Layers/effectLayerSceneComponent.js +7 -3
  258. package/Layers/effectLayerSceneComponent.js.map +1 -1
  259. package/Layers/glowLayer.d.ts +1 -1
  260. package/Layers/glowLayer.js.map +1 -1
  261. package/Layers/highlightLayer.d.ts +1 -1
  262. package/Layers/highlightLayer.js +2 -1
  263. package/Layers/highlightLayer.js.map +1 -1
  264. package/Layers/layer.d.ts +2 -2
  265. package/Layers/layer.js.map +1 -1
  266. package/Layers/layerSceneComponent.d.ts +1 -1
  267. package/Layers/layerSceneComponent.js +7 -3
  268. package/Layers/layerSceneComponent.js.map +1 -1
  269. package/Lights/Shadows/cascadedShadowGenerator.js +2 -2
  270. package/Lights/Shadows/cascadedShadowGenerator.js.map +1 -1
  271. package/Lights/Shadows/shadowGenerator.js +7 -7
  272. package/Lights/Shadows/shadowGenerator.js.map +1 -1
  273. package/Loading/Plugins/babylonFileLoader.js +115 -37
  274. package/Loading/Plugins/babylonFileLoader.js.map +1 -1
  275. package/Loading/loadingScreen.js +8 -8
  276. package/Loading/loadingScreen.js.map +1 -1
  277. package/Loading/sceneLoader.js +7 -6
  278. package/Loading/sceneLoader.js.map +1 -1
  279. package/Materials/Background/backgroundMaterial.d.ts +1 -1
  280. package/Materials/Background/backgroundMaterial.js.map +1 -1
  281. package/Materials/Node/Blocks/Dual/clipPlanesBlock.d.ts +37 -0
  282. package/Materials/Node/Blocks/Dual/clipPlanesBlock.js +117 -0
  283. package/Materials/Node/Blocks/Dual/clipPlanesBlock.js.map +1 -0
  284. package/Materials/Node/Blocks/Dual/currentScreenBlock.js +12 -12
  285. package/Materials/Node/Blocks/Dual/currentScreenBlock.js.map +1 -1
  286. package/Materials/Node/Blocks/Dual/fogBlock.js +5 -5
  287. package/Materials/Node/Blocks/Dual/fogBlock.js.map +1 -1
  288. package/Materials/Node/Blocks/Dual/imageSourceBlock.js +13 -13
  289. package/Materials/Node/Blocks/Dual/imageSourceBlock.js.map +1 -1
  290. package/Materials/Node/Blocks/Dual/index.d.ts +1 -0
  291. package/Materials/Node/Blocks/Dual/index.js +1 -0
  292. package/Materials/Node/Blocks/Dual/index.js.map +1 -1
  293. package/Materials/Node/Blocks/Dual/lightBlock.js +10 -10
  294. package/Materials/Node/Blocks/Dual/lightBlock.js.map +1 -1
  295. package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.js +28 -28
  296. package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.js.map +1 -1
  297. package/Materials/Node/Blocks/Dual/reflectionTextureBlock.js +1 -1
  298. package/Materials/Node/Blocks/Dual/reflectionTextureBlock.js.map +1 -1
  299. package/Materials/Node/Blocks/Dual/sceneDepthBlock.js +7 -7
  300. package/Materials/Node/Blocks/Dual/sceneDepthBlock.js.map +1 -1
  301. package/Materials/Node/Blocks/Dual/textureBlock.js +32 -32
  302. package/Materials/Node/Blocks/Dual/textureBlock.js.map +1 -1
  303. package/Materials/Node/Blocks/Fragment/derivativeBlock.js +2 -2
  304. package/Materials/Node/Blocks/Fragment/derivativeBlock.js.map +1 -1
  305. package/Materials/Node/Blocks/Fragment/discardBlock.js +1 -1
  306. package/Materials/Node/Blocks/Fragment/discardBlock.js.map +1 -1
  307. package/Materials/Node/Blocks/Fragment/fragCoordBlock.js +1 -1
  308. package/Materials/Node/Blocks/Fragment/fragCoordBlock.js.map +1 -1
  309. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.js +10 -10
  310. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.js.map +1 -1
  311. package/Materials/Node/Blocks/Fragment/imageProcessingBlock.js +7 -7
  312. package/Materials/Node/Blocks/Fragment/imageProcessingBlock.js.map +1 -1
  313. package/Materials/Node/Blocks/Fragment/perturbNormalBlock.js +12 -12
  314. package/Materials/Node/Blocks/Fragment/perturbNormalBlock.js.map +1 -1
  315. package/Materials/Node/Blocks/Fragment/screenSizeBlock.js +1 -1
  316. package/Materials/Node/Blocks/Fragment/screenSizeBlock.js.map +1 -1
  317. package/Materials/Node/Blocks/Fragment/screenSpaceBlock.js +7 -7
  318. package/Materials/Node/Blocks/Fragment/screenSpaceBlock.js.map +1 -1
  319. package/Materials/Node/Blocks/Fragment/twirlBlock.js +4 -4
  320. package/Materials/Node/Blocks/Fragment/twirlBlock.js.map +1 -1
  321. package/Materials/Node/Blocks/Input/inputBlock.d.ts +2 -1
  322. package/Materials/Node/Blocks/Input/inputBlock.js +29 -24
  323. package/Materials/Node/Blocks/Input/inputBlock.js.map +1 -1
  324. package/Materials/Node/Blocks/PBR/anisotropyBlock.js +5 -5
  325. package/Materials/Node/Blocks/PBR/anisotropyBlock.js.map +1 -1
  326. package/Materials/Node/Blocks/PBR/clearCoatBlock.js +5 -5
  327. package/Materials/Node/Blocks/PBR/clearCoatBlock.js.map +1 -1
  328. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js +33 -33
  329. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js.map +1 -1
  330. package/Materials/Node/Blocks/PBR/reflectionBlock.js +11 -11
  331. package/Materials/Node/Blocks/PBR/reflectionBlock.js.map +1 -1
  332. package/Materials/Node/Blocks/PBR/refractionBlock.js +11 -11
  333. package/Materials/Node/Blocks/PBR/refractionBlock.js.map +1 -1
  334. package/Materials/Node/Blocks/PBR/sheenBlock.js +3 -3
  335. package/Materials/Node/Blocks/PBR/sheenBlock.js.map +1 -1
  336. package/Materials/Node/Blocks/PBR/subSurfaceBlock.js +1 -1
  337. package/Materials/Node/Blocks/PBR/subSurfaceBlock.js.map +1 -1
  338. package/Materials/Node/Blocks/Particle/particleBlendMultiplyBlock.js +1 -1
  339. package/Materials/Node/Blocks/Particle/particleBlendMultiplyBlock.js.map +1 -1
  340. package/Materials/Node/Blocks/Particle/particleRampGradientBlock.js +1 -1
  341. package/Materials/Node/Blocks/Particle/particleRampGradientBlock.js.map +1 -1
  342. package/Materials/Node/Blocks/Particle/particleTextureBlock.js +7 -7
  343. package/Materials/Node/Blocks/Particle/particleTextureBlock.js.map +1 -1
  344. package/Materials/Node/Blocks/Vertex/bonesBlock.js +3 -3
  345. package/Materials/Node/Blocks/Vertex/bonesBlock.js.map +1 -1
  346. package/Materials/Node/Blocks/Vertex/instancesBlock.js +3 -3
  347. package/Materials/Node/Blocks/Vertex/instancesBlock.js.map +1 -1
  348. package/Materials/Node/Blocks/Vertex/lightInformationBlock.js +5 -5
  349. package/Materials/Node/Blocks/Vertex/lightInformationBlock.js.map +1 -1
  350. package/Materials/Node/Blocks/Vertex/morphTargetsBlock.js +16 -16
  351. package/Materials/Node/Blocks/Vertex/morphTargetsBlock.js.map +1 -1
  352. package/Materials/Node/Blocks/Vertex/vertexOutputBlock.js +1 -1
  353. package/Materials/Node/Blocks/Vertex/vertexOutputBlock.js.map +1 -1
  354. package/Materials/Node/Blocks/addBlock.js +1 -1
  355. package/Materials/Node/Blocks/addBlock.js.map +1 -1
  356. package/Materials/Node/Blocks/arcTan2Block.js +1 -1
  357. package/Materials/Node/Blocks/arcTan2Block.js.map +1 -1
  358. package/Materials/Node/Blocks/clampBlock.js +3 -3
  359. package/Materials/Node/Blocks/clampBlock.js.map +1 -1
  360. package/Materials/Node/Blocks/cloudBlock.js +7 -7
  361. package/Materials/Node/Blocks/cloudBlock.js.map +1 -1
  362. package/Materials/Node/Blocks/colorMergerBlock.js +8 -8
  363. package/Materials/Node/Blocks/colorMergerBlock.js.map +1 -1
  364. package/Materials/Node/Blocks/colorSplitterBlock.js +5 -5
  365. package/Materials/Node/Blocks/colorSplitterBlock.js.map +1 -1
  366. package/Materials/Node/Blocks/conditionalBlock.js +10 -10
  367. package/Materials/Node/Blocks/conditionalBlock.js.map +1 -1
  368. package/Materials/Node/Blocks/crossBlock.js +1 -1
  369. package/Materials/Node/Blocks/crossBlock.js.map +1 -1
  370. package/Materials/Node/Blocks/customBlock.js +1 -1
  371. package/Materials/Node/Blocks/customBlock.js.map +1 -1
  372. package/Materials/Node/Blocks/desaturateBlock.js +4 -4
  373. package/Materials/Node/Blocks/desaturateBlock.js.map +1 -1
  374. package/Materials/Node/Blocks/distanceBlock.js +1 -1
  375. package/Materials/Node/Blocks/distanceBlock.js.map +1 -1
  376. package/Materials/Node/Blocks/divideBlock.js +1 -1
  377. package/Materials/Node/Blocks/divideBlock.js.map +1 -1
  378. package/Materials/Node/Blocks/dotBlock.js +1 -1
  379. package/Materials/Node/Blocks/dotBlock.js.map +1 -1
  380. package/Materials/Node/Blocks/elbowBlock.d.ts +27 -0
  381. package/Materials/Node/Blocks/elbowBlock.js +60 -0
  382. package/Materials/Node/Blocks/elbowBlock.js.map +1 -0
  383. package/Materials/Node/Blocks/fresnelBlock.js +2 -2
  384. package/Materials/Node/Blocks/fresnelBlock.js.map +1 -1
  385. package/Materials/Node/Blocks/gradientBlock.js +8 -8
  386. package/Materials/Node/Blocks/gradientBlock.js.map +1 -1
  387. package/Materials/Node/Blocks/index.d.ts +1 -0
  388. package/Materials/Node/Blocks/index.js +1 -0
  389. package/Materials/Node/Blocks/index.js.map +1 -1
  390. package/Materials/Node/Blocks/lengthBlock.js +1 -1
  391. package/Materials/Node/Blocks/lengthBlock.js.map +1 -1
  392. package/Materials/Node/Blocks/lerpBlock.js +1 -1
  393. package/Materials/Node/Blocks/lerpBlock.js.map +1 -1
  394. package/Materials/Node/Blocks/matrixBuilderBlock.js +1 -1
  395. package/Materials/Node/Blocks/matrixBuilderBlock.js.map +1 -1
  396. package/Materials/Node/Blocks/maxBlock.js +1 -1
  397. package/Materials/Node/Blocks/maxBlock.js.map +1 -1
  398. package/Materials/Node/Blocks/minBlock.js +1 -1
  399. package/Materials/Node/Blocks/minBlock.js.map +1 -1
  400. package/Materials/Node/Blocks/modBlock.js +1 -1
  401. package/Materials/Node/Blocks/modBlock.js.map +1 -1
  402. package/Materials/Node/Blocks/multiplyBlock.js +1 -1
  403. package/Materials/Node/Blocks/multiplyBlock.js.map +1 -1
  404. package/Materials/Node/Blocks/nLerpBlock.js +1 -1
  405. package/Materials/Node/Blocks/nLerpBlock.js.map +1 -1
  406. package/Materials/Node/Blocks/negateBlock.js +1 -1
  407. package/Materials/Node/Blocks/negateBlock.js.map +1 -1
  408. package/Materials/Node/Blocks/normalBlendBlock.js +5 -5
  409. package/Materials/Node/Blocks/normalBlendBlock.js.map +1 -1
  410. package/Materials/Node/Blocks/normalizeBlock.js +1 -1
  411. package/Materials/Node/Blocks/normalizeBlock.js.map +1 -1
  412. package/Materials/Node/Blocks/oneMinusBlock.js +1 -1
  413. package/Materials/Node/Blocks/oneMinusBlock.js.map +1 -1
  414. package/Materials/Node/Blocks/posterizeBlock.js +1 -1
  415. package/Materials/Node/Blocks/posterizeBlock.js.map +1 -1
  416. package/Materials/Node/Blocks/powBlock.js +1 -1
  417. package/Materials/Node/Blocks/powBlock.js.map +1 -1
  418. package/Materials/Node/Blocks/randomNumberBlock.js +2 -2
  419. package/Materials/Node/Blocks/randomNumberBlock.js.map +1 -1
  420. package/Materials/Node/Blocks/reciprocalBlock.js +1 -1
  421. package/Materials/Node/Blocks/reciprocalBlock.js.map +1 -1
  422. package/Materials/Node/Blocks/reflectBlock.js +1 -1
  423. package/Materials/Node/Blocks/reflectBlock.js.map +1 -1
  424. package/Materials/Node/Blocks/refractBlock.js +1 -1
  425. package/Materials/Node/Blocks/refractBlock.js.map +1 -1
  426. package/Materials/Node/Blocks/remapBlock.js +3 -3
  427. package/Materials/Node/Blocks/remapBlock.js.map +1 -1
  428. package/Materials/Node/Blocks/replaceColorBlock.js +3 -3
  429. package/Materials/Node/Blocks/replaceColorBlock.js.map +1 -1
  430. package/Materials/Node/Blocks/rotate2dBlock.js +1 -1
  431. package/Materials/Node/Blocks/rotate2dBlock.js.map +1 -1
  432. package/Materials/Node/Blocks/scaleBlock.js +1 -1
  433. package/Materials/Node/Blocks/scaleBlock.js.map +1 -1
  434. package/Materials/Node/Blocks/simplexPerlin3DBlock.js +1 -1
  435. package/Materials/Node/Blocks/simplexPerlin3DBlock.js.map +1 -1
  436. package/Materials/Node/Blocks/smoothStepBlock.js +1 -1
  437. package/Materials/Node/Blocks/smoothStepBlock.js.map +1 -1
  438. package/Materials/Node/Blocks/stepBlock.js +1 -1
  439. package/Materials/Node/Blocks/stepBlock.js.map +1 -1
  440. package/Materials/Node/Blocks/subtractBlock.js +1 -1
  441. package/Materials/Node/Blocks/subtractBlock.js.map +1 -1
  442. package/Materials/Node/Blocks/transformBlock.js +13 -13
  443. package/Materials/Node/Blocks/transformBlock.js.map +1 -1
  444. package/Materials/Node/Blocks/trigonometryBlock.js +2 -2
  445. package/Materials/Node/Blocks/trigonometryBlock.js.map +1 -1
  446. package/Materials/Node/Blocks/vectorMergerBlock.js +22 -22
  447. package/Materials/Node/Blocks/vectorMergerBlock.js.map +1 -1
  448. package/Materials/Node/Blocks/vectorSplitterBlock.js +8 -8
  449. package/Materials/Node/Blocks/vectorSplitterBlock.js.map +1 -1
  450. package/Materials/Node/Blocks/viewDirectionBlock.js +1 -1
  451. package/Materials/Node/Blocks/viewDirectionBlock.js.map +1 -1
  452. package/Materials/Node/Blocks/voronoiNoiseBlock.js +5 -5
  453. package/Materials/Node/Blocks/voronoiNoiseBlock.js.map +1 -1
  454. package/Materials/Node/Blocks/waveBlock.js +3 -3
  455. package/Materials/Node/Blocks/waveBlock.js.map +1 -1
  456. package/Materials/Node/Blocks/worleyNoise3DBlock.js +5 -5
  457. package/Materials/Node/Blocks/worleyNoise3DBlock.js.map +1 -1
  458. package/Materials/Node/Enums/nodeMaterialSystemValues.d.ts +3 -1
  459. package/Materials/Node/Enums/nodeMaterialSystemValues.js +2 -0
  460. package/Materials/Node/Enums/nodeMaterialSystemValues.js.map +1 -1
  461. package/Materials/Node/nodeMaterial.d.ts +4 -0
  462. package/Materials/Node/nodeMaterial.js +22 -11
  463. package/Materials/Node/nodeMaterial.js.map +1 -1
  464. package/Materials/Node/nodeMaterialBlock.js +12 -12
  465. package/Materials/Node/nodeMaterialBlock.js.map +1 -1
  466. package/Materials/Node/nodeMaterialBuildState.js +24 -24
  467. package/Materials/Node/nodeMaterialBuildState.js.map +1 -1
  468. package/Materials/Node/nodeMaterialBuildStateSharedData.js +1 -1
  469. package/Materials/Node/nodeMaterialBuildStateSharedData.js.map +1 -1
  470. package/Materials/PBR/pbrBaseMaterial.d.ts +2 -1
  471. package/Materials/PBR/pbrBaseMaterial.js +5 -3
  472. package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
  473. package/Materials/PBR/pbrBaseSimpleMaterial.d.ts +1 -1
  474. package/Materials/PBR/pbrBaseSimpleMaterial.js.map +1 -1
  475. package/Materials/PBR/pbrMaterial.d.ts +1 -1
  476. package/Materials/PBR/pbrMaterial.js +2 -3
  477. package/Materials/PBR/pbrMaterial.js.map +1 -1
  478. package/Materials/PBR/pbrMetallicRoughnessMaterial.d.ts +1 -1
  479. package/Materials/PBR/pbrMetallicRoughnessMaterial.js.map +1 -1
  480. package/Materials/PBR/pbrSpecularGlossinessMaterial.d.ts +1 -1
  481. package/Materials/PBR/pbrSpecularGlossinessMaterial.js.map +1 -1
  482. package/Materials/Textures/Loaders/ddsTextureLoader.js +8 -1
  483. package/Materials/Textures/Loaders/ddsTextureLoader.js.map +1 -1
  484. package/Materials/Textures/Loaders/ktxTextureLoader.js +2 -2
  485. package/Materials/Textures/Loaders/ktxTextureLoader.js.map +1 -1
  486. package/Materials/Textures/MultiviewRenderTarget.d.ts +2 -1
  487. package/Materials/Textures/MultiviewRenderTarget.js +10 -2
  488. package/Materials/Textures/MultiviewRenderTarget.js.map +1 -1
  489. package/Materials/Textures/Procedurals/proceduralTexture.js +1 -1
  490. package/Materials/Textures/Procedurals/proceduralTexture.js.map +1 -1
  491. package/Materials/Textures/baseTexture.d.ts +1 -1
  492. package/Materials/Textures/baseTexture.js.map +1 -1
  493. package/Materials/Textures/dynamicTexture.d.ts +1 -1
  494. package/Materials/Textures/dynamicTexture.js.map +1 -1
  495. package/Materials/Textures/equiRectangularCubeTexture.js +1 -1
  496. package/Materials/Textures/equiRectangularCubeTexture.js.map +1 -1
  497. package/Materials/Textures/internalTexture.d.ts +2 -0
  498. package/Materials/Textures/internalTexture.js +2 -0
  499. package/Materials/Textures/internalTexture.js.map +1 -1
  500. package/Materials/Textures/mirrorTexture.d.ts +2 -2
  501. package/Materials/Textures/mirrorTexture.js +7 -3
  502. package/Materials/Textures/mirrorTexture.js.map +1 -1
  503. package/Materials/Textures/multiRenderTarget.d.ts +1 -1
  504. package/Materials/Textures/multiRenderTarget.js.map +1 -1
  505. package/Materials/Textures/prePassRenderTarget.d.ts +1 -1
  506. package/Materials/Textures/prePassRenderTarget.js.map +1 -1
  507. package/Materials/Textures/refractionTexture.d.ts +1 -1
  508. package/Materials/Textures/refractionTexture.js +2 -2
  509. package/Materials/Textures/refractionTexture.js.map +1 -1
  510. package/Materials/Textures/renderTargetTexture.d.ts +1 -1
  511. package/Materials/Textures/renderTargetTexture.js +2 -2
  512. package/Materials/Textures/renderTargetTexture.js.map +1 -1
  513. package/Materials/Textures/texture.d.ts +1 -1
  514. package/Materials/Textures/texture.js +5 -5
  515. package/Materials/Textures/texture.js.map +1 -1
  516. package/Materials/Textures/videoTexture.js +1 -0
  517. package/Materials/Textures/videoTexture.js.map +1 -1
  518. package/Materials/effect.js +3 -3
  519. package/Materials/effect.js.map +1 -1
  520. package/Materials/material.d.ts +3 -1
  521. package/Materials/material.js +11 -3
  522. package/Materials/material.js.map +1 -1
  523. package/Materials/materialHelper.js +9 -1
  524. package/Materials/materialHelper.js.map +1 -1
  525. package/Materials/materialPluginBase.d.ts +5 -0
  526. package/Materials/materialPluginBase.js +5 -0
  527. package/Materials/materialPluginBase.js.map +1 -1
  528. package/Materials/materialPluginEvent.d.ts +1 -0
  529. package/Materials/materialPluginEvent.js.map +1 -1
  530. package/Materials/materialPluginManager.d.ts +1 -0
  531. package/Materials/materialPluginManager.js +23 -18
  532. package/Materials/materialPluginManager.js.map +1 -1
  533. package/Materials/multiMaterial.d.ts +3 -1
  534. package/Materials/multiMaterial.js +13 -11
  535. package/Materials/multiMaterial.js.map +1 -1
  536. package/Materials/pushMaterial.d.ts +1 -1
  537. package/Materials/pushMaterial.js.map +1 -1
  538. package/Materials/shaderMaterial.js +8 -4
  539. package/Materials/shaderMaterial.js.map +1 -1
  540. package/Materials/shadowDepthWrapper.d.ts +1 -1
  541. package/Materials/shadowDepthWrapper.js +3 -3
  542. package/Materials/shadowDepthWrapper.js.map +1 -1
  543. package/Materials/standardMaterial.d.ts +2 -6
  544. package/Materials/standardMaterial.js +6 -10
  545. package/Materials/standardMaterial.js.map +1 -1
  546. package/Maths/math.path.d.ts +1 -0
  547. package/Maths/math.path.js +1 -0
  548. package/Maths/math.path.js.map +1 -1
  549. package/Maths/math.size.js +1 -1
  550. package/Maths/math.size.js.map +1 -1
  551. package/Maths/math.vector.d.ts +10 -2
  552. package/Maths/math.vector.js +77 -47
  553. package/Maths/math.vector.js.map +1 -1
  554. package/Meshes/Builders/boxBuilder.js +5 -4
  555. package/Meshes/Builders/boxBuilder.js.map +1 -1
  556. package/Meshes/Builders/capsuleBuilder.js +4 -3
  557. package/Meshes/Builders/capsuleBuilder.js.map +1 -1
  558. package/Meshes/Builders/cylinderBuilder.d.ts +1 -1
  559. package/Meshes/Builders/cylinderBuilder.js +11 -8
  560. package/Meshes/Builders/cylinderBuilder.js.map +1 -1
  561. package/Meshes/Builders/decalBuilder.js +5 -2
  562. package/Meshes/Builders/decalBuilder.js.map +1 -1
  563. package/Meshes/Builders/discBuilder.js +3 -2
  564. package/Meshes/Builders/discBuilder.js.map +1 -1
  565. package/Meshes/Builders/geodesicBuilder.d.ts +1 -0
  566. package/Meshes/Builders/geodesicBuilder.js +1 -0
  567. package/Meshes/Builders/geodesicBuilder.js.map +1 -1
  568. package/Meshes/Builders/goldbergBuilder.d.ts +1 -0
  569. package/Meshes/Builders/goldbergBuilder.js +11 -1
  570. package/Meshes/Builders/goldbergBuilder.js.map +1 -1
  571. package/Meshes/Builders/groundBuilder.js +2 -1
  572. package/Meshes/Builders/groundBuilder.js.map +1 -1
  573. package/Meshes/Builders/icoSphereBuilder.js +2 -1
  574. package/Meshes/Builders/icoSphereBuilder.js.map +1 -1
  575. package/Meshes/Builders/linesBuilder.js.map +1 -1
  576. package/Meshes/Builders/planeBuilder.js +5 -4
  577. package/Meshes/Builders/planeBuilder.js.map +1 -1
  578. package/Meshes/Builders/polygonBuilder.js +8 -3
  579. package/Meshes/Builders/polygonBuilder.js.map +1 -1
  580. package/Meshes/Builders/polyhedronBuilder.js +3 -2
  581. package/Meshes/Builders/polyhedronBuilder.js.map +1 -1
  582. package/Meshes/Builders/ribbonBuilder.js +4 -3
  583. package/Meshes/Builders/ribbonBuilder.js.map +1 -1
  584. package/Meshes/Builders/sphereBuilder.js +2 -1
  585. package/Meshes/Builders/sphereBuilder.js.map +1 -1
  586. package/Meshes/Builders/tiledBoxBuilder.d.ts +30 -11
  587. package/Meshes/Builders/tiledBoxBuilder.js +34 -11
  588. package/Meshes/Builders/tiledBoxBuilder.js.map +1 -1
  589. package/Meshes/Builders/tiledPlaneBuilder.d.ts +21 -16
  590. package/Meshes/Builders/tiledPlaneBuilder.js +21 -16
  591. package/Meshes/Builders/tiledPlaneBuilder.js.map +1 -1
  592. package/Meshes/Builders/torusBuilder.js +2 -1
  593. package/Meshes/Builders/torusBuilder.js.map +1 -1
  594. package/Meshes/Builders/torusKnotBuilder.js +2 -1
  595. package/Meshes/Builders/torusKnotBuilder.js.map +1 -1
  596. package/Meshes/Compression/dracoCompression.d.ts +3 -0
  597. package/Meshes/Compression/dracoCompression.js +23 -7
  598. package/Meshes/Compression/dracoCompression.js.map +1 -1
  599. package/Meshes/abstractMesh.d.ts +14 -2
  600. package/Meshes/abstractMesh.js +51 -33
  601. package/Meshes/abstractMesh.js.map +1 -1
  602. package/Meshes/geometry.d.ts +1 -1
  603. package/Meshes/geometry.js +38 -3
  604. package/Meshes/geometry.js.map +1 -1
  605. package/Meshes/groundMesh.d.ts +1 -1
  606. package/Meshes/groundMesh.js.map +1 -1
  607. package/Meshes/instancedMesh.js +12 -10
  608. package/Meshes/instancedMesh.js.map +1 -1
  609. package/Meshes/mesh.d.ts +1 -1
  610. package/Meshes/mesh.js +73 -57
  611. package/Meshes/mesh.js.map +1 -1
  612. package/Meshes/mesh.lts.d.ts +1 -1
  613. package/Meshes/mesh.lts.js.map +1 -1
  614. package/Meshes/mesh.vertexData.d.ts +3 -3
  615. package/Meshes/mesh.vertexData.js +102 -78
  616. package/Meshes/mesh.vertexData.js.map +1 -1
  617. package/Meshes/polygonMesh.js +2 -2
  618. package/Meshes/polygonMesh.js.map +1 -1
  619. package/Meshes/subMesh.js +1 -2
  620. package/Meshes/subMesh.js.map +1 -1
  621. package/Meshes/subMesh.project.js +1 -2
  622. package/Meshes/subMesh.project.js.map +1 -1
  623. package/Meshes/thinInstanceMesh.js +5 -0
  624. package/Meshes/thinInstanceMesh.js.map +1 -1
  625. package/Meshes/trailMesh.d.ts +1 -1
  626. package/Meshes/trailMesh.js.map +1 -1
  627. package/Meshes/transformNode.d.ts +0 -2
  628. package/Meshes/transformNode.js +46 -18
  629. package/Meshes/transformNode.js.map +1 -1
  630. package/Misc/HighDynamicRange/cubemapToSphericalPolynomial.d.ts +5 -0
  631. package/Misc/HighDynamicRange/cubemapToSphericalPolynomial.js +13 -2
  632. package/Misc/HighDynamicRange/cubemapToSphericalPolynomial.js.map +1 -1
  633. package/Misc/PerformanceViewer/performanceViewerCollectionStrategies.js +6 -12
  634. package/Misc/PerformanceViewer/performanceViewerCollectionStrategies.js.map +1 -1
  635. package/Misc/PerformanceViewer/performanceViewerCollector.js +36 -19
  636. package/Misc/PerformanceViewer/performanceViewerCollector.js.map +1 -1
  637. package/Misc/assetsManager.d.ts +2 -1
  638. package/Misc/assetsManager.js +15 -1
  639. package/Misc/assetsManager.js.map +1 -1
  640. package/Misc/basis.js +1 -1
  641. package/Misc/basis.js.map +1 -1
  642. package/Misc/brdfTextureTools.js +4 -1
  643. package/Misc/brdfTextureTools.js.map +1 -1
  644. package/Misc/dds.js +7 -0
  645. package/Misc/dds.js.map +1 -1
  646. package/Misc/decorators.d.ts +1 -1
  647. package/Misc/decorators.js +8 -1
  648. package/Misc/decorators.js.map +1 -1
  649. package/Misc/deepCopier.js +3 -3
  650. package/Misc/deepCopier.js.map +1 -1
  651. package/Misc/devTools.js +1 -1
  652. package/Misc/devTools.js.map +1 -1
  653. package/Misc/environmentTextureTools.js +2 -2
  654. package/Misc/environmentTextureTools.js.map +1 -1
  655. package/Misc/error.d.ts +51 -0
  656. package/Misc/error.js +66 -0
  657. package/Misc/error.js.map +1 -0
  658. package/Misc/fileTools.d.ts +4 -4
  659. package/Misc/fileTools.js +14 -12
  660. package/Misc/fileTools.js.map +1 -1
  661. package/Misc/index.d.ts +2 -0
  662. package/Misc/index.js +2 -0
  663. package/Misc/index.js.map +1 -1
  664. package/Misc/khronosTextureContainer2.js +4 -3
  665. package/Misc/khronosTextureContainer2.js.map +1 -1
  666. package/Misc/reflector.js +6 -6
  667. package/Misc/reflector.js.map +1 -1
  668. package/Misc/tools.js +15 -13
  669. package/Misc/tools.js.map +1 -1
  670. package/Misc/uniqueIdGenerator.js +1 -1
  671. package/Misc/uniqueIdGenerator.js.map +1 -1
  672. package/Offline/database.js +1 -1
  673. package/Offline/database.js.map +1 -1
  674. package/Particles/baseParticleSystem.d.ts +4 -1
  675. package/Particles/baseParticleSystem.js +20 -5
  676. package/Particles/baseParticleSystem.js.map +1 -1
  677. package/Particles/gpuParticleSystem.js +2 -1
  678. package/Particles/gpuParticleSystem.js.map +1 -1
  679. package/Particles/particleHelper.js +2 -2
  680. package/Particles/particleHelper.js.map +1 -1
  681. package/Particles/particleSystem.d.ts +13 -1
  682. package/Particles/particleSystem.js +27 -1
  683. package/Particles/particleSystem.js.map +1 -1
  684. package/Physics/Plugins/ammoJSPlugin.d.ts +5 -1
  685. package/Physics/Plugins/ammoJSPlugin.js +16 -11
  686. package/Physics/Plugins/ammoJSPlugin.js.map +1 -1
  687. package/Physics/physicsEngine.d.ts +1 -0
  688. package/Physics/physicsEngine.js +3 -1
  689. package/Physics/physicsEngine.js.map +1 -1
  690. package/Physics/physicsImpostor.d.ts +2 -2
  691. package/Physics/physicsImpostor.js.map +1 -1
  692. package/PostProcesses/blurPostProcess.js +5 -5
  693. package/PostProcesses/blurPostProcess.js.map +1 -1
  694. package/PostProcesses/imageProcessingPostProcess.js +1 -1
  695. package/PostProcesses/imageProcessingPostProcess.js.map +1 -1
  696. package/PostProcesses/postProcess.js +1 -1
  697. package/PostProcesses/postProcess.js.map +1 -1
  698. package/PostProcesses/postProcessManager.js +2 -2
  699. package/PostProcesses/postProcessManager.js.map +1 -1
  700. package/Probes/reflectionProbe.js +2 -2
  701. package/Probes/reflectionProbe.js.map +1 -1
  702. package/Rendering/depthPeelingRenderer.js +3 -3
  703. package/Rendering/depthPeelingRenderer.js.map +1 -1
  704. package/Rendering/geometryBufferRenderer.js +8 -8
  705. package/Rendering/geometryBufferRenderer.js.map +1 -1
  706. package/Rendering/outlineRenderer.js +1 -1
  707. package/Rendering/outlineRenderer.js.map +1 -1
  708. package/Rendering/subSurfaceConfiguration.js +1 -1
  709. package/Rendering/subSurfaceConfiguration.js.map +1 -1
  710. package/Rendering/utilityLayerRenderer.js +4 -0
  711. package/Rendering/utilityLayerRenderer.js.map +1 -1
  712. package/Shaders/ShadersInclude/instancesDeclaration.js +1 -1
  713. package/Shaders/ShadersInclude/instancesDeclaration.js.map +1 -1
  714. package/Shaders/ShadersInclude/pbrBlockAlbedoOpacity.js +1 -1
  715. package/Shaders/ShadersInclude/pbrBlockAlbedoOpacity.js.map +1 -1
  716. package/Shaders/ShadersInclude/pbrFragmentExtraDeclaration.js +1 -1
  717. package/Shaders/ShadersInclude/pbrFragmentExtraDeclaration.js.map +1 -1
  718. package/Shaders/ShadersInclude/pointCloudVertex.js +1 -1
  719. package/Shaders/ShadersInclude/pointCloudVertex.js.map +1 -1
  720. package/Shaders/ShadersInclude/prePassVertex.js +1 -1
  721. package/Shaders/ShadersInclude/prePassVertex.js.map +1 -1
  722. package/Shaders/background.vertex.js +1 -1
  723. package/Shaders/background.vertex.js.map +1 -1
  724. package/Shaders/color.fragment.js +1 -1
  725. package/Shaders/color.fragment.js.map +1 -1
  726. package/Shaders/color.vertex.js +1 -1
  727. package/Shaders/color.vertex.js.map +1 -1
  728. package/Shaders/default.fragment.js +1 -1
  729. package/Shaders/default.fragment.js.map +1 -1
  730. package/Shaders/default.vertex.js +1 -1
  731. package/Shaders/default.vertex.js.map +1 -1
  732. package/Shaders/geometry.vertex.js +1 -1
  733. package/Shaders/geometry.vertex.js.map +1 -1
  734. package/Shaders/pbr.fragment.js +1 -1
  735. package/Shaders/pbr.fragment.js.map +1 -1
  736. package/Shaders/pbr.vertex.js +1 -1
  737. package/Shaders/pbr.vertex.js.map +1 -1
  738. package/ShadersWGSL/ShadersInclude/instancesDeclaration.js +1 -1
  739. package/ShadersWGSL/ShadersInclude/instancesDeclaration.js.map +1 -1
  740. package/ShadersWGSL/gpuUpdateParticles.compute.js +1 -1
  741. package/ShadersWGSL/gpuUpdateParticles.compute.js.map +1 -1
  742. package/Sprites/spriteManager.js +9 -10
  743. package/Sprites/spriteManager.js.map +1 -1
  744. package/Sprites/spriteMap.js +2 -2
  745. package/Sprites/spriteMap.js.map +1 -1
  746. package/Sprites/spriteRenderer.js +1 -1
  747. package/Sprites/spriteRenderer.js.map +1 -1
  748. package/XR/features/WebXRControllerPointerSelection.js +15 -9
  749. package/XR/features/WebXRControllerPointerSelection.js.map +1 -1
  750. package/XR/features/WebXRDOMOverlay.js +1 -1
  751. package/XR/features/WebXRDOMOverlay.js.map +1 -1
  752. package/XR/features/WebXRHandTracking.js +30 -30
  753. package/XR/features/WebXRHandTracking.js.map +1 -1
  754. package/XR/features/WebXRImageTracking.js +2 -2
  755. package/XR/features/WebXRImageTracking.js.map +1 -1
  756. package/XR/features/WebXRLayers.d.ts +28 -5
  757. package/XR/features/WebXRLayers.js +54 -20
  758. package/XR/features/WebXRLayers.js.map +1 -1
  759. package/XR/features/WebXRNearInteraction.d.ts +35 -3
  760. package/XR/features/WebXRNearInteraction.js +204 -41
  761. package/XR/features/WebXRNearInteraction.js.map +1 -1
  762. package/XR/motionController/webXRAbstractMotionController.js +1 -1
  763. package/XR/motionController/webXRAbstractMotionController.js.map +1 -1
  764. package/XR/motionController/webXRMotionControllerManager.js +2 -2
  765. package/XR/motionController/webXRMotionControllerManager.js.map +1 -1
  766. package/XR/motionController/webXRProfiledMotionController.js +1 -1
  767. package/XR/motionController/webXRProfiledMotionController.js.map +1 -1
  768. package/XR/webXRCamera.js +17 -4
  769. package/XR/webXRCamera.js.map +1 -1
  770. package/XR/webXRDefaultExperience.js +3 -0
  771. package/XR/webXRDefaultExperience.js.map +1 -1
  772. package/XR/webXREnterExitUI.js +2 -2
  773. package/XR/webXREnterExitUI.js.map +1 -1
  774. package/XR/webXRExperienceHelper.js +3 -2
  775. package/XR/webXRExperienceHelper.js.map +1 -1
  776. package/XR/webXRFeaturesManager.js +6 -6
  777. package/XR/webXRFeaturesManager.js.map +1 -1
  778. package/XR/webXRInputSource.js +3 -3
  779. package/XR/webXRInputSource.js.map +1 -1
  780. package/XR/webXRRenderTargetTextureProvider.d.ts +3 -2
  781. package/XR/webXRRenderTargetTextureProvider.js +37 -18
  782. package/XR/webXRRenderTargetTextureProvider.js.map +1 -1
  783. package/XR/webXRSessionManager.d.ts +1 -0
  784. package/XR/webXRSessionManager.js +7 -2
  785. package/XR/webXRSessionManager.js.map +1 -1
  786. package/assetContainer.d.ts +1 -1
  787. package/assetContainer.js +5 -4
  788. package/assetContainer.js.map +1 -1
  789. package/index.d.ts +1 -0
  790. package/index.js +1 -0
  791. package/index.js.map +1 -1
  792. package/node.d.ts +1 -1
  793. package/node.js.map +1 -1
  794. package/package.json +31 -16
  795. package/scene.d.ts +6 -12
  796. package/scene.js +53 -47
  797. package/scene.js.map +1 -1
  798. package/types.d.ts +1 -1
  799. package/types.js.map +1 -1
  800. package/DeviceInput/Implementations/nativeDeviceInputSystem.js.map +0 -1
  801. package/DeviceInput/Implementations/webDeviceInputSystem.js.map +0 -1
  802. package/DeviceInput/Interfaces/inputInterfaces.js.map +0 -1
  803. package/DeviceInput/deviceInputSystem.d.ts +0 -60
  804. package/DeviceInput/deviceInputSystem.js +0 -84
  805. package/DeviceInput/deviceInputSystem.js.map +0 -1
  806. package/Misc/baseError.d.ts +0 -7
  807. package/Misc/baseError.js +0 -18
  808. package/Misc/baseError.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"groundMesh.js","sourceRoot":"","sources":["../../../sourceES6/core/Meshes/groundMesh.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC7E,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAEtC,IAAI,CAAC,iBAAiB,GAAG,UAAC,UAAe,EAAE,KAAY;IACnD,OAAO,UAAU,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;AAC/C,CAAC,CAAC;AAEF;;GAEG;AACH;IAAgC,8BAAI;IAuBhC,oBAAY,IAAY,EAAE,KAAY;QAAtC,YACI,kBAAM,IAAI,EAAE,KAAK,CAAC,SACrB;QAxBD,oCAAoC;QAC7B,oBAAc,GAAG,KAAK,CAAC;;IAuB9B,CAAC;IAED;;;OAGG;IACI,iCAAY,GAAnB;QACI,OAAO,YAAY,CAAC;IACxB,CAAC;IAKD,sBAAW,oCAAY;QAHvB;;WAEG;aACH;YACI,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;QAC9D,CAAC;;;OAAA;IAKD,sBAAW,qCAAa;QAHxB;;WAEG;aACH;YACI,OAAO,IAAI,CAAC,cAAc,CAAC;QAC/B,CAAC;;;OAAA;IAKD,sBAAW,qCAAa;QAHxB;;WAEG;aACH;YACI,OAAO,IAAI,CAAC,cAAc,CAAC;QAC/B,CAAC;;;OAAA;IAED;;;;;OAKG;IACI,6BAAQ,GAAf,UAAgB,WAAmB,EAAE,gBAAqB;QAArB,iCAAA,EAAA,qBAAqB;QACtD,IAAI,CAAC,cAAc,GAAG,WAAW,CAAC;QAClC,IAAI,CAAC,cAAc,GAAG,WAAW,CAAC;QAClC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;QAE5B,wDAAwD;QACxD,IAAM,SAAS,GAAG,IAAW,CAAC;QAC9B,IAAI,SAAS,CAAC,6BAA6B,EAAE;YACzC,SAAS,CAAC,6BAA6B,CAAC,gBAAgB,CAAC,CAAC;SAC7D;IACL,CAAC;IAED;;;;;;OAMG;IACI,2CAAsB,GAA7B,UAA8B,CAAS,EAAE,CAAS;QAC9C,IAAI,KAAK,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QAClC,IAAI,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAClC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAC1B,IAAI,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACpC,OAAO,CAAC,mCAAmC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,wCAAwC;QACjH,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;QACd,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;QACd,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE;YACtE,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;SAC1B;QACD,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,IAAI,CAAC,EAAE;YACrD,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACxB,IAAI,CAAC,mBAAmB,EAAE,CAAC;SAC9B;QACD,IAAI,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACnC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;QACzD,+BAA+B;QAC/B,OAAO,CAAC,mCAAmC,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;QACzE,OAAO,OAAO,CAAC,CAAC,CAAC;IACrB,CAAC;IAED;;;;;;OAMG;IACI,2CAAsB,GAA7B,UAA8B,CAAS,EAAE,CAAS;QAC9C,IAAI,MAAM,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QACxC,IAAI,CAAC,2BAA2B,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;QAC/C,OAAO,MAAM,CAAC;IAClB,CAAC;IAED;;;;;;;;OAQG;IACI,gDAA2B,GAAlC,UAAmC,CAAS,EAAE,CAAS,EAAE,GAAY;QACjE,IAAI,KAAK,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QAClC,IAAI,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAClC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAC1B,IAAI,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACpC,OAAO,CAAC,mCAAmC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,wCAAwC;QACjH,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;QACd,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;QACd,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE;YACtE,OAAO,IAAI,CAAC;SACf;QACD,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,IAAI,CAAC,EAAE;YACrD,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACxB,IAAI,CAAC,mBAAmB,EAAE,CAAC;SAC9B;QACD,IAAI,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACnC,OAAO,CAAC,8BAA8B,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;QAC9E,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;;;MAKE;IACK,4CAAuB,GAA9B;QACI,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,IAAI,CAAC,EAAE;YACrD,IAAI,CAAC,gBAAgB,EAAE,CAAC;SAC3B;QACD,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC3B,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,8FAA8F;IACtF,gCAAW,GAAnB,UAAoB,CAAS,EAAE,CAAS;QACpC,wEAAwE;QACxE,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;QAC3E,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC;QACnG,IAAI,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,GAAG,IAAI,CAAC,cAAc,GAAG,GAAG,CAAC,CAAC;QAC9D,IAAI,KAAK,CAAC;QACV,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;YACrC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC;SACvB;aAAM;YACH,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC;SACvB;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,qEAAqE;IACrE,mGAAmG;IACnG,+GAA+G;IAC/G,sFAAsF;IACtF,wFAAwF;IACxF,0BAA0B;IAClB,qCAAgB,GAAxB;QACI,IAAI,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC;QACxC,IAAI,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC;QACxC,IAAI,CAAC,YAAY,GAAG,IAAI,KAAK,EAAE,CAAC;QAChC,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,aAAa,EAAE,GAAG,EAAE,EAAE;YAC1C,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,aAAa,EAAE,GAAG,EAAE,EAAE;gBAC1C,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,OAAO,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,IAAI,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;gBACvH,IAAI,CAAC,YAAY,CAAC,GAAG,GAAG,aAAa,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC;aACvD;SACJ;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,wEAAwE;IACxE,+GAA+G;IAC/G,sFAAsF;IACtF,wFAAwF;IACxF,0BAA0B;IAClB,wCAAmB,GAA3B;QACI,IAAI,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;QAEhE,IAAI,CAAC,SAAS,EAAE;YACZ,OAAO,IAAI,CAAC;SACf;QAED,IAAI,EAAE,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC/B,IAAI,EAAE,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC/B,IAAI,EAAE,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC/B,IAAI,EAAE,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC/B,IAAI,IAAI,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACjC,IAAI,IAAI,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACjC,IAAI,IAAI,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACjC,IAAI,KAAK,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAClC,IAAI,KAAK,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAClC,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,IAAI,EAAE,GAAG,CAAC,CAAC,CAAK,wCAAwC;QACxD,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,IAAI,EAAE,GAAG,CAAC,CAAC,CAAK,8CAA8C;QAC9D,IAAI,EAAE,GAAG,CAAC,CAAC;QAEX,IAAI,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC;QACxC,IAAI,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC;QAExC,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,aAAa,EAAE,GAAG,EAAE,EAAE;YAC1C,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,aAAa,EAAE,GAAG,EAAE,EAAE;gBAC1C,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;gBACZ,CAAC,GAAG,GAAG,GAAG,CAAC,aAAa,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;gBAClC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,aAAa,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;gBACxC,EAAE,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBACxB,EAAE,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC5B,EAAE,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC5B,EAAE,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC5B,EAAE,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC5B,EAAE,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC5B,EAAE,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBACxB,EAAE,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC5B,EAAE,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC5B,EAAE,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC5B,EAAE,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC5B,EAAE,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;gBAE5B,gBAAgB;gBAChB,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;gBACnC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAa,0BAA0B;gBAE5D,oBAAoB;gBACpB,sCAAsC;gBACtC,oFAAoF;gBACpF,mFAAmF;gBACnF,gDAAgD;gBAChD,EAAE,CAAC,aAAa,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;gBAC3B,EAAE,CAAC,aAAa,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;gBAC3B,EAAE,CAAC,aAAa,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;gBAC3B,OAAO,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAE,0CAA0C;gBAClF,OAAO,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;gBACtC,KAAK,CAAC,SAAS,EAAE,CAAC;gBAClB,KAAK,CAAC,SAAS,EAAE,CAAC;gBAClB,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;gBACzD,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;gBAEzD,IAAI,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,GAAG,aAAa,GAAG,GAAG,CAAC,CAAC;gBACxD,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;gBACjC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC1D,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;aAC7D;SACJ;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;OAGG;IACI,8BAAS,GAAhB,UAAiB,mBAAwB;QACrC,iBAAM,SAAS,YAAC,mBAAmB,CAAC,CAAC;QACrC,mBAAmB,CAAC,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC;QACxD,mBAAmB,CAAC,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC;QAExD,mBAAmB,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;QACtC,mBAAmB,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;QAEtC,mBAAmB,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;QACtC,mBAAmB,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;QAEtC,mBAAmB,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC;QACxC,mBAAmB,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;IAC9C,CAAC;IAED;;;;;OAKG;IACW,gBAAK,GAAnB,UAAoB,UAAe,EAAE,KAAY;QAC7C,IAAI,MAAM,GAAG,IAAI,UAAU,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAEpD,MAAM,CAAC,cAAc,GAAG,UAAU,CAAC,aAAa,IAAI,CAAC,CAAC;QACtD,MAAM,CAAC,cAAc,GAAG,UAAU,CAAC,aAAa,IAAI,CAAC,CAAC;QAEtD,MAAM,CAAC,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC;QAC/B,MAAM,CAAC,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC;QAE/B,MAAM,CAAC,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC;QAC/B,MAAM,CAAC,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC;QAE/B,MAAM,CAAC,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC;QACjC,MAAM,CAAC,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC;QAEnC,OAAO,MAAM,CAAC;IAClB,CAAC;IACL,iBAAC;AAAD,CAAC,AAzTD,CAAgC,IAAI,GAyTnC","sourcesContent":["import { Scene } from \"../scene\";\r\nimport { Vector3, Vector2, TmpVectors, Vector4 } from \"../Maths/math.vector\";\r\nimport { VertexBuffer } from \"../Buffers/buffer\";\r\nimport { Mesh } from \"../Meshes/mesh\";\r\n\r\nMesh._GroundMeshParser = (parsedMesh: any, scene: Scene): Mesh => {\r\n return GroundMesh.Parse(parsedMesh, scene);\r\n};\r\n\r\n/**\r\n * Mesh representing the ground\r\n */\r\nexport class GroundMesh extends Mesh {\r\n /** If octree should be generated */\r\n public generateOctree = false;\r\n\r\n private _heightQuads: { slope: Vector2; facet1: Vector4; facet2: Vector4 }[];\r\n\r\n /** @hidden */\r\n public _subdivisionsX: number;\r\n /** @hidden */\r\n public _subdivisionsY: number;\r\n /** @hidden */\r\n public _width: number;\r\n /** @hidden */\r\n public _height: number;\r\n /** @hidden */\r\n public _minX: number;\r\n /** @hidden */\r\n public _maxX: number;\r\n /** @hidden */\r\n public _minZ: number;\r\n /** @hidden */\r\n public _maxZ: number;\r\n\r\n constructor(name: string, scene: Scene) {\r\n super(name, scene);\r\n }\r\n\r\n /**\r\n * \"GroundMesh\"\r\n * @returns \"GroundMesh\"\r\n */\r\n public getClassName(): string {\r\n return \"GroundMesh\";\r\n }\r\n\r\n /**\r\n * The minimum of x and y subdivisions\r\n */\r\n public get subdivisions(): number {\r\n return Math.min(this._subdivisionsX, this._subdivisionsY);\r\n }\r\n\r\n /**\r\n * X subdivisions\r\n */\r\n public get subdivisionsX(): number {\r\n return this._subdivisionsX;\r\n }\r\n\r\n /**\r\n * Y subdivisions\r\n */\r\n public get subdivisionsY(): number {\r\n return this._subdivisionsY;\r\n }\r\n\r\n /**\r\n * This function will update an octree to help to select the right submeshes for rendering, picking and collision computations.\r\n * Please note that you must have a decent number of submeshes to get performance improvements when using an octree\r\n * @param chunksCount the number of subdivisions for x and y\r\n * @param octreeBlocksSize (Default: 32)\r\n */\r\n public optimize(chunksCount: number, octreeBlocksSize = 32): void {\r\n this._subdivisionsX = chunksCount;\r\n this._subdivisionsY = chunksCount;\r\n this.subdivide(chunksCount);\r\n\r\n // Call the octree system optimization if it is defined.\r\n const thisAsAny = this as any;\r\n if (thisAsAny.createOrUpdateSubmeshesOctree) {\r\n thisAsAny.createOrUpdateSubmeshesOctree(octreeBlocksSize);\r\n }\r\n }\r\n\r\n /**\r\n * Returns a height (y) value in the World system :\r\n * the ground altitude at the coordinates (x, z) expressed in the World system.\r\n * @param x x coordinate\r\n * @param z z coordinate\r\n * @returns the ground y position if (x, z) are outside the ground surface.\r\n */\r\n public getHeightAtCoordinates(x: number, z: number): number {\r\n var world = this.getWorldMatrix();\r\n var invMat = TmpVectors.Matrix[5];\r\n world.invertToRef(invMat);\r\n var tmpVect = TmpVectors.Vector3[8];\r\n Vector3.TransformCoordinatesFromFloatsToRef(x, 0.0, z, invMat, tmpVect); // transform x,z in the mesh local space\r\n x = tmpVect.x;\r\n z = tmpVect.z;\r\n if (x < this._minX || x > this._maxX || z < this._minZ || z > this._maxZ) {\r\n return this.position.y;\r\n }\r\n if (!this._heightQuads || this._heightQuads.length == 0) {\r\n this._initHeightQuads();\r\n this._computeHeightQuads();\r\n }\r\n var facet = this._getFacetAt(x, z);\r\n var y = -(facet.x * x + facet.z * z + facet.w) / facet.y;\r\n // return y in the World system\r\n Vector3.TransformCoordinatesFromFloatsToRef(0.0, y, 0.0, world, tmpVect);\r\n return tmpVect.y;\r\n }\r\n\r\n /**\r\n * Returns a normalized vector (Vector3) orthogonal to the ground\r\n * at the ground coordinates (x, z) expressed in the World system.\r\n * @param x x coordinate\r\n * @param z z coordinate\r\n * @returns Vector3(0.0, 1.0, 0.0) if (x, z) are outside the ground surface.\r\n */\r\n public getNormalAtCoordinates(x: number, z: number): Vector3 {\r\n var normal = new Vector3(0.0, 1.0, 0.0);\r\n this.getNormalAtCoordinatesToRef(x, z, normal);\r\n return normal;\r\n }\r\n\r\n /**\r\n * Updates the Vector3 passed a reference with a normalized vector orthogonal to the ground\r\n * at the ground coordinates (x, z) expressed in the World system.\r\n * Doesn't update the reference Vector3 if (x, z) are outside the ground surface.\r\n * @param x x coordinate\r\n * @param z z coordinate\r\n * @param ref vector to store the result\r\n * @returns the GroundMesh.\r\n */\r\n public getNormalAtCoordinatesToRef(x: number, z: number, ref: Vector3): GroundMesh {\r\n var world = this.getWorldMatrix();\r\n var tmpMat = TmpVectors.Matrix[5];\r\n world.invertToRef(tmpMat);\r\n var tmpVect = TmpVectors.Vector3[8];\r\n Vector3.TransformCoordinatesFromFloatsToRef(x, 0.0, z, tmpMat, tmpVect); // transform x,z in the mesh local space\r\n x = tmpVect.x;\r\n z = tmpVect.z;\r\n if (x < this._minX || x > this._maxX || z < this._minZ || z > this._maxZ) {\r\n return this;\r\n }\r\n if (!this._heightQuads || this._heightQuads.length == 0) {\r\n this._initHeightQuads();\r\n this._computeHeightQuads();\r\n }\r\n var facet = this._getFacetAt(x, z);\r\n Vector3.TransformNormalFromFloatsToRef(facet.x, facet.y, facet.z, world, ref);\r\n return this;\r\n }\r\n\r\n /**\r\n * Force the heights to be recomputed for getHeightAtCoordinates() or getNormalAtCoordinates()\r\n * if the ground has been updated.\r\n * This can be used in the render loop.\r\n * @returns the GroundMesh.\r\n */\r\n public updateCoordinateHeights(): GroundMesh {\r\n if (!this._heightQuads || this._heightQuads.length == 0) {\r\n this._initHeightQuads();\r\n }\r\n this._computeHeightQuads();\r\n return this;\r\n }\r\n\r\n // Returns the element \"facet\" from the heightQuads array relative to (x, z) local coordinates\r\n private _getFacetAt(x: number, z: number): Vector4 {\r\n // retrieve col and row from x, z coordinates in the ground local system\r\n var col = Math.floor((x + this._maxX) * this._subdivisionsX / this._width);\r\n var row = Math.floor(-(z + this._maxZ) * this._subdivisionsY / this._height + this._subdivisionsY);\r\n var quad = this._heightQuads[row * this._subdivisionsX + col];\r\n var facet;\r\n if (z < quad.slope.x * x + quad.slope.y) {\r\n facet = quad.facet1;\r\n } else {\r\n facet = quad.facet2;\r\n }\r\n return facet;\r\n }\r\n\r\n // Creates and populates the heightMap array with \"facet\" elements :\r\n // a quad is two triangular facets separated by a slope, so a \"facet\" element is 1 slope + 2 facets\r\n // slope : Vector2(c, h) = 2D diagonal line equation setting apart two triangular facets in a quad : z = cx + h\r\n // facet1 : Vector4(a, b, c, d) = first facet 3D plane equation : ax + by + cz + d = 0\r\n // facet2 : Vector4(a, b, c, d) = second facet 3D plane equation : ax + by + cz + d = 0\r\n // Returns the GroundMesh.\r\n private _initHeightQuads(): GroundMesh {\r\n var subdivisionsX = this._subdivisionsX;\r\n var subdivisionsY = this._subdivisionsY;\r\n this._heightQuads = new Array();\r\n for (var row = 0; row < subdivisionsY; row++) {\r\n for (var col = 0; col < subdivisionsX; col++) {\r\n var quad = { slope: Vector2.Zero(), facet1: new Vector4(0.0, 0.0, 0.0, 0.0), facet2: new Vector4(0.0, 0.0, 0.0, 0.0) };\r\n this._heightQuads[row * subdivisionsX + col] = quad;\r\n }\r\n }\r\n return this;\r\n }\r\n\r\n // Compute each quad element values and update the the heightMap array :\r\n // slope : Vector2(c, h) = 2D diagonal line equation setting apart two triangular facets in a quad : z = cx + h\r\n // facet1 : Vector4(a, b, c, d) = first facet 3D plane equation : ax + by + cz + d = 0\r\n // facet2 : Vector4(a, b, c, d) = second facet 3D plane equation : ax + by + cz + d = 0\r\n // Returns the GroundMesh.\r\n private _computeHeightQuads(): GroundMesh {\r\n var positions = this.getVerticesData(VertexBuffer.PositionKind);\r\n\r\n if (!positions) {\r\n return this;\r\n }\r\n\r\n var v1 = TmpVectors.Vector3[3];\r\n var v2 = TmpVectors.Vector3[2];\r\n var v3 = TmpVectors.Vector3[1];\r\n var v4 = TmpVectors.Vector3[0];\r\n var v1v2 = TmpVectors.Vector3[4];\r\n var v1v3 = TmpVectors.Vector3[5];\r\n var v1v4 = TmpVectors.Vector3[6];\r\n var norm1 = TmpVectors.Vector3[7];\r\n var norm2 = TmpVectors.Vector3[8];\r\n var i = 0;\r\n var j = 0;\r\n var k = 0;\r\n var cd = 0; // 2D slope coefficient : z = cd * x + h\r\n var h = 0;\r\n var d1 = 0; // facet plane equation : ax + by + cz + d = 0\r\n var d2 = 0;\r\n\r\n var subdivisionsX = this._subdivisionsX;\r\n var subdivisionsY = this._subdivisionsY;\r\n\r\n for (var row = 0; row < subdivisionsY; row++) {\r\n for (var col = 0; col < subdivisionsX; col++) {\r\n i = col * 3;\r\n j = row * (subdivisionsX + 1) * 3;\r\n k = (row + 1) * (subdivisionsX + 1) * 3;\r\n v1.x = positions[j + i];\r\n v1.y = positions[j + i + 1];\r\n v1.z = positions[j + i + 2];\r\n v2.x = positions[j + i + 3];\r\n v2.y = positions[j + i + 4];\r\n v2.z = positions[j + i + 5];\r\n v3.x = positions[k + i];\r\n v3.y = positions[k + i + 1];\r\n v3.z = positions[k + i + 2];\r\n v4.x = positions[k + i + 3];\r\n v4.y = positions[k + i + 4];\r\n v4.z = positions[k + i + 5];\r\n\r\n // 2D slope V1V4\r\n cd = (v4.z - v1.z) / (v4.x - v1.x);\r\n h = v1.z - cd * v1.x; // v1 belongs to the slope\r\n\r\n // facet equations :\r\n // we compute each facet normal vector\r\n // the equation of the facet plane is : norm.x * x + norm.y * y + norm.z * z + d = 0\r\n // we compute the value d by applying the equation to v1 which belongs to the plane\r\n // then we store the facet equation in a Vector4\r\n v2.subtractToRef(v1, v1v2);\r\n v3.subtractToRef(v1, v1v3);\r\n v4.subtractToRef(v1, v1v4);\r\n Vector3.CrossToRef(v1v4, v1v3, norm1); // caution : CrossToRef uses the Tmp class\r\n Vector3.CrossToRef(v1v2, v1v4, norm2);\r\n norm1.normalize();\r\n norm2.normalize();\r\n d1 = -(norm1.x * v1.x + norm1.y * v1.y + norm1.z * v1.z);\r\n d2 = -(norm2.x * v2.x + norm2.y * v2.y + norm2.z * v2.z);\r\n\r\n var quad = this._heightQuads[row * subdivisionsX + col];\r\n quad.slope.copyFromFloats(cd, h);\r\n quad.facet1.copyFromFloats(norm1.x, norm1.y, norm1.z, d1);\r\n quad.facet2.copyFromFloats(norm2.x, norm2.y, norm2.z, d2);\r\n }\r\n }\r\n return this;\r\n }\r\n\r\n /**\r\n * Serializes this ground mesh\r\n * @param serializationObject object to write serialization to\r\n */\r\n public serialize(serializationObject: any): void {\r\n super.serialize(serializationObject);\r\n serializationObject.subdivisionsX = this._subdivisionsX;\r\n serializationObject.subdivisionsY = this._subdivisionsY;\r\n\r\n serializationObject.minX = this._minX;\r\n serializationObject.maxX = this._maxX;\r\n\r\n serializationObject.minZ = this._minZ;\r\n serializationObject.maxZ = this._maxZ;\r\n\r\n serializationObject.width = this._width;\r\n serializationObject.height = this._height;\r\n }\r\n\r\n /**\r\n * Parses a serialized ground mesh\r\n * @param parsedMesh the serialized mesh\r\n * @param scene the scene to create the ground mesh in\r\n * @returns the created ground mesh\r\n */\r\n public static Parse(parsedMesh: any, scene: Scene): GroundMesh {\r\n var result = new GroundMesh(parsedMesh.name, scene);\r\n\r\n result._subdivisionsX = parsedMesh.subdivisionsX || 1;\r\n result._subdivisionsY = parsedMesh.subdivisionsY || 1;\r\n\r\n result._minX = parsedMesh.minX;\r\n result._maxX = parsedMesh.maxX;\r\n\r\n result._minZ = parsedMesh.minZ;\r\n result._maxZ = parsedMesh.maxZ;\r\n\r\n result._width = parsedMesh.width;\r\n result._height = parsedMesh.height;\r\n\r\n return result;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"groundMesh.js","sourceRoot":"","sources":["../../../sourceES6/core/Meshes/groundMesh.ts"],"names":[],"mappings":"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","sourcesContent":["import { Scene } from \"../scene\";\r\nimport { Vector3, Vector2, TmpVectors, Vector4 } from \"../Maths/math.vector\";\r\nimport { VertexBuffer } from \"../Buffers/buffer\";\r\nimport { Mesh } from \"../Meshes/mesh\";\r\n\r\nMesh._GroundMeshParser = (parsedMesh: any, scene: Scene): Mesh => {\r\n return GroundMesh.Parse(parsedMesh, scene);\r\n};\r\n\r\n/**\r\n * Mesh representing the ground\r\n */\r\nexport class GroundMesh extends Mesh {\r\n /** If octree should be generated */\r\n public generateOctree = false;\r\n\r\n private _heightQuads: { slope: Vector2; facet1: Vector4; facet2: Vector4 }[];\r\n\r\n /** @hidden */\r\n public _subdivisionsX: number;\r\n /** @hidden */\r\n public _subdivisionsY: number;\r\n /** @hidden */\r\n public _width: number;\r\n /** @hidden */\r\n public _height: number;\r\n /** @hidden */\r\n public _minX: number;\r\n /** @hidden */\r\n public _maxX: number;\r\n /** @hidden */\r\n public _minZ: number;\r\n /** @hidden */\r\n public _maxZ: number;\r\n\r\n constructor(name: string, scene?: Scene) {\r\n super(name, scene);\r\n }\r\n\r\n /**\r\n * \"GroundMesh\"\r\n * @returns \"GroundMesh\"\r\n */\r\n public getClassName(): string {\r\n return \"GroundMesh\";\r\n }\r\n\r\n /**\r\n * The minimum of x and y subdivisions\r\n */\r\n public get subdivisions(): number {\r\n return Math.min(this._subdivisionsX, this._subdivisionsY);\r\n }\r\n\r\n /**\r\n * X subdivisions\r\n */\r\n public get subdivisionsX(): number {\r\n return this._subdivisionsX;\r\n }\r\n\r\n /**\r\n * Y subdivisions\r\n */\r\n public get subdivisionsY(): number {\r\n return this._subdivisionsY;\r\n }\r\n\r\n /**\r\n * This function will update an octree to help to select the right submeshes for rendering, picking and collision computations.\r\n * Please note that you must have a decent number of submeshes to get performance improvements when using an octree\r\n * @param chunksCount the number of subdivisions for x and y\r\n * @param octreeBlocksSize (Default: 32)\r\n */\r\n public optimize(chunksCount: number, octreeBlocksSize = 32): void {\r\n this._subdivisionsX = chunksCount;\r\n this._subdivisionsY = chunksCount;\r\n this.subdivide(chunksCount);\r\n\r\n // Call the octree system optimization if it is defined.\r\n const thisAsAny = this as any;\r\n if (thisAsAny.createOrUpdateSubmeshesOctree) {\r\n thisAsAny.createOrUpdateSubmeshesOctree(octreeBlocksSize);\r\n }\r\n }\r\n\r\n /**\r\n * Returns a height (y) value in the World system :\r\n * the ground altitude at the coordinates (x, z) expressed in the World system.\r\n * @param x x coordinate\r\n * @param z z coordinate\r\n * @returns the ground y position if (x, z) are outside the ground surface.\r\n */\r\n public getHeightAtCoordinates(x: number, z: number): number {\r\n var world = this.getWorldMatrix();\r\n var invMat = TmpVectors.Matrix[5];\r\n world.invertToRef(invMat);\r\n var tmpVect = TmpVectors.Vector3[8];\r\n Vector3.TransformCoordinatesFromFloatsToRef(x, 0.0, z, invMat, tmpVect); // transform x,z in the mesh local space\r\n x = tmpVect.x;\r\n z = tmpVect.z;\r\n if (x < this._minX || x > this._maxX || z < this._minZ || z > this._maxZ) {\r\n return this.position.y;\r\n }\r\n if (!this._heightQuads || this._heightQuads.length == 0) {\r\n this._initHeightQuads();\r\n this._computeHeightQuads();\r\n }\r\n var facet = this._getFacetAt(x, z);\r\n var y = -(facet.x * x + facet.z * z + facet.w) / facet.y;\r\n // return y in the World system\r\n Vector3.TransformCoordinatesFromFloatsToRef(0.0, y, 0.0, world, tmpVect);\r\n return tmpVect.y;\r\n }\r\n\r\n /**\r\n * Returns a normalized vector (Vector3) orthogonal to the ground\r\n * at the ground coordinates (x, z) expressed in the World system.\r\n * @param x x coordinate\r\n * @param z z coordinate\r\n * @returns Vector3(0.0, 1.0, 0.0) if (x, z) are outside the ground surface.\r\n */\r\n public getNormalAtCoordinates(x: number, z: number): Vector3 {\r\n var normal = new Vector3(0.0, 1.0, 0.0);\r\n this.getNormalAtCoordinatesToRef(x, z, normal);\r\n return normal;\r\n }\r\n\r\n /**\r\n * Updates the Vector3 passed a reference with a normalized vector orthogonal to the ground\r\n * at the ground coordinates (x, z) expressed in the World system.\r\n * Doesn't update the reference Vector3 if (x, z) are outside the ground surface.\r\n * @param x x coordinate\r\n * @param z z coordinate\r\n * @param ref vector to store the result\r\n * @returns the GroundMesh.\r\n */\r\n public getNormalAtCoordinatesToRef(x: number, z: number, ref: Vector3): GroundMesh {\r\n var world = this.getWorldMatrix();\r\n var tmpMat = TmpVectors.Matrix[5];\r\n world.invertToRef(tmpMat);\r\n var tmpVect = TmpVectors.Vector3[8];\r\n Vector3.TransformCoordinatesFromFloatsToRef(x, 0.0, z, tmpMat, tmpVect); // transform x,z in the mesh local space\r\n x = tmpVect.x;\r\n z = tmpVect.z;\r\n if (x < this._minX || x > this._maxX || z < this._minZ || z > this._maxZ) {\r\n return this;\r\n }\r\n if (!this._heightQuads || this._heightQuads.length == 0) {\r\n this._initHeightQuads();\r\n this._computeHeightQuads();\r\n }\r\n var facet = this._getFacetAt(x, z);\r\n Vector3.TransformNormalFromFloatsToRef(facet.x, facet.y, facet.z, world, ref);\r\n return this;\r\n }\r\n\r\n /**\r\n * Force the heights to be recomputed for getHeightAtCoordinates() or getNormalAtCoordinates()\r\n * if the ground has been updated.\r\n * This can be used in the render loop.\r\n * @returns the GroundMesh.\r\n */\r\n public updateCoordinateHeights(): GroundMesh {\r\n if (!this._heightQuads || this._heightQuads.length == 0) {\r\n this._initHeightQuads();\r\n }\r\n this._computeHeightQuads();\r\n return this;\r\n }\r\n\r\n // Returns the element \"facet\" from the heightQuads array relative to (x, z) local coordinates\r\n private _getFacetAt(x: number, z: number): Vector4 {\r\n // retrieve col and row from x, z coordinates in the ground local system\r\n var col = Math.floor((x + this._maxX) * this._subdivisionsX / this._width);\r\n var row = Math.floor(-(z + this._maxZ) * this._subdivisionsY / this._height + this._subdivisionsY);\r\n var quad = this._heightQuads[row * this._subdivisionsX + col];\r\n var facet;\r\n if (z < quad.slope.x * x + quad.slope.y) {\r\n facet = quad.facet1;\r\n } else {\r\n facet = quad.facet2;\r\n }\r\n return facet;\r\n }\r\n\r\n // Creates and populates the heightMap array with \"facet\" elements :\r\n // a quad is two triangular facets separated by a slope, so a \"facet\" element is 1 slope + 2 facets\r\n // slope : Vector2(c, h) = 2D diagonal line equation setting apart two triangular facets in a quad : z = cx + h\r\n // facet1 : Vector4(a, b, c, d) = first facet 3D plane equation : ax + by + cz + d = 0\r\n // facet2 : Vector4(a, b, c, d) = second facet 3D plane equation : ax + by + cz + d = 0\r\n // Returns the GroundMesh.\r\n private _initHeightQuads(): GroundMesh {\r\n var subdivisionsX = this._subdivisionsX;\r\n var subdivisionsY = this._subdivisionsY;\r\n this._heightQuads = new Array();\r\n for (var row = 0; row < subdivisionsY; row++) {\r\n for (var col = 0; col < subdivisionsX; col++) {\r\n var quad = { slope: Vector2.Zero(), facet1: new Vector4(0.0, 0.0, 0.0, 0.0), facet2: new Vector4(0.0, 0.0, 0.0, 0.0) };\r\n this._heightQuads[row * subdivisionsX + col] = quad;\r\n }\r\n }\r\n return this;\r\n }\r\n\r\n // Compute each quad element values and update the the heightMap array :\r\n // slope : Vector2(c, h) = 2D diagonal line equation setting apart two triangular facets in a quad : z = cx + h\r\n // facet1 : Vector4(a, b, c, d) = first facet 3D plane equation : ax + by + cz + d = 0\r\n // facet2 : Vector4(a, b, c, d) = second facet 3D plane equation : ax + by + cz + d = 0\r\n // Returns the GroundMesh.\r\n private _computeHeightQuads(): GroundMesh {\r\n var positions = this.getVerticesData(VertexBuffer.PositionKind);\r\n\r\n if (!positions) {\r\n return this;\r\n }\r\n\r\n var v1 = TmpVectors.Vector3[3];\r\n var v2 = TmpVectors.Vector3[2];\r\n var v3 = TmpVectors.Vector3[1];\r\n var v4 = TmpVectors.Vector3[0];\r\n var v1v2 = TmpVectors.Vector3[4];\r\n var v1v3 = TmpVectors.Vector3[5];\r\n var v1v4 = TmpVectors.Vector3[6];\r\n var norm1 = TmpVectors.Vector3[7];\r\n var norm2 = TmpVectors.Vector3[8];\r\n var i = 0;\r\n var j = 0;\r\n var k = 0;\r\n var cd = 0; // 2D slope coefficient : z = cd * x + h\r\n var h = 0;\r\n var d1 = 0; // facet plane equation : ax + by + cz + d = 0\r\n var d2 = 0;\r\n\r\n var subdivisionsX = this._subdivisionsX;\r\n var subdivisionsY = this._subdivisionsY;\r\n\r\n for (var row = 0; row < subdivisionsY; row++) {\r\n for (var col = 0; col < subdivisionsX; col++) {\r\n i = col * 3;\r\n j = row * (subdivisionsX + 1) * 3;\r\n k = (row + 1) * (subdivisionsX + 1) * 3;\r\n v1.x = positions[j + i];\r\n v1.y = positions[j + i + 1];\r\n v1.z = positions[j + i + 2];\r\n v2.x = positions[j + i + 3];\r\n v2.y = positions[j + i + 4];\r\n v2.z = positions[j + i + 5];\r\n v3.x = positions[k + i];\r\n v3.y = positions[k + i + 1];\r\n v3.z = positions[k + i + 2];\r\n v4.x = positions[k + i + 3];\r\n v4.y = positions[k + i + 4];\r\n v4.z = positions[k + i + 5];\r\n\r\n // 2D slope V1V4\r\n cd = (v4.z - v1.z) / (v4.x - v1.x);\r\n h = v1.z - cd * v1.x; // v1 belongs to the slope\r\n\r\n // facet equations :\r\n // we compute each facet normal vector\r\n // the equation of the facet plane is : norm.x * x + norm.y * y + norm.z * z + d = 0\r\n // we compute the value d by applying the equation to v1 which belongs to the plane\r\n // then we store the facet equation in a Vector4\r\n v2.subtractToRef(v1, v1v2);\r\n v3.subtractToRef(v1, v1v3);\r\n v4.subtractToRef(v1, v1v4);\r\n Vector3.CrossToRef(v1v4, v1v3, norm1); // caution : CrossToRef uses the Tmp class\r\n Vector3.CrossToRef(v1v2, v1v4, norm2);\r\n norm1.normalize();\r\n norm2.normalize();\r\n d1 = -(norm1.x * v1.x + norm1.y * v1.y + norm1.z * v1.z);\r\n d2 = -(norm2.x * v2.x + norm2.y * v2.y + norm2.z * v2.z);\r\n\r\n var quad = this._heightQuads[row * subdivisionsX + col];\r\n quad.slope.copyFromFloats(cd, h);\r\n quad.facet1.copyFromFloats(norm1.x, norm1.y, norm1.z, d1);\r\n quad.facet2.copyFromFloats(norm2.x, norm2.y, norm2.z, d2);\r\n }\r\n }\r\n return this;\r\n }\r\n\r\n /**\r\n * Serializes this ground mesh\r\n * @param serializationObject object to write serialization to\r\n */\r\n public serialize(serializationObject: any): void {\r\n super.serialize(serializationObject);\r\n serializationObject.subdivisionsX = this._subdivisionsX;\r\n serializationObject.subdivisionsY = this._subdivisionsY;\r\n\r\n serializationObject.minX = this._minX;\r\n serializationObject.maxX = this._maxX;\r\n\r\n serializationObject.minZ = this._minZ;\r\n serializationObject.maxZ = this._maxZ;\r\n\r\n serializationObject.width = this._width;\r\n serializationObject.height = this._height;\r\n }\r\n\r\n /**\r\n * Parses a serialized ground mesh\r\n * @param parsedMesh the serialized mesh\r\n * @param scene the scene to create the ground mesh in\r\n * @returns the created ground mesh\r\n */\r\n public static Parse(parsedMesh: any, scene: Scene): GroundMesh {\r\n var result = new GroundMesh(parsedMesh.name, scene);\r\n\r\n result._subdivisionsX = parsedMesh.subdivisionsX || 1;\r\n result._subdivisionsY = parsedMesh.subdivisionsY || 1;\r\n\r\n result._minX = parsedMesh.minX;\r\n result._maxX = parsedMesh.maxX;\r\n\r\n result._minZ = parsedMesh.minZ;\r\n result._maxZ = parsedMesh.maxZ;\r\n\r\n result._width = parsedMesh.width;\r\n result._height = parsedMesh.height;\r\n\r\n return result;\r\n }\r\n}\r\n"]}
@@ -46,7 +46,7 @@ var InstancedMesh = /** @class */ (function (_super) {
46
46
  }
47
47
  _this.infiniteDistance = source.infiniteDistance;
48
48
  _this.setPivotMatrix(source.getPivotMatrix());
49
- _this.refreshBoundingInfo();
49
+ _this.refreshBoundingInfo(true, true);
50
50
  _this._syncSubMeshes();
51
51
  return _this;
52
52
  }
@@ -305,7 +305,7 @@ var InstancedMesh = /** @class */ (function (_super) {
305
305
  Logger.Warn("Instances should only be created for meshes with geometry.");
306
306
  }
307
307
  if (this._currentLOD) {
308
- var differentSign = (this._currentLOD._getWorldMatrixDeterminant() > 0) !== (this._getWorldMatrixDeterminant() > 0);
308
+ var differentSign = (this._currentLOD._getWorldMatrixDeterminant() >= 0) !== (this._getWorldMatrixDeterminant() >= 0);
309
309
  if (differentSign) {
310
310
  this._internalAbstractMeshDataInfo._actAsRegularMesh = true;
311
311
  return true;
@@ -369,10 +369,13 @@ var InstancedMesh = /** @class */ (function (_super) {
369
369
  if (!camera) {
370
370
  return this;
371
371
  }
372
- var boundingInfo = this.getBoundingInfo();
373
- this._currentLOD = this.sourceMesh.getLOD(camera, boundingInfo.boundingSphere);
374
- if (this._currentLOD === this.sourceMesh) {
375
- return this.sourceMesh;
372
+ var sourceMeshLODLevels = this.sourceMesh.getLODLevels();
373
+ if (!sourceMeshLODLevels || sourceMeshLODLevels.length === 0) {
374
+ this._currentLOD = this.sourceMesh;
375
+ }
376
+ else {
377
+ var boundingInfo = this.getBoundingInfo();
378
+ this._currentLOD = this.sourceMesh.getLOD(camera, boundingInfo.boundingSphere);
376
379
  }
377
380
  return this._currentLOD;
378
381
  };
@@ -396,14 +399,13 @@ var InstancedMesh = /** @class */ (function (_super) {
396
399
  };
397
400
  /** @hidden */
398
401
  InstancedMesh.prototype._updateBoundingInfo = function () {
399
- var effectiveMesh = this;
400
402
  if (this.hasBoundingInfo) {
401
- this.getBoundingInfo().update(effectiveMesh.worldMatrixFromCache);
403
+ this.getBoundingInfo().update(this.worldMatrixFromCache);
402
404
  }
403
405
  else {
404
- this.buildBoundingInfo(this.absolutePosition, this.absolutePosition, effectiveMesh.worldMatrixFromCache);
406
+ this.buildBoundingInfo(this.absolutePosition, this.absolutePosition, this.worldMatrixFromCache);
405
407
  }
406
- this._updateSubMeshesBoundingInfo(effectiveMesh.worldMatrixFromCache);
408
+ this._updateSubMeshesBoundingInfo(this.worldMatrixFromCache);
407
409
  return this;
408
410
  };
409
411
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"instancedMesh.js","sourceRoot":"","sources":["../../../sourceES6/core/Meshes/instancedMesh.ts"],"names":[],"mappings":"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","sourcesContent":["import { Nullable, FloatArray, IndicesArray } from \"../types\";\r\nimport { Vector3, Matrix, TmpVectors } from \"../Maths/math.vector\";\r\nimport { Logger } from \"../Misc/logger\";\r\nimport { Camera } from \"../Cameras/camera\";\r\nimport { Node } from \"../node\";\r\nimport { AbstractMesh } from \"../Meshes/abstractMesh\";\r\nimport { Mesh, _InstancesBatch } from \"../Meshes/mesh\";\r\nimport { Material } from \"../Materials/material\";\r\nimport { Skeleton } from \"../Bones/skeleton\";\r\nimport { DeepCopier } from \"../Misc/deepCopier\";\r\nimport { TransformNode } from './transformNode';\r\nimport { Light } from '../Lights/light';\r\nimport { VertexBuffer } from '../Buffers/buffer';\r\nimport { Tools } from '../Misc/tools';\r\n\r\nMesh._instancedMeshFactory = (name: string, mesh: Mesh): InstancedMesh => {\r\n const instance = new InstancedMesh(name, mesh);\r\n\r\n if (mesh.instancedBuffers) {\r\n instance.instancedBuffers = {};\r\n\r\n for (const key in mesh.instancedBuffers) {\r\n instance.instancedBuffers[key] = mesh.instancedBuffers[key];\r\n }\r\n }\r\n\r\n return instance;\r\n};\r\n\r\n/**\r\n * Creates an instance based on a source mesh.\r\n */\r\nexport class InstancedMesh extends AbstractMesh {\r\n private _sourceMesh: Mesh;\r\n private _currentLOD: Mesh;\r\n private _billboardWorldMatrix: Matrix;\r\n\r\n /** @hidden */\r\n public _indexInSourceMeshInstanceArray = -1;\r\n /** @hidden */\r\n public _distanceToCamera: number = 0;\r\n /** @hidden */\r\n public _previousWorldMatrix: Nullable<Matrix>;\r\n\r\n constructor(name: string, source: Mesh) {\r\n super(name, source.getScene());\r\n\r\n source.addInstance(this);\r\n\r\n this._sourceMesh = source;\r\n\r\n this._unIndexed = source._unIndexed;\r\n\r\n this.position.copyFrom(source.position);\r\n this.rotation.copyFrom(source.rotation);\r\n this.scaling.copyFrom(source.scaling);\r\n\r\n if (source.rotationQuaternion) {\r\n this.rotationQuaternion = source.rotationQuaternion.clone();\r\n }\r\n\r\n this.animations = Tools.Slice(source.animations);\r\n for (let range of source.getAnimationRanges()) {\r\n if (range != null) {\r\n this.createAnimationRange(range.name, range.from, range.to);\r\n }\r\n }\r\n\r\n this.infiniteDistance = source.infiniteDistance;\r\n\r\n this.setPivotMatrix(source.getPivotMatrix());\r\n\r\n this.refreshBoundingInfo();\r\n this._syncSubMeshes();\r\n }\r\n\r\n /**\r\n * Returns the string \"InstancedMesh\".\r\n */\r\n public getClassName(): string {\r\n return \"InstancedMesh\";\r\n }\r\n\r\n /** Gets the list of lights affecting that mesh */\r\n public get lightSources(): Light[] {\r\n return this._sourceMesh._lightSources;\r\n }\r\n\r\n public _resyncLightSources(): void {\r\n // Do nothing as all the work will be done by source mesh\r\n }\r\n\r\n public _resyncLightSource(light: Light): void {\r\n // Do nothing as all the work will be done by source mesh\r\n }\r\n\r\n public _removeLightSource(light: Light, dispose: boolean): void {\r\n // Do nothing as all the work will be done by source mesh\r\n }\r\n\r\n // Methods\r\n /**\r\n * If the source mesh receives shadows\r\n */\r\n public get receiveShadows(): boolean {\r\n return this._sourceMesh.receiveShadows;\r\n }\r\n\r\n /**\r\n * The material of the source mesh\r\n */\r\n public get material(): Nullable<Material> {\r\n return this._sourceMesh.material;\r\n }\r\n\r\n /**\r\n * Visibility of the source mesh\r\n */\r\n public get visibility(): number {\r\n return this._sourceMesh.visibility;\r\n }\r\n\r\n /**\r\n * Skeleton of the source mesh\r\n */\r\n public get skeleton(): Nullable<Skeleton> {\r\n return this._sourceMesh.skeleton;\r\n }\r\n\r\n /**\r\n * Rendering ground id of the source mesh\r\n */\r\n public get renderingGroupId(): number {\r\n return this._sourceMesh.renderingGroupId;\r\n }\r\n\r\n public set renderingGroupId(value: number) {\r\n if (!this._sourceMesh || value === this._sourceMesh.renderingGroupId) {\r\n return;\r\n }\r\n\r\n //no-op with warning\r\n Logger.Warn(\"Note - setting renderingGroupId of an instanced mesh has no effect on the scene\");\r\n }\r\n\r\n /**\r\n * Returns the total number of vertices (integer).\r\n */\r\n public getTotalVertices(): number {\r\n return this._sourceMesh ? this._sourceMesh.getTotalVertices() : 0;\r\n }\r\n\r\n /**\r\n * Returns a positive integer : the total number of indices in this mesh geometry.\r\n * @returns the numner of indices or zero if the mesh has no geometry.\r\n */\r\n public getTotalIndices(): number {\r\n return this._sourceMesh.getTotalIndices();\r\n }\r\n\r\n /**\r\n * The source mesh of the instance\r\n */\r\n public get sourceMesh(): Mesh {\r\n return this._sourceMesh;\r\n }\r\n\r\n /**\r\n * Creates a new InstancedMesh object from the mesh model.\r\n * @see https://doc.babylonjs.com/how_to/how_to_use_instances\r\n * @param name defines the name of the new instance\r\n * @returns a new InstancedMesh\r\n */\r\n public createInstance(name: string): InstancedMesh {\r\n return this._sourceMesh.createInstance(name);\r\n }\r\n\r\n /**\r\n * Is this node ready to be used/rendered\r\n * @param completeCheck defines if a complete check (including materials and lights) has to be done (false by default)\r\n * @return {boolean} is it ready\r\n */\r\n public isReady(completeCheck = false): boolean {\r\n return this._sourceMesh.isReady(completeCheck, true);\r\n }\r\n\r\n /**\r\n * Returns an array of integers or a typed array (Int32Array, Uint32Array, Uint16Array) populated with the mesh indices.\r\n * @param kind kind of verticies to retrieve (eg. positions, normals, uvs, etc.)\r\n * @param copyWhenShared If true (default false) and and if the mesh geometry is shared among some other meshes, the returned array is a copy of the internal one.\r\n * @returns a float array or a Float32Array of the requested kind of data : positions, normals, uvs, etc.\r\n */\r\n public getVerticesData(kind: string, copyWhenShared?: boolean): Nullable<FloatArray> {\r\n return this._sourceMesh.getVerticesData(kind, copyWhenShared);\r\n }\r\n\r\n /**\r\n * Sets the vertex data of the mesh geometry for the requested `kind`.\r\n * If the mesh has no geometry, a new Geometry object is set to the mesh and then passed this vertex data.\r\n * The `data` are either a numeric array either a Float32Array.\r\n * The parameter `updatable` is passed as is to the underlying Geometry object constructor (if initially none) or updater.\r\n * The parameter `stride` is an optional positive integer, it is usually automatically deducted from the `kind` (3 for positions or normals, 2 for UV, etc).\r\n * Note that a new underlying VertexBuffer object is created each call.\r\n * If the `kind` is the `PositionKind`, the mesh BoundingInfo is renewed, so the bounding box and sphere, and the mesh World Matrix is recomputed.\r\n *\r\n * Possible `kind` values :\r\n * - VertexBuffer.PositionKind\r\n * - VertexBuffer.UVKind\r\n * - VertexBuffer.UV2Kind\r\n * - VertexBuffer.UV3Kind\r\n * - VertexBuffer.UV4Kind\r\n * - VertexBuffer.UV5Kind\r\n * - VertexBuffer.UV6Kind\r\n * - VertexBuffer.ColorKind\r\n * - VertexBuffer.MatricesIndicesKind\r\n * - VertexBuffer.MatricesIndicesExtraKind\r\n * - VertexBuffer.MatricesWeightsKind\r\n * - VertexBuffer.MatricesWeightsExtraKind\r\n *\r\n * Returns the Mesh.\r\n */\r\n public setVerticesData(kind: string, data: FloatArray, updatable?: boolean, stride?: number): AbstractMesh {\r\n if (this.sourceMesh) {\r\n this.sourceMesh.setVerticesData(kind, data, updatable, stride);\r\n }\r\n return this.sourceMesh;\r\n }\r\n\r\n /**\r\n * Updates the existing vertex data of the mesh geometry for the requested `kind`.\r\n * If the mesh has no geometry, it is simply returned as it is.\r\n * The `data` are either a numeric array either a Float32Array.\r\n * No new underlying VertexBuffer object is created.\r\n * If the `kind` is the `PositionKind` and if `updateExtends` is true, the mesh BoundingInfo is renewed, so the bounding box and sphere, and the mesh World Matrix is recomputed.\r\n * If the parameter `makeItUnique` is true, a new global geometry is created from this positions and is set to the mesh.\r\n *\r\n * Possible `kind` values :\r\n * - VertexBuffer.PositionKind\r\n * - VertexBuffer.UVKind\r\n * - VertexBuffer.UV2Kind\r\n * - VertexBuffer.UV3Kind\r\n * - VertexBuffer.UV4Kind\r\n * - VertexBuffer.UV5Kind\r\n * - VertexBuffer.UV6Kind\r\n * - VertexBuffer.ColorKind\r\n * - VertexBuffer.MatricesIndicesKind\r\n * - VertexBuffer.MatricesIndicesExtraKind\r\n * - VertexBuffer.MatricesWeightsKind\r\n * - VertexBuffer.MatricesWeightsExtraKind\r\n *\r\n * Returns the Mesh.\r\n */\r\n public updateVerticesData(kind: string, data: FloatArray, updateExtends?: boolean, makeItUnique?: boolean): Mesh {\r\n if (this.sourceMesh) {\r\n this.sourceMesh.updateVerticesData(kind, data, updateExtends, makeItUnique);\r\n }\r\n return this.sourceMesh;\r\n }\r\n\r\n /**\r\n * Sets the mesh indices.\r\n * Expects an array populated with integers or a typed array (Int32Array, Uint32Array, Uint16Array).\r\n * If the mesh has no geometry, a new Geometry object is created and set to the mesh.\r\n * This method creates a new index buffer each call.\r\n * Returns the Mesh.\r\n */\r\n public setIndices(indices: IndicesArray, totalVertices: Nullable<number> = null): Mesh {\r\n if (this.sourceMesh) {\r\n this.sourceMesh.setIndices(indices, totalVertices);\r\n }\r\n return this.sourceMesh;\r\n }\r\n\r\n /**\r\n * Boolean : True if the mesh owns the requested kind of data.\r\n */\r\n public isVerticesDataPresent(kind: string): boolean {\r\n return this._sourceMesh.isVerticesDataPresent(kind);\r\n }\r\n\r\n /**\r\n * Returns an array of indices (IndicesArray).\r\n */\r\n public getIndices(): Nullable<IndicesArray> {\r\n return this._sourceMesh.getIndices();\r\n }\r\n\r\n public get _positions(): Nullable<Vector3[]> {\r\n return this._sourceMesh._positions;\r\n }\r\n\r\n /**\r\n * This method recomputes and sets a new BoundingInfo to the mesh unless it is locked.\r\n * This means the mesh underlying bounding box and sphere are recomputed.\r\n * @param applySkeleton defines whether to apply the skeleton before computing the bounding info\r\n * @param applyMorph defines whether to apply the morph target before computing the bounding info\r\n * @returns the current mesh\r\n */\r\n public refreshBoundingInfo(applySkeleton: boolean = false, applyMorph: boolean = false): InstancedMesh {\r\n if (this.hasBoundingInfo && this.getBoundingInfo().isLocked) {\r\n return this;\r\n }\r\n\r\n const bias = this._sourceMesh.geometry ? this._sourceMesh.geometry.boundingBias : null;\r\n this._refreshBoundingInfo(this._sourceMesh._getPositionData(applySkeleton, applyMorph), bias);\r\n return this;\r\n }\r\n\r\n /** @hidden */\r\n public _preActivate(): InstancedMesh {\r\n if (this._currentLOD) {\r\n this._currentLOD._preActivate();\r\n }\r\n return this;\r\n }\r\n\r\n /** @hidden */\r\n public _activate(renderId: number, intermediateRendering: boolean): boolean {\r\n if (!this._sourceMesh.subMeshes) {\r\n Logger.Warn(\"Instances should only be created for meshes with geometry.\");\r\n }\r\n\r\n if (this._currentLOD) {\r\n let differentSign = (this._currentLOD._getWorldMatrixDeterminant() > 0) !== (this._getWorldMatrixDeterminant() > 0);\r\n if (differentSign) {\r\n this._internalAbstractMeshDataInfo._actAsRegularMesh = true;\r\n return true;\r\n }\r\n this._internalAbstractMeshDataInfo._actAsRegularMesh = false;\r\n\r\n this._currentLOD._registerInstanceForRenderId(this, renderId);\r\n\r\n if (intermediateRendering) {\r\n if (!this._currentLOD._internalAbstractMeshDataInfo._isActiveIntermediate) {\r\n this._currentLOD._internalAbstractMeshDataInfo._onlyForInstancesIntermediate = true;\r\n return true;\r\n }\r\n } else {\r\n if (!this._currentLOD._internalAbstractMeshDataInfo._isActive) {\r\n this._currentLOD._internalAbstractMeshDataInfo._onlyForInstances = true;\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n /** @hidden */\r\n public _postActivate(): void {\r\n if (this._sourceMesh.edgesShareWithInstances && this._sourceMesh._edgesRenderer && this._sourceMesh._edgesRenderer.isEnabled && this._sourceMesh._renderingGroup) {\r\n // we are using the edge renderer of the source mesh\r\n this._sourceMesh._renderingGroup._edgesRenderers.pushNoDuplicate(this._sourceMesh._edgesRenderer);\r\n this._sourceMesh._edgesRenderer.customInstances.push(this.getWorldMatrix());\r\n } else if (this._edgesRenderer && this._edgesRenderer.isEnabled && this._sourceMesh._renderingGroup) {\r\n // we are using the edge renderer defined for this instance\r\n this._sourceMesh._renderingGroup._edgesRenderers.push(this._edgesRenderer);\r\n }\r\n }\r\n\r\n public getWorldMatrix(): Matrix {\r\n if (this._currentLOD && this._currentLOD.billboardMode !== TransformNode.BILLBOARDMODE_NONE && this._currentLOD._masterMesh !== this) {\r\n if (!this._billboardWorldMatrix) {\r\n this._billboardWorldMatrix = new Matrix();\r\n }\r\n let tempMaster = this._currentLOD._masterMesh;\r\n this._currentLOD._masterMesh = this;\r\n TmpVectors.Vector3[7].copyFrom(this._currentLOD.position);\r\n this._currentLOD.position.set(0, 0, 0);\r\n this._billboardWorldMatrix.copyFrom(this._currentLOD.computeWorldMatrix(true));\r\n this._currentLOD.position.copyFrom(TmpVectors.Vector3[7]);\r\n this._currentLOD._masterMesh = tempMaster;\r\n return this._billboardWorldMatrix;\r\n }\r\n\r\n return super.getWorldMatrix();\r\n }\r\n\r\n public get isAnInstance(): boolean {\r\n return true;\r\n }\r\n\r\n /**\r\n * Returns the current associated LOD AbstractMesh.\r\n */\r\n public getLOD(camera: Camera): AbstractMesh {\r\n if (!camera) {\r\n return this;\r\n }\r\n\r\n let boundingInfo = this.getBoundingInfo();\r\n\r\n this._currentLOD = <Mesh>this.sourceMesh.getLOD(camera, boundingInfo.boundingSphere);\r\n\r\n if (this._currentLOD === this.sourceMesh) {\r\n return this.sourceMesh;\r\n }\r\n\r\n return this._currentLOD;\r\n }\r\n\r\n /** @hidden */\r\n public _preActivateForIntermediateRendering(renderId: number): Mesh {\r\n return <Mesh>this.sourceMesh._preActivateForIntermediateRendering(renderId);\r\n }\r\n\r\n /** @hidden */\r\n public _syncSubMeshes(): InstancedMesh {\r\n this.releaseSubMeshes();\r\n if (this._sourceMesh.subMeshes) {\r\n for (var index = 0; index < this._sourceMesh.subMeshes.length; index++) {\r\n this._sourceMesh.subMeshes[index].clone(this, this._sourceMesh);\r\n }\r\n }\r\n return this;\r\n }\r\n\r\n /** @hidden */\r\n public _generatePointsArray(): boolean {\r\n return this._sourceMesh._generatePointsArray();\r\n }\r\n\r\n /** @hidden */\r\n public _updateBoundingInfo(): AbstractMesh {\r\n const effectiveMesh = this as AbstractMesh;\r\n if (this.hasBoundingInfo) {\r\n this.getBoundingInfo().update(effectiveMesh.worldMatrixFromCache);\r\n }\r\n else {\r\n this.buildBoundingInfo(this.absolutePosition, this.absolutePosition, effectiveMesh.worldMatrixFromCache);\r\n }\r\n this._updateSubMeshesBoundingInfo(effectiveMesh.worldMatrixFromCache);\r\n return this;\r\n }\r\n\r\n /**\r\n * Creates a new InstancedMesh from the current mesh.\r\n * - name (string) : the cloned mesh name\r\n * - newParent (optional Node) : the optional Node to parent the clone to.\r\n * - doNotCloneChildren (optional boolean, default `false`) : if `true` the model children aren't cloned.\r\n *\r\n * Returns the clone.\r\n */\r\n public clone(name: string, newParent: Nullable<Node> = null, doNotCloneChildren?: boolean): InstancedMesh {\r\n var result = this._sourceMesh.createInstance(name);\r\n\r\n // Deep copy\r\n DeepCopier.DeepCopy(this, result, [\r\n \"name\", \"subMeshes\", \"uniqueId\", \"parent\", \"lightSources\",\r\n \"receiveShadows\", \"material\", \"visibility\", \"skeleton\",\r\n \"sourceMesh\", \"isAnInstance\", \"facetNb\", \"isFacetDataEnabled\",\r\n \"isBlocked\", \"useBones\", \"hasInstances\", \"collider\", \"edgesRenderer\",\r\n \"forward\", \"up\", \"right\", \"absolutePosition\", \"absoluteScaling\", \"absoluteRotationQuaternion\",\r\n \"isWorldMatrixFrozen\", \"nonUniformScaling\", \"behaviors\", \"worldMatrixFromCache\", \"hasThinInstances\"\r\n ], []);\r\n\r\n // Bounding info\r\n this.refreshBoundingInfo();\r\n\r\n // Parent\r\n if (newParent) {\r\n result.parent = newParent;\r\n }\r\n\r\n if (!doNotCloneChildren) {\r\n // Children\r\n for (var index = 0; index < this.getScene().meshes.length; index++) {\r\n var mesh = this.getScene().meshes[index];\r\n\r\n if (mesh.parent === this) {\r\n mesh.clone(mesh.name, result);\r\n }\r\n }\r\n }\r\n\r\n result.computeWorldMatrix(true);\r\n\r\n this.onClonedObservable.notifyObservers(result);\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Disposes the InstancedMesh.\r\n * Returns nothing.\r\n */\r\n public dispose(doNotRecurse?: boolean, disposeMaterialAndTextures = false): void {\r\n // Remove from mesh\r\n this._sourceMesh.removeInstance(this);\r\n super.dispose(doNotRecurse, disposeMaterialAndTextures);\r\n }\r\n}\r\n\r\ndeclare module \"./mesh\" {\r\n export interface Mesh {\r\n /**\r\n * Register a custom buffer that will be instanced\r\n * @see https://doc.babylonjs.com/how_to/how_to_use_instances#custom-buffers\r\n * @param kind defines the buffer kind\r\n * @param stride defines the stride in floats\r\n */\r\n registerInstancedBuffer(kind: string, stride: number): void;\r\n\r\n /**\r\n * Invalidate VertexArrayObjects belonging to the mesh (but not to the Geometry of the mesh).\r\n */\r\n _invalidateInstanceVertexArrayObject(): void;\r\n\r\n /**\r\n * true to use the edge renderer for all instances of this mesh\r\n */\r\n edgesShareWithInstances: boolean;\r\n\r\n /** @hidden */\r\n _userInstancedBuffersStorage: {\r\n data: { [key: string]: Float32Array },\r\n sizes: { [key: string]: number },\r\n vertexBuffers: { [key: string]: Nullable<VertexBuffer> },\r\n strides: { [key: string]: number },\r\n vertexArrayObjects?: { [key: string]: WebGLVertexArrayObject }\r\n };\r\n }\r\n}\r\n\r\ndeclare module \"./abstractMesh\" {\r\n export interface AbstractMesh {\r\n /**\r\n * Object used to store instanced buffers defined by user\r\n * @see https://doc.babylonjs.com/how_to/how_to_use_instances#custom-buffers\r\n */\r\n instancedBuffers: { [key: string]: any };\r\n }\r\n}\r\n\r\nMesh.prototype.edgesShareWithInstances = false;\r\n\r\nMesh.prototype.registerInstancedBuffer = function (kind: string, stride: number): void {\r\n // Remove existing one\r\n this._userInstancedBuffersStorage?.vertexBuffers[kind]?.dispose();\r\n\r\n // Creates the instancedBuffer field if not present\r\n if (!this.instancedBuffers) {\r\n this.instancedBuffers = {};\r\n\r\n for (var instance of this.instances) {\r\n instance.instancedBuffers = {};\r\n }\r\n\r\n this._userInstancedBuffersStorage = {\r\n data: {},\r\n vertexBuffers: {},\r\n strides: {},\r\n sizes: {},\r\n vertexArrayObjects: (this.getEngine().getCaps().vertexArrayObject) ? {} : undefined\r\n };\r\n }\r\n\r\n // Creates an empty property for this kind\r\n this.instancedBuffers[kind] = null;\r\n\r\n this._userInstancedBuffersStorage.strides[kind] = stride;\r\n this._userInstancedBuffersStorage.sizes[kind] = stride * 32; // Initial size\r\n this._userInstancedBuffersStorage.data[kind] = new Float32Array(this._userInstancedBuffersStorage.sizes[kind]);\r\n this._userInstancedBuffersStorage.vertexBuffers[kind] = new VertexBuffer(this.getEngine(), this._userInstancedBuffersStorage.data[kind], kind, true, false, stride, true);\r\n\r\n for (var instance of this.instances) {\r\n instance.instancedBuffers[kind] = null;\r\n }\r\n\r\n this._invalidateInstanceVertexArrayObject();\r\n};\r\n\r\nMesh.prototype._processInstancedBuffers = function (visibleInstances: InstancedMesh[], renderSelf: boolean) {\r\n let instanceCount = visibleInstances.length;\r\n\r\n for (var kind in this.instancedBuffers) {\r\n let size = this._userInstancedBuffersStorage.sizes[kind];\r\n let stride = this._userInstancedBuffersStorage.strides[kind];\r\n\r\n // Resize if required\r\n let expectedSize = (instanceCount + 1) * stride;\r\n\r\n while (size < expectedSize) {\r\n size *= 2;\r\n }\r\n\r\n if (this._userInstancedBuffersStorage.data[kind].length != size) {\r\n this._userInstancedBuffersStorage.data[kind] = new Float32Array(size);\r\n this._userInstancedBuffersStorage.sizes[kind] = size;\r\n if (this._userInstancedBuffersStorage.vertexBuffers[kind]) {\r\n this._userInstancedBuffersStorage.vertexBuffers[kind]!.dispose();\r\n this._userInstancedBuffersStorage.vertexBuffers[kind] = null;\r\n }\r\n }\r\n\r\n let data = this._userInstancedBuffersStorage.data[kind];\r\n\r\n // Update data buffer\r\n let offset = 0;\r\n if (renderSelf) {\r\n let value = this.instancedBuffers[kind];\r\n\r\n if (value.toArray) {\r\n value.toArray(data, offset);\r\n } else if (value.copyToArray) {\r\n value.copyToArray(data, offset);\r\n } else {\r\n data[offset] = value;\r\n }\r\n\r\n offset += stride;\r\n }\r\n\r\n for (var instanceIndex = 0; instanceIndex < instanceCount; instanceIndex++) {\r\n let instance = visibleInstances[instanceIndex]!;\r\n\r\n let value = instance.instancedBuffers[kind];\r\n\r\n if (value.toArray) {\r\n value.toArray(data, offset);\r\n } else if (value.copyToArray) {\r\n value.copyToArray(data, offset);\r\n } else {\r\n data[offset] = value;\r\n }\r\n\r\n offset += stride;\r\n }\r\n\r\n // Update vertex buffer\r\n if (!this._userInstancedBuffersStorage.vertexBuffers[kind]) {\r\n this._userInstancedBuffersStorage.vertexBuffers[kind] = new VertexBuffer(this.getEngine(), this._userInstancedBuffersStorage.data[kind], kind, true, false, stride, true);\r\n this._invalidateInstanceVertexArrayObject();\r\n } else {\r\n this._userInstancedBuffersStorage.vertexBuffers[kind]!.updateDirectly(data, 0);\r\n }\r\n }\r\n};\r\n\r\nMesh.prototype._invalidateInstanceVertexArrayObject = function () {\r\n if (!this._userInstancedBuffersStorage || this._userInstancedBuffersStorage.vertexArrayObjects === undefined) {\r\n return;\r\n }\r\n\r\n for (var kind in this._userInstancedBuffersStorage.vertexArrayObjects) {\r\n this.getEngine().releaseVertexArrayObject(this._userInstancedBuffersStorage.vertexArrayObjects[kind]);\r\n }\r\n\r\n this._userInstancedBuffersStorage.vertexArrayObjects = {};\r\n};\r\n\r\nMesh.prototype._disposeInstanceSpecificData = function () {\r\n if (this._instanceDataStorage.instancesBuffer) {\r\n this._instanceDataStorage.instancesBuffer.dispose();\r\n this._instanceDataStorage.instancesBuffer = null;\r\n }\r\n\r\n while (this.instances.length) {\r\n this.instances[0].dispose();\r\n }\r\n\r\n for (var kind in this.instancedBuffers) {\r\n if (this._userInstancedBuffersStorage.vertexBuffers[kind]) {\r\n this._userInstancedBuffersStorage.vertexBuffers[kind]!.dispose();\r\n }\r\n }\r\n\r\n this._invalidateInstanceVertexArrayObject();\r\n\r\n this.instancedBuffers = {};\r\n};\r\n"]}
1
+ {"version":3,"file":"instancedMesh.js","sourceRoot":"","sources":["../../../sourceES6/core/Meshes/instancedMesh.ts"],"names":[],"mappings":"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","sourcesContent":["import { Nullable, FloatArray, IndicesArray } from \"../types\";\r\nimport { Vector3, Matrix, TmpVectors } from \"../Maths/math.vector\";\r\nimport { Logger } from \"../Misc/logger\";\r\nimport { Camera } from \"../Cameras/camera\";\r\nimport { Node } from \"../node\";\r\nimport { AbstractMesh } from \"../Meshes/abstractMesh\";\r\nimport { Mesh, _InstancesBatch } from \"../Meshes/mesh\";\r\nimport { Material } from \"../Materials/material\";\r\nimport { Skeleton } from \"../Bones/skeleton\";\r\nimport { DeepCopier } from \"../Misc/deepCopier\";\r\nimport { TransformNode } from './transformNode';\r\nimport { Light } from '../Lights/light';\r\nimport { VertexBuffer } from '../Buffers/buffer';\r\nimport { Tools } from '../Misc/tools';\r\n\r\nMesh._instancedMeshFactory = (name: string, mesh: Mesh): InstancedMesh => {\r\n const instance = new InstancedMesh(name, mesh);\r\n\r\n if (mesh.instancedBuffers) {\r\n instance.instancedBuffers = {};\r\n\r\n for (const key in mesh.instancedBuffers) {\r\n instance.instancedBuffers[key] = mesh.instancedBuffers[key];\r\n }\r\n }\r\n\r\n return instance;\r\n};\r\n\r\n/**\r\n * Creates an instance based on a source mesh.\r\n */\r\nexport class InstancedMesh extends AbstractMesh {\r\n private _sourceMesh: Mesh;\r\n private _currentLOD: Mesh;\r\n private _billboardWorldMatrix: Matrix;\r\n\r\n /** @hidden */\r\n public _indexInSourceMeshInstanceArray = -1;\r\n /** @hidden */\r\n public _distanceToCamera: number = 0;\r\n /** @hidden */\r\n public _previousWorldMatrix: Nullable<Matrix>;\r\n\r\n constructor(name: string, source: Mesh) {\r\n super(name, source.getScene());\r\n\r\n source.addInstance(this);\r\n\r\n this._sourceMesh = source;\r\n\r\n this._unIndexed = source._unIndexed;\r\n\r\n this.position.copyFrom(source.position);\r\n this.rotation.copyFrom(source.rotation);\r\n this.scaling.copyFrom(source.scaling);\r\n\r\n if (source.rotationQuaternion) {\r\n this.rotationQuaternion = source.rotationQuaternion.clone();\r\n }\r\n\r\n this.animations = Tools.Slice(source.animations);\r\n for (let range of source.getAnimationRanges()) {\r\n if (range != null) {\r\n this.createAnimationRange(range.name, range.from, range.to);\r\n }\r\n }\r\n\r\n this.infiniteDistance = source.infiniteDistance;\r\n\r\n this.setPivotMatrix(source.getPivotMatrix());\r\n\r\n this.refreshBoundingInfo(true, true);\r\n this._syncSubMeshes();\r\n }\r\n\r\n /**\r\n * Returns the string \"InstancedMesh\".\r\n */\r\n public getClassName(): string {\r\n return \"InstancedMesh\";\r\n }\r\n\r\n /** Gets the list of lights affecting that mesh */\r\n public get lightSources(): Light[] {\r\n return this._sourceMesh._lightSources;\r\n }\r\n\r\n public _resyncLightSources(): void {\r\n // Do nothing as all the work will be done by source mesh\r\n }\r\n\r\n public _resyncLightSource(light: Light): void {\r\n // Do nothing as all the work will be done by source mesh\r\n }\r\n\r\n public _removeLightSource(light: Light, dispose: boolean): void {\r\n // Do nothing as all the work will be done by source mesh\r\n }\r\n\r\n // Methods\r\n /**\r\n * If the source mesh receives shadows\r\n */\r\n public get receiveShadows(): boolean {\r\n return this._sourceMesh.receiveShadows;\r\n }\r\n\r\n /**\r\n * The material of the source mesh\r\n */\r\n public get material(): Nullable<Material> {\r\n return this._sourceMesh.material;\r\n }\r\n\r\n /**\r\n * Visibility of the source mesh\r\n */\r\n public get visibility(): number {\r\n return this._sourceMesh.visibility;\r\n }\r\n\r\n /**\r\n * Skeleton of the source mesh\r\n */\r\n public get skeleton(): Nullable<Skeleton> {\r\n return this._sourceMesh.skeleton;\r\n }\r\n\r\n /**\r\n * Rendering ground id of the source mesh\r\n */\r\n public get renderingGroupId(): number {\r\n return this._sourceMesh.renderingGroupId;\r\n }\r\n\r\n public set renderingGroupId(value: number) {\r\n if (!this._sourceMesh || value === this._sourceMesh.renderingGroupId) {\r\n return;\r\n }\r\n\r\n //no-op with warning\r\n Logger.Warn(\"Note - setting renderingGroupId of an instanced mesh has no effect on the scene\");\r\n }\r\n\r\n /**\r\n * Returns the total number of vertices (integer).\r\n */\r\n public getTotalVertices(): number {\r\n return this._sourceMesh ? this._sourceMesh.getTotalVertices() : 0;\r\n }\r\n\r\n /**\r\n * Returns a positive integer : the total number of indices in this mesh geometry.\r\n * @returns the numner of indices or zero if the mesh has no geometry.\r\n */\r\n public getTotalIndices(): number {\r\n return this._sourceMesh.getTotalIndices();\r\n }\r\n\r\n /**\r\n * The source mesh of the instance\r\n */\r\n public get sourceMesh(): Mesh {\r\n return this._sourceMesh;\r\n }\r\n\r\n /**\r\n * Creates a new InstancedMesh object from the mesh model.\r\n * @see https://doc.babylonjs.com/how_to/how_to_use_instances\r\n * @param name defines the name of the new instance\r\n * @returns a new InstancedMesh\r\n */\r\n public createInstance(name: string): InstancedMesh {\r\n return this._sourceMesh.createInstance(name);\r\n }\r\n\r\n /**\r\n * Is this node ready to be used/rendered\r\n * @param completeCheck defines if a complete check (including materials and lights) has to be done (false by default)\r\n * @return {boolean} is it ready\r\n */\r\n public isReady(completeCheck = false): boolean {\r\n return this._sourceMesh.isReady(completeCheck, true);\r\n }\r\n\r\n /**\r\n * Returns an array of integers or a typed array (Int32Array, Uint32Array, Uint16Array) populated with the mesh indices.\r\n * @param kind kind of verticies to retrieve (eg. positions, normals, uvs, etc.)\r\n * @param copyWhenShared If true (default false) and and if the mesh geometry is shared among some other meshes, the returned array is a copy of the internal one.\r\n * @returns a float array or a Float32Array of the requested kind of data : positions, normals, uvs, etc.\r\n */\r\n public getVerticesData(kind: string, copyWhenShared?: boolean): Nullable<FloatArray> {\r\n return this._sourceMesh.getVerticesData(kind, copyWhenShared);\r\n }\r\n\r\n /**\r\n * Sets the vertex data of the mesh geometry for the requested `kind`.\r\n * If the mesh has no geometry, a new Geometry object is set to the mesh and then passed this vertex data.\r\n * The `data` are either a numeric array either a Float32Array.\r\n * The parameter `updatable` is passed as is to the underlying Geometry object constructor (if initially none) or updater.\r\n * The parameter `stride` is an optional positive integer, it is usually automatically deducted from the `kind` (3 for positions or normals, 2 for UV, etc).\r\n * Note that a new underlying VertexBuffer object is created each call.\r\n * If the `kind` is the `PositionKind`, the mesh BoundingInfo is renewed, so the bounding box and sphere, and the mesh World Matrix is recomputed.\r\n *\r\n * Possible `kind` values :\r\n * - VertexBuffer.PositionKind\r\n * - VertexBuffer.UVKind\r\n * - VertexBuffer.UV2Kind\r\n * - VertexBuffer.UV3Kind\r\n * - VertexBuffer.UV4Kind\r\n * - VertexBuffer.UV5Kind\r\n * - VertexBuffer.UV6Kind\r\n * - VertexBuffer.ColorKind\r\n * - VertexBuffer.MatricesIndicesKind\r\n * - VertexBuffer.MatricesIndicesExtraKind\r\n * - VertexBuffer.MatricesWeightsKind\r\n * - VertexBuffer.MatricesWeightsExtraKind\r\n *\r\n * Returns the Mesh.\r\n */\r\n public setVerticesData(kind: string, data: FloatArray, updatable?: boolean, stride?: number): AbstractMesh {\r\n if (this.sourceMesh) {\r\n this.sourceMesh.setVerticesData(kind, data, updatable, stride);\r\n }\r\n return this.sourceMesh;\r\n }\r\n\r\n /**\r\n * Updates the existing vertex data of the mesh geometry for the requested `kind`.\r\n * If the mesh has no geometry, it is simply returned as it is.\r\n * The `data` are either a numeric array either a Float32Array.\r\n * No new underlying VertexBuffer object is created.\r\n * If the `kind` is the `PositionKind` and if `updateExtends` is true, the mesh BoundingInfo is renewed, so the bounding box and sphere, and the mesh World Matrix is recomputed.\r\n * If the parameter `makeItUnique` is true, a new global geometry is created from this positions and is set to the mesh.\r\n *\r\n * Possible `kind` values :\r\n * - VertexBuffer.PositionKind\r\n * - VertexBuffer.UVKind\r\n * - VertexBuffer.UV2Kind\r\n * - VertexBuffer.UV3Kind\r\n * - VertexBuffer.UV4Kind\r\n * - VertexBuffer.UV5Kind\r\n * - VertexBuffer.UV6Kind\r\n * - VertexBuffer.ColorKind\r\n * - VertexBuffer.MatricesIndicesKind\r\n * - VertexBuffer.MatricesIndicesExtraKind\r\n * - VertexBuffer.MatricesWeightsKind\r\n * - VertexBuffer.MatricesWeightsExtraKind\r\n *\r\n * Returns the Mesh.\r\n */\r\n public updateVerticesData(kind: string, data: FloatArray, updateExtends?: boolean, makeItUnique?: boolean): Mesh {\r\n if (this.sourceMesh) {\r\n this.sourceMesh.updateVerticesData(kind, data, updateExtends, makeItUnique);\r\n }\r\n return this.sourceMesh;\r\n }\r\n\r\n /**\r\n * Sets the mesh indices.\r\n * Expects an array populated with integers or a typed array (Int32Array, Uint32Array, Uint16Array).\r\n * If the mesh has no geometry, a new Geometry object is created and set to the mesh.\r\n * This method creates a new index buffer each call.\r\n * Returns the Mesh.\r\n */\r\n public setIndices(indices: IndicesArray, totalVertices: Nullable<number> = null): Mesh {\r\n if (this.sourceMesh) {\r\n this.sourceMesh.setIndices(indices, totalVertices);\r\n }\r\n return this.sourceMesh;\r\n }\r\n\r\n /**\r\n * Boolean : True if the mesh owns the requested kind of data.\r\n */\r\n public isVerticesDataPresent(kind: string): boolean {\r\n return this._sourceMesh.isVerticesDataPresent(kind);\r\n }\r\n\r\n /**\r\n * Returns an array of indices (IndicesArray).\r\n */\r\n public getIndices(): Nullable<IndicesArray> {\r\n return this._sourceMesh.getIndices();\r\n }\r\n\r\n public get _positions(): Nullable<Vector3[]> {\r\n return this._sourceMesh._positions;\r\n }\r\n\r\n /**\r\n * This method recomputes and sets a new BoundingInfo to the mesh unless it is locked.\r\n * This means the mesh underlying bounding box and sphere are recomputed.\r\n * @param applySkeleton defines whether to apply the skeleton before computing the bounding info\r\n * @param applyMorph defines whether to apply the morph target before computing the bounding info\r\n * @returns the current mesh\r\n */\r\n public refreshBoundingInfo(applySkeleton: boolean = false, applyMorph: boolean = false): InstancedMesh {\r\n if (this.hasBoundingInfo && this.getBoundingInfo().isLocked) {\r\n return this;\r\n }\r\n\r\n const bias = this._sourceMesh.geometry ? this._sourceMesh.geometry.boundingBias : null;\r\n this._refreshBoundingInfo(this._sourceMesh._getPositionData(applySkeleton, applyMorph), bias);\r\n return this;\r\n }\r\n\r\n /** @hidden */\r\n public _preActivate(): InstancedMesh {\r\n if (this._currentLOD) {\r\n this._currentLOD._preActivate();\r\n }\r\n return this;\r\n }\r\n\r\n /** @hidden */\r\n public _activate(renderId: number, intermediateRendering: boolean): boolean {\r\n if (!this._sourceMesh.subMeshes) {\r\n Logger.Warn(\"Instances should only be created for meshes with geometry.\");\r\n }\r\n\r\n if (this._currentLOD) {\r\n let differentSign = (this._currentLOD._getWorldMatrixDeterminant() >= 0) !== (this._getWorldMatrixDeterminant() >= 0);\r\n if (differentSign) {\r\n this._internalAbstractMeshDataInfo._actAsRegularMesh = true;\r\n return true;\r\n }\r\n this._internalAbstractMeshDataInfo._actAsRegularMesh = false;\r\n\r\n this._currentLOD._registerInstanceForRenderId(this, renderId);\r\n\r\n if (intermediateRendering) {\r\n if (!this._currentLOD._internalAbstractMeshDataInfo._isActiveIntermediate) {\r\n this._currentLOD._internalAbstractMeshDataInfo._onlyForInstancesIntermediate = true;\r\n return true;\r\n }\r\n } else {\r\n if (!this._currentLOD._internalAbstractMeshDataInfo._isActive) {\r\n this._currentLOD._internalAbstractMeshDataInfo._onlyForInstances = true;\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n /** @hidden */\r\n public _postActivate(): void {\r\n if (this._sourceMesh.edgesShareWithInstances && this._sourceMesh._edgesRenderer && this._sourceMesh._edgesRenderer.isEnabled && this._sourceMesh._renderingGroup) {\r\n // we are using the edge renderer of the source mesh\r\n this._sourceMesh._renderingGroup._edgesRenderers.pushNoDuplicate(this._sourceMesh._edgesRenderer);\r\n this._sourceMesh._edgesRenderer.customInstances.push(this.getWorldMatrix());\r\n } else if (this._edgesRenderer && this._edgesRenderer.isEnabled && this._sourceMesh._renderingGroup) {\r\n // we are using the edge renderer defined for this instance\r\n this._sourceMesh._renderingGroup._edgesRenderers.push(this._edgesRenderer);\r\n }\r\n }\r\n\r\n public getWorldMatrix(): Matrix {\r\n if (this._currentLOD && this._currentLOD.billboardMode !== TransformNode.BILLBOARDMODE_NONE && this._currentLOD._masterMesh !== this) {\r\n if (!this._billboardWorldMatrix) {\r\n this._billboardWorldMatrix = new Matrix();\r\n }\r\n let tempMaster = this._currentLOD._masterMesh;\r\n this._currentLOD._masterMesh = this;\r\n TmpVectors.Vector3[7].copyFrom(this._currentLOD.position);\r\n this._currentLOD.position.set(0, 0, 0);\r\n this._billboardWorldMatrix.copyFrom(this._currentLOD.computeWorldMatrix(true));\r\n this._currentLOD.position.copyFrom(TmpVectors.Vector3[7]);\r\n this._currentLOD._masterMesh = tempMaster;\r\n return this._billboardWorldMatrix;\r\n }\r\n\r\n return super.getWorldMatrix();\r\n }\r\n\r\n public get isAnInstance(): boolean {\r\n return true;\r\n }\r\n\r\n /**\r\n * Returns the current associated LOD AbstractMesh.\r\n */\r\n public getLOD(camera: Camera): AbstractMesh {\r\n if (!camera) {\r\n return this;\r\n }\r\n\r\n const sourceMeshLODLevels = this.sourceMesh.getLODLevels();\r\n if (!sourceMeshLODLevels || sourceMeshLODLevels.length === 0) {\r\n this._currentLOD = this.sourceMesh;\r\n } else {\r\n let boundingInfo = this.getBoundingInfo();\r\n this._currentLOD = <Mesh>this.sourceMesh.getLOD(camera, boundingInfo.boundingSphere);\r\n }\r\n\r\n return this._currentLOD;\r\n }\r\n\r\n /** @hidden */\r\n public _preActivateForIntermediateRendering(renderId: number): Mesh {\r\n return <Mesh>this.sourceMesh._preActivateForIntermediateRendering(renderId);\r\n }\r\n\r\n /** @hidden */\r\n public _syncSubMeshes(): InstancedMesh {\r\n this.releaseSubMeshes();\r\n if (this._sourceMesh.subMeshes) {\r\n for (var index = 0; index < this._sourceMesh.subMeshes.length; index++) {\r\n this._sourceMesh.subMeshes[index].clone(this, this._sourceMesh);\r\n }\r\n }\r\n return this;\r\n }\r\n\r\n /** @hidden */\r\n public _generatePointsArray(): boolean {\r\n return this._sourceMesh._generatePointsArray();\r\n }\r\n\r\n /** @hidden */\r\n public _updateBoundingInfo(): AbstractMesh {\r\n if (this.hasBoundingInfo) {\r\n this.getBoundingInfo().update(this.worldMatrixFromCache);\r\n } else {\r\n this.buildBoundingInfo(this.absolutePosition, this.absolutePosition, this.worldMatrixFromCache);\r\n }\r\n this._updateSubMeshesBoundingInfo(this.worldMatrixFromCache);\r\n return this;\r\n }\r\n\r\n /**\r\n * Creates a new InstancedMesh from the current mesh.\r\n * - name (string) : the cloned mesh name\r\n * - newParent (optional Node) : the optional Node to parent the clone to.\r\n * - doNotCloneChildren (optional boolean, default `false`) : if `true` the model children aren't cloned.\r\n *\r\n * Returns the clone.\r\n */\r\n public clone(name: string, newParent: Nullable<Node> = null, doNotCloneChildren?: boolean): InstancedMesh {\r\n var result = this._sourceMesh.createInstance(name);\r\n\r\n // Deep copy\r\n DeepCopier.DeepCopy(this, result, [\r\n \"name\", \"subMeshes\", \"uniqueId\", \"parent\", \"lightSources\",\r\n \"receiveShadows\", \"material\", \"visibility\", \"skeleton\",\r\n \"sourceMesh\", \"isAnInstance\", \"facetNb\", \"isFacetDataEnabled\",\r\n \"isBlocked\", \"useBones\", \"hasInstances\", \"collider\", \"edgesRenderer\",\r\n \"forward\", \"up\", \"right\", \"absolutePosition\", \"absoluteScaling\", \"absoluteRotationQuaternion\",\r\n \"isWorldMatrixFrozen\", \"nonUniformScaling\", \"behaviors\", \"worldMatrixFromCache\", \"hasThinInstances\"\r\n ], []);\r\n\r\n // Bounding info\r\n this.refreshBoundingInfo();\r\n\r\n // Parent\r\n if (newParent) {\r\n result.parent = newParent;\r\n }\r\n\r\n if (!doNotCloneChildren) {\r\n // Children\r\n for (var index = 0; index < this.getScene().meshes.length; index++) {\r\n var mesh = this.getScene().meshes[index];\r\n\r\n if (mesh.parent === this) {\r\n mesh.clone(mesh.name, result);\r\n }\r\n }\r\n }\r\n\r\n result.computeWorldMatrix(true);\r\n\r\n this.onClonedObservable.notifyObservers(result);\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Disposes the InstancedMesh.\r\n * Returns nothing.\r\n */\r\n public dispose(doNotRecurse?: boolean, disposeMaterialAndTextures = false): void {\r\n // Remove from mesh\r\n this._sourceMesh.removeInstance(this);\r\n super.dispose(doNotRecurse, disposeMaterialAndTextures);\r\n }\r\n}\r\n\r\ndeclare module \"./mesh\" {\r\n export interface Mesh {\r\n /**\r\n * Register a custom buffer that will be instanced\r\n * @see https://doc.babylonjs.com/how_to/how_to_use_instances#custom-buffers\r\n * @param kind defines the buffer kind\r\n * @param stride defines the stride in floats\r\n */\r\n registerInstancedBuffer(kind: string, stride: number): void;\r\n\r\n /**\r\n * Invalidate VertexArrayObjects belonging to the mesh (but not to the Geometry of the mesh).\r\n */\r\n _invalidateInstanceVertexArrayObject(): void;\r\n\r\n /**\r\n * true to use the edge renderer for all instances of this mesh\r\n */\r\n edgesShareWithInstances: boolean;\r\n\r\n /** @hidden */\r\n _userInstancedBuffersStorage: {\r\n data: { [key: string]: Float32Array },\r\n sizes: { [key: string]: number },\r\n vertexBuffers: { [key: string]: Nullable<VertexBuffer> },\r\n strides: { [key: string]: number },\r\n vertexArrayObjects?: { [key: string]: WebGLVertexArrayObject }\r\n };\r\n }\r\n}\r\n\r\ndeclare module \"./abstractMesh\" {\r\n export interface AbstractMesh {\r\n /**\r\n * Object used to store instanced buffers defined by user\r\n * @see https://doc.babylonjs.com/how_to/how_to_use_instances#custom-buffers\r\n */\r\n instancedBuffers: { [key: string]: any };\r\n }\r\n}\r\n\r\nMesh.prototype.edgesShareWithInstances = false;\r\n\r\nMesh.prototype.registerInstancedBuffer = function (kind: string, stride: number): void {\r\n // Remove existing one\r\n this._userInstancedBuffersStorage?.vertexBuffers[kind]?.dispose();\r\n\r\n // Creates the instancedBuffer field if not present\r\n if (!this.instancedBuffers) {\r\n this.instancedBuffers = {};\r\n\r\n for (var instance of this.instances) {\r\n instance.instancedBuffers = {};\r\n }\r\n\r\n this._userInstancedBuffersStorage = {\r\n data: {},\r\n vertexBuffers: {},\r\n strides: {},\r\n sizes: {},\r\n vertexArrayObjects: (this.getEngine().getCaps().vertexArrayObject) ? {} : undefined\r\n };\r\n }\r\n\r\n // Creates an empty property for this kind\r\n this.instancedBuffers[kind] = null;\r\n\r\n this._userInstancedBuffersStorage.strides[kind] = stride;\r\n this._userInstancedBuffersStorage.sizes[kind] = stride * 32; // Initial size\r\n this._userInstancedBuffersStorage.data[kind] = new Float32Array(this._userInstancedBuffersStorage.sizes[kind]);\r\n this._userInstancedBuffersStorage.vertexBuffers[kind] = new VertexBuffer(this.getEngine(), this._userInstancedBuffersStorage.data[kind], kind, true, false, stride, true);\r\n\r\n for (var instance of this.instances) {\r\n instance.instancedBuffers[kind] = null;\r\n }\r\n\r\n this._invalidateInstanceVertexArrayObject();\r\n};\r\n\r\nMesh.prototype._processInstancedBuffers = function (visibleInstances: InstancedMesh[], renderSelf: boolean) {\r\n let instanceCount = visibleInstances.length;\r\n\r\n for (var kind in this.instancedBuffers) {\r\n let size = this._userInstancedBuffersStorage.sizes[kind];\r\n let stride = this._userInstancedBuffersStorage.strides[kind];\r\n\r\n // Resize if required\r\n let expectedSize = (instanceCount + 1) * stride;\r\n\r\n while (size < expectedSize) {\r\n size *= 2;\r\n }\r\n\r\n if (this._userInstancedBuffersStorage.data[kind].length != size) {\r\n this._userInstancedBuffersStorage.data[kind] = new Float32Array(size);\r\n this._userInstancedBuffersStorage.sizes[kind] = size;\r\n if (this._userInstancedBuffersStorage.vertexBuffers[kind]) {\r\n this._userInstancedBuffersStorage.vertexBuffers[kind]!.dispose();\r\n this._userInstancedBuffersStorage.vertexBuffers[kind] = null;\r\n }\r\n }\r\n\r\n let data = this._userInstancedBuffersStorage.data[kind];\r\n\r\n // Update data buffer\r\n let offset = 0;\r\n if (renderSelf) {\r\n let value = this.instancedBuffers[kind];\r\n\r\n if (value.toArray) {\r\n value.toArray(data, offset);\r\n } else if (value.copyToArray) {\r\n value.copyToArray(data, offset);\r\n } else {\r\n data[offset] = value;\r\n }\r\n\r\n offset += stride;\r\n }\r\n\r\n for (var instanceIndex = 0; instanceIndex < instanceCount; instanceIndex++) {\r\n let instance = visibleInstances[instanceIndex]!;\r\n\r\n let value = instance.instancedBuffers[kind];\r\n\r\n if (value.toArray) {\r\n value.toArray(data, offset);\r\n } else if (value.copyToArray) {\r\n value.copyToArray(data, offset);\r\n } else {\r\n data[offset] = value;\r\n }\r\n\r\n offset += stride;\r\n }\r\n\r\n // Update vertex buffer\r\n if (!this._userInstancedBuffersStorage.vertexBuffers[kind]) {\r\n this._userInstancedBuffersStorage.vertexBuffers[kind] = new VertexBuffer(this.getEngine(), this._userInstancedBuffersStorage.data[kind], kind, true, false, stride, true);\r\n this._invalidateInstanceVertexArrayObject();\r\n } else {\r\n this._userInstancedBuffersStorage.vertexBuffers[kind]!.updateDirectly(data, 0);\r\n }\r\n }\r\n};\r\n\r\nMesh.prototype._invalidateInstanceVertexArrayObject = function () {\r\n if (!this._userInstancedBuffersStorage || this._userInstancedBuffersStorage.vertexArrayObjects === undefined) {\r\n return;\r\n }\r\n\r\n for (var kind in this._userInstancedBuffersStorage.vertexArrayObjects) {\r\n this.getEngine().releaseVertexArrayObject(this._userInstancedBuffersStorage.vertexArrayObjects[kind]);\r\n }\r\n\r\n this._userInstancedBuffersStorage.vertexArrayObjects = {};\r\n};\r\n\r\nMesh.prototype._disposeInstanceSpecificData = function () {\r\n if (this._instanceDataStorage.instancesBuffer) {\r\n this._instanceDataStorage.instancesBuffer.dispose();\r\n this._instanceDataStorage.instancesBuffer = null;\r\n }\r\n\r\n while (this.instances.length) {\r\n this.instances[0].dispose();\r\n }\r\n\r\n for (var kind in this.instancedBuffers) {\r\n if (this._userInstancedBuffersStorage.vertexBuffers[kind]) {\r\n this._userInstancedBuffersStorage.vertexBuffers[kind]!.dispose();\r\n }\r\n }\r\n\r\n this._invalidateInstanceVertexArrayObject();\r\n\r\n this.instancedBuffers = {};\r\n};\r\n"]}
package/Meshes/mesh.d.ts CHANGED
@@ -694,7 +694,7 @@ export declare class Mesh extends AbstractMesh implements IGetSetVerticesData {
694
694
  /** @hidden */
695
695
  _processInstancedBuffers(visibleInstances: InstancedMesh[], renderSelf: boolean): void;
696
696
  /** @hidden */
697
- _processRendering(renderingMesh: AbstractMesh, subMesh: SubMesh, effect: Effect, fillMode: number, batch: _InstancesBatch, hardwareInstancedRendering: boolean, onBeforeDraw: (isInstance: boolean, world: Matrix, effectiveMaterial?: Material, effectiveMesh?: AbstractMesh) => void, effectiveMaterial?: Material): Mesh;
697
+ _processRendering(renderingMesh: AbstractMesh, subMesh: SubMesh, effect: Effect, fillMode: number, batch: _InstancesBatch, hardwareInstancedRendering: boolean, onBeforeDraw: (isInstance: boolean, world: Matrix, effectiveMaterial?: Material) => void, effectiveMaterial?: Material): Mesh;
698
698
  /** @hidden */
699
699
  _rebuild(dispose?: boolean): void;
700
700
  /** @hidden */