@onerjs/core 8.56.4 → 9.0.1

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 (722) hide show
  1. package/Animations/animatable.core.js +36 -0
  2. package/Animations/animatable.core.js.map +1 -1
  3. package/Animations/animationGroup.pure.d.ts +61 -1
  4. package/Animations/animationGroup.pure.js +191 -2
  5. package/Animations/animationGroup.pure.js.map +1 -1
  6. package/Animations/index.d.ts +1 -0
  7. package/Animations/index.js +1 -0
  8. package/Animations/index.js.map +1 -1
  9. package/Animations/pure.d.ts +1 -0
  10. package/Animations/pure.js +1 -0
  11. package/Animations/pure.js.map +1 -1
  12. package/Animations/rootMotion.d.ts +560 -0
  13. package/Animations/rootMotion.js +1709 -0
  14. package/Animations/rootMotion.js.map +1 -0
  15. package/Animations/runtimeAnimation.d.ts +57 -0
  16. package/Animations/runtimeAnimation.js +127 -3
  17. package/Animations/runtimeAnimation.js.map +1 -1
  18. package/Cameras/arcRotateCamera.pure.d.ts +2 -0
  19. package/Cameras/arcRotateCamera.pure.js +2 -0
  20. package/Cameras/arcRotateCamera.pure.js.map +1 -1
  21. package/Cameras/targetCamera.pure.d.ts +2 -0
  22. package/Cameras/targetCamera.pure.js +13 -2
  23. package/Cameras/targetCamera.pure.js.map +1 -1
  24. package/Collisions/gpuPicker.js +5 -5
  25. package/Collisions/gpuPicker.js.map +1 -1
  26. package/Engines/AbstractEngine/abstractEngine.query.pure.js +4 -2
  27. package/Engines/AbstractEngine/abstractEngine.query.pure.js.map +1 -1
  28. package/Engines/AbstractEngine/abstractEngine.query.types.d.ts +11 -2
  29. package/Engines/AbstractEngine/abstractEngine.query.types.js.map +1 -1
  30. package/Engines/AbstractEngine/abstractEngine.renderPass.pure.js +1 -0
  31. package/Engines/AbstractEngine/abstractEngine.renderPass.pure.js.map +1 -1
  32. package/Engines/Extensions/engine.multiRender.pure.js +63 -0
  33. package/Engines/Extensions/engine.multiRender.pure.js.map +1 -1
  34. package/Engines/Extensions/engine.multiRender.types.d.ts +13 -0
  35. package/Engines/Extensions/engine.multiRender.types.js.map +1 -1
  36. package/Engines/Extensions/engine.prefilteredCubeTexture.pure.js +2 -2
  37. package/Engines/Extensions/engine.prefilteredCubeTexture.pure.js.map +1 -1
  38. package/Engines/Extensions/engine.prefilteredCubeTexture.types.d.ts +2 -1
  39. package/Engines/Extensions/engine.prefilteredCubeTexture.types.js.map +1 -1
  40. package/Engines/Extensions/index.d.ts +1 -0
  41. package/Engines/Extensions/index.js +1 -0
  42. package/Engines/Extensions/index.js.map +1 -1
  43. package/Engines/Extensions/pure.d.ts +1 -1
  44. package/Engines/Extensions/pure.js +1 -1
  45. package/Engines/Extensions/pure.js.map +1 -1
  46. package/Engines/Native/Extensions/nativeEngine.cubeTexture.pure.js +88 -39
  47. package/Engines/Native/Extensions/nativeEngine.cubeTexture.pure.js.map +1 -1
  48. package/Engines/Native/Extensions/nativeEngine.cubeTexture.types.d.ts +20 -2
  49. package/Engines/Native/Extensions/nativeEngine.cubeTexture.types.js.map +1 -1
  50. package/Engines/Native/nativeHardwareTexture.d.ts +8 -1
  51. package/Engines/Native/nativeHardwareTexture.js +7 -0
  52. package/Engines/Native/nativeHardwareTexture.js.map +1 -1
  53. package/Engines/Native/nativeHelpers.js +56 -1
  54. package/Engines/Native/nativeHelpers.js.map +1 -1
  55. package/Engines/Native/nativeInterfaces.d.ts +37 -8
  56. package/Engines/Native/nativeInterfaces.js.map +1 -1
  57. package/Engines/Native/nativeRenderTargetWrapper.d.ts +40 -0
  58. package/Engines/Native/nativeRenderTargetWrapper.js +265 -5
  59. package/Engines/Native/nativeRenderTargetWrapper.js.map +1 -1
  60. package/Engines/Processors/shaderCodeCursor.d.ts +1 -0
  61. package/Engines/Processors/shaderCodeCursor.js +40 -3
  62. package/Engines/Processors/shaderCodeCursor.js.map +1 -1
  63. package/Engines/WebGPU/Extensions/engine.multiRender.pure.js +4 -0
  64. package/Engines/WebGPU/Extensions/engine.multiRender.pure.js.map +1 -1
  65. package/Engines/WebGPU/Extensions/engine.multiRender.types.d.ts +13 -0
  66. package/Engines/WebGPU/Extensions/engine.multiRender.types.js.map +1 -1
  67. package/Engines/WebGPU/Extensions/engine.query.pure.js +11 -3
  68. package/Engines/WebGPU/Extensions/engine.query.pure.js.map +1 -1
  69. package/Engines/WebGPU/Extensions/engine.renderTarget.pure.js +1 -0
  70. package/Engines/WebGPU/Extensions/engine.renderTarget.pure.js.map +1 -1
  71. package/Engines/WebGPU/Extensions/index.d.ts +1 -0
  72. package/Engines/WebGPU/Extensions/index.js +1 -0
  73. package/Engines/WebGPU/Extensions/index.js.map +1 -1
  74. package/Engines/WebGPU/Extensions/pure.d.ts +1 -1
  75. package/Engines/WebGPU/Extensions/pure.js +1 -1
  76. package/Engines/WebGPU/Extensions/pure.js.map +1 -1
  77. package/Engines/WebGPU/webgpuBundleList.d.ts +2 -0
  78. package/Engines/WebGPU/webgpuBundleList.js +4 -0
  79. package/Engines/WebGPU/webgpuBundleList.js.map +1 -1
  80. package/Engines/WebGPU/webgpuCacheRenderPipeline.js +5 -2
  81. package/Engines/WebGPU/webgpuCacheRenderPipeline.js.map +1 -1
  82. package/Engines/WebGPU/webgpuHardwareTexture.js +3 -1
  83. package/Engines/WebGPU/webgpuHardwareTexture.js.map +1 -1
  84. package/Engines/WebGPU/webgpuOcclusionQuery.js +1 -1
  85. package/Engines/WebGPU/webgpuOcclusionQuery.js.map +1 -1
  86. package/Engines/WebGPU/webgpuSnapshotRendering.d.ts +4 -0
  87. package/Engines/WebGPU/webgpuSnapshotRendering.js +40 -7
  88. package/Engines/WebGPU/webgpuSnapshotRendering.js.map +1 -1
  89. package/Engines/WebGPU/webgpuTextureHelper.d.ts +1 -1
  90. package/Engines/WebGPU/webgpuTextureHelper.js +2 -2
  91. package/Engines/WebGPU/webgpuTextureHelper.js.map +1 -1
  92. package/Engines/WebGPU/webgpuTextureManager.d.ts +2 -0
  93. package/Engines/WebGPU/webgpuTextureManager.js +286 -13
  94. package/Engines/WebGPU/webgpuTextureManager.js.map +1 -1
  95. package/Engines/abstractEngine.pure.d.ts +17 -1
  96. package/Engines/abstractEngine.pure.js +17 -5
  97. package/Engines/abstractEngine.pure.js.map +1 -1
  98. package/Engines/constants.d.ts +4 -0
  99. package/Engines/constants.js +4 -0
  100. package/Engines/constants.js.map +1 -1
  101. package/Engines/engine.pure.d.ts +0 -1
  102. package/Engines/engine.pure.js +0 -7
  103. package/Engines/engine.pure.js.map +1 -1
  104. package/Engines/nativeEngine.pure.js +1 -1
  105. package/Engines/nativeEngine.pure.js.map +1 -1
  106. package/Engines/thinEngine.pure.d.ts +15 -0
  107. package/Engines/thinEngine.pure.js +61 -14
  108. package/Engines/thinEngine.pure.js.map +1 -1
  109. package/Engines/thinNativeEngine.pure.d.ts +218 -17
  110. package/Engines/thinNativeEngine.pure.js +1438 -165
  111. package/Engines/thinNativeEngine.pure.js.map +1 -1
  112. package/Engines/thinWebGPUEngine.d.ts +4 -0
  113. package/Engines/thinWebGPUEngine.js +16 -2
  114. package/Engines/thinWebGPUEngine.js.map +1 -1
  115. package/Engines/webgpuEngine.pure.d.ts +17 -3
  116. package/Engines/webgpuEngine.pure.js +56 -13
  117. package/Engines/webgpuEngine.pure.js.map +1 -1
  118. package/FlowGraph/Blocks/Data/Math/flowGraphMathBlocks.pure.js +2 -2
  119. package/FlowGraph/Blocks/Data/Math/flowGraphMathBlocks.pure.js.map +1 -1
  120. package/FlowGraph/Blocks/Data/Transformers/flowGraphJsonPointerParserBlock.pure.d.ts +10 -0
  121. package/FlowGraph/Blocks/Data/Transformers/flowGraphJsonPointerParserBlock.pure.js +24 -12
  122. package/FlowGraph/Blocks/Data/Transformers/flowGraphJsonPointerParserBlock.pure.js.map +1 -1
  123. package/FlowGraph/Blocks/Data/Utils/flowGraphArrayIndexBlock.pure.d.ts +11 -2
  124. package/FlowGraph/Blocks/Data/Utils/flowGraphArrayIndexBlock.pure.js +1 -1
  125. package/FlowGraph/Blocks/Data/Utils/flowGraphArrayIndexBlock.pure.js.map +1 -1
  126. package/FlowGraph/Blocks/Data/flowGraphGetPropertyBlock.pure.d.ts +7 -0
  127. package/FlowGraph/Blocks/Data/flowGraphGetPropertyBlock.pure.js +43 -0
  128. package/FlowGraph/Blocks/Data/flowGraphGetPropertyBlock.pure.js.map +1 -1
  129. package/FlowGraph/Blocks/Event/flowGraphMeshPickEventBlock.pure.d.ts +9 -1
  130. package/FlowGraph/Blocks/Event/flowGraphMeshPickEventBlock.pure.js +6 -8
  131. package/FlowGraph/Blocks/Event/flowGraphMeshPickEventBlock.pure.js.map +1 -1
  132. package/FlowGraph/Blocks/Event/flowGraphPointerOutEventBlock.pure.d.ts +2 -0
  133. package/FlowGraph/Blocks/Event/flowGraphPointerOutEventBlock.pure.js +5 -1
  134. package/FlowGraph/Blocks/Event/flowGraphPointerOutEventBlock.pure.js.map +1 -1
  135. package/FlowGraph/Blocks/Event/flowGraphPointerOverEventBlock.pure.d.ts +2 -0
  136. package/FlowGraph/Blocks/Event/flowGraphPointerOverEventBlock.pure.js +5 -1
  137. package/FlowGraph/Blocks/Event/flowGraphPointerOverEventBlock.pure.js.map +1 -1
  138. package/FlowGraph/Blocks/Event/flowGraphReceiveCustomEventBlock.pure.d.ts +9 -0
  139. package/FlowGraph/Blocks/Event/flowGraphReceiveCustomEventBlock.pure.js +34 -9
  140. package/FlowGraph/Blocks/Event/flowGraphReceiveCustomEventBlock.pure.js.map +1 -1
  141. package/FlowGraph/Blocks/Event/flowGraphSceneReadyEventBlock.pure.d.ts +2 -0
  142. package/FlowGraph/Blocks/Event/flowGraphSceneReadyEventBlock.pure.js +4 -0
  143. package/FlowGraph/Blocks/Event/flowGraphSceneReadyEventBlock.pure.js.map +1 -1
  144. package/FlowGraph/Blocks/Event/flowGraphSceneTickEventBlock.pure.d.ts +18 -4
  145. package/FlowGraph/Blocks/Event/flowGraphSceneTickEventBlock.pure.js +24 -6
  146. package/FlowGraph/Blocks/Event/flowGraphSceneTickEventBlock.pure.js.map +1 -1
  147. package/FlowGraph/Blocks/Event/flowGraphSendCustomEventBlock.pure.js +19 -7
  148. package/FlowGraph/Blocks/Event/flowGraphSendCustomEventBlock.pure.js.map +1 -1
  149. package/FlowGraph/Blocks/Execution/Animation/flowGraphInterpolationBlock.pure.js +3 -3
  150. package/FlowGraph/Blocks/Execution/Animation/flowGraphInterpolationBlock.pure.js.map +1 -1
  151. package/FlowGraph/Blocks/Execution/Animation/flowGraphPlayAnimationBlock.pure.d.ts +20 -2
  152. package/FlowGraph/Blocks/Execution/Animation/flowGraphPlayAnimationBlock.pure.js +85 -25
  153. package/FlowGraph/Blocks/Execution/Animation/flowGraphPlayAnimationBlock.pure.js.map +1 -1
  154. package/FlowGraph/Blocks/Execution/Animation/flowGraphStopAnimationBlock.pure.d.ts +16 -1
  155. package/FlowGraph/Blocks/Execution/Animation/flowGraphStopAnimationBlock.pure.js +64 -14
  156. package/FlowGraph/Blocks/Execution/Animation/flowGraphStopAnimationBlock.pure.js.map +1 -1
  157. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphCancelDelayBlock.pure.d.ts +12 -1
  158. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphCancelDelayBlock.pure.js +8 -0
  159. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphCancelDelayBlock.pure.js.map +1 -1
  160. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphForLoopBlock.pure.js +4 -1
  161. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphForLoopBlock.pure.js.map +1 -1
  162. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphThrottleBlock.pure.d.ts +12 -1
  163. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphThrottleBlock.pure.js +5 -1
  164. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphThrottleBlock.pure.js.map +1 -1
  165. package/FlowGraph/Blocks/Execution/flowGraphConsoleLogBlock.pure.js +64 -16
  166. package/FlowGraph/Blocks/Execution/flowGraphConsoleLogBlock.pure.js.map +1 -1
  167. package/FlowGraph/Blocks/Execution/flowGraphSetPropertyBlock.pure.d.ts +2 -0
  168. package/FlowGraph/Blocks/Execution/flowGraphSetPropertyBlock.pure.js +14 -2
  169. package/FlowGraph/Blocks/Execution/flowGraphSetPropertyBlock.pure.js.map +1 -1
  170. package/FlowGraph/Blocks/Execution/flowGraphSetVariableBlock.pure.d.ts +5 -1
  171. package/FlowGraph/Blocks/Execution/flowGraphSetVariableBlock.pure.js +23 -8
  172. package/FlowGraph/Blocks/Execution/flowGraphSetVariableBlock.pure.js.map +1 -1
  173. package/FlowGraph/CustomTypes/flowGraphInteger.pure.d.ts +5 -0
  174. package/FlowGraph/CustomTypes/flowGraphInteger.pure.js +7 -0
  175. package/FlowGraph/CustomTypes/flowGraphInteger.pure.js.map +1 -1
  176. package/FlowGraph/CustomTypes/flowGraphMatrix.d.ts +10 -0
  177. package/FlowGraph/CustomTypes/flowGraphMatrix.js +14 -0
  178. package/FlowGraph/CustomTypes/flowGraphMatrix.js.map +1 -1
  179. package/FlowGraph/flowGraph.d.ts +6 -1
  180. package/FlowGraph/flowGraph.js +41 -9
  181. package/FlowGraph/flowGraph.js.map +1 -1
  182. package/FlowGraph/flowGraphAnimationHelpers.d.ts +24 -0
  183. package/FlowGraph/flowGraphAnimationHelpers.js +21 -0
  184. package/FlowGraph/flowGraphAnimationHelpers.js.map +1 -0
  185. package/FlowGraph/flowGraphBlock.js +3 -0
  186. package/FlowGraph/flowGraphBlock.js.map +1 -1
  187. package/FlowGraph/flowGraphConnection.d.ts +7 -0
  188. package/FlowGraph/flowGraphConnection.js +7 -0
  189. package/FlowGraph/flowGraphConnection.js.map +1 -1
  190. package/FlowGraph/flowGraphContext.d.ts +2 -1
  191. package/FlowGraph/flowGraphContext.js +5 -3
  192. package/FlowGraph/flowGraphContext.js.map +1 -1
  193. package/FlowGraph/flowGraphCoordinator.d.ts +15 -1
  194. package/FlowGraph/flowGraphCoordinator.js +47 -16
  195. package/FlowGraph/flowGraphCoordinator.js.map +1 -1
  196. package/FlowGraph/flowGraphEventBlock.d.ts +5 -0
  197. package/FlowGraph/flowGraphEventBlock.js +7 -0
  198. package/FlowGraph/flowGraphEventBlock.js.map +1 -1
  199. package/FlowGraph/flowGraphHostResolver.d.ts +2 -1
  200. package/FlowGraph/flowGraphHostResolver.js.map +1 -1
  201. package/FlowGraph/flowGraphParser.js +60 -2
  202. package/FlowGraph/flowGraphParser.js.map +1 -1
  203. package/FlowGraph/flowGraphValidator.js +0 -4
  204. package/FlowGraph/flowGraphValidator.js.map +1 -1
  205. package/FlowGraph/index.d.ts +2 -0
  206. package/FlowGraph/index.js +2 -0
  207. package/FlowGraph/index.js.map +1 -1
  208. package/FlowGraph/pure.d.ts +2 -0
  209. package/FlowGraph/pure.js +2 -0
  210. package/FlowGraph/pure.js.map +1 -1
  211. package/FlowGraph/serialization.d.ts +4 -2
  212. package/FlowGraph/serialization.js +12 -24
  213. package/FlowGraph/serialization.js.map +1 -1
  214. package/FlowGraph/typeDefinitions.d.ts +9 -1
  215. package/FlowGraph/typeDefinitions.js.map +1 -1
  216. package/FrameGraph/Node/Blocks/PostProcesses/meshBlendingPostProcessBlock.d.ts +5 -0
  217. package/FrameGraph/Node/Blocks/PostProcesses/meshBlendingPostProcessBlock.js +8 -0
  218. package/FrameGraph/Node/Blocks/PostProcesses/meshBlendingPostProcessBlock.js.map +1 -0
  219. package/FrameGraph/Node/Blocks/PostProcesses/meshBlendingPostProcessBlock.pure.d.ts +87 -0
  220. package/FrameGraph/Node/Blocks/PostProcesses/meshBlendingPostProcessBlock.pure.js +295 -0
  221. package/FrameGraph/Node/Blocks/PostProcesses/meshBlendingPostProcessBlock.pure.js.map +1 -0
  222. package/FrameGraph/Node/Blocks/PostProcesses/pure.d.ts +1 -0
  223. package/FrameGraph/Node/Blocks/PostProcesses/pure.js +1 -0
  224. package/FrameGraph/Node/Blocks/PostProcesses/pure.js.map +1 -1
  225. package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.js +4 -4
  226. package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.js.map +1 -1
  227. package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.pure.d.ts +5 -1
  228. package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.pure.js +13 -1
  229. package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.pure.js.map +1 -1
  230. package/FrameGraph/Node/Blocks/Textures/minMaxReducerBlock.d.ts +1 -0
  231. package/FrameGraph/Node/Blocks/Textures/minMaxReducerBlock.js +4 -0
  232. package/FrameGraph/Node/Blocks/Textures/minMaxReducerBlock.js.map +1 -0
  233. package/FrameGraph/Node/Blocks/Textures/minMaxReducerBlock.pure.d.ts +54 -0
  234. package/FrameGraph/Node/Blocks/Textures/minMaxReducerBlock.pure.js +155 -0
  235. package/FrameGraph/Node/Blocks/Textures/minMaxReducerBlock.pure.js.map +1 -0
  236. package/FrameGraph/Node/Blocks/Textures/pure.d.ts +1 -0
  237. package/FrameGraph/Node/Blocks/Textures/pure.js +1 -0
  238. package/FrameGraph/Node/Blocks/Textures/pure.js.map +1 -1
  239. package/FrameGraph/Node/Blocks/allBlocks.pure.js +4 -0
  240. package/FrameGraph/Node/Blocks/allBlocks.pure.js.map +1 -1
  241. package/FrameGraph/Node/Blocks/index.d.ts +2 -0
  242. package/FrameGraph/Node/Blocks/index.js +2 -0
  243. package/FrameGraph/Node/Blocks/index.js.map +1 -1
  244. package/FrameGraph/Node/Blocks/inputBlock.pure.js +20 -1
  245. package/FrameGraph/Node/Blocks/inputBlock.pure.js.map +1 -1
  246. package/FrameGraph/Node/Blocks/pure.d.ts +2 -0
  247. package/FrameGraph/Node/Blocks/pure.js +2 -0
  248. package/FrameGraph/Node/Blocks/pure.js.map +1 -1
  249. package/FrameGraph/Node/Types/nodeRenderGraphTypes.d.ts +4 -2
  250. package/FrameGraph/Node/Types/nodeRenderGraphTypes.js +4 -2
  251. package/FrameGraph/Node/Types/nodeRenderGraphTypes.js.map +1 -1
  252. package/FrameGraph/Node/nodeRenderGraph.js +1 -1
  253. package/FrameGraph/Node/nodeRenderGraph.js.map +1 -1
  254. package/FrameGraph/Tasks/Layers/selectionOutlineTask.js +1 -0
  255. package/FrameGraph/Tasks/Layers/selectionOutlineTask.js.map +1 -1
  256. package/FrameGraph/Tasks/Misc/cullObjectsTask.js +5 -1
  257. package/FrameGraph/Tasks/Misc/cullObjectsTask.js.map +1 -1
  258. package/FrameGraph/Tasks/Misc/lightingVolumeTask.js +1 -0
  259. package/FrameGraph/Tasks/Misc/lightingVolumeTask.js.map +1 -1
  260. package/FrameGraph/Tasks/Misc/minMaxReducerTask.d.ts +62 -0
  261. package/FrameGraph/Tasks/Misc/minMaxReducerTask.js +159 -0
  262. package/FrameGraph/Tasks/Misc/minMaxReducerTask.js.map +1 -0
  263. package/FrameGraph/Tasks/PostProcesses/meshBlendingTask.d.ts +69 -0
  264. package/FrameGraph/Tasks/PostProcesses/meshBlendingTask.js +223 -0
  265. package/FrameGraph/Tasks/PostProcesses/meshBlendingTask.js.map +1 -0
  266. package/FrameGraph/Tasks/Rendering/geometryRendererTask.d.ts +25 -3
  267. package/FrameGraph/Tasks/Rendering/geometryRendererTask.js +72 -34
  268. package/FrameGraph/Tasks/Rendering/geometryRendererTask.js.map +1 -1
  269. package/FrameGraph/Tasks/Rendering/objectRendererTask.js +3 -1
  270. package/FrameGraph/Tasks/Rendering/objectRendererTask.js.map +1 -1
  271. package/FrameGraph/frameGraph.d.ts +4 -0
  272. package/FrameGraph/frameGraph.js +14 -0
  273. package/FrameGraph/frameGraph.js.map +1 -1
  274. package/FrameGraph/frameGraphObjectList.d.ts +6 -1
  275. package/FrameGraph/frameGraphObjectList.js.map +1 -1
  276. package/FrameGraph/frameGraphRenderContext.d.ts +3 -1
  277. package/FrameGraph/frameGraphRenderContext.js +5 -5
  278. package/FrameGraph/frameGraphRenderContext.js.map +1 -1
  279. package/FrameGraph/index.d.ts +2 -0
  280. package/FrameGraph/index.js +2 -0
  281. package/FrameGraph/index.js.map +1 -1
  282. package/FrameGraph/pure.d.ts +2 -0
  283. package/FrameGraph/pure.js +2 -0
  284. package/FrameGraph/pure.js.map +1 -1
  285. package/Inputs/scene.inputManager.d.ts +4 -0
  286. package/Inputs/scene.inputManager.js +50 -8
  287. package/Inputs/scene.inputManager.js.map +1 -1
  288. package/Lights/Clustered/clusteredLightingSceneComponent.pure.d.ts +5 -0
  289. package/Lights/Clustered/clusteredLightingSceneComponent.pure.js +22 -1
  290. package/Lights/Clustered/clusteredLightingSceneComponent.pure.js.map +1 -1
  291. package/Lights/Shadows/cascadedShadowGenerator.pure.js +7 -3
  292. package/Lights/Shadows/cascadedShadowGenerator.pure.js.map +1 -1
  293. package/Materials/GaussianSplatting/gaussianPointSplattingBlitMaterial.d.ts +7 -0
  294. package/Materials/GaussianSplatting/gaussianPointSplattingBlitMaterial.js +8 -0
  295. package/Materials/GaussianSplatting/gaussianPointSplattingBlitMaterial.js.map +1 -0
  296. package/Materials/GaussianSplatting/gaussianPointSplattingBlitMaterial.pure.d.ts +54 -0
  297. package/Materials/GaussianSplatting/gaussianPointSplattingBlitMaterial.pure.js +81 -0
  298. package/Materials/GaussianSplatting/gaussianPointSplattingBlitMaterial.pure.js.map +1 -0
  299. package/Materials/GaussianSplatting/gaussianPointSplattingDepthBlitMaterial.d.ts +7 -0
  300. package/Materials/GaussianSplatting/gaussianPointSplattingDepthBlitMaterial.js +8 -0
  301. package/Materials/GaussianSplatting/gaussianPointSplattingDepthBlitMaterial.js.map +1 -0
  302. package/Materials/GaussianSplatting/gaussianPointSplattingDepthBlitMaterial.pure.d.ts +60 -0
  303. package/Materials/GaussianSplatting/gaussianPointSplattingDepthBlitMaterial.pure.js +90 -0
  304. package/Materials/GaussianSplatting/gaussianPointSplattingDepthBlitMaterial.pure.js.map +1 -0
  305. package/Materials/GaussianSplatting/gaussianSplattingDebugMaterialPlugin.pure.d.ts +31 -0
  306. package/Materials/GaussianSplatting/gaussianSplattingDebugMaterialPlugin.pure.js +103 -5
  307. package/Materials/GaussianSplatting/gaussianSplattingDebugMaterialPlugin.pure.js.map +1 -1
  308. package/Materials/GaussianSplatting/gaussianSplattingGpuPickingMaterialPlugin.pure.js +6 -6
  309. package/Materials/GaussianSplatting/gaussianSplattingGpuPickingMaterialPlugin.pure.js.map +1 -1
  310. package/Materials/GaussianSplatting/gaussianSplattingMaterial.pure.d.ts +26 -1
  311. package/Materials/GaussianSplatting/gaussianSplattingMaterial.pure.js +153 -49
  312. package/Materials/GaussianSplatting/gaussianSplattingMaterial.pure.js.map +1 -1
  313. package/Materials/GaussianSplatting/gaussianSplattingOverdrawMaterialPlugin.d.ts +1 -0
  314. package/Materials/GaussianSplatting/gaussianSplattingOverdrawMaterialPlugin.js +4 -0
  315. package/Materials/GaussianSplatting/gaussianSplattingOverdrawMaterialPlugin.js.map +1 -0
  316. package/Materials/GaussianSplatting/gaussianSplattingOverdrawMaterialPlugin.pure.d.ts +83 -0
  317. package/Materials/GaussianSplatting/gaussianSplattingOverdrawMaterialPlugin.pure.js +191 -0
  318. package/Materials/GaussianSplatting/gaussianSplattingOverdrawMaterialPlugin.pure.js.map +1 -0
  319. package/Materials/GaussianSplatting/gaussianSplattingSizeMaterialPlugin.d.ts +1 -0
  320. package/Materials/GaussianSplatting/gaussianSplattingSizeMaterialPlugin.js +4 -0
  321. package/Materials/GaussianSplatting/gaussianSplattingSizeMaterialPlugin.js.map +1 -0
  322. package/Materials/GaussianSplatting/gaussianSplattingSizeMaterialPlugin.pure.d.ts +62 -0
  323. package/Materials/GaussianSplatting/gaussianSplattingSizeMaterialPlugin.pure.js +125 -0
  324. package/Materials/GaussianSplatting/gaussianSplattingSizeMaterialPlugin.pure.js.map +1 -0
  325. package/Materials/GaussianSplatting/gaussianSplattingSolidColorMaterialPlugin.pure.js +5 -5
  326. package/Materials/GaussianSplatting/gaussianSplattingSolidColorMaterialPlugin.pure.js.map +1 -1
  327. package/Materials/GaussianSplatting/pure.d.ts +4 -0
  328. package/Materials/GaussianSplatting/pure.js +4 -0
  329. package/Materials/GaussianSplatting/pure.js.map +1 -1
  330. package/Materials/Node/Blocks/Dual/imageSourceBlock.pure.d.ts +1 -0
  331. package/Materials/Node/Blocks/Dual/imageSourceBlock.pure.js +12 -0
  332. package/Materials/Node/Blocks/Dual/imageSourceBlock.pure.js.map +1 -1
  333. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.pure.js +11 -1
  334. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.pure.js.map +1 -1
  335. package/Materials/Node/Blocks/Fragment/prePassOutputBlock.pure.js +17 -2
  336. package/Materials/Node/Blocks/Fragment/prePassOutputBlock.pure.js.map +1 -1
  337. package/Materials/Node/Blocks/GaussianSplatting/gaussianSplattingBlock.pure.js +2 -2
  338. package/Materials/Node/Blocks/GaussianSplatting/gaussianSplattingBlock.pure.js.map +1 -1
  339. package/Materials/Node/nodeMaterial.pure.d.ts +4 -0
  340. package/Materials/Node/nodeMaterial.pure.js +4 -0
  341. package/Materials/Node/nodeMaterial.pure.js.map +1 -1
  342. package/Materials/Node/nodeMaterialBuildState.d.ts +1 -1
  343. package/Materials/Node/nodeMaterialBuildState.js +25 -3
  344. package/Materials/Node/nodeMaterialBuildState.js.map +1 -1
  345. package/Materials/PBR/openpbrMaterial.pure.d.ts +2 -0
  346. package/Materials/PBR/pbrBaseMaterial.pure.d.ts +2 -0
  347. package/Materials/Textures/Procedurals/proceduralTexture.pure.d.ts +14 -14
  348. package/Materials/Textures/Procedurals/proceduralTexture.pure.js +37 -13
  349. package/Materials/Textures/Procedurals/proceduralTexture.pure.js.map +1 -1
  350. package/Materials/Textures/baseTexture.pure.js +3 -0
  351. package/Materials/Textures/baseTexture.pure.js.map +1 -1
  352. package/Materials/Textures/cubeTexture.pure.js +1 -1
  353. package/Materials/Textures/cubeTexture.pure.js.map +1 -1
  354. package/Materials/Textures/internalTexture.d.ts +8 -1
  355. package/Materials/Textures/internalTexture.js +9 -2
  356. package/Materials/Textures/internalTexture.js.map +1 -1
  357. package/Materials/Textures/mirrorTexture.pure.js +3 -1
  358. package/Materials/Textures/mirrorTexture.pure.js.map +1 -1
  359. package/Materials/Textures/rawTexture2DArray.functions.d.ts +3 -3
  360. package/Materials/Textures/rawTexture2DArray.functions.js.map +1 -1
  361. package/Materials/Textures/rawTexture3D.d.ts +1 -1
  362. package/Materials/Textures/rawTexture3D.js +1 -1
  363. package/Materials/Textures/rawTexture3D.js.map +1 -1
  364. package/Materials/Textures/texture.pure.js +1 -1
  365. package/Materials/Textures/texture.pure.js.map +1 -1
  366. package/Materials/Textures/textureHelper.functions.d.ts +14 -0
  367. package/Materials/Textures/textureHelper.functions.js +24 -0
  368. package/Materials/Textures/textureHelper.functions.js.map +1 -1
  369. package/Materials/ditheredTileFadeMaterialPlugin.d.ts +210 -0
  370. package/Materials/ditheredTileFadeMaterialPlugin.js +509 -0
  371. package/Materials/ditheredTileFadeMaterialPlugin.js.map +1 -0
  372. package/Materials/effectRenderer.pure.d.ts +4 -0
  373. package/Materials/effectRenderer.pure.js +3 -2
  374. package/Materials/effectRenderer.pure.js.map +1 -1
  375. package/Materials/index.d.ts +5 -0
  376. package/Materials/index.js +5 -0
  377. package/Materials/index.js.map +1 -1
  378. package/Materials/material.pure.js +25 -12
  379. package/Materials/material.pure.js.map +1 -1
  380. package/Materials/materialHelper.geometryrendering.d.ts +46 -1
  381. package/Materials/materialHelper.geometryrendering.js +105 -8
  382. package/Materials/materialHelper.geometryrendering.js.map +1 -1
  383. package/Materials/prepass.defines.d.ts +2 -0
  384. package/Materials/prepass.defines.js +2 -0
  385. package/Materials/prepass.defines.js.map +1 -1
  386. package/Materials/pure.d.ts +5 -0
  387. package/Materials/pure.js +5 -0
  388. package/Materials/pure.js.map +1 -1
  389. package/Materials/standardMaterial.pure.d.ts +10 -0
  390. package/Materials/standardMaterial.pure.js +30 -5
  391. package/Materials/standardMaterial.pure.js.map +1 -1
  392. package/Meshes/Builders/polygonBuilder.pure.d.ts +4 -0
  393. package/Meshes/Builders/polygonBuilder.pure.js +3 -0
  394. package/Meshes/Builders/polygonBuilder.pure.js.map +1 -1
  395. package/Meshes/GaussianSplatting/gaussianPointSplattingController.d.ts +8 -0
  396. package/Meshes/GaussianSplatting/gaussianPointSplattingController.js +11 -0
  397. package/Meshes/GaussianSplatting/gaussianPointSplattingController.js.map +1 -0
  398. package/Meshes/GaussianSplatting/gaussianPointSplattingController.pure.d.ts +231 -0
  399. package/Meshes/GaussianSplatting/gaussianPointSplattingController.pure.js +1212 -0
  400. package/Meshes/GaussianSplatting/gaussianPointSplattingController.pure.js.map +1 -0
  401. package/Meshes/GaussianSplatting/gaussianPointSplattingRenderer.d.ts +14 -0
  402. package/Meshes/GaussianSplatting/gaussianPointSplattingRenderer.js +15 -0
  403. package/Meshes/GaussianSplatting/gaussianPointSplattingRenderer.js.map +1 -0
  404. package/Meshes/GaussianSplatting/gaussianPointSplattingRenderer.pure.d.ts +285 -0
  405. package/Meshes/GaussianSplatting/gaussianPointSplattingRenderer.pure.js +812 -0
  406. package/Meshes/GaussianSplatting/gaussianPointSplattingRenderer.pure.js.map +1 -0
  407. package/Meshes/GaussianSplatting/gaussianSplatting.functions.d.ts +19 -0
  408. package/Meshes/GaussianSplatting/gaussianSplatting.functions.js +23 -0
  409. package/Meshes/GaussianSplatting/gaussianSplatting.functions.js.map +1 -0
  410. package/Meshes/GaussianSplatting/gaussianSplattingMesh.d.ts +1 -0
  411. package/Meshes/GaussianSplatting/gaussianSplattingMesh.js +2 -0
  412. package/Meshes/GaussianSplatting/gaussianSplattingMesh.js.map +1 -1
  413. package/Meshes/GaussianSplatting/gaussianSplattingMesh.pure.d.ts +163 -14
  414. package/Meshes/GaussianSplatting/gaussianSplattingMesh.pure.js +239 -24
  415. package/Meshes/GaussianSplatting/gaussianSplattingMesh.pure.js.map +1 -1
  416. package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.pure.d.ts +34 -4
  417. package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.pure.js +125 -25
  418. package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.pure.js.map +1 -1
  419. package/Meshes/GaussianSplatting/pure.d.ts +2 -0
  420. package/Meshes/GaussianSplatting/pure.js +2 -0
  421. package/Meshes/GaussianSplatting/pure.js.map +1 -1
  422. package/Meshes/Node/Blocks/booleanGeometryBlock.pure.js +25 -11
  423. package/Meshes/Node/Blocks/booleanGeometryBlock.pure.js.map +1 -1
  424. package/Meshes/abstractMesh.pure.d.ts +30 -0
  425. package/Meshes/abstractMesh.pure.js +54 -0
  426. package/Meshes/abstractMesh.pure.js.map +1 -1
  427. package/Meshes/index.d.ts +2 -0
  428. package/Meshes/index.js +2 -0
  429. package/Meshes/index.js.map +1 -1
  430. package/Meshes/instancedMesh.pure.d.ts +5 -0
  431. package/Meshes/instancedMesh.pure.js +12 -0
  432. package/Meshes/instancedMesh.pure.js.map +1 -1
  433. package/Meshes/mesh.pure.js +23 -8
  434. package/Meshes/mesh.pure.js.map +1 -1
  435. package/Meshes/meshBlendingTag.d.ts +47 -0
  436. package/Meshes/meshBlendingTag.js +64 -0
  437. package/Meshes/meshBlendingTag.js.map +1 -0
  438. package/Meshes/polygonMesh.js +2 -2
  439. package/Meshes/polygonMesh.js.map +1 -1
  440. package/Meshes/pure.d.ts +2 -0
  441. package/Meshes/pure.js +2 -0
  442. package/Meshes/pure.js.map +1 -1
  443. package/Meshes/subMesh.pure.d.ts +11 -2
  444. package/Meshes/subMesh.pure.js +20 -5
  445. package/Meshes/subMesh.pure.js.map +1 -1
  446. package/Meshes/thinInstanceMesh.pure.js +1 -0
  447. package/Meshes/thinInstanceMesh.pure.js.map +1 -1
  448. package/Misc/andOrNotEvaluator.js +4 -0
  449. package/Misc/andOrNotEvaluator.js.map +1 -1
  450. package/Misc/fileTools.pure.js +21 -0
  451. package/Misc/fileTools.pure.js.map +1 -1
  452. package/Misc/minMaxReducer.pure.d.ts +6 -0
  453. package/Misc/minMaxReducer.pure.js +10 -0
  454. package/Misc/minMaxReducer.pure.js.map +1 -1
  455. package/Misc/snapshotRenderingHelper.js +2 -2
  456. package/Misc/snapshotRenderingHelper.js.map +1 -1
  457. package/Misc/thinMinMaxReducer.d.ts +19 -2
  458. package/Misc/thinMinMaxReducer.js +74 -21
  459. package/Misc/thinMinMaxReducer.js.map +1 -1
  460. package/Misc/tools.pure.js +1 -1
  461. package/Misc/tools.pure.js.map +1 -1
  462. package/Particles/Node/Blocks/Update/updateNoiseBlock.pure.js +19 -7
  463. package/Particles/Node/Blocks/Update/updateNoiseBlock.pure.js.map +1 -1
  464. package/Particles/Node/Blocks/particleSourceTextureBlock.pure.js +3 -2
  465. package/Particles/Node/Blocks/particleSourceTextureBlock.pure.js.map +1 -1
  466. package/Particles/gpuParticleSystem.pure.d.ts +4 -0
  467. package/Particles/gpuParticleSystem.pure.js +101 -32
  468. package/Particles/gpuParticleSystem.pure.js.map +1 -1
  469. package/Particles/particle.js +3 -2
  470. package/Particles/particle.js.map +1 -1
  471. package/Particles/solidParticleSystem.js +7 -1
  472. package/Particles/solidParticleSystem.js.map +1 -1
  473. package/Particles/thinParticleSystem.function.d.ts +6 -0
  474. package/Particles/thinParticleSystem.function.js +144 -88
  475. package/Particles/thinParticleSystem.function.js.map +1 -1
  476. package/Particles/thinParticleSystem.pure.d.ts +8 -0
  477. package/Particles/thinParticleSystem.pure.js +154 -28
  478. package/Particles/thinParticleSystem.pure.js.map +1 -1
  479. package/Particles/webgl2ParticleSystem.pure.d.ts +1 -0
  480. package/Particles/webgl2ParticleSystem.pure.js +12 -4
  481. package/Particles/webgl2ParticleSystem.pure.js.map +1 -1
  482. package/Physics/v2/ragdoll.d.ts +2 -4
  483. package/Physics/v2/ragdoll.js +11 -4
  484. package/Physics/v2/ragdoll.js.map +1 -1
  485. package/PostProcesses/RenderPipeline/Pipelines/lensRenderingPipeline.pure.js +7 -0
  486. package/PostProcesses/RenderPipeline/Pipelines/lensRenderingPipeline.pure.js.map +1 -1
  487. package/PostProcesses/index.d.ts +2 -0
  488. package/PostProcesses/index.js +2 -0
  489. package/PostProcesses/index.js.map +1 -1
  490. package/PostProcesses/meshBlendingBlueNoise.d.ts +15 -0
  491. package/PostProcesses/meshBlendingBlueNoise.js +77 -0
  492. package/PostProcesses/meshBlendingBlueNoise.js.map +1 -0
  493. package/PostProcesses/meshBlendingPostProcess.d.ts +131 -0
  494. package/PostProcesses/meshBlendingPostProcess.js +315 -0
  495. package/PostProcesses/meshBlendingPostProcess.js.map +1 -0
  496. package/PostProcesses/pure.d.ts +2 -0
  497. package/PostProcesses/pure.js +2 -0
  498. package/PostProcesses/pure.js.map +1 -1
  499. package/PostProcesses/thinMeshBlendingPostProcess.d.ts +339 -0
  500. package/PostProcesses/thinMeshBlendingPostProcess.js +771 -0
  501. package/PostProcesses/thinMeshBlendingPostProcess.js.map +1 -0
  502. package/Rendering/IBLShadows/iblShadowsRenderPipeline.pure.js +6 -6
  503. package/Rendering/IBLShadows/iblShadowsRenderPipeline.pure.js.map +1 -1
  504. package/Rendering/IBLShadows/iblShadowsVoxelRenderer.pure.d.ts +12 -0
  505. package/Rendering/IBLShadows/iblShadowsVoxelRenderer.pure.js +50 -25
  506. package/Rendering/IBLShadows/iblShadowsVoxelRenderer.pure.js.map +1 -1
  507. package/Rendering/boundingBoxRenderer.pure.js +2 -1
  508. package/Rendering/boundingBoxRenderer.pure.js.map +1 -1
  509. package/Rendering/depthRenderer.pure.d.ts +9 -0
  510. package/Rendering/depthRenderer.pure.js +15 -4
  511. package/Rendering/depthRenderer.pure.js.map +1 -1
  512. package/Rendering/edgesRenderer.pure.d.ts +4 -2
  513. package/Rendering/edgesRenderer.pure.js +11 -2
  514. package/Rendering/edgesRenderer.pure.js.map +1 -1
  515. package/Rendering/fluidRenderer/fluidRenderingObject.d.ts +14 -0
  516. package/Rendering/fluidRenderer/fluidRenderingObject.js +26 -0
  517. package/Rendering/fluidRenderer/fluidRenderingObject.js.map +1 -1
  518. package/Rendering/fluidRenderer/fluidRenderingObjectParticleSystem.d.ts +13 -3
  519. package/Rendering/fluidRenderer/fluidRenderingObjectParticleSystem.js +22 -9
  520. package/Rendering/fluidRenderer/fluidRenderingObjectParticleSystem.js.map +1 -1
  521. package/Rendering/fluidRenderer/fluidRenderingTargetRenderer.js +3 -0
  522. package/Rendering/fluidRenderer/fluidRenderingTargetRenderer.js.map +1 -1
  523. package/Rendering/geometryBufferRenderer.pure.d.ts +38 -4
  524. package/Rendering/geometryBufferRenderer.pure.js +130 -18
  525. package/Rendering/geometryBufferRenderer.pure.js.map +1 -1
  526. package/Rendering/objectRenderer.d.ts +7 -1
  527. package/Rendering/objectRenderer.js +45 -7
  528. package/Rendering/objectRenderer.js.map +1 -1
  529. package/Rendering/outlineRenderer.pure.js +6 -2
  530. package/Rendering/outlineRenderer.pure.js.map +1 -1
  531. package/Rendering/prePassRenderer.pure.js +3 -3
  532. package/Rendering/prePassRenderer.pure.js.map +1 -1
  533. package/Rendering/renderingManager.d.ts +1 -1
  534. package/Rendering/renderingManager.js +5 -4
  535. package/Rendering/renderingManager.js.map +1 -1
  536. package/Shaders/ShadersInclude/defaultFragmentAlpha.d.ts +5 -0
  537. package/Shaders/ShadersInclude/defaultFragmentAlpha.js +34 -0
  538. package/Shaders/ShadersInclude/defaultFragmentAlpha.js.map +1 -0
  539. package/Shaders/ShadersInclude/gaussianSplatting.js +3 -1
  540. package/Shaders/ShadersInclude/gaussianSplatting.js.map +1 -1
  541. package/Shaders/ShadersInclude/gaussianSplattingVertexDeclaration.js +5 -1
  542. package/Shaders/ShadersInclude/gaussianSplattingVertexDeclaration.js.map +1 -1
  543. package/Shaders/ShadersInclude/geometryRenderingFragment.d.ts +5 -0
  544. package/Shaders/ShadersInclude/geometryRenderingFragment.js +74 -0
  545. package/Shaders/ShadersInclude/geometryRenderingFragment.js.map +1 -0
  546. package/Shaders/ShadersInclude/lightsFragmentFunctions.js +27 -3
  547. package/Shaders/ShadersInclude/lightsFragmentFunctions.js.map +1 -1
  548. package/Shaders/ShadersInclude/mrtFragmentDeclaration.js +89 -0
  549. package/Shaders/ShadersInclude/mrtFragmentDeclaration.js.map +1 -1
  550. package/Shaders/ShadersInclude/oitDeclaration.js +1 -1
  551. package/Shaders/ShadersInclude/oitDeclaration.js.map +1 -1
  552. package/Shaders/ShadersInclude/openpbrBlockPrePass.js +24 -17
  553. package/Shaders/ShadersInclude/openpbrBlockPrePass.js.map +1 -1
  554. package/Shaders/ShadersInclude/pbrBlockPrePass.js +27 -20
  555. package/Shaders/ShadersInclude/pbrBlockPrePass.js.map +1 -1
  556. package/Shaders/ShadersInclude/pbrDebug.js +6 -2
  557. package/Shaders/ShadersInclude/pbrDebug.js.map +1 -1
  558. package/Shaders/ShadersInclude/prePassDeclaration.js +95 -2
  559. package/Shaders/ShadersInclude/prePassDeclaration.js.map +1 -1
  560. package/Shaders/default.fragment.js +31 -40
  561. package/Shaders/default.fragment.js.map +1 -1
  562. package/Shaders/depthOfField.fragment.js +13 -9
  563. package/Shaders/depthOfField.fragment.js.map +1 -1
  564. package/Shaders/fluidRenderingParticleDepth.vertex.js +16 -1
  565. package/Shaders/fluidRenderingParticleDepth.vertex.js.map +1 -1
  566. package/Shaders/fluidRenderingParticleThickness.vertex.js +16 -1
  567. package/Shaders/fluidRenderingParticleThickness.vertex.js.map +1 -1
  568. package/Shaders/gaussianSplatting.fragment.js +63 -3
  569. package/Shaders/gaussianSplatting.fragment.js.map +1 -1
  570. package/Shaders/gaussianSplatting.vertex.js +80 -0
  571. package/Shaders/gaussianSplatting.vertex.js.map +1 -1
  572. package/Shaders/geometry.fragment.js +17 -11
  573. package/Shaders/geometry.fragment.js.map +1 -1
  574. package/Shaders/gpuRenderParticles.fragment.js +43 -1
  575. package/Shaders/gpuRenderParticles.fragment.js.map +1 -1
  576. package/Shaders/gpuRenderParticles.vertex.js +96 -16
  577. package/Shaders/gpuRenderParticles.vertex.js.map +1 -1
  578. package/Shaders/meshBlending.fragment.d.ts +5 -0
  579. package/Shaders/meshBlending.fragment.js +519 -0
  580. package/Shaders/meshBlending.fragment.js.map +1 -0
  581. package/Shaders/minmaxRedux.fragment.js +6 -1
  582. package/Shaders/minmaxRedux.fragment.js.map +1 -1
  583. package/Shaders/particles.fragment.js +43 -1
  584. package/Shaders/particles.fragment.js.map +1 -1
  585. package/Shaders/particles.vertex.js +84 -3
  586. package/Shaders/particles.vertex.js.map +1 -1
  587. package/Shaders/sprites.fragment.js +52 -2
  588. package/Shaders/sprites.fragment.js.map +1 -1
  589. package/Shaders/sprites.vertex.js +62 -1
  590. package/Shaders/sprites.vertex.js.map +1 -1
  591. package/ShadersWGSL/ShadersInclude/defaultFragmentAlpha.d.ts +5 -0
  592. package/ShadersWGSL/ShadersInclude/defaultFragmentAlpha.js +33 -0
  593. package/ShadersWGSL/ShadersInclude/defaultFragmentAlpha.js.map +1 -0
  594. package/ShadersWGSL/ShadersInclude/gaussianPointSplatting.d.ts +5 -0
  595. package/ShadersWGSL/ShadersInclude/gaussianPointSplatting.js +65 -0
  596. package/ShadersWGSL/ShadersInclude/gaussianPointSplatting.js.map +1 -0
  597. package/ShadersWGSL/ShadersInclude/gaussianPointSplattingScan.d.ts +5 -0
  598. package/ShadersWGSL/ShadersInclude/gaussianPointSplattingScan.js +17 -0
  599. package/ShadersWGSL/ShadersInclude/gaussianPointSplattingScan.js.map +1 -0
  600. package/ShadersWGSL/ShadersInclude/gaussianSplatting.d.ts +1 -0
  601. package/ShadersWGSL/ShadersInclude/gaussianSplatting.js +6 -78
  602. package/ShadersWGSL/ShadersInclude/gaussianSplatting.js.map +1 -1
  603. package/ShadersWGSL/ShadersInclude/gaussianSplattingFragmentDeclaration.js +2 -2
  604. package/ShadersWGSL/ShadersInclude/gaussianSplattingFragmentDeclaration.js.map +1 -1
  605. package/ShadersWGSL/ShadersInclude/gaussianSplattingShared.d.ts +5 -0
  606. package/ShadersWGSL/ShadersInclude/gaussianSplattingShared.js +79 -0
  607. package/ShadersWGSL/ShadersInclude/gaussianSplattingShared.js.map +1 -0
  608. package/ShadersWGSL/ShadersInclude/geometryRenderingFragment.d.ts +6 -0
  609. package/ShadersWGSL/ShadersInclude/geometryRenderingFragment.js +76 -0
  610. package/ShadersWGSL/ShadersInclude/geometryRenderingFragment.js.map +1 -0
  611. package/ShadersWGSL/ShadersInclude/lightFragment.js +1 -1
  612. package/ShadersWGSL/ShadersInclude/lightFragment.js.map +1 -1
  613. package/ShadersWGSL/ShadersInclude/lightsFragmentFunctions.js +27 -3
  614. package/ShadersWGSL/ShadersInclude/lightsFragmentFunctions.js.map +1 -1
  615. package/ShadersWGSL/ShadersInclude/meshBlendTagFragmentOutput.d.ts +5 -0
  616. package/ShadersWGSL/ShadersInclude/meshBlendTagFragmentOutput.js +18 -0
  617. package/ShadersWGSL/ShadersInclude/meshBlendTagFragmentOutput.js.map +1 -0
  618. package/ShadersWGSL/ShadersInclude/openpbrBlockPrePass.d.ts +1 -0
  619. package/ShadersWGSL/ShadersInclude/openpbrBlockPrePass.js +11 -25
  620. package/ShadersWGSL/ShadersInclude/openpbrBlockPrePass.js.map +1 -1
  621. package/ShadersWGSL/ShadersInclude/pbrBlockPrePass.d.ts +1 -0
  622. package/ShadersWGSL/ShadersInclude/pbrBlockPrePass.js +11 -25
  623. package/ShadersWGSL/ShadersInclude/pbrBlockPrePass.js.map +1 -1
  624. package/ShadersWGSL/ShadersInclude/pbrDebug.js +5 -1
  625. package/ShadersWGSL/ShadersInclude/pbrDebug.js.map +1 -1
  626. package/ShadersWGSL/ShadersInclude/prePassDeclaration.js +6 -1
  627. package/ShadersWGSL/ShadersInclude/prePassDeclaration.js.map +1 -1
  628. package/ShadersWGSL/default.fragment.js +17 -48
  629. package/ShadersWGSL/default.fragment.js.map +1 -1
  630. package/ShadersWGSL/fluidRenderingParticleDepth.vertex.js +15 -2
  631. package/ShadersWGSL/fluidRenderingParticleDepth.vertex.js.map +1 -1
  632. package/ShadersWGSL/fluidRenderingParticleThickness.vertex.js +15 -2
  633. package/ShadersWGSL/fluidRenderingParticleThickness.vertex.js.map +1 -1
  634. package/ShadersWGSL/gaussianPointSplattingBlit.fragment.d.ts +5 -0
  635. package/ShadersWGSL/gaussianPointSplattingBlit.fragment.js +22 -0
  636. package/ShadersWGSL/gaussianPointSplattingBlit.fragment.js.map +1 -0
  637. package/ShadersWGSL/gaussianPointSplattingBlit.vertex.d.ts +5 -0
  638. package/ShadersWGSL/gaussianPointSplattingBlit.vertex.js +19 -0
  639. package/ShadersWGSL/gaussianPointSplattingBlit.vertex.js.map +1 -0
  640. package/ShadersWGSL/gaussianPointSplattingDepthBlit.fragment.d.ts +5 -0
  641. package/ShadersWGSL/gaussianPointSplattingDepthBlit.fragment.js +21 -0
  642. package/ShadersWGSL/gaussianPointSplattingDepthBlit.fragment.js.map +1 -0
  643. package/ShadersWGSL/gaussianSplatting.fragment.js +63 -2
  644. package/ShadersWGSL/gaussianSplatting.fragment.js.map +1 -1
  645. package/ShadersWGSL/gaussianSplatting.vertex.js +82 -1
  646. package/ShadersWGSL/gaussianSplatting.vertex.js.map +1 -1
  647. package/ShadersWGSL/gaussianSplattingDepth.vertex.js +2 -1
  648. package/ShadersWGSL/gaussianSplattingDepth.vertex.js.map +1 -1
  649. package/ShadersWGSL/gaussianSplattingVoxel.vertex.js +2 -1
  650. package/ShadersWGSL/gaussianSplattingVoxel.vertex.js.map +1 -1
  651. package/ShadersWGSL/geometry.fragment.js +37 -2
  652. package/ShadersWGSL/geometry.fragment.js.map +1 -1
  653. package/ShadersWGSL/gpsHiZBuild.compute.d.ts +5 -0
  654. package/ShadersWGSL/gpsHiZBuild.compute.js +16 -0
  655. package/ShadersWGSL/gpsHiZBuild.compute.js.map +1 -0
  656. package/ShadersWGSL/gpsPartition.compute.d.ts +5 -0
  657. package/ShadersWGSL/gpsPartition.compute.js +27 -0
  658. package/ShadersWGSL/gpsPartition.compute.js.map +1 -0
  659. package/ShadersWGSL/gpsPreprocess.compute.d.ts +5 -0
  660. package/ShadersWGSL/gpsPreprocess.compute.js +86 -0
  661. package/ShadersWGSL/gpsPreprocess.compute.js.map +1 -0
  662. package/ShadersWGSL/gpsResolve.compute.d.ts +5 -0
  663. package/ShadersWGSL/gpsResolve.compute.js +41 -0
  664. package/ShadersWGSL/gpsResolve.compute.js.map +1 -0
  665. package/ShadersWGSL/gpsScanAdd.compute.d.ts +5 -0
  666. package/ShadersWGSL/gpsScanAdd.compute.js +22 -0
  667. package/ShadersWGSL/gpsScanAdd.compute.js.map +1 -0
  668. package/ShadersWGSL/gpsScanBlocks.compute.d.ts +5 -0
  669. package/ShadersWGSL/gpsScanBlocks.compute.js +23 -0
  670. package/ShadersWGSL/gpsScanBlocks.compute.js.map +1 -0
  671. package/ShadersWGSL/gpsScanSums.compute.d.ts +5 -0
  672. package/ShadersWGSL/gpsScanSums.compute.js +30 -0
  673. package/ShadersWGSL/gpsScanSums.compute.js.map +1 -0
  674. package/ShadersWGSL/gpsSplat.compute.d.ts +5 -0
  675. package/ShadersWGSL/gpsSplat.compute.js +37 -0
  676. package/ShadersWGSL/gpsSplat.compute.js.map +1 -0
  677. package/ShadersWGSL/gpuRenderParticles.fragment.js +47 -2
  678. package/ShadersWGSL/gpuRenderParticles.fragment.js.map +1 -1
  679. package/ShadersWGSL/gpuRenderParticles.vertex.js +110 -7
  680. package/ShadersWGSL/gpuRenderParticles.vertex.js.map +1 -1
  681. package/ShadersWGSL/meshBlending.fragment.d.ts +5 -0
  682. package/ShadersWGSL/meshBlending.fragment.js +576 -0
  683. package/ShadersWGSL/meshBlending.fragment.js.map +1 -0
  684. package/ShadersWGSL/minmaxRedux.fragment.js +20 -3
  685. package/ShadersWGSL/minmaxRedux.fragment.js.map +1 -1
  686. package/ShadersWGSL/openpbr.fragment.js +2 -1
  687. package/ShadersWGSL/openpbr.fragment.js.map +1 -1
  688. package/ShadersWGSL/particles.fragment.js +45 -1
  689. package/ShadersWGSL/particles.fragment.js.map +1 -1
  690. package/ShadersWGSL/particles.vertex.js +86 -4
  691. package/ShadersWGSL/particles.vertex.js.map +1 -1
  692. package/ShadersWGSL/pbr.fragment.js +2 -1
  693. package/ShadersWGSL/pbr.fragment.js.map +1 -1
  694. package/ShadersWGSL/sprites.fragment.js +56 -2
  695. package/ShadersWGSL/sprites.fragment.js.map +1 -1
  696. package/ShadersWGSL/sprites.vertex.js +62 -1
  697. package/ShadersWGSL/sprites.vertex.js.map +1 -1
  698. package/Sprites/spriteManager.d.ts +13 -0
  699. package/Sprites/spriteManager.js +15 -0
  700. package/Sprites/spriteManager.js.map +1 -1
  701. package/Sprites/spriteRenderer.d.ts +24 -1
  702. package/Sprites/spriteRenderer.js +368 -50
  703. package/Sprites/spriteRenderer.js.map +1 -1
  704. package/Sprites/thinSprite.d.ts +4 -0
  705. package/Sprites/thinSprite.js +4 -0
  706. package/Sprites/thinSprite.js.map +1 -1
  707. package/States/alphaCullingState.d.ts +3 -1
  708. package/States/alphaCullingState.js +18 -3
  709. package/States/alphaCullingState.js.map +1 -1
  710. package/XR/features/WebXRSpaceWarp.pure.js +2 -1
  711. package/XR/features/WebXRSpaceWarp.pure.js.map +1 -1
  712. package/XR/webXRDefaultExperience.d.ts +5 -1
  713. package/XR/webXRDefaultExperience.js.map +1 -1
  714. package/XR/webXREnterExitUI.d.ts +2 -1
  715. package/XR/webXREnterExitUI.js.map +1 -1
  716. package/assetContainer.d.ts +1 -0
  717. package/assetContainer.js +5 -1
  718. package/assetContainer.js.map +1 -1
  719. package/package.json +1 -1
  720. package/scene.pure.d.ts +36 -2
  721. package/scene.pure.js +63 -4
  722. package/scene.pure.js.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"gaussianSplattingDebugMaterialPlugin.pure.js","sourceRoot":"","sources":["../../../../../dev/core/src/Materials/GaussianSplatting/gaussianSplattingDebugMaterialPlugin.pure.ts"],"names":[],"mappings":"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","sourcesContent":["/** This file must only contain pure code and pure imports */\n\nimport { type Nullable } from \"../../types\";\nimport { type Scene } from \"../../scene\";\nimport { type AbstractEngine } from \"../../Engines/abstractEngine\";\nimport { type SubMesh } from \"../../Meshes/subMesh\";\nimport { type UniformBuffer } from \"../uniformBuffer\";\nimport { MaterialDefines } from \"../materialDefines\";\nimport { MaterialPluginBase } from \"../materialPluginBase.pure\";\nimport { ShaderLanguage } from \"../shaderLanguage\";\nimport { RegisterClass } from \"../../Misc/typeStore\";\nimport { type Vector3 } from \"../../Maths/math.vector\";\nimport { Logger } from \"../../Misc/logger\";\nimport { type GaussianSplattingMaterial, GetGaussianSplattingMaxPartCount } from \"./gaussianSplattingMaterial.pure\";\nimport { RawTexture } from \"../Textures/rawTexture\";\nimport { Constants } from \"../../Engines/constants\";\n\n/** @internal */\nclass GaussianSplattingDebugDefines extends MaterialDefines {\n /** Defines whether any debug feature is active */\n GS_DBG_ENABLED: boolean = false;\n /** Defines whether world-space clipping box is enabled (0: off, 1: on) */\n GS_DBG_CLIP: number = 0;\n /** Defines whether opacity culling is enabled (0: off, 1: on) */\n GS_DBG_CULL_OPACITY: number = 0;\n /** Defines whether size culling is enabled (0: off, 1: on) */\n GS_DBG_CULL_SIZE: number = 0;\n /** Defines whether per-splat opacity scaling is enabled (0: off, 1: on) */\n GS_DBG_OPACITY_SCALE: number = 0;\n /** Defines whether opacity saturation (flat disk) is enabled (0: off, 1: on) */\n GS_DBG_OPACITY_SATURATE: number = 0;\n /** Defines whether the DC (base) SH color is included (0: off, 1: on) */\n GS_DBG_SH_DC: number = 1;\n /** Defines whether SH band 1 contribution is included (0: off, 1: on) */\n GS_DBG_SH_ORDER1: number = 1;\n /** Defines whether SH band 2 contribution is included (0: off, 1: on) */\n GS_DBG_SH_ORDER2: number = 1;\n /** Defines whether SH band 3 contribution is included (0: off, 1: on) */\n GS_DBG_SH_ORDER3: number = 1;\n /** Defines whether SH band 4 contribution is included (0: off, 1: on) */\n GS_DBG_SH_ORDER4: number = 1;\n}\n\n/**\n * Per-part debug options for compound Gaussian splat meshes.\n * Each field is optional; unset fields fall back to the global setting on the plugin,\n * and if that is also unset, a neutral value is used (no culling, full SH, etc.).\n */\nexport interface IGaussianSplattingDebugOptions {\n /** World-space axis-aligned clipping box, or null to disable. */\n clippingBox: Nullable<{ min: Vector3; max: Vector3 }>;\n /** Opacity culling range [0..1], or null to disable. */\n opacityCulling: Nullable<{ min: number; max: number }>;\n /** Size culling range, or null to disable. */\n sizeCulling: Nullable<{ min: number; max: number }>;\n /** Scalar opacity multiplier. 1.0 = no change. */\n opacityScale: number;\n /** When true, replaces Gaussian falloff with flat disk opacity. */\n opacitySaturate: boolean;\n /** Include the DC (base) SH color. */\n shDc: boolean;\n /** Include SH band 1 contribution. */\n shOrder1: boolean;\n /** Include SH band 2 contribution. */\n shOrder2: boolean;\n /** Include SH band 3 contribution. */\n shOrder3: boolean;\n /** Include SH band 4 contribution. */\n shOrder4: boolean;\n}\n\n/**\n * Debug plugin for GaussianSplattingMaterial.\n * Provides runtime controls for clipping, opacity/size culling, opacity scaling,\n * opacity saturation, and per-SH-order toggling. All features are gated behind\n * the GS_DBG_ENABLED shader define — when every option is at its default value\n * the define is absent and the shader compiles to identical code as without the plugin.\n *\n * In compound mode (partCount \\> 0), per-part overrides can be set via setPartOptions().\n * Global settings act as defaults; per-part settings override them for that part index.\n */\nexport class GaussianSplattingDebugMaterialPlugin extends MaterialPluginBase {\n private _clippingBox: Nullable<{ min: Vector3; max: Vector3 }> = null;\n private _opacityCulling: Nullable<{ min: number; max: number }> = null;\n private _sizeCulling: Nullable<{ min: number; max: number }> = null;\n private _opacityScale: number = 1.0;\n private _opacitySaturate: boolean = false;\n private _shDc: boolean = true;\n private _shOrder1: boolean = true;\n private _shOrder2: boolean = true;\n private _shOrder3: boolean = true;\n private _shOrder4: boolean = true;\n\n // Per-part state (only populated when partCount > 0)\n private _partCount: number = 0;\n private _partClippingBoxes: Array<Nullable<{ min: Vector3; max: Vector3 }>> = [];\n private _partOpacityCullings: Array<Nullable<{ min: number; max: number }>> = [];\n private _partSizeCullings: Array<Nullable<{ min: number; max: number }>> = [];\n private _partOpacityScales: Array<Nullable<number>> = [];\n private _partOpacitySaturates: Array<Nullable<boolean>> = [];\n private _partShDcs: Array<Nullable<boolean>> = [];\n private _partShOrder1s: Array<Nullable<boolean>> = [];\n private _partShOrder2s: Array<Nullable<boolean>> = [];\n private _partShOrder3s: Array<Nullable<boolean>> = [];\n private _partShOrder4s: Array<Nullable<boolean>> = [];\n // Single registry of every _part* array — shiftPartOptions iterates this instead of\n // listing each array by name, so adding a new per-part field only requires adding it here.\n private readonly _partArrays: Array<Array<unknown>>;\n\n // Per-part debug LUT: MAX_PART_COUNT × 5 RGBA float texture (dbgPartData)\n private _dbgPartDataTexture: Nullable<RawTexture> = null;\n private _textureDirty: boolean = false;\n private _maxPartCount: number = 0;\n\n /**\n * Creates a new GaussianSplattingDebugMaterialPlugin.\n * @param material The GaussianSplattingMaterial to attach the plugin to.\n */\n constructor(material: GaussianSplattingMaterial) {\n super(material, \"GaussianSplattingDebug\", 200, new GaussianSplattingDebugDefines(), true, true);\n this._partArrays = [\n this._partClippingBoxes,\n this._partOpacityCullings,\n this._partSizeCullings,\n this._partOpacityScales,\n this._partOpacitySaturates,\n this._partShDcs,\n this._partShOrder1s,\n this._partShOrder2s,\n this._partShOrder3s,\n this._partShOrder4s,\n ];\n }\n\n private _isAnyFeatureActive(): boolean {\n return (\n this._clippingBox !== null ||\n this._opacityCulling !== null ||\n this._sizeCulling !== null ||\n this._opacityScale !== 1.0 ||\n this._opacitySaturate ||\n !this._shDc ||\n !this._shOrder1 ||\n !this._shOrder2 ||\n !this._shOrder3 ||\n !this._shOrder4 ||\n this._partClippingBoxes.some((b) => b !== null) ||\n this._partOpacityCullings.some((b) => b !== null) ||\n this._partSizeCullings.some((b) => b !== null) ||\n this._partOpacityScales.some((s) => s !== null) ||\n this._partOpacitySaturates.some((s) => s !== null) ||\n this._partShDcs.some((s) => s !== null) ||\n this._partShOrder1s.some((s) => s !== null) ||\n this._partShOrder2s.some((s) => s !== null) ||\n this._partShOrder3s.some((s) => s !== null) ||\n this._partShOrder4s.some((s) => s !== null)\n );\n }\n\n private _markDirty(): void {\n this.markAllDefinesAsDirty();\n this._textureDirty = true;\n }\n\n // ----- Public API -----\n\n /**\n * Number of parts in compound mode. Set automatically by GaussianSplattingDebugger.addMesh().\n * When 0 (non-compound), setPartOptions() logs an error.\n * @returns the part count\n */\n public get partCount(): number {\n return this._partCount;\n }\n public set partCount(count: number) {\n if (this._partCount !== count) {\n this._partCount = count;\n this._markDirty();\n }\n }\n\n /**\n * Sets per-part debug overrides for the given part index.\n * Only valid on compound meshes (partCount \\> 0); logs an error otherwise.\n * @param partIndex The zero-based part index.\n * @param options Partial set of debug options to override for this part.\n */\n public setPartOptions(partIndex: number, options: Partial<IGaussianSplattingDebugOptions>): void {\n if (this._partCount === 0) {\n Logger.Error(\"GaussianSplattingDebugMaterialPlugin.setPartOptions: called on a non-compound mesh. partCount is 0.\");\n return;\n }\n if (options.clippingBox !== undefined) {\n this._partClippingBoxes[partIndex] = options.clippingBox;\n }\n if (options.opacityCulling !== undefined) {\n this._partOpacityCullings[partIndex] = options.opacityCulling;\n }\n if (options.sizeCulling !== undefined) {\n this._partSizeCullings[partIndex] = options.sizeCulling;\n }\n if (options.opacityScale !== undefined) {\n this._partOpacityScales[partIndex] = options.opacityScale;\n }\n if (options.opacitySaturate !== undefined) {\n this._partOpacitySaturates[partIndex] = options.opacitySaturate;\n }\n if (options.shDc !== undefined) {\n this._partShDcs[partIndex] = options.shDc;\n }\n if (options.shOrder1 !== undefined) {\n this._partShOrder1s[partIndex] = options.shOrder1;\n }\n if (options.shOrder2 !== undefined) {\n this._partShOrder2s[partIndex] = options.shOrder2;\n }\n if (options.shOrder3 !== undefined) {\n this._partShOrder3s[partIndex] = options.shOrder3;\n }\n if (options.shOrder4 !== undefined) {\n this._partShOrder4s[partIndex] = options.shOrder4;\n }\n this._markDirty();\n }\n\n /**\n * Clears all per-part debug overrides for the given part index,\n * falling back to global settings.\n * @param partIndex The zero-based part index.\n */\n public clearPartOptions(partIndex: number): void {\n this._partClippingBoxes[partIndex] = null;\n this._partOpacityCullings[partIndex] = null;\n this._partSizeCullings[partIndex] = null;\n this._partOpacityScales[partIndex] = null;\n this._partOpacitySaturates[partIndex] = null;\n this._partShDcs[partIndex] = null;\n this._partShOrder1s[partIndex] = null;\n this._partShOrder2s[partIndex] = null;\n this._partShOrder3s[partIndex] = null;\n this._partShOrder4s[partIndex] = null;\n this._markDirty();\n }\n\n /**\n * Removes the per-part override slot at `removedIndex` and shifts all higher-indexed\n * slots down by one, keeping the arrays aligned with the compound mesh's new part layout.\n * @param removedIndex The original (pre-removal) part index.\n * @internal\n */\n public shiftPartOptions(removedIndex: number): void {\n for (const arr of this._partArrays) {\n if (removedIndex < arr.length) {\n arr.splice(removedIndex, 1);\n }\n }\n this._markDirty();\n }\n\n /**\n * World-space axis-aligned clipping box. Splats outside are not rendered.\n * Set to null to disable clipping.\n * Example: `{ min: new Vector3(-2,-2,-2), max: new Vector3(2,2,2) }`\n */\n public get clippingBox(): Nullable<{ min: Vector3; max: Vector3 }> {\n return this._clippingBox;\n }\n public set clippingBox(value: Nullable<{ min: Vector3; max: Vector3 }>) {\n this._clippingBox = value;\n this._markDirty();\n }\n\n /**\n * Opacity culling range [0..1]. Splats whose stored opacity falls outside this\n * range are not rendered. Set to null to disable.\n */\n public get opacityCulling(): Nullable<{ min: number; max: number }> {\n return this._opacityCulling;\n }\n public set opacityCulling(value: Nullable<{ min: number; max: number }>) {\n this._opacityCulling = value;\n this._markDirty();\n }\n\n /**\n * Size culling range. Size is pow(|det(Σ)|, 1/6) of the 3D covariance matrix,\n * equal to the geometric mean of the principal radii. Use GaussianSplattingMeshBase.splatSizeRange\n * to find the asset's range. Set to null to disable.\n */\n public get sizeCulling(): Nullable<{ min: number; max: number }> {\n return this._sizeCulling;\n }\n public set sizeCulling(value: Nullable<{ min: number; max: number }>) {\n this._sizeCulling = value;\n this._markDirty();\n }\n\n /**\n * Scalar multiplier applied to every splat's opacity after all other modifiers.\n * 1.0 (default) = no change.\n */\n public get opacityScale(): number {\n return this._opacityScale;\n }\n public set opacityScale(value: number) {\n this._opacityScale = value;\n this._markDirty();\n }\n\n /**\n * When true, replaces the Gaussian spatial falloff with a flat uniform opacity,\n * making each splat appear as a solid disk with its raw alpha value.\n */\n public get opacitySaturate(): boolean {\n return this._opacitySaturate;\n }\n public set opacitySaturate(value: boolean) {\n this._opacitySaturate = value;\n this._markDirty();\n }\n\n /** Include the DC (base) color from colorsTexture. Default: true. */\n public get shDc(): boolean {\n return this._shDc;\n }\n public set shDc(value: boolean) {\n this._shDc = value;\n this._markDirty();\n }\n\n /** Include SH band 1 contribution. Default: true. */\n public get shOrder1(): boolean {\n return this._shOrder1;\n }\n public set shOrder1(value: boolean) {\n this._shOrder1 = value;\n this._markDirty();\n }\n\n /** Include SH band 2 contribution. Default: true. */\n public get shOrder2(): boolean {\n return this._shOrder2;\n }\n public set shOrder2(value: boolean) {\n this._shOrder2 = value;\n this._markDirty();\n }\n\n /** Include SH band 3 contribution. Default: true. */\n public get shOrder3(): boolean {\n return this._shOrder3;\n }\n public set shOrder3(value: boolean) {\n this._shOrder3 = value;\n this._markDirty();\n }\n\n /** Include SH band 4 contribution. Default: true. */\n public get shOrder4(): boolean {\n return this._shOrder4;\n }\n public set shOrder4(value: boolean) {\n this._shOrder4 = value;\n this._markDirty();\n }\n\n // ----- Plugin overrides -----\n\n /**\n * Adds the per-part debug data texture name to the sampler list so the effect can bind it.\n * @param samplers the sampler list to populate\n */\n public override getSamplers(samplers: string[]): void {\n samplers.push(\"dbgPartData\");\n }\n\n /** @returns the class name of this plugin */\n public override getClassName(): string {\n return \"GaussianSplattingDebugMaterialPlugin\";\n }\n\n /**\n * @param shaderLanguage the shader language to check\n * @returns true for GLSL and WGSL\n */\n public override isCompatible(shaderLanguage: ShaderLanguage): boolean {\n switch (shaderLanguage) {\n case ShaderLanguage.GLSL:\n case ShaderLanguage.WGSL:\n return true;\n default:\n return false;\n }\n }\n\n /**\n * Always ready — no async resources.\n * @param _defines unused\n * @param _scene unused\n * @param _engine unused\n * @param _subMesh unused\n * @returns true\n */\n public override isReadyForSubMesh(_defines: MaterialDefines, _scene: Scene, _engine: AbstractEngine, _subMesh: SubMesh): boolean {\n return true;\n }\n\n /**\n * Sets shader defines from current property state. GS_DBG_ENABLED is set to true\n * only when at least one feature is non-default, ensuring zero overhead otherwise.\n * Sub-flags also check per-part arrays so compound-only overrides activate the correct\n * code paths even when the global setting is at its default.\n * @param defines the defines object\n */\n public override prepareDefines(defines: GaussianSplattingDebugDefines): void {\n defines.GS_DBG_ENABLED = this._isAnyFeatureActive();\n defines.GS_DBG_CLIP = this._clippingBox !== null || this._partClippingBoxes.some((b) => b !== null) ? 1 : 0;\n defines.GS_DBG_CULL_OPACITY = this._opacityCulling !== null || this._partOpacityCullings.some((b) => b !== null) ? 1 : 0;\n defines.GS_DBG_CULL_SIZE = this._sizeCulling !== null || this._partSizeCullings.some((b) => b !== null) ? 1 : 0;\n defines.GS_DBG_OPACITY_SCALE = this._opacityScale !== 1.0 || this._partOpacityScales.some((s) => s !== null) ? 1 : 0;\n defines.GS_DBG_OPACITY_SATURATE = this._opacitySaturate || this._partOpacitySaturates.some((s) => s !== null) ? 1 : 0;\n defines.GS_DBG_SH_DC = !this._shDc || this._partShDcs.some((s) => s !== null) ? 0 : 1;\n defines.GS_DBG_SH_ORDER1 = !this._shOrder1 || this._partShOrder1s.some((s) => s !== null) ? 0 : 1;\n defines.GS_DBG_SH_ORDER2 = !this._shOrder2 || this._partShOrder2s.some((s) => s !== null) ? 0 : 1;\n defines.GS_DBG_SH_ORDER3 = !this._shOrder3 || this._partShOrder3s.some((s) => s !== null) ? 0 : 1;\n defines.GS_DBG_SH_ORDER4 = !this._shOrder4 || this._partShOrder4s.some((s) => s !== null) ? 0 : 1;\n }\n\n /**\n * Returns shader code injections for the debug features.\n * @param shaderType \"vertex\" or \"fragment\"\n * @param shaderLanguage GLSL or WGSL\n * @returns map of injection-point name to injected code, or null\n */\n public override getCustomCode(shaderType: string, shaderLanguage = ShaderLanguage.GLSL): Nullable<{ [pointName: string]: string }> {\n if (shaderLanguage === ShaderLanguage.WGSL) {\n return this._getCustomCodeWGSL(shaderType);\n }\n return this._getCustomCodeGLSL(shaderType);\n }\n\n private _getCustomCodeGLSL(shaderType: string): Nullable<{ [pointName: string]: string }> {\n if (shaderType === \"vertex\") {\n return {\n CUSTOM_VERTEX_DEFINITIONS: `\n#if defined(GS_DBG_ENABLED) && GS_DBG_CLIP == 1 && !defined(IS_COMPOUND)\nuniform vec3 dbgClipMin;\nuniform vec3 dbgClipMax;\n#endif\n#if defined(GS_DBG_ENABLED) && GS_DBG_CULL_OPACITY == 1 && !defined(IS_COMPOUND)\nuniform float dbgMinOpacity;\nuniform float dbgMaxOpacity;\n#endif\n#if defined(GS_DBG_ENABLED) && GS_DBG_CULL_SIZE == 1 && !defined(IS_COMPOUND)\nuniform float dbgMinSize;\nuniform float dbgMaxSize;\n#endif\n#if defined(GS_DBG_ENABLED) && GS_DBG_OPACITY_SCALE == 1 && !defined(IS_COMPOUND)\nuniform float dbgOpacityScale;\n#endif\n#if defined(GS_DBG_ENABLED) && IS_COMPOUND\nuniform sampler2D dbgPartData;\nvarying float vPartIndex;\n#endif\n`,\n CUSTOM_VERTEX_UPDATE: `\n#if defined(GS_DBG_ENABLED) && GS_DBG_CLIP == 1 && !defined(IS_COMPOUND)\n if (worldPos.x < dbgClipMin.x || worldPos.x > dbgClipMax.x ||\n worldPos.y < dbgClipMin.y || worldPos.y > dbgClipMax.y ||\n worldPos.z < dbgClipMin.z || worldPos.z > dbgClipMax.z) {\n scale = vec2(0.0);\n }\n#endif\n#if defined(GS_DBG_ENABLED) && GS_DBG_CULL_OPACITY == 1 && !defined(IS_COMPOUND)\n if (splat.color.w < dbgMinOpacity || splat.color.w > dbgMaxOpacity) {\n scale = vec2(0.0);\n }\n#endif\n#if defined(GS_DBG_ENABLED) && GS_DBG_CULL_SIZE == 1 && !defined(IS_COMPOUND)\n {\n float _d0 = splat.covA.x; float _d1 = splat.covA.y; float _d2 = splat.covA.z;\n float _d3 = splat.covA.w; float _d4 = splat.covB.x; float _d5 = splat.covB.y;\n float _det = _d0*(_d3*_d5 - _d4*_d4) - _d1*(_d1*_d5 - _d4*_d2) + _d2*(_d1*_d4 - _d3*_d2);\n float _sz = pow(abs(_det), 1.0/6.0);\n if (_sz < dbgMinSize || _sz > dbgMaxSize) {\n scale = vec2(0.0);\n }\n }\n#endif\n#if defined(GS_DBG_ENABLED) && GS_DBG_OPACITY_SCALE == 1 && !defined(IS_COMPOUND)\n vColor.w *= dbgOpacityScale;\n#endif\n#if defined(GS_DBG_ENABLED) && IS_COMPOUND\n {\n int _pIdx = int(splat.partIndex);\n vPartIndex = float(splat.partIndex);\n vec4 _row0 = texelFetch(dbgPartData, ivec2(_pIdx, 0), 0);\n vec4 _row1 = texelFetch(dbgPartData, ivec2(_pIdx, 1), 0);\n vec4 _row2 = texelFetch(dbgPartData, ivec2(_pIdx, 2), 0);\n vec3 _clipMin = _row0.xyz;\n vec3 _clipMax = vec3(_row0.w, _row1.xy);\n float _minOp = _row1.z;\n float _maxOp = _row1.w;\n float _minSz = _row2.x;\n float _maxSz = _row2.y;\n float _opSc = _row2.z;\n #if GS_DBG_CLIP == 1\n if (worldPos.x < _clipMin.x || worldPos.x > _clipMax.x ||\n worldPos.y < _clipMin.y || worldPos.y > _clipMax.y ||\n worldPos.z < _clipMin.z || worldPos.z > _clipMax.z) {\n scale = vec2(0.0);\n }\n #endif\n #if GS_DBG_CULL_OPACITY == 1\n if (splat.color.w < _minOp || splat.color.w > _maxOp) {\n scale = vec2(0.0);\n }\n #endif\n #if GS_DBG_CULL_SIZE == 1\n {\n float _d0 = splat.covA.x; float _d1 = splat.covA.y; float _d2 = splat.covA.z;\n float _d3 = splat.covA.w; float _d4 = splat.covB.x; float _d5 = splat.covB.y;\n float _det = _d0*(_d3*_d5 - _d4*_d4) - _d1*(_d1*_d5 - _d4*_d2) + _d2*(_d1*_d4 - _d3*_d2);\n float _sz = pow(abs(_det), 1.0/6.0);\n if (_sz < _minSz || _sz > _maxSz) {\n scale = vec2(0.0);\n }\n }\n #endif\n #if GS_DBG_OPACITY_SCALE == 1\n vColor.w *= _opSc;\n #endif\n }\n#endif\n`,\n };\n } else if (shaderType === \"fragment\") {\n return {\n CUSTOM_FRAGMENT_DEFINITIONS: `\n#if defined(GS_DBG_ENABLED) && IS_COMPOUND\nuniform sampler2D dbgPartData;\nvarying float vPartIndex;\n#endif\n`,\n CUSTOM_FRAGMENT_BEFORE_FRAGCOLOR: `\n#if defined(GS_DBG_ENABLED) && IS_COMPOUND\n if (texelFetch(dbgPartData, ivec2(int(vPartIndex + 0.5), 2), 0).w > 0.5) { finalColor.a = vColor.a; }\n#elif defined(GS_DBG_ENABLED) && GS_DBG_OPACITY_SATURATE == 1\n finalColor.a = vColor.a;\n#endif\n`,\n };\n }\n return null;\n }\n\n private _getCustomCodeWGSL(shaderType: string): Nullable<{ [pointName: string]: string }> {\n if (shaderType === \"vertex\") {\n return {\n CUSTOM_VERTEX_DEFINITIONS: `\n#if defined(GS_DBG_ENABLED) && GS_DBG_CLIP == 1 && !defined(IS_COMPOUND)\nuniform dbgClipMin: vec3f;\nuniform dbgClipMax: vec3f;\n#endif\n#if defined(GS_DBG_ENABLED) && GS_DBG_CULL_OPACITY == 1 && !defined(IS_COMPOUND)\nuniform dbgMinOpacity: f32;\nuniform dbgMaxOpacity: f32;\n#endif\n#if defined(GS_DBG_ENABLED) && GS_DBG_CULL_SIZE == 1 && !defined(IS_COMPOUND)\nuniform dbgMinSize: f32;\nuniform dbgMaxSize: f32;\n#endif\n#if defined(GS_DBG_ENABLED) && GS_DBG_OPACITY_SCALE == 1 && !defined(IS_COMPOUND)\nuniform dbgOpacityScale: f32;\n#endif\n#if defined(GS_DBG_ENABLED) && IS_COMPOUND\nvar dbgPartData: texture_2d<f32>;\nvarying vPartIndex: f32;\n#endif\n`,\n CUSTOM_VERTEX_UPDATE: `\n#if defined(GS_DBG_ENABLED) && GS_DBG_CLIP == 1 && !defined(IS_COMPOUND)\n if (worldPos.x < uniforms.dbgClipMin.x || worldPos.x > uniforms.dbgClipMax.x ||\n worldPos.y < uniforms.dbgClipMin.y || worldPos.y > uniforms.dbgClipMax.y ||\n worldPos.z < uniforms.dbgClipMin.z || worldPos.z > uniforms.dbgClipMax.z) {\n scale = vec2f(0.0);\n }\n#endif\n#if defined(GS_DBG_ENABLED) && GS_DBG_CULL_OPACITY == 1 && !defined(IS_COMPOUND)\n if (splat.color.w < uniforms.dbgMinOpacity || splat.color.w > uniforms.dbgMaxOpacity) {\n scale = vec2f(0.0);\n }\n#endif\n#if defined(GS_DBG_ENABLED) && GS_DBG_CULL_SIZE == 1 && !defined(IS_COMPOUND)\n {\n let _d0 = splat.covA.x; let _d1 = splat.covA.y; let _d2 = splat.covA.z;\n let _d3 = splat.covA.w; let _d4 = splat.covB.x; let _d5 = splat.covB.y;\n let _det = _d0*(_d3*_d5 - _d4*_d4) - _d1*(_d1*_d5 - _d4*_d2) + _d2*(_d1*_d4 - _d3*_d2);\n let _sz = pow(abs(_det), 1.0/6.0);\n if (_sz < uniforms.dbgMinSize || _sz > uniforms.dbgMaxSize) {\n scale = vec2f(0.0);\n }\n }\n#endif\n#if defined(GS_DBG_ENABLED) && GS_DBG_OPACITY_SCALE == 1 && !defined(IS_COMPOUND)\n vertexOutputs.vColor.w *= uniforms.dbgOpacityScale;\n#endif\n#if defined(GS_DBG_ENABLED) && IS_COMPOUND\n {\n let _pIdx = i32(splat.partIndex);\n vertexOutputs.vPartIndex = f32(splat.partIndex);\n let _row0 = textureLoad(dbgPartData, vec2i(_pIdx, 0), 0);\n let _row1 = textureLoad(dbgPartData, vec2i(_pIdx, 1), 0);\n let _row2 = textureLoad(dbgPartData, vec2i(_pIdx, 2), 0);\n let _clipMin = _row0.xyz;\n let _clipMax = vec3f(_row0.w, _row1.xy);\n let _minOp = _row1.z;\n let _maxOp = _row1.w;\n let _minSz = _row2.x;\n let _maxSz = _row2.y;\n let _opSc = _row2.z;\n #if GS_DBG_CLIP == 1\n if (worldPos.x < _clipMin.x || worldPos.x > _clipMax.x ||\n worldPos.y < _clipMin.y || worldPos.y > _clipMax.y ||\n worldPos.z < _clipMin.z || worldPos.z > _clipMax.z) {\n scale = vec2f(0.0);\n }\n #endif\n #if GS_DBG_CULL_OPACITY == 1\n if (splat.color.w < _minOp || splat.color.w > _maxOp) {\n scale = vec2f(0.0);\n }\n #endif\n #if GS_DBG_CULL_SIZE == 1\n {\n let _d0 = splat.covA.x; let _d1 = splat.covA.y; let _d2 = splat.covA.z;\n let _d3 = splat.covA.w; let _d4 = splat.covB.x; let _d5 = splat.covB.y;\n let _det = _d0*(_d3*_d5 - _d4*_d4) - _d1*(_d1*_d5 - _d4*_d2) + _d2*(_d1*_d4 - _d3*_d2);\n let _sz = pow(abs(_det), 1.0/6.0);\n if (_sz < _minSz || _sz > _maxSz) {\n scale = vec2f(0.0);\n }\n }\n #endif\n #if GS_DBG_OPACITY_SCALE == 1\n vertexOutputs.vColor.w *= _opSc;\n #endif\n }\n#endif\n`,\n };\n } else if (shaderType === \"fragment\") {\n return {\n CUSTOM_FRAGMENT_DEFINITIONS: `\n#if defined(GS_DBG_ENABLED) && IS_COMPOUND\nvar dbgPartData: texture_2d<f32>;\nvarying vPartIndex: f32;\n#endif\n`,\n CUSTOM_FRAGMENT_BEFORE_FRAGCOLOR: `\n#if defined(GS_DBG_ENABLED) && IS_COMPOUND\n if (textureLoad(dbgPartData, vec2i(i32(fragmentInputs.vPartIndex + 0.5), 2), 0).w > 0.5) {\n let _gsdbgA: f32 = -dot(fragmentInputs.vPosition, fragmentInputs.vPosition);\n if (_gsdbgA > -4.0) { finalColor.a = fragmentInputs.vColor.a; }\n }\n#elif defined(GS_DBG_ENABLED) && GS_DBG_OPACITY_SATURATE == 1\n {\n let _gsdbgA: f32 = -dot(fragmentInputs.vPosition, fragmentInputs.vPosition);\n if (_gsdbgA > -4.0) {\n finalColor.a = fragmentInputs.vColor.a;\n }\n }\n#endif\n`,\n };\n }\n return null;\n }\n\n /**\n * Declares the non-compound scalar debug uniform names as external so the Effect can\n * resolve their locations. WGSL uniforms are declared inline in getCustomCode() injections.\n * @returns uniform descriptor with externalUniforms list\n */\n public override getUniforms(): {\n ubo?: Array<{ name: string; size?: number; type?: string; arraySize?: number }>;\n vertex?: string;\n fragment?: string;\n externalUniforms?: string[];\n } {\n return {\n externalUniforms: [\"dbgClipMin\", \"dbgClipMax\", \"dbgMinOpacity\", \"dbgMaxOpacity\", \"dbgMinSize\", \"dbgMaxSize\", \"dbgOpacityScale\"],\n };\n }\n\n private _buildTextureData(partCount: number): Float32Array {\n const maxPartCount = this._maxPartCount;\n const data = new Float32Array(maxPartCount * 5 * 4);\n for (let i = 0; i < maxPartCount; i++) {\n const r0 = i * 4;\n const r1 = (maxPartCount + i) * 4;\n const r2 = (maxPartCount * 2 + i) * 4;\n const r3 = (maxPartCount * 3 + i) * 4;\n const r4 = (maxPartCount * 4 + i) * 4;\n\n // Row 0: clipMin.xyz, clipMax.x — Row 1: clipMax.yz, minOpacity, maxOpacity\n const box = i < partCount ? (this._partClippingBoxes[i] ?? this._clippingBox) : this._clippingBox;\n if (box) {\n data[r0] = box.min.x;\n data[r0 + 1] = box.min.y;\n data[r0 + 2] = box.min.z;\n data[r0 + 3] = box.max.x;\n data[r1] = box.max.y;\n data[r1 + 1] = box.max.z;\n } else {\n data[r0] = -1e9;\n data[r0 + 1] = -1e9;\n data[r0 + 2] = -1e9;\n data[r0 + 3] = 1e9;\n data[r1] = 1e9;\n data[r1 + 1] = 1e9;\n }\n const opCull = i < partCount ? (this._partOpacityCullings[i] ?? this._opacityCulling) : this._opacityCulling;\n data[r1 + 2] = opCull ? opCull.min : 0.0;\n data[r1 + 3] = opCull ? opCull.max : 1.0;\n\n // Row 2: minSize, maxSize, opacityScale, opacitySaturate\n const szCull = i < partCount ? (this._partSizeCullings[i] ?? this._sizeCulling) : this._sizeCulling;\n data[r2] = szCull ? szCull.min : 0.0;\n data[r2 + 1] = szCull ? szCull.max : 1e9;\n data[r2 + 2] = i < partCount ? (this._partOpacityScales[i] ?? this._opacityScale) : this._opacityScale;\n const sat = i < partCount ? (this._partOpacitySaturates[i] ?? this._opacitySaturate) : this._opacitySaturate;\n data[r2 + 3] = sat ? 1.0 : 0.0;\n\n // Row 3: shDc, shOrder1, shOrder2, shOrder3\n data[r3] = (i < partCount ? (this._partShDcs[i] ?? this._shDc) : this._shDc) ? 1.0 : 0.0;\n data[r3 + 1] = (i < partCount ? (this._partShOrder1s[i] ?? this._shOrder1) : this._shOrder1) ? 1.0 : 0.0;\n data[r3 + 2] = (i < partCount ? (this._partShOrder2s[i] ?? this._shOrder2) : this._shOrder2) ? 1.0 : 0.0;\n data[r3 + 3] = (i < partCount ? (this._partShOrder3s[i] ?? this._shOrder3) : this._shOrder3) ? 1.0 : 0.0;\n\n // Row 4: shOrder4, padding\n data[r4] = (i < partCount ? (this._partShOrder4s[i] ?? this._shOrder4) : this._shOrder4) ? 1.0 : 0.0;\n }\n return data;\n }\n\n private _updateOrCreateTexture(scene: Scene): void {\n if (!this._maxPartCount) {\n this._maxPartCount = GetGaussianSplattingMaxPartCount(scene.getEngine());\n }\n const data = this._buildTextureData(this._partCount);\n if (!this._dbgPartDataTexture) {\n this._dbgPartDataTexture = RawTexture.CreateRGBATexture(\n data,\n this._maxPartCount,\n 5,\n scene,\n false,\n false,\n Constants.TEXTURE_NEAREST_SAMPLINGMODE,\n Constants.TEXTURETYPE_FLOAT\n );\n } else {\n this._dbgPartDataTexture.update(data);\n }\n this._textureDirty = false;\n }\n\n /**\n * Binds uniform values each frame. Scalar uniforms are uploaded for non-compound mode;\n * the per-part data texture is updated and bound for compound mode.\n * @param _uniformBuffer unused\n * @param _scene the current scene\n * @param _engine unused\n * @param subMesh the submesh being rendered\n */\n public override bindForSubMesh(_uniformBuffer: UniformBuffer, _scene: Scene, _engine: AbstractEngine, subMesh: SubMesh): void {\n const effect = subMesh.effect;\n if (!effect) {\n return;\n }\n\n if (this._partCount > 0 && this._isAnyFeatureActive()) {\n // Compound mode: pack per-part data into a texture (only when the debug path is active)\n if (this._textureDirty || !this._dbgPartDataTexture) {\n this._updateOrCreateTexture(_scene);\n }\n if (this._dbgPartDataTexture) {\n effect.setTexture(\"dbgPartData\", this._dbgPartDataTexture);\n }\n } else if (this._partCount === 0) {\n // Non-compound: upload scalar uniforms\n if (this._clippingBox) {\n effect.setVector3(\"dbgClipMin\", this._clippingBox.min);\n effect.setVector3(\"dbgClipMax\", this._clippingBox.max);\n }\n if (this._opacityCulling) {\n effect.setFloat(\"dbgMinOpacity\", this._opacityCulling.min);\n effect.setFloat(\"dbgMaxOpacity\", this._opacityCulling.max);\n }\n if (this._sizeCulling) {\n effect.setFloat(\"dbgMinSize\", this._sizeCulling.min);\n effect.setFloat(\"dbgMaxSize\", this._sizeCulling.max);\n }\n if (this._opacityScale !== 1.0) {\n effect.setFloat(\"dbgOpacityScale\", this._opacityScale);\n }\n }\n }\n\n /**\n * Disposes the per-part data texture.\n * @param _forceDisposeTextures unused; the LUT texture is always disposed as it is owned by this plugin\n */\n public override dispose(_forceDisposeTextures?: boolean): void {\n this._dbgPartDataTexture?.dispose();\n this._dbgPartDataTexture = null;\n }\n}\n\nlet _Registered = false;\n/**\n * Register side effects for GaussianSplattingDebugMaterialPlugin.\n * Safe to call multiple times; only the first call has an effect.\n */\nexport function RegisterGaussianSplattingDebugMaterialPlugin(): void {\n if (_Registered) {\n return;\n }\n _Registered = true;\n\n RegisterClass(\"BABYLON.GaussianSplattingDebugMaterialPlugin\", GaussianSplattingDebugMaterialPlugin);\n}\n"]}
1
+ {"version":3,"file":"gaussianSplattingDebugMaterialPlugin.pure.js","sourceRoot":"","sources":["../../../../../dev/core/src/Materials/GaussianSplatting/gaussianSplattingDebugMaterialPlugin.pure.ts"],"names":[],"mappings":"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","sourcesContent":["/** This file must only contain pure code and pure imports */\n\nimport { type Nullable } from \"../../types\";\nimport { type Scene } from \"../../scene\";\nimport { type AbstractEngine } from \"../../Engines/abstractEngine\";\nimport { type SubMesh } from \"../../Meshes/subMesh\";\nimport { type UniformBuffer } from \"../uniformBuffer\";\nimport { MaterialDefines } from \"../materialDefines\";\nimport { MaterialPluginBase } from \"../materialPluginBase.pure\";\nimport { ShaderLanguage } from \"../shaderLanguage\";\nimport { RegisterClass } from \"../../Misc/typeStore\";\nimport { type Vector3 } from \"../../Maths/math.vector\";\nimport { Logger } from \"../../Misc/logger\";\nimport { type GaussianSplattingMaterial, GetGaussianSplattingMaxPartCount, GetPartIndexVaryingDeclaration } from \"./gaussianSplattingMaterial.pure\";\nimport { RawTexture } from \"../Textures/rawTexture\";\nimport { Constants } from \"../../Engines/constants\";\n\n/** @internal */\nclass GaussianSplattingDebugDefines extends MaterialDefines {\n /** Defines whether any debug feature is active */\n GS_DBG_ENABLED: boolean = false;\n /** Defines whether world-space clipping box is enabled (0: off, 1: on) */\n GS_DBG_CLIP: number = 0;\n /** Defines whether opacity culling is enabled (0: off, 1: on) */\n GS_DBG_CULL_OPACITY: number = 0;\n /** Defines whether size culling is enabled (0: off, 1: on) */\n GS_DBG_CULL_SIZE: number = 0;\n /** Defines whether per-splat opacity scaling is enabled (0: off, 1: on) */\n GS_DBG_OPACITY_SCALE: number = 0;\n /** Defines whether opacity saturation (flat disk) is enabled (0: off, 1: on) */\n GS_DBG_OPACITY_SATURATE: number = 0;\n /** Defines whether the DC (base) SH color is included (0: off, 1: on) */\n GS_DBG_SH_DC: number = 1;\n /** Defines whether SH band 1 contribution is included (0: off, 1: on) */\n GS_DBG_SH_ORDER1: number = 1;\n /** Defines whether SH band 2 contribution is included (0: off, 1: on) */\n GS_DBG_SH_ORDER2: number = 1;\n /** Defines whether SH band 3 contribution is included (0: off, 1: on) */\n GS_DBG_SH_ORDER3: number = 1;\n /** Defines whether SH band 4 contribution is included (0: off, 1: on) */\n GS_DBG_SH_ORDER4: number = 1;\n}\n\n// Clip box min/max (6) + opacity culling min/max (2) + size culling min/max (2) per snapshot slot.\nconst _MutableValuesPerSlot = 10;\n\n/**\n * Per-part debug options for compound Gaussian splat meshes.\n * Each field is optional; unset fields fall back to the global setting on the plugin,\n * and if that is also unset, a neutral value is used (no culling, full SH, etc.).\n */\nexport interface IGaussianSplattingDebugOptions {\n /** World-space axis-aligned clipping box, or null to disable. */\n clippingBox: Nullable<{ min: Vector3; max: Vector3 }>;\n /** Opacity culling range [0..1], or null to disable. */\n opacityCulling: Nullable<{ min: number; max: number }>;\n /** Size culling range, or null to disable. */\n sizeCulling: Nullable<{ min: number; max: number }>;\n /** Scalar opacity multiplier. 1.0 = no change. */\n opacityScale: number;\n /** When true, replaces Gaussian falloff with flat disk opacity. */\n opacitySaturate: boolean;\n /** Include the DC (base) SH color. */\n shDc: boolean;\n /** Include SH band 1 contribution. */\n shOrder1: boolean;\n /** Include SH band 2 contribution. */\n shOrder2: boolean;\n /** Include SH band 3 contribution. */\n shOrder3: boolean;\n /** Include SH band 4 contribution. */\n shOrder4: boolean;\n}\n\n/**\n * Debug plugin for GaussianSplattingMaterial.\n * Provides runtime controls for clipping, opacity/size culling, opacity scaling,\n * opacity saturation, and per-SH-order toggling. All features are gated behind\n * the GS_DBG_ENABLED shader define — when every option is at its default value\n * the define is absent and the shader compiles to identical code as without the plugin.\n *\n * In compound mode (partCount \\> 0), per-part overrides can be set via setPartOptions().\n * Global settings act as defaults; per-part settings override them for that part index.\n */\nexport class GaussianSplattingDebugMaterialPlugin extends MaterialPluginBase {\n private _clippingBox: Nullable<{ min: Vector3; max: Vector3 }> = null;\n private _opacityCulling: Nullable<{ min: number; max: number }> = null;\n private _sizeCulling: Nullable<{ min: number; max: number }> = null;\n private _opacityScale: number = 1.0;\n private _opacitySaturate: boolean = false;\n private _shDc: boolean = true;\n private _shOrder1: boolean = true;\n private _shOrder2: boolean = true;\n private _shOrder3: boolean = true;\n private _shOrder4: boolean = true;\n\n // Per-part state (only populated when partCount > 0)\n private _partCount: number = 0;\n private _partClippingBoxes: Array<Nullable<{ min: Vector3; max: Vector3 }>> = [];\n private _partOpacityCullings: Array<Nullable<{ min: number; max: number }>> = [];\n private _partSizeCullings: Array<Nullable<{ min: number; max: number }>> = [];\n private _partOpacityScales: Array<Nullable<number>> = [];\n private _partOpacitySaturates: Array<Nullable<boolean>> = [];\n private _partShDcs: Array<Nullable<boolean>> = [];\n private _partShOrder1s: Array<Nullable<boolean>> = [];\n private _partShOrder2s: Array<Nullable<boolean>> = [];\n private _partShOrder3s: Array<Nullable<boolean>> = [];\n private _partShOrder4s: Array<Nullable<boolean>> = [];\n // Single registry of every _part* array — shiftPartOptions iterates this instead of\n // listing each array by name, so adding a new per-part field only requires adding it here.\n private readonly _partArrays: Array<Array<unknown>>;\n\n // Per-part debug LUT: MAX_PART_COUNT × 5 RGBA float texture (dbgPartData)\n private _dbgPartDataTexture: Nullable<RawTexture> = null;\n private _textureDirty: boolean = false;\n private _maxPartCount: number = 0;\n private _resolvedPartData: Nullable<{ partCount: number; data: Float32Array; maxPartCount: number }> = null;\n private _mutableValuesSnapshot: Nullable<Float64Array> = null;\n\n /**\n * Creates a new GaussianSplattingDebugMaterialPlugin.\n * @param material The GaussianSplattingMaterial to attach the plugin to.\n */\n constructor(material: GaussianSplattingMaterial) {\n super(material, \"GaussianSplattingDebug\", 200, new GaussianSplattingDebugDefines(), true, true);\n this._partArrays = [\n this._partClippingBoxes,\n this._partOpacityCullings,\n this._partSizeCullings,\n this._partOpacityScales,\n this._partOpacitySaturates,\n this._partShDcs,\n this._partShOrder1s,\n this._partShOrder2s,\n this._partShOrder3s,\n this._partShOrder4s,\n ];\n }\n\n /**\n * True when any global or per-part debug feature is active.\n * @returns true when debug work is needed\n */\n public get isDebugActive(): boolean {\n return this._isAnyFeatureActive();\n }\n\n /**\n * Returns resolved per-part debug data in the classic `dbgPartData` layout (5 RGBA rows per part).\n * @param partCount current mesh part count\n * @param engine engine used to size the LUT if needed\n * @returns the resolved LUT floats and its per-row part-count stride\n */\n public getResolvedPartData(partCount: number, engine: AbstractEngine): { data: Float32Array; maxPartCount: number } {\n if (!this._maxPartCount) {\n this._maxPartCount = GetGaussianSplattingMaxPartCount(engine);\n }\n // Clip boxes and culling ranges are handed out by reference, so callers can change their values\n // without going through a setter. Comparing the values catches that, like the classic non-compound\n // path which reads them live at bind time.\n const mutated = this._refreshMutableValuesSnapshot(partCount);\n if (!this._resolvedPartData || this._resolvedPartData.partCount !== partCount || mutated) {\n this._resolvedPartData = { partCount, data: this._buildTextureData(partCount), maxPartCount: this._maxPartCount };\n }\n return this._resolvedPartData;\n }\n\n /**\n * Stores the current values of every externally mutable debug setting and reports whether any changed.\n * @param partCount current mesh part count\n * @returns true when at least one value differs from the previous call\n */\n private _refreshMutableValuesSnapshot(partCount: number): boolean {\n // One slot per part plus a trailing slot for the parts that resolve to the global settings.\n const slotCount = partCount + 1;\n let snapshot = this._mutableValuesSnapshot;\n let changed = false;\n if (!snapshot || snapshot.length !== slotCount * _MutableValuesPerSlot) {\n snapshot = new Float64Array(slotCount * _MutableValuesPerSlot);\n this._mutableValuesSnapshot = snapshot;\n changed = true;\n }\n for (let i = 0; i < slotCount; i++) {\n const offset = i * _MutableValuesPerSlot;\n const box = i < partCount ? (this._partClippingBoxes[i] ?? this._clippingBox) : this._clippingBox;\n if (this._diffMutableValue(snapshot, offset, box ? box.min.x : 0)) {\n changed = true;\n }\n if (this._diffMutableValue(snapshot, offset + 1, box ? box.min.y : 0)) {\n changed = true;\n }\n if (this._diffMutableValue(snapshot, offset + 2, box ? box.min.z : 0)) {\n changed = true;\n }\n if (this._diffMutableValue(snapshot, offset + 3, box ? box.max.x : 0)) {\n changed = true;\n }\n if (this._diffMutableValue(snapshot, offset + 4, box ? box.max.y : 0)) {\n changed = true;\n }\n if (this._diffMutableValue(snapshot, offset + 5, box ? box.max.z : 0)) {\n changed = true;\n }\n const opacityCulling = i < partCount ? (this._partOpacityCullings[i] ?? this._opacityCulling) : this._opacityCulling;\n if (this._diffMutableValue(snapshot, offset + 6, opacityCulling ? opacityCulling.min : 0)) {\n changed = true;\n }\n if (this._diffMutableValue(snapshot, offset + 7, opacityCulling ? opacityCulling.max : 0)) {\n changed = true;\n }\n const sizeCulling = i < partCount ? (this._partSizeCullings[i] ?? this._sizeCulling) : this._sizeCulling;\n if (this._diffMutableValue(snapshot, offset + 8, sizeCulling ? sizeCulling.min : 0)) {\n changed = true;\n }\n if (this._diffMutableValue(snapshot, offset + 9, sizeCulling ? sizeCulling.max : 0)) {\n changed = true;\n }\n }\n return changed;\n }\n\n /**\n * Writes a value into the snapshot and reports whether it replaced a different one.\n * @param snapshot the snapshot buffer\n * @param index the slot index to write\n * @param value the current value\n * @returns true when the stored value changed\n */\n private _diffMutableValue(snapshot: Float64Array, index: number, value: number): boolean {\n if (snapshot[index] === value) {\n return false;\n }\n snapshot[index] = value;\n return true;\n }\n\n private _isAnyFeatureActive(): boolean {\n return (\n this._clippingBox !== null ||\n this._opacityCulling !== null ||\n this._sizeCulling !== null ||\n this._opacityScale !== 1.0 ||\n this._opacitySaturate ||\n !this._shDc ||\n !this._shOrder1 ||\n !this._shOrder2 ||\n !this._shOrder3 ||\n !this._shOrder4 ||\n this._partClippingBoxes.some((b) => b !== null) ||\n this._partOpacityCullings.some((b) => b !== null) ||\n this._partSizeCullings.some((b) => b !== null) ||\n this._partOpacityScales.some((s) => s !== null) ||\n this._partOpacitySaturates.some((s) => s !== null) ||\n this._partShDcs.some((s) => s !== null) ||\n this._partShOrder1s.some((s) => s !== null) ||\n this._partShOrder2s.some((s) => s !== null) ||\n this._partShOrder3s.some((s) => s !== null) ||\n this._partShOrder4s.some((s) => s !== null)\n );\n }\n\n private _markDirty(): void {\n this.markAllDefinesAsDirty();\n this._textureDirty = true;\n this._resolvedPartData = null;\n }\n\n // ----- Public API -----\n\n /**\n * Number of parts in compound mode. Set automatically by GaussianSplattingDebugger.addMesh().\n * When 0 (non-compound), setPartOptions() logs an error.\n * @returns the part count\n */\n public get partCount(): number {\n return this._partCount;\n }\n public set partCount(count: number) {\n if (this._partCount !== count) {\n this._partCount = count;\n this._markDirty();\n }\n }\n\n /**\n * Sets per-part debug overrides for the given part index.\n * Only valid on compound meshes (partCount \\> 0); logs an error otherwise.\n * @param partIndex The zero-based part index.\n * @param options Partial set of debug options to override for this part.\n */\n public setPartOptions(partIndex: number, options: Partial<IGaussianSplattingDebugOptions>): void {\n if (this._partCount === 0) {\n Logger.Error(\"GaussianSplattingDebugMaterialPlugin.setPartOptions: called on a non-compound mesh. partCount is 0.\");\n return;\n }\n if (options.clippingBox !== undefined) {\n this._partClippingBoxes[partIndex] = options.clippingBox;\n }\n if (options.opacityCulling !== undefined) {\n this._partOpacityCullings[partIndex] = options.opacityCulling;\n }\n if (options.sizeCulling !== undefined) {\n this._partSizeCullings[partIndex] = options.sizeCulling;\n }\n if (options.opacityScale !== undefined) {\n this._partOpacityScales[partIndex] = options.opacityScale;\n }\n if (options.opacitySaturate !== undefined) {\n this._partOpacitySaturates[partIndex] = options.opacitySaturate;\n }\n if (options.shDc !== undefined) {\n this._partShDcs[partIndex] = options.shDc;\n }\n if (options.shOrder1 !== undefined) {\n this._partShOrder1s[partIndex] = options.shOrder1;\n }\n if (options.shOrder2 !== undefined) {\n this._partShOrder2s[partIndex] = options.shOrder2;\n }\n if (options.shOrder3 !== undefined) {\n this._partShOrder3s[partIndex] = options.shOrder3;\n }\n if (options.shOrder4 !== undefined) {\n this._partShOrder4s[partIndex] = options.shOrder4;\n }\n this._markDirty();\n }\n\n /**\n * Clears all per-part debug overrides for the given part index,\n * falling back to global settings.\n * @param partIndex The zero-based part index.\n */\n public clearPartOptions(partIndex: number): void {\n this._partClippingBoxes[partIndex] = null;\n this._partOpacityCullings[partIndex] = null;\n this._partSizeCullings[partIndex] = null;\n this._partOpacityScales[partIndex] = null;\n this._partOpacitySaturates[partIndex] = null;\n this._partShDcs[partIndex] = null;\n this._partShOrder1s[partIndex] = null;\n this._partShOrder2s[partIndex] = null;\n this._partShOrder3s[partIndex] = null;\n this._partShOrder4s[partIndex] = null;\n this._markDirty();\n }\n\n /**\n * Removes the per-part override slot at `removedIndex` and shifts all higher-indexed\n * slots down by one, keeping the arrays aligned with the compound mesh's new part layout.\n * @param removedIndex The original (pre-removal) part index.\n * @internal\n */\n public shiftPartOptions(removedIndex: number): void {\n for (const arr of this._partArrays) {\n if (removedIndex < arr.length) {\n arr.splice(removedIndex, 1);\n }\n }\n this._markDirty();\n }\n\n /**\n * World-space axis-aligned clipping box. Splats outside are not rendered.\n * Set to null to disable clipping.\n * Example: `{ min: new Vector3(-2,-2,-2), max: new Vector3(2,2,2) }`\n */\n public get clippingBox(): Nullable<{ min: Vector3; max: Vector3 }> {\n return this._clippingBox;\n }\n public set clippingBox(value: Nullable<{ min: Vector3; max: Vector3 }>) {\n this._clippingBox = value;\n this._markDirty();\n }\n\n /**\n * Opacity culling range [0..1]. Splats whose stored opacity falls outside this\n * range are not rendered. Set to null to disable.\n */\n public get opacityCulling(): Nullable<{ min: number; max: number }> {\n return this._opacityCulling;\n }\n public set opacityCulling(value: Nullable<{ min: number; max: number }>) {\n this._opacityCulling = value;\n this._markDirty();\n }\n\n /**\n * Size culling range. Size is pow(|det(Σ)|, 1/6) of the 3D covariance matrix,\n * equal to the geometric mean of the principal radii. Use GaussianSplattingMeshBase.splatSizeRange\n * to find the asset's range. Set to null to disable.\n */\n public get sizeCulling(): Nullable<{ min: number; max: number }> {\n return this._sizeCulling;\n }\n public set sizeCulling(value: Nullable<{ min: number; max: number }>) {\n this._sizeCulling = value;\n this._markDirty();\n }\n\n /**\n * Scalar multiplier applied to every splat's opacity after all other modifiers.\n * 1.0 (default) = no change.\n */\n public get opacityScale(): number {\n return this._opacityScale;\n }\n public set opacityScale(value: number) {\n this._opacityScale = value;\n this._markDirty();\n }\n\n /**\n * When true, replaces the Gaussian spatial falloff with a flat uniform opacity,\n * making each splat appear as a solid disk with its raw alpha value.\n */\n public get opacitySaturate(): boolean {\n return this._opacitySaturate;\n }\n public set opacitySaturate(value: boolean) {\n this._opacitySaturate = value;\n this._markDirty();\n }\n\n /** Include the DC (base) color from colorsTexture. Default: true. */\n public get shDc(): boolean {\n return this._shDc;\n }\n public set shDc(value: boolean) {\n this._shDc = value;\n this._markDirty();\n }\n\n /** Include SH band 1 contribution. Default: true. */\n public get shOrder1(): boolean {\n return this._shOrder1;\n }\n public set shOrder1(value: boolean) {\n this._shOrder1 = value;\n this._markDirty();\n }\n\n /** Include SH band 2 contribution. Default: true. */\n public get shOrder2(): boolean {\n return this._shOrder2;\n }\n public set shOrder2(value: boolean) {\n this._shOrder2 = value;\n this._markDirty();\n }\n\n /** Include SH band 3 contribution. Default: true. */\n public get shOrder3(): boolean {\n return this._shOrder3;\n }\n public set shOrder3(value: boolean) {\n this._shOrder3 = value;\n this._markDirty();\n }\n\n /** Include SH band 4 contribution. Default: true. */\n public get shOrder4(): boolean {\n return this._shOrder4;\n }\n public set shOrder4(value: boolean) {\n this._shOrder4 = value;\n this._markDirty();\n }\n\n // ----- Plugin overrides -----\n\n /**\n * Adds the per-part debug data texture name to the sampler list so the effect can bind it.\n * @param samplers the sampler list to populate\n */\n public override getSamplers(samplers: string[]): void {\n samplers.push(\"dbgPartData\");\n }\n\n /** @returns the class name of this plugin */\n public override getClassName(): string {\n return \"GaussianSplattingDebugMaterialPlugin\";\n }\n\n /**\n * @param shaderLanguage the shader language to check\n * @returns true for GLSL and WGSL\n */\n public override isCompatible(shaderLanguage: ShaderLanguage): boolean {\n switch (shaderLanguage) {\n case ShaderLanguage.GLSL:\n case ShaderLanguage.WGSL:\n return true;\n default:\n return false;\n }\n }\n\n /**\n * Always ready — no async resources.\n * @param _defines unused\n * @param _scene unused\n * @param _engine unused\n * @param _subMesh unused\n * @returns true\n */\n public override isReadyForSubMesh(_defines: MaterialDefines, _scene: Scene, _engine: AbstractEngine, _subMesh: SubMesh): boolean {\n return true;\n }\n\n /**\n * Sets shader defines from current property state. GS_DBG_ENABLED is set to true\n * only when at least one feature is non-default, ensuring zero overhead otherwise.\n * Sub-flags also check per-part arrays so compound-only overrides activate the correct\n * code paths even when the global setting is at its default.\n * @param defines the defines object\n */\n public override prepareDefines(defines: GaussianSplattingDebugDefines): void {\n defines.GS_DBG_ENABLED = this._isAnyFeatureActive();\n defines.GS_DBG_CLIP = this._clippingBox !== null || this._partClippingBoxes.some((b) => b !== null) ? 1 : 0;\n defines.GS_DBG_CULL_OPACITY = this._opacityCulling !== null || this._partOpacityCullings.some((b) => b !== null) ? 1 : 0;\n defines.GS_DBG_CULL_SIZE = this._sizeCulling !== null || this._partSizeCullings.some((b) => b !== null) ? 1 : 0;\n defines.GS_DBG_OPACITY_SCALE = this._opacityScale !== 1.0 || this._partOpacityScales.some((s) => s !== null) ? 1 : 0;\n defines.GS_DBG_OPACITY_SATURATE = this._opacitySaturate || this._partOpacitySaturates.some((s) => s !== null) ? 1 : 0;\n defines.GS_DBG_SH_DC = !this._shDc || this._partShDcs.some((s) => s !== null) ? 0 : 1;\n defines.GS_DBG_SH_ORDER1 = !this._shOrder1 || this._partShOrder1s.some((s) => s !== null) ? 0 : 1;\n defines.GS_DBG_SH_ORDER2 = !this._shOrder2 || this._partShOrder2s.some((s) => s !== null) ? 0 : 1;\n defines.GS_DBG_SH_ORDER3 = !this._shOrder3 || this._partShOrder3s.some((s) => s !== null) ? 0 : 1;\n defines.GS_DBG_SH_ORDER4 = !this._shOrder4 || this._partShOrder4s.some((s) => s !== null) ? 0 : 1;\n }\n\n /**\n * Returns shader code injections for the debug features.\n * @param shaderType \"vertex\" or \"fragment\"\n * @param shaderLanguage GLSL or WGSL\n * @returns map of injection-point name to injected code, or null\n */\n public override getCustomCode(shaderType: string, shaderLanguage = ShaderLanguage.GLSL): Nullable<{ [pointName: string]: string }> {\n if (shaderLanguage === ShaderLanguage.WGSL) {\n return this._getCustomCodeWGSL(shaderType);\n }\n return this._getCustomCodeGLSL(shaderType);\n }\n\n private _getCustomCodeGLSL(shaderType: string): Nullable<{ [pointName: string]: string }> {\n if (shaderType === \"vertex\") {\n return {\n CUSTOM_VERTEX_DEFINITIONS: `\n#if defined(GS_DBG_ENABLED) && GS_DBG_CLIP == 1 && !defined(IS_COMPOUND)\nuniform vec3 dbgClipMin;\nuniform vec3 dbgClipMax;\n#endif\n#if defined(GS_DBG_ENABLED) && GS_DBG_CULL_OPACITY == 1 && !defined(IS_COMPOUND)\nuniform float dbgMinOpacity;\nuniform float dbgMaxOpacity;\n#endif\n#if defined(GS_DBG_ENABLED) && GS_DBG_CULL_SIZE == 1 && !defined(IS_COMPOUND)\nuniform float dbgMinSize;\nuniform float dbgMaxSize;\n#endif\n#if defined(GS_DBG_ENABLED) && GS_DBG_OPACITY_SCALE == 1 && !defined(IS_COMPOUND)\nuniform float dbgOpacityScale;\n#endif\n#if defined(GS_DBG_ENABLED) && IS_COMPOUND\nuniform sampler2D dbgPartData;\n${GetPartIndexVaryingDeclaration(ShaderLanguage.GLSL)}\n#endif\n`,\n CUSTOM_VERTEX_UPDATE: `\n#if defined(GS_DBG_ENABLED) && GS_DBG_CLIP == 1 && !defined(IS_COMPOUND)\n if (worldPos.x < dbgClipMin.x || worldPos.x > dbgClipMax.x ||\n worldPos.y < dbgClipMin.y || worldPos.y > dbgClipMax.y ||\n worldPos.z < dbgClipMin.z || worldPos.z > dbgClipMax.z) {\n scale = vec2(0.0);\n }\n#endif\n#if defined(GS_DBG_ENABLED) && GS_DBG_CULL_OPACITY == 1 && !defined(IS_COMPOUND)\n if (splat.color.w < dbgMinOpacity || splat.color.w > dbgMaxOpacity) {\n scale = vec2(0.0);\n }\n#endif\n#if defined(GS_DBG_ENABLED) && GS_DBG_CULL_SIZE == 1 && !defined(IS_COMPOUND)\n {\n float _d0 = splat.covA.x; float _d1 = splat.covA.y; float _d2 = splat.covA.z;\n float _d3 = splat.covA.w; float _d4 = splat.covB.x; float _d5 = splat.covB.y;\n float _det = _d0*(_d3*_d5 - _d4*_d4) - _d1*(_d1*_d5 - _d4*_d2) + _d2*(_d1*_d4 - _d3*_d2);\n float _sz = pow(abs(_det), 1.0/6.0);\n if (_sz < dbgMinSize || _sz > dbgMaxSize) {\n scale = vec2(0.0);\n }\n }\n#endif\n#if defined(GS_DBG_ENABLED) && GS_DBG_OPACITY_SCALE == 1 && !defined(IS_COMPOUND)\n vColor.w *= dbgOpacityScale;\n#endif\n#if defined(GS_DBG_ENABLED) && IS_COMPOUND\n {\n int _pIdx = int(splat.partIndex);\n vPartIndex = float(splat.partIndex);\n vec4 _row0 = texelFetch(dbgPartData, ivec2(_pIdx, 0), 0);\n vec4 _row1 = texelFetch(dbgPartData, ivec2(_pIdx, 1), 0);\n vec4 _row2 = texelFetch(dbgPartData, ivec2(_pIdx, 2), 0);\n vec3 _clipMin = _row0.xyz;\n vec3 _clipMax = vec3(_row0.w, _row1.xy);\n float _minOp = _row1.z;\n float _maxOp = _row1.w;\n float _minSz = _row2.x;\n float _maxSz = _row2.y;\n float _opSc = _row2.z;\n #if GS_DBG_CLIP == 1\n if (worldPos.x < _clipMin.x || worldPos.x > _clipMax.x ||\n worldPos.y < _clipMin.y || worldPos.y > _clipMax.y ||\n worldPos.z < _clipMin.z || worldPos.z > _clipMax.z) {\n scale = vec2(0.0);\n }\n #endif\n #if GS_DBG_CULL_OPACITY == 1\n if (splat.color.w < _minOp || splat.color.w > _maxOp) {\n scale = vec2(0.0);\n }\n #endif\n #if GS_DBG_CULL_SIZE == 1\n {\n float _d0 = splat.covA.x; float _d1 = splat.covA.y; float _d2 = splat.covA.z;\n float _d3 = splat.covA.w; float _d4 = splat.covB.x; float _d5 = splat.covB.y;\n float _det = _d0*(_d3*_d5 - _d4*_d4) - _d1*(_d1*_d5 - _d4*_d2) + _d2*(_d1*_d4 - _d3*_d2);\n float _sz = pow(abs(_det), 1.0/6.0);\n if (_sz < _minSz || _sz > _maxSz) {\n scale = vec2(0.0);\n }\n }\n #endif\n #if GS_DBG_OPACITY_SCALE == 1\n vColor.w *= _opSc;\n #endif\n }\n#endif\n`,\n };\n } else if (shaderType === \"fragment\") {\n return {\n CUSTOM_FRAGMENT_DEFINITIONS: `\n#if defined(GS_DBG_ENABLED) && IS_COMPOUND\nuniform sampler2D dbgPartData;\n${GetPartIndexVaryingDeclaration(ShaderLanguage.GLSL)}\n#endif\n`,\n CUSTOM_FRAGMENT_BEFORE_FRAGCOLOR: `\n#if defined(GS_DBG_ENABLED) && IS_COMPOUND\n if (texelFetch(dbgPartData, ivec2(int(vPartIndex + 0.5), 2), 0).w > 0.5) { finalColor.a = vColor.a; }\n#elif defined(GS_DBG_ENABLED) && GS_DBG_OPACITY_SATURATE == 1\n finalColor.a = vColor.a;\n#endif\n`,\n };\n }\n return null;\n }\n\n private _getCustomCodeWGSL(shaderType: string): Nullable<{ [pointName: string]: string }> {\n if (shaderType === \"vertex\") {\n return {\n CUSTOM_VERTEX_DEFINITIONS: `\n#if defined(GS_DBG_ENABLED) && GS_DBG_CLIP == 1 && !defined(IS_COMPOUND)\nuniform dbgClipMin: vec3f;\nuniform dbgClipMax: vec3f;\n#endif\n#if defined(GS_DBG_ENABLED) && GS_DBG_CULL_OPACITY == 1 && !defined(IS_COMPOUND)\nuniform dbgMinOpacity: f32;\nuniform dbgMaxOpacity: f32;\n#endif\n#if defined(GS_DBG_ENABLED) && GS_DBG_CULL_SIZE == 1 && !defined(IS_COMPOUND)\nuniform dbgMinSize: f32;\nuniform dbgMaxSize: f32;\n#endif\n#if defined(GS_DBG_ENABLED) && GS_DBG_OPACITY_SCALE == 1 && !defined(IS_COMPOUND)\nuniform dbgOpacityScale: f32;\n#endif\n#if defined(GS_DBG_ENABLED) && IS_COMPOUND\nvar dbgPartData: texture_2d<f32>;\n${GetPartIndexVaryingDeclaration(ShaderLanguage.WGSL)}\n#endif\n`,\n CUSTOM_VERTEX_UPDATE: `\n#if defined(GS_DBG_ENABLED) && GS_DBG_CLIP == 1 && !defined(IS_COMPOUND)\n if (worldPos.x < uniforms.dbgClipMin.x || worldPos.x > uniforms.dbgClipMax.x ||\n worldPos.y < uniforms.dbgClipMin.y || worldPos.y > uniforms.dbgClipMax.y ||\n worldPos.z < uniforms.dbgClipMin.z || worldPos.z > uniforms.dbgClipMax.z) {\n scale = vec2f(0.0);\n }\n#endif\n#if defined(GS_DBG_ENABLED) && GS_DBG_CULL_OPACITY == 1 && !defined(IS_COMPOUND)\n if (splat.color.w < uniforms.dbgMinOpacity || splat.color.w > uniforms.dbgMaxOpacity) {\n scale = vec2f(0.0);\n }\n#endif\n#if defined(GS_DBG_ENABLED) && GS_DBG_CULL_SIZE == 1 && !defined(IS_COMPOUND)\n {\n let _d0 = splat.covA.x; let _d1 = splat.covA.y; let _d2 = splat.covA.z;\n let _d3 = splat.covA.w; let _d4 = splat.covB.x; let _d5 = splat.covB.y;\n let _det = _d0*(_d3*_d5 - _d4*_d4) - _d1*(_d1*_d5 - _d4*_d2) + _d2*(_d1*_d4 - _d3*_d2);\n let _sz = pow(abs(_det), 1.0/6.0);\n if (_sz < uniforms.dbgMinSize || _sz > uniforms.dbgMaxSize) {\n scale = vec2f(0.0);\n }\n }\n#endif\n#if defined(GS_DBG_ENABLED) && GS_DBG_OPACITY_SCALE == 1 && !defined(IS_COMPOUND)\n vertexOutputs.vColor.w *= uniforms.dbgOpacityScale;\n#endif\n#if defined(GS_DBG_ENABLED) && IS_COMPOUND\n {\n let _pIdx = i32(splat.partIndex);\n vertexOutputs.vPartIndex = f32(splat.partIndex);\n let _row0 = textureLoad(dbgPartData, vec2i(_pIdx, 0), 0);\n let _row1 = textureLoad(dbgPartData, vec2i(_pIdx, 1), 0);\n let _row2 = textureLoad(dbgPartData, vec2i(_pIdx, 2), 0);\n let _clipMin = _row0.xyz;\n let _clipMax = vec3f(_row0.w, _row1.xy);\n let _minOp = _row1.z;\n let _maxOp = _row1.w;\n let _minSz = _row2.x;\n let _maxSz = _row2.y;\n let _opSc = _row2.z;\n #if GS_DBG_CLIP == 1\n if (worldPos.x < _clipMin.x || worldPos.x > _clipMax.x ||\n worldPos.y < _clipMin.y || worldPos.y > _clipMax.y ||\n worldPos.z < _clipMin.z || worldPos.z > _clipMax.z) {\n scale = vec2f(0.0);\n }\n #endif\n #if GS_DBG_CULL_OPACITY == 1\n if (splat.color.w < _minOp || splat.color.w > _maxOp) {\n scale = vec2f(0.0);\n }\n #endif\n #if GS_DBG_CULL_SIZE == 1\n {\n let _d0 = splat.covA.x; let _d1 = splat.covA.y; let _d2 = splat.covA.z;\n let _d3 = splat.covA.w; let _d4 = splat.covB.x; let _d5 = splat.covB.y;\n let _det = _d0*(_d3*_d5 - _d4*_d4) - _d1*(_d1*_d5 - _d4*_d2) + _d2*(_d1*_d4 - _d3*_d2);\n let _sz = pow(abs(_det), 1.0/6.0);\n if (_sz < _minSz || _sz > _maxSz) {\n scale = vec2f(0.0);\n }\n }\n #endif\n #if GS_DBG_OPACITY_SCALE == 1\n vertexOutputs.vColor.w *= _opSc;\n #endif\n }\n#endif\n`,\n };\n } else if (shaderType === \"fragment\") {\n return {\n CUSTOM_FRAGMENT_DEFINITIONS: `\n#if defined(GS_DBG_ENABLED) && IS_COMPOUND\nvar dbgPartData: texture_2d<f32>;\n${GetPartIndexVaryingDeclaration(ShaderLanguage.WGSL)}\n#endif\n`,\n CUSTOM_FRAGMENT_BEFORE_FRAGCOLOR: `\n#if defined(GS_DBG_ENABLED) && IS_COMPOUND\n if (textureLoad(dbgPartData, vec2i(i32(fragmentInputs.vPartIndex + 0.5), 2), 0).w > 0.5) {\n let _gsdbgA: f32 = -dot(fragmentInputs.vPosition, fragmentInputs.vPosition);\n if (_gsdbgA > -4.0) { finalColor.a = fragmentInputs.vColor.a; }\n }\n#elif defined(GS_DBG_ENABLED) && GS_DBG_OPACITY_SATURATE == 1\n {\n let _gsdbgA: f32 = -dot(fragmentInputs.vPosition, fragmentInputs.vPosition);\n if (_gsdbgA > -4.0) {\n finalColor.a = fragmentInputs.vColor.a;\n }\n }\n#endif\n`,\n };\n }\n return null;\n }\n\n /**\n * Declares the non-compound scalar debug uniform names as external so the Effect can\n * resolve their locations. WGSL uniforms are declared inline in getCustomCode() injections.\n * @returns uniform descriptor with externalUniforms list\n */\n public override getUniforms(): {\n ubo?: Array<{ name: string; size?: number; type?: string; arraySize?: number }>;\n vertex?: string;\n fragment?: string;\n externalUniforms?: string[];\n } {\n return {\n externalUniforms: [\"dbgClipMin\", \"dbgClipMax\", \"dbgMinOpacity\", \"dbgMaxOpacity\", \"dbgMinSize\", \"dbgMaxSize\", \"dbgOpacityScale\"],\n };\n }\n\n private _buildTextureData(partCount: number): Float32Array {\n const maxPartCount = this._maxPartCount;\n const data = new Float32Array(maxPartCount * 5 * 4);\n for (let i = 0; i < maxPartCount; i++) {\n const r0 = i * 4;\n const r1 = (maxPartCount + i) * 4;\n const r2 = (maxPartCount * 2 + i) * 4;\n const r3 = (maxPartCount * 3 + i) * 4;\n const r4 = (maxPartCount * 4 + i) * 4;\n\n // Row 0: clipMin.xyz, clipMax.x — Row 1: clipMax.yz, minOpacity, maxOpacity\n const box = i < partCount ? (this._partClippingBoxes[i] ?? this._clippingBox) : this._clippingBox;\n if (box) {\n data[r0] = box.min.x;\n data[r0 + 1] = box.min.y;\n data[r0 + 2] = box.min.z;\n data[r0 + 3] = box.max.x;\n data[r1] = box.max.y;\n data[r1 + 1] = box.max.z;\n } else {\n data[r0] = -1e9;\n data[r0 + 1] = -1e9;\n data[r0 + 2] = -1e9;\n data[r0 + 3] = 1e9;\n data[r1] = 1e9;\n data[r1 + 1] = 1e9;\n }\n const opCull = i < partCount ? (this._partOpacityCullings[i] ?? this._opacityCulling) : this._opacityCulling;\n data[r1 + 2] = opCull ? opCull.min : 0.0;\n data[r1 + 3] = opCull ? opCull.max : 1.0;\n\n // Row 2: minSize, maxSize, opacityScale, opacitySaturate\n const szCull = i < partCount ? (this._partSizeCullings[i] ?? this._sizeCulling) : this._sizeCulling;\n data[r2] = szCull ? szCull.min : 0.0;\n data[r2 + 1] = szCull ? szCull.max : 1e9;\n data[r2 + 2] = i < partCount ? (this._partOpacityScales[i] ?? this._opacityScale) : this._opacityScale;\n const sat = i < partCount ? (this._partOpacitySaturates[i] ?? this._opacitySaturate) : this._opacitySaturate;\n data[r2 + 3] = sat ? 1.0 : 0.0;\n\n // Row 3: shDc, shOrder1, shOrder2, shOrder3\n data[r3] = (i < partCount ? (this._partShDcs[i] ?? this._shDc) : this._shDc) ? 1.0 : 0.0;\n data[r3 + 1] = (i < partCount ? (this._partShOrder1s[i] ?? this._shOrder1) : this._shOrder1) ? 1.0 : 0.0;\n data[r3 + 2] = (i < partCount ? (this._partShOrder2s[i] ?? this._shOrder2) : this._shOrder2) ? 1.0 : 0.0;\n data[r3 + 3] = (i < partCount ? (this._partShOrder3s[i] ?? this._shOrder3) : this._shOrder3) ? 1.0 : 0.0;\n\n // Row 4: shOrder4, padding\n data[r4] = (i < partCount ? (this._partShOrder4s[i] ?? this._shOrder4) : this._shOrder4) ? 1.0 : 0.0;\n }\n return data;\n }\n\n private _updateOrCreateTexture(scene: Scene): void {\n if (!this._maxPartCount) {\n this._maxPartCount = GetGaussianSplattingMaxPartCount(scene.getEngine());\n }\n const data = this._buildTextureData(this._partCount);\n if (!this._dbgPartDataTexture) {\n this._dbgPartDataTexture = RawTexture.CreateRGBATexture(\n data,\n this._maxPartCount,\n 5,\n scene,\n false,\n false,\n Constants.TEXTURE_NEAREST_SAMPLINGMODE,\n Constants.TEXTURETYPE_FLOAT\n );\n } else {\n this._dbgPartDataTexture.update(data);\n }\n this._textureDirty = false;\n }\n\n /**\n * Binds uniform values each frame. Scalar uniforms are uploaded for non-compound mode;\n * the per-part data texture is updated and bound for compound mode.\n * @param _uniformBuffer unused\n * @param _scene the current scene\n * @param _engine unused\n * @param subMesh the submesh being rendered\n */\n public override bindForSubMesh(_uniformBuffer: UniformBuffer, _scene: Scene, _engine: AbstractEngine, subMesh: SubMesh): void {\n const effect = subMesh.effect;\n if (!effect) {\n return;\n }\n\n if (this._partCount > 0 && this._isAnyFeatureActive()) {\n // Compound mode: pack per-part data into a texture (only when the debug path is active)\n if (this._textureDirty || !this._dbgPartDataTexture) {\n this._updateOrCreateTexture(_scene);\n }\n if (this._dbgPartDataTexture) {\n effect.setTexture(\"dbgPartData\", this._dbgPartDataTexture);\n }\n } else if (this._partCount === 0) {\n // Non-compound: upload scalar uniforms\n if (this._clippingBox) {\n effect.setVector3(\"dbgClipMin\", this._clippingBox.min);\n effect.setVector3(\"dbgClipMax\", this._clippingBox.max);\n }\n if (this._opacityCulling) {\n effect.setFloat(\"dbgMinOpacity\", this._opacityCulling.min);\n effect.setFloat(\"dbgMaxOpacity\", this._opacityCulling.max);\n }\n if (this._sizeCulling) {\n effect.setFloat(\"dbgMinSize\", this._sizeCulling.min);\n effect.setFloat(\"dbgMaxSize\", this._sizeCulling.max);\n }\n if (this._opacityScale !== 1.0) {\n effect.setFloat(\"dbgOpacityScale\", this._opacityScale);\n }\n }\n }\n\n /**\n * Disposes the per-part data texture.\n * @param _forceDisposeTextures unused; the LUT texture is always disposed as it is owned by this plugin\n */\n public override dispose(_forceDisposeTextures?: boolean): void {\n this._dbgPartDataTexture?.dispose();\n this._dbgPartDataTexture = null;\n }\n}\n\nlet _Registered = false;\n/**\n * Register side effects for GaussianSplattingDebugMaterialPlugin.\n * Safe to call multiple times; only the first call has an effect.\n */\nexport function RegisterGaussianSplattingDebugMaterialPlugin(): void {\n if (_Registered) {\n return;\n }\n _Registered = true;\n\n RegisterClass(\"BABYLON.GaussianSplattingDebugMaterialPlugin\", GaussianSplattingDebugMaterialPlugin);\n}\n"]}
@@ -1,6 +1,6 @@
1
1
  /** This file must only contain pure code and pure imports */
2
2
  import { MaterialPluginBase } from "../materialPluginBase.pure.js";
3
- import { GetGaussianSplattingMaxPartCount } from "./gaussianSplattingMaterial.pure.js";
3
+ import { GetGaussianSplattingMaxPartCount, GetPartIndexVaryingDeclaration } from "./gaussianSplattingMaterial.pure.js";
4
4
  import { RegisterClass } from "../../Misc/typeStore.js";
5
5
  /**
6
6
  * Plugin for GaussianSplattingMaterial that replaces per-splat color output with
@@ -17,7 +17,7 @@ export class GaussianSplattingGpuPickingMaterialPlugin extends MaterialPluginBas
17
17
  * @param maxPartCount The maximum number of parts supported for compound meshes.
18
18
  */
19
19
  constructor(material, maxPartCount) {
20
- super(material, "GaussianSplatGpuPicking", 200, {
20
+ super(material, "GaussianSplatGpuPicking", 230, {
21
21
  GPUPICKER_DEPTH: false,
22
22
  GPUPICKER_PACK_DEPTH: false,
23
23
  });
@@ -164,7 +164,7 @@ export class GaussianSplattingGpuPickingMaterialPlugin extends MaterialPluginBas
164
164
  _getCustomCodeGLSL(shaderType) {
165
165
  if (shaderType === "vertex") {
166
166
  return {
167
- CUSTOM_VERTEX_DEFINITIONS: `varying float vPartIndex;`,
167
+ CUSTOM_VERTEX_DEFINITIONS: GetPartIndexVaryingDeclaration(0 /* ShaderLanguage.GLSL */),
168
168
  CUSTOM_VERTEX_UPDATE: `
169
169
  #if IS_COMPOUND
170
170
  vPartIndex = float(splat.partIndex);
@@ -177,7 +177,7 @@ export class GaussianSplattingGpuPickingMaterialPlugin extends MaterialPluginBas
177
177
  else if (shaderType === "fragment") {
178
178
  return {
179
179
  CUSTOM_FRAGMENT_DEFINITIONS: `
180
- varying float vPartIndex;
180
+ ${GetPartIndexVaryingDeclaration(0 /* ShaderLanguage.GLSL */)}
181
181
  #if IS_COMPOUND
182
182
  uniform vec3 partPickingColors[${this._maxPartCount}];
183
183
  #else
@@ -200,7 +200,7 @@ uniform vec3 pickingColor;
200
200
  _getCustomCodeWGSL(shaderType) {
201
201
  if (shaderType === "vertex") {
202
202
  return {
203
- CUSTOM_VERTEX_DEFINITIONS: `varying vPartIndex: f32;`,
203
+ CUSTOM_VERTEX_DEFINITIONS: GetPartIndexVaryingDeclaration(1 /* ShaderLanguage.WGSL */),
204
204
  CUSTOM_VERTEX_UPDATE: `
205
205
  #if IS_COMPOUND
206
206
  vertexOutputs.vPartIndex = f32(splat.partIndex);
@@ -213,7 +213,7 @@ uniform vec3 pickingColor;
213
213
  else if (shaderType === "fragment") {
214
214
  return {
215
215
  CUSTOM_FRAGMENT_DEFINITIONS: `
216
- varying vPartIndex: f32;
216
+ ${GetPartIndexVaryingDeclaration(1 /* ShaderLanguage.WGSL */)}
217
217
  #if IS_COMPOUND
218
218
  uniform partPickingColors: array<vec3f, ${this._maxPartCount}>;
219
219
  #else
@@ -1 +1 @@
1
- {"version":3,"file":"gaussianSplattingGpuPickingMaterialPlugin.pure.js","sourceRoot":"","sources":["../../../../../dev/core/src/Materials/GaussianSplatting/gaussianSplattingGpuPickingMaterialPlugin.pure.ts"],"names":[],"mappings":"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","sourcesContent":["/** This file must only contain pure code and pure imports */\r\n\r\nimport { type Nullable } from \"../../types\";\r\nimport { type Scene } from \"../../scene.pure\";\r\nimport { type AbstractEngine } from \"../../Engines/abstractEngine.pure\";\r\nimport { type SubMesh } from \"../../Meshes/subMesh.pure\";\r\nimport { type UniformBuffer } from \"../uniformBuffer\";\r\nimport { type MaterialDefines } from \"../materialDefines\";\r\nimport { MaterialPluginBase } from \"../materialPluginBase.pure\";\r\nimport { ShaderLanguage } from \"../shaderLanguage\";\r\nimport { GetGaussianSplattingMaxPartCount, type GaussianSplattingMaterial } from \"./gaussianSplattingMaterial.pure\";\r\nimport { RegisterClass } from \"../../Misc/typeStore\";\r\n\r\n/**\r\n * Plugin for GaussianSplattingMaterial that replaces per-splat color output with\r\n * a pre-computed picking color for GPU-based hit testing.\r\n *\r\n * The picking color is computed on the CPU by encoding a 24-bit picking ID as RGB\r\n * (matching the readback decoding in GPUPicker).\r\n * @experimental\r\n */\r\nexport class GaussianSplattingGpuPickingMaterialPlugin extends MaterialPluginBase {\r\n private _pickingColor: [number, number, number] = [0, 0, 0];\r\n private _isCompound: boolean = false;\r\n private _partPickingColors: number[] = [];\r\n private _partVisibility: number[] = [];\r\n private _defaultPartVisibility: number[] = [];\r\n private _maxPartCount: number;\r\n private _enableDepthPicking = false;\r\n private _enablePackedDepthPicking = false;\r\n\r\n /**\r\n * Creates a new GaussianSplattingGpuPickingMaterialPlugin.\r\n * @param material The GaussianSplattingMaterial to attach the plugin to.\r\n * @param maxPartCount The maximum number of parts supported for compound meshes.\r\n */\r\n constructor(material: GaussianSplattingMaterial, maxPartCount?: number) {\r\n super(material, \"GaussianSplatGpuPicking\", 200, {\r\n GPUPICKER_DEPTH: false,\r\n GPUPICKER_PACK_DEPTH: false,\r\n });\r\n\r\n this._maxPartCount = maxPartCount ?? GetGaussianSplattingMaxPartCount(material.getScene().getEngine());\r\n this._defaultPartVisibility = new Array(this._maxPartCount).fill(1.0);\r\n this._enable(true);\r\n }\r\n\r\n /**\r\n * Enables writing the GPU picker depth MRT attachment.\r\n */\r\n public set enableDepthPicking(value: boolean) {\r\n if (this._enableDepthPicking === value) {\r\n return;\r\n }\r\n\r\n this._enableDepthPicking = value;\r\n this.markAllDefinesAsDirty();\r\n }\r\n\r\n /**\r\n * Enables byte-packed depth output for the GPU picker depth MRT attachment.\r\n */\r\n public set enablePackedDepthPicking(value: boolean) {\r\n if (this._enablePackedDepthPicking === value) {\r\n return;\r\n }\r\n\r\n this._enablePackedDepthPicking = value;\r\n this.markAllDefinesAsDirty();\r\n }\r\n\r\n /**\r\n * Encodes a 24-bit picking ID into normalized RGB components.\r\n * @param id The picking ID to encode\r\n * @returns A tuple [r, g, b] with values in [0, 1]\r\n */\r\n public static EncodeIdToColor(id: number): [number, number, number] {\r\n return [((id >> 16) & 0xff) / 255, ((id >> 8) & 0xff) / 255, (id & 0xff) / 255];\r\n }\r\n\r\n /**\r\n * Sets the picking color for a non-compound mesh from a picking ID.\r\n * The ID is encoded into an RGB color on the CPU.\r\n * @param id The 24-bit picking ID.\r\n */\r\n public set meshId(id: number) {\r\n this._pickingColor = GaussianSplattingGpuPickingMaterialPlugin.EncodeIdToColor(id);\r\n }\r\n\r\n /**\r\n * Sets whether this material is for a compound mesh with per-part picking.\r\n */\r\n public set isCompound(value: boolean) {\r\n this._isCompound = value;\r\n this.markAllDefinesAsDirty();\r\n }\r\n\r\n /**\r\n * Gets whether this material is for a compound mesh with per-part picking.\r\n */\r\n public get isCompound(): boolean {\r\n return this._isCompound;\r\n }\r\n\r\n /**\r\n * Sets the per-part picking colors from an array of picking IDs.\r\n * Each ID is encoded into an RGB color on the CPU.\r\n * @param ids Array mapping part index to picking ID.\r\n */\r\n public set partMeshIds(ids: number[]) {\r\n const colors: number[] = [];\r\n for (let i = 0; i < this._maxPartCount; i++) {\r\n const c = i < ids.length ? GaussianSplattingGpuPickingMaterialPlugin.EncodeIdToColor(ids[i]) : ([0, 0, 0] as [number, number, number]);\r\n colors.push(c[0], c[1], c[2]);\r\n }\r\n this._partPickingColors = colors;\r\n }\r\n\r\n /**\r\n * Sets which parts are active (pickable) for the compound picking pass.\r\n * Parts not in the set are discarded in the shader by overriding partVisibility to 0.\r\n * @param activeParts Array of part indices that should be pickable.\r\n */\r\n public setPartActive(activeParts: number[]): void {\r\n const visibility = this._partVisibility;\r\n visibility.length = this._maxPartCount;\r\n visibility.fill(0.0);\r\n for (const index of activeParts) {\r\n if (index >= 0 && index < this._maxPartCount) {\r\n visibility[index] = 1.0;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * @returns the class name\r\n */\r\n public override getClassName(): string {\r\n return \"GaussianSplattingGpuPickingMaterialPlugin\";\r\n }\r\n\r\n /**\r\n * Indicates this plugin supports both GLSL and WGSL.\r\n * @param shaderLanguage the shader language to check\r\n * @returns true for GLSL and WGSL\r\n */\r\n public override isCompatible(shaderLanguage: ShaderLanguage): boolean {\r\n switch (shaderLanguage) {\r\n case ShaderLanguage.GLSL:\r\n case ShaderLanguage.WGSL:\r\n return true;\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n /**\r\n * Always ready — no textures or async resources to wait on.\r\n * @param _defines the defines\r\n * @param _scene the scene\r\n * @param _engine the engine\r\n * @param _subMesh the submesh\r\n * @returns true\r\n */\r\n public override isReadyForSubMesh(_defines: MaterialDefines, _scene: Scene, _engine: AbstractEngine, _subMesh: SubMesh): boolean {\r\n return true;\r\n }\r\n\r\n /**\r\n * Sets the defines for the next rendering.\r\n * @param defines the list of defines to update\r\n */\r\n public override prepareDefines(defines: MaterialDefines): void {\r\n defines[\"GPUPICKER_DEPTH\"] = this._enableDepthPicking;\r\n defines[\"GPUPICKER_PACK_DEPTH\"] = this._enableDepthPicking && this._enablePackedDepthPicking;\r\n }\r\n\r\n /**\r\n * Returns custom shader code to inject GPU picking color output.\r\n *\r\n * @param shaderType \"vertex\" or \"fragment\"\r\n * @param shaderLanguage the shader language to use (default: GLSL)\r\n * @returns null or a map of injection point names to code strings\r\n */\r\n public override getCustomCode(shaderType: string, shaderLanguage = ShaderLanguage.GLSL): Nullable<{ [pointName: string]: string }> {\r\n if (shaderLanguage === ShaderLanguage.WGSL) {\r\n return this._getCustomCodeWGSL(shaderType);\r\n }\r\n return this._getCustomCodeGLSL(shaderType);\r\n }\r\n\r\n private _getCustomCodeGLSL(shaderType: string): Nullable<{ [pointName: string]: string }> {\r\n if (shaderType === \"vertex\") {\r\n return {\r\n CUSTOM_VERTEX_DEFINITIONS: `varying float vPartIndex;`,\r\n CUSTOM_VERTEX_UPDATE: `\r\n#if IS_COMPOUND\r\n vPartIndex = float(splat.partIndex);\r\n#else\r\n vPartIndex = 0.0;\r\n#endif\r\n `,\r\n };\r\n } else if (shaderType === \"fragment\") {\r\n return {\r\n CUSTOM_FRAGMENT_DEFINITIONS: `\r\nvarying float vPartIndex;\r\n#if IS_COMPOUND\r\nuniform vec3 partPickingColors[${this._maxPartCount}];\r\n#else\r\nuniform vec3 pickingColor;\r\n#endif\r\n `,\r\n CUSTOM_FRAGMENT_BEFORE_FRAGCOLOR: `\r\n#if IS_COMPOUND\r\n if (vColor.a < 0.001) discard;\r\n finalColor = vec4(partPickingColors[int(vPartIndex + 0.5)], 1.0);\r\n#else\r\n if (vColor.a < 0.001) discard;\r\n finalColor = vec4(pickingColor, 1.0);\r\n#endif\r\n `,\r\n };\r\n }\r\n return null;\r\n }\r\n\r\n private _getCustomCodeWGSL(shaderType: string): Nullable<{ [pointName: string]: string }> {\r\n if (shaderType === \"vertex\") {\r\n return {\r\n CUSTOM_VERTEX_DEFINITIONS: `varying vPartIndex: f32;`,\r\n CUSTOM_VERTEX_UPDATE: `\r\n#if IS_COMPOUND\r\n vertexOutputs.vPartIndex = f32(splat.partIndex);\r\n#else\r\n vertexOutputs.vPartIndex = 0.0;\r\n#endif\r\n `,\r\n };\r\n } else if (shaderType === \"fragment\") {\r\n return {\r\n CUSTOM_FRAGMENT_DEFINITIONS: `\r\nvarying vPartIndex: f32;\r\n#if IS_COMPOUND\r\nuniform partPickingColors: array<vec3f, ${this._maxPartCount}>;\r\n#else\r\nuniform pickingColor: vec3f;\r\n#endif\r\n `,\r\n CUSTOM_FRAGMENT_BEFORE_FRAGCOLOR: `\r\n#if IS_COMPOUND\r\n if (fragmentInputs.vColor.a < 0.001) { discard; }\r\n finalColor = vec4f(uniforms.partPickingColors[i32(fragmentInputs.vPartIndex + 0.5)], 1.0);\r\n#else\r\n if (fragmentInputs.vColor.a < 0.001) { discard; }\r\n finalColor = vec4f(uniforms.pickingColor, 1.0);\r\n#endif\r\n `,\r\n };\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * Registers the picking uniforms with the engine.\r\n * @returns uniform descriptions\r\n */\r\n public override getUniforms(): {\r\n ubo?: Array<{ name: string; size?: number; type?: string; arraySize?: number }>;\r\n vertex?: string;\r\n fragment?: string;\r\n externalUniforms?: string[];\r\n } {\r\n return {\r\n externalUniforms: [\"pickingColor\", \"partPickingColors\"],\r\n };\r\n }\r\n\r\n /**\r\n * Binds the picking color uniform(s) each frame.\r\n * @param _uniformBuffer the uniform buffer (unused — we bind directly on the effect)\r\n * @param _scene the current scene\r\n * @param _engine the current engine\r\n * @param subMesh the submesh being rendered\r\n */\r\n public override bindForSubMesh(_uniformBuffer: UniformBuffer, _scene: Scene, _engine: AbstractEngine, subMesh: SubMesh): void {\r\n const effect = subMesh.effect;\r\n if (!effect) {\r\n return;\r\n }\r\n\r\n if (this._isCompound) {\r\n effect.setArray3(\"partPickingColors\", this._partPickingColors);\r\n // default all visible when setPartActive hasn't been called\r\n const visibility = this._partVisibility.length > 0 ? this._partVisibility : this._defaultPartVisibility;\r\n effect.setArray(\"partVisibility\", visibility);\r\n } else {\r\n effect.setFloat3(\"pickingColor\", this._pickingColor[0], this._pickingColor[1], this._pickingColor[2]);\r\n }\r\n }\r\n}\r\n\r\nlet _Registered = false;\r\n/**\r\n * Register side effects for gaussianSplattingGpuPickingMaterialPlugin.\r\n * Safe to call multiple times; only the first call has an effect.\r\n */\r\nexport function RegisterGaussianSplattingGpuPickingMaterialPlugin(): void {\r\n if (_Registered) {\r\n return;\r\n }\r\n _Registered = true;\r\n\r\n RegisterClass(\"BABYLON.GaussianSplattingGpuPickingMaterialPlugin\", GaussianSplattingGpuPickingMaterialPlugin);\r\n}\r\n"]}
1
+ {"version":3,"file":"gaussianSplattingGpuPickingMaterialPlugin.pure.js","sourceRoot":"","sources":["../../../../../dev/core/src/Materials/GaussianSplatting/gaussianSplattingGpuPickingMaterialPlugin.pure.ts"],"names":[],"mappings":"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","sourcesContent":["/** This file must only contain pure code and pure imports */\r\n\r\nimport { type Nullable } from \"../../types\";\r\nimport { type Scene } from \"../../scene.pure\";\r\nimport { type AbstractEngine } from \"../../Engines/abstractEngine.pure\";\r\nimport { type SubMesh } from \"../../Meshes/subMesh.pure\";\r\nimport { type UniformBuffer } from \"../uniformBuffer\";\r\nimport { type MaterialDefines } from \"../materialDefines\";\r\nimport { MaterialPluginBase } from \"../materialPluginBase.pure\";\r\nimport { ShaderLanguage } from \"../shaderLanguage\";\r\nimport { GetGaussianSplattingMaxPartCount, GetPartIndexVaryingDeclaration, type GaussianSplattingMaterial } from \"./gaussianSplattingMaterial.pure\";\r\nimport { RegisterClass } from \"../../Misc/typeStore\";\r\n\r\n/**\r\n * Plugin for GaussianSplattingMaterial that replaces per-splat color output with\r\n * a pre-computed picking color for GPU-based hit testing.\r\n *\r\n * The picking color is computed on the CPU by encoding a 24-bit picking ID as RGB\r\n * (matching the readback decoding in GPUPicker).\r\n * @experimental\r\n */\r\nexport class GaussianSplattingGpuPickingMaterialPlugin extends MaterialPluginBase {\r\n private _pickingColor: [number, number, number] = [0, 0, 0];\r\n private _isCompound: boolean = false;\r\n private _partPickingColors: number[] = [];\r\n private _partVisibility: number[] = [];\r\n private _defaultPartVisibility: number[] = [];\r\n private _maxPartCount: number;\r\n private _enableDepthPicking = false;\r\n private _enablePackedDepthPicking = false;\r\n\r\n /**\r\n * Creates a new GaussianSplattingGpuPickingMaterialPlugin.\r\n * @param material The GaussianSplattingMaterial to attach the plugin to.\r\n * @param maxPartCount The maximum number of parts supported for compound meshes.\r\n */\r\n constructor(material: GaussianSplattingMaterial, maxPartCount?: number) {\r\n super(material, \"GaussianSplatGpuPicking\", 230, {\r\n GPUPICKER_DEPTH: false,\r\n GPUPICKER_PACK_DEPTH: false,\r\n });\r\n\r\n this._maxPartCount = maxPartCount ?? GetGaussianSplattingMaxPartCount(material.getScene().getEngine());\r\n this._defaultPartVisibility = new Array(this._maxPartCount).fill(1.0);\r\n this._enable(true);\r\n }\r\n\r\n /**\r\n * Enables writing the GPU picker depth MRT attachment.\r\n */\r\n public set enableDepthPicking(value: boolean) {\r\n if (this._enableDepthPicking === value) {\r\n return;\r\n }\r\n\r\n this._enableDepthPicking = value;\r\n this.markAllDefinesAsDirty();\r\n }\r\n\r\n /**\r\n * Enables byte-packed depth output for the GPU picker depth MRT attachment.\r\n */\r\n public set enablePackedDepthPicking(value: boolean) {\r\n if (this._enablePackedDepthPicking === value) {\r\n return;\r\n }\r\n\r\n this._enablePackedDepthPicking = value;\r\n this.markAllDefinesAsDirty();\r\n }\r\n\r\n /**\r\n * Encodes a 24-bit picking ID into normalized RGB components.\r\n * @param id The picking ID to encode\r\n * @returns A tuple [r, g, b] with values in [0, 1]\r\n */\r\n public static EncodeIdToColor(id: number): [number, number, number] {\r\n return [((id >> 16) & 0xff) / 255, ((id >> 8) & 0xff) / 255, (id & 0xff) / 255];\r\n }\r\n\r\n /**\r\n * Sets the picking color for a non-compound mesh from a picking ID.\r\n * The ID is encoded into an RGB color on the CPU.\r\n * @param id The 24-bit picking ID.\r\n */\r\n public set meshId(id: number) {\r\n this._pickingColor = GaussianSplattingGpuPickingMaterialPlugin.EncodeIdToColor(id);\r\n }\r\n\r\n /**\r\n * Sets whether this material is for a compound mesh with per-part picking.\r\n */\r\n public set isCompound(value: boolean) {\r\n this._isCompound = value;\r\n this.markAllDefinesAsDirty();\r\n }\r\n\r\n /**\r\n * Gets whether this material is for a compound mesh with per-part picking.\r\n */\r\n public get isCompound(): boolean {\r\n return this._isCompound;\r\n }\r\n\r\n /**\r\n * Sets the per-part picking colors from an array of picking IDs.\r\n * Each ID is encoded into an RGB color on the CPU.\r\n * @param ids Array mapping part index to picking ID.\r\n */\r\n public set partMeshIds(ids: number[]) {\r\n const colors: number[] = [];\r\n for (let i = 0; i < this._maxPartCount; i++) {\r\n const c = i < ids.length ? GaussianSplattingGpuPickingMaterialPlugin.EncodeIdToColor(ids[i]) : ([0, 0, 0] as [number, number, number]);\r\n colors.push(c[0], c[1], c[2]);\r\n }\r\n this._partPickingColors = colors;\r\n }\r\n\r\n /**\r\n * Sets which parts are active (pickable) for the compound picking pass.\r\n * Parts not in the set are discarded in the shader by overriding partVisibility to 0.\r\n * @param activeParts Array of part indices that should be pickable.\r\n */\r\n public setPartActive(activeParts: number[]): void {\r\n const visibility = this._partVisibility;\r\n visibility.length = this._maxPartCount;\r\n visibility.fill(0.0);\r\n for (const index of activeParts) {\r\n if (index >= 0 && index < this._maxPartCount) {\r\n visibility[index] = 1.0;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * @returns the class name\r\n */\r\n public override getClassName(): string {\r\n return \"GaussianSplattingGpuPickingMaterialPlugin\";\r\n }\r\n\r\n /**\r\n * Indicates this plugin supports both GLSL and WGSL.\r\n * @param shaderLanguage the shader language to check\r\n * @returns true for GLSL and WGSL\r\n */\r\n public override isCompatible(shaderLanguage: ShaderLanguage): boolean {\r\n switch (shaderLanguage) {\r\n case ShaderLanguage.GLSL:\r\n case ShaderLanguage.WGSL:\r\n return true;\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n /**\r\n * Always ready — no textures or async resources to wait on.\r\n * @param _defines the defines\r\n * @param _scene the scene\r\n * @param _engine the engine\r\n * @param _subMesh the submesh\r\n * @returns true\r\n */\r\n public override isReadyForSubMesh(_defines: MaterialDefines, _scene: Scene, _engine: AbstractEngine, _subMesh: SubMesh): boolean {\r\n return true;\r\n }\r\n\r\n /**\r\n * Sets the defines for the next rendering.\r\n * @param defines the list of defines to update\r\n */\r\n public override prepareDefines(defines: MaterialDefines): void {\r\n defines[\"GPUPICKER_DEPTH\"] = this._enableDepthPicking;\r\n defines[\"GPUPICKER_PACK_DEPTH\"] = this._enableDepthPicking && this._enablePackedDepthPicking;\r\n }\r\n\r\n /**\r\n * Returns custom shader code to inject GPU picking color output.\r\n *\r\n * @param shaderType \"vertex\" or \"fragment\"\r\n * @param shaderLanguage the shader language to use (default: GLSL)\r\n * @returns null or a map of injection point names to code strings\r\n */\r\n public override getCustomCode(shaderType: string, shaderLanguage = ShaderLanguage.GLSL): Nullable<{ [pointName: string]: string }> {\r\n if (shaderLanguage === ShaderLanguage.WGSL) {\r\n return this._getCustomCodeWGSL(shaderType);\r\n }\r\n return this._getCustomCodeGLSL(shaderType);\r\n }\r\n\r\n private _getCustomCodeGLSL(shaderType: string): Nullable<{ [pointName: string]: string }> {\r\n if (shaderType === \"vertex\") {\r\n return {\r\n CUSTOM_VERTEX_DEFINITIONS: GetPartIndexVaryingDeclaration(ShaderLanguage.GLSL),\r\n CUSTOM_VERTEX_UPDATE: `\r\n#if IS_COMPOUND\r\n vPartIndex = float(splat.partIndex);\r\n#else\r\n vPartIndex = 0.0;\r\n#endif\r\n `,\r\n };\r\n } else if (shaderType === \"fragment\") {\r\n return {\r\n CUSTOM_FRAGMENT_DEFINITIONS: `\r\n${GetPartIndexVaryingDeclaration(ShaderLanguage.GLSL)}\r\n#if IS_COMPOUND\r\nuniform vec3 partPickingColors[${this._maxPartCount}];\r\n#else\r\nuniform vec3 pickingColor;\r\n#endif\r\n `,\r\n CUSTOM_FRAGMENT_BEFORE_FRAGCOLOR: `\r\n#if IS_COMPOUND\r\n if (vColor.a < 0.001) discard;\r\n finalColor = vec4(partPickingColors[int(vPartIndex + 0.5)], 1.0);\r\n#else\r\n if (vColor.a < 0.001) discard;\r\n finalColor = vec4(pickingColor, 1.0);\r\n#endif\r\n `,\r\n };\r\n }\r\n return null;\r\n }\r\n\r\n private _getCustomCodeWGSL(shaderType: string): Nullable<{ [pointName: string]: string }> {\r\n if (shaderType === \"vertex\") {\r\n return {\r\n CUSTOM_VERTEX_DEFINITIONS: GetPartIndexVaryingDeclaration(ShaderLanguage.WGSL),\r\n CUSTOM_VERTEX_UPDATE: `\r\n#if IS_COMPOUND\r\n vertexOutputs.vPartIndex = f32(splat.partIndex);\r\n#else\r\n vertexOutputs.vPartIndex = 0.0;\r\n#endif\r\n `,\r\n };\r\n } else if (shaderType === \"fragment\") {\r\n return {\r\n CUSTOM_FRAGMENT_DEFINITIONS: `\r\n${GetPartIndexVaryingDeclaration(ShaderLanguage.WGSL)}\r\n#if IS_COMPOUND\r\nuniform partPickingColors: array<vec3f, ${this._maxPartCount}>;\r\n#else\r\nuniform pickingColor: vec3f;\r\n#endif\r\n `,\r\n CUSTOM_FRAGMENT_BEFORE_FRAGCOLOR: `\r\n#if IS_COMPOUND\r\n if (fragmentInputs.vColor.a < 0.001) { discard; }\r\n finalColor = vec4f(uniforms.partPickingColors[i32(fragmentInputs.vPartIndex + 0.5)], 1.0);\r\n#else\r\n if (fragmentInputs.vColor.a < 0.001) { discard; }\r\n finalColor = vec4f(uniforms.pickingColor, 1.0);\r\n#endif\r\n `,\r\n };\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * Registers the picking uniforms with the engine.\r\n * @returns uniform descriptions\r\n */\r\n public override getUniforms(): {\r\n ubo?: Array<{ name: string; size?: number; type?: string; arraySize?: number }>;\r\n vertex?: string;\r\n fragment?: string;\r\n externalUniforms?: string[];\r\n } {\r\n return {\r\n externalUniforms: [\"pickingColor\", \"partPickingColors\"],\r\n };\r\n }\r\n\r\n /**\r\n * Binds the picking color uniform(s) each frame.\r\n * @param _uniformBuffer the uniform buffer (unused — we bind directly on the effect)\r\n * @param _scene the current scene\r\n * @param _engine the current engine\r\n * @param subMesh the submesh being rendered\r\n */\r\n public override bindForSubMesh(_uniformBuffer: UniformBuffer, _scene: Scene, _engine: AbstractEngine, subMesh: SubMesh): void {\r\n const effect = subMesh.effect;\r\n if (!effect) {\r\n return;\r\n }\r\n\r\n if (this._isCompound) {\r\n effect.setArray3(\"partPickingColors\", this._partPickingColors);\r\n // default all visible when setPartActive hasn't been called\r\n const visibility = this._partVisibility.length > 0 ? this._partVisibility : this._defaultPartVisibility;\r\n effect.setArray(\"partVisibility\", visibility);\r\n } else {\r\n effect.setFloat3(\"pickingColor\", this._pickingColor[0], this._pickingColor[1], this._pickingColor[2]);\r\n }\r\n }\r\n}\r\n\r\nlet _Registered = false;\r\n/**\r\n * Register side effects for gaussianSplattingGpuPickingMaterialPlugin.\r\n * Safe to call multiple times; only the first call has an effect.\r\n */\r\nexport function RegisterGaussianSplattingGpuPickingMaterialPlugin(): void {\r\n if (_Registered) {\r\n return;\r\n }\r\n _Registered = true;\r\n\r\n RegisterClass(\"BABYLON.GaussianSplattingGpuPickingMaterialPlugin\", GaussianSplattingGpuPickingMaterialPlugin);\r\n}\r\n"]}
@@ -4,7 +4,7 @@ import { type AbstractMesh } from "../../Meshes/abstractMesh.pure.js";
4
4
  import { type Mesh } from "../../Meshes/mesh.pure.js";
5
5
  import { type Effect } from "../../Materials/effect.pure.js";
6
6
  import { type Scene } from "../../scene.pure.js";
7
- import { type Matrix } from "../../Maths/math.vector.pure.js";
7
+ import { Matrix } from "../../Maths/math.vector.pure.js";
8
8
  import { type GaussianSplattingMesh } from "../../Meshes/GaussianSplatting/gaussianSplattingMesh.pure.js";
9
9
  import { type AbstractEngine } from "../../Engines/abstractEngine.pure.js";
10
10
  import { PushMaterial } from "../../Materials/pushMaterial.js";
@@ -22,6 +22,18 @@ export declare function GetGaussianSplattingMaxPartCount(engine: AbstractEngine)
22
22
  * @deprecated Use {@link GetGaussianSplattingMaxPartCount} with an engine instance instead.
23
23
  */
24
24
  export declare const GaussianSplattingMaxPartCount = 128;
25
+ /**
26
+ * Returns an include-guarded declaration of the `vPartIndex` varying shared by the Gaussian
27
+ * Splatting material plugins (debug, solid-color, GPU picking). More than one of these plugins can
28
+ * be attached to the same material at once; each needs `vPartIndex` to carry `splat.partIndex` from
29
+ * the vertex to the fragment stage. Without a guard each plugin injects its own `varying vPartIndex`,
30
+ * which is a duplicate declaration — fatal under WGSL ("redefinition of 'vPartIndex'"). The guard
31
+ * makes the declaration idempotent so exactly one survives regardless of how many plugins inject it.
32
+ * Inject the result at a CUSTOM_VERTEX_DEFINITIONS / CUSTOM_FRAGMENT_DEFINITIONS point.
33
+ * @param shaderLanguage - The shader language the host material is compiling.
34
+ * @returns The guarded `vPartIndex` varying declaration.
35
+ */
36
+ export declare function GetPartIndexVaryingDeclaration(shaderLanguage: ShaderLanguage): string;
25
37
  /**
26
38
  * GaussianSplattingMaterial material used to render Gaussian Splatting
27
39
  * @experimental
@@ -85,6 +97,11 @@ export declare class GaussianSplattingMaterial extends PushMaterial {
85
97
  protected static _VoxelSamplers: string[];
86
98
  protected static _Uniforms: string[];
87
99
  private _sourceMesh;
100
+ private _inverseProjection;
101
+ private _geometryProjectionUpdateFlag;
102
+ private _partMotionHistory;
103
+ private _renderPassObserver;
104
+ private static _BindViewportAndFocal;
88
105
  /**
89
106
  * Checks whether the material is ready to be rendered for a given mesh.
90
107
  * @param mesh The mesh to render
@@ -109,6 +126,14 @@ export declare class GaussianSplattingMaterial extends PushMaterial {
109
126
  * @param scene scene that contains mesh and camera used for rendering
110
127
  */
111
128
  static BindEffect(mesh: Mesh, effect: Effect, scene: Scene): void;
129
+ private _bindGeometryRendering;
130
+ /**
131
+ * Releases the material and its render-pass motion histories.
132
+ * @param forceDisposeEffect whether associated effects should be disposed
133
+ * @param forceDisposeTextures whether associated textures should be disposed
134
+ * @param notBoundToMesh whether mesh references can be left unchanged
135
+ */
136
+ dispose(forceDisposeEffect?: boolean, forceDisposeTextures?: boolean, notBoundToMesh?: boolean): void;
112
137
  /**
113
138
  * Bind SOG dequantization uniforms + raw textures.
114
139
  * @internal