@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.
- package/Cameras/arcRotateCamera.d.ts +3 -1
- package/Cameras/arcRotateCamera.js +14 -3
- package/Cameras/arcRotateCamera.js.map +1 -1
- package/Collisions/gpuPicker.js.map +1 -1
- package/Engines/Extensions/engine.multiRender.js.map +1 -1
- package/Engines/Extensions/engine.rawTexture.d.ts +8 -8
- package/Engines/Extensions/engine.rawTexture.js.map +1 -1
- package/Engines/Extensions/engine.renderTarget.js.map +1 -1
- package/Engines/Extensions/engine.renderTargetCube.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.multiRender.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.rawTexture.d.ts +9 -9
- package/Engines/WebGPU/Extensions/engine.rawTexture.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.renderTargetCube.js.map +1 -1
- package/Engines/WebGPU/webgpuConstants.d.ts +6 -0
- package/Engines/WebGPU/webgpuConstants.js +6 -0
- package/Engines/WebGPU/webgpuConstants.js.map +1 -1
- package/Engines/WebGPU/webgpuTextureHelper.js +18 -0
- package/Engines/WebGPU/webgpuTextureHelper.js.map +1 -1
- package/Engines/WebGPU/webgpuTextureManager.js +6 -0
- package/Engines/WebGPU/webgpuTextureManager.js.map +1 -1
- package/Engines/abstractEngine.d.ts +1 -1
- package/Engines/abstractEngine.js +4 -4
- package/Engines/abstractEngine.js.map +1 -1
- package/Engines/constants.d.ts +17 -1
- package/Engines/constants.js +17 -1
- package/Engines/constants.js.map +1 -1
- package/Engines/engine.d.ts +31 -1
- package/Engines/engine.js +17 -1
- package/Engines/engine.js.map +1 -1
- package/Engines/engineCapabilities.d.ts +2 -0
- package/Engines/engineCapabilities.js.map +1 -1
- package/Engines/nativeEngine.js +1 -0
- package/Engines/nativeEngine.js.map +1 -1
- package/Engines/nullEngine.d.ts +2 -2
- package/Engines/nullEngine.js +3 -2
- package/Engines/nullEngine.js.map +1 -1
- package/Engines/thinEngine.functions.d.ts +4 -0
- package/Engines/thinEngine.functions.js +17 -0
- package/Engines/thinEngine.functions.js.map +1 -1
- package/Engines/thinEngine.js +39 -9
- package/Engines/thinEngine.js.map +1 -1
- package/Engines/webgpuEngine.js +1 -0
- package/Engines/webgpuEngine.js.map +1 -1
- package/Helpers/environmentHelper.js.map +1 -1
- package/Layers/effectLayer.d.ts +1 -1
- package/Layers/effectLayer.js.map +1 -1
- package/Layers/glowLayer.d.ts +1 -1
- package/Layers/glowLayer.js.map +1 -1
- package/Layers/highlightLayer.d.ts +1 -1
- package/Layers/highlightLayer.js.map +1 -1
- package/Lights/Shadows/shadowGenerator.js.map +1 -1
- package/Materials/GaussianSplatting/gaussianSplattingMaterial.js +12 -2
- package/Materials/GaussianSplatting/gaussianSplattingMaterial.js.map +1 -1
- package/Materials/GreasedLine/greasedLineMaterialInterfaces.d.ts +5 -0
- package/Materials/GreasedLine/greasedLineMaterialInterfaces.js.map +1 -1
- package/Materials/GreasedLine/greasedLinePluginMaterial.d.ts +21 -5
- package/Materials/GreasedLine/greasedLinePluginMaterial.js +52 -176
- package/Materials/GreasedLine/greasedLinePluginMaterial.js.map +1 -1
- package/Materials/GreasedLine/greasedLinePluginMaterialShadersGLSL.d.ts +11 -0
- package/Materials/GreasedLine/greasedLinePluginMaterialShadersGLSL.js +158 -0
- package/Materials/GreasedLine/greasedLinePluginMaterialShadersGLSL.js.map +1 -0
- package/Materials/GreasedLine/greasedLinePluginMaterialShadersWGSL.d.ts +11 -0
- package/Materials/GreasedLine/greasedLinePluginMaterialShadersWGSL.js +177 -0
- package/Materials/GreasedLine/greasedLinePluginMaterialShadersWGSL.js.map +1 -0
- package/Materials/Node/Blocks/PBR/reflectionBlock.js +6 -0
- package/Materials/Node/Blocks/PBR/reflectionBlock.js.map +1 -1
- package/Materials/Node/Blocks/index.d.ts +1 -0
- package/Materials/Node/Blocks/index.js +1 -0
- package/Materials/Node/Blocks/index.js.map +1 -1
- package/Materials/Node/Blocks/matrixSplitterBlock.d.ts +56 -0
- package/Materials/Node/Blocks/matrixSplitterBlock.js +130 -0
- package/Materials/Node/Blocks/matrixSplitterBlock.js.map +1 -0
- package/Materials/Node/nodeMaterial.js.map +1 -1
- package/Materials/PBR/pbrBaseMaterial.d.ts +1 -0
- package/Materials/PBR/pbrBaseMaterial.js +12 -0
- package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
- package/Materials/Textures/MultiviewRenderTarget.js.map +1 -1
- package/Materials/Textures/Procedurals/proceduralTexture.js.map +1 -1
- package/Materials/Textures/baseTexture.js.map +1 -1
- package/Materials/Textures/colorGradingTexture.js.map +1 -1
- package/Materials/Textures/mirrorTexture.js.map +1 -1
- package/Materials/Textures/multiRenderTarget.js.map +1 -1
- package/Materials/Textures/rawCubeTexture.d.ts +2 -2
- package/Materials/Textures/rawCubeTexture.js +2 -2
- package/Materials/Textures/rawCubeTexture.js.map +1 -1
- package/Materials/Textures/rawTexture.js.map +1 -1
- package/Materials/Textures/rawTexture2DArray.d.ts +1 -1
- package/Materials/Textures/rawTexture2DArray.js +1 -1
- package/Materials/Textures/rawTexture2DArray.js.map +1 -1
- package/Materials/Textures/rawTexture3D.d.ts +1 -1
- package/Materials/Textures/rawTexture3D.js +1 -1
- package/Materials/Textures/rawTexture3D.js.map +1 -1
- package/Materials/Textures/renderTargetTexture.js.map +1 -1
- package/Materials/drawWrapper.d.ts +6 -1
- package/Materials/drawWrapper.js +18 -2
- package/Materials/drawWrapper.js.map +1 -1
- package/Materials/effect.d.ts +6 -1
- package/Materials/effect.functions.d.ts +5 -0
- package/Materials/effect.functions.js +19 -0
- package/Materials/effect.functions.js.map +1 -1
- package/Materials/effect.js +22 -20
- package/Materials/effect.js.map +1 -1
- package/Materials/effect.webgl.functions.js +12 -4
- package/Materials/effect.webgl.functions.js.map +1 -1
- package/Materials/effectRenderer.js +1 -1
- package/Materials/effectRenderer.js.map +1 -1
- package/Maths/math.scalar.d.ts +0 -1
- package/Maths/math.scalar.js +1 -2
- package/Maths/math.scalar.js.map +1 -1
- package/Meshes/Builders/greasedLineBuilder.js +2 -2
- package/Meshes/Builders/greasedLineBuilder.js.map +1 -1
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.d.ts +17 -3
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.js +69 -20
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.js.map +1 -1
- package/Meshes/abstractMesh.d.ts +5 -3
- package/Meshes/abstractMesh.hotSpot.d.ts +8 -1
- package/Meshes/abstractMesh.hotSpot.js +17 -0
- package/Meshes/abstractMesh.hotSpot.js.map +1 -1
- package/Meshes/abstractMesh.js +9 -7
- package/Meshes/abstractMesh.js.map +1 -1
- package/Meshes/linesMesh.js +1 -1
- package/Meshes/linesMesh.js.map +1 -1
- package/Meshes/subMesh.d.ts +5 -3
- package/Meshes/subMesh.js +9 -7
- package/Meshes/subMesh.js.map +1 -1
- package/Misc/HighDynamicRange/cubemapToSphericalPolynomial.js.map +1 -1
- package/Misc/dds.d.ts +1 -1
- package/Misc/dds.js.map +1 -1
- package/Misc/environmentTextureTools.js.map +1 -1
- package/Misc/observable.d.ts +1 -3
- package/Misc/observable.js +7 -7
- package/Misc/observable.js.map +1 -1
- package/Misc/screenshotTools.js.map +1 -1
- package/Misc/snapshotRenderingHelper.js +3 -0
- package/Misc/snapshotRenderingHelper.js.map +1 -1
- package/Misc/textureTools.js.map +1 -1
- package/Misc/virtualJoystick.js +2 -0
- package/Misc/virtualJoystick.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/defaultRenderingPipeline.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.d.ts +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/ssaoRenderingPipeline.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/standardRenderingPipeline.js.map +1 -1
- package/PostProcesses/bloomMergePostProcess.js.map +1 -1
- package/PostProcesses/blurPostProcess.js.map +1 -1
- package/PostProcesses/chromaticAberrationPostProcess.js.map +1 -1
- package/PostProcesses/circleOfConfusionPostProcess.js.map +1 -1
- package/PostProcesses/convolutionPostProcess.js.map +1 -1
- package/PostProcesses/depthOfFieldBlurPostProcess.js.map +1 -1
- package/PostProcesses/depthOfFieldMergePostProcess.js.map +1 -1
- package/PostProcesses/extractHighlightsPostProcess.js.map +1 -1
- package/PostProcesses/fxaaPostProcess.js.map +1 -1
- package/PostProcesses/grainPostProcess.js.map +1 -1
- package/PostProcesses/highlightsPostProcess.d.ts +1 -1
- package/PostProcesses/highlightsPostProcess.js +1 -1
- package/PostProcesses/highlightsPostProcess.js.map +1 -1
- package/PostProcesses/imageProcessingPostProcess.js.map +1 -1
- package/PostProcesses/motionBlurPostProcess.js.map +1 -1
- package/PostProcesses/passPostProcess.js.map +1 -1
- package/PostProcesses/postProcess.d.ts +1 -1
- package/PostProcesses/postProcess.js.map +1 -1
- package/PostProcesses/screenSpaceCurvaturePostProcess.js.map +1 -1
- package/PostProcesses/screenSpaceReflectionPostProcess.js.map +1 -1
- package/PostProcesses/sharpenPostProcess.js.map +1 -1
- package/PostProcesses/subSurfaceScatteringPostProcess.js.map +1 -1
- package/PostProcesses/tonemapPostProcess.d.ts +1 -1
- package/PostProcesses/tonemapPostProcess.js +1 -1
- package/PostProcesses/tonemapPostProcess.js.map +1 -1
- package/PostProcesses/volumetricLightScatteringPostProcess.js.map +1 -1
- package/Rendering/IBLShadows/iblShadowsRenderPipeline.d.ts +3 -23
- package/Rendering/IBLShadows/iblShadowsRenderPipeline.js +30 -67
- package/Rendering/IBLShadows/iblShadowsRenderPipeline.js.map +1 -1
- package/Rendering/IBLShadows/iblShadowsSpatialBlurPass.js.map +1 -1
- package/Rendering/IBLShadows/iblShadowsVoxelTracingPass.d.ts +1 -1
- package/Rendering/IBLShadows/iblShadowsVoxelTracingPass.js +8 -4
- package/Rendering/IBLShadows/iblShadowsVoxelTracingPass.js.map +1 -1
- package/Rendering/{IBLShadows/iblShadowsImportanceSamplingRenderer.d.ts → iblCdfGenerator.d.ts} +15 -12
- package/Rendering/{IBLShadows/iblShadowsImportanceSamplingRenderer.js → iblCdfGenerator.js} +37 -27
- package/Rendering/iblCdfGenerator.js.map +1 -0
- package/Rendering/iblCdfGeneratorSceneComponent.d.ts +59 -0
- package/Rendering/iblCdfGeneratorSceneComponent.js +83 -0
- package/Rendering/iblCdfGeneratorSceneComponent.js.map +1 -0
- package/Rendering/index.d.ts +12 -10
- package/Rendering/index.js +12 -10
- package/Rendering/index.js.map +1 -1
- package/Rendering/prePassRenderer.js.map +1 -1
- package/Shaders/ShadersInclude/gaussianSplatting.js +72 -2
- package/Shaders/ShadersInclude/gaussianSplatting.js.map +1 -1
- package/Shaders/ShadersInclude/gaussianSplattingVertexDeclaration.js +1 -1
- package/Shaders/ShadersInclude/gaussianSplattingVertexDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/hdrFilteringFunctions.js +29 -4
- package/Shaders/ShadersInclude/hdrFilteringFunctions.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockReflection.js +9 -1
- package/Shaders/ShadersInclude/pbrBlockReflection.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockSubSurface.js +9 -1
- package/Shaders/ShadersInclude/pbrBlockSubSurface.js.map +1 -1
- package/Shaders/ShadersInclude/pbrFragmentSamplersDeclaration.js +3 -0
- package/Shaders/ShadersInclude/pbrFragmentSamplersDeclaration.js.map +1 -1
- package/Shaders/gaussianSplatting.vertex.js +16 -2
- package/Shaders/gaussianSplatting.vertex.js.map +1 -1
- package/Shaders/{iblShadowsCdfy.fragment.d.ts → iblCdfx.fragment.d.ts} +1 -1
- package/Shaders/{iblShadowsCdfx.fragment.js → iblCdfx.fragment.js} +3 -3
- package/Shaders/iblCdfx.fragment.js.map +1 -0
- package/Shaders/{iblShadowsCdfx.fragment.d.ts → iblCdfy.fragment.d.ts} +1 -1
- package/Shaders/{iblShadowsCdfy.fragment.js → iblCdfy.fragment.js} +3 -3
- package/Shaders/iblCdfy.fragment.js.map +1 -0
- package/Shaders/{iblShadowsIcdfx.fragment.d.ts → iblIcdfx.fragment.d.ts} +1 -1
- package/Shaders/{iblShadowsIcdfx.fragment.js → iblIcdfx.fragment.js} +3 -3
- package/Shaders/iblIcdfx.fragment.js.map +1 -0
- package/Shaders/{iblShadowsIcdfy.fragment.d.ts → iblIcdfy.fragment.d.ts} +1 -1
- package/Shaders/{iblShadowsIcdfy.fragment.js → iblIcdfy.fragment.js} +3 -3
- package/Shaders/iblIcdfy.fragment.js.map +1 -0
- package/Shaders/importanceSamplingDebug.fragment.d.ts +5 -0
- package/Shaders/{iblShadowsImportanceSamplingDebug.fragment.js → importanceSamplingDebug.fragment.js} +3 -3
- package/Shaders/importanceSamplingDebug.fragment.js.map +1 -0
- package/Shaders/pbr.fragment.js +8 -0
- package/Shaders/pbr.fragment.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/gaussianSplatting.js +77 -1
- package/ShadersWGSL/ShadersInclude/gaussianSplatting.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/hdrFilteringFunctions.js +28 -4
- package/ShadersWGSL/ShadersInclude/hdrFilteringFunctions.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/lightFragment.js +1 -1
- package/ShadersWGSL/ShadersInclude/lightFragment.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/oitFragment.js +1 -1
- package/ShadersWGSL/ShadersInclude/oitFragment.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/pbrBlockReflection.js +14 -1
- package/ShadersWGSL/ShadersInclude/pbrBlockReflection.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/pbrBlockSubSurface.js +14 -1
- package/ShadersWGSL/ShadersInclude/pbrBlockSubSurface.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/pbrFragmentSamplersDeclaration.js +3 -0
- package/ShadersWGSL/ShadersInclude/pbrFragmentSamplersDeclaration.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/shadowsFragmentFunctions.js +1 -1
- package/ShadersWGSL/ShadersInclude/shadowsFragmentFunctions.js.map +1 -1
- package/ShadersWGSL/gaussianSplatting.vertex.js +18 -2
- package/ShadersWGSL/gaussianSplatting.vertex.js.map +1 -1
- package/ShadersWGSL/iblCdfx.fragment.d.ts +5 -0
- package/ShadersWGSL/{iblShadowsCdfx.fragment.js → iblCdfx.fragment.js} +3 -3
- package/ShadersWGSL/iblCdfx.fragment.js.map +1 -0
- package/ShadersWGSL/iblCdfy.fragment.d.ts +5 -0
- package/ShadersWGSL/{iblShadowsCdfy.fragment.js → iblCdfy.fragment.js} +3 -3
- package/ShadersWGSL/iblCdfy.fragment.js.map +1 -0
- package/ShadersWGSL/iblIcdfx.fragment.d.ts +5 -0
- package/ShadersWGSL/{iblShadowsIcdfx.fragment.js → iblIcdfx.fragment.js} +3 -3
- package/ShadersWGSL/iblIcdfx.fragment.js.map +1 -0
- package/ShadersWGSL/iblIcdfy.fragment.d.ts +5 -0
- package/ShadersWGSL/{iblShadowsIcdfy.fragment.js → iblIcdfy.fragment.js} +3 -3
- package/ShadersWGSL/iblIcdfy.fragment.js.map +1 -0
- package/ShadersWGSL/importanceSamplingDebug.fragment.d.ts +5 -0
- package/ShadersWGSL/{iblShadowsImportanceSamplingDebug.fragment.js → importanceSamplingDebug.fragment.js} +3 -3
- package/ShadersWGSL/importanceSamplingDebug.fragment.js.map +1 -0
- package/ShadersWGSL/pbr.fragment.js +12 -0
- package/ShadersWGSL/pbr.fragment.js.map +1 -1
- package/package.json +1 -1
- package/scene.d.ts +4 -0
- package/scene.js +6 -0
- package/scene.js.map +1 -1
- package/sceneComponent.d.ts +1 -1
- package/sceneComponent.js +1 -1
- package/sceneComponent.js.map +1 -1
- package/Rendering/IBLShadows/iblShadowsImportanceSamplingRenderer.js.map +0 -1
- package/Shaders/iblShadowsCdfx.fragment.js.map +0 -1
- package/Shaders/iblShadowsCdfy.fragment.js.map +0 -1
- package/Shaders/iblShadowsIcdfx.fragment.js.map +0 -1
- package/Shaders/iblShadowsIcdfy.fragment.js.map +0 -1
- package/Shaders/iblShadowsImportanceSamplingDebug.fragment.d.ts +0 -5
- package/Shaders/iblShadowsImportanceSamplingDebug.fragment.js.map +0 -1
- package/ShadersWGSL/iblShadowsCdfx.fragment.d.ts +0 -5
- package/ShadersWGSL/iblShadowsCdfx.fragment.js.map +0 -1
- package/ShadersWGSL/iblShadowsCdfy.fragment.d.ts +0 -5
- package/ShadersWGSL/iblShadowsCdfy.fragment.js.map +0 -1
- package/ShadersWGSL/iblShadowsIcdfx.fragment.d.ts +0 -5
- package/ShadersWGSL/iblShadowsIcdfx.fragment.js.map +0 -1
- package/ShadersWGSL/iblShadowsIcdfy.fragment.d.ts +0 -5
- package/ShadersWGSL/iblShadowsIcdfy.fragment.js.map +0 -1
- package/ShadersWGSL/iblShadowsImportanceSamplingDebug.fragment.d.ts +0 -5
- 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
|
-
|
|
911
|
-
|
|
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
|
-
|
|
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");
|