@onerjs/core 8.53.5 → 8.53.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (841) hide show
  1. package/Animations/animationGroup.d.ts +0 -1
  2. package/Animations/animationGroup.js +0 -1
  3. package/Animations/animationGroup.js.map +1 -1
  4. package/Animations/animationGroup.pure.js +2 -0
  5. package/Animations/animationGroup.pure.js.map +1 -1
  6. package/Animations/runtimeAnimation.js +11 -0
  7. package/Animations/runtimeAnimation.js.map +1 -1
  8. package/Audio/audioSceneComponent.pure.js +1 -1
  9. package/AudioV2/abstractAudio/abstractSound.d.ts +2 -1
  10. package/AudioV2/abstractAudio/abstractSound.js +7 -2
  11. package/AudioV2/abstractAudio/abstractSound.js.map +1 -1
  12. package/AudioV2/abstractAudio/abstractSoundInstance.d.ts +3 -1
  13. package/AudioV2/abstractAudio/abstractSoundInstance.js.map +1 -1
  14. package/AudioV2/abstractAudio/staticSound.d.ts +6 -0
  15. package/AudioV2/abstractAudio/staticSound.js +17 -1
  16. package/AudioV2/abstractAudio/staticSound.js.map +1 -1
  17. package/AudioV2/abstractAudio/staticSoundInstance.d.ts +4 -2
  18. package/AudioV2/abstractAudio/staticSoundInstance.js.map +1 -1
  19. package/AudioV2/abstractAudio/streamingSound.d.ts +6 -0
  20. package/AudioV2/abstractAudio/streamingSound.js +9 -1
  21. package/AudioV2/abstractAudio/streamingSound.js.map +1 -1
  22. package/AudioV2/webAudio/webAudioStaticSound.d.ts +7 -1
  23. package/AudioV2/webAudio/webAudioStaticSound.js +56 -8
  24. package/AudioV2/webAudio/webAudioStaticSound.js.map +1 -1
  25. package/AudioV2/webAudio/webAudioStreamingSound.d.ts +3 -1
  26. package/AudioV2/webAudio/webAudioStreamingSound.js +16 -4
  27. package/AudioV2/webAudio/webAudioStreamingSound.js.map +1 -1
  28. package/BakedVertexAnimation/bakedVertexAnimationManager.d.ts +2 -2
  29. package/BakedVertexAnimation/bakedVertexAnimationManager.js +151 -121
  30. package/BakedVertexAnimation/bakedVertexAnimationManager.js.map +1 -1
  31. package/Behaviors/Cameras/interpolatingBehavior.d.ts +17 -2
  32. package/Behaviors/Cameras/interpolatingBehavior.js +53 -23
  33. package/Behaviors/Cameras/interpolatingBehavior.js.map +1 -1
  34. package/Bones/bone.pure.js +3 -3
  35. package/Buffers/buffer.pure.js +0 -12
  36. package/Buffers/buffer.pure.js.map +1 -1
  37. package/Cameras/Inputs/BaseCameraMouseWheelInput.js +141 -126
  38. package/Cameras/Inputs/BaseCameraMouseWheelInput.js.map +1 -1
  39. package/Cameras/Inputs/BaseCameraPointersInput.d.ts +2 -1
  40. package/Cameras/Inputs/BaseCameraPointersInput.js +290 -277
  41. package/Cameras/Inputs/BaseCameraPointersInput.js.map +1 -1
  42. package/Cameras/Inputs/arcRotateCameraGamepadInput.js +115 -102
  43. package/Cameras/Inputs/arcRotateCameraGamepadInput.js.map +1 -1
  44. package/Cameras/Inputs/arcRotateCameraKeyboardMoveInput.d.ts +3 -0
  45. package/Cameras/Inputs/arcRotateCameraKeyboardMoveInput.js +334 -273
  46. package/Cameras/Inputs/arcRotateCameraKeyboardMoveInput.js.map +1 -1
  47. package/Cameras/Inputs/arcRotateCameraMouseWheelInput.js +273 -258
  48. package/Cameras/Inputs/arcRotateCameraMouseWheelInput.js.map +1 -1
  49. package/Cameras/Inputs/arcRotateCameraPointersInput.js +237 -213
  50. package/Cameras/Inputs/arcRotateCameraPointersInput.js.map +1 -1
  51. package/Cameras/Inputs/flyCameraKeyboardInput.js +199 -168
  52. package/Cameras/Inputs/flyCameraKeyboardInput.js.map +1 -1
  53. package/Cameras/Inputs/flyCameraMouseInput.js +243 -229
  54. package/Cameras/Inputs/flyCameraMouseInput.js.map +1 -1
  55. package/Cameras/Inputs/followCameraKeyboardMoveInput.js +311 -266
  56. package/Cameras/Inputs/followCameraKeyboardMoveInput.js.map +1 -1
  57. package/Cameras/Inputs/followCameraMouseWheelInput.js +139 -119
  58. package/Cameras/Inputs/followCameraMouseWheelInput.js.map +1 -1
  59. package/Cameras/Inputs/followCameraPointersInput.js +239 -203
  60. package/Cameras/Inputs/followCameraPointersInput.js.map +1 -1
  61. package/Cameras/Inputs/freeCameraGamepadInput.js +127 -114
  62. package/Cameras/Inputs/freeCameraGamepadInput.js.map +1 -1
  63. package/Cameras/Inputs/freeCameraKeyboardMoveInput.js +278 -244
  64. package/Cameras/Inputs/freeCameraKeyboardMoveInput.js.map +1 -1
  65. package/Cameras/Inputs/freeCameraMouseInput.js +216 -202
  66. package/Cameras/Inputs/freeCameraMouseInput.js.map +1 -1
  67. package/Cameras/Inputs/freeCameraMouseWheelInput.js +368 -353
  68. package/Cameras/Inputs/freeCameraMouseWheelInput.js.map +1 -1
  69. package/Cameras/Inputs/freeCameraTouchInput.js +185 -172
  70. package/Cameras/Inputs/freeCameraTouchInput.js.map +1 -1
  71. package/Cameras/Inputs/geospatialCameraKeyboardInput.d.ts +2 -0
  72. package/Cameras/Inputs/geospatialCameraKeyboardInput.js +291 -246
  73. package/Cameras/Inputs/geospatialCameraKeyboardInput.js.map +1 -1
  74. package/Cameras/Inputs/geospatialCameraPointersInput.d.ts +11 -1
  75. package/Cameras/Inputs/geospatialCameraPointersInput.js +18 -2
  76. package/Cameras/Inputs/geospatialCameraPointersInput.js.map +1 -1
  77. package/Cameras/Inputs/orbitCameraPointersInput.js +112 -96
  78. package/Cameras/Inputs/orbitCameraPointersInput.js.map +1 -1
  79. package/Cameras/VR/vrExperienceHelper.d.ts +0 -2
  80. package/Cameras/VR/vrExperienceHelper.js +0 -2
  81. package/Cameras/VR/vrExperienceHelper.js.map +1 -1
  82. package/Cameras/VR/vrExperienceHelper.pure.js +5 -0
  83. package/Cameras/VR/vrExperienceHelper.pure.js.map +1 -1
  84. package/Cameras/arcRotateCamera.pure.js +1559 -1479
  85. package/Cameras/arcRotateCamera.pure.js.map +1 -1
  86. package/Cameras/camera.pure.js +1225 -1178
  87. package/Cameras/camera.pure.js.map +1 -1
  88. package/Cameras/flyCamera.pure.js +369 -351
  89. package/Cameras/flyCamera.pure.js.map +1 -1
  90. package/Cameras/followCamera.pure.js +229 -192
  91. package/Cameras/followCamera.pure.js.map +1 -1
  92. package/Cameras/freeCamera.pure.js +373 -351
  93. package/Cameras/freeCamera.pure.js.map +1 -1
  94. package/Cameras/geospatialCamera.pure.d.ts +30 -7
  95. package/Cameras/geospatialCamera.pure.js +502 -457
  96. package/Cameras/geospatialCamera.pure.js.map +1 -1
  97. package/Cameras/geospatialCameraMovement.js +2 -2
  98. package/Cameras/geospatialCameraMovement.js.map +1 -1
  99. package/Cameras/targetCamera.pure.d.ts +7 -0
  100. package/Cameras/targetCamera.pure.js +550 -509
  101. package/Cameras/targetCamera.pure.js.map +1 -1
  102. package/Cameras/universalCamera.pure.js +98 -85
  103. package/Cameras/universalCamera.pure.js.map +1 -1
  104. package/Collisions/gpuPicker.d.ts +111 -4
  105. package/Collisions/gpuPicker.js +696 -119
  106. package/Collisions/gpuPicker.js.map +1 -1
  107. package/Compute/computeShader.pure.js +372 -355
  108. package/Compute/computeShader.pure.js.map +1 -1
  109. package/Culling/Helper/transformFeedbackBoundingHelper.pure.js +2 -2
  110. package/Decorators/nodeDecorator.d.ts +11 -1
  111. package/Decorators/nodeDecorator.js +43 -6
  112. package/Decorators/nodeDecorator.js.map +1 -1
  113. package/Engines/AbstractEngine/abstractEngine.loadFile.pure.js +8 -0
  114. package/Engines/AbstractEngine/abstractEngine.loadFile.pure.js.map +1 -1
  115. package/Engines/Native/nativeHelpers.js +15 -0
  116. package/Engines/Native/nativeHelpers.js.map +1 -1
  117. package/Engines/Native/nativeInterfaces.d.ts +7 -2
  118. package/Engines/Native/nativeInterfaces.js.map +1 -1
  119. package/Engines/Native/nativeRenderTargetWrapper.d.ts +5 -0
  120. package/Engines/Native/nativeRenderTargetWrapper.js +35 -1
  121. package/Engines/Native/nativeRenderTargetWrapper.js.map +1 -1
  122. package/Engines/Processors/shaderProcessor.js +5 -3
  123. package/Engines/Processors/shaderProcessor.js.map +1 -1
  124. package/Engines/WebGPU/Extensions/engine.videoTexture.pure.js +16 -3
  125. package/Engines/WebGPU/Extensions/engine.videoTexture.pure.js.map +1 -1
  126. package/Engines/WebGPU/webgpuClearQuad.pure.js +7 -1
  127. package/Engines/WebGPU/webgpuClearQuad.pure.js.map +1 -1
  128. package/Engines/abstractEngine.functions.d.ts +8 -2
  129. package/Engines/abstractEngine.functions.js +12 -4
  130. package/Engines/abstractEngine.functions.js.map +1 -1
  131. package/Engines/abstractEngine.pure.d.ts +20 -1
  132. package/Engines/abstractEngine.pure.js +21 -134
  133. package/Engines/abstractEngine.pure.js.map +1 -1
  134. package/Engines/engine.d.ts +208 -0
  135. package/Engines/engine.pure.js +0 -15
  136. package/Engines/engine.pure.js.map +1 -1
  137. package/Engines/nullEngine.pure.d.ts +66 -0
  138. package/Engines/nullEngine.pure.js +97 -0
  139. package/Engines/nullEngine.pure.js.map +1 -1
  140. package/Engines/thinEngine.pure.d.ts +0 -13
  141. package/Engines/thinEngine.pure.js +4 -23
  142. package/Engines/thinEngine.pure.js.map +1 -1
  143. package/Engines/thinNativeEngine.d.ts +0 -1
  144. package/Engines/thinNativeEngine.js +0 -1
  145. package/Engines/thinNativeEngine.js.map +1 -1
  146. package/Engines/thinNativeEngine.pure.d.ts +27 -0
  147. package/Engines/thinNativeEngine.pure.js +383 -17
  148. package/Engines/thinNativeEngine.pure.js.map +1 -1
  149. package/Engines/webgpuEngine.d.ts +1 -0
  150. package/Engines/webgpuEngine.js +1 -0
  151. package/Engines/webgpuEngine.js.map +1 -1
  152. package/Engines/webgpuEngine.pure.d.ts +9 -0
  153. package/Engines/webgpuEngine.pure.js +7 -0
  154. package/Engines/webgpuEngine.pure.js.map +1 -1
  155. package/FlowGraph/flowGraph.js +9 -0
  156. package/FlowGraph/flowGraph.js.map +1 -1
  157. package/FlowGraph/flowGraphContext.js +597 -584
  158. package/FlowGraph/flowGraphContext.js.map +1 -1
  159. package/FlowGraph/flowGraphDataConnection.pure.d.ts +14 -0
  160. package/FlowGraph/flowGraphDataConnection.pure.js +38 -1
  161. package/FlowGraph/flowGraphDataConnection.pure.js.map +1 -1
  162. package/FlowGraph/serialization.d.ts +11 -0
  163. package/FlowGraph/serialization.js +11 -1
  164. package/FlowGraph/serialization.js.map +1 -1
  165. package/FrameGraph/Node/Blocks/Layers/glowLayerBlock.pure.js +182 -170
  166. package/FrameGraph/Node/Blocks/Layers/glowLayerBlock.pure.js.map +1 -1
  167. package/FrameGraph/Node/Blocks/Layers/highlightLayerBlock.pure.js +196 -184
  168. package/FrameGraph/Node/Blocks/Layers/highlightLayerBlock.pure.js.map +1 -1
  169. package/FrameGraph/Node/Blocks/Layers/selectionOutlineLayerBlock.pure.js +222 -210
  170. package/FrameGraph/Node/Blocks/Layers/selectionOutlineLayerBlock.pure.js.map +1 -1
  171. package/FrameGraph/Node/Blocks/PostProcesses/basePostProcessBlock.js +123 -111
  172. package/FrameGraph/Node/Blocks/PostProcesses/basePostProcessBlock.js.map +1 -1
  173. package/FrameGraph/Node/Blocks/PostProcesses/baseWithPropertiesPostProcessBlock.js +158 -146
  174. package/FrameGraph/Node/Blocks/PostProcesses/baseWithPropertiesPostProcessBlock.js.map +1 -1
  175. package/FrameGraph/Node/Blocks/PostProcesses/blackAndWhitePostProcessBlock.pure.js +63 -51
  176. package/FrameGraph/Node/Blocks/PostProcesses/blackAndWhitePostProcessBlock.pure.js.map +1 -1
  177. package/FrameGraph/Node/Blocks/PostProcesses/bloomPostProcessBlock.pure.js +122 -110
  178. package/FrameGraph/Node/Blocks/PostProcesses/bloomPostProcessBlock.pure.js.map +1 -1
  179. package/FrameGraph/Node/Blocks/PostProcesses/blurPostProcessBlock.pure.js +76 -64
  180. package/FrameGraph/Node/Blocks/PostProcesses/blurPostProcessBlock.pure.js.map +1 -1
  181. package/FrameGraph/Node/Blocks/PostProcesses/chromaticAberrationPostProcessBlock.pure.js +89 -77
  182. package/FrameGraph/Node/Blocks/PostProcesses/chromaticAberrationPostProcessBlock.pure.js.map +1 -1
  183. package/FrameGraph/Node/Blocks/PostProcesses/circleOfConfusionPostProcessBlock.pure.js +134 -122
  184. package/FrameGraph/Node/Blocks/PostProcesses/circleOfConfusionPostProcessBlock.pure.js.map +1 -1
  185. package/FrameGraph/Node/Blocks/PostProcesses/colorCorrectionPostProcessBlock.pure.js +58 -46
  186. package/FrameGraph/Node/Blocks/PostProcesses/colorCorrectionPostProcessBlock.pure.js.map +1 -1
  187. package/FrameGraph/Node/Blocks/PostProcesses/convolutionPostProcessBlock.pure.js +107 -95
  188. package/FrameGraph/Node/Blocks/PostProcesses/convolutionPostProcessBlock.pure.js.map +1 -1
  189. package/FrameGraph/Node/Blocks/PostProcesses/depthOfFieldPostProcessBlock.pure.js +181 -169
  190. package/FrameGraph/Node/Blocks/PostProcesses/depthOfFieldPostProcessBlock.pure.js.map +1 -1
  191. package/FrameGraph/Node/Blocks/PostProcesses/extractHighlightsPostProcessBlock.pure.js +63 -51
  192. package/FrameGraph/Node/Blocks/PostProcesses/extractHighlightsPostProcessBlock.pure.js.map +1 -1
  193. package/FrameGraph/Node/Blocks/PostProcesses/filterPostProcessBlock.pure.js +63 -51
  194. package/FrameGraph/Node/Blocks/PostProcesses/filterPostProcessBlock.pure.js.map +1 -1
  195. package/FrameGraph/Node/Blocks/PostProcesses/grainPostProcessBlock.pure.js +76 -64
  196. package/FrameGraph/Node/Blocks/PostProcesses/grainPostProcessBlock.pure.js.map +1 -1
  197. package/FrameGraph/Node/Blocks/PostProcesses/imageProcessingPostProcessBlock.pure.js +246 -234
  198. package/FrameGraph/Node/Blocks/PostProcesses/imageProcessingPostProcessBlock.pure.js.map +1 -1
  199. package/FrameGraph/Node/Blocks/PostProcesses/motionBlurPostProcessBlock.pure.js +108 -96
  200. package/FrameGraph/Node/Blocks/PostProcesses/motionBlurPostProcessBlock.pure.js.map +1 -1
  201. package/FrameGraph/Node/Blocks/PostProcesses/screenSpaceCurvaturePostProcessBlock.pure.js +87 -75
  202. package/FrameGraph/Node/Blocks/PostProcesses/screenSpaceCurvaturePostProcessBlock.pure.js.map +1 -1
  203. package/FrameGraph/Node/Blocks/PostProcesses/sharpenPostProcessBlock.pure.js +76 -64
  204. package/FrameGraph/Node/Blocks/PostProcesses/sharpenPostProcessBlock.pure.js.map +1 -1
  205. package/FrameGraph/Node/Blocks/PostProcesses/ssao2PostProcessBlock.pure.js +313 -301
  206. package/FrameGraph/Node/Blocks/PostProcesses/ssao2PostProcessBlock.pure.js.map +1 -1
  207. package/FrameGraph/Node/Blocks/PostProcesses/ssrPostProcessBlock.pure.js +502 -490
  208. package/FrameGraph/Node/Blocks/PostProcesses/ssrPostProcessBlock.pure.js.map +1 -1
  209. package/FrameGraph/Node/Blocks/PostProcesses/taaPostProcessBlock.pure.js +147 -135
  210. package/FrameGraph/Node/Blocks/PostProcesses/taaPostProcessBlock.pure.js.map +1 -1
  211. package/FrameGraph/Node/Blocks/PostProcesses/tonemapPostProcessBlock.pure.js +90 -78
  212. package/FrameGraph/Node/Blocks/PostProcesses/tonemapPostProcessBlock.pure.js.map +1 -1
  213. package/FrameGraph/Node/Blocks/PostProcesses/volumetricLightingBlock.pure.js +179 -167
  214. package/FrameGraph/Node/Blocks/PostProcesses/volumetricLightingBlock.pure.js.map +1 -1
  215. package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.js +462 -451
  216. package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.js.map +1 -1
  217. package/FrameGraph/Node/Blocks/Rendering/baseShadowGeneratorBlock.js +265 -253
  218. package/FrameGraph/Node/Blocks/Rendering/baseShadowGeneratorBlock.js.map +1 -1
  219. package/FrameGraph/Node/Blocks/Rendering/csmShadowGeneratorBlock.pure.js +204 -192
  220. package/FrameGraph/Node/Blocks/Rendering/csmShadowGeneratorBlock.pure.js.map +1 -1
  221. package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.pure.js +611 -550
  222. package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.pure.js.map +1 -1
  223. package/FrameGraph/Node/Blocks/Rendering/iblShadowsRendererBlock.pure.js +320 -308
  224. package/FrameGraph/Node/Blocks/Rendering/iblShadowsRendererBlock.pure.js.map +1 -1
  225. package/FrameGraph/Node/Blocks/Rendering/utilityLayerRendererBlock.pure.js +87 -75
  226. package/FrameGraph/Node/Blocks/Rendering/utilityLayerRendererBlock.pure.js.map +1 -1
  227. package/FrameGraph/Node/Blocks/Textures/clearBlock.pure.js +154 -142
  228. package/FrameGraph/Node/Blocks/Textures/clearBlock.pure.js.map +1 -1
  229. package/FrameGraph/Node/Blocks/Textures/copyTextureBlock.pure.js +150 -138
  230. package/FrameGraph/Node/Blocks/Textures/copyTextureBlock.pure.js.map +1 -1
  231. package/FrameGraph/Node/Blocks/inputBlock.pure.js +270 -256
  232. package/FrameGraph/Node/Blocks/inputBlock.pure.js.map +1 -1
  233. package/FrameGraph/Node/Blocks/lightingVolumeBlock.pure.js +95 -83
  234. package/FrameGraph/Node/Blocks/lightingVolumeBlock.pure.js.map +1 -1
  235. package/FrameGraph/Node/nodeRenderGraph.js +715 -693
  236. package/FrameGraph/Node/nodeRenderGraph.js.map +1 -1
  237. package/FrameGraph/Node/nodeRenderGraphBlock.js +548 -533
  238. package/FrameGraph/Node/nodeRenderGraphBlock.js.map +1 -1
  239. package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsAccumulationTask.d.ts +2 -2
  240. package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsAccumulationTask.js +43 -51
  241. package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsAccumulationTask.js.map +1 -1
  242. package/FrameGraph/Tasks/Rendering/iblShadowsRendererTask.d.ts +0 -1
  243. package/FrameGraph/Tasks/Rendering/iblShadowsRendererTask.js +0 -1
  244. package/FrameGraph/Tasks/Rendering/iblShadowsRendererTask.js.map +1 -1
  245. package/FrameGraph/Tasks/Rendering/iblShadowsRendererTask.pure.d.ts +0 -1
  246. package/FrameGraph/Tasks/Rendering/iblShadowsRendererTask.pure.js +66 -35
  247. package/FrameGraph/Tasks/Rendering/iblShadowsRendererTask.pure.js.map +1 -1
  248. package/Helpers/environmentHelper.js +2 -2
  249. package/Helpers/environmentHelper.js.map +1 -1
  250. package/Layers/effectLayer.js +529 -519
  251. package/Layers/effectLayer.js.map +1 -1
  252. package/Layers/glowLayer.pure.js +428 -413
  253. package/Layers/glowLayer.pure.js.map +1 -1
  254. package/Layers/highlightLayer.pure.js +473 -458
  255. package/Layers/highlightLayer.pure.js.map +1 -1
  256. package/Layers/selectionOutlineLayer.pure.js +360 -345
  257. package/Layers/selectionOutlineLayer.pure.js.map +1 -1
  258. package/Lights/Clustered/clusteredLightContainer.pure.d.ts +1 -1
  259. package/Lights/Clustered/clusteredLightContainer.pure.js +583 -558
  260. package/Lights/Clustered/clusteredLightContainer.pure.js.map +1 -1
  261. package/Lights/Shadows/shadowGenerator.js +6 -1
  262. package/Lights/Shadows/shadowGenerator.js.map +1 -1
  263. package/Lights/areaLight.pure.js +61 -39
  264. package/Lights/areaLight.pure.js.map +1 -1
  265. package/Lights/directionalLight.pure.js +308 -284
  266. package/Lights/directionalLight.pure.js.map +1 -1
  267. package/Lights/hemisphericLight.pure.js +123 -104
  268. package/Lights/hemisphericLight.pure.js.map +1 -1
  269. package/Lights/light.d.ts +5 -3
  270. package/Lights/light.js +869 -827
  271. package/Lights/light.js.map +1 -1
  272. package/Lights/pointLight.pure.js +185 -174
  273. package/Lights/pointLight.pure.js.map +1 -1
  274. package/Lights/rectAreaLight.pure.d.ts +17 -0
  275. package/Lights/rectAreaLight.pure.js +238 -159
  276. package/Lights/rectAreaLight.pure.js.map +1 -1
  277. package/Lights/shadowLight.js +280 -268
  278. package/Lights/shadowLight.js.map +1 -1
  279. package/Lights/spotLight.pure.js +460 -427
  280. package/Lights/spotLight.pure.js.map +1 -1
  281. package/Loading/Plugins/babylonFileLoader.pure.js +17 -5
  282. package/Loading/Plugins/babylonFileLoader.pure.js.map +1 -1
  283. package/Loading/sceneLoader.d.ts +5 -1
  284. package/Loading/sceneLoader.js +299 -402
  285. package/Loading/sceneLoader.js.map +1 -1
  286. package/Materials/Background/backgroundMaterial.pure.d.ts +18 -18
  287. package/Materials/Background/backgroundMaterial.pure.js +949 -794
  288. package/Materials/Background/backgroundMaterial.pure.js.map +1 -1
  289. package/Materials/GaussianSplatting/gaussianSplattingGpuPickingMaterialPlugin.pure.d.ts +15 -0
  290. package/Materials/GaussianSplatting/gaussianSplattingGpuPickingMaterialPlugin.pure.js +34 -1
  291. package/Materials/GaussianSplatting/gaussianSplattingGpuPickingMaterialPlugin.pure.js.map +1 -1
  292. package/Materials/GaussianSplatting/gaussianSplattingMaterial.pure.d.ts +9 -0
  293. package/Materials/GaussianSplatting/gaussianSplattingMaterial.pure.js +26 -2
  294. package/Materials/GaussianSplatting/gaussianSplattingMaterial.pure.js.map +1 -1
  295. package/Materials/GaussianSplatting/gaussianSplattingSolidColorMaterialPlugin.pure.d.ts +2 -1
  296. package/Materials/GaussianSplatting/gaussianSplattingSolidColorMaterialPlugin.pure.js +169 -149
  297. package/Materials/GaussianSplatting/gaussianSplattingSolidColorMaterialPlugin.pure.js.map +1 -1
  298. package/Materials/Node/Blocks/Dual/imageSourceBlock.pure.js +1 -1
  299. package/Materials/Node/Blocks/Dual/lightBlock.pure.js +442 -429
  300. package/Materials/Node/Blocks/Dual/lightBlock.pure.js.map +1 -1
  301. package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.pure.js +396 -383
  302. package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.pure.js.map +1 -1
  303. package/Materials/Node/Blocks/Dual/sceneDepthBlock.pure.js +237 -220
  304. package/Materials/Node/Blocks/Dual/sceneDepthBlock.pure.js.map +1 -1
  305. package/Materials/Node/Blocks/Dual/textureBlock.pure.js +1 -1
  306. package/Materials/Node/Blocks/Fragment/ambientOcclusionBlock.pure.js +150 -133
  307. package/Materials/Node/Blocks/Fragment/ambientOcclusionBlock.pure.js.map +1 -1
  308. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.pure.js +265 -250
  309. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.pure.js.map +1 -1
  310. package/Materials/Node/Blocks/Fragment/heightToNormalBlock.pure.js +159 -142
  311. package/Materials/Node/Blocks/Fragment/heightToNormalBlock.pure.js.map +1 -1
  312. package/Materials/Node/Blocks/Fragment/imageProcessingBlock.pure.js +214 -201
  313. package/Materials/Node/Blocks/Fragment/imageProcessingBlock.pure.js.map +1 -1
  314. package/Materials/Node/Blocks/Fragment/perturbNormalBlock.pure.js +419 -400
  315. package/Materials/Node/Blocks/Fragment/perturbNormalBlock.pure.js.map +1 -1
  316. package/Materials/Node/Blocks/GaussianSplatting/gaussianSplattingBlock.pure.js +3 -1
  317. package/Materials/Node/Blocks/GaussianSplatting/gaussianSplattingBlock.pure.js.map +1 -1
  318. package/Materials/Node/Blocks/PBR/clearCoatBlock.pure.js +302 -289
  319. package/Materials/Node/Blocks/PBR/clearCoatBlock.pure.js.map +1 -1
  320. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.pure.js +1327 -1272
  321. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.pure.js.map +1 -1
  322. package/Materials/Node/Blocks/PBR/reflectionBlock.pure.js +352 -337
  323. package/Materials/Node/Blocks/PBR/reflectionBlock.pure.js.map +1 -1
  324. package/Materials/Node/Blocks/PBR/refractionBlock.pure.js +297 -277
  325. package/Materials/Node/Blocks/PBR/refractionBlock.pure.js.map +1 -1
  326. package/Materials/Node/Blocks/PBR/sheenBlock.pure.js +146 -131
  327. package/Materials/Node/Blocks/PBR/sheenBlock.pure.js.map +1 -1
  328. package/Materials/Node/Blocks/PBR/subSurfaceBlock.pure.js +158 -145
  329. package/Materials/Node/Blocks/PBR/subSurfaceBlock.pure.js.map +1 -1
  330. package/Materials/Node/Blocks/clampBlock.pure.js +92 -77
  331. package/Materials/Node/Blocks/clampBlock.pure.js.map +1 -1
  332. package/Materials/Node/Blocks/cloudBlock.pure.js +145 -132
  333. package/Materials/Node/Blocks/cloudBlock.pure.js.map +1 -1
  334. package/Materials/Node/Blocks/conditionalBlock.pure.js +182 -169
  335. package/Materials/Node/Blocks/conditionalBlock.pure.js.map +1 -1
  336. package/Materials/Node/Blocks/curveBlock.pure.js +259 -246
  337. package/Materials/Node/Blocks/curveBlock.pure.js.map +1 -1
  338. package/Materials/Node/Blocks/debugBlock.pure.js +119 -106
  339. package/Materials/Node/Blocks/debugBlock.pure.js.map +1 -1
  340. package/Materials/Node/Blocks/loopBlock.pure.js +123 -110
  341. package/Materials/Node/Blocks/loopBlock.pure.js.map +1 -1
  342. package/Materials/Node/Blocks/meshAttributeExistsBlock.pure.js +185 -172
  343. package/Materials/Node/Blocks/meshAttributeExistsBlock.pure.js.map +1 -1
  344. package/Materials/Node/Blocks/remapBlock.pure.js +127 -112
  345. package/Materials/Node/Blocks/remapBlock.pure.js.map +1 -1
  346. package/Materials/Node/Blocks/transformBlock.pure.js +196 -185
  347. package/Materials/Node/Blocks/transformBlock.pure.js.map +1 -1
  348. package/Materials/Node/Blocks/triPlanarBlock.pure.js +451 -438
  349. package/Materials/Node/Blocks/triPlanarBlock.pure.js.map +1 -1
  350. package/Materials/Node/Blocks/trigonometryBlock.pure.js +184 -171
  351. package/Materials/Node/Blocks/trigonometryBlock.pure.js.map +1 -1
  352. package/Materials/Node/Blocks/waveBlock.pure.js +97 -84
  353. package/Materials/Node/Blocks/waveBlock.pure.js.map +1 -1
  354. package/Materials/Node/Blocks/worleyNoise3DBlock.pure.js +276 -263
  355. package/Materials/Node/Blocks/worleyNoise3DBlock.pure.js.map +1 -1
  356. package/Materials/Node/nodeMaterial.pure.js +1765 -1737
  357. package/Materials/Node/nodeMaterial.pure.js.map +1 -1
  358. package/Materials/Node/nodeMaterialBuildState.d.ts +3 -3
  359. package/Materials/PBR/openpbrMaterial.pure.d.ts +102 -102
  360. package/Materials/PBR/openpbrMaterial.pure.js +3115 -2243
  361. package/Materials/PBR/openpbrMaterial.pure.js.map +1 -1
  362. package/Materials/PBR/pbrAnisotropicConfiguration.d.ts +3 -3
  363. package/Materials/PBR/pbrAnisotropicConfiguration.js +255 -227
  364. package/Materials/PBR/pbrAnisotropicConfiguration.js.map +1 -1
  365. package/Materials/PBR/pbrBRDFConfiguration.d.ts +9 -9
  366. package/Materials/PBR/pbrBRDFConfiguration.js +203 -155
  367. package/Materials/PBR/pbrBRDFConfiguration.js.map +1 -1
  368. package/Materials/PBR/pbrBaseMaterial.pure.d.ts +1 -1
  369. package/Materials/PBR/pbrBaseMaterial.pure.js +1751 -1736
  370. package/Materials/PBR/pbrBaseMaterial.pure.js.map +1 -1
  371. package/Materials/PBR/pbrBaseSimpleMaterial.d.ts +13 -13
  372. package/Materials/PBR/pbrBaseSimpleMaterial.js +205 -117
  373. package/Materials/PBR/pbrBaseSimpleMaterial.js.map +1 -1
  374. package/Materials/PBR/pbrClearCoatConfiguration.d.ts +9 -9
  375. package/Materials/PBR/pbrClearCoatConfiguration.js +464 -406
  376. package/Materials/PBR/pbrClearCoatConfiguration.js.map +1 -1
  377. package/Materials/PBR/pbrIridescenceConfiguration.d.ts +3 -3
  378. package/Materials/PBR/pbrIridescenceConfiguration.js +271 -239
  379. package/Materials/PBR/pbrIridescenceConfiguration.js.map +1 -1
  380. package/Materials/PBR/pbrMaterial.pure.d.ts +66 -66
  381. package/Materials/PBR/pbrMaterial.pure.js +1041 -685
  382. package/Materials/PBR/pbrMaterial.pure.js.map +1 -1
  383. package/Materials/PBR/pbrMetallicRoughnessMaterial.pure.d.ts +5 -5
  384. package/Materials/PBR/pbrMetallicRoughnessMaterial.pure.js +176 -115
  385. package/Materials/PBR/pbrMetallicRoughnessMaterial.pure.js.map +1 -1
  386. package/Materials/PBR/pbrSheenConfiguration.d.ts +7 -7
  387. package/Materials/PBR/pbrSheenConfiguration.js +314 -270
  388. package/Materials/PBR/pbrSheenConfiguration.js.map +1 -1
  389. package/Materials/PBR/pbrSpecularGlossinessMaterial.pure.d.ts +5 -5
  390. package/Materials/PBR/pbrSpecularGlossinessMaterial.pure.js +172 -117
  391. package/Materials/PBR/pbrSpecularGlossinessMaterial.pure.js.map +1 -1
  392. package/Materials/PBR/pbrSubSurfaceConfiguration.d.ts +16 -16
  393. package/Materials/PBR/pbrSubSurfaceConfiguration.js +864 -764
  394. package/Materials/PBR/pbrSubSurfaceConfiguration.js.map +1 -1
  395. package/Materials/Textures/HTML/htmlInCanvasPolyfill.d.ts +43 -0
  396. package/Materials/Textures/HTML/htmlInCanvasPolyfill.js +64 -0
  397. package/Materials/Textures/HTML/htmlInCanvasPolyfill.js.map +1 -0
  398. package/Materials/Textures/HTML/htmlInteractionManager.d.ts +69 -0
  399. package/Materials/Textures/HTML/htmlInteractionManager.js +130 -0
  400. package/Materials/Textures/HTML/htmlInteractionManager.js.map +1 -0
  401. package/Materials/Textures/HTML/htmlRaycastInteractionManager.d.ts +84 -0
  402. package/Materials/Textures/HTML/htmlRaycastInteractionManager.js +246 -0
  403. package/Materials/Textures/HTML/htmlRaycastInteractionManager.js.map +1 -0
  404. package/Materials/Textures/HTML/htmlTexture.d.ts +148 -0
  405. package/Materials/Textures/HTML/htmlTexture.js +455 -0
  406. package/Materials/Textures/HTML/htmlTexture.js.map +1 -0
  407. package/Materials/Textures/HTML/index.d.ts +4 -0
  408. package/Materials/Textures/HTML/index.js +5 -0
  409. package/Materials/Textures/HTML/index.js.map +1 -0
  410. package/Materials/Textures/HTML/pure.d.ts +5 -0
  411. package/Materials/Textures/HTML/pure.js +6 -0
  412. package/Materials/Textures/HTML/pure.js.map +1 -0
  413. package/Materials/Textures/Procedurals/proceduralTexture.pure.js +671 -643
  414. package/Materials/Textures/Procedurals/proceduralTexture.pure.js.map +1 -1
  415. package/Materials/Textures/baseTexture.pure.js +880 -825
  416. package/Materials/Textures/baseTexture.pure.js.map +1 -1
  417. package/Materials/Textures/cubeTexture.d.ts +0 -1
  418. package/Materials/Textures/cubeTexture.js +0 -1
  419. package/Materials/Textures/cubeTexture.js.map +1 -1
  420. package/Materials/Textures/cubeTexture.pure.js +368 -333
  421. package/Materials/Textures/cubeTexture.pure.js.map +1 -1
  422. package/Materials/Textures/dynamicTexture.d.ts +0 -1
  423. package/Materials/Textures/dynamicTexture.js +0 -1
  424. package/Materials/Textures/dynamicTexture.js.map +1 -1
  425. package/Materials/Textures/dynamicTexture.pure.js +2 -0
  426. package/Materials/Textures/dynamicTexture.pure.js.map +1 -1
  427. package/Materials/Textures/htmlElementTexture.d.ts +0 -2
  428. package/Materials/Textures/htmlElementTexture.js +0 -2
  429. package/Materials/Textures/htmlElementTexture.js.map +1 -1
  430. package/Materials/Textures/htmlElementTexture.pure.js +4 -0
  431. package/Materials/Textures/htmlElementTexture.pure.js.map +1 -1
  432. package/Materials/Textures/index.d.ts +1 -0
  433. package/Materials/Textures/index.js +1 -1
  434. package/Materials/Textures/index.js.map +1 -1
  435. package/Materials/Textures/multiRenderTarget.d.ts +0 -1
  436. package/Materials/Textures/multiRenderTarget.js +0 -1
  437. package/Materials/Textures/multiRenderTarget.js.map +1 -1
  438. package/Materials/Textures/multiRenderTarget.pure.js +2 -0
  439. package/Materials/Textures/multiRenderTarget.pure.js.map +1 -1
  440. package/Materials/Textures/pure.d.ts +1 -0
  441. package/Materials/Textures/pure.js +1 -0
  442. package/Materials/Textures/pure.js.map +1 -1
  443. package/Materials/Textures/texture.pure.js +961 -923
  444. package/Materials/Textures/texture.pure.js.map +1 -1
  445. package/Materials/Textures/videoTexture.pure.d.ts +3 -0
  446. package/Materials/Textures/videoTexture.pure.js +450 -401
  447. package/Materials/Textures/videoTexture.pure.js.map +1 -1
  448. package/Materials/colorCurves.pure.js +510 -477
  449. package/Materials/colorCurves.pure.js.map +1 -1
  450. package/Materials/effect.pure.js +0 -7
  451. package/Materials/effect.pure.js.map +1 -1
  452. package/Materials/imageProcessing.js +12 -4
  453. package/Materials/imageProcessing.js.map +1 -1
  454. package/Materials/imageProcessingConfiguration.pure.js +647 -587
  455. package/Materials/imageProcessingConfiguration.pure.js.map +1 -1
  456. package/Materials/material.decalMapConfiguration.pure.d.ts +2 -2
  457. package/Materials/material.decalMapConfiguration.pure.js +149 -130
  458. package/Materials/material.decalMapConfiguration.pure.js.map +1 -1
  459. package/Materials/material.detailMapConfiguration.d.ts +3 -3
  460. package/Materials/material.detailMapConfiguration.js +213 -175
  461. package/Materials/material.detailMapConfiguration.js.map +1 -1
  462. package/Materials/material.pure.js +1815 -1721
  463. package/Materials/material.pure.js.map +1 -1
  464. package/Materials/materialPluginBase.pure.js +270 -249
  465. package/Materials/materialPluginBase.pure.js.map +1 -1
  466. package/Materials/materialPluginManager.pure.js +18 -8
  467. package/Materials/materialPluginManager.pure.js.map +1 -1
  468. package/Materials/materialStencilState.js +211 -200
  469. package/Materials/materialStencilState.js.map +1 -1
  470. package/Materials/meshDebugPluginMaterial.pure.d.ts +2 -2
  471. package/Materials/meshDebugPluginMaterial.pure.js +397 -275
  472. package/Materials/meshDebugPluginMaterial.pure.js.map +1 -1
  473. package/Materials/standardMaterial.pure.d.ts +32 -32
  474. package/Materials/standardMaterial.pure.js +1804 -1394
  475. package/Materials/standardMaterial.pure.js.map +1 -1
  476. package/Maths/math.color.pure.js +5 -5
  477. package/Maths/math.functions.js +38 -30
  478. package/Maths/math.functions.js.map +1 -1
  479. package/Maths/math.vector.pure.js +25 -25
  480. package/Meshes/GaussianSplatting/gaussianSplattingMesh.pure.js +18 -8
  481. package/Meshes/GaussianSplatting/gaussianSplattingMesh.pure.js.map +1 -1
  482. package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.pure.d.ts +86 -1
  483. package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.pure.js +255 -104
  484. package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.pure.js.map +1 -1
  485. package/Meshes/GaussianSplatting/gaussianSplattingSortWorker.d.ts +39 -0
  486. package/Meshes/GaussianSplatting/gaussianSplattingSortWorker.js +322 -0
  487. package/Meshes/GaussianSplatting/gaussianSplattingSortWorker.js.map +1 -0
  488. package/Meshes/GreasedLine/greasedLineMesh.pure.js +4 -4
  489. package/Meshes/GreasedLine/greasedLineRibbonMesh.pure.js +3 -3
  490. package/Meshes/Node/Blocks/Instances/instantiateBaseBlock.js +107 -94
  491. package/Meshes/Node/Blocks/Instances/instantiateBaseBlock.js.map +1 -1
  492. package/Meshes/Node/Blocks/Instances/instantiateOnFacesBlock.pure.js +276 -263
  493. package/Meshes/Node/Blocks/Instances/instantiateOnFacesBlock.pure.js.map +1 -1
  494. package/Meshes/Node/Blocks/Instances/instantiateOnVerticesBlock.pure.js +247 -232
  495. package/Meshes/Node/Blocks/Instances/instantiateOnVerticesBlock.pure.js.map +1 -1
  496. package/Meshes/Node/Blocks/Instances/instantiateOnVolumeBlock.pure.js +299 -284
  497. package/Meshes/Node/Blocks/Instances/instantiateOnVolumeBlock.pure.js.map +1 -1
  498. package/Meshes/Node/Blocks/Set/aggregatorBlock.pure.js +196 -181
  499. package/Meshes/Node/Blocks/Set/aggregatorBlock.pure.js.map +1 -1
  500. package/Meshes/Node/Blocks/Set/latticeBlock.pure.js +198 -179
  501. package/Meshes/Node/Blocks/Set/latticeBlock.pure.js.map +1 -1
  502. package/Meshes/Node/Blocks/Set/setColorsBlock.pure.js +151 -138
  503. package/Meshes/Node/Blocks/Set/setColorsBlock.pure.js.map +1 -1
  504. package/Meshes/Node/Blocks/Set/setMaterialIDBlock.pure.js +107 -94
  505. package/Meshes/Node/Blocks/Set/setMaterialIDBlock.pure.js.map +1 -1
  506. package/Meshes/Node/Blocks/Set/setNormalsBlock.pure.js +138 -125
  507. package/Meshes/Node/Blocks/Set/setNormalsBlock.pure.js.map +1 -1
  508. package/Meshes/Node/Blocks/Set/setPositionsBlock.pure.js +213 -200
  509. package/Meshes/Node/Blocks/Set/setPositionsBlock.pure.js.map +1 -1
  510. package/Meshes/Node/Blocks/Set/setTangentsBlock.pure.js +138 -125
  511. package/Meshes/Node/Blocks/Set/setTangentsBlock.pure.js.map +1 -1
  512. package/Meshes/Node/Blocks/Set/setUVsBlock.pure.js +179 -164
  513. package/Meshes/Node/Blocks/Set/setUVsBlock.pure.js.map +1 -1
  514. package/Meshes/Node/Blocks/Sources/boxBlock.pure.js +183 -170
  515. package/Meshes/Node/Blocks/Sources/boxBlock.pure.js.map +1 -1
  516. package/Meshes/Node/Blocks/Sources/capsuleBlock.pure.js +125 -112
  517. package/Meshes/Node/Blocks/Sources/capsuleBlock.pure.js.map +1 -1
  518. package/Meshes/Node/Blocks/Sources/cylinderBlock.pure.js +153 -140
  519. package/Meshes/Node/Blocks/Sources/cylinderBlock.pure.js.map +1 -1
  520. package/Meshes/Node/Blocks/Sources/discBlock.pure.js +112 -99
  521. package/Meshes/Node/Blocks/Sources/discBlock.pure.js.map +1 -1
  522. package/Meshes/Node/Blocks/Sources/gridBlock.pure.js +133 -120
  523. package/Meshes/Node/Blocks/Sources/gridBlock.pure.js.map +1 -1
  524. package/Meshes/Node/Blocks/Sources/icoSphereBlock.pure.js +128 -115
  525. package/Meshes/Node/Blocks/Sources/icoSphereBlock.pure.js.map +1 -1
  526. package/Meshes/Node/Blocks/Sources/meshBlock.pure.js +116 -103
  527. package/Meshes/Node/Blocks/Sources/meshBlock.pure.js.map +1 -1
  528. package/Meshes/Node/Blocks/Sources/planeBlock.pure.js +160 -147
  529. package/Meshes/Node/Blocks/Sources/planeBlock.pure.js.map +1 -1
  530. package/Meshes/Node/Blocks/Sources/sphereBlock.pure.js +144 -131
  531. package/Meshes/Node/Blocks/Sources/sphereBlock.pure.js.map +1 -1
  532. package/Meshes/Node/Blocks/Sources/torusBlock.pure.js +112 -99
  533. package/Meshes/Node/Blocks/Sources/torusBlock.pure.js.map +1 -1
  534. package/Meshes/Node/Blocks/Textures/geometryTextureFetchBlock.pure.js +200 -185
  535. package/Meshes/Node/Blocks/Textures/geometryTextureFetchBlock.pure.js.map +1 -1
  536. package/Meshes/Node/Blocks/bevelBlock.pure.js +111 -98
  537. package/Meshes/Node/Blocks/bevelBlock.pure.js.map +1 -1
  538. package/Meshes/Node/Blocks/booleanGeometryBlock.pure.js +182 -165
  539. package/Meshes/Node/Blocks/booleanGeometryBlock.pure.js.map +1 -1
  540. package/Meshes/Node/Blocks/cleanGeometryBlock.pure.js +89 -76
  541. package/Meshes/Node/Blocks/cleanGeometryBlock.pure.js.map +1 -1
  542. package/Meshes/Node/Blocks/conditionBlock.pure.js +184 -169
  543. package/Meshes/Node/Blocks/conditionBlock.pure.js.map +1 -1
  544. package/Meshes/Node/Blocks/extrudeGeometryBlock.pure.js +270 -255
  545. package/Meshes/Node/Blocks/extrudeGeometryBlock.pure.js.map +1 -1
  546. package/Meshes/Node/Blocks/geometryCollectionBlock.pure.js +172 -159
  547. package/Meshes/Node/Blocks/geometryCollectionBlock.pure.js.map +1 -1
  548. package/Meshes/Node/Blocks/geometryCurveBlock.pure.js +230 -217
  549. package/Meshes/Node/Blocks/geometryCurveBlock.pure.js.map +1 -1
  550. package/Meshes/Node/Blocks/geometryEaseBlock.pure.js +256 -245
  551. package/Meshes/Node/Blocks/geometryEaseBlock.pure.js.map +1 -1
  552. package/Meshes/Node/Blocks/geometryOptimizeBlock.pure.js +206 -189
  553. package/Meshes/Node/Blocks/geometryOptimizeBlock.pure.js.map +1 -1
  554. package/Meshes/Node/Blocks/geometryTransformBlock.pure.js +166 -153
  555. package/Meshes/Node/Blocks/geometryTransformBlock.pure.js.map +1 -1
  556. package/Meshes/Node/Blocks/geometryTrigonometryBlock.pure.js +221 -208
  557. package/Meshes/Node/Blocks/geometryTrigonometryBlock.pure.js.map +1 -1
  558. package/Meshes/Node/Blocks/mappingBlock.pure.js +150 -137
  559. package/Meshes/Node/Blocks/mappingBlock.pure.js.map +1 -1
  560. package/Meshes/Node/Blocks/mathBlock.pure.js +269 -256
  561. package/Meshes/Node/Blocks/mathBlock.pure.js.map +1 -1
  562. package/Meshes/Node/Blocks/mergeGeometryBlock.pure.js +141 -128
  563. package/Meshes/Node/Blocks/mergeGeometryBlock.pure.js.map +1 -1
  564. package/Meshes/Node/Blocks/randomBlock.pure.js +161 -148
  565. package/Meshes/Node/Blocks/randomBlock.pure.js.map +1 -1
  566. package/Meshes/Node/Blocks/subdivideBlock.pure.js +102 -87
  567. package/Meshes/Node/Blocks/subdivideBlock.pure.js.map +1 -1
  568. package/Meshes/Node/nodeGeometry.js +560 -538
  569. package/Meshes/Node/nodeGeometry.js.map +1 -1
  570. package/Meshes/Node/nodeGeometryBlock.js +473 -458
  571. package/Meshes/Node/nodeGeometryBlock.js.map +1 -1
  572. package/Meshes/abstractMesh.pure.js +2218 -2207
  573. package/Meshes/abstractMesh.pure.js.map +1 -1
  574. package/Meshes/geometry.js +30 -15
  575. package/Meshes/geometry.js.map +1 -1
  576. package/Meshes/mesh.pure.js +26 -14
  577. package/Meshes/mesh.pure.js.map +1 -1
  578. package/Meshes/mesh.vertexData.js +1665 -1655
  579. package/Meshes/mesh.vertexData.js.map +1 -1
  580. package/Meshes/transformNode.pure.js +1400 -1372
  581. package/Meshes/transformNode.pure.js.map +1 -1
  582. package/Misc/decorators.d.ts +34 -19
  583. package/Misc/decorators.functions.d.ts +33 -2
  584. package/Misc/decorators.functions.js +114 -35
  585. package/Misc/decorators.functions.js.map +1 -1
  586. package/Misc/decorators.js +96 -68
  587. package/Misc/decorators.js.map +1 -1
  588. package/Misc/decorators.serialization.js +47 -40
  589. package/Misc/decorators.serialization.js.map +1 -1
  590. package/Misc/decorators.serializationUtilities.d.ts +24 -0
  591. package/Misc/decorators.serializationUtilities.js +20 -0
  592. package/Misc/decorators.serializationUtilities.js.map +1 -0
  593. package/Misc/dumpTools.pure.js +43 -33
  594. package/Misc/dumpTools.pure.js.map +1 -1
  595. package/Misc/fileTools.pure.js +8 -0
  596. package/Misc/fileTools.pure.js.map +1 -1
  597. package/Misc/observable.pure.js +0 -7
  598. package/Misc/observable.pure.js.map +1 -1
  599. package/Misc/snapshotRenderingHelper.d.ts +4 -1
  600. package/Misc/snapshotRenderingHelper.js.map +1 -1
  601. package/Misc/symbolMetadataPolyfill.d.ts +11 -0
  602. package/Misc/symbolMetadataPolyfill.js +22 -0
  603. package/Misc/symbolMetadataPolyfill.js.map +1 -0
  604. package/Misc/tools.pure.js +2 -2
  605. package/Misc/tools.pure.js.map +1 -1
  606. package/Morph/morphTarget.js +382 -365
  607. package/Morph/morphTarget.js.map +1 -1
  608. package/Particles/Node/Blocks/Conditions/particleConditionBlock.pure.js +160 -145
  609. package/Particles/Node/Blocks/Conditions/particleConditionBlock.pure.js.map +1 -1
  610. package/Particles/Node/Blocks/Emitters/coneShapeBlock.pure.js +187 -174
  611. package/Particles/Node/Blocks/Emitters/coneShapeBlock.pure.js.map +1 -1
  612. package/Particles/Node/Blocks/Emitters/meshShapeBlock.pure.js +238 -219
  613. package/Particles/Node/Blocks/Emitters/meshShapeBlock.pure.js.map +1 -1
  614. package/Particles/Node/Blocks/Emitters/setupSpriteSheetBlock.pure.js +140 -115
  615. package/Particles/Node/Blocks/Emitters/setupSpriteSheetBlock.pure.js.map +1 -1
  616. package/Particles/Node/Blocks/Emitters/sphereShapeBlock.pure.js +157 -144
  617. package/Particles/Node/Blocks/Emitters/sphereShapeBlock.pure.js.map +1 -1
  618. package/Particles/Node/Blocks/Triggers/particleTriggerBlock.pure.js +133 -119
  619. package/Particles/Node/Blocks/Triggers/particleTriggerBlock.pure.js.map +1 -1
  620. package/Particles/Node/Blocks/Update/alignAngleBlock.pure.js +93 -80
  621. package/Particles/Node/Blocks/Update/alignAngleBlock.pure.js.map +1 -1
  622. package/Particles/Node/Blocks/particleDebugBlock.pure.js +117 -105
  623. package/Particles/Node/Blocks/particleDebugBlock.pure.js.map +1 -1
  624. package/Particles/Node/Blocks/particleFloatToIntBlock.pure.js +105 -92
  625. package/Particles/Node/Blocks/particleFloatToIntBlock.pure.js.map +1 -1
  626. package/Particles/Node/Blocks/particleGradientValueBlock.pure.js +82 -69
  627. package/Particles/Node/Blocks/particleGradientValueBlock.pure.js.map +1 -1
  628. package/Particles/Node/Blocks/particleLocalVariableBlock.pure.js +113 -101
  629. package/Particles/Node/Blocks/particleLocalVariableBlock.pure.js.map +1 -1
  630. package/Particles/Node/Blocks/particleMathBlock.pure.js +278 -265
  631. package/Particles/Node/Blocks/particleMathBlock.pure.js.map +1 -1
  632. package/Particles/Node/Blocks/particleNumberMathBlock.pure.js +155 -142
  633. package/Particles/Node/Blocks/particleNumberMathBlock.pure.js.map +1 -1
  634. package/Particles/Node/Blocks/particleRandomBlock.pure.js +156 -143
  635. package/Particles/Node/Blocks/particleRandomBlock.pure.js.map +1 -1
  636. package/Particles/Node/Blocks/particleTrigonometryBlock.pure.js +217 -204
  637. package/Particles/Node/Blocks/particleTrigonometryBlock.pure.js.map +1 -1
  638. package/Particles/Node/Blocks/particleVectorMathBlock.pure.js +106 -93
  639. package/Particles/Node/Blocks/particleVectorMathBlock.pure.js.map +1 -1
  640. package/Particles/Node/Blocks/systemBlock.pure.js +366 -330
  641. package/Particles/Node/Blocks/systemBlock.pure.js.map +1 -1
  642. package/Particles/Node/nodeParticleBlock.js +339 -324
  643. package/Particles/Node/nodeParticleBlock.js.map +1 -1
  644. package/Particles/Node/nodeParticleSystemSet.js +494 -473
  645. package/Particles/Node/nodeParticleSystemSet.js.map +1 -1
  646. package/Particles/gpuParticleSystem.d.ts +0 -1
  647. package/Particles/gpuParticleSystem.js +0 -1
  648. package/Particles/gpuParticleSystem.js.map +1 -1
  649. package/Particles/gpuParticleSystem.pure.d.ts +4 -3
  650. package/Particles/gpuParticleSystem.pure.js +27 -16
  651. package/Particles/gpuParticleSystem.pure.js.map +1 -1
  652. package/Particles/particleSystem.pure.js +57 -2
  653. package/Particles/particleSystem.pure.js.map +1 -1
  654. package/Particles/thinParticleSystem.d.ts +0 -1
  655. package/Particles/thinParticleSystem.js +0 -1
  656. package/Particles/thinParticleSystem.js.map +1 -1
  657. package/Particles/thinParticleSystem.pure.js +2 -0
  658. package/Particles/thinParticleSystem.pure.js.map +1 -1
  659. package/Particles/webgl2ParticleSystem.pure.js +2 -0
  660. package/Particles/webgl2ParticleSystem.pure.js.map +1 -1
  661. package/Physics/v1/physicsImpostor.pure.js +4 -4
  662. package/PostProcesses/RenderPipeline/Pipelines/defaultRenderingPipeline.pure.js +675 -656
  663. package/PostProcesses/RenderPipeline/Pipelines/defaultRenderingPipeline.pure.js.map +1 -1
  664. package/PostProcesses/RenderPipeline/Pipelines/lensRenderingPipeline.d.ts +0 -1
  665. package/PostProcesses/RenderPipeline/Pipelines/lensRenderingPipeline.js +0 -1
  666. package/PostProcesses/RenderPipeline/Pipelines/lensRenderingPipeline.js.map +1 -1
  667. package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.pure.js +521 -486
  668. package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.pure.js.map +1 -1
  669. package/PostProcesses/RenderPipeline/Pipelines/ssaoRenderingPipeline.d.ts +0 -1
  670. package/PostProcesses/RenderPipeline/Pipelines/ssaoRenderingPipeline.js +0 -1
  671. package/PostProcesses/RenderPipeline/Pipelines/ssaoRenderingPipeline.js.map +1 -1
  672. package/PostProcesses/RenderPipeline/Pipelines/ssaoRenderingPipeline.pure.js +241 -220
  673. package/PostProcesses/RenderPipeline/Pipelines/ssaoRenderingPipeline.pure.js.map +1 -1
  674. package/PostProcesses/RenderPipeline/Pipelines/ssrRenderingPipeline.pure.js +852 -835
  675. package/PostProcesses/RenderPipeline/Pipelines/ssrRenderingPipeline.pure.js.map +1 -1
  676. package/PostProcesses/RenderPipeline/Pipelines/standardRenderingPipeline.pure.js +1135 -1073
  677. package/PostProcesses/RenderPipeline/Pipelines/standardRenderingPipeline.pure.js.map +1 -1
  678. package/PostProcesses/RenderPipeline/Pipelines/taaRenderingPipeline.pure.js +319 -303
  679. package/PostProcesses/RenderPipeline/Pipelines/taaRenderingPipeline.pure.js.map +1 -1
  680. package/PostProcesses/RenderPipeline/postProcessRenderPipeline.js +212 -199
  681. package/PostProcesses/RenderPipeline/postProcessRenderPipeline.js.map +1 -1
  682. package/PostProcesses/blackAndWhitePostProcess.pure.js +67 -55
  683. package/PostProcesses/blackAndWhitePostProcess.pure.js.map +1 -1
  684. package/PostProcesses/bloomMergePostProcess.pure.js +74 -62
  685. package/PostProcesses/bloomMergePostProcess.pure.js.map +1 -1
  686. package/PostProcesses/blurPostProcess.pure.js +127 -115
  687. package/PostProcesses/blurPostProcess.pure.js.map +1 -1
  688. package/PostProcesses/chromaticAberrationPostProcess.pure.js +130 -118
  689. package/PostProcesses/chromaticAberrationPostProcess.pure.js.map +1 -1
  690. package/PostProcesses/circleOfConfusionPostProcess.pure.js +115 -104
  691. package/PostProcesses/circleOfConfusionPostProcess.pure.js.map +1 -1
  692. package/PostProcesses/colorCorrectionPostProcess.pure.js +55 -43
  693. package/PostProcesses/colorCorrectionPostProcess.pure.js.map +1 -1
  694. package/PostProcesses/convolutionPostProcess.pure.js +96 -84
  695. package/PostProcesses/convolutionPostProcess.pure.js.map +1 -1
  696. package/PostProcesses/extractHighlightsPostProcess.pure.js +68 -57
  697. package/PostProcesses/extractHighlightsPostProcess.pure.js.map +1 -1
  698. package/PostProcesses/filterPostProcess.pure.js +66 -54
  699. package/PostProcesses/filterPostProcess.pure.js.map +1 -1
  700. package/PostProcesses/fxaaPostProcess.pure.js.map +1 -1
  701. package/PostProcesses/grainPostProcess.pure.js +82 -70
  702. package/PostProcesses/grainPostProcess.pure.js.map +1 -1
  703. package/PostProcesses/imageProcessingPostProcess.js +334 -322
  704. package/PostProcesses/imageProcessingPostProcess.js.map +1 -1
  705. package/PostProcesses/motionBlurPostProcess.pure.js +246 -235
  706. package/PostProcesses/motionBlurPostProcess.pure.js.map +1 -1
  707. package/PostProcesses/passPostProcess.pure.js +75 -63
  708. package/PostProcesses/passPostProcess.pure.js.map +1 -1
  709. package/PostProcesses/postProcess.pure.js +899 -835
  710. package/PostProcesses/postProcess.pure.js.map +1 -1
  711. package/PostProcesses/refractionPostProcess.pure.js +114 -87
  712. package/PostProcesses/refractionPostProcess.pure.js.map +1 -1
  713. package/PostProcesses/screenSpaceCurvaturePostProcess.pure.js +108 -96
  714. package/PostProcesses/screenSpaceCurvaturePostProcess.pure.js.map +1 -1
  715. package/PostProcesses/screenSpaceReflectionPostProcess.pure.js +241 -220
  716. package/PostProcesses/screenSpaceReflectionPostProcess.pure.js.map +1 -1
  717. package/PostProcesses/sharpenPostProcess.pure.js +86 -74
  718. package/PostProcesses/sharpenPostProcess.pure.js.map +1 -1
  719. package/PostProcesses/tonemapPostProcess.pure.js +82 -70
  720. package/PostProcesses/tonemapPostProcess.pure.js.map +1 -1
  721. package/PostProcesses/volumetricLightScatteringPostProcess.pure.js +500 -465
  722. package/PostProcesses/volumetricLightScatteringPostProcess.pure.js.map +1 -1
  723. package/PostProcesses/vrMultiviewToSingleviewPostProcess.d.ts +0 -1
  724. package/PostProcesses/vrMultiviewToSingleviewPostProcess.js +0 -1
  725. package/PostProcesses/vrMultiviewToSingleviewPostProcess.js.map +1 -1
  726. package/PostProcesses/vrMultiviewToSingleviewPostProcess.pure.js +2 -0
  727. package/PostProcesses/vrMultiviewToSingleviewPostProcess.pure.js.map +1 -1
  728. package/Probes/reflectionProbe.pure.js +238 -224
  729. package/Probes/reflectionProbe.pure.js.map +1 -1
  730. package/Rendering/GlobalIllumination/giRSMManager.pure.d.ts +1 -1
  731. package/Rendering/GlobalIllumination/giRSMManager.pure.js +138 -105
  732. package/Rendering/GlobalIllumination/giRSMManager.pure.js.map +1 -1
  733. package/Rendering/IBLShadows/iblShadowsPluginMaterial.pure.d.ts +1 -1
  734. package/Rendering/IBLShadows/iblShadowsPluginMaterial.pure.js +155 -138
  735. package/Rendering/IBLShadows/iblShadowsPluginMaterial.pure.js.map +1 -1
  736. package/Rendering/IBLShadows/iblShadowsRenderPipeline.d.ts +0 -2
  737. package/Rendering/IBLShadows/iblShadowsRenderPipeline.js +0 -2
  738. package/Rendering/IBLShadows/iblShadowsRenderPipeline.js.map +1 -1
  739. package/Rendering/IBLShadows/iblShadowsRenderPipeline.pure.js +5 -0
  740. package/Rendering/IBLShadows/iblShadowsRenderPipeline.pure.js.map +1 -1
  741. package/Rendering/IBLShadows/iblShadowsVoxelRenderer.d.ts +0 -1
  742. package/Rendering/IBLShadows/iblShadowsVoxelRenderer.js +0 -1
  743. package/Rendering/IBLShadows/iblShadowsVoxelRenderer.js.map +1 -1
  744. package/Rendering/IBLShadows/iblShadowsVoxelRenderer.pure.d.ts +1 -0
  745. package/Rendering/IBLShadows/iblShadowsVoxelRenderer.pure.js +34 -0
  746. package/Rendering/IBLShadows/iblShadowsVoxelRenderer.pure.js.map +1 -1
  747. package/Rendering/edgesRenderer.pure.js.map +1 -1
  748. package/Rendering/prePassRenderer.d.ts +0 -2
  749. package/Rendering/prePassRenderer.js +0 -2
  750. package/Rendering/prePassRenderer.js.map +1 -1
  751. package/Rendering/prePassRenderer.pure.js +2 -0
  752. package/Rendering/prePassRenderer.pure.js.map +1 -1
  753. package/Rendering/reflectiveShadowMap.pure.d.ts +1 -1
  754. package/Rendering/reflectiveShadowMap.pure.js +151 -130
  755. package/Rendering/reflectiveShadowMap.pure.js.map +1 -1
  756. package/Rendering/thinDepthPeelingRenderer.d.ts +0 -1
  757. package/Rendering/thinDepthPeelingRenderer.js +0 -1
  758. package/Rendering/thinDepthPeelingRenderer.js.map +1 -1
  759. package/Shaders/ShadersInclude/gaussianSplatting.js +1 -0
  760. package/Shaders/ShadersInclude/gaussianSplatting.js.map +1 -1
  761. package/Shaders/ShadersInclude/openpbrEnvironmentLighting.js +35 -5
  762. package/Shaders/ShadersInclude/openpbrEnvironmentLighting.js.map +1 -1
  763. package/Shaders/gaussianSplatting.fragment.js +17 -1
  764. package/Shaders/gaussianSplatting.fragment.js.map +1 -1
  765. package/Shaders/gaussianSplatting.vertex.js +1 -1
  766. package/Shaders/gaussianSplatting.vertex.js.map +1 -1
  767. package/Shaders/gaussianSplattingDepth.vertex.js +1 -1
  768. package/Shaders/gaussianSplattingDepth.vertex.js.map +1 -1
  769. package/Shaders/picking.fragment.js +39 -3
  770. package/Shaders/picking.fragment.js.map +1 -1
  771. package/ShadersWGSL/ShadersInclude/gaussianSplatting.js +3 -1
  772. package/ShadersWGSL/ShadersInclude/gaussianSplatting.js.map +1 -1
  773. package/ShadersWGSL/ShadersInclude/helperFunctions.js +2 -2
  774. package/ShadersWGSL/ShadersInclude/helperFunctions.js.map +1 -1
  775. package/ShadersWGSL/ShadersInclude/openpbrEnvironmentLighting.js +39 -7
  776. package/ShadersWGSL/ShadersInclude/openpbrEnvironmentLighting.js.map +1 -1
  777. package/ShadersWGSL/ShadersInclude/openpbrIblFunctions.js +4 -3
  778. package/ShadersWGSL/ShadersInclude/openpbrIblFunctions.js.map +1 -1
  779. package/ShadersWGSL/gaussianSplatting.fragment.js +14 -1
  780. package/ShadersWGSL/gaussianSplatting.fragment.js.map +1 -1
  781. package/ShadersWGSL/gaussianSplatting.vertex.js +2 -2
  782. package/ShadersWGSL/gaussianSplatting.vertex.js.map +1 -1
  783. package/ShadersWGSL/gaussianSplattingDepth.vertex.js +2 -2
  784. package/ShadersWGSL/gaussianSplattingDepth.vertex.js.map +1 -1
  785. package/ShadersWGSL/lightingVolume.compute.js +2 -2
  786. package/ShadersWGSL/lightingVolume.compute.js.map +1 -1
  787. package/ShadersWGSL/picking.fragment.js +22 -1
  788. package/ShadersWGSL/picking.fragment.js.map +1 -1
  789. package/XR/features/Layers/WebXRCompositionLayer.d.ts +3 -2
  790. package/XR/features/Layers/WebXRCompositionLayer.js +2 -2
  791. package/XR/features/Layers/WebXRCompositionLayer.js.map +1 -1
  792. package/XR/features/Layers/WebXRWebGPUCompositionLayer.d.ts +59 -0
  793. package/XR/features/Layers/WebXRWebGPUCompositionLayer.js +120 -0
  794. package/XR/features/Layers/WebXRWebGPUCompositionLayer.js.map +1 -0
  795. package/XR/features/Layers/WebXRWebGPUProjectionLayer.d.ts +25 -0
  796. package/XR/features/Layers/WebXRWebGPUProjectionLayer.js +69 -0
  797. package/XR/features/Layers/WebXRWebGPUProjectionLayer.js.map +1 -0
  798. package/XR/features/WebXRLayers.pure.d.ts +8 -0
  799. package/XR/features/WebXRLayers.pure.js +43 -6
  800. package/XR/features/WebXRLayers.pure.js.map +1 -1
  801. package/XR/native/nativeXRRenderTarget.d.ts +2 -2
  802. package/XR/native/nativeXRRenderTarget.js +2 -2
  803. package/XR/native/nativeXRRenderTarget.js.map +1 -1
  804. package/XR/webXRExperienceHelper.js +10 -1
  805. package/XR/webXRExperienceHelper.js.map +1 -1
  806. package/XR/webXRGraphicsBinding.d.ts +90 -0
  807. package/XR/webXRGraphicsBinding.js +85 -0
  808. package/XR/webXRGraphicsBinding.js.map +1 -0
  809. package/XR/webXRLayerRenderTargetTexture.d.ts +24 -0
  810. package/XR/webXRLayerRenderTargetTexture.js +30 -0
  811. package/XR/webXRLayerRenderTargetTexture.js.map +1 -0
  812. package/XR/webXRManagedOutputCanvas.d.ts +14 -0
  813. package/XR/webXRManagedOutputCanvas.js +24 -5
  814. package/XR/webXRManagedOutputCanvas.js.map +1 -1
  815. package/XR/webXRRenderTargetTextureProvider.d.ts +25 -4
  816. package/XR/webXRRenderTargetTextureProvider.js +33 -35
  817. package/XR/webXRRenderTargetTextureProvider.js.map +1 -1
  818. package/XR/webXRSessionManager.d.ts +11 -0
  819. package/XR/webXRSessionManager.js +37 -0
  820. package/XR/webXRSessionManager.js.map +1 -1
  821. package/XR/webXRTypes.d.ts +9 -6
  822. package/XR/webXRTypes.js.map +1 -1
  823. package/XR/webXRWebGLLayer.d.ts +2 -2
  824. package/XR/webXRWebGLLayer.js +2 -2
  825. package/XR/webXRWebGLLayer.js.map +1 -1
  826. package/XR/webXRWebGLRenderTargetTextureProvider.d.ts +12 -0
  827. package/XR/webXRWebGLRenderTargetTextureProvider.js +58 -0
  828. package/XR/webXRWebGLRenderTargetTextureProvider.js.map +1 -0
  829. package/XR/webXRWebGPURenderTargetTextureProvider.d.ts +69 -0
  830. package/XR/webXRWebGPURenderTargetTextureProvider.js +148 -0
  831. package/XR/webXRWebGPURenderTargetTextureProvider.js.map +1 -0
  832. package/index.d.ts +1 -0
  833. package/index.js +1 -0
  834. package/index.js.map +1 -1
  835. package/node.js +878 -845
  836. package/node.js.map +1 -1
  837. package/package.json +8 -14
  838. package/scene.pure.d.ts +12 -0
  839. package/scene.pure.js +36 -0
  840. package/scene.pure.js.map +1 -1
  841. package/tslib.es6.js +304 -150
@@ -1,5 +1,5 @@
1
1
  /** This file must only contain pure code and pure imports */
2
- import { __decorate } from "../../tslib.es6.js";
2
+ import { __esDecorate, __runInitializers } from "../../tslib.es6.js";
3
3
  import { StorageBuffer } from "../../Buffers/storageBuffer.js";
4
4
 
5
5
  import { ShaderMaterial } from "../../Materials/shaderMaterial.pure.js";
@@ -17,587 +17,612 @@ import { LightConstants } from "../lightConstants.js";
17
17
  import { RegisterClass } from "../../Misc/typeStore.js";
18
18
  import { Node } from "../../node.js";
19
19
  import { RegisterClusteredLightingSceneComponent } from "./clusteredLightingSceneComponent.pure.js";
20
+ import { RegisterEnginesExtensionsEngineRawTexture } from "../../Engines/Extensions/engine.rawTexture.pure.js";
21
+ import { RegisterEnginesExtensionsEngineRenderTarget } from "../../Engines/Extensions/engine.renderTarget.pure.js";
22
+ import { RegisterEnginesExtensionsEngineRenderTargetTexture } from "../../Engines/Extensions/engine.renderTargetTexture.pure.js";
23
+ import { RegisterThinInstanceMesh } from "../../Meshes/thinInstanceMesh.pure.js";
20
24
  const DefaultDepthSlices = 16;
21
25
  const MobileClusteredLightBatchSize = 8;
22
26
  /**
23
27
  * A special light that renders all its associated spot or point lights using a clustered or forward+ system.
24
28
  */
25
- export class ClusteredLightContainer extends Light {
26
- static _GetEngineBatchSize(engine) {
27
- const caps = engine._caps;
28
- if (!caps.texelFetch) {
29
- return 0;
30
- }
31
- else if (engine.isWebGPU) {
32
- // On WebGPU we use atomic writes to storage buffers
33
- return 32;
34
- }
35
- else if (engine.version > 1) {
36
- // On WebGL 2 we use additive float blending as the light mask
37
- if (!caps.colorBufferFloat || !caps.blendFloat) {
38
- return 0;
29
+ let ClusteredLightContainer = (() => {
30
+ var _a;
31
+ let _classSuper = Light;
32
+ let _instanceExtraInitializers = [];
33
+ let _get_horizontalTiles_decorators;
34
+ let _get_verticalTiles_decorators;
35
+ let _get_depthSlices_decorators;
36
+ let _get_maxRange_decorators;
37
+ return _a = class ClusteredLightContainer extends _classSuper {
38
+ static _GetEngineBatchSize(engine) {
39
+ const caps = engine._caps;
40
+ if (!caps.texelFetch) {
41
+ return 0;
42
+ }
43
+ else if (engine.isWebGPU) {
44
+ // On WebGPU we use atomic writes to storage buffers
45
+ return 32;
46
+ }
47
+ else if (engine.version > 1) {
48
+ // On WebGL 2 we use additive float blending as the light mask
49
+ if (!caps.colorBufferFloat || !caps.blendFloat) {
50
+ return 0;
51
+ }
52
+ // Due to the use of floats we want to limit lights to the precision of floats
53
+ // The reduced precision for mobiles is because some devices (like Samsung Galaxy) report support for R32F but actually create the texture with less precision.
54
+ return engine.hostInformation.isMobile ? MobileClusteredLightBatchSize : caps.shaderFloatPrecision;
55
+ }
56
+ else {
57
+ // WebGL 1 is not supported due to lack of dynamic for loops
58
+ return 0;
59
+ }
39
60
  }
40
- // Due to the use of floats we want to limit lights to the precision of floats
41
- // The reduced precision for mobiles is because some devices (like Samsung Galaxy) report support for R32F but actually create the texture with less precision.
42
- return engine.hostInformation.isMobile ? MobileClusteredLightBatchSize : caps.shaderFloatPrecision;
43
- }
44
- else {
45
- // WebGL 1 is not supported due to lack of dynamic for loops
46
- return 0;
47
- }
48
- }
49
- /**
50
- * Checks if the clustered lighting system supports the given light with its current parameters.
51
- * This will also check if the light's associated engine supports clustered lighting.
52
- *
53
- * @param light The light to test
54
- * @returns true if the light and its engine is supported
55
- */
56
- static IsLightSupported(light) {
57
- if (ClusteredLightContainer._GetEngineBatchSize(light.getEngine()) === 0) {
58
- return false;
59
- }
60
- if (light.shadowEnabled && light._scene.shadowsEnabled && light.getShadowGenerators()) {
61
- // Shadows are not supported
62
- return false;
63
- }
64
- if (light.falloffType !== Light.FALLOFF_DEFAULT) {
65
- // Only the default falloff is supported
66
- return false;
67
- }
68
- if (light.getTypeID() === LightConstants.LIGHTTYPEID_POINTLIGHT) {
69
- return true;
70
- }
71
- if (light.getTypeID() === LightConstants.LIGHTTYPEID_SPOTLIGHT) {
72
- // Extra texture bindings per light are not supported
73
- return !light.projectionTexture && !light.iesProfileTexture;
74
- }
75
- // Currently only point and spot lights are supported
76
- return false;
77
- }
78
- /**
79
- * True if clustered lighting is supported.
80
- */
81
- get isSupported() {
82
- return this._batchSize > 0;
83
- }
84
- /**
85
- * Gets the current list of lights added to this clustering system.
86
- */
87
- get lights() {
88
- return this._lights;
89
- }
90
- /**
91
- * The number of tiles in the horizontal direction to cluster lights into.
92
- * A lower value will reduce memory and make the clustering step faster, while a higher value increases memory and makes the rendering step faster.
93
- */
94
- get horizontalTiles() {
95
- return this._horizontalTiles;
96
- }
97
- set horizontalTiles(horizontal) {
98
- if (this._horizontalTiles === horizontal) {
99
- return;
100
- }
101
- this._horizontalTiles = horizontal;
102
- // Force the batch data to be recreated
103
- this._tileMaskBatches = -1;
104
- }
105
- /**
106
- * The number of tiles in the vertical direction to cluster lights into.
107
- * A lower value will reduce memory and make the clustering step faster, while a higher value increases memory and makes the rendering step faster.
108
- */
109
- get verticalTiles() {
110
- return this._verticalTiles;
111
- }
112
- set verticalTiles(vertical) {
113
- if (this._verticalTiles === vertical) {
114
- return;
115
- }
116
- this._verticalTiles = vertical;
117
- // Force the batch data to be recreated
118
- this._tileMaskBatches = -1;
119
- }
120
- /**
121
- * The number of slices to split the depth range by and cluster lights into.
122
- */
123
- get depthSlices() {
124
- return this._depthSlices;
125
- }
126
- set depthSlices(slices) {
127
- if (this._depthSlices === slices) {
128
- return;
129
- }
130
- this._depthSlices = slices;
131
- this._sliceRanges = new Float32Array(slices * 2);
132
- // UBO size depends on the number of depth slices
133
- this._uniformBuffer.dispose();
134
- this._uniformBuffer = new UniformBuffer(this.getEngine(), undefined, undefined, this.name);
135
- this._buildUniformLayout();
136
- // The UBO has been recreated so previous bindings are no longer valid; transferToEffect will repopulate it.
137
- this._lastBoundLightIndex = null;
138
- // CLUSTLIGHT_SLICES is a shader define that sizes the vSliceRanges array in the UBO.
139
- // Materials must recompile when depthSlices changes so the shader layout matches the rebuilt UBO.
140
- // Otherwise, if depthSlices is reduced, the rebuilt UBO can be smaller than what the previously compiled shader expects, causing rendering to fail.
141
- this._markMeshesAsLightDirty();
142
- }
143
- /**
144
- * This limits the range of all the added lights, so even lights with extreme ranges will still have bounds for clustering.
145
- */
146
- get maxRange() {
147
- return this._maxRange;
148
- }
149
- set maxRange(range) {
150
- if (this._maxRange === range) {
151
- return;
152
- }
153
- this._maxRange = range;
154
- this._minInverseSquaredRange = 1 / (range * range);
155
- }
156
- /**
157
- * Creates a new clustered light system with an initial set of lights.
158
- *
159
- * @param name The name of the clustered light container
160
- * @param lights The initial set of lights to add
161
- * @param scene The scene the clustered light container belongs to
162
- */
163
- constructor(name, lights = [], scene) {
164
- super(name, scene);
165
- this._lights = [];
166
- this._camera = null;
167
- // The lights sorted by depth
168
- this._sortedLights = [];
169
- this._lightDataRenderId = -1;
170
- this._tileMaskBatches = -1;
171
- this._horizontalTiles = 64;
172
- this._verticalTiles = 64;
173
- this._sliceScale = 0;
174
- this._sliceBias = 0;
175
- // Tracks the last lightIndex string passed to transferToEffect, or null if the cluster
176
- // has not yet been bound. Used to refresh the camera-dependent UBO entries (vSliceData /
177
- // vSliceRanges) every frame in cases where material binding is bypassed (e.g. WebGPU FAST
178
- // snapshot rendering replays cached bundles and never re-runs Light._bindLight).
179
- this._lastBoundLightIndex = null;
180
- this._depthSlices = DefaultDepthSlices;
181
- this._maxRange = 16383;
182
- this._minInverseSquaredRange = 1 / (this._maxRange * this._maxRange);
183
- const engine = this.getEngine();
184
- this._batchSize = ClusteredLightContainer._GetEngineBatchSize(engine);
185
- const proxyShader = { vertex: "lightProxy", fragment: "lightProxy" };
186
- const defines = [`CLUSTLIGHT_BATCH ${this._batchSize}`];
187
- if (this._scene.useRightHandedSystem) {
188
- defines.push("#define RIGHT_HANDED");
189
- }
190
- this._proxyMaterial = new ShaderMaterial("ProxyMaterial", this._scene, proxyShader, {
191
- attributes: ["position"],
192
- uniforms: ["view", "projection", "tileMaskResolution"],
193
- samplers: ["lightDataTexture"],
194
- uniformBuffers: ["Scene"],
195
- storageBuffers: ["tileMaskBuffer"],
196
- defines,
197
- shaderLanguage: engine.isWebGPU ? 1 /* ShaderLanguage.WGSL */ : 0 /* ShaderLanguage.GLSL */,
198
- extraInitializationsAsync: async () => {
61
+ /**
62
+ * Checks if the clustered lighting system supports the given light with its current parameters.
63
+ * This will also check if the light's associated engine supports clustered lighting.
64
+ *
65
+ * @param light The light to test
66
+ * @returns true if the light and its engine is supported
67
+ */
68
+ static IsLightSupported(light) {
69
+ if (_a._GetEngineBatchSize(light.getEngine()) === 0) {
70
+ return false;
71
+ }
72
+ if (light.shadowEnabled && light._scene.shadowsEnabled && light.getShadowGenerators()) {
73
+ // Shadows are not supported
74
+ return false;
75
+ }
76
+ if (light.falloffType !== Light.FALLOFF_DEFAULT) {
77
+ // Only the default falloff is supported
78
+ return false;
79
+ }
80
+ if (light.getTypeID() === LightConstants.LIGHTTYPEID_POINTLIGHT) {
81
+ return true;
82
+ }
83
+ if (light.getTypeID() === LightConstants.LIGHTTYPEID_SPOTLIGHT) {
84
+ // Extra texture bindings per light are not supported
85
+ return !light.projectionTexture && !light.iesProfileTexture;
86
+ }
87
+ // Currently only point and spot lights are supported
88
+ return false;
89
+ }
90
+ /**
91
+ * True if clustered lighting is supported.
92
+ */
93
+ get isSupported() {
94
+ return this._batchSize > 0;
95
+ }
96
+ /**
97
+ * Gets the current list of lights added to this clustering system.
98
+ */
99
+ get lights() {
100
+ return this._lights;
101
+ }
102
+ /**
103
+ * The number of tiles in the horizontal direction to cluster lights into.
104
+ * A lower value will reduce memory and make the clustering step faster, while a higher value increases memory and makes the rendering step faster.
105
+ */
106
+ get horizontalTiles() {
107
+ return this._horizontalTiles;
108
+ }
109
+ set horizontalTiles(horizontal) {
110
+ if (this._horizontalTiles === horizontal) {
111
+ return;
112
+ }
113
+ this._horizontalTiles = horizontal;
114
+ // Force the batch data to be recreated
115
+ this._tileMaskBatches = -1;
116
+ }
117
+ /**
118
+ * The number of tiles in the vertical direction to cluster lights into.
119
+ * A lower value will reduce memory and make the clustering step faster, while a higher value increases memory and makes the rendering step faster.
120
+ */
121
+ get verticalTiles() {
122
+ return this._verticalTiles;
123
+ }
124
+ set verticalTiles(vertical) {
125
+ if (this._verticalTiles === vertical) {
126
+ return;
127
+ }
128
+ this._verticalTiles = vertical;
129
+ // Force the batch data to be recreated
130
+ this._tileMaskBatches = -1;
131
+ }
132
+ /**
133
+ * The number of slices to split the depth range by and cluster lights into.
134
+ */
135
+ get depthSlices() {
136
+ return this._depthSlices;
137
+ }
138
+ set depthSlices(slices) {
139
+ if (this._depthSlices === slices) {
140
+ return;
141
+ }
142
+ this._depthSlices = slices;
143
+ this._sliceRanges = new Float32Array(slices * 2);
144
+ // UBO size depends on the number of depth slices
145
+ this._uniformBuffer.dispose();
146
+ this._uniformBuffer = new UniformBuffer(this.getEngine(), undefined, undefined, this.name);
147
+ this._buildUniformLayout();
148
+ // The UBO has been recreated so previous bindings are no longer valid; transferToEffect will repopulate it.
149
+ this._lastBoundLightIndex = null;
150
+ // CLUSTLIGHT_SLICES is a shader define that sizes the vSliceRanges array in the UBO.
151
+ // Materials must recompile when depthSlices changes so the shader layout matches the rebuilt UBO.
152
+ // Otherwise, if depthSlices is reduced, the rebuilt UBO can be smaller than what the previously compiled shader expects, causing rendering to fail.
153
+ this._markMeshesAsLightDirty();
154
+ }
155
+ /**
156
+ * This limits the range of all the added lights, so even lights with extreme ranges will still have bounds for clustering.
157
+ */
158
+ get maxRange() {
159
+ return this._maxRange;
160
+ }
161
+ set maxRange(range) {
162
+ if (this._maxRange === range) {
163
+ return;
164
+ }
165
+ this._maxRange = range;
166
+ this._minInverseSquaredRange = 1 / (range * range);
167
+ }
168
+ /**
169
+ * Creates a new clustered light system with an initial set of lights.
170
+ *
171
+ * @param name The name of the clustered light container
172
+ * @param lights The initial set of lights to add
173
+ * @param scene The scene the clustered light container belongs to
174
+ */
175
+ constructor(name, lights = [], scene) {
176
+ super(name, scene);
177
+ this._batchSize = __runInitializers(this, _instanceExtraInitializers);
178
+ this._lights = [];
179
+ this._camera = null;
180
+ // The lights sorted by depth
181
+ this._sortedLights = [];
182
+ this._lightDataRenderId = -1;
183
+ this._tileMaskBatches = -1;
184
+ this._horizontalTiles = 64;
185
+ this._verticalTiles = 64;
186
+ this._sliceScale = 0;
187
+ this._sliceBias = 0;
188
+ // Tracks the last lightIndex string passed to transferToEffect, or null if the cluster
189
+ // has not yet been bound. Used to refresh the camera-dependent UBO entries (vSliceData /
190
+ // vSliceRanges) every frame in cases where material binding is bypassed (e.g. WebGPU FAST
191
+ // snapshot rendering replays cached bundles and never re-runs Light._bindLight).
192
+ this._lastBoundLightIndex = null;
193
+ this._depthSlices = DefaultDepthSlices;
194
+ this._maxRange = 16383;
195
+ this._minInverseSquaredRange = 1 / (this._maxRange * this._maxRange);
196
+ const engine = this.getEngine();
197
+ this._batchSize = _a._GetEngineBatchSize(engine);
198
+ // Clustered lighting relies on engine and mesh side effects that are not part of the
199
+ // pure import baseline. Register them here (idempotently) so the feature works on the
200
+ // tree-shakeable path without requiring callers to import these extensions manually.
201
+ // Without this, createRawTexture/createRenderTargetTexture throw and the thin-instance
202
+ // setters silently no-op, leaving the scene unlit with no error.
203
+ RegisterEnginesExtensionsEngineRawTexture();
204
+ RegisterEnginesExtensionsEngineRenderTarget();
205
+ RegisterEnginesExtensionsEngineRenderTargetTexture();
206
+ RegisterThinInstanceMesh();
207
+ const proxyShader = { vertex: "lightProxy", fragment: "lightProxy" };
208
+ const defines = [`CLUSTLIGHT_BATCH ${this._batchSize}`];
209
+ if (this._scene.useRightHandedSystem) {
210
+ defines.push("#define RIGHT_HANDED");
211
+ }
212
+ this._proxyMaterial = new ShaderMaterial("ProxyMaterial", this._scene, proxyShader, {
213
+ attributes: ["position"],
214
+ uniforms: ["view", "projection", "tileMaskResolution"],
215
+ samplers: ["lightDataTexture"],
216
+ uniformBuffers: ["Scene"],
217
+ storageBuffers: ["tileMaskBuffer"],
218
+ defines,
219
+ shaderLanguage: engine.isWebGPU ? 1 /* ShaderLanguage.WGSL */ : 0 /* ShaderLanguage.GLSL */,
220
+ extraInitializationsAsync: async () => {
221
+ if (engine.isWebGPU) {
222
+ await Promise.all([import("../../ShadersWGSL/lightProxy.vertex.js"), import("../../ShadersWGSL/lightProxy.fragment.js")]);
223
+ }
224
+ else {
225
+ await Promise.all([import("../../Shaders/lightProxy.vertex.js"), import("../../Shaders/lightProxy.fragment.js")]);
226
+ }
227
+ },
228
+ });
229
+ // Additive blending is for merging masks on WebGL
230
+ this._proxyMaterial.transparencyMode = ShaderMaterial.MATERIAL_ALPHABLEND;
231
+ this._proxyMaterial.alphaMode = 1;
232
+ this._proxyMaterial.sideOrientation = 1;
233
+ this._proxyMesh = CreatePlane("ProxyMesh", { size: 2 }, this._scene);
234
+ // Make sure it doesn't render for the default scene
235
+ this._scene.removeMesh(this._proxyMesh);
236
+ this._proxyMesh.material = this._proxyMaterial;
237
+ this._updateBatches();
238
+ this._sliceRanges = new Float32Array(this._depthSlices * 2);
239
+ if (this._batchSize > 0) {
240
+ RegisterClusteredLightingSceneComponent(_a);
241
+ _a._SceneComponentInitialization(this._scene);
242
+ for (const light of lights) {
243
+ this.addLight(light);
244
+ }
245
+ }
246
+ }
247
+ getClassName() {
248
+ return "ClusteredLightContainer";
249
+ }
250
+ // eslint-disable-next-line @typescript-eslint/naming-convention
251
+ getTypeID() {
252
+ return LightConstants.LIGHTTYPEID_CLUSTERED_CONTAINER;
253
+ }
254
+ /** @internal */
255
+ _updateBatches(camera = null) {
256
+ this._camera = camera;
257
+ this._proxyMesh.isVisible = this._sortedLights.length > 0;
258
+ // Ensure space for atleast 1 batch
259
+ const batches = Math.max(Math.ceil(this._sortedLights.length / this._batchSize), 1);
260
+ if (this._tileMaskBatches >= batches) {
261
+ this._proxyMesh.thinInstanceCount = this._sortedLights.length;
262
+ return this._tileMaskTexture;
263
+ }
264
+ const engine = this.getEngine();
265
+ // Round up to a batch size so we don't have to reallocate as often
266
+ const maxLights = batches * this._batchSize;
267
+ this._lightDataBuffer = new Float32Array(20 * maxLights);
268
+ this._lightDataTexture?.dispose();
269
+ this._lightDataTexture = new RawTexture(this._lightDataBuffer, 5, maxLights, 5, this._scene, false, false, 1, 1);
270
+ this._lightDataTexture.name = "LightDataTexture_clustered_" + this.name;
271
+ this._proxyMaterial.setTexture("lightDataTexture", this._lightDataTexture);
272
+ this._tileMaskTexture?.dispose();
273
+ const textureSize = { width: this._horizontalTiles, height: this._verticalTiles };
274
+ if (!engine.isWebGPU) {
275
+ // In WebGL we shift the light proxy by the batch number
276
+ textureSize.height *= batches;
277
+ }
278
+ this._tileMaskTexture = new RenderTargetTexture("TileMaskTexture", textureSize, this._scene, {
279
+ // We don't write anything on WebGPU so make it as small as possible
280
+ type: engine.isWebGPU ? 0 : 1,
281
+ format: 6,
282
+ generateDepthBuffer: false,
283
+ });
284
+ this._tileMaskTexture.renderParticles = false;
285
+ this._tileMaskTexture.renderSprites = false;
286
+ this._tileMaskTexture.noPrePassRenderer = true;
287
+ this._tileMaskTexture.renderList = [this._proxyMesh];
288
+ let currentRenderTarget = null;
289
+ this._tileMaskTexture.onBeforeBindObservable.add(() => {
290
+ currentRenderTarget = engine._currentRenderTarget;
291
+ this._updateLightData();
292
+ // On WebGPU, clear the storage buffer here (before bindFramebuffer) because
293
+ // clearBuffer is a command encoder operation that cannot run while a render pass is open.
294
+ // In snapshot rendering mode, bindFramebuffer eagerly creates the render pass, so
295
+ // clearing must happen before that point.
296
+ if (engine.isWebGPU) {
297
+ this._tileMaskBuffer?.clear();
298
+ }
299
+ });
300
+ this._tileMaskTexture.onAfterUnbindObservable.add(() => {
301
+ if (engine._currentRenderTarget !== currentRenderTarget) {
302
+ if (!currentRenderTarget) {
303
+ engine.restoreDefaultFramebuffer();
304
+ }
305
+ else {
306
+ engine.bindFramebuffer(currentRenderTarget);
307
+ }
308
+ }
309
+ });
310
+ this._tileMaskTexture.onClearObservable.add(() => {
311
+ if (!engine.isWebGPU) {
312
+ // Only clear the texture on WebGL
313
+ engine.clear({ r: 0, g: 0, b: 0, a: 1 }, true, false);
314
+ }
315
+ });
199
316
  if (engine.isWebGPU) {
200
- await Promise.all([import("../../ShadersWGSL/lightProxy.vertex.js"), import("../../ShadersWGSL/lightProxy.fragment.js")]);
317
+ // WebGPU also needs a storage buffer to write to
318
+ this._tileMaskBuffer?.dispose();
319
+ const bufferSize = this._horizontalTiles * this._verticalTiles * batches * 4;
320
+ this._tileMaskBuffer = new StorageBuffer(engine, bufferSize);
321
+ this._proxyMaterial.setStorageBuffer("tileMaskBuffer", this._tileMaskBuffer);
201
322
  }
202
- else {
203
- await Promise.all([import("../../Shaders/lightProxy.vertex.js"), import("../../Shaders/lightProxy.fragment.js")]);
204
- }
205
- },
206
- });
207
- // Additive blending is for merging masks on WebGL
208
- this._proxyMaterial.transparencyMode = ShaderMaterial.MATERIAL_ALPHABLEND;
209
- this._proxyMaterial.alphaMode = 1;
210
- this._proxyMaterial.sideOrientation = 1;
211
- this._proxyMesh = CreatePlane("ProxyMesh", { size: 2 }, this._scene);
212
- // Make sure it doesn't render for the default scene
213
- this._scene.removeMesh(this._proxyMesh);
214
- this._proxyMesh.material = this._proxyMaterial;
215
- this._updateBatches();
216
- this._sliceRanges = new Float32Array(this._depthSlices * 2);
217
- if (this._batchSize > 0) {
218
- RegisterClusteredLightingSceneComponent(ClusteredLightContainer);
219
- ClusteredLightContainer._SceneComponentInitialization(this._scene);
220
- for (const light of lights) {
221
- this.addLight(light);
323
+ this._proxyMaterial.setVector3("tileMaskResolution", new Vector3(this._horizontalTiles, this.verticalTiles, batches));
324
+ // We don't actually use the matrix data but we need enough capacity for the lights
325
+ if (this._proxyMesh.thinInstanceSetBuffer) {
326
+ this._proxyMesh.thinInstanceSetBuffer("matrix", new Float32Array(maxLights * 16));
327
+ }
328
+ this._proxyMesh.thinInstanceCount = this._sortedLights.length;
329
+ this._tileMaskBatches = batches;
330
+ return this._tileMaskTexture;
222
331
  }
223
- }
224
- }
225
- getClassName() {
226
- return "ClusteredLightContainer";
227
- }
228
- // eslint-disable-next-line @typescript-eslint/naming-convention
229
- getTypeID() {
230
- return LightConstants.LIGHTTYPEID_CLUSTERED_CONTAINER;
231
- }
232
- /** @internal */
233
- _updateBatches(camera = null) {
234
- this._camera = camera;
235
- this._proxyMesh.isVisible = this._sortedLights.length > 0;
236
- // Ensure space for atleast 1 batch
237
- const batches = Math.max(Math.ceil(this._sortedLights.length / this._batchSize), 1);
238
- if (this._tileMaskBatches >= batches) {
239
- this._proxyMesh.thinInstanceCount = this._sortedLights.length;
240
- return this._tileMaskTexture;
241
- }
242
- const engine = this.getEngine();
243
- // Round up to a batch size so we don't have to reallocate as often
244
- const maxLights = batches * this._batchSize;
245
- this._lightDataBuffer = new Float32Array(20 * maxLights);
246
- this._lightDataTexture?.dispose();
247
- this._lightDataTexture = new RawTexture(this._lightDataBuffer, 5, maxLights, 5, this._scene, false, false, 1, 1);
248
- this._lightDataTexture.name = "LightDataTexture_clustered_" + this.name;
249
- this._proxyMaterial.setTexture("lightDataTexture", this._lightDataTexture);
250
- this._tileMaskTexture?.dispose();
251
- const textureSize = { width: this._horizontalTiles, height: this._verticalTiles };
252
- if (!engine.isWebGPU) {
253
- // In WebGL we shift the light proxy by the batch number
254
- textureSize.height *= batches;
255
- }
256
- this._tileMaskTexture = new RenderTargetTexture("TileMaskTexture", textureSize, this._scene, {
257
- // We don't write anything on WebGPU so make it as small as possible
258
- type: engine.isWebGPU ? 0 : 1,
259
- format: 6,
260
- generateDepthBuffer: false,
261
- });
262
- this._tileMaskTexture.renderParticles = false;
263
- this._tileMaskTexture.renderSprites = false;
264
- this._tileMaskTexture.noPrePassRenderer = true;
265
- this._tileMaskTexture.renderList = [this._proxyMesh];
266
- let currentRenderTarget = null;
267
- this._tileMaskTexture.onBeforeBindObservable.add(() => {
268
- currentRenderTarget = engine._currentRenderTarget;
269
- this._updateLightData();
270
- // On WebGPU, clear the storage buffer here (before bindFramebuffer) because
271
- // clearBuffer is a command encoder operation that cannot run while a render pass is open.
272
- // In snapshot rendering mode, bindFramebuffer eagerly creates the render pass, so
273
- // clearing must happen before that point.
274
- if (engine.isWebGPU) {
275
- this._tileMaskBuffer?.clear();
332
+ _getSliceIndex(camera, depth) {
333
+ if (depth < camera.minZ) {
334
+ // Prevent calling log on small or negative values
335
+ return -1;
336
+ }
337
+ return Math.floor(Math.log(depth) * this._sliceScale + this._sliceBias);
276
338
  }
277
- });
278
- this._tileMaskTexture.onAfterUnbindObservable.add(() => {
279
- if (engine._currentRenderTarget !== currentRenderTarget) {
280
- if (!currentRenderTarget) {
281
- engine.restoreDefaultFramebuffer();
339
+ _updateLightData() {
340
+ const camera = this._camera || this._scene.activeCamera;
341
+ const renderId = this._scene.getRenderId();
342
+ if (!camera || this._lightDataRenderId === renderId) {
343
+ return;
282
344
  }
283
- else {
284
- engine.bindFramebuffer(currentRenderTarget);
345
+ this._lightDataRenderId = renderId;
346
+ // Resort lights based on distance from camera
347
+ const view = camera.getViewMatrix();
348
+ for (const light of this._sortedLights) {
349
+ const position = light.computeTransformedInformation() ? light.transformedPosition : light.position;
350
+ const viewPosition = Vector3.TransformCoordinatesToRef(position, view, TmpVectors.Vector3[0]);
351
+ light._currentViewDepth = this._scene.useRightHandedSystem ? -viewPosition.z : viewPosition.z;
352
+ }
353
+ this._sortedLights.sort((a, b) => a._currentViewDepth - b._currentViewDepth);
354
+ // DOOM 2016 subdivision scheme, copied from: https://www.aortiz.me/2018/12/21/CG.html
355
+ const logFarNear = Math.log(camera.maxZ / camera.minZ);
356
+ this._sliceScale = this._depthSlices / logFarNear;
357
+ this._sliceBias = -(this._depthSlices * Math.log(camera.minZ)) / logFarNear;
358
+ this._sliceRanges.fill(0);
359
+ // Last slice which had had its min index updated
360
+ let minSlice = -1;
361
+ const buf = this._lightDataBuffer;
362
+ const offset = this._scene.floatingOriginOffset;
363
+ for (let i = 0; i < this._sortedLights.length; i += 1) {
364
+ const light = this._sortedLights[i];
365
+ const off = i * 20;
366
+ const computed = light.computeTransformedInformation();
367
+ const scaledIntensity = light.getScaledIntensity();
368
+ const position = computed ? light.transformedPosition : light.position;
369
+ const diffuse = light.diffuse.scaleToRef(scaledIntensity, TmpColors.Color3[0]);
370
+ const specular = light.specular.scaleToRef(scaledIntensity, TmpColors.Color3[1]);
371
+ const range = Math.min(light.range, this.maxRange);
372
+ const inverseSquaredRange = Math.max(light._inverseSquaredRange, this._minInverseSquaredRange);
373
+ // vLightData
374
+ buf[off + 0] = position.x - offset.x;
375
+ buf[off + 1] = position.y - offset.y;
376
+ buf[off + 2] = position.z - offset.z;
377
+ buf[off + 3] = 0;
378
+ // vLightDiffuse
379
+ buf[off + 4] = diffuse.r;
380
+ buf[off + 5] = diffuse.g;
381
+ buf[off + 6] = diffuse.b;
382
+ buf[off + 7] = range;
383
+ // vLightSpecular
384
+ buf[off + 8] = specular.r;
385
+ buf[off + 9] = specular.g;
386
+ buf[off + 10] = specular.b;
387
+ buf[off + 11] = light.radius;
388
+ // vLightDirection
389
+ buf[off + 12] = 0;
390
+ buf[off + 13] = 0;
391
+ buf[off + 14] = 0;
392
+ buf[off + 15] = -1;
393
+ // vLightFalloff
394
+ buf[off + 16] = range;
395
+ buf[off + 17] = inverseSquaredRange;
396
+ buf[off + 18] = 0;
397
+ buf[off + 19] = 0;
398
+ if (light.getTypeID() === LightConstants.LIGHTTYPEID_SPOTLIGHT) {
399
+ const spotLight = light;
400
+ const direction = Vector3.NormalizeToRef(computed ? spotLight.transformedDirection : spotLight.direction, TmpVectors.Vector3[0]);
401
+ // vLightData.a
402
+ buf[off + 3] = spotLight.exponent;
403
+ // vLightDirection
404
+ buf[off + 12] = direction.x;
405
+ buf[off + 13] = direction.y;
406
+ buf[off + 14] = direction.z;
407
+ buf[off + 15] = spotLight._cosHalfAngle;
408
+ // vLightFalloff.zw
409
+ buf[off + 18] = spotLight._lightAngleScale;
410
+ buf[off + 19] = spotLight._lightAngleOffset;
411
+ }
412
+ // Update the depth slices that include this light
413
+ const firstSlice = this._getSliceIndex(camera, light._currentViewDepth - range);
414
+ const lastSlice = this._getSliceIndex(camera, light._currentViewDepth + range);
415
+ for (let j = firstSlice; j <= lastSlice; j += 1) {
416
+ if (j < 0 || j >= this._depthSlices) {
417
+ continue;
418
+ }
419
+ else if (j > minSlice) {
420
+ // Update min index
421
+ this._sliceRanges[j * 2] = i;
422
+ minSlice = j;
423
+ }
424
+ // Update max index
425
+ this._sliceRanges[j * 2 + 1] = i;
426
+ }
427
+ }
428
+ const engine = this.getEngine();
429
+ if (engine.isWebGPU) {
430
+ // Whenever the light data changes we have to flush pending WebGPU command buffers so that
431
+ // previous render passes use the old data and later render passes use the new data.
432
+ engine.flushFramebuffer();
433
+ }
434
+ this._lightDataTexture.update(this._lightDataBuffer);
435
+ // Refresh camera-dependent UBO fields when running under FAST snapshot rendering, where
436
+ // ObjectRenderer.render bypasses the rendering manager and Light._bindLight is not
437
+ // re-invoked each frame. Without this, transferToEffect would never run again after the
438
+ // recording frame and the slice data would stay frozen, producing visibly stale lighting
439
+ // as the camera moves. STANDARD snapshot mode and non-snapshot rendering still go through
440
+ // material binding each frame, so transferToEffect already keeps the UBO up to date.
441
+ if (this._lastBoundLightIndex !== null && engine.snapshotRendering && engine.snapshotRenderingMode === 1) {
442
+ this._uniformBuffer.updateFloat2("vSliceData", this._sliceScale, this._sliceBias, this._lastBoundLightIndex);
443
+ this._uniformBuffer.updateFloatArray("vSliceRanges", this._sliceRanges, this._lastBoundLightIndex);
444
+ this._uniformBuffer.update();
285
445
  }
286
446
  }
287
- });
288
- this._tileMaskTexture.onClearObservable.add(() => {
289
- if (!engine.isWebGPU) {
290
- // Only clear the texture on WebGL
291
- engine.clear({ r: 0, g: 0, b: 0, a: 1 }, true, false);
447
+ dispose(doNotRecurse, disposeMaterialAndTextures) {
448
+ for (const light of this._lights) {
449
+ light.dispose(doNotRecurse, disposeMaterialAndTextures);
450
+ }
451
+ this._lightDataTexture.dispose();
452
+ this._tileMaskTexture.dispose();
453
+ this._tileMaskBuffer?.dispose();
454
+ this._proxyMesh.dispose(doNotRecurse, disposeMaterialAndTextures);
455
+ super.dispose(doNotRecurse, disposeMaterialAndTextures);
292
456
  }
293
- });
294
- if (engine.isWebGPU) {
295
- // WebGPU also needs a storage buffer to write to
296
- this._tileMaskBuffer?.dispose();
297
- const bufferSize = this._horizontalTiles * this._verticalTiles * batches * 4;
298
- this._tileMaskBuffer = new StorageBuffer(engine, bufferSize);
299
- this._proxyMaterial.setStorageBuffer("tileMaskBuffer", this._tileMaskBuffer);
300
- }
301
- this._proxyMaterial.setVector3("tileMaskResolution", new Vector3(this._horizontalTiles, this.verticalTiles, batches));
302
- // We don't actually use the matrix data but we need enough capacity for the lights
303
- if (this._proxyMesh.thinInstanceSetBuffer) {
304
- this._proxyMesh.thinInstanceSetBuffer("matrix", new Float32Array(maxLights * 16));
305
- }
306
- this._proxyMesh.thinInstanceCount = this._sortedLights.length;
307
- this._tileMaskBatches = batches;
308
- return this._tileMaskTexture;
309
- }
310
- _getSliceIndex(camera, depth) {
311
- if (depth < camera.minZ) {
312
- // Prevent calling log on small or negative values
313
- return -1;
314
- }
315
- return Math.floor(Math.log(depth) * this._sliceScale + this._sliceBias);
316
- }
317
- _updateLightData() {
318
- const camera = this._camera || this._scene.activeCamera;
319
- const renderId = this._scene.getRenderId();
320
- if (!camera || this._lightDataRenderId === renderId) {
321
- return;
322
- }
323
- this._lightDataRenderId = renderId;
324
- // Resort lights based on distance from camera
325
- const view = camera.getViewMatrix();
326
- for (const light of this._sortedLights) {
327
- const position = light.computeTransformedInformation() ? light.transformedPosition : light.position;
328
- const viewPosition = Vector3.TransformCoordinatesToRef(position, view, TmpVectors.Vector3[0]);
329
- light._currentViewDepth = this._scene.useRightHandedSystem ? -viewPosition.z : viewPosition.z;
330
- }
331
- this._sortedLights.sort((a, b) => a._currentViewDepth - b._currentViewDepth);
332
- // DOOM 2016 subdivision scheme, copied from: https://www.aortiz.me/2018/12/21/CG.html
333
- const logFarNear = Math.log(camera.maxZ / camera.minZ);
334
- this._sliceScale = this._depthSlices / logFarNear;
335
- this._sliceBias = -(this._depthSlices * Math.log(camera.minZ)) / logFarNear;
336
- this._sliceRanges.fill(0);
337
- // Last slice which had had its min index updated
338
- let minSlice = -1;
339
- const buf = this._lightDataBuffer;
340
- const offset = this._scene.floatingOriginOffset;
341
- for (let i = 0; i < this._sortedLights.length; i += 1) {
342
- const light = this._sortedLights[i];
343
- const off = i * 20;
344
- const computed = light.computeTransformedInformation();
345
- const scaledIntensity = light.getScaledIntensity();
346
- const position = computed ? light.transformedPosition : light.position;
347
- const diffuse = light.diffuse.scaleToRef(scaledIntensity, TmpColors.Color3[0]);
348
- const specular = light.specular.scaleToRef(scaledIntensity, TmpColors.Color3[1]);
349
- const range = Math.min(light.range, this.maxRange);
350
- const inverseSquaredRange = Math.max(light._inverseSquaredRange, this._minInverseSquaredRange);
351
- // vLightData
352
- buf[off + 0] = position.x - offset.x;
353
- buf[off + 1] = position.y - offset.y;
354
- buf[off + 2] = position.z - offset.z;
355
- buf[off + 3] = 0;
356
- // vLightDiffuse
357
- buf[off + 4] = diffuse.r;
358
- buf[off + 5] = diffuse.g;
359
- buf[off + 6] = diffuse.b;
360
- buf[off + 7] = range;
361
- // vLightSpecular
362
- buf[off + 8] = specular.r;
363
- buf[off + 9] = specular.g;
364
- buf[off + 10] = specular.b;
365
- buf[off + 11] = light.radius;
366
- // vLightDirection
367
- buf[off + 12] = 0;
368
- buf[off + 13] = 0;
369
- buf[off + 14] = 0;
370
- buf[off + 15] = -1;
371
- // vLightFalloff
372
- buf[off + 16] = range;
373
- buf[off + 17] = inverseSquaredRange;
374
- buf[off + 18] = 0;
375
- buf[off + 19] = 0;
376
- if (light.getTypeID() === LightConstants.LIGHTTYPEID_SPOTLIGHT) {
377
- const spotLight = light;
378
- const direction = Vector3.NormalizeToRef(computed ? spotLight.transformedDirection : spotLight.direction, TmpVectors.Vector3[0]);
379
- // vLightData.a
380
- buf[off + 3] = spotLight.exponent;
381
- // vLightDirection
382
- buf[off + 12] = direction.x;
383
- buf[off + 13] = direction.y;
384
- buf[off + 14] = direction.z;
385
- buf[off + 15] = spotLight._cosHalfAngle;
386
- // vLightFalloff.zw
387
- buf[off + 18] = spotLight._lightAngleScale;
388
- buf[off + 19] = spotLight._lightAngleOffset;
457
+ /**
458
+ * Adds a light to the clustering system.
459
+ * @param light The light to add
460
+ */
461
+ addLight(light) {
462
+ if (!_a.IsLightSupported(light)) {
463
+ Logger.Warn("Attempting to add a light to cluster that does not support clustering");
464
+ return;
465
+ }
466
+ if (light._clusteredContainer) {
467
+ Logger.Warn("Attempting to add a light to a cluster that is already owned by a clustered light container");
468
+ return;
469
+ }
470
+ light._clusteredContainer = this;
471
+ // scene.removeLight returns -1 if the light wasn't in scene.lights. In that case the
472
+ // mesh.lightSources cleanup it normally performs didn't happen — but the light may still be
473
+ // there: lights constructed with `dontAddToScene = true` are pushed into mesh.lightSources
474
+ // by the Light constructor (the `includedOnlyMeshes` setter calls `_resyncMeshes`).
475
+ // Without explicit cleanup, the orphan would be picked up by PrepareDefinesForLights and
476
+ // rendered as a regular point/spot light, bypassing the cluster (notably ignoring `maxRange`).
477
+ if (this._scene.removeLight(light) === -1) {
478
+ for (const mesh of this._scene.meshes) {
479
+ mesh._removeLightSource(light, false);
480
+ }
481
+ }
482
+ this._lights.push(light);
483
+ this._sortedLights.push(light);
484
+ this._proxyMesh.isVisible = true;
485
+ this._proxyMesh.thinInstanceCount = this._sortedLights.length;
486
+ }
487
+ /**
488
+ * Removes a light from the clustering system.
489
+ * @param light The light to remove
490
+ * @returns the index where the light was in the light list
491
+ */
492
+ removeLight(light) {
493
+ // Convert to `Light` array without cast so `indexOf` has correct typing
494
+ const sortedLights = this._sortedLights;
495
+ const sortedIndex = sortedLights.indexOf(light);
496
+ if (sortedIndex !== -1) {
497
+ sortedLights.splice(sortedIndex, 1);
498
+ this._proxyMesh.thinInstanceCount = sortedLights.length;
499
+ if (sortedLights.length === 0) {
500
+ this._proxyMesh.isVisible = false;
501
+ }
502
+ }
503
+ const index = this._lights.indexOf(light);
504
+ if (index !== -1) {
505
+ this._lights.splice(index, 1);
506
+ // We treat the unsorted array as the "real" one so only add back to the scene if it was found in that
507
+ if (light._clusteredContainer === this) {
508
+ light._clusteredContainer = null;
509
+ }
510
+ this._scene.addLight(light);
511
+ }
512
+ return index;
389
513
  }
390
- // Update the depth slices that include this light
391
- const firstSlice = this._getSliceIndex(camera, light._currentViewDepth - range);
392
- const lastSlice = this._getSliceIndex(camera, light._currentViewDepth + range);
393
- for (let j = firstSlice; j <= lastSlice; j += 1) {
394
- if (j < 0 || j >= this._depthSlices) {
395
- continue;
396
- }
397
- else if (j > minSlice) {
398
- // Update min index
399
- this._sliceRanges[j * 2] = i;
400
- minSlice = j;
401
- }
402
- // Update max index
403
- this._sliceRanges[j * 2 + 1] = i;
514
+ _buildUniformLayout() {
515
+ this._uniformBuffer.addUniform("vLightData", 4);
516
+ this._uniformBuffer.addUniform("vLightDiffuse", 4);
517
+ this._uniformBuffer.addUniform("vLightSpecular", 4);
518
+ this._uniformBuffer.addUniform("vSliceData", 2);
519
+ // _depthSlices might not be initialized yet
520
+ this._uniformBuffer.addUniform("vSliceRanges", 2, this._depthSlices ?? DefaultDepthSlices);
521
+ this._uniformBuffer.addUniform("shadowsInfo", 3);
522
+ this._uniformBuffer.addUniform("depthValues", 2);
523
+ this._uniformBuffer.create();
404
524
  }
405
- }
406
- const engine = this.getEngine();
407
- if (engine.isWebGPU) {
408
- // Whenever the light data changes we have to flush pending WebGPU command buffers so that
409
- // previous render passes use the old data and later render passes use the new data.
410
- engine.flushFramebuffer();
411
- }
412
- this._lightDataTexture.update(this._lightDataBuffer);
413
- // Refresh camera-dependent UBO fields when running under FAST snapshot rendering, where
414
- // ObjectRenderer.render bypasses the rendering manager and Light._bindLight is not
415
- // re-invoked each frame. Without this, transferToEffect would never run again after the
416
- // recording frame and the slice data would stay frozen, producing visibly stale lighting
417
- // as the camera moves. STANDARD snapshot mode and non-snapshot rendering still go through
418
- // material binding each frame, so transferToEffect already keeps the UBO up to date.
419
- if (this._lastBoundLightIndex !== null && engine.snapshotRendering && engine.snapshotRenderingMode === 1) {
420
- this._uniformBuffer.updateFloat2("vSliceData", this._sliceScale, this._sliceBias, this._lastBoundLightIndex);
421
- this._uniformBuffer.updateFloatArray("vSliceRanges", this._sliceRanges, this._lastBoundLightIndex);
422
- this._uniformBuffer.update();
423
- }
424
- }
425
- dispose(doNotRecurse, disposeMaterialAndTextures) {
426
- for (const light of this._lights) {
427
- light.dispose(doNotRecurse, disposeMaterialAndTextures);
428
- }
429
- this._lightDataTexture.dispose();
430
- this._tileMaskTexture.dispose();
431
- this._tileMaskBuffer?.dispose();
432
- this._proxyMesh.dispose(doNotRecurse, disposeMaterialAndTextures);
433
- super.dispose(doNotRecurse, disposeMaterialAndTextures);
434
- }
435
- /**
436
- * Adds a light to the clustering system.
437
- * @param light The light to add
438
- */
439
- addLight(light) {
440
- if (!ClusteredLightContainer.IsLightSupported(light)) {
441
- Logger.Warn("Attempting to add a light to cluster that does not support clustering");
442
- return;
443
- }
444
- if (light._clusteredContainer) {
445
- Logger.Warn("Attempting to add a light to a cluster that is already owned by a clustered light container");
446
- return;
447
- }
448
- light._clusteredContainer = this;
449
- // scene.removeLight returns -1 if the light wasn't in scene.lights. In that case the
450
- // mesh.lightSources cleanup it normally performs didn't happen — but the light may still be
451
- // there: lights constructed with `dontAddToScene = true` are pushed into mesh.lightSources
452
- // by the Light constructor (the `includedOnlyMeshes` setter calls `_resyncMeshes`).
453
- // Without explicit cleanup, the orphan would be picked up by PrepareDefinesForLights and
454
- // rendered as a regular point/spot light, bypassing the cluster (notably ignoring `maxRange`).
455
- if (this._scene.removeLight(light) === -1) {
456
- for (const mesh of this._scene.meshes) {
457
- mesh._removeLightSource(light, false);
525
+ transferToEffect(effect, lightIndex) {
526
+ const engine = this.getEngine();
527
+ const hscale = this._horizontalTiles / engine.getRenderWidth();
528
+ const vscale = this._verticalTiles / engine.getRenderHeight();
529
+ this._uniformBuffer.updateFloat4("vLightData", hscale, vscale, this._verticalTiles, this._tileMaskBatches, lightIndex);
530
+ this._uniformBuffer.updateFloat2("vSliceData", this._sliceScale, this._sliceBias, lightIndex);
531
+ this._uniformBuffer.updateFloatArray("vSliceRanges", this._sliceRanges, lightIndex);
532
+ this._lastBoundLightIndex = lightIndex;
533
+ return this;
458
534
  }
459
- }
460
- this._lights.push(light);
461
- this._sortedLights.push(light);
462
- this._proxyMesh.isVisible = true;
463
- this._proxyMesh.thinInstanceCount = this._sortedLights.length;
464
- }
465
- /**
466
- * Removes a light from the clustering system.
467
- * @param light The light to remove
468
- * @returns the index where the light was in the light list
469
- */
470
- removeLight(light) {
471
- // Convert to `Light` array without cast so `indexOf` has correct typing
472
- const sortedLights = this._sortedLights;
473
- const sortedIndex = sortedLights.indexOf(light);
474
- if (sortedIndex !== -1) {
475
- sortedLights.splice(sortedIndex, 1);
476
- this._proxyMesh.thinInstanceCount = sortedLights.length;
477
- if (sortedLights.length === 0) {
478
- this._proxyMesh.isVisible = false;
535
+ transferTexturesToEffect(effect, lightIndex) {
536
+ const engine = this.getEngine();
537
+ effect.setTexture("lightDataTexture" + lightIndex, this._lightDataTexture);
538
+ if (engine.isWebGPU) {
539
+ engine.setStorageBuffer("tileMaskBuffer" + lightIndex, this._tileMaskBuffer);
540
+ }
541
+ else {
542
+ effect.setTexture("tileMaskTexture" + lightIndex, this._tileMaskTexture);
543
+ }
544
+ return this;
479
545
  }
480
- }
481
- const index = this._lights.indexOf(light);
482
- if (index !== -1) {
483
- this._lights.splice(index, 1);
484
- // We treat the unsorted array as the "real" one so only add back to the scene if it was found in that
485
- if (light._clusteredContainer === this) {
486
- light._clusteredContainer = null;
546
+ /**
547
+ * Transfers the effect to the node material effect
548
+ * @param _effect the effect to transfer to
549
+ * @returns the light
550
+ */
551
+ transferToNodeMaterialEffect(_effect) {
552
+ return this;
487
553
  }
488
- this._scene.addLight(light);
489
- }
490
- return index;
491
- }
492
- _buildUniformLayout() {
493
- this._uniformBuffer.addUniform("vLightData", 4);
494
- this._uniformBuffer.addUniform("vLightDiffuse", 4);
495
- this._uniformBuffer.addUniform("vLightSpecular", 4);
496
- this._uniformBuffer.addUniform("vSliceData", 2);
497
- // _depthSlices might not be initialized yet
498
- this._uniformBuffer.addUniform("vSliceRanges", 2, this._depthSlices ?? DefaultDepthSlices);
499
- this._uniformBuffer.addUniform("shadowsInfo", 3);
500
- this._uniformBuffer.addUniform("depthValues", 2);
501
- this._uniformBuffer.create();
502
- }
503
- transferToEffect(effect, lightIndex) {
504
- const engine = this.getEngine();
505
- const hscale = this._horizontalTiles / engine.getRenderWidth();
506
- const vscale = this._verticalTiles / engine.getRenderHeight();
507
- this._uniformBuffer.updateFloat4("vLightData", hscale, vscale, this._verticalTiles, this._tileMaskBatches, lightIndex);
508
- this._uniformBuffer.updateFloat2("vSliceData", this._sliceScale, this._sliceBias, lightIndex);
509
- this._uniformBuffer.updateFloatArray("vSliceRanges", this._sliceRanges, lightIndex);
510
- this._lastBoundLightIndex = lightIndex;
511
- return this;
512
- }
513
- transferTexturesToEffect(effect, lightIndex) {
514
- const engine = this.getEngine();
515
- effect.setTexture("lightDataTexture" + lightIndex, this._lightDataTexture);
516
- if (engine.isWebGPU) {
517
- engine.setStorageBuffer("tileMaskBuffer" + lightIndex, this._tileMaskBuffer);
518
- }
519
- else {
520
- effect.setTexture("tileMaskTexture" + lightIndex, this._tileMaskTexture);
521
- }
522
- return this;
523
- }
524
- /**
525
- * Transfers the effect to the node material effect
526
- * @param _effect the effect to transfer to
527
- * @returns the light
528
- */
529
- transferToNodeMaterialEffect(_effect) {
530
- return this;
531
- }
532
- prepareLightSpecificDefines(defines, lightIndex) {
533
- defines["CLUSTLIGHT" + lightIndex] = true;
534
- defines["CLUSTLIGHT_BATCH"] = this._batchSize;
535
- defines["CLUSTLIGHT_SLICES"] = this._depthSlices;
536
- }
537
- /**
538
- * Returns whether this light is ready to be used
539
- * @returns true if the light is ready
540
- */
541
- _isReady() {
542
- this._updateBatches();
543
- return this._proxyMesh.isReady(true, true);
544
- }
545
- /**
546
- * Serializes the ClusteredLightContainer to a JSON object, including all child lights.
547
- * @returns the serialized object
548
- */
549
- serialize() {
550
- const serializationObject = super.serialize();
551
- // Serialize child lights inline so they round-trip with the container.
552
- // Child lights are removed from scene.lights by addLight(), so the scene
553
- // serializer would not reach them on its own.
554
- serializationObject.clusteredLights = [];
555
- for (const light of this._lights) {
556
- if (!light.doNotSerialize) {
557
- serializationObject.clusteredLights.push(light.serialize());
554
+ prepareLightSpecificDefines(defines, lightIndex) {
555
+ defines["CLUSTLIGHT" + lightIndex] = true;
556
+ defines["CLUSTLIGHT_BATCH"] = this._batchSize;
557
+ defines["CLUSTLIGHT_SLICES"] = this._depthSlices;
558
558
  }
559
- }
560
- return serializationObject;
561
- }
562
- _onParsed(parsedLight, scene) {
563
- if (parsedLight.clusteredLights) {
564
- // Parse child lights first, but defer addLight() until after the loader
565
- // fixup passes (parent resolution, excluded/included mesh resolution)
566
- // have run on scene.lights. addLight() removes lights from scene.lights,
567
- // which would cause those fixups to miss the child lights.
568
- const parsedChildLights = [];
569
- for (const parsedChildLight of parsedLight.clusteredLights) {
570
- const childLight = Light.Parse(parsedChildLight, scene);
571
- if (childLight) {
572
- parsedChildLights.push(childLight);
559
+ /**
560
+ * Returns whether this light is ready to be used
561
+ * @returns true if the light is ready
562
+ */
563
+ _isReady() {
564
+ this._updateBatches();
565
+ return this._proxyMesh.isReady(true, true);
566
+ }
567
+ /**
568
+ * Serializes the ClusteredLightContainer to a JSON object, including all child lights.
569
+ * @returns the serialized object
570
+ */
571
+ serialize() {
572
+ const serializationObject = super.serialize();
573
+ // Serialize child lights inline so they round-trip with the container.
574
+ // Child lights are removed from scene.lights by addLight(), so the scene
575
+ // serializer would not reach them on its own.
576
+ serializationObject.clusteredLights = [];
577
+ for (const light of this._lights) {
578
+ if (!light.doNotSerialize) {
579
+ serializationObject.clusteredLights.push(light.serialize());
580
+ }
573
581
  }
582
+ return serializationObject;
574
583
  }
575
- if (parsedChildLights.length > 0) {
576
- scene.onDataLoadedObservable.addOnce(() => {
577
- for (const childLight of parsedChildLights) {
578
- this.addLight(childLight);
584
+ _onParsed(parsedLight, scene, rootUrl = "") {
585
+ if (parsedLight.clusteredLights) {
586
+ // Parse child lights first, but defer addLight() until after the loader
587
+ // fixup passes (parent resolution, excluded/included mesh resolution)
588
+ // have run on scene.lights. addLight() removes lights from scene.lights,
589
+ // which would cause those fixups to miss the child lights.
590
+ const parsedChildLights = [];
591
+ for (const parsedChildLight of parsedLight.clusteredLights) {
592
+ const childLight = Light.Parse(parsedChildLight, scene, rootUrl);
593
+ if (childLight) {
594
+ parsedChildLights.push(childLight);
595
+ }
579
596
  }
580
- });
597
+ if (parsedChildLights.length > 0) {
598
+ scene.onDataLoadedObservable.addOnce(() => {
599
+ for (const childLight of parsedChildLights) {
600
+ this.addLight(childLight);
601
+ }
602
+ });
603
+ }
604
+ }
581
605
  }
582
- }
583
- }
584
- }
585
- /** @internal */
586
- ClusteredLightContainer._SceneComponentInitialization = () => {
587
- throw _WarnImport("ClusteredLightingSceneComponent");
588
- };
589
- __decorate([
590
- serialize()
591
- ], ClusteredLightContainer.prototype, "horizontalTiles", null);
592
- __decorate([
593
- serialize()
594
- ], ClusteredLightContainer.prototype, "verticalTiles", null);
595
- __decorate([
596
- serialize()
597
- ], ClusteredLightContainer.prototype, "depthSlices", null);
598
- __decorate([
599
- serialize()
600
- ], ClusteredLightContainer.prototype, "maxRange", null);
606
+ },
607
+ (() => {
608
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
609
+ _get_horizontalTiles_decorators = [serialize()];
610
+ _get_verticalTiles_decorators = [serialize()];
611
+ _get_depthSlices_decorators = [serialize()];
612
+ _get_maxRange_decorators = [serialize()];
613
+ __esDecorate(_a, null, _get_horizontalTiles_decorators, { kind: "getter", name: "horizontalTiles", static: false, private: false, access: { has: obj => "horizontalTiles" in obj, get: obj => obj.horizontalTiles }, metadata: _metadata }, null, _instanceExtraInitializers);
614
+ __esDecorate(_a, null, _get_verticalTiles_decorators, { kind: "getter", name: "verticalTiles", static: false, private: false, access: { has: obj => "verticalTiles" in obj, get: obj => obj.verticalTiles }, metadata: _metadata }, null, _instanceExtraInitializers);
615
+ __esDecorate(_a, null, _get_depthSlices_decorators, { kind: "getter", name: "depthSlices", static: false, private: false, access: { has: obj => "depthSlices" in obj, get: obj => obj.depthSlices }, metadata: _metadata }, null, _instanceExtraInitializers);
616
+ __esDecorate(_a, null, _get_maxRange_decorators, { kind: "getter", name: "maxRange", static: false, private: false, access: { has: obj => "maxRange" in obj, get: obj => obj.maxRange }, metadata: _metadata }, null, _instanceExtraInitializers);
617
+ if (_metadata) Object.defineProperty(_a, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
618
+ })(),
619
+ /** @internal */
620
+ _a._SceneComponentInitialization = () => {
621
+ throw _WarnImport("ClusteredLightingSceneComponent");
622
+ },
623
+ _a;
624
+ })();
625
+ export { ClusteredLightContainer };
601
626
  let _Registered = false;
602
627
  /**
603
628
  * Register side effects for clusteredLightContainer.