@babylonjs/core 7.42.0 → 7.44.0
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/Actions/actionEvent.d.ts +4 -4
- package/Animations/animation.js +1 -1
- package/Animations/animation.js.map +1 -1
- package/Buffers/bufferUtils.d.ts +8 -1
- package/Buffers/bufferUtils.js +15 -0
- package/Buffers/bufferUtils.js.map +1 -1
- package/Culling/Helper/boundingInfoHelper.d.ts +2 -9
- package/Culling/Helper/boundingInfoHelper.js +2 -9
- package/Culling/Helper/boundingInfoHelper.js.map +1 -1
- package/Culling/Helper/computeShaderBoundingHelper.js +3 -4
- package/Culling/Helper/computeShaderBoundingHelper.js.map +1 -1
- package/Culling/Helper/transformFeedbackBoundingHelper.js +27 -64
- package/Culling/Helper/transformFeedbackBoundingHelper.js.map +1 -1
- package/Engines/Extensions/engine.multiRender.js +3 -2
- package/Engines/Extensions/engine.multiRender.js.map +1 -1
- package/Engines/WebGPU/webgpuCacheRenderPipeline.d.ts +1 -0
- package/Engines/WebGPU/webgpuCacheRenderPipeline.js +5 -0
- package/Engines/WebGPU/webgpuCacheRenderPipeline.js.map +1 -1
- package/Engines/WebGPU/webgpuTextureManager.js +6 -1
- package/Engines/WebGPU/webgpuTextureManager.js.map +1 -1
- package/Engines/abstractEngine.js +2 -2
- package/Engines/abstractEngine.js.map +1 -1
- package/Engines/engine.d.ts +5 -2
- package/FlowGraph/flowGraphConnection.d.ts +1 -1
- package/FrameGraph/Node/Blocks/Layers/glowLayerBlock.d.ts +64 -0
- package/FrameGraph/Node/Blocks/Layers/glowLayerBlock.js +147 -0
- package/FrameGraph/Node/Blocks/Layers/glowLayerBlock.js.map +1 -0
- package/FrameGraph/Node/Blocks/PostProcesses/basePostProcessBlock.d.ts +42 -0
- package/FrameGraph/Node/Blocks/PostProcesses/basePostProcessBlock.js +78 -0
- package/FrameGraph/Node/Blocks/PostProcesses/basePostProcessBlock.js.map +1 -0
- package/FrameGraph/Node/Blocks/PostProcesses/blackAndWhitePostProcessBlock.d.ts +3 -19
- package/FrameGraph/Node/Blocks/PostProcesses/blackAndWhitePostProcessBlock.js +3 -49
- package/FrameGraph/Node/Blocks/PostProcesses/blackAndWhitePostProcessBlock.js.map +1 -1
- package/FrameGraph/Node/Blocks/PostProcesses/bloomPostProcessBlock.d.ts +3 -19
- package/FrameGraph/Node/Blocks/PostProcesses/bloomPostProcessBlock.js +3 -49
- package/FrameGraph/Node/Blocks/PostProcesses/bloomPostProcessBlock.js.map +1 -1
- package/FrameGraph/Node/Blocks/PostProcesses/blurPostProcessBlock.d.ts +3 -19
- package/FrameGraph/Node/Blocks/PostProcesses/blurPostProcessBlock.js +3 -49
- package/FrameGraph/Node/Blocks/PostProcesses/blurPostProcessBlock.js.map +1 -1
- package/FrameGraph/Node/Blocks/PostProcesses/circleOfConfusionPostProcessBlock.d.ts +2 -17
- package/FrameGraph/Node/Blocks/PostProcesses/circleOfConfusionPostProcessBlock.js +3 -45
- package/FrameGraph/Node/Blocks/PostProcesses/circleOfConfusionPostProcessBlock.js.map +1 -1
- package/FrameGraph/Node/Blocks/PostProcesses/depthOfFieldPostProcessBlock.d.ts +2 -17
- package/FrameGraph/Node/Blocks/PostProcesses/depthOfFieldPostProcessBlock.js +3 -44
- package/FrameGraph/Node/Blocks/PostProcesses/depthOfFieldPostProcessBlock.js.map +1 -1
- package/FrameGraph/Node/Blocks/PostProcesses/extractHighlightsPostProcessBlock.d.ts +3 -19
- package/FrameGraph/Node/Blocks/PostProcesses/extractHighlightsPostProcessBlock.js +3 -49
- package/FrameGraph/Node/Blocks/PostProcesses/extractHighlightsPostProcessBlock.js.map +1 -1
- package/FrameGraph/Node/Blocks/PostProcesses/passPostProcessBlock.d.ts +47 -0
- package/FrameGraph/Node/Blocks/PostProcesses/passPostProcessBlock.js +65 -0
- package/FrameGraph/Node/Blocks/PostProcesses/passPostProcessBlock.js.map +1 -0
- package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.js +0 -15
- package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.js.map +1 -1
- package/FrameGraph/Node/Blocks/Rendering/baseShadowGeneratorBlock.d.ts +4 -0
- package/FrameGraph/Node/Blocks/Rendering/baseShadowGeneratorBlock.js +9 -0
- package/FrameGraph/Node/Blocks/Rendering/baseShadowGeneratorBlock.js.map +1 -1
- package/FrameGraph/Node/Blocks/Rendering/csmShadowGeneratorBlock.d.ts +1 -6
- package/FrameGraph/Node/Blocks/Rendering/csmShadowGeneratorBlock.js +0 -13
- package/FrameGraph/Node/Blocks/Rendering/csmShadowGeneratorBlock.js.map +1 -1
- package/FrameGraph/Node/Blocks/Rendering/shadowGeneratorBlock.js +0 -1
- package/FrameGraph/Node/Blocks/Rendering/shadowGeneratorBlock.js.map +1 -1
- package/FrameGraph/Node/Blocks/index.d.ts +2 -0
- package/FrameGraph/Node/Blocks/index.js +2 -0
- package/FrameGraph/Node/Blocks/index.js.map +1 -1
- package/FrameGraph/Node/nodeRenderGraphBlock.js +17 -0
- package/FrameGraph/Node/nodeRenderGraphBlock.js.map +1 -1
- package/FrameGraph/Passes/renderPass.d.ts +0 -8
- package/FrameGraph/Passes/renderPass.js +0 -10
- package/FrameGraph/Passes/renderPass.js.map +1 -1
- package/FrameGraph/Tasks/Layers/glowLayerTask.d.ts +57 -0
- package/FrameGraph/Tasks/Layers/glowLayerTask.js +173 -0
- package/FrameGraph/Tasks/Layers/glowLayerTask.js.map +1 -0
- package/FrameGraph/Tasks/PostProcesses/bloomMergeTask.js +1 -1
- package/FrameGraph/Tasks/PostProcesses/bloomMergeTask.js.map +1 -1
- package/FrameGraph/Tasks/PostProcesses/bloomTask.js +7 -0
- package/FrameGraph/Tasks/PostProcesses/bloomTask.js.map +1 -1
- package/FrameGraph/Tasks/PostProcesses/circleOfConfusionTask.js +1 -1
- package/FrameGraph/Tasks/PostProcesses/circleOfConfusionTask.js.map +1 -1
- package/FrameGraph/Tasks/PostProcesses/depthOfFieldBlurTask.js +1 -1
- package/FrameGraph/Tasks/PostProcesses/depthOfFieldBlurTask.js.map +1 -1
- package/FrameGraph/Tasks/PostProcesses/depthOfFieldMergeTask.js +5 -5
- package/FrameGraph/Tasks/PostProcesses/depthOfFieldMergeTask.js.map +1 -1
- package/FrameGraph/Tasks/PostProcesses/depthOfFieldTask.js +12 -4
- package/FrameGraph/Tasks/PostProcesses/depthOfFieldTask.js.map +1 -1
- package/FrameGraph/Tasks/PostProcesses/passTask.d.ts +29 -0
- package/FrameGraph/Tasks/PostProcesses/passTask.js +31 -0
- package/FrameGraph/Tasks/PostProcesses/passTask.js.map +1 -0
- package/FrameGraph/Tasks/PostProcesses/postProcessTask.js +1 -1
- package/FrameGraph/Tasks/PostProcesses/postProcessTask.js.map +1 -1
- package/FrameGraph/Tasks/Rendering/csmShadowGeneratorTask.d.ts +0 -8
- package/FrameGraph/Tasks/Rendering/csmShadowGeneratorTask.js +1 -17
- package/FrameGraph/Tasks/Rendering/csmShadowGeneratorTask.js.map +1 -1
- package/FrameGraph/Tasks/Rendering/geometryRendererTask.js +3 -0
- package/FrameGraph/Tasks/Rendering/geometryRendererTask.js.map +1 -1
- package/FrameGraph/Tasks/Rendering/objectRendererTask.d.ts +4 -6
- package/FrameGraph/Tasks/Rendering/objectRendererTask.js +20 -22
- package/FrameGraph/Tasks/Rendering/objectRendererTask.js.map +1 -1
- package/FrameGraph/Tasks/Rendering/shadowGeneratorTask.d.ts +7 -1
- package/FrameGraph/Tasks/Rendering/shadowGeneratorTask.js +21 -5
- package/FrameGraph/Tasks/Rendering/shadowGeneratorTask.js.map +1 -1
- package/FrameGraph/Tasks/Rendering/taaObjectRendererTask.js +4 -6
- package/FrameGraph/Tasks/Rendering/taaObjectRendererTask.js.map +1 -1
- package/FrameGraph/Tasks/Texture/copyToTextureTask.js +1 -1
- package/FrameGraph/Tasks/Texture/copyToTextureTask.js.map +1 -1
- package/FrameGraph/frameGraph.js +22 -11
- package/FrameGraph/frameGraph.js.map +1 -1
- package/FrameGraph/frameGraphRenderContext.d.ts +2 -1
- package/FrameGraph/frameGraphRenderContext.js +2 -1
- package/FrameGraph/frameGraphRenderContext.js.map +1 -1
- package/FrameGraph/frameGraphTask.d.ts +11 -1
- package/FrameGraph/frameGraphTask.js +8 -0
- package/FrameGraph/frameGraphTask.js.map +1 -1
- package/FrameGraph/frameGraphTextureManager.d.ts +9 -3
- package/FrameGraph/frameGraphTextureManager.js +10 -4
- package/FrameGraph/frameGraphTextureManager.js.map +1 -1
- package/FrameGraph/index.d.ts +2 -0
- package/FrameGraph/index.js +2 -0
- package/FrameGraph/index.js.map +1 -1
- package/Gizmos/planeRotationGizmo.js +10 -0
- package/Gizmos/planeRotationGizmo.js.map +1 -1
- package/Inputs/scene.inputManager.js +2 -2
- package/Inputs/scene.inputManager.js.map +1 -1
- package/Layers/effectLayer.d.ts +32 -33
- package/Layers/effectLayer.js +144 -530
- package/Layers/effectLayer.js.map +1 -1
- package/Layers/glowLayer.d.ts +14 -41
- package/Layers/glowLayer.js +92 -178
- package/Layers/glowLayer.js.map +1 -1
- package/Layers/highlightLayer.d.ts +0 -1
- package/Layers/highlightLayer.js +0 -1
- package/Layers/highlightLayer.js.map +1 -1
- package/Layers/index.d.ts +2 -0
- package/Layers/index.js +2 -0
- package/Layers/index.js.map +1 -1
- package/Layers/thinEffectLayer.d.ts +230 -0
- package/Layers/thinEffectLayer.js +734 -0
- package/Layers/thinEffectLayer.js.map +1 -0
- package/Layers/thinGlowLayer.d.ts +141 -0
- package/Layers/thinGlowLayer.js +292 -0
- package/Layers/thinGlowLayer.js.map +1 -0
- package/Lights/Shadows/shadowGenerator.js +40 -19
- package/Lights/Shadows/shadowGenerator.js.map +1 -1
- package/Materials/GreasedLine/greasedLinePluginMaterial.d.ts +6 -2
- package/Materials/GreasedLine/greasedLinePluginMaterial.js +8 -2
- package/Materials/GreasedLine/greasedLinePluginMaterial.js.map +1 -1
- package/Materials/GreasedLine/greasedLinePluginMaterialShadersGLSL.js +17 -11
- package/Materials/GreasedLine/greasedLinePluginMaterialShadersGLSL.js.map +1 -1
- package/Materials/GreasedLine/greasedLinePluginMaterialShadersWGSL.js +29 -15
- package/Materials/GreasedLine/greasedLinePluginMaterialShadersWGSL.js.map +1 -1
- package/Materials/GreasedLine/greasedLineSimpleMaterial.d.ts +1 -0
- package/Materials/GreasedLine/greasedLineSimpleMaterial.js +1 -0
- package/Materials/GreasedLine/greasedLineSimpleMaterial.js.map +1 -1
- package/Materials/Node/Blocks/Input/inputBlock.js +34 -2
- package/Materials/Node/Blocks/Input/inputBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/reflectionBlock.js +1 -3
- package/Materials/Node/Blocks/PBR/reflectionBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/subSurfaceBlock.js +3 -3
- package/Materials/Node/Blocks/PBR/subSurfaceBlock.js.map +1 -1
- package/Materials/Node/Blocks/Vertex/morphTargetsBlock.js +34 -24
- package/Materials/Node/Blocks/Vertex/morphTargetsBlock.js.map +1 -1
- package/Materials/Node/nodeMaterial.d.ts +14 -2
- package/Materials/Node/nodeMaterial.js +19 -5
- package/Materials/Node/nodeMaterial.js.map +1 -1
- package/Materials/PBR/pbrBaseMaterial.d.ts +5 -0
- package/Materials/PBR/pbrBaseMaterial.js +6 -0
- package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
- package/Materials/Textures/Filtering/hdrFiltering.js +1 -0
- package/Materials/Textures/Filtering/hdrFiltering.js.map +1 -1
- package/Materials/Textures/Filtering/hdrIrradianceFiltering.d.ts +69 -0
- package/Materials/Textures/Filtering/hdrIrradianceFiltering.js +187 -0
- package/Materials/Textures/Filtering/hdrIrradianceFiltering.js.map +1 -0
- package/Materials/Textures/hdrCubeTexture.d.ts +5 -1
- package/Materials/Textures/hdrCubeTexture.js +29 -3
- package/Materials/Textures/hdrCubeTexture.js.map +1 -1
- package/Materials/Textures/index.d.ts +4 -0
- package/Materials/Textures/index.js +4 -0
- package/Materials/Textures/index.js.map +1 -1
- package/Materials/Textures/renderTargetTexture.d.ts +12 -0
- package/Materials/Textures/renderTargetTexture.js +29 -8
- package/Materials/Textures/renderTargetTexture.js.map +1 -1
- package/Materials/materialHelper.functions.d.ts +17 -1
- package/Materials/materialHelper.functions.js +76 -4
- package/Materials/materialHelper.functions.js.map +1 -1
- package/Materials/shaderMaterial.d.ts +5 -4
- package/Materials/shaderMaterial.js +28 -51
- package/Materials/shaderMaterial.js.map +1 -1
- package/Materials/standardMaterial.d.ts +6 -2
- package/Materials/standardMaterial.js +5 -2
- package/Materials/standardMaterial.js.map +1 -1
- package/Meshes/Builders/greasedLineBuilder.d.ts +1 -1
- package/Meshes/Builders/planeBuilder.js +2 -2
- package/Meshes/Builders/planeBuilder.js.map +1 -1
- package/Meshes/Compression/dracoCodec.d.ts +4 -4
- package/Meshes/Compression/dracoCodec.js.map +1 -1
- package/Meshes/Compression/dracoCompression.d.ts +1 -1
- package/Meshes/Compression/dracoCompression.js.map +1 -1
- package/Meshes/Compression/dracoCompressionWorker.d.ts +16 -30
- package/Meshes/Compression/dracoCompressionWorker.js +128 -22
- package/Meshes/Compression/dracoCompressionWorker.js.map +1 -1
- package/Meshes/Compression/dracoDecoder.d.ts +4 -9
- package/Meshes/Compression/dracoDecoder.js +5 -5
- package/Meshes/Compression/dracoDecoder.js.map +1 -1
- package/Meshes/Compression/dracoDecoder.types.d.ts +52 -0
- package/Meshes/Compression/dracoDecoder.types.js +2 -0
- package/Meshes/Compression/dracoDecoder.types.js.map +1 -0
- package/Meshes/Compression/dracoEncoder.d.ts +91 -0
- package/Meshes/Compression/dracoEncoder.js +239 -0
- package/Meshes/Compression/dracoEncoder.js.map +1 -0
- package/Meshes/Compression/dracoEncoder.types.d.ts +82 -0
- package/Meshes/Compression/dracoEncoder.types.js +2 -0
- package/Meshes/Compression/dracoEncoder.types.js.map +1 -0
- package/Meshes/Compression/index.d.ts +1 -0
- package/Meshes/Compression/index.js +1 -0
- package/Meshes/Compression/index.js.map +1 -1
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.d.ts +92 -2
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.js +308 -32
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.js.map +1 -1
- package/Meshes/GreasedLine/greasedLineBaseMesh.js +4 -1
- package/Meshes/GreasedLine/greasedLineBaseMesh.js.map +1 -1
- package/Meshes/GreasedLine/greasedLineRibbonMesh.js +1 -1
- package/Meshes/GreasedLine/greasedLineRibbonMesh.js.map +1 -1
- package/Meshes/Node/Blocks/Textures/geometryTextureBlock.d.ts +1 -1
- package/Meshes/abstractMesh.d.ts +1 -2
- package/Meshes/abstractMesh.js +1 -2
- package/Meshes/abstractMesh.js.map +1 -1
- package/Meshes/linesMesh.js +2 -2
- package/Meshes/linesMesh.js.map +1 -1
- package/Meshes/mesh.d.ts +32 -5
- package/Meshes/mesh.js +56 -29
- package/Meshes/mesh.js.map +1 -1
- package/Meshes/subMesh.js +16 -3
- package/Meshes/subMesh.js.map +1 -1
- package/Meshes/transformNode.js +2 -0
- package/Meshes/transformNode.js.map +1 -1
- package/Misc/decorators.serialization.js +2 -0
- package/Misc/decorators.serialization.js.map +1 -1
- package/Misc/fileTools.js +14 -7
- package/Misc/fileTools.js.map +1 -1
- package/Misc/greasedLineTools.d.ts +1 -1
- package/Misc/logger.d.ts +2 -1
- package/Misc/logger.js +2 -1
- package/Misc/logger.js.map +1 -1
- package/Morph/morphTargetManager.d.ts +21 -0
- package/Morph/morphTargetManager.js +37 -2
- package/Morph/morphTargetManager.js.map +1 -1
- package/Particles/pointsCloudSystem.d.ts +3 -3
- package/Physics/v2/Plugins/havokPlugin.d.ts +2 -2
- package/PostProcesses/index.d.ts +1 -0
- package/PostProcesses/index.js +1 -0
- package/PostProcesses/index.js.map +1 -1
- package/PostProcesses/passPostProcess.d.ts +2 -3
- package/PostProcesses/passPostProcess.js +36 -48
- package/PostProcesses/passPostProcess.js.map +1 -1
- package/PostProcesses/thinPassPostProcess.d.ts +48 -0
- package/PostProcesses/thinPassPostProcess.js +113 -0
- package/PostProcesses/thinPassPostProcess.js.map +1 -0
- package/PostProcesses/volumetricLightScatteringPostProcess.js +15 -16
- package/PostProcesses/volumetricLightScatteringPostProcess.js.map +1 -1
- package/Rendering/IBLShadows/iblShadowsVoxelTracingPass.js +1 -1
- package/Rendering/IBLShadows/iblShadowsVoxelTracingPass.js.map +1 -1
- package/Rendering/depthRenderer.js +13 -15
- package/Rendering/depthRenderer.js.map +1 -1
- package/Rendering/geometryBufferRenderer.js +13 -15
- package/Rendering/geometryBufferRenderer.js.map +1 -1
- package/Rendering/iblCdfGenerator.d.ts +13 -5
- package/Rendering/iblCdfGenerator.js +67 -10
- package/Rendering/iblCdfGenerator.js.map +1 -1
- package/Rendering/objectRenderer.d.ts +9 -2
- package/Rendering/objectRenderer.js +44 -7
- package/Rendering/objectRenderer.js.map +1 -1
- package/Rendering/outlineRenderer.js +13 -15
- package/Rendering/outlineRenderer.js.map +1 -1
- package/Shaders/ShadersInclude/gaussianSplatting.js +6 -6
- package/Shaders/ShadersInclude/gaussianSplatting.js.map +1 -1
- package/Shaders/ShadersInclude/morphTargetsVertex.js +16 -4
- package/Shaders/ShadersInclude/morphTargetsVertex.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockReflection.js +13 -8
- package/Shaders/ShadersInclude/pbrBlockReflection.js.map +1 -1
- package/Shaders/gaussianSplatting.vertex.js +2 -1
- package/Shaders/gaussianSplatting.vertex.js.map +1 -1
- package/Shaders/hdrIrradianceFiltering.fragment.d.ts +9 -0
- package/Shaders/hdrIrradianceFiltering.fragment.js +25 -0
- package/Shaders/hdrIrradianceFiltering.fragment.js.map +1 -0
- package/Shaders/hdrIrradianceFiltering.vertex.d.ts +5 -0
- package/Shaders/hdrIrradianceFiltering.vertex.js +15 -0
- package/Shaders/hdrIrradianceFiltering.vertex.js.map +1 -0
- package/Shaders/pbr.fragment.js +1 -3
- package/Shaders/pbr.fragment.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/morphTargetsVertex.js +17 -5
- package/ShadersWGSL/ShadersInclude/morphTargetsVertex.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/pbrBlockReflection.js +13 -8
- package/ShadersWGSL/ShadersInclude/pbrBlockReflection.js.map +1 -1
- package/ShadersWGSL/greasedLine.fragment.js +9 -3
- package/ShadersWGSL/greasedLine.fragment.js.map +1 -1
- package/ShadersWGSL/greasedLine.vertex.js +12 -2
- package/ShadersWGSL/greasedLine.vertex.js.map +1 -1
- package/ShadersWGSL/hdrIrradianceFiltering.fragment.d.ts +9 -0
- package/ShadersWGSL/hdrIrradianceFiltering.fragment.js +26 -0
- package/ShadersWGSL/hdrIrradianceFiltering.fragment.js.map +1 -0
- package/ShadersWGSL/hdrIrradianceFiltering.vertex.d.ts +5 -0
- package/ShadersWGSL/hdrIrradianceFiltering.vertex.js +16 -0
- package/ShadersWGSL/hdrIrradianceFiltering.vertex.js.map +1 -0
- package/ShadersWGSL/outline.fragment.js +1 -1
- package/ShadersWGSL/outline.fragment.js.map +1 -1
- package/ShadersWGSL/passCube.fragment.js +1 -1
- package/ShadersWGSL/passCube.fragment.js.map +1 -1
- package/ShadersWGSL/pbr.fragment.js +1 -3
- package/ShadersWGSL/pbr.fragment.js.map +1 -1
- package/XR/features/WebXRDepthSensing.d.ts +24 -2
- package/XR/features/WebXRDepthSensing.js +320 -26
- package/XR/features/WebXRDepthSensing.js.map +1 -1
- package/assetContainer.d.ts +43 -0
- package/assetContainer.js +67 -0
- package/assetContainer.js.map +1 -1
- package/package.json +1 -1
- package/scene.js +19 -8
- package/scene.js.map +1 -1
|
@@ -11,6 +11,7 @@ import "../thinInstanceMesh.js";
|
|
|
11
11
|
import { ToHalfFloat } from "../../Misc/textureTools.js";
|
|
12
12
|
import { Scalar } from "../../Maths/math.scalar.js";
|
|
13
13
|
import { runCoroutineSync, runCoroutineAsync, createYieldingScheduler } from "../../Misc/coroutine.js";
|
|
14
|
+
import { EngineStore } from "../../Engines/engineStore.js";
|
|
14
15
|
// @internal
|
|
15
16
|
const unpackUnorm = (value, bits) => {
|
|
16
17
|
const t = (1 << bits) - 1;
|
|
@@ -103,7 +104,58 @@ var PLYValue;
|
|
|
103
104
|
PLYValue[PLYValue["ROT_1"] = 31] = "ROT_1";
|
|
104
105
|
PLYValue[PLYValue["ROT_2"] = 32] = "ROT_2";
|
|
105
106
|
PLYValue[PLYValue["ROT_3"] = 33] = "ROT_3";
|
|
106
|
-
PLYValue[PLYValue["
|
|
107
|
+
PLYValue[PLYValue["MIN_COLOR_R"] = 34] = "MIN_COLOR_R";
|
|
108
|
+
PLYValue[PLYValue["MIN_COLOR_G"] = 35] = "MIN_COLOR_G";
|
|
109
|
+
PLYValue[PLYValue["MIN_COLOR_B"] = 36] = "MIN_COLOR_B";
|
|
110
|
+
PLYValue[PLYValue["MAX_COLOR_R"] = 37] = "MAX_COLOR_R";
|
|
111
|
+
PLYValue[PLYValue["MAX_COLOR_G"] = 38] = "MAX_COLOR_G";
|
|
112
|
+
PLYValue[PLYValue["MAX_COLOR_B"] = 39] = "MAX_COLOR_B";
|
|
113
|
+
PLYValue[PLYValue["SH_0"] = 40] = "SH_0";
|
|
114
|
+
PLYValue[PLYValue["SH_1"] = 41] = "SH_1";
|
|
115
|
+
PLYValue[PLYValue["SH_2"] = 42] = "SH_2";
|
|
116
|
+
PLYValue[PLYValue["SH_3"] = 43] = "SH_3";
|
|
117
|
+
PLYValue[PLYValue["SH_4"] = 44] = "SH_4";
|
|
118
|
+
PLYValue[PLYValue["SH_5"] = 45] = "SH_5";
|
|
119
|
+
PLYValue[PLYValue["SH_6"] = 46] = "SH_6";
|
|
120
|
+
PLYValue[PLYValue["SH_7"] = 47] = "SH_7";
|
|
121
|
+
PLYValue[PLYValue["SH_8"] = 48] = "SH_8";
|
|
122
|
+
PLYValue[PLYValue["SH_9"] = 49] = "SH_9";
|
|
123
|
+
PLYValue[PLYValue["SH_10"] = 50] = "SH_10";
|
|
124
|
+
PLYValue[PLYValue["SH_11"] = 51] = "SH_11";
|
|
125
|
+
PLYValue[PLYValue["SH_12"] = 52] = "SH_12";
|
|
126
|
+
PLYValue[PLYValue["SH_13"] = 53] = "SH_13";
|
|
127
|
+
PLYValue[PLYValue["SH_14"] = 54] = "SH_14";
|
|
128
|
+
PLYValue[PLYValue["SH_15"] = 55] = "SH_15";
|
|
129
|
+
PLYValue[PLYValue["SH_16"] = 56] = "SH_16";
|
|
130
|
+
PLYValue[PLYValue["SH_17"] = 57] = "SH_17";
|
|
131
|
+
PLYValue[PLYValue["SH_18"] = 58] = "SH_18";
|
|
132
|
+
PLYValue[PLYValue["SH_19"] = 59] = "SH_19";
|
|
133
|
+
PLYValue[PLYValue["SH_20"] = 60] = "SH_20";
|
|
134
|
+
PLYValue[PLYValue["SH_21"] = 61] = "SH_21";
|
|
135
|
+
PLYValue[PLYValue["SH_22"] = 62] = "SH_22";
|
|
136
|
+
PLYValue[PLYValue["SH_23"] = 63] = "SH_23";
|
|
137
|
+
PLYValue[PLYValue["SH_24"] = 64] = "SH_24";
|
|
138
|
+
PLYValue[PLYValue["SH_25"] = 65] = "SH_25";
|
|
139
|
+
PLYValue[PLYValue["SH_26"] = 66] = "SH_26";
|
|
140
|
+
PLYValue[PLYValue["SH_27"] = 67] = "SH_27";
|
|
141
|
+
PLYValue[PLYValue["SH_28"] = 68] = "SH_28";
|
|
142
|
+
PLYValue[PLYValue["SH_29"] = 69] = "SH_29";
|
|
143
|
+
PLYValue[PLYValue["SH_30"] = 70] = "SH_30";
|
|
144
|
+
PLYValue[PLYValue["SH_31"] = 71] = "SH_31";
|
|
145
|
+
PLYValue[PLYValue["SH_32"] = 72] = "SH_32";
|
|
146
|
+
PLYValue[PLYValue["SH_33"] = 73] = "SH_33";
|
|
147
|
+
PLYValue[PLYValue["SH_34"] = 74] = "SH_34";
|
|
148
|
+
PLYValue[PLYValue["SH_35"] = 75] = "SH_35";
|
|
149
|
+
PLYValue[PLYValue["SH_36"] = 76] = "SH_36";
|
|
150
|
+
PLYValue[PLYValue["SH_37"] = 77] = "SH_37";
|
|
151
|
+
PLYValue[PLYValue["SH_38"] = 78] = "SH_38";
|
|
152
|
+
PLYValue[PLYValue["SH_39"] = 79] = "SH_39";
|
|
153
|
+
PLYValue[PLYValue["SH_40"] = 80] = "SH_40";
|
|
154
|
+
PLYValue[PLYValue["SH_41"] = 81] = "SH_41";
|
|
155
|
+
PLYValue[PLYValue["SH_42"] = 82] = "SH_42";
|
|
156
|
+
PLYValue[PLYValue["SH_43"] = 83] = "SH_43";
|
|
157
|
+
PLYValue[PLYValue["SH_44"] = 84] = "SH_44";
|
|
158
|
+
PLYValue[PLYValue["UNDEFINED"] = 85] = "UNDEFINED";
|
|
107
159
|
})(PLYValue || (PLYValue = {}));
|
|
108
160
|
/**
|
|
109
161
|
* Class used to render a gaussian splatting mesh
|
|
@@ -371,8 +423,110 @@ export class GaussianSplattingMesh extends Mesh {
|
|
|
371
423
|
return 32 /* PLYValue.ROT_2 */;
|
|
372
424
|
case "rot_3":
|
|
373
425
|
return 33 /* PLYValue.ROT_3 */;
|
|
426
|
+
case "min_r":
|
|
427
|
+
return 34 /* PLYValue.MIN_COLOR_R */;
|
|
428
|
+
case "min_g":
|
|
429
|
+
return 35 /* PLYValue.MIN_COLOR_G */;
|
|
430
|
+
case "min_b":
|
|
431
|
+
return 36 /* PLYValue.MIN_COLOR_B */;
|
|
432
|
+
case "max_r":
|
|
433
|
+
return 37 /* PLYValue.MAX_COLOR_R */;
|
|
434
|
+
case "max_g":
|
|
435
|
+
return 38 /* PLYValue.MAX_COLOR_G */;
|
|
436
|
+
case "max_b":
|
|
437
|
+
return 39 /* PLYValue.MAX_COLOR_B */;
|
|
438
|
+
case "f_rest_0":
|
|
439
|
+
return 40 /* PLYValue.SH_0 */;
|
|
440
|
+
case "f_rest_1":
|
|
441
|
+
return 41 /* PLYValue.SH_1 */;
|
|
442
|
+
case "f_rest_2":
|
|
443
|
+
return 42 /* PLYValue.SH_2 */;
|
|
444
|
+
case "f_rest_3":
|
|
445
|
+
return 43 /* PLYValue.SH_3 */;
|
|
446
|
+
case "f_rest_4":
|
|
447
|
+
return 44 /* PLYValue.SH_4 */;
|
|
448
|
+
case "f_rest_5":
|
|
449
|
+
return 45 /* PLYValue.SH_5 */;
|
|
450
|
+
case "f_rest_6":
|
|
451
|
+
return 46 /* PLYValue.SH_6 */;
|
|
452
|
+
case "f_rest_7":
|
|
453
|
+
return 47 /* PLYValue.SH_7 */;
|
|
454
|
+
case "f_rest_8":
|
|
455
|
+
return 48 /* PLYValue.SH_8 */;
|
|
456
|
+
case "f_rest_9":
|
|
457
|
+
return 49 /* PLYValue.SH_9 */;
|
|
458
|
+
case "f_rest_10":
|
|
459
|
+
return 50 /* PLYValue.SH_10 */;
|
|
460
|
+
case "f_rest_11":
|
|
461
|
+
return 51 /* PLYValue.SH_11 */;
|
|
462
|
+
case "f_rest_12":
|
|
463
|
+
return 52 /* PLYValue.SH_12 */;
|
|
464
|
+
case "f_rest_13":
|
|
465
|
+
return 53 /* PLYValue.SH_13 */;
|
|
466
|
+
case "f_rest_14":
|
|
467
|
+
return 54 /* PLYValue.SH_14 */;
|
|
468
|
+
case "f_rest_15":
|
|
469
|
+
return 55 /* PLYValue.SH_15 */;
|
|
470
|
+
case "f_rest_16":
|
|
471
|
+
return 56 /* PLYValue.SH_16 */;
|
|
472
|
+
case "f_rest_17":
|
|
473
|
+
return 57 /* PLYValue.SH_17 */;
|
|
474
|
+
case "f_rest_18":
|
|
475
|
+
return 58 /* PLYValue.SH_18 */;
|
|
476
|
+
case "f_rest_19":
|
|
477
|
+
return 59 /* PLYValue.SH_19 */;
|
|
478
|
+
case "f_rest_20":
|
|
479
|
+
return 60 /* PLYValue.SH_20 */;
|
|
480
|
+
case "f_rest_21":
|
|
481
|
+
return 61 /* PLYValue.SH_21 */;
|
|
482
|
+
case "f_rest_22":
|
|
483
|
+
return 62 /* PLYValue.SH_22 */;
|
|
484
|
+
case "f_rest_23":
|
|
485
|
+
return 63 /* PLYValue.SH_23 */;
|
|
486
|
+
case "f_rest_24":
|
|
487
|
+
return 64 /* PLYValue.SH_24 */;
|
|
488
|
+
case "f_rest_25":
|
|
489
|
+
return 65 /* PLYValue.SH_25 */;
|
|
490
|
+
case "f_rest_26":
|
|
491
|
+
return 66 /* PLYValue.SH_26 */;
|
|
492
|
+
case "f_rest_27":
|
|
493
|
+
return 67 /* PLYValue.SH_27 */;
|
|
494
|
+
case "f_rest_28":
|
|
495
|
+
return 68 /* PLYValue.SH_28 */;
|
|
496
|
+
case "f_rest_29":
|
|
497
|
+
return 69 /* PLYValue.SH_29 */;
|
|
498
|
+
case "f_rest_30":
|
|
499
|
+
return 70 /* PLYValue.SH_30 */;
|
|
500
|
+
case "f_rest_31":
|
|
501
|
+
return 71 /* PLYValue.SH_31 */;
|
|
502
|
+
case "f_rest_32":
|
|
503
|
+
return 72 /* PLYValue.SH_32 */;
|
|
504
|
+
case "f_rest_33":
|
|
505
|
+
return 73 /* PLYValue.SH_33 */;
|
|
506
|
+
case "f_rest_34":
|
|
507
|
+
return 74 /* PLYValue.SH_34 */;
|
|
508
|
+
case "f_rest_35":
|
|
509
|
+
return 75 /* PLYValue.SH_35 */;
|
|
510
|
+
case "f_rest_36":
|
|
511
|
+
return 76 /* PLYValue.SH_36 */;
|
|
512
|
+
case "f_rest_37":
|
|
513
|
+
return 77 /* PLYValue.SH_37 */;
|
|
514
|
+
case "f_rest_38":
|
|
515
|
+
return 78 /* PLYValue.SH_38 */;
|
|
516
|
+
case "f_rest_39":
|
|
517
|
+
return 79 /* PLYValue.SH_39 */;
|
|
518
|
+
case "f_rest_40":
|
|
519
|
+
return 80 /* PLYValue.SH_40 */;
|
|
520
|
+
case "f_rest_41":
|
|
521
|
+
return 81 /* PLYValue.SH_41 */;
|
|
522
|
+
case "f_rest_42":
|
|
523
|
+
return 82 /* PLYValue.SH_42 */;
|
|
524
|
+
case "f_rest_43":
|
|
525
|
+
return 83 /* PLYValue.SH_43 */;
|
|
526
|
+
case "f_rest_44":
|
|
527
|
+
return 84 /* PLYValue.SH_44 */;
|
|
374
528
|
}
|
|
375
|
-
return
|
|
529
|
+
return 85 /* PLYValue.UNDEFINED */;
|
|
376
530
|
}
|
|
377
531
|
/**
|
|
378
532
|
* Parse a PLY file header and returns metas infos on splats and chunks
|
|
@@ -415,10 +569,21 @@ export class GaussianSplattingMesh extends Mesh {
|
|
|
415
569
|
const vertexProperties = [];
|
|
416
570
|
const chunkProperties = [];
|
|
417
571
|
const filtered = header.slice(0, headerEndIndex).split("\n");
|
|
572
|
+
let shDegree = 0;
|
|
418
573
|
for (const prop of filtered) {
|
|
419
574
|
if (prop.startsWith("property ")) {
|
|
420
575
|
const [, typeName, name] = prop.split(" ");
|
|
421
576
|
const value = GaussianSplattingMesh._ValueNameToEnum(name);
|
|
577
|
+
// SH degree 1,2 or 3 for 9, 24 or 45 values
|
|
578
|
+
if (value >= 84 /* PLYValue.SH_44 */) {
|
|
579
|
+
shDegree = 3;
|
|
580
|
+
}
|
|
581
|
+
else if (value >= 64 /* PLYValue.SH_24 */) {
|
|
582
|
+
shDegree = 2;
|
|
583
|
+
}
|
|
584
|
+
else if (value >= 48 /* PLYValue.SH_8 */) {
|
|
585
|
+
shDegree = 1;
|
|
586
|
+
}
|
|
422
587
|
const type = GaussianSplattingMesh._TypeNameToEnum(typeName);
|
|
423
588
|
if (chunkMode == 1 /* ElementMode.Chunk */) {
|
|
424
589
|
chunkProperties.push({ value, type, offset: rowChunkOffset });
|
|
@@ -444,6 +609,13 @@ export class GaussianSplattingMesh extends Mesh {
|
|
|
444
609
|
}
|
|
445
610
|
const dataView = new DataView(data, headerEndIndex + headerEnd.length);
|
|
446
611
|
const buffer = new ArrayBuffer(GaussianSplattingMesh._RowOutputLength * vertexCount);
|
|
612
|
+
let shBuffer = null;
|
|
613
|
+
let shCoefficientCount = 0;
|
|
614
|
+
if (shDegree) {
|
|
615
|
+
const shVectorCount = (shDegree + 1) * (shDegree + 1) - 1;
|
|
616
|
+
shCoefficientCount = shVectorCount * 3;
|
|
617
|
+
shBuffer = new ArrayBuffer(shCoefficientCount * vertexCount);
|
|
618
|
+
}
|
|
447
619
|
return {
|
|
448
620
|
vertexCount: vertexCount,
|
|
449
621
|
chunkCount: chunkCount,
|
|
@@ -453,6 +625,9 @@ export class GaussianSplattingMesh extends Mesh {
|
|
|
453
625
|
chunkProperties: chunkProperties,
|
|
454
626
|
dataView: dataView,
|
|
455
627
|
buffer: buffer,
|
|
628
|
+
shDegree: shDegree,
|
|
629
|
+
shCoefficientCount: shCoefficientCount,
|
|
630
|
+
shBuffer: shBuffer,
|
|
456
631
|
};
|
|
457
632
|
}
|
|
458
633
|
static _GetCompressedChunks(header, offset) {
|
|
@@ -462,7 +637,14 @@ export class GaussianSplattingMesh extends Mesh {
|
|
|
462
637
|
const dataView = header.dataView;
|
|
463
638
|
const compressedChunks = new Array(header.chunkCount);
|
|
464
639
|
for (let i = 0; i < header.chunkCount; i++) {
|
|
465
|
-
const currentChunk = {
|
|
640
|
+
const currentChunk = {
|
|
641
|
+
min: new Vector3(),
|
|
642
|
+
max: new Vector3(),
|
|
643
|
+
minScale: new Vector3(),
|
|
644
|
+
maxScale: new Vector3(),
|
|
645
|
+
minColor: new Vector3(0, 0, 0),
|
|
646
|
+
maxColor: new Vector3(1, 1, 1),
|
|
647
|
+
};
|
|
466
648
|
compressedChunks[i] = currentChunk;
|
|
467
649
|
for (let propertyIndex = 0; propertyIndex < header.chunkProperties.length; propertyIndex++) {
|
|
468
650
|
const property = header.chunkProperties[propertyIndex];
|
|
@@ -511,6 +693,24 @@ export class GaussianSplattingMesh extends Mesh {
|
|
|
511
693
|
case 11 /* PLYValue.MAX_SCALE_Z */:
|
|
512
694
|
currentChunk.maxScale.z = value;
|
|
513
695
|
break;
|
|
696
|
+
case 34 /* PLYValue.MIN_COLOR_R */:
|
|
697
|
+
currentChunk.minColor.x = value;
|
|
698
|
+
break;
|
|
699
|
+
case 35 /* PLYValue.MIN_COLOR_G */:
|
|
700
|
+
currentChunk.minColor.y = value;
|
|
701
|
+
break;
|
|
702
|
+
case 36 /* PLYValue.MIN_COLOR_B */:
|
|
703
|
+
currentChunk.minColor.z = value;
|
|
704
|
+
break;
|
|
705
|
+
case 37 /* PLYValue.MAX_COLOR_R */:
|
|
706
|
+
currentChunk.maxColor.x = value;
|
|
707
|
+
break;
|
|
708
|
+
case 38 /* PLYValue.MAX_COLOR_G */:
|
|
709
|
+
currentChunk.maxColor.y = value;
|
|
710
|
+
break;
|
|
711
|
+
case 39 /* PLYValue.MAX_COLOR_B */:
|
|
712
|
+
currentChunk.maxColor.z = value;
|
|
713
|
+
break;
|
|
514
714
|
}
|
|
515
715
|
}
|
|
516
716
|
offset.value += header.rowChunkLength;
|
|
@@ -527,6 +727,10 @@ export class GaussianSplattingMesh extends Mesh {
|
|
|
527
727
|
const scale = new Float32Array(buffer, index * rowOutputLength + 12, 3);
|
|
528
728
|
const rgba = new Uint8ClampedArray(buffer, index * rowOutputLength + 24, 4);
|
|
529
729
|
const rot = new Uint8ClampedArray(buffer, index * rowOutputLength + 28, 4);
|
|
730
|
+
let sh = null;
|
|
731
|
+
if (header.shBuffer) {
|
|
732
|
+
sh = new Uint8ClampedArray(header.shBuffer, index * header.shCoefficientCount, header.shCoefficientCount);
|
|
733
|
+
}
|
|
530
734
|
const chunkIndex = index >> 8;
|
|
531
735
|
let r0 = 255;
|
|
532
736
|
let r1 = 0;
|
|
@@ -560,7 +764,7 @@ export class GaussianSplattingMesh extends Mesh {
|
|
|
560
764
|
const compressedChunk = compressedChunks[chunkIndex];
|
|
561
765
|
unpack111011(value, temp3);
|
|
562
766
|
position[0] = Scalar.Lerp(compressedChunk.min.x, compressedChunk.max.x, temp3.x);
|
|
563
|
-
position[1] =
|
|
767
|
+
position[1] = Scalar.Lerp(compressedChunk.min.y, compressedChunk.max.y, temp3.y);
|
|
564
768
|
position[2] = Scalar.Lerp(compressedChunk.min.z, compressedChunk.max.z, temp3.z);
|
|
565
769
|
}
|
|
566
770
|
break;
|
|
@@ -568,9 +772,9 @@ export class GaussianSplattingMesh extends Mesh {
|
|
|
568
772
|
{
|
|
569
773
|
unpackRot(value, q);
|
|
570
774
|
r0 = q.w;
|
|
571
|
-
r1 = q.z;
|
|
775
|
+
r1 = -q.z;
|
|
572
776
|
r2 = q.y;
|
|
573
|
-
r3 = q.x;
|
|
777
|
+
r3 = -q.x;
|
|
574
778
|
}
|
|
575
779
|
break;
|
|
576
780
|
case 14 /* PLYValue.PACKED_SCALE */:
|
|
@@ -583,7 +787,13 @@ export class GaussianSplattingMesh extends Mesh {
|
|
|
583
787
|
}
|
|
584
788
|
break;
|
|
585
789
|
case 15 /* PLYValue.PACKED_COLOR */:
|
|
586
|
-
|
|
790
|
+
{
|
|
791
|
+
const compressedChunk = compressedChunks[chunkIndex];
|
|
792
|
+
unpack8888(value, rgba);
|
|
793
|
+
rgba[0] = Scalar.Lerp(compressedChunk.minColor.x, compressedChunk.maxColor.x, rgba[0] / 255) * 255;
|
|
794
|
+
rgba[1] = Scalar.Lerp(compressedChunk.minColor.y, compressedChunk.maxColor.y, rgba[1] / 255) * 255;
|
|
795
|
+
rgba[2] = Scalar.Lerp(compressedChunk.minColor.z, compressedChunk.maxColor.z, rgba[2] / 255) * 255;
|
|
796
|
+
}
|
|
587
797
|
break;
|
|
588
798
|
case 16 /* PLYValue.X */:
|
|
589
799
|
position[0] = value;
|
|
@@ -640,6 +850,11 @@ export class GaussianSplattingMesh extends Mesh {
|
|
|
640
850
|
r3 = value;
|
|
641
851
|
break;
|
|
642
852
|
}
|
|
853
|
+
if (sh && property.value >= 40 /* PLYValue.SH_0 */ && property.value <= 84 /* PLYValue.SH_44 */) {
|
|
854
|
+
const clampedValue = Scalar.Clamp(value * 127.5 + 127.5, 0, 255);
|
|
855
|
+
const shIndex = property.value - 40 /* PLYValue.SH_0 */;
|
|
856
|
+
sh[shIndex] = clampedValue;
|
|
857
|
+
}
|
|
643
858
|
}
|
|
644
859
|
q.set(r1, r2, r3, r0);
|
|
645
860
|
q.normalize();
|
|
@@ -649,12 +864,64 @@ export class GaussianSplattingMesh extends Mesh {
|
|
|
649
864
|
rot[3] = q.z * 128 + 128;
|
|
650
865
|
offset.value += header.rowVertexLength;
|
|
651
866
|
}
|
|
867
|
+
/**
|
|
868
|
+
* Converts a .ply data with SH coefficients splat
|
|
869
|
+
* if data array buffer is not ply, returns the original buffer
|
|
870
|
+
* @param data the .ply data to load
|
|
871
|
+
* @param useCoroutine use coroutine and yield
|
|
872
|
+
* @returns the loaded splat buffer and optional array of sh coefficients
|
|
873
|
+
*/
|
|
874
|
+
static *ConvertPLYWithSHToSplat(data, useCoroutine = false) {
|
|
875
|
+
const header = GaussianSplattingMesh.ParseHeader(data);
|
|
876
|
+
if (!header) {
|
|
877
|
+
return { buffer: data };
|
|
878
|
+
}
|
|
879
|
+
const offset = { value: 0 };
|
|
880
|
+
const compressedChunks = GaussianSplattingMesh._GetCompressedChunks(header, offset);
|
|
881
|
+
for (let i = 0; i < header.vertexCount; i++) {
|
|
882
|
+
GaussianSplattingMesh._GetSplat(header, i, compressedChunks, offset);
|
|
883
|
+
if (i % GaussianSplattingMesh._PlyConversionBatchSize === 0 && useCoroutine) {
|
|
884
|
+
yield;
|
|
885
|
+
}
|
|
886
|
+
}
|
|
887
|
+
let sh = null;
|
|
888
|
+
// make SH texture buffers
|
|
889
|
+
if (header.shDegree && header.shBuffer) {
|
|
890
|
+
const textureCount = Math.ceil(header.shCoefficientCount / 16); // 4 components can be stored per texture, 4 sh per component
|
|
891
|
+
let shIndexRead = 0;
|
|
892
|
+
const ubuf = new Uint8Array(header.shBuffer);
|
|
893
|
+
// sh is an array of uint8array that will be used to create sh textures
|
|
894
|
+
sh = [];
|
|
895
|
+
const splatCount = header.vertexCount;
|
|
896
|
+
const engine = EngineStore.LastCreatedEngine;
|
|
897
|
+
if (engine) {
|
|
898
|
+
const width = engine.getCaps().maxTextureSize;
|
|
899
|
+
const height = Math.ceil(splatCount / width);
|
|
900
|
+
// create array for the number of textures needed.
|
|
901
|
+
for (let textureIndex = 0; textureIndex < textureCount; textureIndex++) {
|
|
902
|
+
const texture = new Uint8Array(height * width * 4 * 4); // 4 components per texture, 4 sh per component
|
|
903
|
+
sh.push(texture);
|
|
904
|
+
}
|
|
905
|
+
for (let i = 0; i < splatCount; i++) {
|
|
906
|
+
for (let shIndexWrite = 0; shIndexWrite < header.shCoefficientCount; shIndexWrite++) {
|
|
907
|
+
const shValue = ubuf[shIndexRead++];
|
|
908
|
+
const textureIndex = Math.floor(shIndexWrite / 16);
|
|
909
|
+
const shArray = sh[textureIndex];
|
|
910
|
+
const byteIndexInTexture = shIndexWrite % 16; // [0..15]
|
|
911
|
+
const offsetPerSplat = i * 16; // 16 sh values per texture per splat.
|
|
912
|
+
shArray[byteIndexInTexture + offsetPerSplat] = shValue;
|
|
913
|
+
}
|
|
914
|
+
}
|
|
915
|
+
}
|
|
916
|
+
}
|
|
917
|
+
return { buffer: header.buffer, sh: sh };
|
|
918
|
+
}
|
|
652
919
|
/**
|
|
653
920
|
* Converts a .ply data array buffer to splat
|
|
654
921
|
* if data array buffer is not ply, returns the original buffer
|
|
655
922
|
* @param data the .ply data to load
|
|
656
923
|
* @param useCoroutine use coroutine and yield
|
|
657
|
-
* @returns the loaded splat buffer
|
|
924
|
+
* @returns the loaded splat buffer without SH coefficient, whether ply contains or not SH.
|
|
658
925
|
*/
|
|
659
926
|
static *ConvertPLYToSplat(data, useCoroutine = false) {
|
|
660
927
|
const header = GaussianSplattingMesh.ParseHeader(data);
|
|
@@ -680,6 +947,15 @@ export class GaussianSplattingMesh extends Mesh {
|
|
|
680
947
|
static async ConvertPLYToSplatAsync(data) {
|
|
681
948
|
return runCoroutineAsync(GaussianSplattingMesh.ConvertPLYToSplat(data, true), createYieldingScheduler());
|
|
682
949
|
}
|
|
950
|
+
/**
|
|
951
|
+
* Converts a .ply with SH data array buffer to splat
|
|
952
|
+
* if data array buffer is not ply, returns the original buffer
|
|
953
|
+
* @param data the .ply data to load
|
|
954
|
+
* @returns the loaded splat buffer with SH
|
|
955
|
+
*/
|
|
956
|
+
static async ConvertPLYWithSHToSplatAsync(data) {
|
|
957
|
+
return runCoroutineAsync(GaussianSplattingMesh.ConvertPLYWithSHToSplat(data, true), createYieldingScheduler());
|
|
958
|
+
}
|
|
683
959
|
/**
|
|
684
960
|
* Loads a .splat Gaussian Splatting array buffer asynchronously
|
|
685
961
|
* @param data arraybuffer containing splat file
|
|
@@ -696,8 +972,8 @@ export class GaussianSplattingMesh extends Mesh {
|
|
|
696
972
|
*/
|
|
697
973
|
loadFileAsync(url) {
|
|
698
974
|
return Tools.LoadFileAsync(url, true).then(async (plyBuffer) => {
|
|
699
|
-
GaussianSplattingMesh.
|
|
700
|
-
this.updateDataAsync(splatsData);
|
|
975
|
+
GaussianSplattingMesh.ConvertPLYWithSHToSplatAsync(plyBuffer).then((splatsData) => {
|
|
976
|
+
this.updateDataAsync(splatsData.buffer, splatsData.sh);
|
|
701
977
|
});
|
|
702
978
|
});
|
|
703
979
|
}
|
|
@@ -757,22 +1033,22 @@ export class GaussianSplattingMesh extends Mesh {
|
|
|
757
1033
|
newGS.setEnabled(true);
|
|
758
1034
|
return newGS;
|
|
759
1035
|
}
|
|
760
|
-
_makeSplat(
|
|
1036
|
+
_makeSplat(index, fBuffer, uBuffer, covA, covB, colorArray, minimum, maximum) {
|
|
761
1037
|
const matrixRotation = TmpVectors.Matrix[0];
|
|
762
1038
|
const matrixScale = TmpVectors.Matrix[1];
|
|
763
1039
|
const quaternion = TmpVectors.Quaternion[0];
|
|
764
1040
|
const covBSItemSize = this._useRGBACovariants ? 4 : 2;
|
|
765
|
-
const x = fBuffer[8 *
|
|
766
|
-
const y = -fBuffer[8 *
|
|
767
|
-
const z = fBuffer[8 *
|
|
768
|
-
this._splatPositions[4 *
|
|
769
|
-
this._splatPositions[4 *
|
|
770
|
-
this._splatPositions[4 *
|
|
1041
|
+
const x = fBuffer[8 * index + 0];
|
|
1042
|
+
const y = -fBuffer[8 * index + 1];
|
|
1043
|
+
const z = fBuffer[8 * index + 2];
|
|
1044
|
+
this._splatPositions[4 * index + 0] = x;
|
|
1045
|
+
this._splatPositions[4 * index + 1] = y;
|
|
1046
|
+
this._splatPositions[4 * index + 2] = z;
|
|
771
1047
|
minimum.minimizeInPlaceFromFloats(x, y, z);
|
|
772
1048
|
maximum.maximizeInPlaceFromFloats(x, y, z);
|
|
773
|
-
quaternion.set((uBuffer[32 *
|
|
1049
|
+
quaternion.set((uBuffer[32 * index + 28 + 1] - 127.5) / 127.5, (uBuffer[32 * index + 28 + 2] - 127.5) / 127.5, (uBuffer[32 * index + 28 + 3] - 127.5) / 127.5, -(uBuffer[32 * index + 28 + 0] - 127.5) / 127.5);
|
|
774
1050
|
quaternion.toRotationMatrix(matrixRotation);
|
|
775
|
-
Matrix.ScalingToRef(fBuffer[8 *
|
|
1051
|
+
Matrix.ScalingToRef(fBuffer[8 * index + 3 + 0] * 2, fBuffer[8 * index + 3 + 1] * 2, fBuffer[8 * index + 3 + 2] * 2, matrixScale);
|
|
776
1052
|
const M = matrixRotation.multiplyToRef(matrixScale, TmpVectors.Matrix[0]).m;
|
|
777
1053
|
const covariances = this._tmpCovariances;
|
|
778
1054
|
covariances[0] = M[0] * M[0] + M[1] * M[1] + M[2] * M[2];
|
|
@@ -786,19 +1062,19 @@ export class GaussianSplattingMesh extends Mesh {
|
|
|
786
1062
|
for (let covIndex = 0; covIndex < 6; covIndex++) {
|
|
787
1063
|
factor = Math.max(factor, Math.abs(covariances[covIndex]));
|
|
788
1064
|
}
|
|
789
|
-
this._splatPositions[4 *
|
|
1065
|
+
this._splatPositions[4 * index + 3] = factor;
|
|
790
1066
|
const transform = factor;
|
|
791
|
-
covA[
|
|
792
|
-
covA[
|
|
793
|
-
covA[
|
|
794
|
-
covA[
|
|
795
|
-
covB[
|
|
796
|
-
covB[
|
|
1067
|
+
covA[index * 4 + 0] = ToHalfFloat(covariances[0] / transform);
|
|
1068
|
+
covA[index * 4 + 1] = ToHalfFloat(covariances[1] / transform);
|
|
1069
|
+
covA[index * 4 + 2] = ToHalfFloat(covariances[2] / transform);
|
|
1070
|
+
covA[index * 4 + 3] = ToHalfFloat(covariances[3] / transform);
|
|
1071
|
+
covB[index * covBSItemSize + 0] = ToHalfFloat(covariances[4] / transform);
|
|
1072
|
+
covB[index * covBSItemSize + 1] = ToHalfFloat(covariances[5] / transform);
|
|
797
1073
|
// colors
|
|
798
|
-
colorArray[
|
|
799
|
-
colorArray[
|
|
800
|
-
colorArray[
|
|
801
|
-
colorArray[
|
|
1074
|
+
colorArray[index * 4 + 0] = uBuffer[32 * index + 24 + 0];
|
|
1075
|
+
colorArray[index * 4 + 1] = uBuffer[32 * index + 24 + 1];
|
|
1076
|
+
colorArray[index * 4 + 2] = uBuffer[32 * index + 24 + 2];
|
|
1077
|
+
colorArray[index * 4 + 3] = uBuffer[32 * index + 24 + 3];
|
|
802
1078
|
}
|
|
803
1079
|
_updateTextures(covA, covB, colorArray, sh) {
|
|
804
1080
|
const textureSize = this._getTextureSize(this._vertexCount);
|
|
@@ -880,7 +1156,7 @@ export class GaussianSplattingMesh extends Mesh {
|
|
|
880
1156
|
const updateLine = partIndex * lineCountUpdate;
|
|
881
1157
|
const splatIndexBase = updateLine * textureSize.x;
|
|
882
1158
|
for (let i = 0; i < textureLengthPerUpdate; i++) {
|
|
883
|
-
this._makeSplat(splatIndexBase + i,
|
|
1159
|
+
this._makeSplat(splatIndexBase + i, fBuffer, uBuffer, covA, covB, colorArray, minimum, maximum);
|
|
884
1160
|
}
|
|
885
1161
|
this._updateSubTextures(this._splatPositions, covA, covB, colorArray, updateLine, Math.min(lineCountUpdate, textureSize.y - updateLine));
|
|
886
1162
|
// Update the binfo
|
|
@@ -897,7 +1173,7 @@ export class GaussianSplattingMesh extends Mesh {
|
|
|
897
1173
|
}
|
|
898
1174
|
else {
|
|
899
1175
|
for (let i = 0; i < vertexCount; i++) {
|
|
900
|
-
this._makeSplat(i,
|
|
1176
|
+
this._makeSplat(i, fBuffer, uBuffer, covA, covB, colorArray, minimum, maximum);
|
|
901
1177
|
if (isAsync && i % GaussianSplattingMesh._SplatBatchSize === 0) {
|
|
902
1178
|
yield;
|
|
903
1179
|
}
|