@babylonjs/core 7.36.0 → 7.37.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 (276) hide show
  1. package/Cameras/arcRotateCamera.d.ts +3 -1
  2. package/Cameras/arcRotateCamera.js +14 -3
  3. package/Cameras/arcRotateCamera.js.map +1 -1
  4. package/Collisions/gpuPicker.js.map +1 -1
  5. package/Engines/Extensions/engine.multiRender.js.map +1 -1
  6. package/Engines/Extensions/engine.rawTexture.d.ts +8 -8
  7. package/Engines/Extensions/engine.rawTexture.js.map +1 -1
  8. package/Engines/Extensions/engine.renderTarget.js.map +1 -1
  9. package/Engines/Extensions/engine.renderTargetCube.js.map +1 -1
  10. package/Engines/WebGPU/Extensions/engine.multiRender.js.map +1 -1
  11. package/Engines/WebGPU/Extensions/engine.rawTexture.d.ts +9 -9
  12. package/Engines/WebGPU/Extensions/engine.rawTexture.js.map +1 -1
  13. package/Engines/WebGPU/Extensions/engine.renderTargetCube.js.map +1 -1
  14. package/Engines/WebGPU/webgpuConstants.d.ts +6 -0
  15. package/Engines/WebGPU/webgpuConstants.js +6 -0
  16. package/Engines/WebGPU/webgpuConstants.js.map +1 -1
  17. package/Engines/WebGPU/webgpuTextureHelper.js +18 -0
  18. package/Engines/WebGPU/webgpuTextureHelper.js.map +1 -1
  19. package/Engines/WebGPU/webgpuTextureManager.js +6 -0
  20. package/Engines/WebGPU/webgpuTextureManager.js.map +1 -1
  21. package/Engines/abstractEngine.d.ts +1 -1
  22. package/Engines/abstractEngine.js +4 -4
  23. package/Engines/abstractEngine.js.map +1 -1
  24. package/Engines/constants.d.ts +17 -1
  25. package/Engines/constants.js +17 -1
  26. package/Engines/constants.js.map +1 -1
  27. package/Engines/engine.d.ts +31 -1
  28. package/Engines/engine.js +17 -1
  29. package/Engines/engine.js.map +1 -1
  30. package/Engines/engineCapabilities.d.ts +2 -0
  31. package/Engines/engineCapabilities.js.map +1 -1
  32. package/Engines/nativeEngine.js +1 -0
  33. package/Engines/nativeEngine.js.map +1 -1
  34. package/Engines/nullEngine.d.ts +2 -2
  35. package/Engines/nullEngine.js +3 -2
  36. package/Engines/nullEngine.js.map +1 -1
  37. package/Engines/thinEngine.functions.d.ts +4 -0
  38. package/Engines/thinEngine.functions.js +17 -0
  39. package/Engines/thinEngine.functions.js.map +1 -1
  40. package/Engines/thinEngine.js +39 -9
  41. package/Engines/thinEngine.js.map +1 -1
  42. package/Engines/webgpuEngine.js +1 -0
  43. package/Engines/webgpuEngine.js.map +1 -1
  44. package/Helpers/environmentHelper.js.map +1 -1
  45. package/Layers/effectLayer.d.ts +1 -1
  46. package/Layers/effectLayer.js.map +1 -1
  47. package/Layers/glowLayer.d.ts +1 -1
  48. package/Layers/glowLayer.js.map +1 -1
  49. package/Layers/highlightLayer.d.ts +1 -1
  50. package/Layers/highlightLayer.js.map +1 -1
  51. package/Lights/Shadows/shadowGenerator.js.map +1 -1
  52. package/Materials/GaussianSplatting/gaussianSplattingMaterial.js +12 -2
  53. package/Materials/GaussianSplatting/gaussianSplattingMaterial.js.map +1 -1
  54. package/Materials/GreasedLine/greasedLineMaterialInterfaces.d.ts +5 -0
  55. package/Materials/GreasedLine/greasedLineMaterialInterfaces.js.map +1 -1
  56. package/Materials/GreasedLine/greasedLinePluginMaterial.d.ts +21 -5
  57. package/Materials/GreasedLine/greasedLinePluginMaterial.js +52 -176
  58. package/Materials/GreasedLine/greasedLinePluginMaterial.js.map +1 -1
  59. package/Materials/GreasedLine/greasedLinePluginMaterialShadersGLSL.d.ts +11 -0
  60. package/Materials/GreasedLine/greasedLinePluginMaterialShadersGLSL.js +158 -0
  61. package/Materials/GreasedLine/greasedLinePluginMaterialShadersGLSL.js.map +1 -0
  62. package/Materials/GreasedLine/greasedLinePluginMaterialShadersWGSL.d.ts +11 -0
  63. package/Materials/GreasedLine/greasedLinePluginMaterialShadersWGSL.js +177 -0
  64. package/Materials/GreasedLine/greasedLinePluginMaterialShadersWGSL.js.map +1 -0
  65. package/Materials/Node/Blocks/PBR/reflectionBlock.js +6 -0
  66. package/Materials/Node/Blocks/PBR/reflectionBlock.js.map +1 -1
  67. package/Materials/Node/Blocks/index.d.ts +1 -0
  68. package/Materials/Node/Blocks/index.js +1 -0
  69. package/Materials/Node/Blocks/index.js.map +1 -1
  70. package/Materials/Node/Blocks/matrixSplitterBlock.d.ts +56 -0
  71. package/Materials/Node/Blocks/matrixSplitterBlock.js +130 -0
  72. package/Materials/Node/Blocks/matrixSplitterBlock.js.map +1 -0
  73. package/Materials/Node/nodeMaterial.js.map +1 -1
  74. package/Materials/PBR/pbrBaseMaterial.d.ts +1 -0
  75. package/Materials/PBR/pbrBaseMaterial.js +12 -0
  76. package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
  77. package/Materials/Textures/MultiviewRenderTarget.js.map +1 -1
  78. package/Materials/Textures/Procedurals/proceduralTexture.js.map +1 -1
  79. package/Materials/Textures/baseTexture.js.map +1 -1
  80. package/Materials/Textures/colorGradingTexture.js.map +1 -1
  81. package/Materials/Textures/mirrorTexture.js.map +1 -1
  82. package/Materials/Textures/multiRenderTarget.js.map +1 -1
  83. package/Materials/Textures/rawCubeTexture.d.ts +2 -2
  84. package/Materials/Textures/rawCubeTexture.js +2 -2
  85. package/Materials/Textures/rawCubeTexture.js.map +1 -1
  86. package/Materials/Textures/rawTexture.js.map +1 -1
  87. package/Materials/Textures/rawTexture2DArray.d.ts +1 -1
  88. package/Materials/Textures/rawTexture2DArray.js +1 -1
  89. package/Materials/Textures/rawTexture2DArray.js.map +1 -1
  90. package/Materials/Textures/rawTexture3D.d.ts +1 -1
  91. package/Materials/Textures/rawTexture3D.js +1 -1
  92. package/Materials/Textures/rawTexture3D.js.map +1 -1
  93. package/Materials/Textures/renderTargetTexture.js.map +1 -1
  94. package/Materials/drawWrapper.d.ts +6 -1
  95. package/Materials/drawWrapper.js +18 -2
  96. package/Materials/drawWrapper.js.map +1 -1
  97. package/Materials/effect.d.ts +6 -1
  98. package/Materials/effect.functions.d.ts +5 -0
  99. package/Materials/effect.functions.js +19 -0
  100. package/Materials/effect.functions.js.map +1 -1
  101. package/Materials/effect.js +22 -20
  102. package/Materials/effect.js.map +1 -1
  103. package/Materials/effect.webgl.functions.js +12 -4
  104. package/Materials/effect.webgl.functions.js.map +1 -1
  105. package/Materials/effectRenderer.js +1 -1
  106. package/Materials/effectRenderer.js.map +1 -1
  107. package/Maths/math.scalar.d.ts +0 -1
  108. package/Maths/math.scalar.js +1 -2
  109. package/Maths/math.scalar.js.map +1 -1
  110. package/Meshes/Builders/greasedLineBuilder.js +2 -2
  111. package/Meshes/Builders/greasedLineBuilder.js.map +1 -1
  112. package/Meshes/GaussianSplatting/gaussianSplattingMesh.d.ts +17 -3
  113. package/Meshes/GaussianSplatting/gaussianSplattingMesh.js +69 -20
  114. package/Meshes/GaussianSplatting/gaussianSplattingMesh.js.map +1 -1
  115. package/Meshes/abstractMesh.d.ts +5 -3
  116. package/Meshes/abstractMesh.hotSpot.d.ts +8 -1
  117. package/Meshes/abstractMesh.hotSpot.js +17 -0
  118. package/Meshes/abstractMesh.hotSpot.js.map +1 -1
  119. package/Meshes/abstractMesh.js +9 -7
  120. package/Meshes/abstractMesh.js.map +1 -1
  121. package/Meshes/linesMesh.js +1 -1
  122. package/Meshes/linesMesh.js.map +1 -1
  123. package/Meshes/subMesh.d.ts +5 -3
  124. package/Meshes/subMesh.js +9 -7
  125. package/Meshes/subMesh.js.map +1 -1
  126. package/Misc/HighDynamicRange/cubemapToSphericalPolynomial.js.map +1 -1
  127. package/Misc/dds.d.ts +1 -1
  128. package/Misc/dds.js.map +1 -1
  129. package/Misc/environmentTextureTools.js.map +1 -1
  130. package/Misc/observable.d.ts +1 -3
  131. package/Misc/observable.js +7 -7
  132. package/Misc/observable.js.map +1 -1
  133. package/Misc/screenshotTools.js.map +1 -1
  134. package/Misc/snapshotRenderingHelper.js +3 -0
  135. package/Misc/snapshotRenderingHelper.js.map +1 -1
  136. package/Misc/textureTools.js.map +1 -1
  137. package/Misc/virtualJoystick.js +2 -0
  138. package/Misc/virtualJoystick.js.map +1 -1
  139. package/PostProcesses/RenderPipeline/Pipelines/defaultRenderingPipeline.js.map +1 -1
  140. package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.d.ts +1 -1
  141. package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.js.map +1 -1
  142. package/PostProcesses/RenderPipeline/Pipelines/ssaoRenderingPipeline.js.map +1 -1
  143. package/PostProcesses/RenderPipeline/Pipelines/standardRenderingPipeline.js.map +1 -1
  144. package/PostProcesses/bloomMergePostProcess.js.map +1 -1
  145. package/PostProcesses/blurPostProcess.js.map +1 -1
  146. package/PostProcesses/chromaticAberrationPostProcess.js.map +1 -1
  147. package/PostProcesses/circleOfConfusionPostProcess.js.map +1 -1
  148. package/PostProcesses/convolutionPostProcess.js.map +1 -1
  149. package/PostProcesses/depthOfFieldBlurPostProcess.js.map +1 -1
  150. package/PostProcesses/depthOfFieldMergePostProcess.js.map +1 -1
  151. package/PostProcesses/extractHighlightsPostProcess.js.map +1 -1
  152. package/PostProcesses/fxaaPostProcess.js.map +1 -1
  153. package/PostProcesses/grainPostProcess.js.map +1 -1
  154. package/PostProcesses/highlightsPostProcess.d.ts +1 -1
  155. package/PostProcesses/highlightsPostProcess.js +1 -1
  156. package/PostProcesses/highlightsPostProcess.js.map +1 -1
  157. package/PostProcesses/imageProcessingPostProcess.js.map +1 -1
  158. package/PostProcesses/motionBlurPostProcess.js.map +1 -1
  159. package/PostProcesses/passPostProcess.js.map +1 -1
  160. package/PostProcesses/postProcess.d.ts +1 -1
  161. package/PostProcesses/postProcess.js.map +1 -1
  162. package/PostProcesses/screenSpaceCurvaturePostProcess.js.map +1 -1
  163. package/PostProcesses/screenSpaceReflectionPostProcess.js.map +1 -1
  164. package/PostProcesses/sharpenPostProcess.js.map +1 -1
  165. package/PostProcesses/subSurfaceScatteringPostProcess.js.map +1 -1
  166. package/PostProcesses/tonemapPostProcess.d.ts +1 -1
  167. package/PostProcesses/tonemapPostProcess.js +1 -1
  168. package/PostProcesses/tonemapPostProcess.js.map +1 -1
  169. package/PostProcesses/volumetricLightScatteringPostProcess.js.map +1 -1
  170. package/Rendering/IBLShadows/iblShadowsRenderPipeline.d.ts +3 -23
  171. package/Rendering/IBLShadows/iblShadowsRenderPipeline.js +30 -67
  172. package/Rendering/IBLShadows/iblShadowsRenderPipeline.js.map +1 -1
  173. package/Rendering/IBLShadows/iblShadowsSpatialBlurPass.js.map +1 -1
  174. package/Rendering/IBLShadows/iblShadowsVoxelTracingPass.d.ts +1 -1
  175. package/Rendering/IBLShadows/iblShadowsVoxelTracingPass.js +8 -4
  176. package/Rendering/IBLShadows/iblShadowsVoxelTracingPass.js.map +1 -1
  177. package/Rendering/{IBLShadows/iblShadowsImportanceSamplingRenderer.d.ts → iblCdfGenerator.d.ts} +15 -12
  178. package/Rendering/{IBLShadows/iblShadowsImportanceSamplingRenderer.js → iblCdfGenerator.js} +37 -27
  179. package/Rendering/iblCdfGenerator.js.map +1 -0
  180. package/Rendering/iblCdfGeneratorSceneComponent.d.ts +59 -0
  181. package/Rendering/iblCdfGeneratorSceneComponent.js +83 -0
  182. package/Rendering/iblCdfGeneratorSceneComponent.js.map +1 -0
  183. package/Rendering/index.d.ts +12 -10
  184. package/Rendering/index.js +12 -10
  185. package/Rendering/index.js.map +1 -1
  186. package/Rendering/prePassRenderer.js.map +1 -1
  187. package/Shaders/ShadersInclude/gaussianSplatting.js +72 -2
  188. package/Shaders/ShadersInclude/gaussianSplatting.js.map +1 -1
  189. package/Shaders/ShadersInclude/gaussianSplattingVertexDeclaration.js +1 -1
  190. package/Shaders/ShadersInclude/gaussianSplattingVertexDeclaration.js.map +1 -1
  191. package/Shaders/ShadersInclude/hdrFilteringFunctions.js +29 -4
  192. package/Shaders/ShadersInclude/hdrFilteringFunctions.js.map +1 -1
  193. package/Shaders/ShadersInclude/pbrBlockReflection.js +9 -1
  194. package/Shaders/ShadersInclude/pbrBlockReflection.js.map +1 -1
  195. package/Shaders/ShadersInclude/pbrBlockSubSurface.js +9 -1
  196. package/Shaders/ShadersInclude/pbrBlockSubSurface.js.map +1 -1
  197. package/Shaders/ShadersInclude/pbrFragmentSamplersDeclaration.js +3 -0
  198. package/Shaders/ShadersInclude/pbrFragmentSamplersDeclaration.js.map +1 -1
  199. package/Shaders/gaussianSplatting.vertex.js +16 -2
  200. package/Shaders/gaussianSplatting.vertex.js.map +1 -1
  201. package/Shaders/{iblShadowsCdfy.fragment.d.ts → iblCdfx.fragment.d.ts} +1 -1
  202. package/Shaders/{iblShadowsCdfx.fragment.js → iblCdfx.fragment.js} +3 -3
  203. package/Shaders/iblCdfx.fragment.js.map +1 -0
  204. package/Shaders/{iblShadowsCdfx.fragment.d.ts → iblCdfy.fragment.d.ts} +1 -1
  205. package/Shaders/{iblShadowsCdfy.fragment.js → iblCdfy.fragment.js} +3 -3
  206. package/Shaders/iblCdfy.fragment.js.map +1 -0
  207. package/Shaders/{iblShadowsIcdfx.fragment.d.ts → iblIcdfx.fragment.d.ts} +1 -1
  208. package/Shaders/{iblShadowsIcdfx.fragment.js → iblIcdfx.fragment.js} +3 -3
  209. package/Shaders/iblIcdfx.fragment.js.map +1 -0
  210. package/Shaders/{iblShadowsIcdfy.fragment.d.ts → iblIcdfy.fragment.d.ts} +1 -1
  211. package/Shaders/{iblShadowsIcdfy.fragment.js → iblIcdfy.fragment.js} +3 -3
  212. package/Shaders/iblIcdfy.fragment.js.map +1 -0
  213. package/Shaders/importanceSamplingDebug.fragment.d.ts +5 -0
  214. package/Shaders/{iblShadowsImportanceSamplingDebug.fragment.js → importanceSamplingDebug.fragment.js} +3 -3
  215. package/Shaders/importanceSamplingDebug.fragment.js.map +1 -0
  216. package/Shaders/pbr.fragment.js +8 -0
  217. package/Shaders/pbr.fragment.js.map +1 -1
  218. package/ShadersWGSL/ShadersInclude/gaussianSplatting.js +77 -1
  219. package/ShadersWGSL/ShadersInclude/gaussianSplatting.js.map +1 -1
  220. package/ShadersWGSL/ShadersInclude/hdrFilteringFunctions.js +28 -4
  221. package/ShadersWGSL/ShadersInclude/hdrFilteringFunctions.js.map +1 -1
  222. package/ShadersWGSL/ShadersInclude/lightFragment.js +1 -1
  223. package/ShadersWGSL/ShadersInclude/lightFragment.js.map +1 -1
  224. package/ShadersWGSL/ShadersInclude/oitFragment.js +1 -1
  225. package/ShadersWGSL/ShadersInclude/oitFragment.js.map +1 -1
  226. package/ShadersWGSL/ShadersInclude/pbrBlockReflection.js +14 -1
  227. package/ShadersWGSL/ShadersInclude/pbrBlockReflection.js.map +1 -1
  228. package/ShadersWGSL/ShadersInclude/pbrBlockSubSurface.js +14 -1
  229. package/ShadersWGSL/ShadersInclude/pbrBlockSubSurface.js.map +1 -1
  230. package/ShadersWGSL/ShadersInclude/pbrFragmentSamplersDeclaration.js +3 -0
  231. package/ShadersWGSL/ShadersInclude/pbrFragmentSamplersDeclaration.js.map +1 -1
  232. package/ShadersWGSL/ShadersInclude/shadowsFragmentFunctions.js +1 -1
  233. package/ShadersWGSL/ShadersInclude/shadowsFragmentFunctions.js.map +1 -1
  234. package/ShadersWGSL/gaussianSplatting.vertex.js +18 -2
  235. package/ShadersWGSL/gaussianSplatting.vertex.js.map +1 -1
  236. package/ShadersWGSL/iblCdfx.fragment.d.ts +5 -0
  237. package/ShadersWGSL/{iblShadowsCdfx.fragment.js → iblCdfx.fragment.js} +3 -3
  238. package/ShadersWGSL/iblCdfx.fragment.js.map +1 -0
  239. package/ShadersWGSL/iblCdfy.fragment.d.ts +5 -0
  240. package/ShadersWGSL/{iblShadowsCdfy.fragment.js → iblCdfy.fragment.js} +3 -3
  241. package/ShadersWGSL/iblCdfy.fragment.js.map +1 -0
  242. package/ShadersWGSL/iblIcdfx.fragment.d.ts +5 -0
  243. package/ShadersWGSL/{iblShadowsIcdfx.fragment.js → iblIcdfx.fragment.js} +3 -3
  244. package/ShadersWGSL/iblIcdfx.fragment.js.map +1 -0
  245. package/ShadersWGSL/iblIcdfy.fragment.d.ts +5 -0
  246. package/ShadersWGSL/{iblShadowsIcdfy.fragment.js → iblIcdfy.fragment.js} +3 -3
  247. package/ShadersWGSL/iblIcdfy.fragment.js.map +1 -0
  248. package/ShadersWGSL/importanceSamplingDebug.fragment.d.ts +5 -0
  249. package/ShadersWGSL/{iblShadowsImportanceSamplingDebug.fragment.js → importanceSamplingDebug.fragment.js} +3 -3
  250. package/ShadersWGSL/importanceSamplingDebug.fragment.js.map +1 -0
  251. package/ShadersWGSL/pbr.fragment.js +12 -0
  252. package/ShadersWGSL/pbr.fragment.js.map +1 -1
  253. package/package.json +1 -1
  254. package/scene.d.ts +4 -0
  255. package/scene.js +6 -0
  256. package/scene.js.map +1 -1
  257. package/sceneComponent.d.ts +1 -1
  258. package/sceneComponent.js +1 -1
  259. package/sceneComponent.js.map +1 -1
  260. package/Rendering/IBLShadows/iblShadowsImportanceSamplingRenderer.js.map +0 -1
  261. package/Shaders/iblShadowsCdfx.fragment.js.map +0 -1
  262. package/Shaders/iblShadowsCdfy.fragment.js.map +0 -1
  263. package/Shaders/iblShadowsIcdfx.fragment.js.map +0 -1
  264. package/Shaders/iblShadowsIcdfy.fragment.js.map +0 -1
  265. package/Shaders/iblShadowsImportanceSamplingDebug.fragment.d.ts +0 -5
  266. package/Shaders/iblShadowsImportanceSamplingDebug.fragment.js.map +0 -1
  267. package/ShadersWGSL/iblShadowsCdfx.fragment.d.ts +0 -5
  268. package/ShadersWGSL/iblShadowsCdfx.fragment.js.map +0 -1
  269. package/ShadersWGSL/iblShadowsCdfy.fragment.d.ts +0 -5
  270. package/ShadersWGSL/iblShadowsCdfy.fragment.js.map +0 -1
  271. package/ShadersWGSL/iblShadowsIcdfx.fragment.d.ts +0 -5
  272. package/ShadersWGSL/iblShadowsIcdfx.fragment.js.map +0 -1
  273. package/ShadersWGSL/iblShadowsIcdfy.fragment.d.ts +0 -5
  274. package/ShadersWGSL/iblShadowsIcdfy.fragment.js.map +0 -1
  275. package/ShadersWGSL/iblShadowsImportanceSamplingDebug.fragment.d.ts +0 -5
  276. package/ShadersWGSL/iblShadowsImportanceSamplingDebug.fragment.js.map +0 -1
@@ -109,6 +109,12 @@ var PLYValue;
109
109
  * Class used to render a gaussian splatting mesh
110
110
  */
111
111
  export class GaussianSplattingMesh extends Mesh {
112
+ /**
113
+ * SH degree. 0 = no sh (default). 1 = 3 parameters. 2 = 8 parameters. 3 = 15 parameters.
114
+ */
115
+ get shDegree() {
116
+ return this._shDegree;
117
+ }
112
118
  /**
113
119
  * Gets the covariancesA texture
114
120
  */
@@ -133,6 +139,12 @@ export class GaussianSplattingMesh extends Mesh {
133
139
  get colorsTexture() {
134
140
  return this._colorsTexture;
135
141
  }
142
+ /**
143
+ * Gets the SH textures
144
+ */
145
+ get shTextures() {
146
+ return this._shTextures;
147
+ }
136
148
  /**
137
149
  * set rendering material
138
150
  */
@@ -169,12 +181,14 @@ export class GaussianSplattingMesh extends Mesh {
169
181
  this._colorsTexture = null;
170
182
  this._splatPositions = null;
171
183
  this._splatIndex = null;
184
+ this._shTextures = null;
172
185
  //@ts-expect-error
173
186
  this._covariancesA = null;
174
187
  //@ts-expect-error
175
188
  this._covariancesB = null;
176
189
  //@ts-expect-error
177
190
  this._colors = null;
191
+ this._sh = null;
178
192
  this._keepInRam = false;
179
193
  this._delayedTextureUpdate = null;
180
194
  this._oldDirection = new Vector3();
@@ -182,6 +196,7 @@ export class GaussianSplattingMesh extends Mesh {
182
196
  this._material = null;
183
197
  this._tmpCovariances = [0, 0, 0, 0, 0, 0];
184
198
  this._sortIsDirty = false;
199
+ this._shDegree = 0;
185
200
  const vertexData = new VertexData();
186
201
  // Use an intanced quad or triangle. Triangle might be a bit faster because of less shader invocation but I didn't see any difference.
187
202
  // Keeping both and use triangle for now.
@@ -234,6 +249,7 @@ export class GaussianSplattingMesh extends Mesh {
234
249
  }
235
250
  return true;
236
251
  }
252
+ /** @internal */
237
253
  _postToWorker(forced = false) {
238
254
  const frameId = this.getScene().getFrameId();
239
255
  if ((forced || frameId !== this._frameIdLastUpdate) && this._worker && this._scene.activeCamera && this._canPostToWorker) {
@@ -693,10 +709,16 @@ export class GaussianSplattingMesh extends Mesh {
693
709
  this._covariancesBTexture?.dispose();
694
710
  this._centersTexture?.dispose();
695
711
  this._colorsTexture?.dispose();
712
+ if (this._shTextures) {
713
+ this._shTextures.forEach((shTexture) => {
714
+ shTexture.dispose();
715
+ });
716
+ }
696
717
  this._covariancesATexture = null;
697
718
  this._covariancesBTexture = null;
698
719
  this._centersTexture = null;
699
720
  this._colorsTexture = null;
721
+ this._shTextures = null;
700
722
  this._worker?.terminate();
701
723
  this._worker = null;
702
724
  super.dispose(doNotRecurse, true);
@@ -706,6 +728,12 @@ export class GaussianSplattingMesh extends Mesh {
706
728
  this._covariancesBTexture = source.covariancesBTexture?.clone();
707
729
  this._centersTexture = source.centersTexture?.clone();
708
730
  this._colorsTexture = source.colorsTexture?.clone();
731
+ if (source._shTextures) {
732
+ this._shTextures = [];
733
+ this._shTextures.forEach((shTexture) => {
734
+ this._shTextures?.push(shTexture.clone());
735
+ });
736
+ }
709
737
  }
710
738
  /**
711
739
  * Returns a new Mesh object generated from the current mesh properties.
@@ -771,7 +799,7 @@ export class GaussianSplattingMesh extends Mesh {
771
799
  colorArray[destinationIndex * 4 + 2] = uBuffer[32 * sourceIndex + 24 + 2];
772
800
  colorArray[destinationIndex * 4 + 3] = uBuffer[32 * sourceIndex + 24 + 3];
773
801
  }
774
- _updateTextures(covA, covB, colorArray) {
802
+ _updateTextures(covA, covB, colorArray, sh) {
775
803
  const textureSize = this._getTextureSize(this._vertexCount);
776
804
  // Update the textures
777
805
  const createTextureFromData = (data, width, height, format) => {
@@ -780,6 +808,9 @@ export class GaussianSplattingMesh extends Mesh {
780
808
  const createTextureFromDataU8 = (data, width, height, format) => {
781
809
  return new RawTexture(data, width, height, format, this._scene, false, false, 2, 0);
782
810
  };
811
+ const createTextureFromDataU32 = (data, width, height, format) => {
812
+ return new RawTexture(data, width, height, format, this._scene, false, false, 1, 7);
813
+ };
783
814
  const createTextureFromDataF16 = (data, width, height, format) => {
784
815
  return new RawTexture(data, width, height, format, this._scene, false, false, 2, 2);
785
816
  };
@@ -787,9 +818,12 @@ export class GaussianSplattingMesh extends Mesh {
787
818
  this._covariancesA = covA;
788
819
  this._covariancesB = covB;
789
820
  this._colors = colorArray;
821
+ if (sh) {
822
+ this._sh = sh;
823
+ }
790
824
  }
791
825
  if (this._covariancesATexture) {
792
- this._delayedTextureUpdate = { covA: covA, covB: covB, colors: colorArray, centers: this._splatPositions };
826
+ this._delayedTextureUpdate = { covA: covA, covB: covB, colors: colorArray, centers: this._splatPositions, sh: sh };
793
827
  const positions = Float32Array.from(this._splatPositions);
794
828
  const vertexCount = this._vertexCount;
795
829
  this._worker.postMessage({ positions, vertexCount }, [positions.buffer]);
@@ -800,10 +834,20 @@ export class GaussianSplattingMesh extends Mesh {
800
834
  this._covariancesBTexture = createTextureFromDataF16(covB, textureSize.x, textureSize.y, this._useRGBACovariants ? 5 : 7);
801
835
  this._centersTexture = createTextureFromData(this._splatPositions, textureSize.x, textureSize.y, 5);
802
836
  this._colorsTexture = createTextureFromDataU8(colorArray, textureSize.x, textureSize.y, 5);
837
+ if (sh) {
838
+ this._shTextures = [];
839
+ sh.forEach((shData) => {
840
+ const buffer = new Uint32Array(shData.buffer);
841
+ const shTexture = createTextureFromDataU32(buffer, textureSize.x, textureSize.y, 11);
842
+ shTexture.wrapU = 0;
843
+ shTexture.wrapV = 0;
844
+ this._shTextures.push(shTexture);
845
+ });
846
+ }
803
847
  this._instanciateWorker();
804
848
  }
805
849
  }
806
- *_updateData(data, isAsync) {
850
+ *_updateData(data, isAsync, sh) {
807
851
  // if a covariance texture is present, then it's not a creation but an update
808
852
  if (!this._covariancesATexture) {
809
853
  this._readyToDisplay = false;
@@ -816,6 +860,8 @@ export class GaussianSplattingMesh extends Mesh {
816
860
  this._updateSplatIndexBuffer(vertexCount);
817
861
  }
818
862
  this._vertexCount = vertexCount;
863
+ // degree == 1 for 1 texture (3 terms), 2 for 2 textures(8 terms) and 3 for 3 textures (15 terms)
864
+ this._shDegree = sh ? sh.length : 0;
819
865
  const textureSize = this._getTextureSize(vertexCount);
820
866
  const textureLength = textureSize.x * textureSize.y;
821
867
  const lineCountUpdate = GaussianSplattingMesh.ProgressiveUpdateAmount ?? textureSize.y;
@@ -828,7 +874,7 @@ export class GaussianSplattingMesh extends Mesh {
828
874
  const maximum = new Vector3(-Number.MAX_VALUE, -Number.MAX_VALUE, -Number.MAX_VALUE);
829
875
  if (GaussianSplattingMesh.ProgressiveUpdateAmount) {
830
876
  // create textures with not filled-yet array, then update directly portions of it
831
- this._updateTextures(covA, covB, colorArray);
877
+ this._updateTextures(covA, covB, colorArray, sh);
832
878
  this.setEnabled(true);
833
879
  const partCount = Math.ceil(textureSize.y / lineCountUpdate);
834
880
  for (let partIndex = 0; partIndex < partCount; partIndex++) {
@@ -858,7 +904,7 @@ export class GaussianSplattingMesh extends Mesh {
858
904
  }
859
905
  }
860
906
  // textures
861
- this._updateTextures(covA, covB, colorArray);
907
+ this._updateTextures(covA, covB, colorArray, sh);
862
908
  // Update the binfo
863
909
  this.getBoundingInfo().reConstruct(minimum, maximum, this.getWorldMatrix());
864
910
  this.setEnabled(true);
@@ -868,18 +914,20 @@ export class GaussianSplattingMesh extends Mesh {
868
914
  /**
869
915
  * Update asynchronously the buffer
870
916
  * @param data array buffer containing center, color, orientation and scale of splats
917
+ * @param sh optional array of uint8 array for SH data
871
918
  * @returns a promise
872
919
  */
873
- async updateDataAsync(data) {
874
- return runCoroutineAsync(this._updateData(data, true), createYieldingScheduler());
920
+ async updateDataAsync(data, sh) {
921
+ return runCoroutineAsync(this._updateData(data, true, sh), createYieldingScheduler());
875
922
  }
876
923
  /**
877
924
  * @experimental
878
925
  * Update data from GS (position, orientation, color, scaling)
879
926
  * @param data array that contain all the datas
927
+ * @param sh optional array of uint8 array for SH data
880
928
  */
881
- updateData(data) {
882
- runCoroutineSync(this._updateData(data, false));
929
+ updateData(data, sh) {
930
+ runCoroutineSync(this._updateData(data, false, sh));
883
931
  }
884
932
  // in case size is different
885
933
  _updateSplatIndexBuffer(vertexCount) {
@@ -889,16 +937,10 @@ export class GaussianSplattingMesh extends Mesh {
889
937
  }
890
938
  this.forcedInstanceCount = vertexCount;
891
939
  }
892
- _updateSubTextures(centers, covA, covB, colors, lineStart, lineCount) {
940
+ _updateSubTextures(centers, covA, covB, colors, lineStart, lineCount, sh) {
893
941
  const updateTextureFromData = (texture, data, width, lineStart, lineCount) => {
894
942
  this.getEngine().updateTextureData(texture.getInternalTexture(), data, 0, lineStart, width, lineCount, 0, 0, false);
895
943
  };
896
- const updateTextureFromDataU8 = (texture, data, width, lineStart, lineCount) => {
897
- this.getEngine().updateTextureData(texture.getInternalTexture(), data, 0, lineStart, width, lineCount, 0, 0, false);
898
- };
899
- const updateTextureFromDataF16 = (texture, data, width, lineStart, lineCount) => {
900
- this.getEngine().updateTextureData(texture.getInternalTexture(), data, 0, lineStart, width, lineCount, 0, 0, false);
901
- };
902
944
  const textureSize = this._getTextureSize(this._vertexCount);
903
945
  const covBSItemSize = this._useRGBACovariants ? 4 : 2;
904
946
  const texelStart = lineStart * textureSize.x;
@@ -907,10 +949,17 @@ export class GaussianSplattingMesh extends Mesh {
907
949
  const covBView = new Uint16Array(covB.buffer, texelStart * covBSItemSize * Uint16Array.BYTES_PER_ELEMENT, texelCount * covBSItemSize);
908
950
  const colorsView = new Uint8Array(colors.buffer, texelStart * 4, texelCount * 4);
909
951
  const centersView = new Float32Array(centers.buffer, texelStart * 4 * Float32Array.BYTES_PER_ELEMENT, texelCount * 4);
910
- updateTextureFromDataF16(this._covariancesATexture, covAView, textureSize.x, lineStart, lineCount);
911
- updateTextureFromDataF16(this._covariancesBTexture, covBView, textureSize.x, lineStart, lineCount);
952
+ updateTextureFromData(this._covariancesATexture, covAView, textureSize.x, lineStart, lineCount);
953
+ updateTextureFromData(this._covariancesBTexture, covBView, textureSize.x, lineStart, lineCount);
912
954
  updateTextureFromData(this._centersTexture, centersView, textureSize.x, lineStart, lineCount);
913
- updateTextureFromDataU8(this._colorsTexture, colorsView, textureSize.x, lineStart, lineCount);
955
+ updateTextureFromData(this._colorsTexture, colorsView, textureSize.x, lineStart, lineCount);
956
+ if (sh) {
957
+ for (let i = 0; i < sh.length; i++) {
958
+ const componentCount = 4;
959
+ const shView = new Uint8Array(this._sh[i].buffer, texelStart * componentCount, texelCount * componentCount);
960
+ updateTextureFromData(this._shTextures[i], shView, textureSize.x, lineStart, lineCount);
961
+ }
962
+ }
914
963
  }
915
964
  _instanciateWorker() {
916
965
  if (!this._vertexCount) {
@@ -936,7 +985,7 @@ export class GaussianSplattingMesh extends Mesh {
936
985
  }
937
986
  if (this._delayedTextureUpdate) {
938
987
  const textureSize = this._getTextureSize(vertexCount);
939
- this._updateSubTextures(this._delayedTextureUpdate.centers, this._delayedTextureUpdate.covA, this._delayedTextureUpdate.covB, this._delayedTextureUpdate.colors, 0, textureSize.y);
988
+ this._updateSubTextures(this._delayedTextureUpdate.centers, this._delayedTextureUpdate.covA, this._delayedTextureUpdate.covB, this._delayedTextureUpdate.colors, 0, textureSize.y, this._delayedTextureUpdate.sh);
940
989
  this._delayedTextureUpdate = null;
941
990
  }
942
991
  this.thinInstanceBufferUpdated("splatIndex");