@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
@@ -40,6 +40,19 @@ interface IUpdateOptions {
40
40
  /** @internal When set, skips reprocessing splats [0, previousVertexCount) and copies from cached arrays instead. */
41
41
  previousVertexCount?: number;
42
42
  }
43
+ /**
44
+ * Defines a contiguous source-splat range to render from a GaussianSplattingMesh.
45
+ */
46
+ export interface IGaussianSplattingSplatRange {
47
+ /**
48
+ * First source splat index to render.
49
+ */
50
+ offset: number;
51
+ /**
52
+ * Number of source splats to render.
53
+ */
54
+ count: number;
55
+ }
43
56
  interface ITextureDataUpdateCapableEngine {
44
57
  updateTextureData(texture: InternalTexture, imageData: ArrayBufferView, xOffset: number, yOffset: number, width: number, height: number, faceIndex?: number, lod?: number, generateMipMaps?: boolean): void;
45
58
  updateRawTexture(texture: Nullable<InternalTexture>, data: Nullable<ArrayBufferView>, format: number, invertY: boolean, compression?: Nullable<string>, type?: number, useSRGBBuffer?: boolean): void;
@@ -246,6 +259,17 @@ export interface PLYHeader {
246
259
  * @internal Use GaussianSplattingMesh instead; this class is an internal implementation detail.
247
260
  */
248
261
  export declare class GaussianSplattingMeshBase extends Mesh {
262
+ /**
263
+ * When true (default), the depth-sort worker uses the fast O(n) counting (radix) sort. Set to false to
264
+ * fall back to the legacy comparison sort (useful for A/B comparison or as a safety fallback). The change
265
+ * takes effect on the next sort.
266
+ */
267
+ static UseCountingSort: boolean;
268
+ /**
269
+ * When true, the depth-sort worker logs each sort's duration (ms) and active splat count to the console.
270
+ * Off by default; intended for performance investigation only.
271
+ */
272
+ static LogSortPerformance: boolean;
249
273
  /** @internal */
250
274
  _vertexCount: number;
251
275
  protected _worker: Nullable<Worker>;
@@ -254,6 +278,7 @@ export declare class GaussianSplattingMeshBase extends Mesh {
254
278
  protected _canPostToWorker: boolean;
255
279
  private _readyToDisplay;
256
280
  private _sortRequestId;
281
+ private _activeRangeVersion;
257
282
  private _hasRenderedOnce;
258
283
  protected _covariancesATexture: Nullable<BaseTexture>;
259
284
  protected _covariancesBTexture: Nullable<BaseTexture>;
@@ -286,6 +311,9 @@ export declare class GaussianSplattingMeshBase extends Mesh {
286
311
  private _splatSizeMin;
287
312
  private _splatSizeMax;
288
313
  private _sortIsDirty;
314
+ private _activeSplatRanges;
315
+ private _activeSplatRangeKey;
316
+ private _activeSplatRenderCount;
289
317
  protected _cachedBoundingMin: Nullable<Vector3>;
290
318
  protected _cachedBoundingMax: Nullable<Vector3>;
291
319
  private static _RowOutputLength;
@@ -317,6 +345,7 @@ export declare class GaussianSplattingMeshBase extends Mesh {
317
345
  * @internal
318
346
  */
319
347
  protected static _GetSplatDataFloats(data: ArrayBuffer | ArrayBufferView): Float32Array;
348
+ private static _BuildSplatRangeData;
320
349
  /**
321
350
  * Cosine value of the angle threshold to update view dependent splat sorting. Default is 0.0001.
322
351
  */
@@ -346,6 +375,47 @@ export declare class GaussianSplattingMeshBase extends Mesh {
346
375
  * Number of splats in the mesh
347
376
  */
348
377
  get splatCount(): number | undefined;
378
+ /**
379
+ * Number of source splats currently selected for rendering.
380
+ * When no range filter is active, this is the mesh's full source splat count.
381
+ */
382
+ get renderedSplatCount(): number;
383
+ /**
384
+ * Restricts rendering to the provided source splat ranges.
385
+ * Passing `null` clears the range filter and renders the full source splat set.
386
+ * @param ranges contiguous source ranges to render, or null to render all splats
387
+ */
388
+ setSplatIndexRanges(ranges: Nullable<readonly IGaussianSplattingSplatRange[]>): void;
389
+ private _setSplatIndexRanges;
390
+ /**
391
+ * Whether the depth sort is settled: a sort computed for the current active ranges and camera has been
392
+ * applied to the rendered index buffer, and no further sort is pending or in flight. For a static camera
393
+ * and a fixed active set this becomes true once the final sort completes. Used by streaming subclasses to
394
+ * detect when rendering is fully up to date (e.g. for deterministic screenshots) and by IBL shadows to
395
+ * avoid voxelizing against an index buffer the worker has not finished (re)building yet.
396
+ * @internal
397
+ */
398
+ get _isDepthSortSettled(): boolean;
399
+ private _ensureDepthMixSize;
400
+ /**
401
+ * Sends the active source-splat intervals to the sort worker. When no range filter is active,
402
+ * a single interval covering all source splats is sent so the worker never assumes the full set.
403
+ */
404
+ private _postIntervalsToWorker;
405
+ /**
406
+ * Initializes this mesh to render from an externally-provided, GPU-decoded work buffer, bypassing the
407
+ * CPU `updateData` path. The four textures must hold the standard decoded GS layout addressed by linear
408
+ * splat index over a square texture: centers (x,y,z,1), covariance A (Sigma00,01,02,11) and B
409
+ * (Sigma12,22,*,*) as full covariance (so `center.w` is 1), and RGBA color. `splatPositions` are the
410
+ * stride-4 CPU centers consumed by the depth-sort worker.
411
+ * @param centers centers texture
412
+ * @param covariancesA covariance A texture
413
+ * @param covariancesB covariance B texture
414
+ * @param colors color texture
415
+ * @param splatPositions stride-4 CPU centers for depth sorting (length vertexCount*4)
416
+ * @param vertexCount number of splats addressable in the work buffer
417
+ */
418
+ protected _setExternalWorkBuffer(centers: BaseTexture, covariancesA: BaseTexture, covariancesB: BaseTexture, colors: BaseTexture, splatPositions: Float32Array, vertexCount: number): void;
349
419
  /**
350
420
  * returns the splats data array buffer that contains in order : postions (3 floats), size (3 floats), color (4 bytes), orientation quaternion (4 bytes)
351
421
  * Only available if the mesh was created with keepInRam: true
@@ -434,6 +504,12 @@ export declare class GaussianSplattingMeshBase extends Mesh {
434
504
  * Get the compensation state
435
505
  */
436
506
  get compensation(): boolean;
507
+ /**
508
+ * Minimum projected splat size, in pixels, below which a splat is discarded (0 = disabled).
509
+ * Applied in real time; no rebuild required.
510
+ */
511
+ get minPixelSize(): number;
512
+ set minPixelSize(value: number);
437
513
  private _loadingPromise;
438
514
  /**
439
515
  * set rendering material
@@ -559,7 +635,6 @@ export declare class GaussianSplattingMeshBase extends Mesh {
559
635
  * @returns a new Gaussian Splatting Mesh
560
636
  */
561
637
  clone(name?: string): GaussianSplattingMeshBase;
562
- private static _CreateWorker;
563
638
  protected _makeEmptySplat(index: number, covA: Uint16Array, covB: Uint16Array, colorArray: Uint8Array): void;
564
639
  /**
565
640
  * Processes a single splat from the source buffer (at srcIndex) and writes the result into
@@ -618,6 +693,16 @@ export declare class GaussianSplattingMeshBase extends Mesh {
618
693
  * Subclasses (e.g. compound) may override to additionally post part-index data.
619
694
  */
620
695
  protected _notifyWorkerNewData(): void;
696
+ /**
697
+ * Patches only a contiguous range of source-splat centers in the sort worker, instead of re-copying and
698
+ * transferring the entire position buffer (which is hundreds of MB for large streamed datasets and caused
699
+ * a multi-frame freeze on every LOD decode). The worker must already hold a full-size position buffer (from
700
+ * the initial {@link GaussianSplattingSortWorkerCommand.POSITIONS} message at worker creation). Marks the
701
+ * sort dirty so the new splats are sorted in; the caller is responsible for any interval/range refresh.
702
+ * @param splatOffset first splat index of the updated range
703
+ * @param splatCount number of splats in the updated range
704
+ */
705
+ protected _postWorkerPositionsRange(splatOffset: number, splatCount: number): void;
621
706
  private _updateData;
622
707
  /**
623
708
  * Update asynchronously the buffer
@@ -13,6 +13,7 @@ import { Scalar } from "../../Maths/math.scalar.js";
13
13
  import { runCoroutineSync, runCoroutineAsync, createYieldingScheduler } from "../../Misc/coroutine.js";
14
14
  import { EngineStore } from "../../Engines/engineStore.js";
15
15
  import { ImportMeshAsync } from "../../Loading/sceneLoader.js";
16
+ import { GaussianSplattingSortWorker, GaussianSplattingSortWorkerCommand } from "./gaussianSplattingSortWorker.js";
16
17
  const IsNative = typeof _native !== "undefined";
17
18
  const Native = IsNative ? _native : null;
18
19
  // @internal
@@ -273,6 +274,27 @@ export class GaussianSplattingMeshBase extends Mesh {
273
274
  }
274
275
  return new Float32Array(bytes.buffer, bytes.byteOffset, bytes.byteLength / floatSize);
275
276
  }
277
+ static _BuildSplatRangeData(ranges, vertexCount) {
278
+ if (ranges === null) {
279
+ return { ranges: null, count: vertexCount, key: "" };
280
+ }
281
+ const rangePairs = [];
282
+ let totalCount = 0;
283
+ let key = "";
284
+ for (const range of ranges) {
285
+ const start = Math.max(0, Math.floor(range.offset));
286
+ const count = Math.max(0, Math.floor(range.count));
287
+ const end = Math.min(vertexCount, start + count);
288
+ const rangeCount = Math.max(0, end - start);
289
+ if (rangeCount === 0) {
290
+ continue;
291
+ }
292
+ rangePairs.push(start, rangeCount);
293
+ totalCount += rangeCount;
294
+ key += `${start}:${rangeCount};`;
295
+ }
296
+ return { ranges: new Uint32Array(rangePairs), count: totalCount, key };
297
+ }
276
298
  /**
277
299
  * If true, disables depth sorting of the splats (default: false)
278
300
  */
@@ -326,6 +348,111 @@ export class GaussianSplattingMeshBase extends Mesh {
326
348
  get splatCount() {
327
349
  return this._splatIndex?.length;
328
350
  }
351
+ /**
352
+ * Number of source splats currently selected for rendering.
353
+ * When no range filter is active, this is the mesh's full source splat count.
354
+ */
355
+ get renderedSplatCount() {
356
+ return this._activeSplatRanges ? this._activeSplatRenderCount : this._vertexCount;
357
+ }
358
+ /**
359
+ * Restricts rendering to the provided source splat ranges.
360
+ * Passing `null` clears the range filter and renders the full source splat set.
361
+ * @param ranges contiguous source ranges to render, or null to render all splats
362
+ */
363
+ setSplatIndexRanges(ranges) {
364
+ this._setSplatIndexRanges(ranges);
365
+ }
366
+ _setSplatIndexRanges(ranges) {
367
+ const rangeData = GaussianSplattingMeshBase._BuildSplatRangeData(ranges, this._vertexCount);
368
+ const isSameRangeSet = this._activeSplatRanges === null ? rangeData.ranges === null : rangeData.ranges !== null && this._activeSplatRangeKey === rangeData.key;
369
+ if (isSameRangeSet) {
370
+ return;
371
+ }
372
+ this._activeSplatRanges = rangeData.ranges;
373
+ this._activeSplatRangeKey = rangeData.key;
374
+ this._activeSplatRenderCount = rangeData.count;
375
+ this._activeRangeVersion++;
376
+ this._postIntervalsToWorker();
377
+ if (this._worker) {
378
+ // Defer swapping the rendered index buffer until the worker returns a depth sort computed for
379
+ // this exact range set (see the worker `onmessage` handler). Until then we keep rendering the
380
+ // previous fully-sorted state, so a range/LOD change never shows an unsorted flash nor a stale
381
+ // index buffer (rendering indices that belong to a different active set, which caused the
382
+ // disappear/reappear flicker). Only the worker's depth buffer is resized here so the next sort
383
+ // produces the right number of entries.
384
+ this._ensureDepthMixSize(Math.max((this._activeSplatRenderCount + 15) & ~0xf, 16));
385
+ this._sortIsDirty = true;
386
+ this._postToWorker(true);
387
+ }
388
+ else {
389
+ // Synchronous sort paths (disabled depth sort / Native): swap the index buffer immediately.
390
+ this._updateSplatIndexBuffer(this._vertexCount);
391
+ this._postToWorker(true);
392
+ }
393
+ }
394
+ /**
395
+ * Whether the depth sort is settled: a sort computed for the current active ranges and camera has been
396
+ * applied to the rendered index buffer, and no further sort is pending or in flight. For a static camera
397
+ * and a fixed active set this becomes true once the final sort completes. Used by streaming subclasses to
398
+ * detect when rendering is fully up to date (e.g. for deterministic screenshots) and by IBL shadows to
399
+ * avoid voxelizing against an index buffer the worker has not finished (re)building yet.
400
+ * @internal
401
+ */
402
+ get _isDepthSortSettled() {
403
+ return this._readyToDisplay && !this._sortIsDirty && this._canPostToWorker;
404
+ }
405
+ // (Re)allocates the worker depth buffer to the given padded size. A fresh array is allocated when the
406
+ // size differs or the current buffer is detached (in-flight in the worker), so a queued sort can be
407
+ // re-posted with a correctly-sized buffer without disturbing the in-flight one.
408
+ _ensureDepthMixSize(paddedCount) {
409
+ if (IsNative) {
410
+ return;
411
+ }
412
+ if (!this._depthMix || this._depthMix.length !== paddedCount || this._depthMix.buffer.byteLength === 0) {
413
+ this._depthMix = new BigInt64Array(paddedCount);
414
+ }
415
+ }
416
+ /**
417
+ * Sends the active source-splat intervals to the sort worker. When no range filter is active,
418
+ * a single interval covering all source splats is sent so the worker never assumes the full set.
419
+ */
420
+ _postIntervalsToWorker() {
421
+ if (!this._worker) {
422
+ return;
423
+ }
424
+ const intervals = this._activeSplatRanges ? new Uint32Array(this._activeSplatRanges) : new Uint32Array([0, this._vertexCount]);
425
+ this._worker.postMessage({ command: GaussianSplattingSortWorkerCommand.INTERVALS, intervals }, [intervals.buffer]);
426
+ }
427
+ /**
428
+ * Initializes this mesh to render from an externally-provided, GPU-decoded work buffer, bypassing the
429
+ * CPU `updateData` path. The four textures must hold the standard decoded GS layout addressed by linear
430
+ * splat index over a square texture: centers (x,y,z,1), covariance A (Sigma00,01,02,11) and B
431
+ * (Sigma12,22,*,*) as full covariance (so `center.w` is 1), and RGBA color. `splatPositions` are the
432
+ * stride-4 CPU centers consumed by the depth-sort worker.
433
+ * @param centers centers texture
434
+ * @param covariancesA covariance A texture
435
+ * @param covariancesB covariance B texture
436
+ * @param colors color texture
437
+ * @param splatPositions stride-4 CPU centers for depth sorting (length vertexCount*4)
438
+ * @param vertexCount number of splats addressable in the work buffer
439
+ */
440
+ _setExternalWorkBuffer(centers, covariancesA, covariancesB, colors, splatPositions, vertexCount) {
441
+ this._covariancesATexture = covariancesA;
442
+ this._covariancesBTexture = covariancesB;
443
+ this._centersTexture = centers;
444
+ this._colorsTexture = colors;
445
+ this._splatPositions = splatPositions;
446
+ this._vertexCount = vertexCount;
447
+ this._activeSplatRanges = null;
448
+ this._activeSplatRangeKey = "";
449
+ this._activeSplatRenderCount = 0;
450
+ this._readyToDisplay = false;
451
+ // Sizes _splatIndex/_depthMix, starts the sort worker, and posts positions + intervals.
452
+ this._instantiateWorker();
453
+ // updateData (bypassed here) normally enables the mesh; do it explicitly for the work-buffer path.
454
+ this.setEnabled(true);
455
+ }
329
456
  /**
330
457
  * returns the splats data array buffer that contains in order : postions (3 floats), size (3 floats), color (4 bytes), orientation quaternion (4 bytes)
331
458
  * Only available if the mesh was created with keepInRam: true
@@ -525,6 +652,18 @@ export class GaussianSplattingMeshBase extends Mesh {
525
652
  get compensation() {
526
653
  return this._material instanceof GaussianSplattingMaterial ? this._material.compensation : false;
527
654
  }
655
+ /**
656
+ * Minimum projected splat size, in pixels, below which a splat is discarded (0 = disabled).
657
+ * Applied in real time; no rebuild required.
658
+ */
659
+ get minPixelSize() {
660
+ return this._material instanceof GaussianSplattingMaterial ? this._material.minPixelSize : 0;
661
+ }
662
+ set minPixelSize(value) {
663
+ if (this._material instanceof GaussianSplattingMaterial) {
664
+ this._material.minPixelSize = Math.max(0, value);
665
+ }
666
+ }
528
667
  /**
529
668
  * set rendering material
530
669
  */
@@ -577,6 +716,9 @@ export class GaussianSplattingMeshBase extends Mesh {
577
716
  this._canPostToWorker = true;
578
717
  this._readyToDisplay = false;
579
718
  this._sortRequestId = 0;
719
+ // Incremented on every active-range change. A worker sort result is only applied when it was computed
720
+ // for the current range version (and size), so a sort for stale ranges is never rendered.
721
+ this._activeRangeVersion = 0;
580
722
  this._hasRenderedOnce = false;
581
723
  this._covariancesATexture = null;
582
724
  this._covariancesBTexture = null;
@@ -609,6 +751,9 @@ export class GaussianSplattingMeshBase extends Mesh {
609
751
  this._splatSizeMin = Infinity;
610
752
  this._splatSizeMax = -Infinity;
611
753
  this._sortIsDirty = false;
754
+ this._activeSplatRanges = null;
755
+ this._activeSplatRangeKey = "";
756
+ this._activeSplatRenderCount = 0;
612
757
  // Cached bounding box for incremental addPart updates (O(1) vs O(N) scan of positions)
613
758
  this._cachedBoundingMin = null;
614
759
  this._cachedBoundingMax = null;
@@ -910,16 +1055,27 @@ export class GaussianSplattingMeshBase extends Mesh {
910
1055
  this._canPostToWorker = false;
911
1056
  if (this._worker) {
912
1057
  this._worker.postMessage({
1058
+ command: GaussianSplattingSortWorkerCommand.SORT,
913
1059
  worldMatrix: worldMatrix.m,
914
1060
  cameraForward: [cameraViewMatrix.m[2], cameraViewMatrix.m[6], cameraViewMatrix.m[10]],
915
1061
  cameraPosition: [camera.globalPosition.x, camera.globalPosition.y, camera.globalPosition.z],
916
1062
  depthMix: this._depthMix,
917
1063
  cameraId: camera.uniqueId,
918
1064
  sortRequestId: cameraViewInfos.sortRequestId,
1065
+ rangeVersion: this._activeRangeVersion,
1066
+ useCountingSort: GaussianSplattingMeshBase.UseCountingSort,
1067
+ rightHanded: this._scene.useRightHandedSystem,
1068
+ logSortPerformance: GaussianSplattingMeshBase.LogSortPerformance,
919
1069
  }, [this._depthMix.buffer]);
920
1070
  }
921
1071
  else if (Native?.sortSplats) {
922
- Native.sortSplats(this._modelViewProjectionMatrix, this._splatPositions, this._splatIndex, this._scene.useRightHandedSystem);
1072
+ if (this._activeSplatRanges) {
1073
+ // Native sort can't filter ranges: fall back to the (already range-filtered) identity index buffer.
1074
+ this._updateSplatIndexBuffer(this._vertexCount);
1075
+ }
1076
+ else {
1077
+ Native.sortSplats(this._modelViewProjectionMatrix, this._splatPositions, this._splatIndex, this._scene.useRightHandedSystem);
1078
+ }
923
1079
  if (cameraViewInfos.splatIndexBufferSet) {
924
1080
  cameraViewInfos.mesh.thinInstanceBufferUpdated("splatIndex");
925
1081
  }
@@ -1960,7 +2116,9 @@ export class GaussianSplattingMeshBase extends Mesh {
1960
2116
  const positions = Float32Array.from(this._splatPositions);
1961
2117
  const vertexCount = this._vertexCount;
1962
2118
  if (this._worker) {
1963
- this._worker.postMessage({ positions, vertexCount }, [positions.buffer]);
2119
+ this._worker.postMessage({ command: GaussianSplattingSortWorkerCommand.POSITIONS, positions, vertexCount }, [positions.buffer]);
2120
+ // Re-sync the active interval set in case the source splat count changed.
2121
+ this._postIntervalsToWorker();
1964
2122
  }
1965
2123
  // Handle SH textures in update path - create if they don't exist
1966
2124
  if (sh && !this._shTextures) {
@@ -2038,7 +2196,9 @@ export class GaussianSplattingMeshBase extends Mesh {
2038
2196
  if (this._worker) {
2039
2197
  const positions = Float32Array.from(this._splatPositions);
2040
2198
  const vertexCount = this._vertexCount;
2041
- this._worker.postMessage({ positions, vertexCount }, [positions.buffer]);
2199
+ this._worker.postMessage({ command: GaussianSplattingSortWorkerCommand.POSITIONS, positions, vertexCount }, [positions.buffer]);
2200
+ // Re-sync the active interval set in case the source splat count changed.
2201
+ this._postIntervalsToWorker();
2042
2202
  }
2043
2203
  this._postToWorker(true);
2044
2204
  }
@@ -2075,8 +2235,30 @@ export class GaussianSplattingMeshBase extends Mesh {
2075
2235
  if (this._worker) {
2076
2236
  const positions = Float32Array.from(this._splatPositions);
2077
2237
  const vertexCount = this._vertexCount;
2078
- this._worker.postMessage({ positions, vertexCount }, [positions.buffer]);
2238
+ this._worker.postMessage({ command: GaussianSplattingSortWorkerCommand.POSITIONS, positions, vertexCount }, [positions.buffer]);
2239
+ // The source splat count may have changed (e.g. addPart): re-sync the worker's active
2240
+ // interval set so it covers the current splats instead of a stale (smaller) range.
2241
+ this._postIntervalsToWorker();
2242
+ }
2243
+ this._sortIsDirty = true;
2244
+ }
2245
+ /**
2246
+ * Patches only a contiguous range of source-splat centers in the sort worker, instead of re-copying and
2247
+ * transferring the entire position buffer (which is hundreds of MB for large streamed datasets and caused
2248
+ * a multi-frame freeze on every LOD decode). The worker must already hold a full-size position buffer (from
2249
+ * the initial {@link GaussianSplattingSortWorkerCommand.POSITIONS} message at worker creation). Marks the
2250
+ * sort dirty so the new splats are sorted in; the caller is responsible for any interval/range refresh.
2251
+ * @param splatOffset first splat index of the updated range
2252
+ * @param splatCount number of splats in the updated range
2253
+ */
2254
+ _postWorkerPositionsRange(splatOffset, splatCount) {
2255
+ if (!this._worker || !this._splatPositions || splatCount <= 0) {
2256
+ return;
2079
2257
  }
2258
+ const floatOffset = splatOffset * 4;
2259
+ // Copy just the changed region (stride 4) so the main thread keeps its own _splatPositions intact.
2260
+ const data = this._splatPositions.slice(floatOffset, floatOffset + splatCount * 4);
2261
+ this._worker.postMessage({ command: GaussianSplattingSortWorkerCommand.POSITIONS_UPDATE, offset: floatOffset, data }, [data.buffer]);
2080
2262
  this._sortIsDirty = true;
2081
2263
  }
2082
2264
  *_updateData(data, isAsync, sh, partIndices, { flipY = false, previousVertexCount = 0 } = {}, shDegree) {
@@ -2100,6 +2282,11 @@ export class GaussianSplattingMeshBase extends Mesh {
2100
2282
  }
2101
2283
  const vertexCount = uBuffer.length / GaussianSplattingMeshBase._RowOutputLength;
2102
2284
  if (vertexCount != this._vertexCount) {
2285
+ // The source set changed: drop any active range filter so the buffers resize to the full
2286
+ // set. Callers (e.g. streaming LOD) re-apply their ranges after the data is committed.
2287
+ this._activeSplatRanges = null;
2288
+ this._activeSplatRangeKey = "";
2289
+ this._activeSplatRenderCount = 0;
2103
2290
  this._updateSplatIndexBuffer(vertexCount);
2104
2291
  }
2105
2292
  this._vertexCount = vertexCount;
@@ -2241,19 +2428,40 @@ export class GaussianSplattingMeshBase extends Mesh {
2241
2428
  }
2242
2429
  // in case size is different
2243
2430
  _updateSplatIndexBuffer(vertexCount) {
2244
- const paddedVertexCount = (vertexCount + 15) & ~0xf;
2245
- if (!this._splatIndex || vertexCount != this._splatIndex.length) {
2431
+ const renderedSplatCount = this._activeSplatRanges ? this._activeSplatRenderCount : vertexCount;
2432
+ const paddedVertexCount = Math.max((renderedSplatCount + 15) & ~0xf, 16);
2433
+ const previousIndex = this._splatIndex;
2434
+ if (!previousIndex || paddedVertexCount !== previousIndex.length) {
2246
2435
  this._splatIndex = new Float32Array(paddedVertexCount);
2247
- for (let i = 0; i < paddedVertexCount; i++) {
2248
- this._splatIndex[i] = i;
2249
- }
2250
2436
  // update meshes for knowns cameras
2251
2437
  this._cameraViewInfos.forEach((cameraViewInfos) => {
2252
2438
  cameraViewInfos.mesh.thinInstanceSetBuffer("splatIndex", this._splatIndex, 16, false);
2253
2439
  });
2254
2440
  }
2441
+ const splatIndex = this._splatIndex;
2442
+ // Populate the buffer with the current active source indices (identity when unfiltered) so every
2443
+ // rendered slot points at a valid splat. This is the synchronous (no async sort worker) path; the
2444
+ // worker path instead defers the index-buffer swap until a matching sort lands (see _onWorkerCreated).
2445
+ if (this._activeSplatRanges) {
2446
+ let index = 0;
2447
+ for (let rangeIndex = 0; rangeIndex < this._activeSplatRanges.length; rangeIndex += 2) {
2448
+ const start = this._activeSplatRanges[rangeIndex];
2449
+ const count = this._activeSplatRanges[rangeIndex + 1];
2450
+ for (let sourceIndex = start; sourceIndex < start + count; sourceIndex++) {
2451
+ splatIndex[index++] = sourceIndex;
2452
+ }
2453
+ }
2454
+ for (; index < paddedVertexCount; index++) {
2455
+ splatIndex[index] = 0;
2456
+ }
2457
+ }
2458
+ else {
2459
+ for (let i = 0; i < paddedVertexCount; i++) {
2460
+ splatIndex[i] = i;
2461
+ }
2462
+ }
2255
2463
  // Update depthMix
2256
- if ((!this._depthMix || vertexCount != this._depthMix.length) && !IsNative) {
2464
+ if ((!this._depthMix || paddedVertexCount !== this._depthMix.length) && !IsNative) {
2257
2465
  this._depthMix = new BigInt64Array(paddedVertexCount);
2258
2466
  }
2259
2467
  this.forcedInstanceCount = Math.max(paddedVertexCount >> 4, 1);
@@ -2349,21 +2557,28 @@ export class GaussianSplattingMeshBase extends Mesh {
2349
2557
  // If the previous worker was terminated mid-sort it would never have set _canPostToWorker
2350
2558
  // back to true, leaving the sort permanently frozen on the new worker.
2351
2559
  this._canPostToWorker = true;
2352
- this._worker = new Worker(URL.createObjectURL(new Blob(["(", GaussianSplattingMeshBase._CreateWorker.toString(), ")(self)"], {
2560
+ this._worker = new Worker(URL.createObjectURL(new Blob(["(", GaussianSplattingSortWorker.toString(), ")(self)"], {
2353
2561
  type: "application/javascript",
2354
2562
  })));
2355
2563
  const positions = Float32Array.from(this._splatPositions);
2356
- this._worker.postMessage({ positions }, [positions.buffer]);
2564
+ this._worker.postMessage({ command: GaussianSplattingSortWorkerCommand.POSITIONS, positions }, [positions.buffer]);
2565
+ // The main thread owns the active interval set: send it explicitly (covering all indices when
2566
+ // no LOD filter is active) rather than letting the worker assume the full source set.
2567
+ this._postIntervalsToWorker();
2357
2568
  this._onWorkerCreated(this._worker);
2358
2569
  this._worker.onerror = () => {
2359
2570
  // If the worker throws an unhandled error, unlock the posting gate so the next frame can retry the sort.
2360
2571
  this._canPostToWorker = true;
2361
2572
  };
2362
2573
  this._worker.onmessage = (e) => {
2363
- // Recompute vertexCountPadded in case _vertexCount has changed since the last update
2364
- const vertexCountPadded = (this._vertexCount + 15) & ~0xf;
2365
- // If the vertex count changed, we discard this result and trigger a new sort
2366
- if (e.data.depthMix.length != vertexCountPadded) {
2574
+ // Size the result against the active (rendered) splat count, which may be a subset of the
2575
+ // full source set when an interval/LOD filter is active.
2576
+ const renderedPadded = Math.max((this.renderedSplatCount + 15) & ~0xf, 16);
2577
+ // Discard the result and trigger a fresh sort if it no longer matches the current active set:
2578
+ // either the active count changed since it was posted, or it was computed for a stale range
2579
+ // version (the active ranges changed while it was in flight). Applying it would render indices
2580
+ // that belong to a different active set.
2581
+ if (e.data.depthMix.length != renderedPadded || e.data.rangeVersion !== this._activeRangeVersion) {
2367
2582
  // Only re-enable posting and trigger a re-sort if the buffer is available.
2368
2583
  // If byteLength === 0 the buffer is already in-flight for a newer sort;
2369
2584
  // that sort's onmessage will handle things when it returns.
@@ -2377,13 +2592,25 @@ export class GaussianSplattingMeshBase extends Mesh {
2377
2592
  this._depthMix = e.data.depthMix;
2378
2593
  const cameraId = e.data.cameraId;
2379
2594
  const sortRequestId = e.data.sortRequestId;
2595
+ // The index buffer swap is deferred to here so the previous fully-sorted state stays on screen
2596
+ // until this matching sort lands. Resize it now (the active count may have grown/shrunk since the
2597
+ // last applied sort) and rebind it for every known camera.
2598
+ if (!this._splatIndex || this._splatIndex.length !== renderedPadded) {
2599
+ this._splatIndex = new Float32Array(renderedPadded);
2600
+ this._cameraViewInfos.forEach((info) => {
2601
+ info.mesh.thinInstanceSetBuffer("splatIndex", this._splatIndex, 16, false);
2602
+ info.splatIndexBufferSet = true;
2603
+ });
2604
+ }
2380
2605
  const indexMix = new Uint32Array(e.data.depthMix.buffer);
2381
2606
  if (this._splatIndex) {
2382
- for (let j = 0; j < vertexCountPadded; j++) {
2607
+ for (let j = 0; j < renderedPadded; j++) {
2383
2608
  this._splatIndex[j] = indexMix[2 * j];
2384
2609
  }
2385
2610
  }
2611
+ this.forcedInstanceCount = Math.max(renderedPadded >> 4, 1);
2386
2612
  if (this._delayedTextureUpdate) {
2613
+ const vertexCountPadded = (this._vertexCount + 15) & ~0xf;
2387
2614
  const textureSize = this._getTextureSize(vertexCountPadded);
2388
2615
  this._updateSubTextures(this._delayedTextureUpdate.centers, this._delayedTextureUpdate.covA, this._delayedTextureUpdate.covB, this._delayedTextureUpdate.colors, 0, textureSize.y, this._delayedTextureUpdate.sh);
2389
2616
  this._delayedTextureUpdate = null;
@@ -2545,6 +2772,17 @@ export class GaussianSplattingMeshBase extends Mesh {
2545
2772
  return this;
2546
2773
  }
2547
2774
  }
2775
+ /**
2776
+ * When true (default), the depth-sort worker uses the fast O(n) counting (radix) sort. Set to false to
2777
+ * fall back to the legacy comparison sort (useful for A/B comparison or as a safety fallback). The change
2778
+ * takes effect on the next sort.
2779
+ */
2780
+ GaussianSplattingMeshBase.UseCountingSort = true;
2781
+ /**
2782
+ * When true, the depth-sort worker logs each sort's duration (ms) and active splat count to the console.
2783
+ * Off by default; intended for performance investigation only.
2784
+ */
2785
+ GaussianSplattingMeshBase.LogSortPerformance = false;
2548
2786
  GaussianSplattingMeshBase._RowOutputLength = 3 * 4 + 3 * 4 + 4 + 4; // Vector3 position, Vector3 scale, 1 u8 quaternion, 1 color with alpha
2549
2787
  GaussianSplattingMeshBase._SH_C0 = 0.28209479177387814;
2550
2788
  // batch size between 2 yield calls. This value is a tradeoff between updates overhead and framerate hiccups
@@ -2559,93 +2797,6 @@ GaussianSplattingMeshBase._DefaultViewUpdateThreshold = 1e-4;
2559
2797
  * A value of 0 (default) means display update will not happens before splat is ready.
2560
2798
  */
2561
2799
  GaussianSplattingMeshBase.ProgressiveUpdateAmount = 0;
2562
- GaussianSplattingMeshBase._CreateWorker = function (self) {
2563
- let positions;
2564
- let depthMix;
2565
- let indices;
2566
- let floatMix;
2567
- let partIndices;
2568
- let partMatrices;
2569
- self.onmessage = (e) => {
2570
- // updated on init
2571
- if (e.data.positions) {
2572
- positions = e.data.positions;
2573
- }
2574
- // update on rig node changed
2575
- else if (e.data.partMatrices) {
2576
- partMatrices = e.data.partMatrices;
2577
- }
2578
- // update on rig node indices changed
2579
- else if (e.data.partIndices !== undefined) {
2580
- partIndices = e.data.partIndices;
2581
- }
2582
- // update on view changed
2583
- else {
2584
- const cameraId = e.data.cameraId;
2585
- const sortRequestId = e.data.sortRequestId;
2586
- const globalWorldMatrix = e.data.worldMatrix;
2587
- const cameraForward = e.data.cameraForward;
2588
- const cameraPosition = e.data.cameraPosition;
2589
- depthMix = e.data.depthMix;
2590
- if (!positions || !cameraForward) {
2591
- // Sort request arrived before positions were initialized — return the buffer unchanged so the main thread can unlock _canPostToWorker.
2592
- self.postMessage({ depthMix, cameraId, sortRequestId }, [depthMix.buffer]);
2593
- return;
2594
- }
2595
- const vertexCountPadded = (positions.length / 4 + 15) & ~0xf;
2596
- indices = new Uint32Array(depthMix.buffer);
2597
- floatMix = new Float32Array(depthMix.buffer);
2598
- // Sort
2599
- for (let j = 0; j < vertexCountPadded; j++) {
2600
- indices[2 * j] = j;
2601
- }
2602
- // depth = dot(cameraForward, worldPos - cameraPos)
2603
- const camDot = cameraForward[0] * cameraPosition[0] + cameraForward[1] * cameraPosition[1] + cameraForward[2] * cameraPosition[2];
2604
- const computeDepthCoeffs = (m) => {
2605
- return [
2606
- cameraForward[0] * m[0] + cameraForward[1] * m[1] + cameraForward[2] * m[2],
2607
- cameraForward[0] * m[4] + cameraForward[1] * m[5] + cameraForward[2] * m[6],
2608
- cameraForward[0] * m[8] + cameraForward[1] * m[9] + cameraForward[2] * m[10],
2609
- cameraForward[0] * m[12] + cameraForward[1] * m[13] + cameraForward[2] * m[14] - camDot,
2610
- ];
2611
- };
2612
- try {
2613
- if (partMatrices && partIndices) {
2614
- // Precompute depth coefficients for each rig node
2615
- const depthCoeffs = partMatrices.map((m) => computeDepthCoeffs(m));
2616
- // NB: For performance reasons, we assume that part indices are valid
2617
- const length = partIndices.length;
2618
- for (let j = 0; j < vertexCountPadded; j++) {
2619
- // NB: We need this 'min' because vertex array is padded, not partIndices
2620
- const partIndex = partIndices[Math.min(j, length - 1)];
2621
- const coeff = depthCoeffs[partIndex];
2622
- floatMix[2 * j + 1] = coeff[0] * positions[4 * j + 0] + coeff[1] * positions[4 * j + 1] + coeff[2] * positions[4 * j + 2] + coeff[3];
2623
- // instead of using minus to sort back to front, we use bitwise not operator to invert the order of indices
2624
- // might not be faster but a minus sign implies a reference value that may not be enough and will decrease floatting precision
2625
- indices[2 * j + 1] = ~indices[2 * j + 1];
2626
- }
2627
- }
2628
- else {
2629
- // Compute depth coefficients from global world matrix
2630
- const [a, b, c, d] = computeDepthCoeffs(globalWorldMatrix);
2631
- for (let j = 0; j < vertexCountPadded; j++) {
2632
- floatMix[2 * j + 1] = a * positions[4 * j + 0] + b * positions[4 * j + 1] + c * positions[4 * j + 2] + d;
2633
- indices[2 * j + 1] = ~indices[2 * j + 1];
2634
- }
2635
- }
2636
- depthMix.sort();
2637
- }
2638
- catch (sortError) {
2639
- // Transient data inconsistency (e.g. partIndices/partMatrices mismatch during addPart/removePart rebuild).
2640
- // Return the buffer unsorted so the main thread can unlock _canPostToWorker and retry next frame.
2641
- // Logger is unavailable inside the worker — console is the only option.
2642
- // eslint-disable-next-line no-console
2643
- console.error("Gaussian splat sort worker encountered an error (will retry next frame):", sortError);
2644
- }
2645
- self.postMessage({ depthMix, cameraId, sortRequestId }, [depthMix.buffer]);
2646
- }
2647
- };
2648
- };
2649
2800
  /**
2650
2801
  * Allocates SH texture buffers pre-filled with 128 (the neutral encoding of ~0.0 in the
2651
2802
  * shader's decompose() function). Padding bytes beyond the actual coefficients in the last