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

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 (796) 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 +8 -1
  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.views.d.ts +7 -0
  160. package/Engines/Extensions/engine.views.js +12 -0
  161. package/Engines/Extensions/engine.views.js.map +1 -1
  162. package/Engines/Native/nativeInterfaces.d.ts +3 -2
  163. package/Engines/Native/nativeInterfaces.js.map +1 -1
  164. package/Engines/Processors/Expressions/shaderDefineExpression.js +1 -1
  165. package/Engines/Processors/Expressions/shaderDefineExpression.js.map +1 -1
  166. package/Engines/Processors/shaderCodeInliner.js +13 -13
  167. package/Engines/Processors/shaderCodeInliner.js.map +1 -1
  168. package/Engines/WebGPU/Extensions/engine.computeShader.js +1 -1
  169. package/Engines/WebGPU/Extensions/engine.computeShader.js.map +1 -1
  170. package/Engines/WebGPU/Extensions/engine.cubeTexture.js +4 -1
  171. package/Engines/WebGPU/Extensions/engine.cubeTexture.js.map +1 -1
  172. package/Engines/WebGPU/webgpuCacheBindGroups.js +9 -9
  173. package/Engines/WebGPU/webgpuCacheBindGroups.js.map +1 -1
  174. package/Engines/WebGPU/webgpuCacheRenderPipeline.js +5 -7
  175. package/Engines/WebGPU/webgpuCacheRenderPipeline.js.map +1 -1
  176. package/Engines/WebGPU/webgpuCacheRenderPipelineTree.d.ts +1 -1
  177. package/Engines/WebGPU/webgpuCacheRenderPipelineTree.js.map +1 -1
  178. package/Engines/WebGPU/webgpuCacheSampler.d.ts +2 -0
  179. package/Engines/WebGPU/webgpuCacheSampler.js +23 -2
  180. package/Engines/WebGPU/webgpuCacheSampler.js.map +1 -1
  181. package/Engines/WebGPU/webgpuComputeContext.js +1 -1
  182. package/Engines/WebGPU/webgpuComputeContext.js.map +1 -1
  183. package/Engines/WebGPU/webgpuConstants.d.ts +2 -1
  184. package/Engines/WebGPU/webgpuConstants.js +1 -0
  185. package/Engines/WebGPU/webgpuConstants.js.map +1 -1
  186. package/Engines/WebGPU/webgpuDrawContext.d.ts +1 -1
  187. package/Engines/WebGPU/webgpuDrawContext.js +3 -3
  188. package/Engines/WebGPU/webgpuDrawContext.js.map +1 -1
  189. package/Engines/WebGPU/webgpuHardwareTexture.d.ts +0 -1
  190. package/Engines/WebGPU/webgpuHardwareTexture.js +0 -3
  191. package/Engines/WebGPU/webgpuHardwareTexture.js.map +1 -1
  192. package/Engines/WebGPU/webgpuPipelineContext.d.ts +0 -8
  193. package/Engines/WebGPU/webgpuPipelineContext.js.map +1 -1
  194. package/Engines/WebGPU/webgpuShaderProcessorsGLSL.js +13 -13
  195. package/Engines/WebGPU/webgpuShaderProcessorsGLSL.js.map +1 -1
  196. package/Engines/WebGPU/webgpuShaderProcessorsWGSL.js +30 -30
  197. package/Engines/WebGPU/webgpuShaderProcessorsWGSL.js.map +1 -1
  198. package/Engines/WebGPU/webgpuTextureHelper.d.ts +0 -1
  199. package/Engines/WebGPU/webgpuTextureHelper.js +22 -37
  200. package/Engines/WebGPU/webgpuTextureHelper.js.map +1 -1
  201. package/Engines/engine.d.ts +48 -33
  202. package/Engines/engine.js +2 -6
  203. package/Engines/engine.js.map +1 -1
  204. package/Engines/engineCapabilities.d.ts +4 -0
  205. package/Engines/engineCapabilities.js.map +1 -1
  206. package/Engines/index.d.ts +1 -0
  207. package/Engines/index.js +1 -0
  208. package/Engines/index.js.map +1 -1
  209. package/Engines/nativeEngine.d.ts +1 -0
  210. package/Engines/nativeEngine.js +40 -12
  211. package/Engines/nativeEngine.js.map +1 -1
  212. package/Engines/nullEngine.js +3 -1
  213. package/Engines/nullEngine.js.map +1 -1
  214. package/Engines/renderTargetWrapper.d.ts +8 -0
  215. package/Engines/renderTargetWrapper.js +20 -0
  216. package/Engines/renderTargetWrapper.js.map +1 -1
  217. package/Engines/thinEngine.d.ts +18 -2
  218. package/Engines/thinEngine.js +51 -21
  219. package/Engines/thinEngine.js.map +1 -1
  220. package/Engines/webgpuEngine.d.ts +3 -7
  221. package/Engines/webgpuEngine.js +43 -42
  222. package/Engines/webgpuEngine.js.map +1 -1
  223. package/Events/keyboardEvents.d.ts +7 -1
  224. package/Events/keyboardEvents.js +11 -1
  225. package/Events/keyboardEvents.js.map +1 -1
  226. package/Gamepads/Controllers/daydreamController.js +1 -1
  227. package/Gamepads/Controllers/daydreamController.js.map +1 -1
  228. package/Gamepads/Controllers/oculusTouchController.js +2 -2
  229. package/Gamepads/Controllers/oculusTouchController.js.map +1 -1
  230. package/Gamepads/Controllers/webVRController.d.ts +1 -0
  231. package/Gamepads/Controllers/webVRController.js +1 -0
  232. package/Gamepads/Controllers/webVRController.js.map +1 -1
  233. package/Gamepads/gamepadManager.js +1 -1
  234. package/Gamepads/gamepadManager.js.map +1 -1
  235. package/Gizmos/boundingBoxGizmo.js +0 -10
  236. package/Gizmos/boundingBoxGizmo.js.map +1 -1
  237. package/Gizmos/gizmo.js +1 -1
  238. package/Gizmos/gizmo.js.map +1 -1
  239. package/Gizmos/gizmoManager.d.ts +2 -0
  240. package/Gizmos/gizmoManager.js +28 -24
  241. package/Gizmos/gizmoManager.js.map +1 -1
  242. package/Helpers/sceneHelpers.d.ts +1 -0
  243. package/Helpers/sceneHelpers.js.map +1 -1
  244. package/Inputs/scene.inputManager.d.ts +2 -3
  245. package/Inputs/scene.inputManager.js +14 -16
  246. package/Inputs/scene.inputManager.js.map +1 -1
  247. package/Instrumentation/sceneInstrumentation.js +2 -2
  248. package/Instrumentation/sceneInstrumentation.js.map +1 -1
  249. package/Layers/effectLayer.d.ts +2 -1
  250. package/Layers/effectLayer.js +25 -1
  251. package/Layers/effectLayer.js.map +1 -1
  252. package/Layers/effectLayerSceneComponent.d.ts +1 -1
  253. package/Layers/effectLayerSceneComponent.js +7 -3
  254. package/Layers/effectLayerSceneComponent.js.map +1 -1
  255. package/Layers/glowLayer.d.ts +1 -1
  256. package/Layers/glowLayer.js.map +1 -1
  257. package/Layers/highlightLayer.d.ts +1 -1
  258. package/Layers/highlightLayer.js +2 -1
  259. package/Layers/highlightLayer.js.map +1 -1
  260. package/Layers/layer.d.ts +2 -2
  261. package/Layers/layer.js.map +1 -1
  262. package/Layers/layerSceneComponent.d.ts +1 -1
  263. package/Layers/layerSceneComponent.js +7 -3
  264. package/Layers/layerSceneComponent.js.map +1 -1
  265. package/Lights/Shadows/cascadedShadowGenerator.js +2 -2
  266. package/Lights/Shadows/cascadedShadowGenerator.js.map +1 -1
  267. package/Lights/Shadows/shadowGenerator.js +7 -7
  268. package/Lights/Shadows/shadowGenerator.js.map +1 -1
  269. package/Loading/Plugins/babylonFileLoader.js +115 -37
  270. package/Loading/Plugins/babylonFileLoader.js.map +1 -1
  271. package/Loading/loadingScreen.js +8 -8
  272. package/Loading/loadingScreen.js.map +1 -1
  273. package/Loading/sceneLoader.js +7 -6
  274. package/Loading/sceneLoader.js.map +1 -1
  275. package/Materials/Background/backgroundMaterial.d.ts +1 -1
  276. package/Materials/Background/backgroundMaterial.js.map +1 -1
  277. package/Materials/Node/Blocks/Dual/clipPlanesBlock.d.ts +37 -0
  278. package/Materials/Node/Blocks/Dual/clipPlanesBlock.js +117 -0
  279. package/Materials/Node/Blocks/Dual/clipPlanesBlock.js.map +1 -0
  280. package/Materials/Node/Blocks/Dual/currentScreenBlock.js +12 -12
  281. package/Materials/Node/Blocks/Dual/currentScreenBlock.js.map +1 -1
  282. package/Materials/Node/Blocks/Dual/fogBlock.js +5 -5
  283. package/Materials/Node/Blocks/Dual/fogBlock.js.map +1 -1
  284. package/Materials/Node/Blocks/Dual/imageSourceBlock.js +13 -13
  285. package/Materials/Node/Blocks/Dual/imageSourceBlock.js.map +1 -1
  286. package/Materials/Node/Blocks/Dual/index.d.ts +1 -0
  287. package/Materials/Node/Blocks/Dual/index.js +1 -0
  288. package/Materials/Node/Blocks/Dual/index.js.map +1 -1
  289. package/Materials/Node/Blocks/Dual/lightBlock.js +10 -10
  290. package/Materials/Node/Blocks/Dual/lightBlock.js.map +1 -1
  291. package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.js +28 -28
  292. package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.js.map +1 -1
  293. package/Materials/Node/Blocks/Dual/reflectionTextureBlock.js +1 -1
  294. package/Materials/Node/Blocks/Dual/reflectionTextureBlock.js.map +1 -1
  295. package/Materials/Node/Blocks/Dual/sceneDepthBlock.js +7 -7
  296. package/Materials/Node/Blocks/Dual/sceneDepthBlock.js.map +1 -1
  297. package/Materials/Node/Blocks/Dual/textureBlock.js +32 -32
  298. package/Materials/Node/Blocks/Dual/textureBlock.js.map +1 -1
  299. package/Materials/Node/Blocks/Fragment/derivativeBlock.js +2 -2
  300. package/Materials/Node/Blocks/Fragment/derivativeBlock.js.map +1 -1
  301. package/Materials/Node/Blocks/Fragment/discardBlock.js +1 -1
  302. package/Materials/Node/Blocks/Fragment/discardBlock.js.map +1 -1
  303. package/Materials/Node/Blocks/Fragment/fragCoordBlock.js +1 -1
  304. package/Materials/Node/Blocks/Fragment/fragCoordBlock.js.map +1 -1
  305. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.js +10 -10
  306. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.js.map +1 -1
  307. package/Materials/Node/Blocks/Fragment/imageProcessingBlock.js +7 -7
  308. package/Materials/Node/Blocks/Fragment/imageProcessingBlock.js.map +1 -1
  309. package/Materials/Node/Blocks/Fragment/perturbNormalBlock.js +12 -12
  310. package/Materials/Node/Blocks/Fragment/perturbNormalBlock.js.map +1 -1
  311. package/Materials/Node/Blocks/Fragment/screenSizeBlock.js +1 -1
  312. package/Materials/Node/Blocks/Fragment/screenSizeBlock.js.map +1 -1
  313. package/Materials/Node/Blocks/Fragment/screenSpaceBlock.js +7 -7
  314. package/Materials/Node/Blocks/Fragment/screenSpaceBlock.js.map +1 -1
  315. package/Materials/Node/Blocks/Fragment/twirlBlock.js +4 -4
  316. package/Materials/Node/Blocks/Fragment/twirlBlock.js.map +1 -1
  317. package/Materials/Node/Blocks/Input/inputBlock.d.ts +2 -1
  318. package/Materials/Node/Blocks/Input/inputBlock.js +29 -24
  319. package/Materials/Node/Blocks/Input/inputBlock.js.map +1 -1
  320. package/Materials/Node/Blocks/PBR/anisotropyBlock.js +5 -5
  321. package/Materials/Node/Blocks/PBR/anisotropyBlock.js.map +1 -1
  322. package/Materials/Node/Blocks/PBR/clearCoatBlock.js +5 -5
  323. package/Materials/Node/Blocks/PBR/clearCoatBlock.js.map +1 -1
  324. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js +33 -33
  325. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js.map +1 -1
  326. package/Materials/Node/Blocks/PBR/reflectionBlock.js +11 -11
  327. package/Materials/Node/Blocks/PBR/reflectionBlock.js.map +1 -1
  328. package/Materials/Node/Blocks/PBR/refractionBlock.js +11 -11
  329. package/Materials/Node/Blocks/PBR/refractionBlock.js.map +1 -1
  330. package/Materials/Node/Blocks/PBR/sheenBlock.js +3 -3
  331. package/Materials/Node/Blocks/PBR/sheenBlock.js.map +1 -1
  332. package/Materials/Node/Blocks/PBR/subSurfaceBlock.js +1 -1
  333. package/Materials/Node/Blocks/PBR/subSurfaceBlock.js.map +1 -1
  334. package/Materials/Node/Blocks/Particle/particleBlendMultiplyBlock.js +1 -1
  335. package/Materials/Node/Blocks/Particle/particleBlendMultiplyBlock.js.map +1 -1
  336. package/Materials/Node/Blocks/Particle/particleRampGradientBlock.js +1 -1
  337. package/Materials/Node/Blocks/Particle/particleRampGradientBlock.js.map +1 -1
  338. package/Materials/Node/Blocks/Particle/particleTextureBlock.js +7 -7
  339. package/Materials/Node/Blocks/Particle/particleTextureBlock.js.map +1 -1
  340. package/Materials/Node/Blocks/Vertex/bonesBlock.js +3 -3
  341. package/Materials/Node/Blocks/Vertex/bonesBlock.js.map +1 -1
  342. package/Materials/Node/Blocks/Vertex/instancesBlock.js +3 -3
  343. package/Materials/Node/Blocks/Vertex/instancesBlock.js.map +1 -1
  344. package/Materials/Node/Blocks/Vertex/lightInformationBlock.js +5 -5
  345. package/Materials/Node/Blocks/Vertex/lightInformationBlock.js.map +1 -1
  346. package/Materials/Node/Blocks/Vertex/morphTargetsBlock.js +16 -16
  347. package/Materials/Node/Blocks/Vertex/morphTargetsBlock.js.map +1 -1
  348. package/Materials/Node/Blocks/Vertex/vertexOutputBlock.js +1 -1
  349. package/Materials/Node/Blocks/Vertex/vertexOutputBlock.js.map +1 -1
  350. package/Materials/Node/Blocks/addBlock.js +1 -1
  351. package/Materials/Node/Blocks/addBlock.js.map +1 -1
  352. package/Materials/Node/Blocks/arcTan2Block.js +1 -1
  353. package/Materials/Node/Blocks/arcTan2Block.js.map +1 -1
  354. package/Materials/Node/Blocks/clampBlock.js +3 -3
  355. package/Materials/Node/Blocks/clampBlock.js.map +1 -1
  356. package/Materials/Node/Blocks/cloudBlock.js +7 -7
  357. package/Materials/Node/Blocks/cloudBlock.js.map +1 -1
  358. package/Materials/Node/Blocks/colorMergerBlock.js +8 -8
  359. package/Materials/Node/Blocks/colorMergerBlock.js.map +1 -1
  360. package/Materials/Node/Blocks/colorSplitterBlock.js +5 -5
  361. package/Materials/Node/Blocks/colorSplitterBlock.js.map +1 -1
  362. package/Materials/Node/Blocks/conditionalBlock.js +10 -10
  363. package/Materials/Node/Blocks/conditionalBlock.js.map +1 -1
  364. package/Materials/Node/Blocks/crossBlock.js +1 -1
  365. package/Materials/Node/Blocks/crossBlock.js.map +1 -1
  366. package/Materials/Node/Blocks/customBlock.js +1 -1
  367. package/Materials/Node/Blocks/customBlock.js.map +1 -1
  368. package/Materials/Node/Blocks/desaturateBlock.js +4 -4
  369. package/Materials/Node/Blocks/desaturateBlock.js.map +1 -1
  370. package/Materials/Node/Blocks/distanceBlock.js +1 -1
  371. package/Materials/Node/Blocks/distanceBlock.js.map +1 -1
  372. package/Materials/Node/Blocks/divideBlock.js +1 -1
  373. package/Materials/Node/Blocks/divideBlock.js.map +1 -1
  374. package/Materials/Node/Blocks/dotBlock.js +1 -1
  375. package/Materials/Node/Blocks/dotBlock.js.map +1 -1
  376. package/Materials/Node/Blocks/elbowBlock.d.ts +27 -0
  377. package/Materials/Node/Blocks/elbowBlock.js +60 -0
  378. package/Materials/Node/Blocks/elbowBlock.js.map +1 -0
  379. package/Materials/Node/Blocks/fresnelBlock.js +2 -2
  380. package/Materials/Node/Blocks/fresnelBlock.js.map +1 -1
  381. package/Materials/Node/Blocks/gradientBlock.js +8 -8
  382. package/Materials/Node/Blocks/gradientBlock.js.map +1 -1
  383. package/Materials/Node/Blocks/index.d.ts +1 -0
  384. package/Materials/Node/Blocks/index.js +1 -0
  385. package/Materials/Node/Blocks/index.js.map +1 -1
  386. package/Materials/Node/Blocks/lengthBlock.js +1 -1
  387. package/Materials/Node/Blocks/lengthBlock.js.map +1 -1
  388. package/Materials/Node/Blocks/lerpBlock.js +1 -1
  389. package/Materials/Node/Blocks/lerpBlock.js.map +1 -1
  390. package/Materials/Node/Blocks/matrixBuilderBlock.js +1 -1
  391. package/Materials/Node/Blocks/matrixBuilderBlock.js.map +1 -1
  392. package/Materials/Node/Blocks/maxBlock.js +1 -1
  393. package/Materials/Node/Blocks/maxBlock.js.map +1 -1
  394. package/Materials/Node/Blocks/minBlock.js +1 -1
  395. package/Materials/Node/Blocks/minBlock.js.map +1 -1
  396. package/Materials/Node/Blocks/modBlock.js +1 -1
  397. package/Materials/Node/Blocks/modBlock.js.map +1 -1
  398. package/Materials/Node/Blocks/multiplyBlock.js +1 -1
  399. package/Materials/Node/Blocks/multiplyBlock.js.map +1 -1
  400. package/Materials/Node/Blocks/nLerpBlock.js +1 -1
  401. package/Materials/Node/Blocks/nLerpBlock.js.map +1 -1
  402. package/Materials/Node/Blocks/negateBlock.js +1 -1
  403. package/Materials/Node/Blocks/negateBlock.js.map +1 -1
  404. package/Materials/Node/Blocks/normalBlendBlock.js +5 -5
  405. package/Materials/Node/Blocks/normalBlendBlock.js.map +1 -1
  406. package/Materials/Node/Blocks/normalizeBlock.js +1 -1
  407. package/Materials/Node/Blocks/normalizeBlock.js.map +1 -1
  408. package/Materials/Node/Blocks/oneMinusBlock.js +1 -1
  409. package/Materials/Node/Blocks/oneMinusBlock.js.map +1 -1
  410. package/Materials/Node/Blocks/posterizeBlock.js +1 -1
  411. package/Materials/Node/Blocks/posterizeBlock.js.map +1 -1
  412. package/Materials/Node/Blocks/powBlock.js +1 -1
  413. package/Materials/Node/Blocks/powBlock.js.map +1 -1
  414. package/Materials/Node/Blocks/randomNumberBlock.js +2 -2
  415. package/Materials/Node/Blocks/randomNumberBlock.js.map +1 -1
  416. package/Materials/Node/Blocks/reciprocalBlock.js +1 -1
  417. package/Materials/Node/Blocks/reciprocalBlock.js.map +1 -1
  418. package/Materials/Node/Blocks/reflectBlock.js +1 -1
  419. package/Materials/Node/Blocks/reflectBlock.js.map +1 -1
  420. package/Materials/Node/Blocks/refractBlock.js +1 -1
  421. package/Materials/Node/Blocks/refractBlock.js.map +1 -1
  422. package/Materials/Node/Blocks/remapBlock.js +3 -3
  423. package/Materials/Node/Blocks/remapBlock.js.map +1 -1
  424. package/Materials/Node/Blocks/replaceColorBlock.js +3 -3
  425. package/Materials/Node/Blocks/replaceColorBlock.js.map +1 -1
  426. package/Materials/Node/Blocks/rotate2dBlock.js +1 -1
  427. package/Materials/Node/Blocks/rotate2dBlock.js.map +1 -1
  428. package/Materials/Node/Blocks/scaleBlock.js +1 -1
  429. package/Materials/Node/Blocks/scaleBlock.js.map +1 -1
  430. package/Materials/Node/Blocks/simplexPerlin3DBlock.js +1 -1
  431. package/Materials/Node/Blocks/simplexPerlin3DBlock.js.map +1 -1
  432. package/Materials/Node/Blocks/smoothStepBlock.js +1 -1
  433. package/Materials/Node/Blocks/smoothStepBlock.js.map +1 -1
  434. package/Materials/Node/Blocks/stepBlock.js +1 -1
  435. package/Materials/Node/Blocks/stepBlock.js.map +1 -1
  436. package/Materials/Node/Blocks/subtractBlock.js +1 -1
  437. package/Materials/Node/Blocks/subtractBlock.js.map +1 -1
  438. package/Materials/Node/Blocks/transformBlock.js +13 -13
  439. package/Materials/Node/Blocks/transformBlock.js.map +1 -1
  440. package/Materials/Node/Blocks/trigonometryBlock.js +2 -2
  441. package/Materials/Node/Blocks/trigonometryBlock.js.map +1 -1
  442. package/Materials/Node/Blocks/vectorMergerBlock.js +22 -22
  443. package/Materials/Node/Blocks/vectorMergerBlock.js.map +1 -1
  444. package/Materials/Node/Blocks/vectorSplitterBlock.js +8 -8
  445. package/Materials/Node/Blocks/vectorSplitterBlock.js.map +1 -1
  446. package/Materials/Node/Blocks/viewDirectionBlock.js +1 -1
  447. package/Materials/Node/Blocks/viewDirectionBlock.js.map +1 -1
  448. package/Materials/Node/Blocks/voronoiNoiseBlock.js +5 -5
  449. package/Materials/Node/Blocks/voronoiNoiseBlock.js.map +1 -1
  450. package/Materials/Node/Blocks/waveBlock.js +3 -3
  451. package/Materials/Node/Blocks/waveBlock.js.map +1 -1
  452. package/Materials/Node/Blocks/worleyNoise3DBlock.js +5 -5
  453. package/Materials/Node/Blocks/worleyNoise3DBlock.js.map +1 -1
  454. package/Materials/Node/Enums/nodeMaterialSystemValues.d.ts +3 -1
  455. package/Materials/Node/Enums/nodeMaterialSystemValues.js +2 -0
  456. package/Materials/Node/Enums/nodeMaterialSystemValues.js.map +1 -1
  457. package/Materials/Node/nodeMaterial.d.ts +4 -0
  458. package/Materials/Node/nodeMaterial.js +22 -11
  459. package/Materials/Node/nodeMaterial.js.map +1 -1
  460. package/Materials/Node/nodeMaterialBlock.js +12 -12
  461. package/Materials/Node/nodeMaterialBlock.js.map +1 -1
  462. package/Materials/Node/nodeMaterialBuildState.js +24 -24
  463. package/Materials/Node/nodeMaterialBuildState.js.map +1 -1
  464. package/Materials/Node/nodeMaterialBuildStateSharedData.js +1 -1
  465. package/Materials/Node/nodeMaterialBuildStateSharedData.js.map +1 -1
  466. package/Materials/PBR/pbrBaseMaterial.d.ts +2 -1
  467. package/Materials/PBR/pbrBaseMaterial.js +4 -3
  468. package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
  469. package/Materials/PBR/pbrBaseSimpleMaterial.d.ts +1 -1
  470. package/Materials/PBR/pbrBaseSimpleMaterial.js.map +1 -1
  471. package/Materials/PBR/pbrMaterial.d.ts +1 -1
  472. package/Materials/PBR/pbrMaterial.js +2 -3
  473. package/Materials/PBR/pbrMaterial.js.map +1 -1
  474. package/Materials/PBR/pbrMetallicRoughnessMaterial.d.ts +1 -1
  475. package/Materials/PBR/pbrMetallicRoughnessMaterial.js.map +1 -1
  476. package/Materials/PBR/pbrSpecularGlossinessMaterial.d.ts +1 -1
  477. package/Materials/PBR/pbrSpecularGlossinessMaterial.js.map +1 -1
  478. package/Materials/Textures/Loaders/ddsTextureLoader.js +8 -1
  479. package/Materials/Textures/Loaders/ddsTextureLoader.js.map +1 -1
  480. package/Materials/Textures/Loaders/ktxTextureLoader.js +2 -2
  481. package/Materials/Textures/Loaders/ktxTextureLoader.js.map +1 -1
  482. package/Materials/Textures/MultiviewRenderTarget.d.ts +2 -1
  483. package/Materials/Textures/MultiviewRenderTarget.js +10 -2
  484. package/Materials/Textures/MultiviewRenderTarget.js.map +1 -1
  485. package/Materials/Textures/Procedurals/proceduralTexture.js +1 -1
  486. package/Materials/Textures/Procedurals/proceduralTexture.js.map +1 -1
  487. package/Materials/Textures/baseTexture.d.ts +1 -1
  488. package/Materials/Textures/baseTexture.js.map +1 -1
  489. package/Materials/Textures/dynamicTexture.d.ts +1 -1
  490. package/Materials/Textures/dynamicTexture.js.map +1 -1
  491. package/Materials/Textures/equiRectangularCubeTexture.js +1 -1
  492. package/Materials/Textures/equiRectangularCubeTexture.js.map +1 -1
  493. package/Materials/Textures/internalTexture.d.ts +2 -0
  494. package/Materials/Textures/internalTexture.js +2 -0
  495. package/Materials/Textures/internalTexture.js.map +1 -1
  496. package/Materials/Textures/mirrorTexture.d.ts +2 -2
  497. package/Materials/Textures/mirrorTexture.js +7 -3
  498. package/Materials/Textures/mirrorTexture.js.map +1 -1
  499. package/Materials/Textures/multiRenderTarget.d.ts +1 -1
  500. package/Materials/Textures/multiRenderTarget.js.map +1 -1
  501. package/Materials/Textures/prePassRenderTarget.d.ts +1 -1
  502. package/Materials/Textures/prePassRenderTarget.js.map +1 -1
  503. package/Materials/Textures/refractionTexture.d.ts +1 -1
  504. package/Materials/Textures/refractionTexture.js +2 -2
  505. package/Materials/Textures/refractionTexture.js.map +1 -1
  506. package/Materials/Textures/renderTargetTexture.d.ts +1 -1
  507. package/Materials/Textures/renderTargetTexture.js +2 -2
  508. package/Materials/Textures/renderTargetTexture.js.map +1 -1
  509. package/Materials/Textures/texture.d.ts +1 -1
  510. package/Materials/Textures/texture.js +5 -5
  511. package/Materials/Textures/texture.js.map +1 -1
  512. package/Materials/Textures/videoTexture.js +1 -0
  513. package/Materials/Textures/videoTexture.js.map +1 -1
  514. package/Materials/effect.js +3 -3
  515. package/Materials/effect.js.map +1 -1
  516. package/Materials/material.d.ts +3 -1
  517. package/Materials/material.js +11 -3
  518. package/Materials/material.js.map +1 -1
  519. package/Materials/materialHelper.js +9 -1
  520. package/Materials/materialHelper.js.map +1 -1
  521. package/Materials/materialPluginManager.js +3 -3
  522. package/Materials/materialPluginManager.js.map +1 -1
  523. package/Materials/multiMaterial.d.ts +3 -1
  524. package/Materials/multiMaterial.js +13 -11
  525. package/Materials/multiMaterial.js.map +1 -1
  526. package/Materials/pushMaterial.d.ts +1 -1
  527. package/Materials/pushMaterial.js.map +1 -1
  528. package/Materials/shaderMaterial.js +8 -4
  529. package/Materials/shaderMaterial.js.map +1 -1
  530. package/Materials/shadowDepthWrapper.d.ts +1 -1
  531. package/Materials/shadowDepthWrapper.js +3 -3
  532. package/Materials/shadowDepthWrapper.js.map +1 -1
  533. package/Materials/standardMaterial.d.ts +2 -6
  534. package/Materials/standardMaterial.js +5 -10
  535. package/Materials/standardMaterial.js.map +1 -1
  536. package/Maths/math.path.d.ts +1 -0
  537. package/Maths/math.path.js +1 -0
  538. package/Maths/math.path.js.map +1 -1
  539. package/Maths/math.size.js +1 -1
  540. package/Maths/math.size.js.map +1 -1
  541. package/Maths/math.vector.d.ts +5 -2
  542. package/Maths/math.vector.js +66 -47
  543. package/Maths/math.vector.js.map +1 -1
  544. package/Meshes/Builders/boxBuilder.js +5 -4
  545. package/Meshes/Builders/boxBuilder.js.map +1 -1
  546. package/Meshes/Builders/capsuleBuilder.js +4 -3
  547. package/Meshes/Builders/capsuleBuilder.js.map +1 -1
  548. package/Meshes/Builders/cylinderBuilder.d.ts +1 -1
  549. package/Meshes/Builders/cylinderBuilder.js +11 -8
  550. package/Meshes/Builders/cylinderBuilder.js.map +1 -1
  551. package/Meshes/Builders/decalBuilder.js +5 -2
  552. package/Meshes/Builders/decalBuilder.js.map +1 -1
  553. package/Meshes/Builders/discBuilder.js +3 -2
  554. package/Meshes/Builders/discBuilder.js.map +1 -1
  555. package/Meshes/Builders/geodesicBuilder.d.ts +1 -0
  556. package/Meshes/Builders/geodesicBuilder.js +1 -0
  557. package/Meshes/Builders/geodesicBuilder.js.map +1 -1
  558. package/Meshes/Builders/goldbergBuilder.d.ts +1 -0
  559. package/Meshes/Builders/goldbergBuilder.js +11 -1
  560. package/Meshes/Builders/goldbergBuilder.js.map +1 -1
  561. package/Meshes/Builders/groundBuilder.js +2 -1
  562. package/Meshes/Builders/groundBuilder.js.map +1 -1
  563. package/Meshes/Builders/icoSphereBuilder.js +2 -1
  564. package/Meshes/Builders/icoSphereBuilder.js.map +1 -1
  565. package/Meshes/Builders/linesBuilder.js.map +1 -1
  566. package/Meshes/Builders/planeBuilder.js +5 -4
  567. package/Meshes/Builders/planeBuilder.js.map +1 -1
  568. package/Meshes/Builders/polygonBuilder.js +8 -3
  569. package/Meshes/Builders/polygonBuilder.js.map +1 -1
  570. package/Meshes/Builders/polyhedronBuilder.js +3 -2
  571. package/Meshes/Builders/polyhedronBuilder.js.map +1 -1
  572. package/Meshes/Builders/ribbonBuilder.js +4 -3
  573. package/Meshes/Builders/ribbonBuilder.js.map +1 -1
  574. package/Meshes/Builders/sphereBuilder.js +2 -1
  575. package/Meshes/Builders/sphereBuilder.js.map +1 -1
  576. package/Meshes/Builders/tiledBoxBuilder.d.ts +30 -11
  577. package/Meshes/Builders/tiledBoxBuilder.js +34 -11
  578. package/Meshes/Builders/tiledBoxBuilder.js.map +1 -1
  579. package/Meshes/Builders/tiledPlaneBuilder.d.ts +21 -16
  580. package/Meshes/Builders/tiledPlaneBuilder.js +21 -16
  581. package/Meshes/Builders/tiledPlaneBuilder.js.map +1 -1
  582. package/Meshes/Builders/torusBuilder.js +2 -1
  583. package/Meshes/Builders/torusBuilder.js.map +1 -1
  584. package/Meshes/Builders/torusKnotBuilder.js +2 -1
  585. package/Meshes/Builders/torusKnotBuilder.js.map +1 -1
  586. package/Meshes/Compression/dracoCompression.d.ts +3 -0
  587. package/Meshes/Compression/dracoCompression.js +23 -7
  588. package/Meshes/Compression/dracoCompression.js.map +1 -1
  589. package/Meshes/abstractMesh.d.ts +14 -2
  590. package/Meshes/abstractMesh.js +51 -33
  591. package/Meshes/abstractMesh.js.map +1 -1
  592. package/Meshes/geometry.d.ts +1 -1
  593. package/Meshes/geometry.js +38 -3
  594. package/Meshes/geometry.js.map +1 -1
  595. package/Meshes/groundMesh.d.ts +1 -1
  596. package/Meshes/groundMesh.js.map +1 -1
  597. package/Meshes/instancedMesh.js +5 -6
  598. package/Meshes/instancedMesh.js.map +1 -1
  599. package/Meshes/mesh.d.ts +1 -1
  600. package/Meshes/mesh.js +53 -36
  601. package/Meshes/mesh.js.map +1 -1
  602. package/Meshes/mesh.lts.d.ts +1 -1
  603. package/Meshes/mesh.lts.js.map +1 -1
  604. package/Meshes/mesh.vertexData.d.ts +2 -2
  605. package/Meshes/mesh.vertexData.js +4 -3
  606. package/Meshes/mesh.vertexData.js.map +1 -1
  607. package/Meshes/polygonMesh.js +2 -2
  608. package/Meshes/polygonMesh.js.map +1 -1
  609. package/Meshes/subMesh.js +1 -2
  610. package/Meshes/subMesh.js.map +1 -1
  611. package/Meshes/subMesh.project.js +1 -2
  612. package/Meshes/subMesh.project.js.map +1 -1
  613. package/Meshes/thinInstanceMesh.js +5 -0
  614. package/Meshes/thinInstanceMesh.js.map +1 -1
  615. package/Meshes/trailMesh.d.ts +1 -1
  616. package/Meshes/trailMesh.js.map +1 -1
  617. package/Meshes/transformNode.js +40 -13
  618. package/Meshes/transformNode.js.map +1 -1
  619. package/Misc/HighDynamicRange/cubemapToSphericalPolynomial.d.ts +5 -0
  620. package/Misc/HighDynamicRange/cubemapToSphericalPolynomial.js +13 -2
  621. package/Misc/HighDynamicRange/cubemapToSphericalPolynomial.js.map +1 -1
  622. package/Misc/PerformanceViewer/performanceViewerCollectionStrategies.js +6 -12
  623. package/Misc/PerformanceViewer/performanceViewerCollectionStrategies.js.map +1 -1
  624. package/Misc/PerformanceViewer/performanceViewerCollector.js +36 -19
  625. package/Misc/PerformanceViewer/performanceViewerCollector.js.map +1 -1
  626. package/Misc/assetsManager.d.ts +2 -1
  627. package/Misc/assetsManager.js +15 -1
  628. package/Misc/assetsManager.js.map +1 -1
  629. package/Misc/basis.js +1 -1
  630. package/Misc/basis.js.map +1 -1
  631. package/Misc/brdfTextureTools.js +4 -1
  632. package/Misc/brdfTextureTools.js.map +1 -1
  633. package/Misc/dds.js +7 -0
  634. package/Misc/dds.js.map +1 -1
  635. package/Misc/decorators.d.ts +1 -1
  636. package/Misc/decorators.js +8 -1
  637. package/Misc/decorators.js.map +1 -1
  638. package/Misc/deepCopier.js +3 -3
  639. package/Misc/deepCopier.js.map +1 -1
  640. package/Misc/devTools.js +1 -1
  641. package/Misc/devTools.js.map +1 -1
  642. package/Misc/environmentTextureTools.js +2 -2
  643. package/Misc/environmentTextureTools.js.map +1 -1
  644. package/Misc/error.d.ts +51 -0
  645. package/Misc/error.js +66 -0
  646. package/Misc/error.js.map +1 -0
  647. package/Misc/fileTools.d.ts +4 -4
  648. package/Misc/fileTools.js +14 -12
  649. package/Misc/fileTools.js.map +1 -1
  650. package/Misc/index.d.ts +2 -0
  651. package/Misc/index.js +2 -0
  652. package/Misc/index.js.map +1 -1
  653. package/Misc/khronosTextureContainer2.js +4 -3
  654. package/Misc/khronosTextureContainer2.js.map +1 -1
  655. package/Misc/reflector.js +6 -6
  656. package/Misc/reflector.js.map +1 -1
  657. package/Misc/tools.js +15 -13
  658. package/Misc/tools.js.map +1 -1
  659. package/Misc/uniqueIdGenerator.js +1 -1
  660. package/Misc/uniqueIdGenerator.js.map +1 -1
  661. package/Offline/database.js +1 -1
  662. package/Offline/database.js.map +1 -1
  663. package/Particles/baseParticleSystem.d.ts +4 -1
  664. package/Particles/baseParticleSystem.js +20 -5
  665. package/Particles/baseParticleSystem.js.map +1 -1
  666. package/Particles/gpuParticleSystem.js +2 -1
  667. package/Particles/gpuParticleSystem.js.map +1 -1
  668. package/Particles/particleHelper.js +2 -2
  669. package/Particles/particleHelper.js.map +1 -1
  670. package/Particles/particleSystem.js +7 -1
  671. package/Particles/particleSystem.js.map +1 -1
  672. package/Physics/Plugins/ammoJSPlugin.d.ts +5 -1
  673. package/Physics/Plugins/ammoJSPlugin.js +16 -11
  674. package/Physics/Plugins/ammoJSPlugin.js.map +1 -1
  675. package/Physics/physicsEngine.d.ts +1 -0
  676. package/Physics/physicsEngine.js +3 -1
  677. package/Physics/physicsEngine.js.map +1 -1
  678. package/Physics/physicsImpostor.d.ts +2 -2
  679. package/Physics/physicsImpostor.js.map +1 -1
  680. package/PostProcesses/blurPostProcess.js +5 -5
  681. package/PostProcesses/blurPostProcess.js.map +1 -1
  682. package/PostProcesses/imageProcessingPostProcess.js +1 -1
  683. package/PostProcesses/imageProcessingPostProcess.js.map +1 -1
  684. package/PostProcesses/postProcess.js +1 -1
  685. package/PostProcesses/postProcess.js.map +1 -1
  686. package/PostProcesses/postProcessManager.js +2 -2
  687. package/PostProcesses/postProcessManager.js.map +1 -1
  688. package/Probes/reflectionProbe.js +2 -2
  689. package/Probes/reflectionProbe.js.map +1 -1
  690. package/Rendering/depthPeelingRenderer.js +3 -3
  691. package/Rendering/depthPeelingRenderer.js.map +1 -1
  692. package/Rendering/geometryBufferRenderer.js +8 -8
  693. package/Rendering/geometryBufferRenderer.js.map +1 -1
  694. package/Rendering/outlineRenderer.js +1 -1
  695. package/Rendering/outlineRenderer.js.map +1 -1
  696. package/Rendering/subSurfaceConfiguration.js +1 -1
  697. package/Rendering/subSurfaceConfiguration.js.map +1 -1
  698. package/Rendering/utilityLayerRenderer.js +4 -0
  699. package/Rendering/utilityLayerRenderer.js.map +1 -1
  700. package/Shaders/ShadersInclude/instancesDeclaration.js +1 -1
  701. package/Shaders/ShadersInclude/instancesDeclaration.js.map +1 -1
  702. package/Shaders/ShadersInclude/pbrBlockAlbedoOpacity.js +1 -1
  703. package/Shaders/ShadersInclude/pbrBlockAlbedoOpacity.js.map +1 -1
  704. package/Shaders/ShadersInclude/pbrFragmentExtraDeclaration.js +1 -1
  705. package/Shaders/ShadersInclude/pbrFragmentExtraDeclaration.js.map +1 -1
  706. package/Shaders/ShadersInclude/pointCloudVertex.js +1 -1
  707. package/Shaders/ShadersInclude/pointCloudVertex.js.map +1 -1
  708. package/Shaders/ShadersInclude/prePassVertex.js +1 -1
  709. package/Shaders/ShadersInclude/prePassVertex.js.map +1 -1
  710. package/Shaders/background.vertex.js +1 -1
  711. package/Shaders/background.vertex.js.map +1 -1
  712. package/Shaders/color.fragment.js +1 -1
  713. package/Shaders/color.fragment.js.map +1 -1
  714. package/Shaders/color.vertex.js +1 -1
  715. package/Shaders/color.vertex.js.map +1 -1
  716. package/Shaders/default.fragment.js +1 -1
  717. package/Shaders/default.fragment.js.map +1 -1
  718. package/Shaders/default.vertex.js +1 -1
  719. package/Shaders/default.vertex.js.map +1 -1
  720. package/Shaders/geometry.vertex.js +1 -1
  721. package/Shaders/geometry.vertex.js.map +1 -1
  722. package/Shaders/pbr.fragment.js +1 -1
  723. package/Shaders/pbr.fragment.js.map +1 -1
  724. package/Shaders/pbr.vertex.js +1 -1
  725. package/Shaders/pbr.vertex.js.map +1 -1
  726. package/ShadersWGSL/ShadersInclude/instancesDeclaration.js +1 -1
  727. package/ShadersWGSL/ShadersInclude/instancesDeclaration.js.map +1 -1
  728. package/ShadersWGSL/gpuUpdateParticles.compute.js +1 -1
  729. package/ShadersWGSL/gpuUpdateParticles.compute.js.map +1 -1
  730. package/Sprites/spriteManager.js +9 -10
  731. package/Sprites/spriteManager.js.map +1 -1
  732. package/Sprites/spriteMap.js +2 -2
  733. package/Sprites/spriteMap.js.map +1 -1
  734. package/Sprites/spriteRenderer.js +1 -1
  735. package/Sprites/spriteRenderer.js.map +1 -1
  736. package/XR/features/WebXRControllerPointerSelection.js +15 -9
  737. package/XR/features/WebXRControllerPointerSelection.js.map +1 -1
  738. package/XR/features/WebXRDOMOverlay.js +1 -1
  739. package/XR/features/WebXRDOMOverlay.js.map +1 -1
  740. package/XR/features/WebXRHandTracking.js +30 -30
  741. package/XR/features/WebXRHandTracking.js.map +1 -1
  742. package/XR/features/WebXRImageTracking.js +2 -2
  743. package/XR/features/WebXRImageTracking.js.map +1 -1
  744. package/XR/features/WebXRLayers.d.ts +28 -5
  745. package/XR/features/WebXRLayers.js +54 -20
  746. package/XR/features/WebXRLayers.js.map +1 -1
  747. package/XR/features/WebXRNearInteraction.d.ts +35 -3
  748. package/XR/features/WebXRNearInteraction.js +201 -40
  749. package/XR/features/WebXRNearInteraction.js.map +1 -1
  750. package/XR/motionController/webXRAbstractMotionController.js +1 -1
  751. package/XR/motionController/webXRAbstractMotionController.js.map +1 -1
  752. package/XR/motionController/webXRMotionControllerManager.js +2 -2
  753. package/XR/motionController/webXRMotionControllerManager.js.map +1 -1
  754. package/XR/motionController/webXRProfiledMotionController.js +1 -1
  755. package/XR/motionController/webXRProfiledMotionController.js.map +1 -1
  756. package/XR/webXRCamera.js +17 -4
  757. package/XR/webXRCamera.js.map +1 -1
  758. package/XR/webXRDefaultExperience.js +3 -0
  759. package/XR/webXRDefaultExperience.js.map +1 -1
  760. package/XR/webXREnterExitUI.js +2 -2
  761. package/XR/webXREnterExitUI.js.map +1 -1
  762. package/XR/webXRExperienceHelper.js +3 -2
  763. package/XR/webXRExperienceHelper.js.map +1 -1
  764. package/XR/webXRFeaturesManager.js +6 -6
  765. package/XR/webXRFeaturesManager.js.map +1 -1
  766. package/XR/webXRInputSource.js +3 -3
  767. package/XR/webXRInputSource.js.map +1 -1
  768. package/XR/webXRRenderTargetTextureProvider.d.ts +3 -2
  769. package/XR/webXRRenderTargetTextureProvider.js +37 -18
  770. package/XR/webXRRenderTargetTextureProvider.js.map +1 -1
  771. package/XR/webXRSessionManager.d.ts +1 -0
  772. package/XR/webXRSessionManager.js +7 -2
  773. package/XR/webXRSessionManager.js.map +1 -1
  774. package/assetContainer.d.ts +1 -1
  775. package/assetContainer.js +5 -4
  776. package/assetContainer.js.map +1 -1
  777. package/index.d.ts +1 -0
  778. package/index.js +1 -0
  779. package/index.js.map +1 -1
  780. package/node.d.ts +1 -1
  781. package/node.js.map +1 -1
  782. package/package.json +31 -16
  783. package/scene.d.ts +5 -2
  784. package/scene.js +46 -19
  785. package/scene.js.map +1 -1
  786. package/types.d.ts +1 -1
  787. package/types.js.map +1 -1
  788. package/DeviceInput/Implementations/nativeDeviceInputSystem.js.map +0 -1
  789. package/DeviceInput/Implementations/webDeviceInputSystem.js.map +0 -1
  790. package/DeviceInput/Interfaces/inputInterfaces.js.map +0 -1
  791. package/DeviceInput/deviceInputSystem.d.ts +0 -60
  792. package/DeviceInput/deviceInputSystem.js +0 -84
  793. package/DeviceInput/deviceInputSystem.js.map +0 -1
  794. package/Misc/baseError.d.ts +0 -7
  795. package/Misc/baseError.js +0 -18
  796. package/Misc/baseError.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"materialHelper.js","sourceRoot":"","sources":["../../../sourceES6/core/Materials/materialHelper.ts"],"names":[],"mappings":"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","sourcesContent":["import { Logger } from \"../Misc/logger\";\r\nimport { Nullable } from \"../types\";\r\nimport { Camera } from \"../Cameras/camera\";\r\nimport { Scene } from \"../scene\";\r\nimport { Engine } from \"../Engines/engine\";\r\nimport { EngineStore } from \"../Engines/engineStore\";\r\nimport { AbstractMesh } from \"../Meshes/abstractMesh\";\r\nimport { Mesh } from \"../Meshes/mesh\";\r\nimport { VertexBuffer } from \"../Buffers/buffer\";\r\nimport { Light } from \"../Lights/light\";\r\n\r\nimport { PrePassConfiguration } from \"../Materials/prePassConfiguration\";\r\n\r\nimport { UniformBuffer } from \"./uniformBuffer\";\r\nimport { Effect, IEffectCreationOptions } from \"./effect\";\r\nimport { BaseTexture } from \"../Materials/Textures/baseTexture\";\r\nimport { MaterialDefines } from \"./materialDefines\";\r\nimport { Color3 } from '../Maths/math.color';\r\nimport { EffectFallbacks } from './effectFallbacks';\r\nimport { ThinMaterialHelper } from './thinMaterialHelper';\r\n\r\n/**\r\n * \"Static Class\" containing the most commonly used helper while dealing with material for rendering purpose.\r\n *\r\n * It contains the basic tools to help defining defines, binding uniform for the common part of the materials.\r\n *\r\n * This works by convention in BabylonJS but is meant to be use only with shader following the in place naming rules and conventions.\r\n */\r\nexport class MaterialHelper {\r\n\r\n /**\r\n * Binds the scene's uniform buffer to the effect.\r\n * @param effect defines the effect to bind to the scene uniform buffer\r\n * @param sceneUbo defines the uniform buffer storing scene data\r\n */\r\n public static BindSceneUniformBuffer(effect: Effect, sceneUbo: UniformBuffer): void {\r\n sceneUbo.bindToEffect(effect, \"Scene\");\r\n }\r\n\r\n /**\r\n * Helps preparing the defines values about the UVs in used in the effect.\r\n * UVs are shared as much as we can across channels in the shaders.\r\n * @param texture The texture we are preparing the UVs for\r\n * @param defines The defines to update\r\n * @param key The channel key \"diffuse\", \"specular\"... used in the shader\r\n */\r\n public static PrepareDefinesForMergedUV(texture: BaseTexture, defines: any, key: string): void {\r\n defines._needUVs = true;\r\n defines[key] = true;\r\n if (texture.getTextureMatrix().isIdentityAs3x2()) {\r\n defines[key + \"DIRECTUV\"] = texture.coordinatesIndex + 1;\r\n defines[\"MAINUV\" + (texture.coordinatesIndex + 1)] = true;\r\n } else {\r\n defines[key + \"DIRECTUV\"] = 0;\r\n }\r\n }\r\n\r\n /**\r\n * Binds a texture matrix value to its corresponding uniform\r\n * @param texture The texture to bind the matrix for\r\n * @param uniformBuffer The uniform buffer receiving the data\r\n * @param key The channel key \"diffuse\", \"specular\"... used in the shader\r\n */\r\n public static BindTextureMatrix(texture: BaseTexture, uniformBuffer: UniformBuffer, key: string): void {\r\n var matrix = texture.getTextureMatrix();\r\n\r\n uniformBuffer.updateMatrix(key + \"Matrix\", matrix);\r\n }\r\n\r\n /**\r\n * Gets the current status of the fog (should it be enabled?)\r\n * @param mesh defines the mesh to evaluate for fog support\r\n * @param scene defines the hosting scene\r\n * @returns true if fog must be enabled\r\n */\r\n public static GetFogState(mesh: AbstractMesh, scene: Scene) {\r\n return (scene.fogEnabled && mesh.applyFog && scene.fogMode !== Scene.FOGMODE_NONE);\r\n }\r\n\r\n /**\r\n * Helper used to prepare the list of defines associated with misc. values for shader compilation\r\n * @param mesh defines the current mesh\r\n * @param scene defines the current scene\r\n * @param useLogarithmicDepth defines if logarithmic depth has to be turned on\r\n * @param pointsCloud defines if point cloud rendering has to be turned on\r\n * @param fogEnabled defines if fog has to be turned on\r\n * @param alphaTest defines if alpha testing has to be turned on\r\n * @param defines defines the current list of defines\r\n */\r\n public static PrepareDefinesForMisc(mesh: AbstractMesh, scene: Scene, useLogarithmicDepth: boolean, pointsCloud: boolean, fogEnabled: boolean, alphaTest: boolean, defines: any): void {\r\n if (defines._areMiscDirty) {\r\n defines[\"LOGARITHMICDEPTH\"] = useLogarithmicDepth;\r\n defines[\"POINTSIZE\"] = pointsCloud;\r\n defines[\"FOG\"] = fogEnabled && this.GetFogState(mesh, scene);\r\n defines[\"NONUNIFORMSCALING\"] = mesh.nonUniformScaling;\r\n defines[\"ALPHATEST\"] = alphaTest;\r\n }\r\n }\r\n\r\n /**\r\n * Helper used to prepare the list of defines associated with frame values for shader compilation\r\n * @param scene defines the current scene\r\n * @param engine defines the current engine\r\n * @param defines specifies the list of active defines\r\n * @param useInstances defines if instances have to be turned on\r\n * @param useClipPlane defines if clip plane have to be turned on\r\n * @param useInstances defines if instances have to be turned on\r\n * @param useThinInstances defines if thin instances have to be turned on\r\n */\r\n public static PrepareDefinesForFrameBoundValues(scene: Scene, engine: Engine, defines: any, useInstances: boolean, useClipPlane: Nullable<boolean> = null, useThinInstances: boolean = false): void {\r\n var changed = false;\r\n let useClipPlane1 = false;\r\n let useClipPlane2 = false;\r\n let useClipPlane3 = false;\r\n let useClipPlane4 = false;\r\n let useClipPlane5 = false;\r\n let useClipPlane6 = false;\r\n\r\n useClipPlane1 = useClipPlane == null ? (scene.clipPlane !== undefined && scene.clipPlane !== null) : useClipPlane;\r\n useClipPlane2 = useClipPlane == null ? (scene.clipPlane2 !== undefined && scene.clipPlane2 !== null) : useClipPlane;\r\n useClipPlane3 = useClipPlane == null ? (scene.clipPlane3 !== undefined && scene.clipPlane3 !== null) : useClipPlane;\r\n useClipPlane4 = useClipPlane == null ? (scene.clipPlane4 !== undefined && scene.clipPlane4 !== null) : useClipPlane;\r\n useClipPlane5 = useClipPlane == null ? (scene.clipPlane5 !== undefined && scene.clipPlane5 !== null) : useClipPlane;\r\n useClipPlane6 = useClipPlane == null ? (scene.clipPlane6 !== undefined && scene.clipPlane6 !== null) : useClipPlane;\r\n\r\n if (defines[\"CLIPPLANE\"] !== useClipPlane1) {\r\n defines[\"CLIPPLANE\"] = useClipPlane1;\r\n changed = true;\r\n }\r\n\r\n if (defines[\"CLIPPLANE2\"] !== useClipPlane2) {\r\n defines[\"CLIPPLANE2\"] = useClipPlane2;\r\n changed = true;\r\n }\r\n\r\n if (defines[\"CLIPPLANE3\"] !== useClipPlane3) {\r\n defines[\"CLIPPLANE3\"] = useClipPlane3;\r\n changed = true;\r\n }\r\n\r\n if (defines[\"CLIPPLANE4\"] !== useClipPlane4) {\r\n defines[\"CLIPPLANE4\"] = useClipPlane4;\r\n changed = true;\r\n }\r\n\r\n if (defines[\"CLIPPLANE5\"] !== useClipPlane5) {\r\n defines[\"CLIPPLANE5\"] = useClipPlane5;\r\n changed = true;\r\n }\r\n\r\n if (defines[\"CLIPPLANE6\"] !== useClipPlane6) {\r\n defines[\"CLIPPLANE6\"] = useClipPlane6;\r\n changed = true;\r\n }\r\n\r\n if (defines[\"DEPTHPREPASS\"] !== !engine.getColorWrite()) {\r\n defines[\"DEPTHPREPASS\"] = !defines[\"DEPTHPREPASS\"];\r\n changed = true;\r\n }\r\n\r\n if (defines[\"INSTANCES\"] !== useInstances) {\r\n defines[\"INSTANCES\"] = useInstances;\r\n changed = true;\r\n }\r\n\r\n if (defines[\"THIN_INSTANCES\"] !== useThinInstances) {\r\n defines[\"THIN_INSTANCES\"] = useThinInstances;\r\n changed = true;\r\n }\r\n\r\n if (changed) {\r\n defines.markAsUnprocessed();\r\n }\r\n }\r\n\r\n /**\r\n * Prepares the defines for bones\r\n * @param mesh The mesh containing the geometry data we will draw\r\n * @param defines The defines to update\r\n */\r\n public static PrepareDefinesForBones(mesh: AbstractMesh, defines: any) {\r\n if (mesh.useBones && mesh.computeBonesUsingShaders && mesh.skeleton) {\r\n defines[\"NUM_BONE_INFLUENCERS\"] = mesh.numBoneInfluencers;\r\n\r\n const materialSupportsBoneTexture = defines[\"BONETEXTURE\"] !== undefined;\r\n\r\n if (mesh.skeleton.isUsingTextureForMatrices && materialSupportsBoneTexture) {\r\n defines[\"BONETEXTURE\"] = true;\r\n } else {\r\n defines[\"BonesPerMesh\"] = (mesh.skeleton.bones.length + 1);\r\n defines[\"BONETEXTURE\"] = materialSupportsBoneTexture ? false : undefined;\r\n\r\n const prePassRenderer = mesh.getScene().prePassRenderer;\r\n if (prePassRenderer && prePassRenderer.enabled) {\r\n const nonExcluded = prePassRenderer.excludedSkinnedMesh.indexOf(mesh) === -1;\r\n defines[\"BONES_VELOCITY_ENABLED\"] = nonExcluded;\r\n }\r\n }\r\n } else {\r\n defines[\"NUM_BONE_INFLUENCERS\"] = 0;\r\n defines[\"BonesPerMesh\"] = 0;\r\n }\r\n }\r\n\r\n /**\r\n * Prepares the defines for morph targets\r\n * @param mesh The mesh containing the geometry data we will draw\r\n * @param defines The defines to update\r\n */\r\n public static PrepareDefinesForMorphTargets(mesh: AbstractMesh, defines: any) {\r\n var manager = (<Mesh>mesh).morphTargetManager;\r\n if (manager) {\r\n defines[\"MORPHTARGETS_UV\"] = manager.supportsUVs && defines[\"UV1\"];\r\n defines[\"MORPHTARGETS_TANGENT\"] = manager.supportsTangents && defines[\"TANGENT\"];\r\n defines[\"MORPHTARGETS_NORMAL\"] = manager.supportsNormals && defines[\"NORMAL\"];\r\n defines[\"MORPHTARGETS\"] = (manager.numInfluencers > 0);\r\n defines[\"NUM_MORPH_INFLUENCERS\"] = manager.numInfluencers;\r\n\r\n defines[\"MORPHTARGETS_TEXTURE\"] = manager.isUsingTextureForTargets;\r\n } else {\r\n defines[\"MORPHTARGETS_UV\"] = false;\r\n defines[\"MORPHTARGETS_TANGENT\"] = false;\r\n defines[\"MORPHTARGETS_NORMAL\"] = false;\r\n defines[\"MORPHTARGETS\"] = false;\r\n defines[\"NUM_MORPH_INFLUENCERS\"] = 0;\r\n }\r\n }\r\n\r\n /**\r\n * Prepares the defines for baked vertex animation\r\n * @param mesh The mesh containing the geometry data we will draw\r\n * @param defines The defines to update\r\n */\r\n public static PrepareDefinesForBakedVertexAnimation(mesh: AbstractMesh, defines: any) {\r\n const manager = (<Mesh>mesh).bakedVertexAnimationManager;\r\n defines[\"BAKED_VERTEX_ANIMATION_TEXTURE\"] = manager && manager.isEnabled ? true : false;\r\n }\r\n\r\n /**\r\n * Prepares the defines used in the shader depending on the attributes data available in the mesh\r\n * @param mesh The mesh containing the geometry data we will draw\r\n * @param defines The defines to update\r\n * @param useVertexColor Precise whether vertex colors should be used or not (override mesh info)\r\n * @param useBones Precise whether bones should be used or not (override mesh info)\r\n * @param useMorphTargets Precise whether morph targets should be used or not (override mesh info)\r\n * @param useVertexAlpha Precise whether vertex alpha should be used or not (override mesh info)\r\n * @param useBakedVertexAnimation Precise whether baked vertex animation should be used or not (override mesh info)\r\n * @returns false if defines are considered not dirty and have not been checked\r\n */\r\n public static PrepareDefinesForAttributes(mesh: AbstractMesh, defines: any, useVertexColor: boolean, useBones: boolean, useMorphTargets = false, useVertexAlpha = true, useBakedVertexAnimation = true): boolean {\r\n if (!defines._areAttributesDirty && defines._needNormals === defines._normals && defines._needUVs === defines._uvs) {\r\n return false;\r\n }\r\n\r\n defines._normals = defines._needNormals;\r\n defines._uvs = defines._needUVs;\r\n\r\n defines[\"NORMAL\"] = (defines._needNormals && mesh.isVerticesDataPresent(VertexBuffer.NormalKind));\r\n\r\n if (defines._needNormals && mesh.isVerticesDataPresent(VertexBuffer.TangentKind)) {\r\n defines[\"TANGENT\"] = true;\r\n }\r\n\r\n for (let i = 1; i <= 6; ++i) {\r\n defines[\"UV\" + i] = defines._needUVs ? mesh.isVerticesDataPresent(`uv${i === 1 ? \"\" : i}`) : false;\r\n }\r\n\r\n if (useVertexColor) {\r\n var hasVertexColors = mesh.useVertexColors && mesh.isVerticesDataPresent(VertexBuffer.ColorKind);\r\n defines[\"VERTEXCOLOR\"] = hasVertexColors;\r\n defines[\"VERTEXALPHA\"] = mesh.hasVertexAlpha && hasVertexColors && useVertexAlpha;\r\n }\r\n\r\n if (useBones) {\r\n this.PrepareDefinesForBones(mesh, defines);\r\n }\r\n\r\n if (useMorphTargets) {\r\n this.PrepareDefinesForMorphTargets(mesh, defines);\r\n }\r\n\r\n if (useBakedVertexAnimation) {\r\n this.PrepareDefinesForBakedVertexAnimation(mesh, defines);\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * Prepares the defines related to multiview\r\n * @param scene The scene we are intending to draw\r\n * @param defines The defines to update\r\n */\r\n public static PrepareDefinesForMultiview(scene: Scene, defines: any) {\r\n if (scene.activeCamera) {\r\n var previousMultiview = defines.MULTIVIEW;\r\n defines.MULTIVIEW = (scene.activeCamera.outputRenderTarget !== null && scene.activeCamera.outputRenderTarget.getViewCount() > 1);\r\n if (defines.MULTIVIEW != previousMultiview) {\r\n defines.markAsUnprocessed();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Prepares the defines related to order independant transparency\r\n * @param scene The scene we are intending to draw\r\n * @param defines The defines to update\r\n * @param needAlphaBlending Determines if the material needs alpha blending\r\n */\r\n public static PrepareDefinesForOIT(scene: Scene, defines: any, needAlphaBlending: boolean) {\r\n const previousDefine = defines.ORDER_INDEPENDENT_TRANSPARENCY;\r\n const previousDefine16Bits = defines.ORDER_INDEPENDENT_TRANSPARENCY_16BITS;\r\n\r\n defines.ORDER_INDEPENDENT_TRANSPARENCY = scene.useOrderIndependentTransparency && needAlphaBlending;\r\n defines.ORDER_INDEPENDENT_TRANSPARENCY_16BITS = !scene.getEngine().getCaps().textureFloatLinearFiltering;\r\n\r\n if (previousDefine !== defines.ORDER_INDEPENDENT_TRANSPARENCY || previousDefine16Bits !== defines.ORDER_INDEPENDENT_TRANSPARENCY_16BITS) {\r\n defines.markAsUnprocessed();\r\n }\r\n }\r\n\r\n /**\r\n * Prepares the defines related to the prepass\r\n * @param scene The scene we are intending to draw\r\n * @param defines The defines to update\r\n * @param canRenderToMRT Indicates if this material renders to several textures in the prepass\r\n */\r\n public static PrepareDefinesForPrePass(scene: Scene, defines: any, canRenderToMRT: boolean) {\r\n const previousPrePass = defines.PREPASS;\r\n\r\n if (!defines._arePrePassDirty) {\r\n return;\r\n }\r\n\r\n const texturesList = [\r\n {\r\n type: 1,\r\n define: \"PREPASS_POSITION\",\r\n index: \"PREPASS_POSITION_INDEX\",\r\n },\r\n {\r\n type: 2,\r\n define: \"PREPASS_VELOCITY\",\r\n index: \"PREPASS_VELOCITY_INDEX\",\r\n },\r\n {\r\n type: 3,\r\n define: \"PREPASS_REFLECTIVITY\",\r\n index: \"PREPASS_REFLECTIVITY_INDEX\",\r\n },\r\n {\r\n type: 0,\r\n define: \"PREPASS_IRRADIANCE\",\r\n index: \"PREPASS_IRRADIANCE_INDEX\",\r\n },\r\n {\r\n type: 7,\r\n define: \"PREPASS_ALBEDO_SQRT\",\r\n index: \"PREPASS_ALBEDO_SQRT_INDEX\",\r\n },\r\n {\r\n type: 5,\r\n define: \"PREPASS_DEPTH\",\r\n index: \"PREPASS_DEPTH_INDEX\",\r\n },\r\n {\r\n type: 6,\r\n define: \"PREPASS_NORMAL\",\r\n index: \"PREPASS_NORMAL_INDEX\",\r\n }];\r\n\r\n if (scene.prePassRenderer && scene.prePassRenderer.enabled && canRenderToMRT) {\r\n defines.PREPASS = true;\r\n defines.SCENE_MRT_COUNT = scene.prePassRenderer.mrtCount;\r\n\r\n for (let i = 0; i < texturesList.length; i++) {\r\n const index = scene.prePassRenderer.getIndex(texturesList[i].type);\r\n if (index !== -1) {\r\n defines[texturesList[i].define] = true;\r\n defines[texturesList[i].index] = index;\r\n } else {\r\n defines[texturesList[i].define] = false;\r\n }\r\n }\r\n\r\n } else {\r\n defines.PREPASS = false;\r\n for (let i = 0; i < texturesList.length; i++) {\r\n defines[texturesList[i].define] = false;\r\n }\r\n }\r\n\r\n if (defines.PREPASS != previousPrePass) {\r\n defines.markAsUnprocessed();\r\n defines.markAsImageProcessingDirty();\r\n }\r\n }\r\n\r\n /**\r\n * Prepares the defines related to the light information passed in parameter\r\n * @param scene The scene we are intending to draw\r\n * @param mesh The mesh the effect is compiling for\r\n * @param light The light the effect is compiling for\r\n * @param lightIndex The index of the light\r\n * @param defines The defines to update\r\n * @param specularSupported Specifies whether specular is supported or not (override lights data)\r\n * @param state Defines the current state regarding what is needed (normals, etc...)\r\n */\r\n public static PrepareDefinesForLight(scene: Scene, mesh: AbstractMesh, light: Light, lightIndex: number, defines: any, specularSupported: boolean, state: {\r\n needNormals: boolean,\r\n needRebuild: boolean,\r\n shadowEnabled: boolean,\r\n specularEnabled: boolean,\r\n lightmapMode: boolean\r\n }) {\r\n state.needNormals = true;\r\n\r\n if (defines[\"LIGHT\" + lightIndex] === undefined) {\r\n state.needRebuild = true;\r\n }\r\n\r\n defines[\"LIGHT\" + lightIndex] = true;\r\n\r\n defines[\"SPOTLIGHT\" + lightIndex] = false;\r\n defines[\"HEMILIGHT\" + lightIndex] = false;\r\n defines[\"POINTLIGHT\" + lightIndex] = false;\r\n defines[\"DIRLIGHT\" + lightIndex] = false;\r\n\r\n light.prepareLightSpecificDefines(defines, lightIndex);\r\n\r\n // FallOff.\r\n defines[\"LIGHT_FALLOFF_PHYSICAL\" + lightIndex] = false;\r\n defines[\"LIGHT_FALLOFF_GLTF\" + lightIndex] = false;\r\n defines[\"LIGHT_FALLOFF_STANDARD\" + lightIndex] = false;\r\n\r\n switch (light.falloffType) {\r\n case Light.FALLOFF_GLTF:\r\n defines[\"LIGHT_FALLOFF_GLTF\" + lightIndex] = true;\r\n break;\r\n case Light.FALLOFF_PHYSICAL:\r\n defines[\"LIGHT_FALLOFF_PHYSICAL\" + lightIndex] = true;\r\n break;\r\n case Light.FALLOFF_STANDARD:\r\n defines[\"LIGHT_FALLOFF_STANDARD\" + lightIndex] = true;\r\n break;\r\n }\r\n\r\n // Specular\r\n if (specularSupported && !light.specular.equalsFloats(0, 0, 0)) {\r\n state.specularEnabled = true;\r\n }\r\n\r\n // Shadows\r\n defines[\"SHADOW\" + lightIndex] = false;\r\n defines[\"SHADOWCSM\" + lightIndex] = false;\r\n defines[\"SHADOWCSMDEBUG\" + lightIndex] = false;\r\n defines[\"SHADOWCSMNUM_CASCADES\" + lightIndex] = false;\r\n defines[\"SHADOWCSMUSESHADOWMAXZ\" + lightIndex] = false;\r\n defines[\"SHADOWCSMNOBLEND\" + lightIndex] = false;\r\n defines[\"SHADOWCSM_RIGHTHANDED\" + lightIndex] = false;\r\n defines[\"SHADOWPCF\" + lightIndex] = false;\r\n defines[\"SHADOWPCSS\" + lightIndex] = false;\r\n defines[\"SHADOWPOISSON\" + lightIndex] = false;\r\n defines[\"SHADOWESM\" + lightIndex] = false;\r\n defines[\"SHADOWCLOSEESM\" + lightIndex] = false;\r\n defines[\"SHADOWCUBE\" + lightIndex] = false;\r\n defines[\"SHADOWLOWQUALITY\" + lightIndex] = false;\r\n defines[\"SHADOWMEDIUMQUALITY\" + lightIndex] = false;\r\n\r\n if (mesh && mesh.receiveShadows && scene.shadowsEnabled && light.shadowEnabled) {\r\n var shadowGenerator = light.getShadowGenerator();\r\n if (shadowGenerator) {\r\n const shadowMap = shadowGenerator.getShadowMap();\r\n if (shadowMap) {\r\n if (shadowMap.renderList && shadowMap.renderList.length > 0) {\r\n state.shadowEnabled = true;\r\n shadowGenerator.prepareDefines(defines, lightIndex);\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (light.lightmapMode != Light.LIGHTMAP_DEFAULT) {\r\n state.lightmapMode = true;\r\n defines[\"LIGHTMAPEXCLUDED\" + lightIndex] = true;\r\n defines[\"LIGHTMAPNOSPECULAR\" + lightIndex] = (light.lightmapMode == Light.LIGHTMAP_SHADOWSONLY);\r\n } else {\r\n defines[\"LIGHTMAPEXCLUDED\" + lightIndex] = false;\r\n defines[\"LIGHTMAPNOSPECULAR\" + lightIndex] = false;\r\n }\r\n }\r\n\r\n /**\r\n * Prepares the defines related to the light information passed in parameter\r\n * @param scene The scene we are intending to draw\r\n * @param mesh The mesh the effect is compiling for\r\n * @param defines The defines to update\r\n * @param specularSupported Specifies whether specular is supported or not (override lights data)\r\n * @param maxSimultaneousLights Specifies how manuy lights can be added to the effect at max\r\n * @param disableLighting Specifies whether the lighting is disabled (override scene and light)\r\n * @returns true if normals will be required for the rest of the effect\r\n */\r\n public static PrepareDefinesForLights(scene: Scene, mesh: AbstractMesh, defines: any, specularSupported: boolean, maxSimultaneousLights = 4, disableLighting = false): boolean {\r\n if (!defines._areLightsDirty) {\r\n return defines._needNormals;\r\n }\r\n\r\n var lightIndex = 0;\r\n let state = {\r\n needNormals: false,\r\n needRebuild: false,\r\n lightmapMode: false,\r\n shadowEnabled: false,\r\n specularEnabled: false\r\n };\r\n\r\n if (scene.lightsEnabled && !disableLighting) {\r\n for (var light of mesh.lightSources) {\r\n this.PrepareDefinesForLight(scene, mesh, light, lightIndex, defines, specularSupported, state);\r\n\r\n lightIndex++;\r\n if (lightIndex === maxSimultaneousLights) {\r\n break;\r\n }\r\n }\r\n }\r\n\r\n defines[\"SPECULARTERM\"] = state.specularEnabled;\r\n defines[\"SHADOWS\"] = state.shadowEnabled;\r\n\r\n // Resetting all other lights if any\r\n for (var index = lightIndex; index < maxSimultaneousLights; index++) {\r\n if (defines[\"LIGHT\" + index] !== undefined) {\r\n defines[\"LIGHT\" + index] = false;\r\n defines[\"HEMILIGHT\" + index] = false;\r\n defines[\"POINTLIGHT\" + index] = false;\r\n defines[\"DIRLIGHT\" + index] = false;\r\n defines[\"SPOTLIGHT\" + index] = false;\r\n defines[\"SHADOW\" + index] = false;\r\n defines[\"SHADOWCSM\" + index] = false;\r\n defines[\"SHADOWCSMDEBUG\" + index] = false;\r\n defines[\"SHADOWCSMNUM_CASCADES\" + index] = false;\r\n defines[\"SHADOWCSMUSESHADOWMAXZ\" + index] = false;\r\n defines[\"SHADOWCSMNOBLEND\" + index] = false;\r\n defines[\"SHADOWCSM_RIGHTHANDED\" + index] = false;\r\n defines[\"SHADOWPCF\" + index] = false;\r\n defines[\"SHADOWPCSS\" + index] = false;\r\n defines[\"SHADOWPOISSON\" + index] = false;\r\n defines[\"SHADOWESM\" + index] = false;\r\n defines[\"SHADOWCLOSEESM\" + index] = false;\r\n defines[\"SHADOWCUBE\" + index] = false;\r\n defines[\"SHADOWLOWQUALITY\" + index] = false;\r\n defines[\"SHADOWMEDIUMQUALITY\" + index] = false;\r\n }\r\n }\r\n\r\n let caps = scene.getEngine().getCaps();\r\n\r\n if (defines[\"SHADOWFLOAT\"] === undefined) {\r\n state.needRebuild = true;\r\n }\r\n\r\n defines[\"SHADOWFLOAT\"] = state.shadowEnabled &&\r\n ((caps.textureFloatRender && caps.textureFloatLinearFiltering) ||\r\n (caps.textureHalfFloatRender && caps.textureHalfFloatLinearFiltering));\r\n defines[\"LIGHTMAPEXCLUDED\"] = state.lightmapMode;\r\n\r\n if (state.needRebuild) {\r\n defines.rebuild();\r\n }\r\n\r\n return state.needNormals;\r\n }\r\n\r\n /**\r\n * Prepares the uniforms and samplers list to be used in the effect (for a specific light)\r\n * @param lightIndex defines the light index\r\n * @param uniformsList The uniform list\r\n * @param samplersList The sampler list\r\n * @param projectedLightTexture defines if projected texture must be used\r\n * @param uniformBuffersList defines an optional list of uniform buffers\r\n * @param updateOnlyBuffersList True to only update the uniformBuffersList array\r\n */\r\n public static PrepareUniformsAndSamplersForLight(lightIndex: number, uniformsList: string[], samplersList: string[], projectedLightTexture?: any, uniformBuffersList: Nullable<string[]> = null, updateOnlyBuffersList = false) {\r\n if (uniformBuffersList) {\r\n uniformBuffersList.push(\"Light\" + lightIndex);\r\n }\r\n\r\n if (updateOnlyBuffersList) {\r\n return;\r\n }\r\n\r\n uniformsList.push(\r\n \"vLightData\" + lightIndex,\r\n \"vLightDiffuse\" + lightIndex,\r\n \"vLightSpecular\" + lightIndex,\r\n \"vLightDirection\" + lightIndex,\r\n \"vLightFalloff\" + lightIndex,\r\n \"vLightGround\" + lightIndex,\r\n \"lightMatrix\" + lightIndex,\r\n \"shadowsInfo\" + lightIndex,\r\n \"depthValues\" + lightIndex,\r\n );\r\n\r\n samplersList.push(\"shadowSampler\" + lightIndex);\r\n samplersList.push(\"depthSampler\" + lightIndex);\r\n\r\n uniformsList.push(\r\n \"viewFrustumZ\" + lightIndex,\r\n \"cascadeBlendFactor\" + lightIndex,\r\n \"lightSizeUVCorrection\" + lightIndex,\r\n \"depthCorrection\" + lightIndex,\r\n \"penumbraDarkness\" + lightIndex,\r\n \"frustumLengths\" + lightIndex,\r\n );\r\n\r\n if (projectedLightTexture) {\r\n samplersList.push(\"projectionLightSampler\" + lightIndex);\r\n uniformsList.push(\r\n \"textureProjectionMatrix\" + lightIndex,\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Prepares the uniforms and samplers list to be used in the effect\r\n * @param uniformsListOrOptions The uniform names to prepare or an EffectCreationOptions containing the list and extra information\r\n * @param samplersList The sampler list\r\n * @param defines The defines helping in the list generation\r\n * @param maxSimultaneousLights The maximum number of simultaneous light allowed in the effect\r\n */\r\n public static PrepareUniformsAndSamplersList(uniformsListOrOptions: string[] | IEffectCreationOptions, samplersList?: string[], defines?: any, maxSimultaneousLights = 4): void {\r\n let uniformsList: string[];\r\n let uniformBuffersList: Nullable<string[]> = null;\r\n\r\n if ((<IEffectCreationOptions>uniformsListOrOptions).uniformsNames) {\r\n var options = <IEffectCreationOptions>uniformsListOrOptions;\r\n uniformsList = options.uniformsNames;\r\n uniformBuffersList = options.uniformBuffersNames;\r\n samplersList = options.samplers;\r\n defines = options.defines;\r\n maxSimultaneousLights = options.maxSimultaneousLights || 0;\r\n } else {\r\n uniformsList = <string[]>uniformsListOrOptions;\r\n if (!samplersList) {\r\n samplersList = [];\r\n }\r\n }\r\n\r\n for (var lightIndex = 0; lightIndex < maxSimultaneousLights; lightIndex++) {\r\n if (!defines[\"LIGHT\" + lightIndex]) {\r\n break;\r\n }\r\n this.PrepareUniformsAndSamplersForLight(lightIndex, uniformsList, samplersList, defines[\"PROJECTEDLIGHTTEXTURE\" + lightIndex], uniformBuffersList);\r\n }\r\n\r\n if (defines[\"NUM_MORPH_INFLUENCERS\"]) {\r\n uniformsList.push(\"morphTargetInfluences\");\r\n }\r\n\r\n if (defines[\"BAKED_VERTEX_ANIMATION_TEXTURE\"]) {\r\n uniformsList.push(\"bakedVertexAnimationSettings\");\r\n uniformsList.push(\"bakedVertexAnimationTextureSizeInverted\");\r\n uniformsList.push(\"bakedVertexAnimationTime\");\r\n samplersList.push(\"bakedVertexAnimationTexture\");\r\n }\r\n }\r\n\r\n /**\r\n * This helps decreasing rank by rank the shadow quality (0 being the highest rank and quality)\r\n * @param defines The defines to update while falling back\r\n * @param fallbacks The authorized effect fallbacks\r\n * @param maxSimultaneousLights The maximum number of lights allowed\r\n * @param rank the current rank of the Effect\r\n * @returns The newly affected rank\r\n */\r\n public static HandleFallbacksForShadows(defines: any, fallbacks: EffectFallbacks, maxSimultaneousLights = 4, rank = 0): number {\r\n let lightFallbackRank = 0;\r\n for (var lightIndex = 0; lightIndex < maxSimultaneousLights; lightIndex++) {\r\n if (!defines[\"LIGHT\" + lightIndex]) {\r\n break;\r\n }\r\n\r\n if (lightIndex > 0) {\r\n lightFallbackRank = rank + lightIndex;\r\n fallbacks.addFallback(lightFallbackRank, \"LIGHT\" + lightIndex);\r\n }\r\n\r\n if (!defines[\"SHADOWS\"]) {\r\n if (defines[\"SHADOW\" + lightIndex]) {\r\n fallbacks.addFallback(rank, \"SHADOW\" + lightIndex);\r\n }\r\n\r\n if (defines[\"SHADOWPCF\" + lightIndex]) {\r\n fallbacks.addFallback(rank, \"SHADOWPCF\" + lightIndex);\r\n }\r\n\r\n if (defines[\"SHADOWPCSS\" + lightIndex]) {\r\n fallbacks.addFallback(rank, \"SHADOWPCSS\" + lightIndex);\r\n }\r\n\r\n if (defines[\"SHADOWPOISSON\" + lightIndex]) {\r\n fallbacks.addFallback(rank, \"SHADOWPOISSON\" + lightIndex);\r\n }\r\n\r\n if (defines[\"SHADOWESM\" + lightIndex]) {\r\n fallbacks.addFallback(rank, \"SHADOWESM\" + lightIndex);\r\n }\r\n\r\n if (defines[\"SHADOWCLOSEESM\" + lightIndex]) {\r\n fallbacks.addFallback(rank, \"SHADOWCLOSEESM\" + lightIndex);\r\n }\r\n }\r\n }\r\n return lightFallbackRank++;\r\n }\r\n\r\n private static _TmpMorphInfluencers = { \"NUM_MORPH_INFLUENCERS\": 0 };\r\n /**\r\n * Prepares the list of attributes required for morph targets according to the effect defines.\r\n * @param attribs The current list of supported attribs\r\n * @param mesh The mesh to prepare the morph targets attributes for\r\n * @param influencers The number of influencers\r\n */\r\n public static PrepareAttributesForMorphTargetsInfluencers(attribs: string[], mesh: AbstractMesh, influencers: number): void {\r\n this._TmpMorphInfluencers.NUM_MORPH_INFLUENCERS = influencers;\r\n this.PrepareAttributesForMorphTargets(attribs, mesh, this._TmpMorphInfluencers);\r\n }\r\n\r\n /**\r\n * Prepares the list of attributes required for morph targets according to the effect defines.\r\n * @param attribs The current list of supported attribs\r\n * @param mesh The mesh to prepare the morph targets attributes for\r\n * @param defines The current Defines of the effect\r\n */\r\n public static PrepareAttributesForMorphTargets(attribs: string[], mesh: AbstractMesh, defines: any): void {\r\n var influencers = defines[\"NUM_MORPH_INFLUENCERS\"];\r\n\r\n if (influencers > 0 && EngineStore.LastCreatedEngine) {\r\n var maxAttributesCount = EngineStore.LastCreatedEngine.getCaps().maxVertexAttribs;\r\n var manager = (<Mesh>mesh).morphTargetManager;\r\n if (manager?.isUsingTextureForTargets) {\r\n return;\r\n }\r\n var normal = manager && manager.supportsNormals && defines[\"NORMAL\"];\r\n var tangent = manager && manager.supportsTangents && defines[\"TANGENT\"];\r\n var uv = manager && manager.supportsUVs && defines[\"UV1\"];\r\n for (var index = 0; index < influencers; index++) {\r\n attribs.push(VertexBuffer.PositionKind + index);\r\n\r\n if (normal) {\r\n attribs.push(VertexBuffer.NormalKind + index);\r\n }\r\n\r\n if (tangent) {\r\n attribs.push(VertexBuffer.TangentKind + index);\r\n }\r\n\r\n if (uv) {\r\n attribs.push(VertexBuffer.UVKind + \"_\" + index);\r\n }\r\n\r\n if (attribs.length > maxAttributesCount) {\r\n Logger.Error(\"Cannot add more vertex attributes for mesh \" + mesh.name);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Prepares the list of attributes required for baked vertex animations according to the effect defines.\r\n * @param attribs The current list of supported attribs\r\n * @param mesh The mesh to prepare the morph targets attributes for\r\n * @param defines The current Defines of the effect\r\n */\r\n public static PrepareAttributesForBakedVertexAnimation(attribs: string[], mesh: AbstractMesh, defines: any): void {\r\n const enabled = defines[\"BAKED_VERTEX_ANIMATION_TEXTURE\"] && defines[\"INSTANCES\"];\r\n\r\n if (enabled) {\r\n attribs.push(\"bakedVertexAnimationSettingsInstanced\");\r\n }\r\n }\r\n\r\n /**\r\n * Prepares the list of attributes required for bones according to the effect defines.\r\n * @param attribs The current list of supported attribs\r\n * @param mesh The mesh to prepare the bones attributes for\r\n * @param defines The current Defines of the effect\r\n * @param fallbacks The current effect fallback strategy\r\n */\r\n public static PrepareAttributesForBones(attribs: string[], mesh: AbstractMesh, defines: any, fallbacks: EffectFallbacks): void {\r\n if (defines[\"NUM_BONE_INFLUENCERS\"] > 0) {\r\n fallbacks.addCPUSkinningFallback(0, mesh);\r\n\r\n attribs.push(VertexBuffer.MatricesIndicesKind);\r\n attribs.push(VertexBuffer.MatricesWeightsKind);\r\n if (defines[\"NUM_BONE_INFLUENCERS\"] > 4) {\r\n attribs.push(VertexBuffer.MatricesIndicesExtraKind);\r\n attribs.push(VertexBuffer.MatricesWeightsExtraKind);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Check and prepare the list of attributes required for instances according to the effect defines.\r\n * @param attribs The current list of supported attribs\r\n * @param defines The current MaterialDefines of the effect\r\n */\r\n public static PrepareAttributesForInstances(attribs: string[], defines: MaterialDefines): void {\r\n if (defines[\"INSTANCES\"] || defines[\"THIN_INSTANCES\"]) {\r\n this.PushAttributesForInstances(attribs, !!defines[\"PREPASS_VELOCITY\"]);\r\n }\r\n }\r\n\r\n /**\r\n * Add the list of attributes required for instances to the attribs array.\r\n * @param attribs The current list of supported attribs\r\n * @param needsPreviousMatrices If the shader needs previous matrices\r\n */\r\n public static PushAttributesForInstances(attribs: string[], needsPreviousMatrices: boolean = false): void {\r\n attribs.push(\"world0\");\r\n attribs.push(\"world1\");\r\n attribs.push(\"world2\");\r\n attribs.push(\"world3\");\r\n if (needsPreviousMatrices) {\r\n attribs.push(\"previousWorld0\");\r\n attribs.push(\"previousWorld1\");\r\n attribs.push(\"previousWorld2\");\r\n attribs.push(\"previousWorld3\");\r\n }\r\n }\r\n\r\n /**\r\n * Binds the light information to the effect.\r\n * @param light The light containing the generator\r\n * @param effect The effect we are binding the data to\r\n * @param lightIndex The light index in the effect used to render\r\n */\r\n public static BindLightProperties(light: Light, effect: Effect, lightIndex: number): void {\r\n light.transferToEffect(effect, lightIndex + \"\");\r\n }\r\n\r\n /**\r\n * Binds the lights information from the scene to the effect for the given mesh.\r\n * @param light Light to bind\r\n * @param lightIndex Light index\r\n * @param scene The scene where the light belongs to\r\n * @param effect The effect we are binding the data to\r\n * @param useSpecular Defines if specular is supported\r\n * @param receiveShadows Defines if the effect (mesh) we bind the light for receives shadows\r\n */\r\n public static BindLight(light: Light, lightIndex: number, scene: Scene, effect: Effect, useSpecular: boolean, receiveShadows = true): void {\r\n light._bindLight(lightIndex, scene, effect, useSpecular, receiveShadows);\r\n }\r\n\r\n /**\r\n * Binds the lights information from the scene to the effect for the given mesh.\r\n * @param scene The scene the lights belongs to\r\n * @param mesh The mesh we are binding the information to render\r\n * @param effect The effect we are binding the data to\r\n * @param defines The generated defines for the effect\r\n * @param maxSimultaneousLights The maximum number of light that can be bound to the effect\r\n */\r\n public static BindLights(scene: Scene, mesh: AbstractMesh, effect: Effect, defines: any, maxSimultaneousLights = 4): void {\r\n let len = Math.min(mesh.lightSources.length, maxSimultaneousLights);\r\n\r\n for (var i = 0; i < len; i++) {\r\n\r\n let light = mesh.lightSources[i];\r\n this.BindLight(light, i, scene, effect, typeof defines === \"boolean\" ? defines : defines[\"SPECULARTERM\"], mesh.receiveShadows);\r\n }\r\n }\r\n\r\n private static _tempFogColor = Color3.Black();\r\n /**\r\n * Binds the fog information from the scene to the effect for the given mesh.\r\n * @param scene The scene the lights belongs to\r\n * @param mesh The mesh we are binding the information to render\r\n * @param effect The effect we are binding the data to\r\n * @param linearSpace Defines if the fog effect is applied in linear space\r\n */\r\n public static BindFogParameters(scene: Scene, mesh: AbstractMesh, effect: Effect, linearSpace = false): void {\r\n if (scene.fogEnabled && mesh.applyFog && scene.fogMode !== Scene.FOGMODE_NONE) {\r\n effect.setFloat4(\"vFogInfos\", scene.fogMode, scene.fogStart, scene.fogEnd, scene.fogDensity);\r\n // Convert fog color to linear space if used in a linear space computed shader.\r\n if (linearSpace) {\r\n scene.fogColor.toLinearSpaceToRef(this._tempFogColor);\r\n effect.setColor3(\"vFogColor\", this._tempFogColor);\r\n }\r\n else {\r\n effect.setColor3(\"vFogColor\", scene.fogColor);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Binds the bones information from the mesh to the effect.\r\n * @param mesh The mesh we are binding the information to render\r\n * @param effect The effect we are binding the data to\r\n * @param prePassConfiguration Configuration for the prepass, in case prepass is activated\r\n */\r\n public static BindBonesParameters(mesh?: AbstractMesh, effect?: Effect, prePassConfiguration?: PrePassConfiguration): void {\r\n if (!effect || !mesh) {\r\n return;\r\n }\r\n if (mesh.computeBonesUsingShaders && effect._bonesComputationForcedToCPU) {\r\n mesh.computeBonesUsingShaders = false;\r\n }\r\n\r\n if (mesh.useBones && mesh.computeBonesUsingShaders && mesh.skeleton) {\r\n const skeleton = mesh.skeleton;\r\n\r\n if (skeleton.isUsingTextureForMatrices && effect.getUniformIndex(\"boneTextureWidth\") > -1) {\r\n const boneTexture = skeleton.getTransformMatrixTexture(mesh);\r\n effect.setTexture(\"boneSampler\", boneTexture);\r\n effect.setFloat(\"boneTextureWidth\", 4.0 * (skeleton.bones.length + 1));\r\n } else {\r\n const matrices = skeleton.getTransformMatrices(mesh);\r\n\r\n if (matrices) {\r\n effect.setMatrices(\"mBones\", matrices);\r\n if (prePassConfiguration && mesh.getScene().prePassRenderer && mesh.getScene().prePassRenderer!.getIndex(2)) {\r\n if (!prePassConfiguration.previousBones[mesh.uniqueId]) {\r\n prePassConfiguration.previousBones[mesh.uniqueId] = matrices.slice();\r\n }\r\n effect.setMatrices(\"mPreviousBones\", prePassConfiguration.previousBones[mesh.uniqueId]);\r\n MaterialHelper._CopyBonesTransformationMatrices(matrices, prePassConfiguration.previousBones[mesh.uniqueId]);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Copies the bones transformation matrices into the target array and returns the target's reference\r\n private static _CopyBonesTransformationMatrices(source: Float32Array, target: Float32Array): Float32Array {\r\n target.set(source);\r\n\r\n return target;\r\n }\r\n\r\n /**\r\n * Binds the morph targets information from the mesh to the effect.\r\n * @param abstractMesh The mesh we are binding the information to render\r\n * @param effect The effect we are binding the data to\r\n */\r\n public static BindMorphTargetParameters(abstractMesh: AbstractMesh, effect: Effect): void {\r\n let manager = (<Mesh>abstractMesh).morphTargetManager;\r\n if (!abstractMesh || !manager) {\r\n return;\r\n }\r\n\r\n effect.setFloatArray(\"morphTargetInfluences\", manager.influences);\r\n }\r\n\r\n /**\r\n * Binds the logarithmic depth information from the scene to the effect for the given defines.\r\n * @param defines The generated defines used in the effect\r\n * @param effect The effect we are binding the data to\r\n * @param scene The scene we are willing to render with logarithmic scale for\r\n */\r\n public static BindLogDepth(defines: any, effect: Effect, scene: Scene): void {\r\n if (!defines || defines[\"LOGARITHMICDEPTH\"]) {\r\n const camera = <Camera>scene.activeCamera;\r\n if (camera.mode === Camera.ORTHOGRAPHIC_CAMERA) {\r\n Logger.Error(\"Logarithmic depth is not compatible with orthographic cameras!\", 20);\r\n }\r\n effect.setFloat(\"logarithmicDepthConstant\", 2.0 / (Math.log(camera.maxZ + 1.0) / Math.LN2));\r\n }\r\n }\r\n\r\n /**\r\n * Binds the clip plane information from the scene to the effect.\r\n * @param scene The scene the clip plane information are extracted from\r\n * @param effect The effect we are binding the data to\r\n */\r\n public static BindClipPlane(effect: Effect, scene: Scene): void {\r\n ThinMaterialHelper.BindClipPlane(effect, scene);\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"materialHelper.js","sourceRoot":"","sources":["../../../sourceES6/core/Materials/materialHelper.ts"],"names":[],"mappings":"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","sourcesContent":["import { Logger } from \"../Misc/logger\";\r\nimport { Nullable } from \"../types\";\r\nimport { Camera } from \"../Cameras/camera\";\r\nimport { Scene } from \"../scene\";\r\nimport { Engine } from \"../Engines/engine\";\r\nimport { EngineStore } from \"../Engines/engineStore\";\r\nimport { AbstractMesh } from \"../Meshes/abstractMesh\";\r\nimport { Mesh } from \"../Meshes/mesh\";\r\nimport { VertexBuffer } from \"../Buffers/buffer\";\r\nimport { Light } from \"../Lights/light\";\r\n\r\nimport { PrePassConfiguration } from \"../Materials/prePassConfiguration\";\r\n\r\nimport { UniformBuffer } from \"./uniformBuffer\";\r\nimport { Effect, IEffectCreationOptions } from \"./effect\";\r\nimport { BaseTexture } from \"../Materials/Textures/baseTexture\";\r\nimport { MaterialDefines } from \"./materialDefines\";\r\nimport { Color3 } from '../Maths/math.color';\r\nimport { EffectFallbacks } from './effectFallbacks';\r\nimport { ThinMaterialHelper } from './thinMaterialHelper';\r\n\r\n/**\r\n * \"Static Class\" containing the most commonly used helper while dealing with material for rendering purpose.\r\n *\r\n * It contains the basic tools to help defining defines, binding uniform for the common part of the materials.\r\n *\r\n * This works by convention in BabylonJS but is meant to be use only with shader following the in place naming rules and conventions.\r\n */\r\nexport class MaterialHelper {\r\n\r\n /**\r\n * Binds the scene's uniform buffer to the effect.\r\n * @param effect defines the effect to bind to the scene uniform buffer\r\n * @param sceneUbo defines the uniform buffer storing scene data\r\n */\r\n public static BindSceneUniformBuffer(effect: Effect, sceneUbo: UniformBuffer): void {\r\n sceneUbo.bindToEffect(effect, \"Scene\");\r\n }\r\n\r\n /**\r\n * Helps preparing the defines values about the UVs in used in the effect.\r\n * UVs are shared as much as we can across channels in the shaders.\r\n * @param texture The texture we are preparing the UVs for\r\n * @param defines The defines to update\r\n * @param key The channel key \"diffuse\", \"specular\"... used in the shader\r\n */\r\n public static PrepareDefinesForMergedUV(texture: BaseTexture, defines: any, key: string): void {\r\n defines._needUVs = true;\r\n defines[key] = true;\r\n if (texture.getTextureMatrix().isIdentityAs3x2()) {\r\n defines[key + \"DIRECTUV\"] = texture.coordinatesIndex + 1;\r\n defines[\"MAINUV\" + (texture.coordinatesIndex + 1)] = true;\r\n } else {\r\n defines[key + \"DIRECTUV\"] = 0;\r\n }\r\n }\r\n\r\n /**\r\n * Binds a texture matrix value to its corresponding uniform\r\n * @param texture The texture to bind the matrix for\r\n * @param uniformBuffer The uniform buffer receiving the data\r\n * @param key The channel key \"diffuse\", \"specular\"... used in the shader\r\n */\r\n public static BindTextureMatrix(texture: BaseTexture, uniformBuffer: UniformBuffer, key: string): void {\r\n var matrix = texture.getTextureMatrix();\r\n\r\n uniformBuffer.updateMatrix(key + \"Matrix\", matrix);\r\n }\r\n\r\n /**\r\n * Gets the current status of the fog (should it be enabled?)\r\n * @param mesh defines the mesh to evaluate for fog support\r\n * @param scene defines the hosting scene\r\n * @returns true if fog must be enabled\r\n */\r\n public static GetFogState(mesh: AbstractMesh, scene: Scene) {\r\n return (scene.fogEnabled && mesh.applyFog && scene.fogMode !== Scene.FOGMODE_NONE);\r\n }\r\n\r\n /**\r\n * Helper used to prepare the list of defines associated with misc. values for shader compilation\r\n * @param mesh defines the current mesh\r\n * @param scene defines the current scene\r\n * @param useLogarithmicDepth defines if logarithmic depth has to be turned on\r\n * @param pointsCloud defines if point cloud rendering has to be turned on\r\n * @param fogEnabled defines if fog has to be turned on\r\n * @param alphaTest defines if alpha testing has to be turned on\r\n * @param defines defines the current list of defines\r\n */\r\n public static PrepareDefinesForMisc(mesh: AbstractMesh, scene: Scene, useLogarithmicDepth: boolean, pointsCloud: boolean, fogEnabled: boolean, alphaTest: boolean, defines: any): void {\r\n if (defines._areMiscDirty) {\r\n defines[\"LOGARITHMICDEPTH\"] = useLogarithmicDepth;\r\n defines[\"POINTSIZE\"] = pointsCloud;\r\n defines[\"FOG\"] = fogEnabled && this.GetFogState(mesh, scene);\r\n defines[\"NONUNIFORMSCALING\"] = mesh.nonUniformScaling;\r\n defines[\"ALPHATEST\"] = alphaTest;\r\n }\r\n }\r\n\r\n /**\r\n * Helper used to prepare the list of defines associated with frame values for shader compilation\r\n * @param scene defines the current scene\r\n * @param engine defines the current engine\r\n * @param defines specifies the list of active defines\r\n * @param useInstances defines if instances have to be turned on\r\n * @param useClipPlane defines if clip plane have to be turned on\r\n * @param useInstances defines if instances have to be turned on\r\n * @param useThinInstances defines if thin instances have to be turned on\r\n */\r\n public static PrepareDefinesForFrameBoundValues(scene: Scene, engine: Engine, defines: any, useInstances: boolean, useClipPlane: Nullable<boolean> = null, useThinInstances: boolean = false): void {\r\n var changed = false;\r\n let useClipPlane1 = false;\r\n let useClipPlane2 = false;\r\n let useClipPlane3 = false;\r\n let useClipPlane4 = false;\r\n let useClipPlane5 = false;\r\n let useClipPlane6 = false;\r\n\r\n useClipPlane1 = useClipPlane == null ? (scene.clipPlane !== undefined && scene.clipPlane !== null) : useClipPlane;\r\n useClipPlane2 = useClipPlane == null ? (scene.clipPlane2 !== undefined && scene.clipPlane2 !== null) : useClipPlane;\r\n useClipPlane3 = useClipPlane == null ? (scene.clipPlane3 !== undefined && scene.clipPlane3 !== null) : useClipPlane;\r\n useClipPlane4 = useClipPlane == null ? (scene.clipPlane4 !== undefined && scene.clipPlane4 !== null) : useClipPlane;\r\n useClipPlane5 = useClipPlane == null ? (scene.clipPlane5 !== undefined && scene.clipPlane5 !== null) : useClipPlane;\r\n useClipPlane6 = useClipPlane == null ? (scene.clipPlane6 !== undefined && scene.clipPlane6 !== null) : useClipPlane;\r\n\r\n if (defines[\"CLIPPLANE\"] !== useClipPlane1) {\r\n defines[\"CLIPPLANE\"] = useClipPlane1;\r\n changed = true;\r\n }\r\n\r\n if (defines[\"CLIPPLANE2\"] !== useClipPlane2) {\r\n defines[\"CLIPPLANE2\"] = useClipPlane2;\r\n changed = true;\r\n }\r\n\r\n if (defines[\"CLIPPLANE3\"] !== useClipPlane3) {\r\n defines[\"CLIPPLANE3\"] = useClipPlane3;\r\n changed = true;\r\n }\r\n\r\n if (defines[\"CLIPPLANE4\"] !== useClipPlane4) {\r\n defines[\"CLIPPLANE4\"] = useClipPlane4;\r\n changed = true;\r\n }\r\n\r\n if (defines[\"CLIPPLANE5\"] !== useClipPlane5) {\r\n defines[\"CLIPPLANE5\"] = useClipPlane5;\r\n changed = true;\r\n }\r\n\r\n if (defines[\"CLIPPLANE6\"] !== useClipPlane6) {\r\n defines[\"CLIPPLANE6\"] = useClipPlane6;\r\n changed = true;\r\n }\r\n\r\n if (defines[\"DEPTHPREPASS\"] !== !engine.getColorWrite()) {\r\n defines[\"DEPTHPREPASS\"] = !defines[\"DEPTHPREPASS\"];\r\n changed = true;\r\n }\r\n\r\n if (defines[\"INSTANCES\"] !== useInstances) {\r\n defines[\"INSTANCES\"] = useInstances;\r\n changed = true;\r\n }\r\n\r\n // ensure defines.INSTANCESCOLOR is not out of sync with instances\r\n if (defines[\"INSTANCESCOLOR\"] && !defines[\"INSTANCES\"]) {\r\n defines[\"INSTANCESCOLOR\"] = false;\r\n changed = true;\r\n }\r\n\r\n if (defines[\"THIN_INSTANCES\"] !== useThinInstances) {\r\n defines[\"THIN_INSTANCES\"] = useThinInstances;\r\n changed = true;\r\n }\r\n\r\n if (changed) {\r\n defines.markAsUnprocessed();\r\n }\r\n }\r\n\r\n /**\r\n * Prepares the defines for bones\r\n * @param mesh The mesh containing the geometry data we will draw\r\n * @param defines The defines to update\r\n */\r\n public static PrepareDefinesForBones(mesh: AbstractMesh, defines: any) {\r\n if (mesh.useBones && mesh.computeBonesUsingShaders && mesh.skeleton) {\r\n defines[\"NUM_BONE_INFLUENCERS\"] = mesh.numBoneInfluencers;\r\n\r\n const materialSupportsBoneTexture = defines[\"BONETEXTURE\"] !== undefined;\r\n\r\n if (mesh.skeleton.isUsingTextureForMatrices && materialSupportsBoneTexture) {\r\n defines[\"BONETEXTURE\"] = true;\r\n } else {\r\n defines[\"BonesPerMesh\"] = (mesh.skeleton.bones.length + 1);\r\n defines[\"BONETEXTURE\"] = materialSupportsBoneTexture ? false : undefined;\r\n\r\n const prePassRenderer = mesh.getScene().prePassRenderer;\r\n if (prePassRenderer && prePassRenderer.enabled) {\r\n const nonExcluded = prePassRenderer.excludedSkinnedMesh.indexOf(mesh) === -1;\r\n defines[\"BONES_VELOCITY_ENABLED\"] = nonExcluded;\r\n }\r\n }\r\n } else {\r\n defines[\"NUM_BONE_INFLUENCERS\"] = 0;\r\n defines[\"BonesPerMesh\"] = 0;\r\n }\r\n }\r\n\r\n /**\r\n * Prepares the defines for morph targets\r\n * @param mesh The mesh containing the geometry data we will draw\r\n * @param defines The defines to update\r\n */\r\n public static PrepareDefinesForMorphTargets(mesh: AbstractMesh, defines: any) {\r\n var manager = (<Mesh>mesh).morphTargetManager;\r\n if (manager) {\r\n defines[\"MORPHTARGETS_UV\"] = manager.supportsUVs && defines[\"UV1\"];\r\n defines[\"MORPHTARGETS_TANGENT\"] = manager.supportsTangents && defines[\"TANGENT\"];\r\n defines[\"MORPHTARGETS_NORMAL\"] = manager.supportsNormals && defines[\"NORMAL\"];\r\n defines[\"MORPHTARGETS\"] = (manager.numInfluencers > 0);\r\n defines[\"NUM_MORPH_INFLUENCERS\"] = manager.numInfluencers;\r\n\r\n defines[\"MORPHTARGETS_TEXTURE\"] = manager.isUsingTextureForTargets;\r\n } else {\r\n defines[\"MORPHTARGETS_UV\"] = false;\r\n defines[\"MORPHTARGETS_TANGENT\"] = false;\r\n defines[\"MORPHTARGETS_NORMAL\"] = false;\r\n defines[\"MORPHTARGETS\"] = false;\r\n defines[\"NUM_MORPH_INFLUENCERS\"] = 0;\r\n }\r\n }\r\n\r\n /**\r\n * Prepares the defines for baked vertex animation\r\n * @param mesh The mesh containing the geometry data we will draw\r\n * @param defines The defines to update\r\n */\r\n public static PrepareDefinesForBakedVertexAnimation(mesh: AbstractMesh, defines: any) {\r\n const manager = (<Mesh>mesh).bakedVertexAnimationManager;\r\n defines[\"BAKED_VERTEX_ANIMATION_TEXTURE\"] = manager && manager.isEnabled ? true : false;\r\n }\r\n\r\n /**\r\n * Prepares the defines used in the shader depending on the attributes data available in the mesh\r\n * @param mesh The mesh containing the geometry data we will draw\r\n * @param defines The defines to update\r\n * @param useVertexColor Precise whether vertex colors should be used or not (override mesh info)\r\n * @param useBones Precise whether bones should be used or not (override mesh info)\r\n * @param useMorphTargets Precise whether morph targets should be used or not (override mesh info)\r\n * @param useVertexAlpha Precise whether vertex alpha should be used or not (override mesh info)\r\n * @param useBakedVertexAnimation Precise whether baked vertex animation should be used or not (override mesh info)\r\n * @returns false if defines are considered not dirty and have not been checked\r\n */\r\n public static PrepareDefinesForAttributes(mesh: AbstractMesh, defines: any, useVertexColor: boolean, useBones: boolean, useMorphTargets = false, useVertexAlpha = true, useBakedVertexAnimation = true): boolean {\r\n if (!defines._areAttributesDirty && defines._needNormals === defines._normals && defines._needUVs === defines._uvs) {\r\n return false;\r\n }\r\n\r\n defines._normals = defines._needNormals;\r\n defines._uvs = defines._needUVs;\r\n\r\n defines[\"NORMAL\"] = (defines._needNormals && mesh.isVerticesDataPresent(VertexBuffer.NormalKind));\r\n\r\n if (defines._needNormals && mesh.isVerticesDataPresent(VertexBuffer.TangentKind)) {\r\n defines[\"TANGENT\"] = true;\r\n }\r\n\r\n for (let i = 1; i <= 6; ++i) {\r\n defines[\"UV\" + i] = defines._needUVs ? mesh.isVerticesDataPresent(`uv${i === 1 ? \"\" : i}`) : false;\r\n }\r\n\r\n if (useVertexColor) {\r\n var hasVertexColors = mesh.useVertexColors && mesh.isVerticesDataPresent(VertexBuffer.ColorKind);\r\n defines[\"VERTEXCOLOR\"] = hasVertexColors;\r\n defines[\"VERTEXALPHA\"] = mesh.hasVertexAlpha && hasVertexColors && useVertexAlpha;\r\n }\r\n\r\n if (mesh.isVerticesDataPresent(VertexBuffer.ColorInstanceKind)) {\r\n defines[\"INSTANCESCOLOR\"] = true;\r\n }\r\n\r\n if (useBones) {\r\n this.PrepareDefinesForBones(mesh, defines);\r\n }\r\n\r\n if (useMorphTargets) {\r\n this.PrepareDefinesForMorphTargets(mesh, defines);\r\n }\r\n\r\n if (useBakedVertexAnimation) {\r\n this.PrepareDefinesForBakedVertexAnimation(mesh, defines);\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * Prepares the defines related to multiview\r\n * @param scene The scene we are intending to draw\r\n * @param defines The defines to update\r\n */\r\n public static PrepareDefinesForMultiview(scene: Scene, defines: any) {\r\n if (scene.activeCamera) {\r\n var previousMultiview = defines.MULTIVIEW;\r\n defines.MULTIVIEW = (scene.activeCamera.outputRenderTarget !== null && scene.activeCamera.outputRenderTarget.getViewCount() > 1);\r\n if (defines.MULTIVIEW != previousMultiview) {\r\n defines.markAsUnprocessed();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Prepares the defines related to order independant transparency\r\n * @param scene The scene we are intending to draw\r\n * @param defines The defines to update\r\n * @param needAlphaBlending Determines if the material needs alpha blending\r\n */\r\n public static PrepareDefinesForOIT(scene: Scene, defines: any, needAlphaBlending: boolean) {\r\n const previousDefine = defines.ORDER_INDEPENDENT_TRANSPARENCY;\r\n const previousDefine16Bits = defines.ORDER_INDEPENDENT_TRANSPARENCY_16BITS;\r\n\r\n defines.ORDER_INDEPENDENT_TRANSPARENCY = scene.useOrderIndependentTransparency && needAlphaBlending;\r\n defines.ORDER_INDEPENDENT_TRANSPARENCY_16BITS = !scene.getEngine().getCaps().textureFloatLinearFiltering;\r\n\r\n if (previousDefine !== defines.ORDER_INDEPENDENT_TRANSPARENCY || previousDefine16Bits !== defines.ORDER_INDEPENDENT_TRANSPARENCY_16BITS) {\r\n defines.markAsUnprocessed();\r\n }\r\n }\r\n\r\n /**\r\n * Prepares the defines related to the prepass\r\n * @param scene The scene we are intending to draw\r\n * @param defines The defines to update\r\n * @param canRenderToMRT Indicates if this material renders to several textures in the prepass\r\n */\r\n public static PrepareDefinesForPrePass(scene: Scene, defines: any, canRenderToMRT: boolean) {\r\n const previousPrePass = defines.PREPASS;\r\n\r\n if (!defines._arePrePassDirty) {\r\n return;\r\n }\r\n\r\n const texturesList = [\r\n {\r\n type: 1,\r\n define: \"PREPASS_POSITION\",\r\n index: \"PREPASS_POSITION_INDEX\",\r\n },\r\n {\r\n type: 2,\r\n define: \"PREPASS_VELOCITY\",\r\n index: \"PREPASS_VELOCITY_INDEX\",\r\n },\r\n {\r\n type: 3,\r\n define: \"PREPASS_REFLECTIVITY\",\r\n index: \"PREPASS_REFLECTIVITY_INDEX\",\r\n },\r\n {\r\n type: 0,\r\n define: \"PREPASS_IRRADIANCE\",\r\n index: \"PREPASS_IRRADIANCE_INDEX\",\r\n },\r\n {\r\n type: 7,\r\n define: \"PREPASS_ALBEDO_SQRT\",\r\n index: \"PREPASS_ALBEDO_SQRT_INDEX\",\r\n },\r\n {\r\n type: 5,\r\n define: \"PREPASS_DEPTH\",\r\n index: \"PREPASS_DEPTH_INDEX\",\r\n },\r\n {\r\n type: 6,\r\n define: \"PREPASS_NORMAL\",\r\n index: \"PREPASS_NORMAL_INDEX\",\r\n }];\r\n\r\n if (scene.prePassRenderer && scene.prePassRenderer.enabled && canRenderToMRT) {\r\n defines.PREPASS = true;\r\n defines.SCENE_MRT_COUNT = scene.prePassRenderer.mrtCount;\r\n\r\n for (let i = 0; i < texturesList.length; i++) {\r\n const index = scene.prePassRenderer.getIndex(texturesList[i].type);\r\n if (index !== -1) {\r\n defines[texturesList[i].define] = true;\r\n defines[texturesList[i].index] = index;\r\n } else {\r\n defines[texturesList[i].define] = false;\r\n }\r\n }\r\n\r\n } else {\r\n defines.PREPASS = false;\r\n for (let i = 0; i < texturesList.length; i++) {\r\n defines[texturesList[i].define] = false;\r\n }\r\n }\r\n\r\n if (defines.PREPASS != previousPrePass) {\r\n defines.markAsUnprocessed();\r\n defines.markAsImageProcessingDirty();\r\n }\r\n }\r\n\r\n /**\r\n * Prepares the defines related to the light information passed in parameter\r\n * @param scene The scene we are intending to draw\r\n * @param mesh The mesh the effect is compiling for\r\n * @param light The light the effect is compiling for\r\n * @param lightIndex The index of the light\r\n * @param defines The defines to update\r\n * @param specularSupported Specifies whether specular is supported or not (override lights data)\r\n * @param state Defines the current state regarding what is needed (normals, etc...)\r\n */\r\n public static PrepareDefinesForLight(scene: Scene, mesh: AbstractMesh, light: Light, lightIndex: number, defines: any, specularSupported: boolean, state: {\r\n needNormals: boolean,\r\n needRebuild: boolean,\r\n shadowEnabled: boolean,\r\n specularEnabled: boolean,\r\n lightmapMode: boolean\r\n }) {\r\n state.needNormals = true;\r\n\r\n if (defines[\"LIGHT\" + lightIndex] === undefined) {\r\n state.needRebuild = true;\r\n }\r\n\r\n defines[\"LIGHT\" + lightIndex] = true;\r\n\r\n defines[\"SPOTLIGHT\" + lightIndex] = false;\r\n defines[\"HEMILIGHT\" + lightIndex] = false;\r\n defines[\"POINTLIGHT\" + lightIndex] = false;\r\n defines[\"DIRLIGHT\" + lightIndex] = false;\r\n\r\n light.prepareLightSpecificDefines(defines, lightIndex);\r\n\r\n // FallOff.\r\n defines[\"LIGHT_FALLOFF_PHYSICAL\" + lightIndex] = false;\r\n defines[\"LIGHT_FALLOFF_GLTF\" + lightIndex] = false;\r\n defines[\"LIGHT_FALLOFF_STANDARD\" + lightIndex] = false;\r\n\r\n switch (light.falloffType) {\r\n case Light.FALLOFF_GLTF:\r\n defines[\"LIGHT_FALLOFF_GLTF\" + lightIndex] = true;\r\n break;\r\n case Light.FALLOFF_PHYSICAL:\r\n defines[\"LIGHT_FALLOFF_PHYSICAL\" + lightIndex] = true;\r\n break;\r\n case Light.FALLOFF_STANDARD:\r\n defines[\"LIGHT_FALLOFF_STANDARD\" + lightIndex] = true;\r\n break;\r\n }\r\n\r\n // Specular\r\n if (specularSupported && !light.specular.equalsFloats(0, 0, 0)) {\r\n state.specularEnabled = true;\r\n }\r\n\r\n // Shadows\r\n defines[\"SHADOW\" + lightIndex] = false;\r\n defines[\"SHADOWCSM\" + lightIndex] = false;\r\n defines[\"SHADOWCSMDEBUG\" + lightIndex] = false;\r\n defines[\"SHADOWCSMNUM_CASCADES\" + lightIndex] = false;\r\n defines[\"SHADOWCSMUSESHADOWMAXZ\" + lightIndex] = false;\r\n defines[\"SHADOWCSMNOBLEND\" + lightIndex] = false;\r\n defines[\"SHADOWCSM_RIGHTHANDED\" + lightIndex] = false;\r\n defines[\"SHADOWPCF\" + lightIndex] = false;\r\n defines[\"SHADOWPCSS\" + lightIndex] = false;\r\n defines[\"SHADOWPOISSON\" + lightIndex] = false;\r\n defines[\"SHADOWESM\" + lightIndex] = false;\r\n defines[\"SHADOWCLOSEESM\" + lightIndex] = false;\r\n defines[\"SHADOWCUBE\" + lightIndex] = false;\r\n defines[\"SHADOWLOWQUALITY\" + lightIndex] = false;\r\n defines[\"SHADOWMEDIUMQUALITY\" + lightIndex] = false;\r\n\r\n if (mesh && mesh.receiveShadows && scene.shadowsEnabled && light.shadowEnabled) {\r\n var shadowGenerator = light.getShadowGenerator();\r\n if (shadowGenerator) {\r\n const shadowMap = shadowGenerator.getShadowMap();\r\n if (shadowMap) {\r\n if (shadowMap.renderList && shadowMap.renderList.length > 0) {\r\n state.shadowEnabled = true;\r\n shadowGenerator.prepareDefines(defines, lightIndex);\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (light.lightmapMode != Light.LIGHTMAP_DEFAULT) {\r\n state.lightmapMode = true;\r\n defines[\"LIGHTMAPEXCLUDED\" + lightIndex] = true;\r\n defines[\"LIGHTMAPNOSPECULAR\" + lightIndex] = (light.lightmapMode == Light.LIGHTMAP_SHADOWSONLY);\r\n } else {\r\n defines[\"LIGHTMAPEXCLUDED\" + lightIndex] = false;\r\n defines[\"LIGHTMAPNOSPECULAR\" + lightIndex] = false;\r\n }\r\n }\r\n\r\n /**\r\n * Prepares the defines related to the light information passed in parameter\r\n * @param scene The scene we are intending to draw\r\n * @param mesh The mesh the effect is compiling for\r\n * @param defines The defines to update\r\n * @param specularSupported Specifies whether specular is supported or not (override lights data)\r\n * @param maxSimultaneousLights Specifies how manuy lights can be added to the effect at max\r\n * @param disableLighting Specifies whether the lighting is disabled (override scene and light)\r\n * @returns true if normals will be required for the rest of the effect\r\n */\r\n public static PrepareDefinesForLights(scene: Scene, mesh: AbstractMesh, defines: any, specularSupported: boolean, maxSimultaneousLights = 4, disableLighting = false): boolean {\r\n if (!defines._areLightsDirty) {\r\n return defines._needNormals;\r\n }\r\n\r\n var lightIndex = 0;\r\n let state = {\r\n needNormals: false,\r\n needRebuild: false,\r\n lightmapMode: false,\r\n shadowEnabled: false,\r\n specularEnabled: false\r\n };\r\n\r\n if (scene.lightsEnabled && !disableLighting) {\r\n for (var light of mesh.lightSources) {\r\n this.PrepareDefinesForLight(scene, mesh, light, lightIndex, defines, specularSupported, state);\r\n\r\n lightIndex++;\r\n if (lightIndex === maxSimultaneousLights) {\r\n break;\r\n }\r\n }\r\n }\r\n\r\n defines[\"SPECULARTERM\"] = state.specularEnabled;\r\n defines[\"SHADOWS\"] = state.shadowEnabled;\r\n\r\n // Resetting all other lights if any\r\n for (var index = lightIndex; index < maxSimultaneousLights; index++) {\r\n if (defines[\"LIGHT\" + index] !== undefined) {\r\n defines[\"LIGHT\" + index] = false;\r\n defines[\"HEMILIGHT\" + index] = false;\r\n defines[\"POINTLIGHT\" + index] = false;\r\n defines[\"DIRLIGHT\" + index] = false;\r\n defines[\"SPOTLIGHT\" + index] = false;\r\n defines[\"SHADOW\" + index] = false;\r\n defines[\"SHADOWCSM\" + index] = false;\r\n defines[\"SHADOWCSMDEBUG\" + index] = false;\r\n defines[\"SHADOWCSMNUM_CASCADES\" + index] = false;\r\n defines[\"SHADOWCSMUSESHADOWMAXZ\" + index] = false;\r\n defines[\"SHADOWCSMNOBLEND\" + index] = false;\r\n defines[\"SHADOWCSM_RIGHTHANDED\" + index] = false;\r\n defines[\"SHADOWPCF\" + index] = false;\r\n defines[\"SHADOWPCSS\" + index] = false;\r\n defines[\"SHADOWPOISSON\" + index] = false;\r\n defines[\"SHADOWESM\" + index] = false;\r\n defines[\"SHADOWCLOSEESM\" + index] = false;\r\n defines[\"SHADOWCUBE\" + index] = false;\r\n defines[\"SHADOWLOWQUALITY\" + index] = false;\r\n defines[\"SHADOWMEDIUMQUALITY\" + index] = false;\r\n }\r\n }\r\n\r\n let caps = scene.getEngine().getCaps();\r\n\r\n if (defines[\"SHADOWFLOAT\"] === undefined) {\r\n state.needRebuild = true;\r\n }\r\n\r\n defines[\"SHADOWFLOAT\"] = state.shadowEnabled &&\r\n ((caps.textureFloatRender && caps.textureFloatLinearFiltering) ||\r\n (caps.textureHalfFloatRender && caps.textureHalfFloatLinearFiltering));\r\n defines[\"LIGHTMAPEXCLUDED\"] = state.lightmapMode;\r\n\r\n if (state.needRebuild) {\r\n defines.rebuild();\r\n }\r\n\r\n return state.needNormals;\r\n }\r\n\r\n /**\r\n * Prepares the uniforms and samplers list to be used in the effect (for a specific light)\r\n * @param lightIndex defines the light index\r\n * @param uniformsList The uniform list\r\n * @param samplersList The sampler list\r\n * @param projectedLightTexture defines if projected texture must be used\r\n * @param uniformBuffersList defines an optional list of uniform buffers\r\n * @param updateOnlyBuffersList True to only update the uniformBuffersList array\r\n */\r\n public static PrepareUniformsAndSamplersForLight(lightIndex: number, uniformsList: string[], samplersList: string[], projectedLightTexture?: any, uniformBuffersList: Nullable<string[]> = null, updateOnlyBuffersList = false) {\r\n if (uniformBuffersList) {\r\n uniformBuffersList.push(\"Light\" + lightIndex);\r\n }\r\n\r\n if (updateOnlyBuffersList) {\r\n return;\r\n }\r\n\r\n uniformsList.push(\r\n \"vLightData\" + lightIndex,\r\n \"vLightDiffuse\" + lightIndex,\r\n \"vLightSpecular\" + lightIndex,\r\n \"vLightDirection\" + lightIndex,\r\n \"vLightFalloff\" + lightIndex,\r\n \"vLightGround\" + lightIndex,\r\n \"lightMatrix\" + lightIndex,\r\n \"shadowsInfo\" + lightIndex,\r\n \"depthValues\" + lightIndex,\r\n );\r\n\r\n samplersList.push(\"shadowSampler\" + lightIndex);\r\n samplersList.push(\"depthSampler\" + lightIndex);\r\n\r\n uniformsList.push(\r\n \"viewFrustumZ\" + lightIndex,\r\n \"cascadeBlendFactor\" + lightIndex,\r\n \"lightSizeUVCorrection\" + lightIndex,\r\n \"depthCorrection\" + lightIndex,\r\n \"penumbraDarkness\" + lightIndex,\r\n \"frustumLengths\" + lightIndex,\r\n );\r\n\r\n if (projectedLightTexture) {\r\n samplersList.push(\"projectionLightSampler\" + lightIndex);\r\n uniformsList.push(\r\n \"textureProjectionMatrix\" + lightIndex,\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Prepares the uniforms and samplers list to be used in the effect\r\n * @param uniformsListOrOptions The uniform names to prepare or an EffectCreationOptions containing the list and extra information\r\n * @param samplersList The sampler list\r\n * @param defines The defines helping in the list generation\r\n * @param maxSimultaneousLights The maximum number of simultaneous light allowed in the effect\r\n */\r\n public static PrepareUniformsAndSamplersList(uniformsListOrOptions: string[] | IEffectCreationOptions, samplersList?: string[], defines?: any, maxSimultaneousLights = 4): void {\r\n let uniformsList: string[];\r\n let uniformBuffersList: Nullable<string[]> = null;\r\n\r\n if ((<IEffectCreationOptions>uniformsListOrOptions).uniformsNames) {\r\n var options = <IEffectCreationOptions>uniformsListOrOptions;\r\n uniformsList = options.uniformsNames;\r\n uniformBuffersList = options.uniformBuffersNames;\r\n samplersList = options.samplers;\r\n defines = options.defines;\r\n maxSimultaneousLights = options.maxSimultaneousLights || 0;\r\n } else {\r\n uniformsList = <string[]>uniformsListOrOptions;\r\n if (!samplersList) {\r\n samplersList = [];\r\n }\r\n }\r\n\r\n for (var lightIndex = 0; lightIndex < maxSimultaneousLights; lightIndex++) {\r\n if (!defines[\"LIGHT\" + lightIndex]) {\r\n break;\r\n }\r\n this.PrepareUniformsAndSamplersForLight(lightIndex, uniformsList, samplersList, defines[\"PROJECTEDLIGHTTEXTURE\" + lightIndex], uniformBuffersList);\r\n }\r\n\r\n if (defines[\"NUM_MORPH_INFLUENCERS\"]) {\r\n uniformsList.push(\"morphTargetInfluences\");\r\n }\r\n\r\n if (defines[\"BAKED_VERTEX_ANIMATION_TEXTURE\"]) {\r\n uniformsList.push(\"bakedVertexAnimationSettings\");\r\n uniformsList.push(\"bakedVertexAnimationTextureSizeInverted\");\r\n uniformsList.push(\"bakedVertexAnimationTime\");\r\n samplersList.push(\"bakedVertexAnimationTexture\");\r\n }\r\n }\r\n\r\n /**\r\n * This helps decreasing rank by rank the shadow quality (0 being the highest rank and quality)\r\n * @param defines The defines to update while falling back\r\n * @param fallbacks The authorized effect fallbacks\r\n * @param maxSimultaneousLights The maximum number of lights allowed\r\n * @param rank the current rank of the Effect\r\n * @returns The newly affected rank\r\n */\r\n public static HandleFallbacksForShadows(defines: any, fallbacks: EffectFallbacks, maxSimultaneousLights = 4, rank = 0): number {\r\n let lightFallbackRank = 0;\r\n for (var lightIndex = 0; lightIndex < maxSimultaneousLights; lightIndex++) {\r\n if (!defines[\"LIGHT\" + lightIndex]) {\r\n break;\r\n }\r\n\r\n if (lightIndex > 0) {\r\n lightFallbackRank = rank + lightIndex;\r\n fallbacks.addFallback(lightFallbackRank, \"LIGHT\" + lightIndex);\r\n }\r\n\r\n if (!defines[\"SHADOWS\"]) {\r\n if (defines[\"SHADOW\" + lightIndex]) {\r\n fallbacks.addFallback(rank, \"SHADOW\" + lightIndex);\r\n }\r\n\r\n if (defines[\"SHADOWPCF\" + lightIndex]) {\r\n fallbacks.addFallback(rank, \"SHADOWPCF\" + lightIndex);\r\n }\r\n\r\n if (defines[\"SHADOWPCSS\" + lightIndex]) {\r\n fallbacks.addFallback(rank, \"SHADOWPCSS\" + lightIndex);\r\n }\r\n\r\n if (defines[\"SHADOWPOISSON\" + lightIndex]) {\r\n fallbacks.addFallback(rank, \"SHADOWPOISSON\" + lightIndex);\r\n }\r\n\r\n if (defines[\"SHADOWESM\" + lightIndex]) {\r\n fallbacks.addFallback(rank, \"SHADOWESM\" + lightIndex);\r\n }\r\n\r\n if (defines[\"SHADOWCLOSEESM\" + lightIndex]) {\r\n fallbacks.addFallback(rank, \"SHADOWCLOSEESM\" + lightIndex);\r\n }\r\n }\r\n }\r\n return lightFallbackRank++;\r\n }\r\n\r\n private static _TmpMorphInfluencers = { \"NUM_MORPH_INFLUENCERS\": 0 };\r\n /**\r\n * Prepares the list of attributes required for morph targets according to the effect defines.\r\n * @param attribs The current list of supported attribs\r\n * @param mesh The mesh to prepare the morph targets attributes for\r\n * @param influencers The number of influencers\r\n */\r\n public static PrepareAttributesForMorphTargetsInfluencers(attribs: string[], mesh: AbstractMesh, influencers: number): void {\r\n this._TmpMorphInfluencers.NUM_MORPH_INFLUENCERS = influencers;\r\n this.PrepareAttributesForMorphTargets(attribs, mesh, this._TmpMorphInfluencers);\r\n }\r\n\r\n /**\r\n * Prepares the list of attributes required for morph targets according to the effect defines.\r\n * @param attribs The current list of supported attribs\r\n * @param mesh The mesh to prepare the morph targets attributes for\r\n * @param defines The current Defines of the effect\r\n */\r\n public static PrepareAttributesForMorphTargets(attribs: string[], mesh: AbstractMesh, defines: any): void {\r\n var influencers = defines[\"NUM_MORPH_INFLUENCERS\"];\r\n\r\n if (influencers > 0 && EngineStore.LastCreatedEngine) {\r\n var maxAttributesCount = EngineStore.LastCreatedEngine.getCaps().maxVertexAttribs;\r\n var manager = (<Mesh>mesh).morphTargetManager;\r\n if (manager?.isUsingTextureForTargets) {\r\n return;\r\n }\r\n var normal = manager && manager.supportsNormals && defines[\"NORMAL\"];\r\n var tangent = manager && manager.supportsTangents && defines[\"TANGENT\"];\r\n var uv = manager && manager.supportsUVs && defines[\"UV1\"];\r\n for (var index = 0; index < influencers; index++) {\r\n attribs.push(VertexBuffer.PositionKind + index);\r\n\r\n if (normal) {\r\n attribs.push(VertexBuffer.NormalKind + index);\r\n }\r\n\r\n if (tangent) {\r\n attribs.push(VertexBuffer.TangentKind + index);\r\n }\r\n\r\n if (uv) {\r\n attribs.push(VertexBuffer.UVKind + \"_\" + index);\r\n }\r\n\r\n if (attribs.length > maxAttributesCount) {\r\n Logger.Error(\"Cannot add more vertex attributes for mesh \" + mesh.name);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Prepares the list of attributes required for baked vertex animations according to the effect defines.\r\n * @param attribs The current list of supported attribs\r\n * @param mesh The mesh to prepare the morph targets attributes for\r\n * @param defines The current Defines of the effect\r\n */\r\n public static PrepareAttributesForBakedVertexAnimation(attribs: string[], mesh: AbstractMesh, defines: any): void {\r\n const enabled = defines[\"BAKED_VERTEX_ANIMATION_TEXTURE\"] && defines[\"INSTANCES\"];\r\n\r\n if (enabled) {\r\n attribs.push(\"bakedVertexAnimationSettingsInstanced\");\r\n }\r\n }\r\n\r\n /**\r\n * Prepares the list of attributes required for bones according to the effect defines.\r\n * @param attribs The current list of supported attribs\r\n * @param mesh The mesh to prepare the bones attributes for\r\n * @param defines The current Defines of the effect\r\n * @param fallbacks The current effect fallback strategy\r\n */\r\n public static PrepareAttributesForBones(attribs: string[], mesh: AbstractMesh, defines: any, fallbacks: EffectFallbacks): void {\r\n if (defines[\"NUM_BONE_INFLUENCERS\"] > 0) {\r\n fallbacks.addCPUSkinningFallback(0, mesh);\r\n\r\n attribs.push(VertexBuffer.MatricesIndicesKind);\r\n attribs.push(VertexBuffer.MatricesWeightsKind);\r\n if (defines[\"NUM_BONE_INFLUENCERS\"] > 4) {\r\n attribs.push(VertexBuffer.MatricesIndicesExtraKind);\r\n attribs.push(VertexBuffer.MatricesWeightsExtraKind);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Check and prepare the list of attributes required for instances according to the effect defines.\r\n * @param attribs The current list of supported attribs\r\n * @param defines The current MaterialDefines of the effect\r\n */\r\n public static PrepareAttributesForInstances(attribs: string[], defines: MaterialDefines): void {\r\n if (defines[\"INSTANCES\"] || defines[\"THIN_INSTANCES\"]) {\r\n this.PushAttributesForInstances(attribs, !!defines[\"PREPASS_VELOCITY\"]);\r\n }\r\n }\r\n\r\n /**\r\n * Add the list of attributes required for instances to the attribs array.\r\n * @param attribs The current list of supported attribs\r\n * @param needsPreviousMatrices If the shader needs previous matrices\r\n */\r\n public static PushAttributesForInstances(attribs: string[], needsPreviousMatrices: boolean = false): void {\r\n attribs.push(\"world0\");\r\n attribs.push(\"world1\");\r\n attribs.push(\"world2\");\r\n attribs.push(\"world3\");\r\n if (needsPreviousMatrices) {\r\n attribs.push(\"previousWorld0\");\r\n attribs.push(\"previousWorld1\");\r\n attribs.push(\"previousWorld2\");\r\n attribs.push(\"previousWorld3\");\r\n }\r\n }\r\n\r\n /**\r\n * Binds the light information to the effect.\r\n * @param light The light containing the generator\r\n * @param effect The effect we are binding the data to\r\n * @param lightIndex The light index in the effect used to render\r\n */\r\n public static BindLightProperties(light: Light, effect: Effect, lightIndex: number): void {\r\n light.transferToEffect(effect, lightIndex + \"\");\r\n }\r\n\r\n /**\r\n * Binds the lights information from the scene to the effect for the given mesh.\r\n * @param light Light to bind\r\n * @param lightIndex Light index\r\n * @param scene The scene where the light belongs to\r\n * @param effect The effect we are binding the data to\r\n * @param useSpecular Defines if specular is supported\r\n * @param receiveShadows Defines if the effect (mesh) we bind the light for receives shadows\r\n */\r\n public static BindLight(light: Light, lightIndex: number, scene: Scene, effect: Effect, useSpecular: boolean, receiveShadows = true): void {\r\n light._bindLight(lightIndex, scene, effect, useSpecular, receiveShadows);\r\n }\r\n\r\n /**\r\n * Binds the lights information from the scene to the effect for the given mesh.\r\n * @param scene The scene the lights belongs to\r\n * @param mesh The mesh we are binding the information to render\r\n * @param effect The effect we are binding the data to\r\n * @param defines The generated defines for the effect\r\n * @param maxSimultaneousLights The maximum number of light that can be bound to the effect\r\n */\r\n public static BindLights(scene: Scene, mesh: AbstractMesh, effect: Effect, defines: any, maxSimultaneousLights = 4): void {\r\n let len = Math.min(mesh.lightSources.length, maxSimultaneousLights);\r\n\r\n for (var i = 0; i < len; i++) {\r\n\r\n let light = mesh.lightSources[i];\r\n this.BindLight(light, i, scene, effect, typeof defines === \"boolean\" ? defines : defines[\"SPECULARTERM\"], mesh.receiveShadows);\r\n }\r\n }\r\n\r\n private static _tempFogColor = Color3.Black();\r\n /**\r\n * Binds the fog information from the scene to the effect for the given mesh.\r\n * @param scene The scene the lights belongs to\r\n * @param mesh The mesh we are binding the information to render\r\n * @param effect The effect we are binding the data to\r\n * @param linearSpace Defines if the fog effect is applied in linear space\r\n */\r\n public static BindFogParameters(scene: Scene, mesh: AbstractMesh, effect: Effect, linearSpace = false): void {\r\n if (scene.fogEnabled && mesh.applyFog && scene.fogMode !== Scene.FOGMODE_NONE) {\r\n effect.setFloat4(\"vFogInfos\", scene.fogMode, scene.fogStart, scene.fogEnd, scene.fogDensity);\r\n // Convert fog color to linear space if used in a linear space computed shader.\r\n if (linearSpace) {\r\n scene.fogColor.toLinearSpaceToRef(this._tempFogColor);\r\n effect.setColor3(\"vFogColor\", this._tempFogColor);\r\n }\r\n else {\r\n effect.setColor3(\"vFogColor\", scene.fogColor);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Binds the bones information from the mesh to the effect.\r\n * @param mesh The mesh we are binding the information to render\r\n * @param effect The effect we are binding the data to\r\n * @param prePassConfiguration Configuration for the prepass, in case prepass is activated\r\n */\r\n public static BindBonesParameters(mesh?: AbstractMesh, effect?: Effect, prePassConfiguration?: PrePassConfiguration): void {\r\n if (!effect || !mesh) {\r\n return;\r\n }\r\n if (mesh.computeBonesUsingShaders && effect._bonesComputationForcedToCPU) {\r\n mesh.computeBonesUsingShaders = false;\r\n }\r\n\r\n if (mesh.useBones && mesh.computeBonesUsingShaders && mesh.skeleton) {\r\n const skeleton = mesh.skeleton;\r\n\r\n if (skeleton.isUsingTextureForMatrices && effect.getUniformIndex(\"boneTextureWidth\") > -1) {\r\n const boneTexture = skeleton.getTransformMatrixTexture(mesh);\r\n effect.setTexture(\"boneSampler\", boneTexture);\r\n effect.setFloat(\"boneTextureWidth\", 4.0 * (skeleton.bones.length + 1));\r\n } else {\r\n const matrices = skeleton.getTransformMatrices(mesh);\r\n\r\n if (matrices) {\r\n effect.setMatrices(\"mBones\", matrices);\r\n if (prePassConfiguration && mesh.getScene().prePassRenderer && mesh.getScene().prePassRenderer!.getIndex(2)) {\r\n if (!prePassConfiguration.previousBones[mesh.uniqueId]) {\r\n prePassConfiguration.previousBones[mesh.uniqueId] = matrices.slice();\r\n }\r\n effect.setMatrices(\"mPreviousBones\", prePassConfiguration.previousBones[mesh.uniqueId]);\r\n MaterialHelper._CopyBonesTransformationMatrices(matrices, prePassConfiguration.previousBones[mesh.uniqueId]);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Copies the bones transformation matrices into the target array and returns the target's reference\r\n private static _CopyBonesTransformationMatrices(source: Float32Array, target: Float32Array): Float32Array {\r\n target.set(source);\r\n\r\n return target;\r\n }\r\n\r\n /**\r\n * Binds the morph targets information from the mesh to the effect.\r\n * @param abstractMesh The mesh we are binding the information to render\r\n * @param effect The effect we are binding the data to\r\n */\r\n public static BindMorphTargetParameters(abstractMesh: AbstractMesh, effect: Effect): void {\r\n let manager = (<Mesh>abstractMesh).morphTargetManager;\r\n if (!abstractMesh || !manager) {\r\n return;\r\n }\r\n\r\n effect.setFloatArray(\"morphTargetInfluences\", manager.influences);\r\n }\r\n\r\n /**\r\n * Binds the logarithmic depth information from the scene to the effect for the given defines.\r\n * @param defines The generated defines used in the effect\r\n * @param effect The effect we are binding the data to\r\n * @param scene The scene we are willing to render with logarithmic scale for\r\n */\r\n public static BindLogDepth(defines: any, effect: Effect, scene: Scene): void {\r\n if (!defines || defines[\"LOGARITHMICDEPTH\"]) {\r\n const camera = <Camera>scene.activeCamera;\r\n if (camera.mode === Camera.ORTHOGRAPHIC_CAMERA) {\r\n Logger.Error(\"Logarithmic depth is not compatible with orthographic cameras!\", 20);\r\n }\r\n effect.setFloat(\"logarithmicDepthConstant\", 2.0 / (Math.log(camera.maxZ + 1.0) / Math.LN2));\r\n }\r\n }\r\n\r\n /**\r\n * Binds the clip plane information from the scene to the effect.\r\n * @param scene The scene the clip plane information are extracted from\r\n * @param effect The effect we are binding the data to\r\n */\r\n public static BindClipPlane(effect: Effect, scene: Scene): void {\r\n ThinMaterialHelper.BindClipPlane(effect, scene);\r\n }\r\n}\r\n"]}
@@ -21,11 +21,11 @@ var MaterialPluginManager = /** @class */ (function () {
21
21
  MaterialPluginManager.prototype._addPlugin = function (plugin) {
22
22
  for (var i = 0; i < this._plugins.length; ++i) {
23
23
  if (this._plugins[i].name === plugin.name) {
24
- throw "Plugin \"" + plugin.name + "\" already added to the material \"" + this._material.name + "\"!";
24
+ throw "Plugin \"".concat(plugin.name, "\" already added to the material \"").concat(this._material.name, "\"!");
25
25
  }
26
26
  }
27
27
  if (this._material._uniformBufferLayoutBuilt) {
28
- throw "The plugin \"" + plugin.name + "\" can't be added to the material \"" + this._material.name + "\" because this material has already been used for rendering! Please add plugins to materials before any rendering with this material occurs.";
28
+ throw "The plugin \"".concat(plugin.name, "\" can't be added to the material \"").concat(this._material.name, "\" because this material has already been used for rendering! Please add plugins to materials before any rendering with this material occurs.");
29
29
  }
30
30
  this._material._callbackPluginEventGeneric = this._handlePluginEvent.bind(this);
31
31
  this._plugins.push(plugin);
@@ -193,7 +193,7 @@ var MaterialPluginManager = /** @class */ (function () {
193
193
  for (var _p = 0, _q = uniforms.ubo; _p < _q.length; _p++) {
194
194
  var uniform = _q[_p];
195
195
  eventData.ubo.addUniform(uniform.name, uniform.size);
196
- this._uboDeclaration += uniform.type + " " + uniform.name + ";\r\n";
196
+ this._uboDeclaration += "".concat(uniform.type, " ").concat(uniform.name, ";\r\n");
197
197
  this._uniformList.push(uniform.name);
198
198
  }
199
199
  }
@@ -1 +1 @@
1
- {"version":3,"file":"materialPluginManager.js","sourceRoot":"","sources":["../../../sourceES6/core/Materials/materialPluginManager.ts"],"names":[],"mappings":"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","sourcesContent":["import { ShaderCustomProcessingFunction } from \"../Engines/Processors/shaderProcessingOptions\";\r\nimport { EventState } from \"../Misc/observable\";\r\nimport { Nullable } from \"../types\";\r\nimport { Material } from \"./material\";\r\nimport {\r\n MaterialPluginPrepareEffect,\r\n MaterialPluginBindForSubMesh,\r\n MaterialPluginDisposed,\r\n MaterialPluginGetActiveTextures,\r\n MaterialPluginGetAnimatables,\r\n MaterialPluginGetDefineNames,\r\n MaterialPluginHasTexture,\r\n MaterialPluginIsReadyForSubMesh,\r\n MaterialPluginPrepareDefines,\r\n MaterialPluginPrepareUniformBuffer,\r\n MaterialPluginEvent,\r\n MaterialPluginHardBindForSubMesh,\r\n MaterialPluginHasRenderTargetTextures,\r\n MaterialPluginFillRenderTargetTextures,\r\n} from \"./materialPluginEvent\";\r\n\r\ndeclare type Scene = import(\"../scene\").Scene;\r\ndeclare type Engine = import(\"../Engines/engine\").Engine;\r\ndeclare type MaterialPluginBase = import(\"./materialPluginBase\").MaterialPluginBase;\r\n\r\ndeclare module \"./material\" {\r\n export interface Material {\r\n /**\r\n * Plugin manager for this material\r\n */\r\n pluginManager?: MaterialPluginManager;\r\n }\r\n}\r\n\r\n/**\r\n * Class that manages the plugins of a material\r\n * @since 5.0\r\n */\r\nexport class MaterialPluginManager {\r\n protected _material: Material;\r\n protected _scene: Scene;\r\n protected _engine: Engine;\r\n protected _plugins: MaterialPluginBase[] = [];\r\n protected _activePlugins: MaterialPluginBase[] = [];\r\n protected _activePluginsForExtraEvents: MaterialPluginBase[] = [];\r\n protected _codeInjectionPoints: { [shaderType: string]: { [codeName: string]: boolean } };\r\n protected _defineNamesFromPlugins?: { [name: string]: { type: string; default: any } };\r\n protected _uboDeclaration: string;\r\n protected _vertexDeclaration: string;\r\n protected _fragmentDeclaration: string;\r\n protected _uniformList: string[];\r\n protected _samplerList: string[];\r\n\r\n /**\r\n * Creates a new instance of the plugin manager\r\n * @param material material that this manager will manage the plugins for\r\n */\r\n constructor(material: Material) {\r\n this._material = material;\r\n this._scene = material.getScene();\r\n this._engine = this._scene.getEngine();\r\n }\r\n\r\n /** @hidden */\r\n public _addPlugin(plugin: MaterialPluginBase): void {\r\n for (let i = 0; i < this._plugins.length; ++i) {\r\n if (this._plugins[i].name === plugin.name) {\r\n throw `Plugin \"${plugin.name}\" already added to the material \"${this._material.name}\"!`;\r\n }\r\n }\r\n\r\n if (this._material._uniformBufferLayoutBuilt) {\r\n throw `The plugin \"${plugin.name}\" can't be added to the material \"${this._material.name}\" because this material has already been used for rendering! Please add plugins to materials before any rendering with this material occurs.`;\r\n }\r\n\r\n this._material._callbackPluginEventGeneric = this._handlePluginEvent.bind(this);\r\n\r\n this._plugins.push(plugin);\r\n this._plugins.sort((a, b) => a.priority - b.priority);\r\n\r\n this._codeInjectionPoints = {};\r\n\r\n const defineNamesFromPlugins = {};\r\n for (const plugin of this._plugins) {\r\n plugin.collectDefines(defineNamesFromPlugins);\r\n this._collectPointNames(\"vertex\", plugin.getCustomCode(\"vertex\"));\r\n this._collectPointNames(\"fragment\", plugin.getCustomCode(\"fragment\"));\r\n }\r\n\r\n if (Object.keys(defineNamesFromPlugins).length > 0) {\r\n this._defineNamesFromPlugins = defineNamesFromPlugins;\r\n } else {\r\n delete this._defineNamesFromPlugins;\r\n }\r\n }\r\n\r\n /** @hidden */\r\n public _activatePlugin(plugin: MaterialPluginBase): void {\r\n if (this._activePlugins.indexOf(plugin) === -1) {\r\n this._activePlugins.push(plugin);\r\n this._activePlugins.sort((a, b) => a.priority - b.priority);\r\n\r\n this._material._callbackPluginEventIsReadyForSubMesh = this._handlePluginEventIsReadyForSubMesh.bind(this);\r\n this._material._callbackPluginEventPrepareDefines = this._handlePluginEventPrepareDefines.bind(this);\r\n this._material._callbackPluginEventBindForSubMesh = this._handlePluginEventBindForSubMesh.bind(this);\r\n\r\n if (plugin.registerForExtraEvents) {\r\n this._activePluginsForExtraEvents.push(plugin);\r\n this._activePluginsForExtraEvents.sort((a, b) => a.priority - b.priority);\r\n this._material._callbackPluginEventHasRenderTargetTextures = this._handlePluginEventHasRenderTargetTextures.bind(this);\r\n this._material._callbackPluginEventFillRenderTargetTextures = this._handlePluginEventFillRenderTargetTextures.bind(this);\r\n this._material._callbackPluginEventHardBindForSubMesh = this._handlePluginEventHardBindForSubMesh.bind(this);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Gets a plugin from the list of plugins managed by this manager\r\n * @param name name of the plugin\r\n * @returns the plugin if found, else null\r\n */\r\n public getPlugin(name: string): Nullable<MaterialPluginBase> {\r\n for (let i = 0; i < this._plugins.length; ++i) {\r\n if (this._plugins[i].name === name) {\r\n return this._plugins[i];\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n protected _handlePluginEventIsReadyForSubMesh(eventData: MaterialPluginIsReadyForSubMesh): void {\r\n let isReady = true;\r\n for (const plugin of this._activePlugins) {\r\n isReady = isReady && plugin.isReadyForSubMesh(eventData.defines, this._scene, this._engine, eventData.subMesh);\r\n }\r\n eventData.isReadyForSubMesh = isReady;\r\n }\r\n\r\n protected _handlePluginEventPrepareDefines(eventData: MaterialPluginPrepareDefines): void {\r\n for (const plugin of this._activePlugins) {\r\n plugin.prepareDefines(eventData.defines, this._scene, eventData.mesh);\r\n }\r\n }\r\n\r\n protected _handlePluginEventHardBindForSubMesh(eventData: MaterialPluginHardBindForSubMesh): void {\r\n for (const plugin of this._activePluginsForExtraEvents) {\r\n plugin.hardBindForSubMesh(this._material._uniformBuffer, this._scene, this._engine, eventData.subMesh);\r\n }\r\n }\r\n\r\n protected _handlePluginEventBindForSubMesh(eventData: MaterialPluginBindForSubMesh): void {\r\n for (const plugin of this._activePlugins) {\r\n plugin.bindForSubMesh(this._material._uniformBuffer, this._scene, this._engine, eventData.subMesh);\r\n }\r\n }\r\n\r\n protected _handlePluginEventHasRenderTargetTextures(eventData: MaterialPluginHasRenderTargetTextures): void {\r\n let hasRenderTargetTextures = false;\r\n for (const plugin of this._activePluginsForExtraEvents) {\r\n hasRenderTargetTextures = plugin.hasRenderTargetTextures();\r\n if (hasRenderTargetTextures) {\r\n break;\r\n }\r\n }\r\n eventData.hasRenderTargetTextures = hasRenderTargetTextures;\r\n }\r\n\r\n protected _handlePluginEventFillRenderTargetTextures(eventData: MaterialPluginFillRenderTargetTextures): void {\r\n for (const plugin of this._activePluginsForExtraEvents) {\r\n plugin.fillRenderTargetTextures(eventData.renderTargets);\r\n }\r\n }\r\n\r\n protected _handlePluginEvent(\r\n id: number,\r\n info:\r\n | MaterialPluginGetActiveTextures\r\n | MaterialPluginGetAnimatables\r\n | MaterialPluginHasTexture\r\n | MaterialPluginDisposed\r\n | MaterialPluginGetDefineNames\r\n | MaterialPluginPrepareEffect\r\n | MaterialPluginPrepareUniformBuffer\r\n ): void {\r\n switch (id) {\r\n case MaterialPluginEvent.GetActiveTextures: {\r\n const eventData = info as MaterialPluginGetActiveTextures;\r\n for (const plugin of this._activePlugins) {\r\n plugin.getActiveTextures(eventData.activeTextures);\r\n }\r\n break;\r\n }\r\n\r\n case MaterialPluginEvent.GetAnimatables: {\r\n const eventData = info as MaterialPluginGetAnimatables;\r\n for (const plugin of this._activePlugins) {\r\n plugin.getAnimatables(eventData.animatables);\r\n }\r\n break;\r\n }\r\n\r\n case MaterialPluginEvent.HasTexture: {\r\n const eventData = info as MaterialPluginHasTexture;\r\n let hasTexture = false;\r\n for (const plugin of this._activePlugins) {\r\n hasTexture = plugin.hasTexture(eventData.texture);\r\n if (hasTexture) {\r\n break;\r\n }\r\n }\r\n eventData.hasTexture = hasTexture;\r\n break;\r\n }\r\n\r\n case MaterialPluginEvent.Disposed: {\r\n const eventData = info as MaterialPluginDisposed;\r\n for (const plugin of this._plugins) {\r\n plugin.dispose(eventData.forceDisposeTextures);\r\n }\r\n break;\r\n }\r\n\r\n case MaterialPluginEvent.GetDefineNames: {\r\n const eventData = info as MaterialPluginGetDefineNames;\r\n eventData.defineNames = this._defineNamesFromPlugins;\r\n break;\r\n }\r\n\r\n case MaterialPluginEvent.PrepareEffect: {\r\n const eventData = info as MaterialPluginPrepareEffect;\r\n for (const plugin of this._activePlugins) {\r\n eventData.fallbackRank = plugin.addFallbacks(eventData.defines, eventData.fallbacks, eventData.fallbackRank);\r\n }\r\n if (this._uniformList.length > 0) {\r\n eventData.uniforms.push(...this._uniformList);\r\n }\r\n if (this._samplerList.length > 0) {\r\n eventData.samplers.push(...this._samplerList);\r\n }\r\n eventData.customCode = this._injectCustomCode(eventData.customCode);\r\n break;\r\n }\r\n\r\n case MaterialPluginEvent.PrepareUniformBuffer: {\r\n const eventData = info as MaterialPluginPrepareUniformBuffer;\r\n this._uboDeclaration = \"\";\r\n this._vertexDeclaration = \"\";\r\n this._fragmentDeclaration = \"\";\r\n this._uniformList = [];\r\n this._samplerList = [];\r\n for (const plugin of this._plugins) {\r\n const uniforms = plugin.getUniforms();\r\n if (uniforms) {\r\n if (uniforms.ubo) {\r\n for (const uniform of uniforms.ubo) {\r\n eventData.ubo.addUniform(uniform.name, uniform.size);\r\n this._uboDeclaration += `${uniform.type} ${uniform.name};\\r\\n`;\r\n this._uniformList.push(uniform.name);\r\n }\r\n }\r\n if (uniforms.vertex) {\r\n this._vertexDeclaration += uniforms.vertex + \"\\r\\n\";\r\n }\r\n if (uniforms.fragment) {\r\n this._fragmentDeclaration += uniforms.fragment + \"\\r\\n\";\r\n }\r\n }\r\n plugin.getSamplers(this._samplerList);\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n\r\n protected _collectPointNames(shaderType: string, customCode: Nullable<{ [pointName: string]: string }> | undefined): void {\r\n if (!customCode) {\r\n return;\r\n }\r\n for (const pointName in customCode) {\r\n if (!this._codeInjectionPoints[shaderType]) {\r\n this._codeInjectionPoints[shaderType] = {};\r\n }\r\n this._codeInjectionPoints[shaderType][pointName] = true;\r\n }\r\n }\r\n\r\n protected _injectCustomCode(existingCallback?: (shaderType: string, code: string) => string): ShaderCustomProcessingFunction {\r\n return (shaderType: string, code: string) => {\r\n if (existingCallback) {\r\n code = existingCallback(shaderType, code);\r\n }\r\n if (this._uboDeclaration) {\r\n code = code.replace(\"#define ADDITIONAL_UBO_DECLARATION\", this._uboDeclaration);\r\n }\r\n if (this._vertexDeclaration) {\r\n code = code.replace(\"#define ADDITIONAL_VERTEX_DECLARATION\", this._vertexDeclaration);\r\n }\r\n if (this._fragmentDeclaration) {\r\n code = code.replace(\"#define ADDITIONAL_FRAGMENT_DECLARATION\", this._fragmentDeclaration);\r\n }\r\n const points = this._codeInjectionPoints?.[shaderType];\r\n if (!points) {\r\n return code;\r\n }\r\n for (const pointName in points) {\r\n let injectedCode = \"\";\r\n for (const plugin of this._activePlugins) {\r\n const customCode = plugin.getCustomCode(shaderType);\r\n if (customCode?.[pointName]) {\r\n injectedCode += customCode[pointName] + \"\\r\\n\";\r\n }\r\n }\r\n if (injectedCode.length > 0) {\r\n if (pointName.charAt(0) === \"!\") {\r\n // pointName is a regular expression\r\n const rx = new RegExp(pointName.substring(1), \"g\");\r\n let match = rx.exec(code);\r\n while (match !== null) {\r\n code = code.replace(match[0], injectedCode);\r\n match = rx.exec(code);\r\n }\r\n } else {\r\n const fullPointName = \"#define \" + pointName;\r\n code = code.replace(fullPointName, \"\\r\\n\" + injectedCode + \"\\r\\n\" + fullPointName);\r\n }\r\n }\r\n }\r\n return code;\r\n };\r\n }\r\n}\r\n\r\n/**\r\n * Type for plugin material factories.\r\n */\r\nexport type PluginMaterialFactory = (material: Material) => Nullable<MaterialPluginBase>;\r\n\r\nlet _Plugins: Array<[string, PluginMaterialFactory]> = [];\r\nlet _Inited = false;\r\n\r\n/**\r\n * Registers a new material plugin through a factory, or updates it. This makes the plugin available to all materials instantiated after its registration.\r\n * @param pluginName The plugin name\r\n * @param factory The factory function which allows to create the plugin\r\n */\r\nexport function RegisterMaterialPlugin(pluginName: string, factory: PluginMaterialFactory): void {\r\n if (!_Inited) {\r\n Material.OnEventObservable.add((material: Material, eventState: EventState) => {\r\n for (const [_name, factory] of _Plugins) {\r\n factory(material);\r\n }\r\n }, MaterialPluginEvent.Created);\r\n _Inited = true;\r\n }\r\n const existing = _Plugins.filter(([name, _factory]) => name === pluginName);\r\n if (existing.length > 0) {\r\n existing[0][1] = factory;\r\n } else {\r\n _Plugins.push([pluginName, factory]);\r\n }\r\n}\r\n\r\n/**\r\n * Removes a material plugin from the list of global plugins.\r\n * @param pluginName The plugin name\r\n * @returns true if the plugin has been removed, else false\r\n */\r\nexport function UnregisterMaterialPlugin(pluginName: string): boolean {\r\n for (let i = 0; i < _Plugins.length; ++i) {\r\n if (_Plugins[i][0] === pluginName) {\r\n _Plugins.splice(i, 1);\r\n return true;\r\n }\r\n }\r\n return false;\r\n}\r\n\r\n/**\r\n * Clear the list of global material plugins\r\n */\r\nexport function UnregisterAllMaterialPlugins(): void {\r\n _Plugins.length = 0;\r\n}\r\n"]}
1
+ {"version":3,"file":"materialPluginManager.js","sourceRoot":"","sources":["../../../sourceES6/core/Materials/materialPluginManager.ts"],"names":[],"mappings":"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","sourcesContent":["import { ShaderCustomProcessingFunction } from \"../Engines/Processors/shaderProcessingOptions\";\r\nimport { EventState } from \"../Misc/observable\";\r\nimport { Nullable } from \"../types\";\r\nimport { Material } from \"./material\";\r\nimport {\r\n MaterialPluginPrepareEffect,\r\n MaterialPluginBindForSubMesh,\r\n MaterialPluginDisposed,\r\n MaterialPluginGetActiveTextures,\r\n MaterialPluginGetAnimatables,\r\n MaterialPluginGetDefineNames,\r\n MaterialPluginHasTexture,\r\n MaterialPluginIsReadyForSubMesh,\r\n MaterialPluginPrepareDefines,\r\n MaterialPluginPrepareUniformBuffer,\r\n MaterialPluginEvent,\r\n MaterialPluginHardBindForSubMesh,\r\n MaterialPluginHasRenderTargetTextures,\r\n MaterialPluginFillRenderTargetTextures,\r\n} from \"./materialPluginEvent\";\r\n\r\ndeclare type Scene = import(\"../scene\").Scene;\r\ndeclare type Engine = import(\"../Engines/engine\").Engine;\r\ndeclare type MaterialPluginBase = import(\"./materialPluginBase\").MaterialPluginBase;\r\n\r\ndeclare module \"./material\" {\r\n export interface Material {\r\n /**\r\n * Plugin manager for this material\r\n */\r\n pluginManager?: MaterialPluginManager;\r\n }\r\n}\r\n\r\n/**\r\n * Class that manages the plugins of a material\r\n * @since 5.0\r\n */\r\nexport class MaterialPluginManager {\r\n protected _material: Material;\r\n protected _scene: Scene;\r\n protected _engine: Engine;\r\n protected _plugins: MaterialPluginBase[] = [];\r\n protected _activePlugins: MaterialPluginBase[] = [];\r\n protected _activePluginsForExtraEvents: MaterialPluginBase[] = [];\r\n protected _codeInjectionPoints: { [shaderType: string]: { [codeName: string]: boolean } };\r\n protected _defineNamesFromPlugins?: { [name: string]: { type: string; default: any } };\r\n protected _uboDeclaration: string;\r\n protected _vertexDeclaration: string;\r\n protected _fragmentDeclaration: string;\r\n protected _uniformList: string[];\r\n protected _samplerList: string[];\r\n\r\n /**\r\n * Creates a new instance of the plugin manager\r\n * @param material material that this manager will manage the plugins for\r\n */\r\n constructor(material: Material) {\r\n this._material = material;\r\n this._scene = material.getScene();\r\n this._engine = this._scene.getEngine();\r\n }\r\n\r\n /** @hidden */\r\n public _addPlugin(plugin: MaterialPluginBase): void {\r\n for (let i = 0; i < this._plugins.length; ++i) {\r\n if (this._plugins[i].name === plugin.name) {\r\n throw `Plugin \"${plugin.name}\" already added to the material \"${this._material.name}\"!`;\r\n }\r\n }\r\n\r\n if (this._material._uniformBufferLayoutBuilt) {\r\n throw `The plugin \"${plugin.name}\" can't be added to the material \"${this._material.name}\" because this material has already been used for rendering! Please add plugins to materials before any rendering with this material occurs.`;\r\n }\r\n\r\n this._material._callbackPluginEventGeneric = this._handlePluginEvent.bind(this);\r\n\r\n this._plugins.push(plugin);\r\n this._plugins.sort((a, b) => a.priority - b.priority);\r\n\r\n this._codeInjectionPoints = {};\r\n\r\n const defineNamesFromPlugins = {};\r\n for (const plugin of this._plugins) {\r\n plugin.collectDefines(defineNamesFromPlugins);\r\n this._collectPointNames(\"vertex\", plugin.getCustomCode(\"vertex\"));\r\n this._collectPointNames(\"fragment\", plugin.getCustomCode(\"fragment\"));\r\n }\r\n\r\n if (Object.keys(defineNamesFromPlugins).length > 0) {\r\n this._defineNamesFromPlugins = defineNamesFromPlugins;\r\n } else {\r\n delete this._defineNamesFromPlugins;\r\n }\r\n }\r\n\r\n /** @hidden */\r\n public _activatePlugin(plugin: MaterialPluginBase): void {\r\n if (this._activePlugins.indexOf(plugin) === -1) {\r\n this._activePlugins.push(plugin);\r\n this._activePlugins.sort((a, b) => a.priority - b.priority);\r\n\r\n this._material._callbackPluginEventIsReadyForSubMesh = this._handlePluginEventIsReadyForSubMesh.bind(this);\r\n this._material._callbackPluginEventPrepareDefines = this._handlePluginEventPrepareDefines.bind(this);\r\n this._material._callbackPluginEventBindForSubMesh = this._handlePluginEventBindForSubMesh.bind(this);\r\n\r\n if (plugin.registerForExtraEvents) {\r\n this._activePluginsForExtraEvents.push(plugin);\r\n this._activePluginsForExtraEvents.sort((a, b) => a.priority - b.priority);\r\n this._material._callbackPluginEventHasRenderTargetTextures = this._handlePluginEventHasRenderTargetTextures.bind(this);\r\n this._material._callbackPluginEventFillRenderTargetTextures = this._handlePluginEventFillRenderTargetTextures.bind(this);\r\n this._material._callbackPluginEventHardBindForSubMesh = this._handlePluginEventHardBindForSubMesh.bind(this);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Gets a plugin from the list of plugins managed by this manager\r\n * @param name name of the plugin\r\n * @returns the plugin if found, else null\r\n */\r\n public getPlugin(name: string): Nullable<MaterialPluginBase> {\r\n for (let i = 0; i < this._plugins.length; ++i) {\r\n if (this._plugins[i].name === name) {\r\n return this._plugins[i];\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n protected _handlePluginEventIsReadyForSubMesh(eventData: MaterialPluginIsReadyForSubMesh): void {\r\n let isReady = true;\r\n for (const plugin of this._activePlugins) {\r\n isReady = isReady && plugin.isReadyForSubMesh(eventData.defines, this._scene, this._engine, eventData.subMesh);\r\n }\r\n eventData.isReadyForSubMesh = isReady;\r\n }\r\n\r\n protected _handlePluginEventPrepareDefines(eventData: MaterialPluginPrepareDefines): void {\r\n for (const plugin of this._activePlugins) {\r\n plugin.prepareDefines(eventData.defines, this._scene, eventData.mesh);\r\n }\r\n }\r\n\r\n protected _handlePluginEventHardBindForSubMesh(eventData: MaterialPluginHardBindForSubMesh): void {\r\n for (const plugin of this._activePluginsForExtraEvents) {\r\n plugin.hardBindForSubMesh(this._material._uniformBuffer, this._scene, this._engine, eventData.subMesh);\r\n }\r\n }\r\n\r\n protected _handlePluginEventBindForSubMesh(eventData: MaterialPluginBindForSubMesh): void {\r\n for (const plugin of this._activePlugins) {\r\n plugin.bindForSubMesh(this._material._uniformBuffer, this._scene, this._engine, eventData.subMesh);\r\n }\r\n }\r\n\r\n protected _handlePluginEventHasRenderTargetTextures(eventData: MaterialPluginHasRenderTargetTextures): void {\r\n let hasRenderTargetTextures = false;\r\n for (const plugin of this._activePluginsForExtraEvents) {\r\n hasRenderTargetTextures = plugin.hasRenderTargetTextures();\r\n if (hasRenderTargetTextures) {\r\n break;\r\n }\r\n }\r\n eventData.hasRenderTargetTextures = hasRenderTargetTextures;\r\n }\r\n\r\n protected _handlePluginEventFillRenderTargetTextures(eventData: MaterialPluginFillRenderTargetTextures): void {\r\n for (const plugin of this._activePluginsForExtraEvents) {\r\n plugin.fillRenderTargetTextures(eventData.renderTargets);\r\n }\r\n }\r\n\r\n protected _handlePluginEvent(\r\n id: number,\r\n info:\r\n | MaterialPluginGetActiveTextures\r\n | MaterialPluginGetAnimatables\r\n | MaterialPluginHasTexture\r\n | MaterialPluginDisposed\r\n | MaterialPluginGetDefineNames\r\n | MaterialPluginPrepareEffect\r\n | MaterialPluginPrepareUniformBuffer\r\n ): void {\r\n switch (id) {\r\n case MaterialPluginEvent.GetActiveTextures: {\r\n const eventData = info as MaterialPluginGetActiveTextures;\r\n for (const plugin of this._activePlugins) {\r\n plugin.getActiveTextures(eventData.activeTextures);\r\n }\r\n break;\r\n }\r\n\r\n case MaterialPluginEvent.GetAnimatables: {\r\n const eventData = info as MaterialPluginGetAnimatables;\r\n for (const plugin of this._activePlugins) {\r\n plugin.getAnimatables(eventData.animatables);\r\n }\r\n break;\r\n }\r\n\r\n case MaterialPluginEvent.HasTexture: {\r\n const eventData = info as MaterialPluginHasTexture;\r\n let hasTexture = false;\r\n for (const plugin of this._activePlugins) {\r\n hasTexture = plugin.hasTexture(eventData.texture);\r\n if (hasTexture) {\r\n break;\r\n }\r\n }\r\n eventData.hasTexture = hasTexture;\r\n break;\r\n }\r\n\r\n case MaterialPluginEvent.Disposed: {\r\n const eventData = info as MaterialPluginDisposed;\r\n for (const plugin of this._plugins) {\r\n plugin.dispose(eventData.forceDisposeTextures);\r\n }\r\n break;\r\n }\r\n\r\n case MaterialPluginEvent.GetDefineNames: {\r\n const eventData = info as MaterialPluginGetDefineNames;\r\n eventData.defineNames = this._defineNamesFromPlugins;\r\n break;\r\n }\r\n\r\n case MaterialPluginEvent.PrepareEffect: {\r\n const eventData = info as MaterialPluginPrepareEffect;\r\n for (const plugin of this._activePlugins) {\r\n eventData.fallbackRank = plugin.addFallbacks(eventData.defines, eventData.fallbacks, eventData.fallbackRank);\r\n }\r\n if (this._uniformList.length > 0) {\r\n eventData.uniforms.push(...this._uniformList);\r\n }\r\n if (this._samplerList.length > 0) {\r\n eventData.samplers.push(...this._samplerList);\r\n }\r\n eventData.customCode = this._injectCustomCode(eventData.customCode);\r\n break;\r\n }\r\n\r\n case MaterialPluginEvent.PrepareUniformBuffer: {\r\n const eventData = info as MaterialPluginPrepareUniformBuffer;\r\n this._uboDeclaration = \"\";\r\n this._vertexDeclaration = \"\";\r\n this._fragmentDeclaration = \"\";\r\n this._uniformList = [];\r\n this._samplerList = [];\r\n for (const plugin of this._plugins) {\r\n const uniforms = plugin.getUniforms();\r\n if (uniforms) {\r\n if (uniforms.ubo) {\r\n for (const uniform of uniforms.ubo) {\r\n eventData.ubo.addUniform(uniform.name, uniform.size);\r\n this._uboDeclaration += `${uniform.type} ${uniform.name};\\r\\n`;\r\n this._uniformList.push(uniform.name);\r\n }\r\n }\r\n if (uniforms.vertex) {\r\n this._vertexDeclaration += uniforms.vertex + \"\\r\\n\";\r\n }\r\n if (uniforms.fragment) {\r\n this._fragmentDeclaration += uniforms.fragment + \"\\r\\n\";\r\n }\r\n }\r\n plugin.getSamplers(this._samplerList);\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n\r\n protected _collectPointNames(shaderType: string, customCode: Nullable<{ [pointName: string]: string }> | undefined): void {\r\n if (!customCode) {\r\n return;\r\n }\r\n for (const pointName in customCode) {\r\n if (!this._codeInjectionPoints[shaderType]) {\r\n this._codeInjectionPoints[shaderType] = {};\r\n }\r\n this._codeInjectionPoints[shaderType][pointName] = true;\r\n }\r\n }\r\n\r\n protected _injectCustomCode(existingCallback?: (shaderType: string, code: string) => string): ShaderCustomProcessingFunction {\r\n return (shaderType: string, code: string) => {\r\n if (existingCallback) {\r\n code = existingCallback(shaderType, code);\r\n }\r\n if (this._uboDeclaration) {\r\n code = code.replace(\"#define ADDITIONAL_UBO_DECLARATION\", this._uboDeclaration);\r\n }\r\n if (this._vertexDeclaration) {\r\n code = code.replace(\"#define ADDITIONAL_VERTEX_DECLARATION\", this._vertexDeclaration);\r\n }\r\n if (this._fragmentDeclaration) {\r\n code = code.replace(\"#define ADDITIONAL_FRAGMENT_DECLARATION\", this._fragmentDeclaration);\r\n }\r\n const points = this._codeInjectionPoints?.[shaderType];\r\n if (!points) {\r\n return code;\r\n }\r\n for (const pointName in points) {\r\n let injectedCode = \"\";\r\n for (const plugin of this._activePlugins) {\r\n const customCode = plugin.getCustomCode(shaderType);\r\n if (customCode?.[pointName]) {\r\n injectedCode += customCode[pointName] + \"\\r\\n\";\r\n }\r\n }\r\n if (injectedCode.length > 0) {\r\n if (pointName.charAt(0) === \"!\") {\r\n // pointName is a regular expression\r\n const rx = new RegExp(pointName.substring(1), \"g\");\r\n let match = rx.exec(code);\r\n while (match !== null) {\r\n code = code.replace(match[0], injectedCode);\r\n match = rx.exec(code);\r\n }\r\n } else {\r\n const fullPointName = \"#define \" + pointName;\r\n code = code.replace(fullPointName, \"\\r\\n\" + injectedCode + \"\\r\\n\" + fullPointName);\r\n }\r\n }\r\n }\r\n return code;\r\n };\r\n }\r\n}\r\n\r\n/**\r\n * Type for plugin material factories.\r\n */\r\nexport type PluginMaterialFactory = (material: Material) => Nullable<MaterialPluginBase>;\r\n\r\nlet _Plugins: Array<[string, PluginMaterialFactory]> = [];\r\nlet _Inited = false;\r\n\r\n/**\r\n * Registers a new material plugin through a factory, or updates it. This makes the plugin available to all materials instantiated after its registration.\r\n * @param pluginName The plugin name\r\n * @param factory The factory function which allows to create the plugin\r\n */\r\nexport function RegisterMaterialPlugin(pluginName: string, factory: PluginMaterialFactory): void {\r\n if (!_Inited) {\r\n Material.OnEventObservable.add((material: Material, eventState: EventState) => {\r\n for (const [_name, factory] of _Plugins) {\r\n factory(material);\r\n }\r\n }, MaterialPluginEvent.Created);\r\n _Inited = true;\r\n }\r\n const existing = _Plugins.filter(([name, _factory]) => name === pluginName);\r\n if (existing.length > 0) {\r\n existing[0][1] = factory;\r\n } else {\r\n _Plugins.push([pluginName, factory]);\r\n }\r\n}\r\n\r\n/**\r\n * Removes a material plugin from the list of global plugins.\r\n * @param pluginName The plugin name\r\n * @returns true if the plugin has been removed, else false\r\n */\r\nexport function UnregisterMaterialPlugin(pluginName: string): boolean {\r\n for (let i = 0; i < _Plugins.length; ++i) {\r\n if (_Plugins[i][0] === pluginName) {\r\n _Plugins.splice(i, 1);\r\n return true;\r\n }\r\n }\r\n return false;\r\n}\r\n\r\n/**\r\n * Clear the list of global material plugins\r\n */\r\nexport function UnregisterAllMaterialPlugins(): void {\r\n _Plugins.length = 0;\r\n}\r\n"]}
@@ -11,6 +11,8 @@ import { Material } from "../Materials/material";
11
11
  */
12
12
  export declare class MultiMaterial extends Material {
13
13
  private _subMaterials;
14
+ /** @hidden */
15
+ _waitingSubMaterialsUniqueIds: string[];
14
16
  /**
15
17
  * Gets or Sets the list of Materials used within the multi material.
16
18
  * They need to be ordered according to the submeshes order in the associated mesh
@@ -30,7 +32,7 @@ export declare class MultiMaterial extends Material {
30
32
  * @param name Define the name in the scene
31
33
  * @param scene Define the scene the material belongs to
32
34
  */
33
- constructor(name: string, scene: Scene);
35
+ constructor(name: string, scene?: Scene);
34
36
  private _hookArray;
35
37
  /**
36
38
  * Get one of the submaterial by its index in the submaterials array
@@ -19,7 +19,9 @@ var MultiMaterial = /** @class */ (function (_super) {
19
19
  */
20
20
  function MultiMaterial(name, scene) {
21
21
  var _this = _super.call(this, name, scene, true) || this;
22
- scene.multiMaterials.push(_this);
22
+ /** @hidden */
23
+ _this._waitingSubMaterialsUniqueIds = [];
24
+ _this.getScene().multiMaterials.push(_this);
23
25
  _this.subMaterials = new Array();
24
26
  _this._storeEffectOnSubMeshes = true; // multimaterial is considered like a push material
25
27
  return _this;
@@ -169,16 +171,20 @@ var MultiMaterial = /** @class */ (function (_super) {
169
171
  var serializationObject = {};
170
172
  serializationObject.name = this.name;
171
173
  serializationObject.id = this.id;
174
+ serializationObject.uniqueId = this.uniqueId;
172
175
  if (Tags) {
173
176
  serializationObject.tags = Tags.GetTags(this);
174
177
  }
178
+ serializationObject.materialsUniqueIds = [];
175
179
  serializationObject.materials = [];
176
180
  for (var matIndex = 0; matIndex < this.subMaterials.length; matIndex++) {
177
181
  var subMat = this.subMaterials[matIndex];
178
182
  if (subMat) {
183
+ serializationObject.materialsUniqueIds.push(subMat.uniqueId);
179
184
  serializationObject.materials.push(subMat.id);
180
185
  }
181
186
  else {
187
+ serializationObject.materialsUniqueIds.push(null);
182
188
  serializationObject.materials.push(null);
183
189
  }
184
190
  }
@@ -218,19 +224,15 @@ var MultiMaterial = /** @class */ (function (_super) {
218
224
  MultiMaterial.ParseMultiMaterial = function (parsedMultiMaterial, scene) {
219
225
  var multiMaterial = new MultiMaterial(parsedMultiMaterial.name, scene);
220
226
  multiMaterial.id = parsedMultiMaterial.id;
227
+ multiMaterial._loadedUniqueId = parsedMultiMaterial.uniqueId;
221
228
  if (Tags) {
222
229
  Tags.AddTagsTo(multiMaterial, parsedMultiMaterial.tags);
223
230
  }
224
- for (var matIndex = 0; matIndex < parsedMultiMaterial.materials.length; matIndex++) {
225
- var subMatId = parsedMultiMaterial.materials[matIndex];
226
- if (subMatId) {
227
- // If the same multimaterial is loaded twice, the 2nd multimaterial needs to reference the latest material by that id which
228
- // is why this lookup should use getLastMaterialByID instead of getMaterialByID
229
- multiMaterial.subMaterials.push(scene.getLastMaterialById(subMatId));
230
- }
231
- else {
232
- multiMaterial.subMaterials.push(null);
233
- }
231
+ if (parsedMultiMaterial.materialsUniqueIds) {
232
+ multiMaterial._waitingSubMaterialsUniqueIds = parsedMultiMaterial.materialsUniqueIds;
233
+ }
234
+ else {
235
+ parsedMultiMaterial.materials.forEach(function (subMatId) { return multiMaterial.subMaterials.push(scene.getLastMaterialById(subMatId)); });
234
236
  }
235
237
  return multiMaterial;
236
238
  };