@onerjs/core 8.56.4 → 9.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Animations/animatable.core.js +36 -0
- package/Animations/animatable.core.js.map +1 -1
- package/Animations/animationGroup.pure.d.ts +61 -1
- package/Animations/animationGroup.pure.js +191 -2
- package/Animations/animationGroup.pure.js.map +1 -1
- package/Animations/index.d.ts +1 -0
- package/Animations/index.js +1 -0
- package/Animations/index.js.map +1 -1
- package/Animations/pure.d.ts +1 -0
- package/Animations/pure.js +1 -0
- package/Animations/pure.js.map +1 -1
- package/Animations/rootMotion.d.ts +560 -0
- package/Animations/rootMotion.js +1709 -0
- package/Animations/rootMotion.js.map +1 -0
- package/Animations/runtimeAnimation.d.ts +57 -0
- package/Animations/runtimeAnimation.js +127 -3
- package/Animations/runtimeAnimation.js.map +1 -1
- package/Cameras/arcRotateCamera.pure.d.ts +2 -0
- package/Cameras/arcRotateCamera.pure.js +2 -0
- package/Cameras/arcRotateCamera.pure.js.map +1 -1
- package/Cameras/targetCamera.pure.d.ts +2 -0
- package/Cameras/targetCamera.pure.js +13 -2
- package/Cameras/targetCamera.pure.js.map +1 -1
- package/Collisions/gpuPicker.js +5 -5
- package/Collisions/gpuPicker.js.map +1 -1
- package/Engines/AbstractEngine/abstractEngine.query.pure.js +4 -2
- package/Engines/AbstractEngine/abstractEngine.query.pure.js.map +1 -1
- package/Engines/AbstractEngine/abstractEngine.query.types.d.ts +11 -2
- package/Engines/AbstractEngine/abstractEngine.query.types.js.map +1 -1
- package/Engines/AbstractEngine/abstractEngine.renderPass.pure.js +1 -0
- package/Engines/AbstractEngine/abstractEngine.renderPass.pure.js.map +1 -1
- package/Engines/Extensions/engine.multiRender.pure.js +63 -0
- package/Engines/Extensions/engine.multiRender.pure.js.map +1 -1
- package/Engines/Extensions/engine.multiRender.types.d.ts +13 -0
- package/Engines/Extensions/engine.multiRender.types.js.map +1 -1
- package/Engines/Extensions/engine.prefilteredCubeTexture.pure.js +2 -2
- package/Engines/Extensions/engine.prefilteredCubeTexture.pure.js.map +1 -1
- package/Engines/Extensions/engine.prefilteredCubeTexture.types.d.ts +2 -1
- package/Engines/Extensions/engine.prefilteredCubeTexture.types.js.map +1 -1
- package/Engines/Extensions/index.d.ts +1 -0
- package/Engines/Extensions/index.js +1 -0
- package/Engines/Extensions/index.js.map +1 -1
- package/Engines/Extensions/pure.d.ts +1 -1
- package/Engines/Extensions/pure.js +1 -1
- package/Engines/Extensions/pure.js.map +1 -1
- package/Engines/Native/Extensions/nativeEngine.cubeTexture.pure.js +88 -39
- package/Engines/Native/Extensions/nativeEngine.cubeTexture.pure.js.map +1 -1
- package/Engines/Native/Extensions/nativeEngine.cubeTexture.types.d.ts +20 -2
- package/Engines/Native/Extensions/nativeEngine.cubeTexture.types.js.map +1 -1
- package/Engines/Native/nativeHardwareTexture.d.ts +8 -1
- package/Engines/Native/nativeHardwareTexture.js +7 -0
- package/Engines/Native/nativeHardwareTexture.js.map +1 -1
- package/Engines/Native/nativeHelpers.js +56 -1
- package/Engines/Native/nativeHelpers.js.map +1 -1
- package/Engines/Native/nativeInterfaces.d.ts +37 -8
- package/Engines/Native/nativeInterfaces.js.map +1 -1
- package/Engines/Native/nativeRenderTargetWrapper.d.ts +40 -0
- package/Engines/Native/nativeRenderTargetWrapper.js +265 -5
- package/Engines/Native/nativeRenderTargetWrapper.js.map +1 -1
- package/Engines/Processors/shaderCodeCursor.d.ts +1 -0
- package/Engines/Processors/shaderCodeCursor.js +40 -3
- package/Engines/Processors/shaderCodeCursor.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.multiRender.pure.js +4 -0
- package/Engines/WebGPU/Extensions/engine.multiRender.pure.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.multiRender.types.d.ts +13 -0
- package/Engines/WebGPU/Extensions/engine.multiRender.types.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.query.pure.js +11 -3
- package/Engines/WebGPU/Extensions/engine.query.pure.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.renderTarget.pure.js +1 -0
- package/Engines/WebGPU/Extensions/engine.renderTarget.pure.js.map +1 -1
- package/Engines/WebGPU/Extensions/index.d.ts +1 -0
- package/Engines/WebGPU/Extensions/index.js +1 -0
- package/Engines/WebGPU/Extensions/index.js.map +1 -1
- package/Engines/WebGPU/Extensions/pure.d.ts +1 -1
- package/Engines/WebGPU/Extensions/pure.js +1 -1
- package/Engines/WebGPU/Extensions/pure.js.map +1 -1
- package/Engines/WebGPU/webgpuBundleList.d.ts +2 -0
- package/Engines/WebGPU/webgpuBundleList.js +4 -0
- package/Engines/WebGPU/webgpuBundleList.js.map +1 -1
- package/Engines/WebGPU/webgpuCacheRenderPipeline.js +5 -2
- package/Engines/WebGPU/webgpuCacheRenderPipeline.js.map +1 -1
- package/Engines/WebGPU/webgpuHardwareTexture.js +3 -1
- package/Engines/WebGPU/webgpuHardwareTexture.js.map +1 -1
- package/Engines/WebGPU/webgpuOcclusionQuery.js +1 -1
- package/Engines/WebGPU/webgpuOcclusionQuery.js.map +1 -1
- package/Engines/WebGPU/webgpuSnapshotRendering.d.ts +4 -0
- package/Engines/WebGPU/webgpuSnapshotRendering.js +40 -7
- package/Engines/WebGPU/webgpuSnapshotRendering.js.map +1 -1
- package/Engines/WebGPU/webgpuTextureHelper.d.ts +1 -1
- package/Engines/WebGPU/webgpuTextureHelper.js +2 -2
- package/Engines/WebGPU/webgpuTextureHelper.js.map +1 -1
- package/Engines/WebGPU/webgpuTextureManager.d.ts +2 -0
- package/Engines/WebGPU/webgpuTextureManager.js +286 -13
- package/Engines/WebGPU/webgpuTextureManager.js.map +1 -1
- package/Engines/abstractEngine.pure.d.ts +17 -1
- package/Engines/abstractEngine.pure.js +17 -5
- package/Engines/abstractEngine.pure.js.map +1 -1
- package/Engines/constants.d.ts +4 -0
- package/Engines/constants.js +4 -0
- package/Engines/constants.js.map +1 -1
- package/Engines/engine.pure.d.ts +0 -1
- package/Engines/engine.pure.js +0 -7
- package/Engines/engine.pure.js.map +1 -1
- package/Engines/nativeEngine.pure.js +1 -1
- package/Engines/nativeEngine.pure.js.map +1 -1
- package/Engines/thinEngine.pure.d.ts +15 -0
- package/Engines/thinEngine.pure.js +61 -14
- package/Engines/thinEngine.pure.js.map +1 -1
- package/Engines/thinNativeEngine.pure.d.ts +218 -17
- package/Engines/thinNativeEngine.pure.js +1438 -165
- package/Engines/thinNativeEngine.pure.js.map +1 -1
- package/Engines/thinWebGPUEngine.d.ts +4 -0
- package/Engines/thinWebGPUEngine.js +16 -2
- package/Engines/thinWebGPUEngine.js.map +1 -1
- package/Engines/webgpuEngine.pure.d.ts +17 -3
- package/Engines/webgpuEngine.pure.js +56 -13
- package/Engines/webgpuEngine.pure.js.map +1 -1
- package/FlowGraph/Blocks/Data/Math/flowGraphMathBlocks.pure.js +2 -2
- package/FlowGraph/Blocks/Data/Math/flowGraphMathBlocks.pure.js.map +1 -1
- package/FlowGraph/Blocks/Data/Transformers/flowGraphJsonPointerParserBlock.pure.d.ts +10 -0
- package/FlowGraph/Blocks/Data/Transformers/flowGraphJsonPointerParserBlock.pure.js +24 -12
- package/FlowGraph/Blocks/Data/Transformers/flowGraphJsonPointerParserBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Data/Utils/flowGraphArrayIndexBlock.pure.d.ts +11 -2
- package/FlowGraph/Blocks/Data/Utils/flowGraphArrayIndexBlock.pure.js +1 -1
- package/FlowGraph/Blocks/Data/Utils/flowGraphArrayIndexBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Data/flowGraphGetPropertyBlock.pure.d.ts +7 -0
- package/FlowGraph/Blocks/Data/flowGraphGetPropertyBlock.pure.js +43 -0
- package/FlowGraph/Blocks/Data/flowGraphGetPropertyBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Event/flowGraphMeshPickEventBlock.pure.d.ts +9 -1
- package/FlowGraph/Blocks/Event/flowGraphMeshPickEventBlock.pure.js +6 -8
- package/FlowGraph/Blocks/Event/flowGraphMeshPickEventBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Event/flowGraphPointerOutEventBlock.pure.d.ts +2 -0
- package/FlowGraph/Blocks/Event/flowGraphPointerOutEventBlock.pure.js +5 -1
- package/FlowGraph/Blocks/Event/flowGraphPointerOutEventBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Event/flowGraphPointerOverEventBlock.pure.d.ts +2 -0
- package/FlowGraph/Blocks/Event/flowGraphPointerOverEventBlock.pure.js +5 -1
- package/FlowGraph/Blocks/Event/flowGraphPointerOverEventBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Event/flowGraphReceiveCustomEventBlock.pure.d.ts +9 -0
- package/FlowGraph/Blocks/Event/flowGraphReceiveCustomEventBlock.pure.js +34 -9
- package/FlowGraph/Blocks/Event/flowGraphReceiveCustomEventBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Event/flowGraphSceneReadyEventBlock.pure.d.ts +2 -0
- package/FlowGraph/Blocks/Event/flowGraphSceneReadyEventBlock.pure.js +4 -0
- package/FlowGraph/Blocks/Event/flowGraphSceneReadyEventBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Event/flowGraphSceneTickEventBlock.pure.d.ts +18 -4
- package/FlowGraph/Blocks/Event/flowGraphSceneTickEventBlock.pure.js +24 -6
- package/FlowGraph/Blocks/Event/flowGraphSceneTickEventBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Event/flowGraphSendCustomEventBlock.pure.js +19 -7
- package/FlowGraph/Blocks/Event/flowGraphSendCustomEventBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Execution/Animation/flowGraphInterpolationBlock.pure.js +3 -3
- package/FlowGraph/Blocks/Execution/Animation/flowGraphInterpolationBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Execution/Animation/flowGraphPlayAnimationBlock.pure.d.ts +20 -2
- package/FlowGraph/Blocks/Execution/Animation/flowGraphPlayAnimationBlock.pure.js +85 -25
- package/FlowGraph/Blocks/Execution/Animation/flowGraphPlayAnimationBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Execution/Animation/flowGraphStopAnimationBlock.pure.d.ts +16 -1
- package/FlowGraph/Blocks/Execution/Animation/flowGraphStopAnimationBlock.pure.js +64 -14
- package/FlowGraph/Blocks/Execution/Animation/flowGraphStopAnimationBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphCancelDelayBlock.pure.d.ts +12 -1
- package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphCancelDelayBlock.pure.js +8 -0
- package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphCancelDelayBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphForLoopBlock.pure.js +4 -1
- package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphForLoopBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphThrottleBlock.pure.d.ts +12 -1
- package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphThrottleBlock.pure.js +5 -1
- package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphThrottleBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Execution/flowGraphConsoleLogBlock.pure.js +64 -16
- package/FlowGraph/Blocks/Execution/flowGraphConsoleLogBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Execution/flowGraphSetPropertyBlock.pure.d.ts +2 -0
- package/FlowGraph/Blocks/Execution/flowGraphSetPropertyBlock.pure.js +14 -2
- package/FlowGraph/Blocks/Execution/flowGraphSetPropertyBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Execution/flowGraphSetVariableBlock.pure.d.ts +5 -1
- package/FlowGraph/Blocks/Execution/flowGraphSetVariableBlock.pure.js +23 -8
- package/FlowGraph/Blocks/Execution/flowGraphSetVariableBlock.pure.js.map +1 -1
- package/FlowGraph/CustomTypes/flowGraphInteger.pure.d.ts +5 -0
- package/FlowGraph/CustomTypes/flowGraphInteger.pure.js +7 -0
- package/FlowGraph/CustomTypes/flowGraphInteger.pure.js.map +1 -1
- package/FlowGraph/CustomTypes/flowGraphMatrix.d.ts +10 -0
- package/FlowGraph/CustomTypes/flowGraphMatrix.js +14 -0
- package/FlowGraph/CustomTypes/flowGraphMatrix.js.map +1 -1
- package/FlowGraph/flowGraph.d.ts +6 -1
- package/FlowGraph/flowGraph.js +41 -9
- package/FlowGraph/flowGraph.js.map +1 -1
- package/FlowGraph/flowGraphAnimationHelpers.d.ts +24 -0
- package/FlowGraph/flowGraphAnimationHelpers.js +21 -0
- package/FlowGraph/flowGraphAnimationHelpers.js.map +1 -0
- package/FlowGraph/flowGraphBlock.js +3 -0
- package/FlowGraph/flowGraphBlock.js.map +1 -1
- package/FlowGraph/flowGraphConnection.d.ts +7 -0
- package/FlowGraph/flowGraphConnection.js +7 -0
- package/FlowGraph/flowGraphConnection.js.map +1 -1
- package/FlowGraph/flowGraphContext.d.ts +2 -1
- package/FlowGraph/flowGraphContext.js +5 -3
- package/FlowGraph/flowGraphContext.js.map +1 -1
- package/FlowGraph/flowGraphCoordinator.d.ts +15 -1
- package/FlowGraph/flowGraphCoordinator.js +47 -16
- package/FlowGraph/flowGraphCoordinator.js.map +1 -1
- package/FlowGraph/flowGraphEventBlock.d.ts +5 -0
- package/FlowGraph/flowGraphEventBlock.js +7 -0
- package/FlowGraph/flowGraphEventBlock.js.map +1 -1
- package/FlowGraph/flowGraphHostResolver.d.ts +2 -1
- package/FlowGraph/flowGraphHostResolver.js.map +1 -1
- package/FlowGraph/flowGraphParser.js +60 -2
- package/FlowGraph/flowGraphParser.js.map +1 -1
- package/FlowGraph/flowGraphValidator.js +0 -4
- package/FlowGraph/flowGraphValidator.js.map +1 -1
- package/FlowGraph/index.d.ts +2 -0
- package/FlowGraph/index.js +2 -0
- package/FlowGraph/index.js.map +1 -1
- package/FlowGraph/pure.d.ts +2 -0
- package/FlowGraph/pure.js +2 -0
- package/FlowGraph/pure.js.map +1 -1
- package/FlowGraph/serialization.d.ts +4 -2
- package/FlowGraph/serialization.js +12 -24
- package/FlowGraph/serialization.js.map +1 -1
- package/FlowGraph/typeDefinitions.d.ts +9 -1
- package/FlowGraph/typeDefinitions.js.map +1 -1
- package/FrameGraph/Node/Blocks/PostProcesses/meshBlendingPostProcessBlock.d.ts +5 -0
- package/FrameGraph/Node/Blocks/PostProcesses/meshBlendingPostProcessBlock.js +8 -0
- package/FrameGraph/Node/Blocks/PostProcesses/meshBlendingPostProcessBlock.js.map +1 -0
- package/FrameGraph/Node/Blocks/PostProcesses/meshBlendingPostProcessBlock.pure.d.ts +87 -0
- package/FrameGraph/Node/Blocks/PostProcesses/meshBlendingPostProcessBlock.pure.js +295 -0
- package/FrameGraph/Node/Blocks/PostProcesses/meshBlendingPostProcessBlock.pure.js.map +1 -0
- package/FrameGraph/Node/Blocks/PostProcesses/pure.d.ts +1 -0
- package/FrameGraph/Node/Blocks/PostProcesses/pure.js +1 -0
- package/FrameGraph/Node/Blocks/PostProcesses/pure.js.map +1 -1
- package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.js +4 -4
- package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.js.map +1 -1
- package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.pure.d.ts +5 -1
- package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.pure.js +13 -1
- package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.pure.js.map +1 -1
- package/FrameGraph/Node/Blocks/Textures/minMaxReducerBlock.d.ts +1 -0
- package/FrameGraph/Node/Blocks/Textures/minMaxReducerBlock.js +4 -0
- package/FrameGraph/Node/Blocks/Textures/minMaxReducerBlock.js.map +1 -0
- package/FrameGraph/Node/Blocks/Textures/minMaxReducerBlock.pure.d.ts +54 -0
- package/FrameGraph/Node/Blocks/Textures/minMaxReducerBlock.pure.js +155 -0
- package/FrameGraph/Node/Blocks/Textures/minMaxReducerBlock.pure.js.map +1 -0
- package/FrameGraph/Node/Blocks/Textures/pure.d.ts +1 -0
- package/FrameGraph/Node/Blocks/Textures/pure.js +1 -0
- package/FrameGraph/Node/Blocks/Textures/pure.js.map +1 -1
- package/FrameGraph/Node/Blocks/allBlocks.pure.js +4 -0
- package/FrameGraph/Node/Blocks/allBlocks.pure.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/Blocks/inputBlock.pure.js +20 -1
- package/FrameGraph/Node/Blocks/inputBlock.pure.js.map +1 -1
- package/FrameGraph/Node/Blocks/pure.d.ts +2 -0
- package/FrameGraph/Node/Blocks/pure.js +2 -0
- package/FrameGraph/Node/Blocks/pure.js.map +1 -1
- package/FrameGraph/Node/Types/nodeRenderGraphTypes.d.ts +4 -2
- package/FrameGraph/Node/Types/nodeRenderGraphTypes.js +4 -2
- package/FrameGraph/Node/Types/nodeRenderGraphTypes.js.map +1 -1
- package/FrameGraph/Node/nodeRenderGraph.js +1 -1
- package/FrameGraph/Node/nodeRenderGraph.js.map +1 -1
- package/FrameGraph/Tasks/Layers/selectionOutlineTask.js +1 -0
- package/FrameGraph/Tasks/Layers/selectionOutlineTask.js.map +1 -1
- package/FrameGraph/Tasks/Misc/cullObjectsTask.js +5 -1
- package/FrameGraph/Tasks/Misc/cullObjectsTask.js.map +1 -1
- package/FrameGraph/Tasks/Misc/lightingVolumeTask.js +1 -0
- package/FrameGraph/Tasks/Misc/lightingVolumeTask.js.map +1 -1
- package/FrameGraph/Tasks/Misc/minMaxReducerTask.d.ts +62 -0
- package/FrameGraph/Tasks/Misc/minMaxReducerTask.js +159 -0
- package/FrameGraph/Tasks/Misc/minMaxReducerTask.js.map +1 -0
- package/FrameGraph/Tasks/PostProcesses/meshBlendingTask.d.ts +69 -0
- package/FrameGraph/Tasks/PostProcesses/meshBlendingTask.js +223 -0
- package/FrameGraph/Tasks/PostProcesses/meshBlendingTask.js.map +1 -0
- package/FrameGraph/Tasks/Rendering/geometryRendererTask.d.ts +25 -3
- package/FrameGraph/Tasks/Rendering/geometryRendererTask.js +72 -34
- package/FrameGraph/Tasks/Rendering/geometryRendererTask.js.map +1 -1
- package/FrameGraph/Tasks/Rendering/objectRendererTask.js +3 -1
- package/FrameGraph/Tasks/Rendering/objectRendererTask.js.map +1 -1
- package/FrameGraph/frameGraph.d.ts +4 -0
- package/FrameGraph/frameGraph.js +14 -0
- package/FrameGraph/frameGraph.js.map +1 -1
- package/FrameGraph/frameGraphObjectList.d.ts +6 -1
- package/FrameGraph/frameGraphObjectList.js.map +1 -1
- package/FrameGraph/frameGraphRenderContext.d.ts +3 -1
- package/FrameGraph/frameGraphRenderContext.js +5 -5
- package/FrameGraph/frameGraphRenderContext.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/FrameGraph/pure.d.ts +2 -0
- package/FrameGraph/pure.js +2 -0
- package/FrameGraph/pure.js.map +1 -1
- package/Inputs/scene.inputManager.d.ts +4 -0
- package/Inputs/scene.inputManager.js +50 -8
- package/Inputs/scene.inputManager.js.map +1 -1
- package/Lights/Clustered/clusteredLightingSceneComponent.pure.d.ts +5 -0
- package/Lights/Clustered/clusteredLightingSceneComponent.pure.js +22 -1
- package/Lights/Clustered/clusteredLightingSceneComponent.pure.js.map +1 -1
- package/Lights/Shadows/cascadedShadowGenerator.pure.js +7 -3
- package/Lights/Shadows/cascadedShadowGenerator.pure.js.map +1 -1
- package/Materials/GaussianSplatting/gaussianPointSplattingBlitMaterial.d.ts +7 -0
- package/Materials/GaussianSplatting/gaussianPointSplattingBlitMaterial.js +8 -0
- package/Materials/GaussianSplatting/gaussianPointSplattingBlitMaterial.js.map +1 -0
- package/Materials/GaussianSplatting/gaussianPointSplattingBlitMaterial.pure.d.ts +54 -0
- package/Materials/GaussianSplatting/gaussianPointSplattingBlitMaterial.pure.js +81 -0
- package/Materials/GaussianSplatting/gaussianPointSplattingBlitMaterial.pure.js.map +1 -0
- package/Materials/GaussianSplatting/gaussianPointSplattingDepthBlitMaterial.d.ts +7 -0
- package/Materials/GaussianSplatting/gaussianPointSplattingDepthBlitMaterial.js +8 -0
- package/Materials/GaussianSplatting/gaussianPointSplattingDepthBlitMaterial.js.map +1 -0
- package/Materials/GaussianSplatting/gaussianPointSplattingDepthBlitMaterial.pure.d.ts +60 -0
- package/Materials/GaussianSplatting/gaussianPointSplattingDepthBlitMaterial.pure.js +90 -0
- package/Materials/GaussianSplatting/gaussianPointSplattingDepthBlitMaterial.pure.js.map +1 -0
- package/Materials/GaussianSplatting/gaussianSplattingDebugMaterialPlugin.pure.d.ts +31 -0
- package/Materials/GaussianSplatting/gaussianSplattingDebugMaterialPlugin.pure.js +103 -5
- package/Materials/GaussianSplatting/gaussianSplattingDebugMaterialPlugin.pure.js.map +1 -1
- package/Materials/GaussianSplatting/gaussianSplattingGpuPickingMaterialPlugin.pure.js +6 -6
- package/Materials/GaussianSplatting/gaussianSplattingGpuPickingMaterialPlugin.pure.js.map +1 -1
- package/Materials/GaussianSplatting/gaussianSplattingMaterial.pure.d.ts +26 -1
- package/Materials/GaussianSplatting/gaussianSplattingMaterial.pure.js +153 -49
- package/Materials/GaussianSplatting/gaussianSplattingMaterial.pure.js.map +1 -1
- package/Materials/GaussianSplatting/gaussianSplattingOverdrawMaterialPlugin.d.ts +1 -0
- package/Materials/GaussianSplatting/gaussianSplattingOverdrawMaterialPlugin.js +4 -0
- package/Materials/GaussianSplatting/gaussianSplattingOverdrawMaterialPlugin.js.map +1 -0
- package/Materials/GaussianSplatting/gaussianSplattingOverdrawMaterialPlugin.pure.d.ts +83 -0
- package/Materials/GaussianSplatting/gaussianSplattingOverdrawMaterialPlugin.pure.js +191 -0
- package/Materials/GaussianSplatting/gaussianSplattingOverdrawMaterialPlugin.pure.js.map +1 -0
- package/Materials/GaussianSplatting/gaussianSplattingSizeMaterialPlugin.d.ts +1 -0
- package/Materials/GaussianSplatting/gaussianSplattingSizeMaterialPlugin.js +4 -0
- package/Materials/GaussianSplatting/gaussianSplattingSizeMaterialPlugin.js.map +1 -0
- package/Materials/GaussianSplatting/gaussianSplattingSizeMaterialPlugin.pure.d.ts +62 -0
- package/Materials/GaussianSplatting/gaussianSplattingSizeMaterialPlugin.pure.js +125 -0
- package/Materials/GaussianSplatting/gaussianSplattingSizeMaterialPlugin.pure.js.map +1 -0
- package/Materials/GaussianSplatting/gaussianSplattingSolidColorMaterialPlugin.pure.js +5 -5
- package/Materials/GaussianSplatting/gaussianSplattingSolidColorMaterialPlugin.pure.js.map +1 -1
- package/Materials/GaussianSplatting/pure.d.ts +4 -0
- package/Materials/GaussianSplatting/pure.js +4 -0
- package/Materials/GaussianSplatting/pure.js.map +1 -1
- package/Materials/Node/Blocks/Dual/imageSourceBlock.pure.d.ts +1 -0
- package/Materials/Node/Blocks/Dual/imageSourceBlock.pure.js +12 -0
- package/Materials/Node/Blocks/Dual/imageSourceBlock.pure.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.pure.js +11 -1
- package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.pure.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/prePassOutputBlock.pure.js +17 -2
- package/Materials/Node/Blocks/Fragment/prePassOutputBlock.pure.js.map +1 -1
- package/Materials/Node/Blocks/GaussianSplatting/gaussianSplattingBlock.pure.js +2 -2
- package/Materials/Node/Blocks/GaussianSplatting/gaussianSplattingBlock.pure.js.map +1 -1
- package/Materials/Node/nodeMaterial.pure.d.ts +4 -0
- package/Materials/Node/nodeMaterial.pure.js +4 -0
- package/Materials/Node/nodeMaterial.pure.js.map +1 -1
- package/Materials/Node/nodeMaterialBuildState.d.ts +1 -1
- package/Materials/Node/nodeMaterialBuildState.js +25 -3
- package/Materials/Node/nodeMaterialBuildState.js.map +1 -1
- package/Materials/PBR/openpbrMaterial.pure.d.ts +2 -0
- package/Materials/PBR/pbrBaseMaterial.pure.d.ts +2 -0
- package/Materials/Textures/Procedurals/proceduralTexture.pure.d.ts +14 -14
- package/Materials/Textures/Procedurals/proceduralTexture.pure.js +37 -13
- package/Materials/Textures/Procedurals/proceduralTexture.pure.js.map +1 -1
- package/Materials/Textures/baseTexture.pure.js +3 -0
- package/Materials/Textures/baseTexture.pure.js.map +1 -1
- package/Materials/Textures/cubeTexture.pure.js +1 -1
- package/Materials/Textures/cubeTexture.pure.js.map +1 -1
- package/Materials/Textures/internalTexture.d.ts +8 -1
- package/Materials/Textures/internalTexture.js +9 -2
- package/Materials/Textures/internalTexture.js.map +1 -1
- package/Materials/Textures/mirrorTexture.pure.js +3 -1
- package/Materials/Textures/mirrorTexture.pure.js.map +1 -1
- package/Materials/Textures/rawTexture2DArray.functions.d.ts +3 -3
- package/Materials/Textures/rawTexture2DArray.functions.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/texture.pure.js +1 -1
- package/Materials/Textures/texture.pure.js.map +1 -1
- package/Materials/Textures/textureHelper.functions.d.ts +14 -0
- package/Materials/Textures/textureHelper.functions.js +24 -0
- package/Materials/Textures/textureHelper.functions.js.map +1 -1
- package/Materials/ditheredTileFadeMaterialPlugin.d.ts +210 -0
- package/Materials/ditheredTileFadeMaterialPlugin.js +509 -0
- package/Materials/ditheredTileFadeMaterialPlugin.js.map +1 -0
- package/Materials/effectRenderer.pure.d.ts +4 -0
- package/Materials/effectRenderer.pure.js +3 -2
- package/Materials/effectRenderer.pure.js.map +1 -1
- package/Materials/index.d.ts +5 -0
- package/Materials/index.js +5 -0
- package/Materials/index.js.map +1 -1
- package/Materials/material.pure.js +25 -12
- package/Materials/material.pure.js.map +1 -1
- package/Materials/materialHelper.geometryrendering.d.ts +46 -1
- package/Materials/materialHelper.geometryrendering.js +105 -8
- package/Materials/materialHelper.geometryrendering.js.map +1 -1
- package/Materials/prepass.defines.d.ts +2 -0
- package/Materials/prepass.defines.js +2 -0
- package/Materials/prepass.defines.js.map +1 -1
- package/Materials/pure.d.ts +5 -0
- package/Materials/pure.js +5 -0
- package/Materials/pure.js.map +1 -1
- package/Materials/standardMaterial.pure.d.ts +10 -0
- package/Materials/standardMaterial.pure.js +30 -5
- package/Materials/standardMaterial.pure.js.map +1 -1
- package/Meshes/Builders/polygonBuilder.pure.d.ts +4 -0
- package/Meshes/Builders/polygonBuilder.pure.js +3 -0
- package/Meshes/Builders/polygonBuilder.pure.js.map +1 -1
- package/Meshes/GaussianSplatting/gaussianPointSplattingController.d.ts +8 -0
- package/Meshes/GaussianSplatting/gaussianPointSplattingController.js +11 -0
- package/Meshes/GaussianSplatting/gaussianPointSplattingController.js.map +1 -0
- package/Meshes/GaussianSplatting/gaussianPointSplattingController.pure.d.ts +231 -0
- package/Meshes/GaussianSplatting/gaussianPointSplattingController.pure.js +1212 -0
- package/Meshes/GaussianSplatting/gaussianPointSplattingController.pure.js.map +1 -0
- package/Meshes/GaussianSplatting/gaussianPointSplattingRenderer.d.ts +14 -0
- package/Meshes/GaussianSplatting/gaussianPointSplattingRenderer.js +15 -0
- package/Meshes/GaussianSplatting/gaussianPointSplattingRenderer.js.map +1 -0
- package/Meshes/GaussianSplatting/gaussianPointSplattingRenderer.pure.d.ts +285 -0
- package/Meshes/GaussianSplatting/gaussianPointSplattingRenderer.pure.js +812 -0
- package/Meshes/GaussianSplatting/gaussianPointSplattingRenderer.pure.js.map +1 -0
- package/Meshes/GaussianSplatting/gaussianSplatting.functions.d.ts +19 -0
- package/Meshes/GaussianSplatting/gaussianSplatting.functions.js +23 -0
- package/Meshes/GaussianSplatting/gaussianSplatting.functions.js.map +1 -0
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.d.ts +1 -0
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.js +2 -0
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.js.map +1 -1
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.pure.d.ts +163 -14
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.pure.js +239 -24
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.pure.js.map +1 -1
- package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.pure.d.ts +34 -4
- package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.pure.js +125 -25
- package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.pure.js.map +1 -1
- package/Meshes/GaussianSplatting/pure.d.ts +2 -0
- package/Meshes/GaussianSplatting/pure.js +2 -0
- package/Meshes/GaussianSplatting/pure.js.map +1 -1
- package/Meshes/Node/Blocks/booleanGeometryBlock.pure.js +25 -11
- package/Meshes/Node/Blocks/booleanGeometryBlock.pure.js.map +1 -1
- package/Meshes/abstractMesh.pure.d.ts +30 -0
- package/Meshes/abstractMesh.pure.js +54 -0
- package/Meshes/abstractMesh.pure.js.map +1 -1
- package/Meshes/index.d.ts +2 -0
- package/Meshes/index.js +2 -0
- package/Meshes/index.js.map +1 -1
- package/Meshes/instancedMesh.pure.d.ts +5 -0
- package/Meshes/instancedMesh.pure.js +12 -0
- package/Meshes/instancedMesh.pure.js.map +1 -1
- package/Meshes/mesh.pure.js +23 -8
- package/Meshes/mesh.pure.js.map +1 -1
- package/Meshes/meshBlendingTag.d.ts +47 -0
- package/Meshes/meshBlendingTag.js +64 -0
- package/Meshes/meshBlendingTag.js.map +1 -0
- package/Meshes/polygonMesh.js +2 -2
- package/Meshes/polygonMesh.js.map +1 -1
- package/Meshes/pure.d.ts +2 -0
- package/Meshes/pure.js +2 -0
- package/Meshes/pure.js.map +1 -1
- package/Meshes/subMesh.pure.d.ts +11 -2
- package/Meshes/subMesh.pure.js +20 -5
- package/Meshes/subMesh.pure.js.map +1 -1
- package/Meshes/thinInstanceMesh.pure.js +1 -0
- package/Meshes/thinInstanceMesh.pure.js.map +1 -1
- package/Misc/andOrNotEvaluator.js +4 -0
- package/Misc/andOrNotEvaluator.js.map +1 -1
- package/Misc/fileTools.pure.js +21 -0
- package/Misc/fileTools.pure.js.map +1 -1
- package/Misc/minMaxReducer.pure.d.ts +6 -0
- package/Misc/minMaxReducer.pure.js +10 -0
- package/Misc/minMaxReducer.pure.js.map +1 -1
- package/Misc/snapshotRenderingHelper.js +2 -2
- package/Misc/snapshotRenderingHelper.js.map +1 -1
- package/Misc/thinMinMaxReducer.d.ts +19 -2
- package/Misc/thinMinMaxReducer.js +74 -21
- package/Misc/thinMinMaxReducer.js.map +1 -1
- package/Misc/tools.pure.js +1 -1
- package/Misc/tools.pure.js.map +1 -1
- package/Particles/Node/Blocks/Update/updateNoiseBlock.pure.js +19 -7
- package/Particles/Node/Blocks/Update/updateNoiseBlock.pure.js.map +1 -1
- package/Particles/Node/Blocks/particleSourceTextureBlock.pure.js +3 -2
- package/Particles/Node/Blocks/particleSourceTextureBlock.pure.js.map +1 -1
- package/Particles/gpuParticleSystem.pure.d.ts +4 -0
- package/Particles/gpuParticleSystem.pure.js +101 -32
- package/Particles/gpuParticleSystem.pure.js.map +1 -1
- package/Particles/particle.js +3 -2
- package/Particles/particle.js.map +1 -1
- package/Particles/solidParticleSystem.js +7 -1
- package/Particles/solidParticleSystem.js.map +1 -1
- package/Particles/thinParticleSystem.function.d.ts +6 -0
- package/Particles/thinParticleSystem.function.js +144 -88
- package/Particles/thinParticleSystem.function.js.map +1 -1
- package/Particles/thinParticleSystem.pure.d.ts +8 -0
- package/Particles/thinParticleSystem.pure.js +154 -28
- package/Particles/thinParticleSystem.pure.js.map +1 -1
- package/Particles/webgl2ParticleSystem.pure.d.ts +1 -0
- package/Particles/webgl2ParticleSystem.pure.js +12 -4
- package/Particles/webgl2ParticleSystem.pure.js.map +1 -1
- package/Physics/v2/ragdoll.d.ts +2 -4
- package/Physics/v2/ragdoll.js +11 -4
- package/Physics/v2/ragdoll.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/lensRenderingPipeline.pure.js +7 -0
- package/PostProcesses/RenderPipeline/Pipelines/lensRenderingPipeline.pure.js.map +1 -1
- package/PostProcesses/index.d.ts +2 -0
- package/PostProcesses/index.js +2 -0
- package/PostProcesses/index.js.map +1 -1
- package/PostProcesses/meshBlendingBlueNoise.d.ts +15 -0
- package/PostProcesses/meshBlendingBlueNoise.js +77 -0
- package/PostProcesses/meshBlendingBlueNoise.js.map +1 -0
- package/PostProcesses/meshBlendingPostProcess.d.ts +131 -0
- package/PostProcesses/meshBlendingPostProcess.js +315 -0
- package/PostProcesses/meshBlendingPostProcess.js.map +1 -0
- package/PostProcesses/pure.d.ts +2 -0
- package/PostProcesses/pure.js +2 -0
- package/PostProcesses/pure.js.map +1 -1
- package/PostProcesses/thinMeshBlendingPostProcess.d.ts +339 -0
- package/PostProcesses/thinMeshBlendingPostProcess.js +771 -0
- package/PostProcesses/thinMeshBlendingPostProcess.js.map +1 -0
- package/Rendering/IBLShadows/iblShadowsRenderPipeline.pure.js +6 -6
- package/Rendering/IBLShadows/iblShadowsRenderPipeline.pure.js.map +1 -1
- package/Rendering/IBLShadows/iblShadowsVoxelRenderer.pure.d.ts +12 -0
- package/Rendering/IBLShadows/iblShadowsVoxelRenderer.pure.js +50 -25
- package/Rendering/IBLShadows/iblShadowsVoxelRenderer.pure.js.map +1 -1
- package/Rendering/boundingBoxRenderer.pure.js +2 -1
- package/Rendering/boundingBoxRenderer.pure.js.map +1 -1
- package/Rendering/depthRenderer.pure.d.ts +9 -0
- package/Rendering/depthRenderer.pure.js +15 -4
- package/Rendering/depthRenderer.pure.js.map +1 -1
- package/Rendering/edgesRenderer.pure.d.ts +4 -2
- package/Rendering/edgesRenderer.pure.js +11 -2
- package/Rendering/edgesRenderer.pure.js.map +1 -1
- package/Rendering/fluidRenderer/fluidRenderingObject.d.ts +14 -0
- package/Rendering/fluidRenderer/fluidRenderingObject.js +26 -0
- package/Rendering/fluidRenderer/fluidRenderingObject.js.map +1 -1
- package/Rendering/fluidRenderer/fluidRenderingObjectParticleSystem.d.ts +13 -3
- package/Rendering/fluidRenderer/fluidRenderingObjectParticleSystem.js +22 -9
- package/Rendering/fluidRenderer/fluidRenderingObjectParticleSystem.js.map +1 -1
- package/Rendering/fluidRenderer/fluidRenderingTargetRenderer.js +3 -0
- package/Rendering/fluidRenderer/fluidRenderingTargetRenderer.js.map +1 -1
- package/Rendering/geometryBufferRenderer.pure.d.ts +38 -4
- package/Rendering/geometryBufferRenderer.pure.js +130 -18
- package/Rendering/geometryBufferRenderer.pure.js.map +1 -1
- package/Rendering/objectRenderer.d.ts +7 -1
- package/Rendering/objectRenderer.js +45 -7
- package/Rendering/objectRenderer.js.map +1 -1
- package/Rendering/outlineRenderer.pure.js +6 -2
- package/Rendering/outlineRenderer.pure.js.map +1 -1
- package/Rendering/prePassRenderer.pure.js +3 -3
- package/Rendering/prePassRenderer.pure.js.map +1 -1
- package/Rendering/renderingManager.d.ts +1 -1
- package/Rendering/renderingManager.js +5 -4
- package/Rendering/renderingManager.js.map +1 -1
- package/Shaders/ShadersInclude/defaultFragmentAlpha.d.ts +5 -0
- package/Shaders/ShadersInclude/defaultFragmentAlpha.js +34 -0
- package/Shaders/ShadersInclude/defaultFragmentAlpha.js.map +1 -0
- package/Shaders/ShadersInclude/gaussianSplatting.js +3 -1
- package/Shaders/ShadersInclude/gaussianSplatting.js.map +1 -1
- package/Shaders/ShadersInclude/gaussianSplattingVertexDeclaration.js +5 -1
- package/Shaders/ShadersInclude/gaussianSplattingVertexDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/geometryRenderingFragment.d.ts +5 -0
- package/Shaders/ShadersInclude/geometryRenderingFragment.js +74 -0
- package/Shaders/ShadersInclude/geometryRenderingFragment.js.map +1 -0
- package/Shaders/ShadersInclude/lightsFragmentFunctions.js +27 -3
- package/Shaders/ShadersInclude/lightsFragmentFunctions.js.map +1 -1
- package/Shaders/ShadersInclude/mrtFragmentDeclaration.js +89 -0
- package/Shaders/ShadersInclude/mrtFragmentDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/oitDeclaration.js +1 -1
- package/Shaders/ShadersInclude/oitDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/openpbrBlockPrePass.js +24 -17
- package/Shaders/ShadersInclude/openpbrBlockPrePass.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockPrePass.js +27 -20
- package/Shaders/ShadersInclude/pbrBlockPrePass.js.map +1 -1
- package/Shaders/ShadersInclude/pbrDebug.js +6 -2
- package/Shaders/ShadersInclude/pbrDebug.js.map +1 -1
- package/Shaders/ShadersInclude/prePassDeclaration.js +95 -2
- package/Shaders/ShadersInclude/prePassDeclaration.js.map +1 -1
- package/Shaders/default.fragment.js +31 -40
- package/Shaders/default.fragment.js.map +1 -1
- package/Shaders/depthOfField.fragment.js +13 -9
- package/Shaders/depthOfField.fragment.js.map +1 -1
- package/Shaders/fluidRenderingParticleDepth.vertex.js +16 -1
- package/Shaders/fluidRenderingParticleDepth.vertex.js.map +1 -1
- package/Shaders/fluidRenderingParticleThickness.vertex.js +16 -1
- package/Shaders/fluidRenderingParticleThickness.vertex.js.map +1 -1
- package/Shaders/gaussianSplatting.fragment.js +63 -3
- package/Shaders/gaussianSplatting.fragment.js.map +1 -1
- package/Shaders/gaussianSplatting.vertex.js +80 -0
- package/Shaders/gaussianSplatting.vertex.js.map +1 -1
- package/Shaders/geometry.fragment.js +17 -11
- package/Shaders/geometry.fragment.js.map +1 -1
- package/Shaders/gpuRenderParticles.fragment.js +43 -1
- package/Shaders/gpuRenderParticles.fragment.js.map +1 -1
- package/Shaders/gpuRenderParticles.vertex.js +96 -16
- package/Shaders/gpuRenderParticles.vertex.js.map +1 -1
- package/Shaders/meshBlending.fragment.d.ts +5 -0
- package/Shaders/meshBlending.fragment.js +519 -0
- package/Shaders/meshBlending.fragment.js.map +1 -0
- package/Shaders/minmaxRedux.fragment.js +6 -1
- package/Shaders/minmaxRedux.fragment.js.map +1 -1
- package/Shaders/particles.fragment.js +43 -1
- package/Shaders/particles.fragment.js.map +1 -1
- package/Shaders/particles.vertex.js +84 -3
- package/Shaders/particles.vertex.js.map +1 -1
- package/Shaders/sprites.fragment.js +52 -2
- package/Shaders/sprites.fragment.js.map +1 -1
- package/Shaders/sprites.vertex.js +62 -1
- package/Shaders/sprites.vertex.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/defaultFragmentAlpha.d.ts +5 -0
- package/ShadersWGSL/ShadersInclude/defaultFragmentAlpha.js +33 -0
- package/ShadersWGSL/ShadersInclude/defaultFragmentAlpha.js.map +1 -0
- package/ShadersWGSL/ShadersInclude/gaussianPointSplatting.d.ts +5 -0
- package/ShadersWGSL/ShadersInclude/gaussianPointSplatting.js +65 -0
- package/ShadersWGSL/ShadersInclude/gaussianPointSplatting.js.map +1 -0
- package/ShadersWGSL/ShadersInclude/gaussianPointSplattingScan.d.ts +5 -0
- package/ShadersWGSL/ShadersInclude/gaussianPointSplattingScan.js +17 -0
- package/ShadersWGSL/ShadersInclude/gaussianPointSplattingScan.js.map +1 -0
- package/ShadersWGSL/ShadersInclude/gaussianSplatting.d.ts +1 -0
- package/ShadersWGSL/ShadersInclude/gaussianSplatting.js +6 -78
- package/ShadersWGSL/ShadersInclude/gaussianSplatting.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/gaussianSplattingFragmentDeclaration.js +2 -2
- package/ShadersWGSL/ShadersInclude/gaussianSplattingFragmentDeclaration.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/gaussianSplattingShared.d.ts +5 -0
- package/ShadersWGSL/ShadersInclude/gaussianSplattingShared.js +79 -0
- package/ShadersWGSL/ShadersInclude/gaussianSplattingShared.js.map +1 -0
- package/ShadersWGSL/ShadersInclude/geometryRenderingFragment.d.ts +6 -0
- package/ShadersWGSL/ShadersInclude/geometryRenderingFragment.js +76 -0
- package/ShadersWGSL/ShadersInclude/geometryRenderingFragment.js.map +1 -0
- package/ShadersWGSL/ShadersInclude/lightFragment.js +1 -1
- package/ShadersWGSL/ShadersInclude/lightFragment.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/lightsFragmentFunctions.js +27 -3
- package/ShadersWGSL/ShadersInclude/lightsFragmentFunctions.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/meshBlendTagFragmentOutput.d.ts +5 -0
- package/ShadersWGSL/ShadersInclude/meshBlendTagFragmentOutput.js +18 -0
- package/ShadersWGSL/ShadersInclude/meshBlendTagFragmentOutput.js.map +1 -0
- package/ShadersWGSL/ShadersInclude/openpbrBlockPrePass.d.ts +1 -0
- package/ShadersWGSL/ShadersInclude/openpbrBlockPrePass.js +11 -25
- package/ShadersWGSL/ShadersInclude/openpbrBlockPrePass.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/pbrBlockPrePass.d.ts +1 -0
- package/ShadersWGSL/ShadersInclude/pbrBlockPrePass.js +11 -25
- package/ShadersWGSL/ShadersInclude/pbrBlockPrePass.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/pbrDebug.js +5 -1
- package/ShadersWGSL/ShadersInclude/pbrDebug.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/prePassDeclaration.js +6 -1
- package/ShadersWGSL/ShadersInclude/prePassDeclaration.js.map +1 -1
- package/ShadersWGSL/default.fragment.js +17 -48
- package/ShadersWGSL/default.fragment.js.map +1 -1
- package/ShadersWGSL/fluidRenderingParticleDepth.vertex.js +15 -2
- package/ShadersWGSL/fluidRenderingParticleDepth.vertex.js.map +1 -1
- package/ShadersWGSL/fluidRenderingParticleThickness.vertex.js +15 -2
- package/ShadersWGSL/fluidRenderingParticleThickness.vertex.js.map +1 -1
- package/ShadersWGSL/gaussianPointSplattingBlit.fragment.d.ts +5 -0
- package/ShadersWGSL/gaussianPointSplattingBlit.fragment.js +22 -0
- package/ShadersWGSL/gaussianPointSplattingBlit.fragment.js.map +1 -0
- package/ShadersWGSL/gaussianPointSplattingBlit.vertex.d.ts +5 -0
- package/ShadersWGSL/gaussianPointSplattingBlit.vertex.js +19 -0
- package/ShadersWGSL/gaussianPointSplattingBlit.vertex.js.map +1 -0
- package/ShadersWGSL/gaussianPointSplattingDepthBlit.fragment.d.ts +5 -0
- package/ShadersWGSL/gaussianPointSplattingDepthBlit.fragment.js +21 -0
- package/ShadersWGSL/gaussianPointSplattingDepthBlit.fragment.js.map +1 -0
- package/ShadersWGSL/gaussianSplatting.fragment.js +63 -2
- package/ShadersWGSL/gaussianSplatting.fragment.js.map +1 -1
- package/ShadersWGSL/gaussianSplatting.vertex.js +82 -1
- package/ShadersWGSL/gaussianSplatting.vertex.js.map +1 -1
- package/ShadersWGSL/gaussianSplattingDepth.vertex.js +2 -1
- package/ShadersWGSL/gaussianSplattingDepth.vertex.js.map +1 -1
- package/ShadersWGSL/gaussianSplattingVoxel.vertex.js +2 -1
- package/ShadersWGSL/gaussianSplattingVoxel.vertex.js.map +1 -1
- package/ShadersWGSL/geometry.fragment.js +37 -2
- package/ShadersWGSL/geometry.fragment.js.map +1 -1
- package/ShadersWGSL/gpsHiZBuild.compute.d.ts +5 -0
- package/ShadersWGSL/gpsHiZBuild.compute.js +16 -0
- package/ShadersWGSL/gpsHiZBuild.compute.js.map +1 -0
- package/ShadersWGSL/gpsPartition.compute.d.ts +5 -0
- package/ShadersWGSL/gpsPartition.compute.js +27 -0
- package/ShadersWGSL/gpsPartition.compute.js.map +1 -0
- package/ShadersWGSL/gpsPreprocess.compute.d.ts +5 -0
- package/ShadersWGSL/gpsPreprocess.compute.js +86 -0
- package/ShadersWGSL/gpsPreprocess.compute.js.map +1 -0
- package/ShadersWGSL/gpsResolve.compute.d.ts +5 -0
- package/ShadersWGSL/gpsResolve.compute.js +41 -0
- package/ShadersWGSL/gpsResolve.compute.js.map +1 -0
- package/ShadersWGSL/gpsScanAdd.compute.d.ts +5 -0
- package/ShadersWGSL/gpsScanAdd.compute.js +22 -0
- package/ShadersWGSL/gpsScanAdd.compute.js.map +1 -0
- package/ShadersWGSL/gpsScanBlocks.compute.d.ts +5 -0
- package/ShadersWGSL/gpsScanBlocks.compute.js +23 -0
- package/ShadersWGSL/gpsScanBlocks.compute.js.map +1 -0
- package/ShadersWGSL/gpsScanSums.compute.d.ts +5 -0
- package/ShadersWGSL/gpsScanSums.compute.js +30 -0
- package/ShadersWGSL/gpsScanSums.compute.js.map +1 -0
- package/ShadersWGSL/gpsSplat.compute.d.ts +5 -0
- package/ShadersWGSL/gpsSplat.compute.js +37 -0
- package/ShadersWGSL/gpsSplat.compute.js.map +1 -0
- package/ShadersWGSL/gpuRenderParticles.fragment.js +47 -2
- package/ShadersWGSL/gpuRenderParticles.fragment.js.map +1 -1
- package/ShadersWGSL/gpuRenderParticles.vertex.js +110 -7
- package/ShadersWGSL/gpuRenderParticles.vertex.js.map +1 -1
- package/ShadersWGSL/meshBlending.fragment.d.ts +5 -0
- package/ShadersWGSL/meshBlending.fragment.js +576 -0
- package/ShadersWGSL/meshBlending.fragment.js.map +1 -0
- package/ShadersWGSL/minmaxRedux.fragment.js +20 -3
- package/ShadersWGSL/minmaxRedux.fragment.js.map +1 -1
- package/ShadersWGSL/openpbr.fragment.js +2 -1
- package/ShadersWGSL/openpbr.fragment.js.map +1 -1
- package/ShadersWGSL/particles.fragment.js +45 -1
- package/ShadersWGSL/particles.fragment.js.map +1 -1
- package/ShadersWGSL/particles.vertex.js +86 -4
- package/ShadersWGSL/particles.vertex.js.map +1 -1
- package/ShadersWGSL/pbr.fragment.js +2 -1
- package/ShadersWGSL/pbr.fragment.js.map +1 -1
- package/ShadersWGSL/sprites.fragment.js +56 -2
- package/ShadersWGSL/sprites.fragment.js.map +1 -1
- package/ShadersWGSL/sprites.vertex.js +62 -1
- package/ShadersWGSL/sprites.vertex.js.map +1 -1
- package/Sprites/spriteManager.d.ts +13 -0
- package/Sprites/spriteManager.js +15 -0
- package/Sprites/spriteManager.js.map +1 -1
- package/Sprites/spriteRenderer.d.ts +24 -1
- package/Sprites/spriteRenderer.js +368 -50
- package/Sprites/spriteRenderer.js.map +1 -1
- package/Sprites/thinSprite.d.ts +4 -0
- package/Sprites/thinSprite.js +4 -0
- package/Sprites/thinSprite.js.map +1 -1
- package/States/alphaCullingState.d.ts +3 -1
- package/States/alphaCullingState.js +18 -3
- package/States/alphaCullingState.js.map +1 -1
- package/XR/features/WebXRSpaceWarp.pure.js +2 -1
- package/XR/features/WebXRSpaceWarp.pure.js.map +1 -1
- package/XR/webXRDefaultExperience.d.ts +5 -1
- package/XR/webXRDefaultExperience.js.map +1 -1
- package/XR/webXREnterExitUI.d.ts +2 -1
- package/XR/webXREnterExitUI.js.map +1 -1
- package/assetContainer.d.ts +1 -0
- package/assetContainer.js +5 -1
- package/assetContainer.js.map +1 -1
- package/package.json +1 -1
- package/scene.pure.d.ts +36 -2
- package/scene.pure.js +63 -4
- package/scene.pure.js.map +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gaussianPointSplattingRenderer.pure.js","sourceRoot":"","sources":["../../../../../dev/core/src/Meshes/GaussianSplatting/gaussianPointSplattingRenderer.pure.ts"],"names":[],"mappings":"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","sourcesContent":["/** This file must only contain pure code and pure imports */\n\nimport { type Nullable } from \"core/types\";\nimport { type AbstractEngine } from \"core/Engines/abstractEngine.pure\";\nimport { type WebGPUEngine } from \"core/Engines/webgpuEngine.pure\";\nimport { type Matrix } from \"core/Maths/math.vector.pure\";\nimport { Constants } from \"core/Engines/constants\";\nimport { ComputeShader } from \"core/Compute/computeShader.pure\";\nimport { StorageBuffer } from \"core/Buffers/storageBuffer\";\nimport { UniformBuffer } from \"core/Materials/uniformBuffer\";\nimport { type ComputeBindingMapping } from \"core/Engines/Extensions/engine.computeShader.pure\";\n\nconst WorkgroupSize = 256;\nconst ScanBlockSize = 512;\nconst MaxDispatchGroupsPerDimension = 65535;\nconst DepthClearSentinel = 0xffffffff;\n// Must match GPS_PARTITION_BUCKETS in the shaders.\nconst PartitionBuckets = 65536;\n\n/**\n * Whether projected depth depends on view-space x/y.\n * @param projection the camera projection\n * @returns whether depth must be evaluated separately at each sampled pixel\n * @internal\n */\nexport function _HasGaussianPointSplattingProjectedDepth(projection: Matrix): boolean {\n const m = projection.m;\n return m[2] !== 0 || m[6] !== 0 || m[3] !== 0 || m[7] !== 0;\n}\n\n/**\n * Bytes per Gaussian of the u32-packed 8-bit SH coefficients for an SH degree.\n * @param shDegree spherical-harmonics degree (0-4)\n * @returns packed SH bytes per Gaussian (0 at degree 0)\n * @internal\n */\nexport function _GetPackedShBytesPerSplat(shDegree: number): number {\n if (shDegree < 1) {\n return 0;\n }\n const shDim = shDegree === 1 ? 3 : shDegree === 2 ? 8 : shDegree === 3 ? 15 : 24;\n return Math.ceil((shDim * 3) / 4) * 4;\n}\n\n/**\n * Owns the WebGPU compute pipeline and GPU buffers for Gaussian Point Splatting (the stochastic,\n * sort-free point-splatting technique). Engine-focused: it knows nothing about the scene graph\n * beyond the camera matrices and viewport size handed to it.\n *\n * Per-frame pipeline (dispatched before the render pass):\n * preprocess (1 thread/Gaussian: transform, cull, cache screen state, emit a point weight)\n * scan (Blelloch prefix sum of the weights into a CDF + GPU-written indirect dispatch args)\n * partition (bucketed point-to-Gaussian table that narrows the splat search)\n * splat (indirect, 1 thread/point: find its Gaussian in the CDF, atomicMin its sample)\n * resolve (accumulate the packed image buffer into the full-float buffer, reset it)\n * hi-Z build (max-reduce this frame's depth into next frame's occlusion pyramid)\n *\n */\nexport class GaussianPointSplattingRenderer {\n private readonly _engine: AbstractEngine;\n\n private _preprocessCs!: ComputeShader;\n private _preprocessBindings!: ComputeBindingMapping;\n private _preprocessShDegree = -1;\n private _scanBlocksCs: ComputeShader;\n private _scanSumsCs: ComputeShader;\n private _scanAddCs: ComputeShader;\n private _partitionCs: ComputeShader;\n private _hiZBuildCs: ComputeShader;\n private _splatCs: ComputeShader;\n private _resolveCs: ComputeShader;\n\n private _uniforms: UniformBuffer;\n private _resolveParams: UniformBuffer;\n\n private _means: Nullable<StorageBuffer> = null;\n private _colorOpacity: Nullable<StorageBuffer> = null;\n private _cov3d: Nullable<StorageBuffer> = null;\n private _sh: Nullable<StorageBuffer> = null;\n private _shDegree = 0;\n private _weights: Nullable<StorageBuffer> = null;\n private _gsData: Nullable<StorageBuffer> = null;\n private _cdf: Nullable<StorageBuffer> = null;\n private _blockSums: Nullable<StorageBuffer> = null;\n private _gaussianCount = 0;\n private _numBlocks = 0;\n\n /** Sample-density multiplier on the (importance-calibrated) point count. Keep at 1 for exact\n * coverage = opacity*gaussian; other values trade noise for cost but bias the alpha. */\n public pointScale = 1.0;\n /** Low-pass antialiasing dilation, in the classic material's `kernelSize` units. */\n public kernelSize = 0.3;\n /** Classic material's `minPixelSize`: splats whose projected diameter is below this many output pixels are skipped (0 = off). */\n public minPixelSize = 0;\n /** Whether view-space forward is negative (right-handed scenes). */\n public rightHandedSystem = false;\n /** 1 when any per-part debug knob is active (drives the preprocess debug branch); 0 otherwise. */\n public debugActive = 0;\n /** Whether the active camera is orthographic (selects the ortho Jacobian in computeCov2D). */\n public isOrthographic = false;\n /** Whether the source material enables antialiasing opacity compensation (classic COMPENSATION). */\n public compensation = false;\n /**\n * Hi-Z occlusion culling: skip Gaussians fully behind the previous frame's nearest samples. Off by default\n * because those stochastic samples may be semi-transparent, so culling biases the converged image.\n * The depth pyramid is allocated only while enabled.\n */\n public occlusionCulling = false;\n\n private _pointCount: StorageBuffer;\n private _indirectArgs: StorageBuffer;\n private _partition: StorageBuffer;\n\n // imageBuffer and hiZ are at render resolution; accum* are at output resolution.\n private _imageBuffer: Nullable<StorageBuffer> = null;\n private _accumBuffer: Nullable<StorageBuffer> = null;\n private _accumDepth: Nullable<StorageBuffer> = null;\n // Per output pixel: (generation << 16) | sample count.\n private _accumCount: Nullable<StorageBuffer> = null;\n // All max-view-z mip levels concatenated; level 0 = render resolution.\n private _hiZ: Nullable<StorageBuffer> = null;\n private _hiZLevels: { offset: number; w: number; h: number }[] = [];\n // One buffer per level: all level dispatches share one command encoder, so a single buffer updated\n // in the loop would leave every dispatch reading the last level's values.\n private _hiZBuildParams: UniformBuffer[] = [];\n private _boundHiZParams: Nullable<UniformBuffer> = null;\n private _width = 0;\n private _height = 0;\n private _outWidth = 0;\n private _outHeight = 0;\n private _upsampleN = 1;\n private _jitterX = 0;\n private _jitterY = 0;\n\n private _view: Nullable<Matrix> = null;\n private _viewProjection: Nullable<Matrix> = null;\n private _projection: Nullable<Matrix> = null;\n private _inverseProjection: Nullable<Matrix> = null;\n private _projectedDepth = false;\n private _reverseDepth = false;\n private readonly _projectedDepthSpan = new Float32Array([0, 1]);\n private _near = 0.1;\n private _far = 1000;\n private _focalX = 1000;\n private _focalY = 1000;\n private _camX = 0;\n private _camY = 0;\n private _camZ = 0;\n // The 16-bit depth key is normalized over the model's view-depth span.\n private _viewZMin = 0.1;\n private _viewZMax = 1000;\n private _projZ = new Float32Array([0, 1, 0, 0]);\n private _frameIndex = 0;\n\n private _parts: Nullable<StorageBuffer> = null;\n // Queue writes land before the frame's commands run, so a slot used this frame is never rewritten in it.\n private _partBuffers: StorageBuffer[] = [];\n private _partUseFrames: number[] = [];\n private _partSlot = 0;\n private _partCount = 0;\n private _prevPartData: Float32Array = new Float32Array(0);\n\n // Bumped on reset; invalidates the per-pixel counts in _accumCount without clearing it.\n private _accumGeneration = 0;\n private _lastRenderedGeneration = -1;\n private _prevVp = new Float32Array(16);\n private _hasPrevVp = false;\n\n /** Cap on each output pixel's accumulated sample count (clamped to 1..65535). Past the cap later\n * samples blend in at 1/(cap+1), so the image keeps refreshing instead of freezing. */\n public maxAccumFrames = 255;\n\n /**\n * Largest storage buffer this device can allocate and bind, in bytes. Both the per-Gaussian screen\n * data and the accumulation buffers scale linearly with the workload and can exceed it.\n * @returns the effective storage buffer size limit in bytes\n */\n private _getMaxStorageBufferSize(): number {\n // WebGPU's guaranteed minimum, used when the engine does not expose its device limits.\n const defaultLimit = 134217728;\n const limits = (this._engine as WebGPUEngine).currentLimits;\n if (!limits) {\n return defaultLimit;\n }\n return Math.min(limits.maxStorageBufferBindingSize || defaultLimit, limits.maxBufferSize || defaultLimit);\n }\n\n /**\n * True when the storage buffers required by the given workload fit in the device limits. Callers must\n * fall back to another renderer when it is false, otherwise buffer creation raises a validation error.\n * @param gaussianCount number of Gaussians to render\n * @param shDegree spherical-harmonics degree of the data (0-4)\n * @param outWidth output (full) width in pixels\n * @param outHeight output (full) height in pixels\n * @returns whether the workload can be allocated on this device\n */\n public supportsWorkload(gaussianCount: number, shDegree: number, outWidth: number, outHeight: number): boolean {\n const limit = this._getMaxStorageBufferSize();\n // Largest per-Gaussian buffer: sizeof(GpsScreen), or the packed SH bytes.\n const perGaussian = Math.max(64, _GetPackedShBytesPerSplat(shDegree));\n return gaussianCount * perGaussian <= limit && outWidth * outHeight * 4 * Float32Array.BYTES_PER_ELEMENT <= limit;\n }\n\n /**\n * Creates a new Gaussian Point Splatting renderer.\n * @param engine the (WebGPU) engine to allocate compute resources on\n */\n constructor(engine: AbstractEngine) {\n this._engine = engine;\n\n this._preprocessBindings = {\n means: { group: 0, binding: 0 },\n colorOpacity: { group: 0, binding: 1 },\n weights: { group: 0, binding: 2 },\n gsData: { group: 0, binding: 3 },\n uniforms: { group: 0, binding: 4 },\n cov3d: { group: 0, binding: 5 },\n sh: { group: 0, binding: 6 },\n parts: { group: 0, binding: 7 },\n hiZ: { group: 0, binding: 8 },\n };\n\n this._scanBlocksCs = new ComputeShader(\"gpsScanBlocks\", engine, \"gpsScanBlocks\", {\n bindingsMapping: { weights: { group: 0, binding: 0 }, cdf: { group: 0, binding: 1 }, blockSums: { group: 0, binding: 2 } },\n });\n this._scanSumsCs = new ComputeShader(\"gpsScanSums\", engine, \"gpsScanSums\", {\n bindingsMapping: { blockSums: { group: 0, binding: 0 }, pointCount: { group: 0, binding: 1 }, indirectArgs: { group: 0, binding: 2 } },\n });\n this._scanAddCs = new ComputeShader(\"gpsScanAdd\", engine, \"gpsScanAdd\", {\n bindingsMapping: { cdf: { group: 0, binding: 0 }, blockSums: { group: 0, binding: 1 } },\n });\n this._partitionCs = new ComputeShader(\"gpsPartition\", engine, \"gpsPartition\", {\n bindingsMapping: { cdf: { group: 0, binding: 0 }, pointCount: { group: 0, binding: 1 }, partTable: { group: 0, binding: 2 } },\n });\n this._hiZBuildCs = new ComputeShader(\"gpsHiZBuild\", engine, \"gpsHiZBuild\", {\n bindingsMapping: { hiZ: { group: 0, binding: 0 }, params: { group: 0, binding: 1 } },\n });\n\n const splatBindings: ComputeBindingMapping = {\n cdf: { group: 0, binding: 0 },\n gsData: { group: 0, binding: 1 },\n imageBuffer: { group: 0, binding: 2 },\n uniforms: { group: 0, binding: 3 },\n pointCount: { group: 0, binding: 4 },\n partTable: { group: 0, binding: 5 },\n };\n this._splatCs = new ComputeShader(\"gpsSplat\", engine, \"gpsSplat\", { bindingsMapping: splatBindings });\n\n const resolveBindings: ComputeBindingMapping = {\n accumBuffer: { group: 0, binding: 0 },\n params: { group: 0, binding: 1 },\n imageBuffer: { group: 0, binding: 2 },\n accumDepth: { group: 0, binding: 3 },\n hiZ: { group: 0, binding: 4 },\n accumCount: { group: 0, binding: 5 },\n };\n this._resolveCs = new ComputeShader(\"gpsResolve\", engine, \"gpsResolve\", { bindingsMapping: resolveBindings });\n\n this._uniforms = new UniformBuffer(engine);\n this._uniforms.addUniform(\"view\", 16);\n this._uniforms.addUniform(\"viewProjection\", 16);\n this._uniforms.addUniform(\"resNearFar\", 4);\n this._uniforms.addUniform(\"params0\", 4);\n this._uniforms.addUniform(\"focal\", 4);\n this._uniforms.addUniform(\"camPosDeg\", 4);\n this._uniforms.addUniform(\"depthNorm\", 4);\n this._uniforms.addUniform(\"hiZInfo\", 4);\n this._uniforms.addUniform(\"misc\", 4); // x = N, y = minPixelSize, z = color tie-break mask\n this._uniforms.addUniform(\"pixelMap\", 4); // NDC -> render-pixel scale (xy) and jittered offset (zw)\n this._uniforms.addUniform(\"projection\", 16);\n this._uniforms.addUniform(\"inverseProjection\", 16);\n this._uniforms.addUniform(\"projectedDepth\", 4);\n\n this._resolveParams = new UniformBuffer(engine);\n this._resolveParams.addUniform(\"resolution\", 2);\n this._resolveParams.addUniform(\"outResolution\", 2);\n this._resolveParams.addUniform(\"depthNorm\", 2);\n this._resolveParams.addUniform(\"colorMask\", 2); // x = color tie-break mask\n this._resolveParams.addUniform(\"upsample\", 4); // N, jitterX, jitterY, generation\n this._resolveParams.addUniform(\"misc2\", 4); // x = maxAccum, y = moving flag\n this._resolveParams.addUniform(\"projZ\", 4);\n this._resolveParams.addUniform(\"inverseProjection\", 16);\n this._resolveParams.addUniform(\"occlusion\", 4);\n\n this._pointCount = new StorageBuffer(engine as WebGPUEngine, 4 * Uint32Array.BYTES_PER_ELEMENT);\n // WRITE (CopyDst) makes the initial zero-fill valid.\n this._indirectArgs = new StorageBuffer(\n engine as WebGPUEngine,\n 3 * Uint32Array.BYTES_PER_ELEMENT,\n Constants.BUFFER_CREATIONFLAG_STORAGE | Constants.BUFFER_CREATIONFLAG_INDIRECT | Constants.BUFFER_CREATIONFLAG_WRITE\n );\n this._partition = new StorageBuffer(engine as WebGPUEngine, (PartitionBuckets + 1) * Uint32Array.BYTES_PER_ELEMENT);\n\n // Keep binding records so dispatch can track native uniform-buffer replacements without rebuilding unchanged bind groups.\n this._createPreprocessCs(0);\n this._splatCs.setUniformBuffer(\"uniforms\", this._uniforms);\n this._resolveCs.setUniformBuffer(\"params\", this._resolveParams);\n this._scanSumsCs.setStorageBuffer(\"pointCount\", this._pointCount);\n this._scanSumsCs.setStorageBuffer(\"indirectArgs\", this._indirectArgs);\n this._partitionCs.setStorageBuffer(\"pointCount\", this._pointCount);\n this._partitionCs.setStorageBuffer(\"partTable\", this._partition);\n this._splatCs.setStorageBuffer(\"pointCount\", this._pointCount);\n this._splatCs.setStorageBuffer(\"partTable\", this._partition);\n }\n\n /**\n * (Re)creates the preprocess shader so only the asset's SH bands are compiled.\n * @param shDegree the asset's SH degree\n */\n private _createPreprocessCs(shDegree: number): void {\n this._preprocessShDegree = shDegree;\n // SH_DEGREE 0 compiles out the sh binding.\n const bindings: ComputeBindingMapping = { ...this._preprocessBindings };\n if (shDegree <= 0) {\n delete bindings.sh;\n }\n this._preprocessCs = new ComputeShader(\"gpsPreprocess\", this._engine, \"gpsPreprocess\", {\n bindingsMapping: bindings,\n defines: [\"#define SH_DEGREE \" + shDegree],\n });\n this._preprocessCs.setUniformBuffer(\"uniforms\", this._uniforms);\n if (this._parts) {\n this._preprocessCs.setStorageBuffer(\"parts\", this._parts);\n }\n if (this._hiZ) {\n this._preprocessCs.setStorageBuffer(\"hiZ\", this._hiZ);\n }\n }\n\n /**\n * The resolved, full-float accumulation buffer (`array<vec4f>`, row-major, y * width + x). Bound\n * read-only by the blit material's fragment shader. Null until the first render.\n */\n public get accumBuffer(): Nullable<StorageBuffer> {\n return this._accumBuffer;\n }\n\n /**\n * Per-pixel resolved surface depth (NDC z in the scene's convention), bound read-only by the blit\n * material to write fragDepth for compositing. Null until the first render.\n */\n public get accumDepthBuffer(): Nullable<StorageBuffer> {\n return this._accumDepth;\n }\n\n /**\n * Number of compute frames successfully dispatched since this renderer was created.\n * This does not reset when accumulated samples are invalidated.\n * @returns the lifetime successful-dispatch count\n */\n public get renderedFrameCount(): number {\n return this._frameIndex;\n }\n\n /**\n * Changes whenever accumulated samples are invalidated (camera, parts, data, density or output size).\n * A change of the upscale factor alone does not bump it; callers must reset accumulation. Wraps at 65536.\n * @returns the current accumulation generation\n */\n public get accumulationVersion(): number {\n return this._accumGeneration;\n }\n\n /**\n * Number of frames required to visit every output pixel once at the current render scale.\n * @returns the current jitter-cycle length, `N * N`\n */\n public get pixelCycleLength(): number {\n return this._upsampleN * this._upsampleN;\n }\n\n /**\n * Reads back the total emitted point count from the last dispatched frame (async GPU readback). Used by\n * the budget-driven auto render-scale controller.\n * @returns the emitted point count (0 if never dispatched)\n */\n public async readPointCountAsync(): Promise<number> {\n const data = await this._pointCount.read(0, Uint32Array.BYTES_PER_ELEMENT);\n return new Uint32Array(data.buffer, data.byteOffset, 1)[0];\n }\n\n /** Current internal render width, in pixels. */\n public get width(): number {\n return this._width;\n }\n\n /** Current internal render height, in pixels. */\n public get height(): number {\n return this._height;\n }\n\n /** Output (full) width the accumulation buffer is sized to (what the blit samples). */\n public get outputWidth(): number {\n return this._outWidth;\n }\n\n /** Output (full) height the accumulation buffer is sized to. */\n public get outputHeight(): number {\n return this._outHeight;\n }\n\n /** Number of Gaussians currently loaded. */\n public get gaussianCount(): number {\n return this._gaussianCount;\n }\n\n /**\n * Whether the whole compute pipeline is compiled and ready to dispatch.\n * @returns true once every compute shader is ready\n */\n public isReady(): boolean {\n return (\n this._preprocessCs.isReady() &&\n this._scanBlocksCs.isReady() &&\n this._scanSumsCs.isReady() &&\n this._scanAddCs.isReady() &&\n this._partitionCs.isReady() &&\n this._splatCs.isReady() &&\n this._resolveCs.isReady() &&\n (!this.occlusionCulling || this._hiZBuildCs.isReady())\n );\n }\n\n /**\n * Uploads decoded splat data into per-Gaussian GPU buffers, replacing any previous data.\n * @param means packed positions, 4 floats per Gaussian (x, y, z, unused)\n * @param cov3d packed 3D covariance, 4 u32 per Gaussian (3 f16 pairs of Sigma/factor + f32 factor)\n * @param colorOpacity packed RGBA8 base color + opacity, 1 u32 per Gaussian\n * @param sh 8-bit-quantized SH coefficients packed 4 bytes/u32 (GPS_SH_WORDS per Gaussian), or null\n * @param shDegree spherical-harmonics degree (0 = view-independent color)\n * @param count number of Gaussians\n */\n public updateSplats(means: Float32Array, cov3d: Uint32Array, colorOpacity: Uint32Array, sh: Nullable<Uint32Array>, shDegree: number, count: number): void {\n this._disposeGaussianBuffers();\n this._gaussianCount = count;\n this._shDegree = sh ? shDegree : 0;\n if (this._shDegree !== this._preprocessShDegree) {\n this._createPreprocessCs(this._shDegree);\n }\n if (count === 0) {\n return;\n }\n this._numBlocks = Math.ceil(count / ScanBlockSize);\n\n const engine = this._engine as WebGPUEngine;\n this._means = new StorageBuffer(engine, count * 4 * Float32Array.BYTES_PER_ELEMENT);\n this._means.update(means);\n\n this._cov3d = new StorageBuffer(engine, count * 4 * Uint32Array.BYTES_PER_ELEMENT);\n this._cov3d.update(cov3d);\n\n // Placeholder keeps the binding valid at degree 0.\n if (sh && this._shDegree > 0) {\n this._sh = new StorageBuffer(engine, sh.byteLength);\n this._sh.update(sh);\n } else {\n this._sh = new StorageBuffer(engine, Float32Array.BYTES_PER_ELEMENT);\n }\n\n this._colorOpacity = new StorageBuffer(engine, count * Uint32Array.BYTES_PER_ELEMENT);\n this._colorOpacity.update(colorOpacity);\n\n this._weights = new StorageBuffer(engine, count * Uint32Array.BYTES_PER_ELEMENT);\n this._cdf = new StorageBuffer(engine, count * Uint32Array.BYTES_PER_ELEMENT);\n this._blockSums = new StorageBuffer(engine, this._numBlocks * Uint32Array.BYTES_PER_ELEMENT);\n // sizeof(GpsScreen)\n this._gsData = new StorageBuffer(engine, count * 64);\n\n this._preprocessCs.setStorageBuffer(\"means\", this._means);\n this._preprocessCs.setStorageBuffer(\"colorOpacity\", this._colorOpacity);\n this._preprocessCs.setStorageBuffer(\"weights\", this._weights);\n this._preprocessCs.setStorageBuffer(\"gsData\", this._gsData);\n this._preprocessCs.setStorageBuffer(\"cov3d\", this._cov3d);\n if (this._shDegree > 0) {\n this._preprocessCs.setStorageBuffer(\"sh\", this._sh);\n }\n this._scanBlocksCs.setStorageBuffer(\"weights\", this._weights);\n this._scanBlocksCs.setStorageBuffer(\"cdf\", this._cdf);\n this._scanBlocksCs.setStorageBuffer(\"blockSums\", this._blockSums);\n this._scanSumsCs.setStorageBuffer(\"blockSums\", this._blockSums);\n this._scanAddCs.setStorageBuffer(\"cdf\", this._cdf);\n this._scanAddCs.setStorageBuffer(\"blockSums\", this._blockSums);\n this._partitionCs.setStorageBuffer(\"cdf\", this._cdf);\n this._splatCs.setStorageBuffer(\"cdf\", this._cdf);\n this._splatCs.setStorageBuffer(\"gsData\", this._gsData);\n\n this.resetAccumulation();\n }\n\n /** Restarts progressive accumulation; each output pixel is overwritten on its next visit. The cached\n * view-projection is kept, otherwise the next {@link renderToBuffer} would detect a move and reset again. */\n public resetAccumulation(): void {\n this._accumGeneration = (this._accumGeneration + 1) & 0xffff;\n }\n\n /**\n * Sets the camera state used to project Gaussians on the next render.\n * @param view world-to-view matrix\n * @param viewProjection world-to-clip matrix\n * @param near near plane distance\n * @param far far plane distance\n * @param focalX horizontal focal length in pixels\n * @param focalY vertical focal length in pixels\n * @param camX camera world position x\n * @param camY camera world position y\n * @param camZ camera world position z\n * @param viewZMin the model's minimum view-space depth this frame (depth-key normalization range)\n * @param viewZMax the model's maximum view-space depth this frame\n */\n public setCamera(\n view: Matrix,\n viewProjection: Matrix,\n near: number,\n far: number,\n focalX: number,\n focalY: number,\n camX: number,\n camY: number,\n camZ: number,\n viewZMin: number,\n viewZMax: number\n ): void {\n this._view = view;\n this._viewProjection = viewProjection;\n this._near = near;\n this._far = far;\n this._focalX = focalX;\n this._focalY = focalY;\n this._camX = camX;\n this._camY = camY;\n this._camZ = camZ;\n this._viewZMin = viewZMin;\n this._viewZMax = viewZMax;\n }\n\n /**\n * Sets the projection matrix's z-row (column-major m10, m11, m14, m15), used by resolve to map the\n * view-z depth key back to ndc.z for fragDepth (it encodes the reverse-Z / half-Z convention).\n * @param m10 projection.m[10]\n * @param m11 projection.m[11]\n * @param m14 projection.m[14]\n * @param m15 projection.m[15]\n */\n public setProjectionZ(m10: number, m11: number, m14: number, m15: number): void {\n this._projZ[0] = m10;\n this._projZ[1] = m11;\n this._projZ[2] = m14;\n this._projZ[3] = m15;\n this._projection = null;\n this._inverseProjection = null;\n this._projectedDepth = false;\n }\n\n /**\n * Sets the full projection for covariance, per-pixel depth and oblique clipping.\n * @param projection camera projection matrix\n * @param inverseProjection inverse of the projection matrix\n * @param reverseDepth whether larger NDC depth values are nearer\n */\n public setProjectionMatrix(projection: Matrix, inverseProjection: Matrix, reverseDepth = false): void {\n const m = projection.m;\n this.setProjectionZ(m[10], m[11], m[14], m[15]);\n this._projection = projection;\n this._inverseProjection = inverseProjection;\n this._projectedDepth = _HasGaussianPointSplattingProjectedDepth(projection);\n this._reverseDepth = reverseDepth;\n }\n\n /** Bounds projected depth over the model's view-z interval and padded jitter grid, reusing the result.\n * @param maxX maximum NDC x covered by the grid\n * @param maxY maximum NDC y covered by the grid\n * @returns the nearest-first projected depth range for quantization\n */\n private _getProjectedDepthSpan(maxX = 1, maxY = 1): Float32Array {\n const m = this._inverseProjection!.m;\n const sign = this.rightHandedSystem ? -1 : 1;\n const z0 = sign * this._viewZMin;\n const z1 = sign * this._viewZMax;\n const d0 = m[10] - z0 * m[11];\n const d1 = m[10] - z1 * m[11];\n // A horizon within the interval can cover the entire clipped depth range.\n if (d0 * d1 <= 0) {\n this._projectedDepthSpan[0] = 0;\n this._projectedDepthSpan[1] = 1;\n return this._projectedDepthSpan;\n }\n let min = 1;\n let max = 0;\n for (let corner = 0; corner < 8; corner++) {\n const x = corner & 1 ? maxX : -1;\n const y = corner & 2 ? maxY : -1;\n const z = corner & 4 ? z1 : z0;\n const depth = (z * (m[3] * x + m[7] * y + m[15]) - (m[2] * x + m[6] * y + m[14])) / (m[10] - z * m[11]);\n const ordered = Math.max(0, Math.min(1, this._reverseDepth ? 1 - depth : depth));\n min = Math.min(min, ordered);\n max = Math.max(max, ordered);\n }\n this._projectedDepthSpan[0] = min;\n this._projectedDepthSpan[1] = Math.max(min + 1e-6, max);\n return this._projectedDepthSpan;\n }\n\n /**\n * Checks part inputs without changing the current accumulation or dispatch buffers.\n * @param packed packed part records\n * @param count number of parts\n * @returns whether these inputs match the current renderer state\n * @internal\n */\n public _matchesPartData(packed: Float32Array, count: number): boolean {\n const floats = count * 40;\n if (!this._parts || this._partCount !== count || this._prevPartData.length !== floats) {\n return false;\n }\n for (let i = 0; i < floats; i++) {\n if (this._prevPartData[i] !== packed[i]) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * Uploads the per-part records (see GpsPart) and restarts accumulation when they changed.\n * @param packed part records, `count * 40` floats (world matrix + visibility + 5 debug rows per part)\n * @param count number of parts (at least 1)\n */\n public setPartData(packed: Float32Array, count: number): void {\n const engine = this._engine as WebGPUEngine;\n const floats = count * 40;\n const changed = !this._matchesPartData(packed, count);\n if (this._partCount !== count) {\n this._disposePartBuffers();\n this._partCount = count;\n }\n const frameId = engine.frameId;\n // The current slot already holds unchanged data; the upcoming dispatch binds it.\n if (!changed) {\n if (this._parts) {\n this._partUseFrames[this._partSlot] = frameId;\n }\n return;\n }\n if (this._prevPartData.length !== floats) {\n this._prevPartData = new Float32Array(floats);\n }\n this._prevPartData.set(packed);\n this.resetAccumulation();\n\n // A slot used this frame may be bound by a dispatch that has not been submitted yet.\n if (!this._parts || this._partUseFrames[this._partSlot] === frameId) {\n let slot = 0;\n while (slot < this._partBuffers.length && this._partUseFrames[slot] === frameId) {\n slot++;\n }\n if (slot === this._partBuffers.length) {\n this._partBuffers.push(new StorageBuffer(engine, floats * Float32Array.BYTES_PER_ELEMENT));\n this._partUseFrames.push(-1);\n }\n this._partSlot = slot;\n this._parts = this._partBuffers[slot];\n this._preprocessCs.setStorageBuffer(\"parts\", this._parts);\n }\n this._partUseFrames[this._partSlot] = frameId;\n this._parts.update(packed);\n }\n\n private _disposePartBuffers(): void {\n for (const buffer of this._partBuffers) {\n buffer.dispose();\n }\n this._partBuffers.length = 0;\n this._partUseFrames.length = 0;\n this._partSlot = 0;\n this._parts = null;\n }\n\n private _ensurePixelBuffers(width: number, height: number, outWidth: number, outHeight: number): void {\n const engine = this._engine as WebGPUEngine;\n const renderChanged = width !== this._width || height !== this._height || !this._imageBuffer;\n const outChanged = outWidth !== this._outWidth || outHeight !== this._outHeight || !this._accumBuffer;\n\n if (renderChanged) {\n this._width = width;\n this._height = height;\n const pixelCount = width * height;\n\n this._imageBuffer?.dispose();\n this._imageBuffer = new StorageBuffer(engine, pixelCount * Uint32Array.BYTES_PER_ELEMENT);\n // Resolve re-clears it after each frame.\n const seed = new Uint32Array(pixelCount);\n seed.fill(DepthClearSentinel);\n this._imageBuffer.update(seed);\n this._splatCs.setStorageBuffer(\"imageBuffer\", this._imageBuffer);\n this._resolveCs.setStorageBuffer(\"imageBuffer\", this._imageBuffer);\n }\n\n if (!this._hiZ || this.occlusionCulling !== this._hiZLevels.length > 0 || (this.occlusionCulling && renderChanged)) {\n this._hiZLevels = [];\n // Both shaders require a valid storage binding even when their Hi-Z branches are disabled.\n let hiZOffset = 1;\n if (this.occlusionCulling) {\n hiZOffset = 0;\n const numLevels = Math.floor(Math.log2(Math.max(width, height))) + 1;\n for (let l = 0; l < numLevels; l++) {\n const lw = Math.max(1, width >> l);\n const lh = Math.max(1, height >> l);\n this._hiZLevels.push({ offset: hiZOffset, w: lw, h: lh });\n hiZOffset += lw * lh;\n }\n }\n this._hiZ?.dispose();\n this._hiZ = new StorageBuffer(engine, hiZOffset * Float32Array.BYTES_PER_ELEMENT);\n this._hiZ.update(new Float32Array(hiZOffset).fill(1e30));\n this._preprocessCs.setStorageBuffer(\"hiZ\", this._hiZ);\n this._resolveCs.setStorageBuffer(\"hiZ\", this._hiZ);\n this._hiZBuildCs.setStorageBuffer(\"hiZ\", this._hiZ);\n\n for (const ub of this._hiZBuildParams) {\n ub.dispose();\n }\n this._hiZBuildParams = [];\n this._boundHiZParams = null;\n for (let l = 1; l < this._hiZLevels.length; l++) {\n const src = this._hiZLevels[l - 1];\n const dst = this._hiZLevels[l];\n const ub = new UniformBuffer(engine);\n ub.addUniform(\"src\", 4);\n ub.addUniform(\"dst\", 4);\n ub.updateUInt4(\"src\", src.offset, src.w, src.h, 0);\n ub.updateUInt4(\"dst\", dst.offset, dst.w, dst.h, 0);\n ub.update();\n this._hiZBuildParams.push(ub);\n }\n }\n\n if (outChanged) {\n this._outWidth = outWidth;\n this._outHeight = outHeight;\n const outCount = outWidth * outHeight;\n\n // Premultiplied color + coverage.\n this._accumBuffer?.dispose();\n this._accumBuffer = new StorageBuffer(engine, outCount * 4 * Float32Array.BYTES_PER_ELEMENT);\n this._accumDepth?.dispose();\n this._accumDepth = new StorageBuffer(engine, outCount * Float32Array.BYTES_PER_ELEMENT);\n this._accumCount?.dispose();\n this._accumCount = new StorageBuffer(engine, outCount * Uint32Array.BYTES_PER_ELEMENT);\n this._resolveCs.setStorageBuffer(\"accumBuffer\", this._accumBuffer);\n this._resolveCs.setStorageBuffer(\"accumDepth\", this._accumDepth);\n this._resolveCs.setStorageBuffer(\"accumCount\", this._accumCount);\n\n this.resetAccumulation();\n }\n }\n\n /**\n * Runs the per-frame GPS compute pipeline for the given viewport, leaving the result in\n * {@link accumBuffer}. Allocates/resizes buffers on demand.\n * @param width internal render (low) width in pixels; must be `ceil(outWidth / upsampleN)`\n * @param height internal render (low) height in pixels; must be `ceil(outHeight / upsampleN)`\n * @param outWidth output (full) width the accumulation is reconstructed at\n * @param outHeight output (full) height\n * @param upsampleN integer upscale factor; 1 = no upsampling\n * @param jitterX this frame's sub-cell offset x in [0, N)\n * @param jitterY this frame's sub-cell offset y in [0, N)\n * @returns true if the pipeline dispatched, false if it was not ready / had nothing to draw\n */\n public renderToBuffer(width: number, height: number, outWidth = width, outHeight = height, upsampleN = 1, jitterX = 0, jitterY = 0): boolean {\n if (width <= 0 || height <= 0 || outWidth <= 0 || outHeight <= 0) {\n return false;\n }\n this._upsampleN = Math.max(1, Math.round(upsampleN));\n this._jitterX = jitterX;\n this._jitterY = jitterY;\n this._ensurePixelBuffers(width, height, outWidth, outHeight);\n\n if (this._gaussianCount === 0 || !this._parts || !this._view || !this._viewProjection || !this.isReady()) {\n return false;\n }\n\n const vp = this._viewProjection.m;\n let moved = !this._hasPrevVp;\n for (let k = 0; k < 16; k++) {\n if (Math.abs(vp[k] - this._prevVp[k]) > 1e-5) {\n moved = true;\n break;\n }\n }\n if (moved) {\n this.resetAccumulation();\n this._prevVp.set(vp);\n this._hasPrevVp = true;\n }\n\n // On a reset frame resolve fills every output pixel, so unvisited pixels cannot trail.\n const moving = this._accumGeneration !== this._lastRenderedGeneration;\n this._lastRenderedGeneration = this._accumGeneration;\n\n // Render pixel (lx,ly) samples output pixel (lx*N+jitterX, ly*N+jitterY); resolve crops the padding.\n const n = this._upsampleN;\n const pixelOffsetX = (n / 2 - this._jitterX - 0.5) / n;\n const pixelOffsetY = (n / 2 - this._jitterY - 0.5) / n;\n // XORed into packed colors so equal-depth ties do not favor low RGB values.\n const colorMask = (Math.imul(this._frameIndex + 1, 0x9e3779b1) >>> 16) & 0xffff;\n // Quantized degree-4 SH has 24 coefficients in [-1,1]; the addition theorem bounds radiance below 8.\n const colorRange = this._shDegree > 0 ? 8 : 1;\n\n this._uniforms.updateMatrix(\"view\", this._view);\n this._uniforms.updateMatrix(\"viewProjection\", this._viewProjection);\n this._uniforms.updateFloat4(\"resNearFar\", width, height, this._near, this._far);\n // The classic kernel applies to a 4x covariance in output pixels; preprocess uses physical render pixels.\n this._uniforms.updateFloat4(\"params0\", this._gaussianCount, (this.kernelSize * 0.25) / (n * n), this.pointScale, this._frameIndex % 65536);\n this._uniforms.updateFloat4(\"focal\", this._focalX, this._focalY, this.rightHandedSystem ? 1 : 0, this.isOrthographic ? 1 : 0);\n this._uniforms.updateFloat4(\"camPosDeg\", this._camX, this._camY, this._camZ, this._shDegree);\n this._uniforms.updateFloat4(\"depthNorm\", this._viewZMin, this._viewZMax, this.debugActive, this.compensation ? 1 : 0);\n this._uniforms.updateFloat4(\"hiZInfo\", width, height, this._hiZLevels.length, this.occlusionCulling && !moving ? 1 : 0);\n const projectionMode = (this._projection ? 1 : 0) | (this._projectedDepth ? 2 : 0) | (this._reverseDepth ? 4 : 0);\n const depthSpan = this._projectedDepth\n ? this._getProjectedDepthSpan(Math.max(1, (2 * width * n) / this._outWidth - 1), Math.max(1, (2 * height * n) / this._outHeight - 1))\n : null;\n this._uniforms.updateFloat4(\"misc\", n, this.minPixelSize, colorMask, projectionMode);\n this._uniforms.updateFloat4(\"pixelMap\", this._outWidth / n, this._outHeight / n, pixelOffsetX, pixelOffsetY);\n if (this._projection && this._inverseProjection) {\n this._uniforms.updateMatrix(\"projection\", this._projection);\n this._uniforms.updateMatrix(\"inverseProjection\", this._inverseProjection);\n }\n this._uniforms.updateFloat4(\"projectedDepth\", depthSpan?.[0] ?? 0, depthSpan?.[1] ?? 1, colorRange, 0);\n this._uniforms.update();\n\n this._resolveParams.updateFloat2(\"resolution\", width, height);\n this._resolveParams.updateFloat2(\"outResolution\", this._outWidth, this._outHeight);\n this._resolveParams.updateFloat2(\"depthNorm\", depthSpan?.[0] ?? this._viewZMin, depthSpan?.[1] ?? this._viewZMax);\n this._resolveParams.updateFloat2(\"colorMask\", colorMask, colorRange);\n this._resolveParams.updateFloat4(\"upsample\", n, this._jitterX, this._jitterY, this._accumGeneration);\n this._resolveParams.updateFloat4(\n \"misc2\",\n Math.max(1, Math.min(65535, Math.floor(this.maxAccumFrames))),\n moving ? 1 : 0,\n this._reverseDepth ? 1 : 0,\n this._projectedDepth ? 1 : 0\n );\n const zSign = this.rightHandedSystem ? -1 : 1;\n this._resolveParams.updateFloat4(\"projZ\", this._projZ[0] * zSign, this._projZ[1] * zSign, this._projZ[2], this._projZ[3]);\n if (this._inverseProjection) {\n this._resolveParams.updateMatrix(\"inverseProjection\", this._inverseProjection);\n }\n this._resolveParams.updateFloat4(\"occlusion\", this.occlusionCulling ? 1 : 0, 0, 0, 0);\n this._resolveParams.update();\n\n const groupsG = Math.ceil(this._gaussianCount / WorkgroupSize);\n\n this._partUseFrames[this._partSlot] = this._engine.frameId;\n this._preprocessCs.dispatch(Math.min(groupsG, MaxDispatchGroupsPerDimension), Math.ceil(groupsG / MaxDispatchGroupsPerDimension), 1);\n\n this._scanBlocksCs.dispatch(Math.min(this._numBlocks, MaxDispatchGroupsPerDimension), Math.ceil(this._numBlocks / MaxDispatchGroupsPerDimension), 1);\n\n this._scanSumsCs.dispatch(1, 1, 1);\n\n this._scanAddCs.dispatch(Math.min(groupsG, MaxDispatchGroupsPerDimension), Math.ceil(groupsG / MaxDispatchGroupsPerDimension), 1);\n\n this._partitionCs.dispatch(Math.ceil((PartitionBuckets + 1) / WorkgroupSize), 1, 1);\n\n this._splatCs.dispatchIndirect(this._indirectArgs);\n\n this._resolveCs.dispatch(Math.ceil(width / 8), Math.ceil(height / 8), 1);\n\n // Level 0 is written by resolve; max-reduce the rest for next frame's cull.\n if (this.occlusionCulling) {\n for (let l = 1; l < this._hiZLevels.length; l++) {\n const dst = this._hiZLevels[l];\n const params = this._hiZBuildParams[l - 1];\n if (params !== this._boundHiZParams) {\n this._hiZBuildCs.setUniformBuffer(\"params\", params);\n this._boundHiZParams = params;\n }\n this._hiZBuildCs.dispatch(Math.ceil(dst.w / 8), Math.ceil(dst.h / 8), 1);\n }\n }\n\n this._frameIndex++;\n return true;\n }\n\n private _disposeGaussianBuffers(): void {\n this._means?.dispose();\n this._colorOpacity?.dispose();\n this._cov3d?.dispose();\n this._sh?.dispose();\n this._weights?.dispose();\n this._gsData?.dispose();\n this._cdf?.dispose();\n this._blockSums?.dispose();\n this._means = null;\n this._colorOpacity = null;\n this._cov3d = null;\n this._sh = null;\n this._weights = null;\n this._gsData = null;\n this._cdf = null;\n this._blockSums = null;\n this._gaussianCount = 0;\n this._numBlocks = 0;\n }\n\n /** Releases all GPU resources owned by the renderer. */\n public dispose(): void {\n this._disposeGaussianBuffers();\n this._imageBuffer?.dispose();\n this._accumBuffer?.dispose();\n this._accumDepth?.dispose();\n this._accumCount?.dispose();\n this._accumDepth = null;\n this._imageBuffer = null;\n this._accumBuffer = null;\n this._accumCount = null;\n this._hiZ?.dispose();\n this._hiZ = null;\n this._hiZLevels = [];\n for (const ub of this._hiZBuildParams) {\n ub.dispose();\n }\n this._hiZBuildParams = [];\n this._boundHiZParams = null;\n this._disposePartBuffers();\n this._partCount = 0;\n this._pointCount.dispose();\n this._indirectArgs.dispose();\n this._partition.dispose();\n this._uniforms.dispose();\n this._resolveParams.dispose();\n this._width = 0;\n this._height = 0;\n this._outWidth = 0;\n this._outHeight = 0;\n }\n}\n"]}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { type AbstractMesh } from "../abstractMesh.pure.js";
|
|
2
|
+
/**
|
|
3
|
+
* True when `className` (from `AbstractMesh.getClassName()`) identifies a Gaussian Splatting mesh whose
|
|
4
|
+
* `position.z` vertex attribute encodes a splat index rather than world-space Z: `"GaussianSplattingMesh"`
|
|
5
|
+
* (also returned by `GaussianSplattingCompoundMesh`) or `"GaussianSplattingStream"`.
|
|
6
|
+
*
|
|
7
|
+
* This function is retained for backward compatibility. Internal code should prefer
|
|
8
|
+
* {@link _IsGaussianSplattingMesh}, which also recognizes the inherited Gaussian Splatting capability.
|
|
9
|
+
* @param className the mesh class name to test, e.g. from `AbstractMesh.getClassName()`
|
|
10
|
+
* @returns true if the class name identifies a Gaussian Splatting mesh
|
|
11
|
+
*/
|
|
12
|
+
export declare function IsGaussianSplattingClassName(className: string): boolean;
|
|
13
|
+
/**
|
|
14
|
+
* Tests whether a mesh uses Gaussian Splatting rendering behavior.
|
|
15
|
+
* @param mesh the mesh to test
|
|
16
|
+
* @returns true if the mesh is a Gaussian Splatting mesh
|
|
17
|
+
* @internal
|
|
18
|
+
*/
|
|
19
|
+
export declare function _IsGaussianSplattingMesh(mesh: AbstractMesh): boolean;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* True when `className` (from `AbstractMesh.getClassName()`) identifies a Gaussian Splatting mesh whose
|
|
3
|
+
* `position.z` vertex attribute encodes a splat index rather than world-space Z: `"GaussianSplattingMesh"`
|
|
4
|
+
* (also returned by `GaussianSplattingCompoundMesh`) or `"GaussianSplattingStream"`.
|
|
5
|
+
*
|
|
6
|
+
* This function is retained for backward compatibility. Internal code should prefer
|
|
7
|
+
* {@link _IsGaussianSplattingMesh}, which also recognizes the inherited Gaussian Splatting capability.
|
|
8
|
+
* @param className the mesh class name to test, e.g. from `AbstractMesh.getClassName()`
|
|
9
|
+
* @returns true if the class name identifies a Gaussian Splatting mesh
|
|
10
|
+
*/
|
|
11
|
+
export function IsGaussianSplattingClassName(className) {
|
|
12
|
+
return className === "GaussianSplattingMesh" || className === "GaussianSplattingStream";
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Tests whether a mesh uses Gaussian Splatting rendering behavior.
|
|
16
|
+
* @param mesh the mesh to test
|
|
17
|
+
* @returns true if the mesh is a Gaussian Splatting mesh
|
|
18
|
+
* @internal
|
|
19
|
+
*/
|
|
20
|
+
export function _IsGaussianSplattingMesh(mesh) {
|
|
21
|
+
return mesh._isGaussianSplatting || IsGaussianSplattingClassName(mesh.getClassName());
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=gaussianSplatting.functions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gaussianSplatting.functions.js","sourceRoot":"","sources":["../../../../../dev/core/src/Meshes/GaussianSplatting/gaussianSplatting.functions.ts"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AACH,MAAM,UAAU,4BAA4B,CAAC,SAAiB;IAC1D,OAAO,SAAS,KAAK,uBAAuB,IAAI,SAAS,KAAK,yBAAyB,CAAC;AAC5F,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,wBAAwB,CAAC,IAAkB;IACvD,OAAO,IAAI,CAAC,oBAAoB,IAAI,4BAA4B,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;AAC1F,CAAC","sourcesContent":["import { type AbstractMesh } from \"../abstractMesh.pure\";\r\n\r\n/**\r\n * True when `className` (from `AbstractMesh.getClassName()`) identifies a Gaussian Splatting mesh whose\r\n * `position.z` vertex attribute encodes a splat index rather than world-space Z: `\"GaussianSplattingMesh\"`\r\n * (also returned by `GaussianSplattingCompoundMesh`) or `\"GaussianSplattingStream\"`.\r\n *\r\n * This function is retained for backward compatibility. Internal code should prefer\r\n * {@link _IsGaussianSplattingMesh}, which also recognizes the inherited Gaussian Splatting capability.\r\n * @param className the mesh class name to test, e.g. from `AbstractMesh.getClassName()`\r\n * @returns true if the class name identifies a Gaussian Splatting mesh\r\n */\r\nexport function IsGaussianSplattingClassName(className: string): boolean {\r\n return className === \"GaussianSplattingMesh\" || className === \"GaussianSplattingStream\";\r\n}\r\n\r\n/**\r\n * Tests whether a mesh uses Gaussian Splatting rendering behavior.\r\n * @param mesh the mesh to test\r\n * @returns true if the mesh is a Gaussian Splatting mesh\r\n * @internal\r\n */\r\nexport function _IsGaussianSplattingMesh(mesh: AbstractMesh): boolean {\r\n return mesh._isGaussianSplatting || IsGaussianSplattingClassName(mesh.getClassName());\r\n}\r\n"]}
|
|
@@ -7,4 +7,6 @@ import { RegisterGaussianSplattingMesh } from "./gaussianSplattingMesh.pure.js";
|
|
|
7
7
|
RegisterGaussianSplattingMesh();
|
|
8
8
|
import "../thinInstanceMesh.js";
|
|
9
9
|
import "./gaussianSplattingPartProxyMesh.js";
|
|
10
|
+
// Pure importers opt in to point splatting separately.
|
|
11
|
+
import "./gaussianPointSplattingController.js";
|
|
10
12
|
//# sourceMappingURL=gaussianSplattingMesh.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gaussianSplattingMesh.js","sourceRoot":"","sources":["../../../../../dev/core/src/Meshes/GaussianSplatting/gaussianSplattingMesh.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,cAAc,8BAA8B,CAAC;AAE7C,OAAO,EAAE,6BAA6B,EAAE,MAAM,8BAA8B,CAAC;AAC7E,6BAA6B,EAAE,CAAC;AAEhC,OAAO,qBAAqB,CAAC;AAC7B,OAAO,kCAAkC,CAAC","sourcesContent":["/**\n * Re-exports pure implementation and applies runtime side effects.\n * Import gaussianSplattingMesh.pure for tree-shakeable, side-effect-free usage.\n */\nexport * from \"./gaussianSplattingMesh.pure\";\n\nimport { RegisterGaussianSplattingMesh } from \"./gaussianSplattingMesh.pure\";\nRegisterGaussianSplattingMesh();\n\nimport \"../thinInstanceMesh\";\nimport \"./gaussianSplattingPartProxyMesh\";\n"]}
|
|
1
|
+
{"version":3,"file":"gaussianSplattingMesh.js","sourceRoot":"","sources":["../../../../../dev/core/src/Meshes/GaussianSplatting/gaussianSplattingMesh.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,cAAc,8BAA8B,CAAC;AAE7C,OAAO,EAAE,6BAA6B,EAAE,MAAM,8BAA8B,CAAC;AAC7E,6BAA6B,EAAE,CAAC;AAEhC,OAAO,qBAAqB,CAAC;AAC7B,OAAO,kCAAkC,CAAC;AAC1C,uDAAuD;AACvD,OAAO,oCAAoC,CAAC","sourcesContent":["/**\n * Re-exports pure implementation and applies runtime side effects.\n * Import gaussianSplattingMesh.pure for tree-shakeable, side-effect-free usage.\n */\nexport * from \"./gaussianSplattingMesh.pure\";\n\nimport { RegisterGaussianSplattingMesh } from \"./gaussianSplattingMesh.pure\";\nRegisterGaussianSplattingMesh();\n\nimport \"../thinInstanceMesh\";\nimport \"./gaussianSplattingPartProxyMesh\";\n// Pure importers opt in to point splatting separately.\nimport \"./gaussianPointSplattingController\";\n"]}
|
|
@@ -6,10 +6,68 @@ import { type Vector2 } from "../../Maths/math.vector.js";
|
|
|
6
6
|
import { type Effect } from "../../Materials/effect.pure.js";
|
|
7
7
|
import { GaussianSplattingMeshBase, type IGaussianSplattingSplatRange } from "./gaussianSplattingMeshBase.pure.js";
|
|
8
8
|
import { type MultiRenderTarget } from "../../Materials/Textures/multiRenderTarget.pure.js";
|
|
9
|
+
import { Mesh } from "../mesh.pure.js";
|
|
9
10
|
import { GaussianSplattingPartProxyMesh } from "./gaussianSplattingPartProxyMesh.pure.js";
|
|
10
11
|
import { BoundingInfo } from "../../Culling/boundingInfo.js";
|
|
11
12
|
import { type BaseTexture } from "../../Materials/Textures/baseTexture.pure.js";
|
|
12
13
|
import { type AbstractMesh } from "../abstractMesh.pure.js";
|
|
14
|
+
import { type SubMesh } from "../subMesh.pure.js";
|
|
15
|
+
export { IsGaussianSplattingClassName } from "./gaussianSplatting.functions.js";
|
|
16
|
+
/**
|
|
17
|
+
* Progress counters of the optional point-splatting compute renderer, as reported by
|
|
18
|
+
* {@link GaussianSplattingMesh.pointSplattingProgress}.
|
|
19
|
+
*/
|
|
20
|
+
export interface IGaussianPointSplattingProgress {
|
|
21
|
+
/** Lifetime count of successfully dispatched compute frames; never reset by an accumulation restart. */
|
|
22
|
+
renderedFrameCount: number;
|
|
23
|
+
/** Identifier of the current accumulation generation; changes whenever accumulated samples are invalidated. */
|
|
24
|
+
accumulationVersion: number;
|
|
25
|
+
/** Number of frames needed to visit every output pixel once; fixed for the lifetime of a generation. */
|
|
26
|
+
pixelCycleLength: number;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Contract between {@link GaussianSplattingMesh} and the optional WebGPU compute point-splatting
|
|
30
|
+
* implementation, so the mesh can drive it without importing it.
|
|
31
|
+
* @internal
|
|
32
|
+
*/
|
|
33
|
+
export interface IGaussianPointSplattingController {
|
|
34
|
+
/** Whether the main color pass is rendered by the compute path instead of the classic sorted quads. */
|
|
35
|
+
colorRenderMode: boolean;
|
|
36
|
+
/** Whether the active camera's DepthRenderer pass is fed by the compute path. */
|
|
37
|
+
depthRenderMode: boolean;
|
|
38
|
+
/** Density multiplier (higher = denser and slower). */
|
|
39
|
+
pointScale: number;
|
|
40
|
+
/** Internal render-resolution scale, or `"auto"` for the device-tiered point budget. */
|
|
41
|
+
renderScale: number | "auto";
|
|
42
|
+
/** Whether the point renderer culls splats against previous-frame depth. */
|
|
43
|
+
occlusionCulling: boolean;
|
|
44
|
+
/** Counters of the most recent successful compute frame, or null when no frame is available. */
|
|
45
|
+
readonly progress: Nullable<IGaussianPointSplattingProgress>;
|
|
46
|
+
/** Whether compute owns the current pass, including pending shader compilation. */
|
|
47
|
+
readonly handlesCurrentPass: boolean;
|
|
48
|
+
/** Drops the decoded compute buffers so the next frame re-decodes them, and restarts accumulation. */
|
|
49
|
+
invalidateDecodedSplats(): void;
|
|
50
|
+
/**
|
|
51
|
+
* Handles the point result for the current pass, including waiting for shader readiness without classic rendering.
|
|
52
|
+
* @param enableAlphaMode whether the caller wants alpha mode applied
|
|
53
|
+
* @returns true when the point path handled this pass and the classic geometry must be skipped
|
|
54
|
+
*/
|
|
55
|
+
drawColorPass(enableAlphaMode: boolean): boolean;
|
|
56
|
+
/** Releases every GPU resource owned by the controller. */
|
|
57
|
+
dispose(): void;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Factory installed by the optional point-splatting module.
|
|
61
|
+
* @internal
|
|
62
|
+
*/
|
|
63
|
+
export type GaussianPointSplattingControllerFactory = (mesh: GaussianSplattingMesh) => IGaussianPointSplattingController;
|
|
64
|
+
/**
|
|
65
|
+
* Installs the point-splatting controller factory. Called by the optional point-splatting module's
|
|
66
|
+
* registration; until then every point-splatting mode on {@link GaussianSplattingMesh} is a no-op.
|
|
67
|
+
* @param factory creates a controller for a given mesh
|
|
68
|
+
* @internal
|
|
69
|
+
*/
|
|
70
|
+
export declare function _SetGaussianPointSplattingControllerFactory(factory: GaussianPointSplattingControllerFactory): void;
|
|
13
71
|
interface IGaussianSplattingPartSource {
|
|
14
72
|
name: string;
|
|
15
73
|
_vertexCount: number;
|
|
@@ -162,6 +220,20 @@ export declare class GaussianSplattingMesh extends GaussianSplattingMeshBase {
|
|
|
162
220
|
* Visibility values for each part (0.0 to 1.0), indexed by part index.
|
|
163
221
|
*/
|
|
164
222
|
protected _partVisibility: number[];
|
|
223
|
+
private _pointScale;
|
|
224
|
+
private _pointRenderScale;
|
|
225
|
+
private _pointOcclusionCulling;
|
|
226
|
+
private _pointController;
|
|
227
|
+
/**
|
|
228
|
+
* Internal render-resolution scale for point splatting (1 = full). Lower values emit ~scale^2 fewer
|
|
229
|
+
* points; full resolution is reconstructed over frames. `"auto"` (default) targets a device-tiered point
|
|
230
|
+
* budget, with the upscale factor capped at 8. Setting it restarts accumulation.
|
|
231
|
+
*/
|
|
232
|
+
get pointSplattingRenderScale(): number | "auto";
|
|
233
|
+
set pointSplattingRenderScale(value: number | "auto");
|
|
234
|
+
/** Enables previous-frame Hi-Z culling in point mode. Off by default because translucent splats can be biased. */
|
|
235
|
+
get pointSplattingOcclusionCulling(): boolean;
|
|
236
|
+
set pointSplattingOcclusionCulling(value: boolean);
|
|
165
237
|
/**
|
|
166
238
|
* Per-part active source-splat range overrides, indexed by part index, in GLOBAL source-splat
|
|
167
239
|
* coordinates (offsets into the merged atlas). A part with no entry (undefined) renders its full
|
|
@@ -203,6 +275,8 @@ export declare class GaussianSplattingMesh extends GaussianSplattingMeshBase {
|
|
|
203
275
|
private _tombstonedPartIndices;
|
|
204
276
|
private _partIndicesTexture;
|
|
205
277
|
private _partIndices;
|
|
278
|
+
private _partWorldData;
|
|
279
|
+
private readonly _partVisibilityData;
|
|
206
280
|
/** Gets the part indices texture used for compound rendering */
|
|
207
281
|
get partIndicesTexture(): Nullable<BaseTexture>;
|
|
208
282
|
/**
|
|
@@ -276,6 +350,90 @@ export declare class GaussianSplattingMesh extends GaussianSplattingMeshBase {
|
|
|
276
350
|
* @param textureLength - the padded texture length to allocate into
|
|
277
351
|
*/
|
|
278
352
|
protected _onIndexDataReceived(partIndices: Uint8Array, textureLength: number): void;
|
|
353
|
+
/**
|
|
354
|
+
* Lazily creates this mesh's point-splatting controller, or null when the optional module is absent.
|
|
355
|
+
* @returns the controller, or null when point splatting has not been registered
|
|
356
|
+
*/
|
|
357
|
+
private _ensurePointController;
|
|
358
|
+
/**
|
|
359
|
+
* Whether the main color pass is rendered with the WebGPU compute point-splatting path instead of the
|
|
360
|
+
* classic sorted quads. Off by default; other passes (shadows, picking, prepass) are unaffected. Falls
|
|
361
|
+
* back to the classic path for multiple or rig cameras, floating-origin scenes, clip planes, and streamed parts.
|
|
362
|
+
* Color rendering also falls back when the camera viewport does not cover the full target or projected-size visualization is enabled.
|
|
363
|
+
* Wireframe, point-cloud, and other non-triangle fill modes use classic color, including scene-wide and mesh overrides.
|
|
364
|
+
* Clipping and depth quantization use the supplied projection's planes, including frozen projections.
|
|
365
|
+
* Tilted and custom projections are supported by the point path. Compute runs immediately
|
|
366
|
+
* before compositing with the pass's actual view and target dimensions; matching color and depth passes share one result.
|
|
367
|
+
* While point shaders compile, the pass waits without drawing classic splats. The color pass uses the classic path
|
|
368
|
+
* while the GaussianSplattingSolidColorMaterialPlugin override is enabled or the source material's
|
|
369
|
+
* alpha mode is not ALPHA_COMBINE. Point color supports only the built-in GaussianSplattingMaterial;
|
|
370
|
+
* NodeMaterials, subclasses, and other source materials use classic color to preserve their shader behavior.
|
|
371
|
+
* Custom material plugins and built-in visualization or picking plugins use classic color unless their
|
|
372
|
+
* behavior is explicitly reproduced or they are known neutral while disabled. The built-in debug plugin is supported.
|
|
373
|
+
* The source must require alpha blending without alpha testing; opaque and alpha-test transparency modes use classic color.
|
|
374
|
+
* Material compatibility is reevaluated each draw, including after material replacement or plugin attachment. WebGPU only.
|
|
375
|
+
*
|
|
376
|
+
* Limitation: each pixel's accumulated color is depth-tested as a whole against its latest sample's depth. Where
|
|
377
|
+
* other geometry intersects the splats, occluded splats can bleed through or visible ones drop out, and the
|
|
378
|
+
* result can flicker as the latest sample changes. Non-intersecting geometry composites correctly, and mostly
|
|
379
|
+
* opaque splats show no visible artifacts.
|
|
380
|
+
*
|
|
381
|
+
* Requires `@babylonjs/core/Meshes/GaussianSplatting/gaussianPointSplattingController` (included in
|
|
382
|
+
* `@babylonjs/core`); without it, enabling this logs a warning and does nothing.
|
|
383
|
+
* @see https://playground.babylonjs.com/#F39YWU#1
|
|
384
|
+
*/
|
|
385
|
+
get pointSplattingRenderMode(): boolean;
|
|
386
|
+
set pointSplattingRenderMode(value: boolean);
|
|
387
|
+
/**
|
|
388
|
+
* Whether the active camera's DepthRenderer depth for this mesh comes from the point-splatting compute
|
|
389
|
+
* (an opaque nearest-surface depth) instead of the classic path. Off by default and independent of
|
|
390
|
+
* {@link pointSplattingRenderMode}, with the same camera, floating-origin, clip-plane, data fallbacks and module requirement.
|
|
391
|
+
* Color-only material fallbacks do not disable point depth. Scene-wide wireframe or point-cloud overrides
|
|
392
|
+
* use classic depth. For partial camera viewports, point depth
|
|
393
|
+
* requires a depth map with ignoreCameraViewport enabled. When point color is supported, depth maps
|
|
394
|
+
* with different pixel dimensions use classic depth to preserve color accumulation.
|
|
395
|
+
* Depth passes whose view, material parameters, or part inputs differ from retained point-color history
|
|
396
|
+
* also use classic depth rather than resetting that history. WebGPU only.
|
|
397
|
+
*/
|
|
398
|
+
get pointSplattingDepthRenderMode(): boolean;
|
|
399
|
+
set pointSplattingDepthRenderMode(value: boolean);
|
|
400
|
+
/**
|
|
401
|
+
* Counters of the most recent point-splatting compute frame, or null when compute has no available result.
|
|
402
|
+
* Individual render passes may still use the classic path for unsupported configurations.
|
|
403
|
+
*
|
|
404
|
+
* Snapshot `renderedFrameCount` whenever `accumulationVersion` changes: after the first frame of a
|
|
405
|
+
* generation, each further `pixelCycleLength` frames add one sample to every output pixel.
|
|
406
|
+
* @returns the latest compute counters, or null when point splatting is not producing frames
|
|
407
|
+
*/
|
|
408
|
+
get pointSplattingProgress(): Nullable<IGaussianPointSplattingProgress>;
|
|
409
|
+
/** Density multiplier for point splatting (higher = denser and slower). */
|
|
410
|
+
get pointSplattingScale(): number;
|
|
411
|
+
set pointSplattingScale(value: number);
|
|
412
|
+
/**
|
|
413
|
+
* True when this mesh hosts a streamed (GPU-decoded) region, which is absent from the CPU `_splatsData`
|
|
414
|
+
* that point splatting decodes.
|
|
415
|
+
* @internal
|
|
416
|
+
*/
|
|
417
|
+
get _pointStreamingUnsupported(): boolean;
|
|
418
|
+
/**
|
|
419
|
+
* Force-computes every part proxy's world matrix (a non-forced call skips nodes already computed this frame).
|
|
420
|
+
* @internal
|
|
421
|
+
*/
|
|
422
|
+
_syncPartProxyWorldMatrices(): void;
|
|
423
|
+
/**
|
|
424
|
+
* Protected state the point-splatting controller needs to decode {@link _splatsData}.
|
|
425
|
+
* @returns the decoded atlas positions, fallback flip-Y convention, part indices, and active splat-range pairs
|
|
426
|
+
* @internal
|
|
427
|
+
*/
|
|
428
|
+
_getPointDecodeInputs(): {
|
|
429
|
+
positions: Nullable<Float32Array>;
|
|
430
|
+
flipY: boolean;
|
|
431
|
+
partIndices: Nullable<Uint8Array>;
|
|
432
|
+
activeRanges: Nullable<Uint32Array>;
|
|
433
|
+
};
|
|
434
|
+
protected _drawColorPass(mesh: Mesh, subMesh: SubMesh, enableAlphaMode: boolean, effectiveMeshReplacement?: AbstractMesh): Mesh;
|
|
435
|
+
protected _isSortRequired(): boolean;
|
|
436
|
+
protected _drawPointPass(enableAlphaMode: boolean): boolean;
|
|
279
437
|
/**
|
|
280
438
|
* Returns `true` when at least one part has been added to this compound mesh.
|
|
281
439
|
* Returns `false` before any parts are added, so the mesh renders in normal
|
|
@@ -400,6 +558,11 @@ export declare class GaussianSplattingMesh extends GaussianSplattingMeshBase {
|
|
|
400
558
|
* @param ranges active global source-splat ranges for the part, or `null` to render the whole part
|
|
401
559
|
*/
|
|
402
560
|
setPartSplatRanges(partIndex: number, ranges: Nullable<readonly IGaussianSplattingSplatRange[]>): void;
|
|
561
|
+
/**
|
|
562
|
+
* Sets the active splat ranges and invalidates decoded point-splatting data when they change.
|
|
563
|
+
* @param ranges global source-splat ranges to render, or null to render all splats
|
|
564
|
+
*/
|
|
565
|
+
setSplatIndexRanges(ranges: Nullable<readonly IGaussianSplattingSplatRange[]>): void;
|
|
403
566
|
/**
|
|
404
567
|
* Recomputes the global active-range union across all parts and pushes it to the shared sort/draw
|
|
405
568
|
* via the base {@link setSplatIndexRanges}. When no part carries an override the filter is cleared
|
|
@@ -545,22 +708,8 @@ export declare class GaussianSplattingMesh extends GaussianSplattingMeshBase {
|
|
|
545
708
|
*/
|
|
546
709
|
static Parse(parsedMesh: any, scene: Scene): GaussianSplattingMesh;
|
|
547
710
|
}
|
|
548
|
-
/**
|
|
549
|
-
* True when `className` (from `AbstractMesh.getClassName()`) identifies a Gaussian Splatting mesh whose
|
|
550
|
-
* `position.z` vertex attribute encodes a splat index rather than world-space Z: `"GaussianSplattingMesh"`
|
|
551
|
-
* (also returned by {@link GaussianSplattingCompoundMesh}, which deliberately does not override
|
|
552
|
-
* `getClassName()`) and `"GaussianSplattingStream"` (which does override it, to remain distinguishable for
|
|
553
|
-
* other purposes). Rendering-pipeline code that must treat any Gaussian Splatting mesh differently from an
|
|
554
|
-
* ordinary mesh (geometry buffer, depth pre-pass, GPU picking, IBL voxelization, snapshot rendering, ...)
|
|
555
|
-
* should use this instead of a literal string comparison, so a future splat mesh subclass only needs to be
|
|
556
|
-
* added here once.
|
|
557
|
-
* @param className the mesh class name to test, e.g. from `AbstractMesh.getClassName()`
|
|
558
|
-
* @returns true if the class name identifies a Gaussian Splatting mesh
|
|
559
|
-
*/
|
|
560
|
-
export declare function IsGaussianSplattingClassName(className: string): boolean;
|
|
561
711
|
/**
|
|
562
712
|
* Register side effects for gaussianSplattingMesh.
|
|
563
713
|
* Safe to call multiple times; only the first call has an effect.
|
|
564
714
|
*/
|
|
565
715
|
export declare function RegisterGaussianSplattingMesh(): void;
|
|
566
|
-
export {};
|