Repository navigation
Conversation
92401
force-pushed
the
splat-compression-upstream
branch
from
October 6, 2026 03:13
def2c3a to
4fbc614
Compare
92401
force-pushed
the
splat-compression-upstream
branch
from
October 6, 2026 03:31
4fbc614 to
07740f8
Compare
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Motivation
Spirula Studio makes it practical to train detailed Gaussian models, including
on relatively modest hardware. As the splat count grows, however, the resulting
models can become costly to store, transfer, and browse interactively on
devices with tighter VRAM and rendering budgets.
This PR focuses on the post-training workflow. It provides a reproducible way
to derive a smaller model from a completed checkpoint, measure the rendering
change introduced by compression, and evaluate the compressed model against
the source images before choosing a deployment trade-off.
Method
The compression workflow combines several simple and interpretable operations.
Contribution-based pruning
The model is rendered from a representative set of training cameras. Each
splat accumulates its alpha- and transmittance-weighted rendering
contribution, and only the highest-scoring splats are retained.
Spherical-harmonics reduction
Higher-order view-dependent colour coefficients are removed while preserving
the geometry and lower-order appearance representation.
Opacity-threshold pruning
Nearly transparent splats can be removed as a lightweight standalone
pruning method or as an additional filter.
The commands operate directly on existing checkpoints and derived PLY files;
they do not require retraining.
CLI
This PR currently adds a command-line interface only; a GUI integration is
left for follow-up work.
splat prune--keep-fraction--min-opacity--sh-degreesplat comparesplat evaluateModel replay supports
3dgs,mip, and3dgut. For standalone PLY files, the--primitiveoption can override the primitive saved inconfig.json.3DGUT is validated with a 3,000-step half-resolution Garden / pinhole smoke run. With the same 60% contribution pruning and degree-3 to degree-2 SH reduction, the model changed from 105.7 MB / 446,978 splats to 41.9 MB / 268,187 splats. On 20 source cameras, source-image PSNR dropped by 0.0774 dB and SSIM by 0.007129; original-versus-compressed renders measured 37.5592 dB PSNR and 0.987195 SSIM.
Benchmark
All compressed models retain 60% of contribution-ranked splats and reduce
degree-3 spherical harmonics to degree 2. Each result uses 20 source cameras.
The indoor6k data was captured with an Insta360 X6. The dual-fisheye result
uses frames extracted from the original, unstitched INSV files, while the
equirectangular result uses frames extracted from an MP4 exported by Insta360
Studio. These private datasets are used only for evaluation and are not
included in this PR.
Validation
Tested on the latest upstream
mastercommit:splat_prune_testpassed on both CUDA and Vulkan backends.python tools/codegen/generate_kernel_instantiation.py --check.git diff --check upstream/master...HEADreported no whitespace errors.