Only What Was Seen: Observation-Gram Compaction of View-Dependent Appearance in 3D Gaussian Splatting
Organizations: Moholo Inc.
Abstract
Most of the memory of a 3D Gaussian Splatting model holds spherical-harmonic colour coefficients, yet each Gaussian is seen only from the narrow cone of directions of the training cameras. We turn this into a distortion metric that other compressors can adopt: a per-Gaussian observation Gram matrix, accumulated from viewing directions and blending weights, is the exact first-order map from coefficient changes to squared image error and needs only the model and the camera poses. Under it, degree reduction becomes a closed-form projection that generalises truncation, degree allocation a Lagrangian rate-distortion problem, and vector quantisation the matrix-weighted Lloyd algorithm, of which Compressed3D's quantiser is the scalar case. Swapped into Compressed3D with everything else unchanged, the metric raises PSNR by +0.49 dB before fine-tuning, with SSIM and LPIPS following, and at matched rate still gains +0.32 dB without a single training image. A training-free stack built on the metric alone is 15% smaller than the image-free GSICO at equal quality on Mip-NeRF 360.
Figures & tables
| Host: Compressed3D [ 31 ] , colour VQ metric | Size (MB) | PSNR | SSIM | LPIPS | time (s) | |
| published: their sensitivity, their VQ | 9 | 28.8 | 26.98 | 0.801 | 0.238 | – |
| before fine-tuning | ||||||
| reproduced: their sensitivity, their VQ | 9 | 28.7 | 26.30 | 0.782 | 0.258 | 177 |
| their sensitivity in generalised Lloyd | 9 | 29.4 (103%) | 26.51 (+0.21) | 0.788 (+0.006) | 0.251 (-0.007) | 128 |
| our weight in generalised Lloyd | 9 | 29.4 (102%) | 26.52 (+0.22) | 0.789 (+0.007) | 0.251 (-0.007) | 128 |
| our matrix in generalised Lloyd | 9 | 30.3 (106%) | 26.79 (+0.49) | 0.799 (+0.017) | 0.238 (-0.019) | 127 |
| Reduced3DGS criterion [ 32 ] , post-hoc | AC floats | same degrees | same floats | ||
|---|---|---|---|---|---|
| threshold | per Gaussian | truncation (theirs) | projection (ours) | their criterion | our allocation |
| 0.08 | 23.4 | 26.87 | 27.21 | 26.87 | 27.28 (23.4) |
| 0.12 | 14.7 | 26.32 | 27.00 | 26.32 | 27.28 (14.7) |
| 0.16 | 8.9 | 25.82 | 26.72 | 25.82 | 27.25 (8.9) |
| 0.24 | 3.2 | 25.11 | 26.16 | 25.11 | 27.05 (3.2) |
| deg. 3 | degree 2 (24) | degree 1 (9) | degree 0 (0) | ||||
|---|---|---|---|---|---|---|---|
| Dataset | full | trunc. | ours | trunc. | ours | trunc. | ours |
| Mip-NeRF 360 (9) | 27.29 | 26.16 | 27.15 | 25.08 | 26.71 | 24.22 | 25.07 |
| Tanks&Temples (2) | 23.39 | 22.65 | 23.34 | 21.80 | 23.05 | 21.22 | 21.77 |
| Deep Blending (2) | 29.53 | 29.17 | 29.47 | 28.38 | 29.42 | 27.81 | 28.38 |
| Method | class | Size (MB) | PSNR | SSIM | LPIPS |
|---|---|---|---|---|---|
| 3DGS-30K (fp32) [ 19 , 2 ] | reference | 734.0 | 27.21 | 0.815 | 0.214 |
| HEMGS high-rate [ 24 ] | retrained backbone | 21.0 | 27.93 | 0.813 | 0.230 |
| HAC++ high-rate [ 6 ] | retrained backbone | 19.4 | 27.82 | 0.811 | 0.231 |
| HAC high-rate [ 5 ] | retrained backbone | 22.9 | 27.77 | 0.811 | 0.230 |
| HEMGS low-rate [ 24 ] | retrained backbone | 12.5 | 27.75 | 0.806 | 0.248 |
| ContextGS high-rate [ 40 ] | retrained backbone | 19.3 | 27.75 | 0.811 | 0.231 |
| Configuration | Size (MB) | PSNR | SSIM | LPIPS |
| Mip-NeRF 360 (mean over 9 scenes) | ||||
| pretrained 3DGS, fp32 | 793.5 | 27.29 | 0.812 | 0.218 |
| OGC pipeline, 50% pruning ( Tab. 4 ) | 59.6 | 26.81 | 0.802 | 0.231 |
| + geometry stage, 50% pruning | 23.6 | 26.71 | 0.796 | 0.234 |
| + appearance refit with images ( Sec. 3.6 ) | 23.3 | 26.97 | 0.795 | 0.235 |
| + geometry stage, 60% pruning | 19.0 | 26.31 | 0.790 | 0.240 |
| Dataset | anchor | BD-rate / size | BD-PSNR / PSNR |
|---|---|---|---|
| Mip-NeRF 360 | GSICO (3DGS input) ∗ | size -15% | +0.09 |
| Mip-NeRF 360 | FCGS | – | – |
| Mip-NeRF 360 | HAC | – | -1.43 |
| Tanks&Temples | GSICO (3DGS input) ∗ | – | -0.36 |
| Tanks&Temples | FCGS | – | – |
| Tanks&Temples | HAC ∗ | – | -1.44 |
Appendix figures & tables15 assets
Supplementary material from the paper’s appendix.
Appendix
| layout | AC floats | SH data | SH evaluation (ms) | frame | |
|---|---|---|---|---|---|
| per Gaussian | (MB, fp16) | padded | branching | (s) | |
| garden | |||||
| degree 3 | 45.0 | 560 | 76.0 | 80.5 | 8.9 |
| allocation, 9 | 9.0 | 140 | 77.5 | 17.3 | 5.9 |
| allocation, 6 | 6.0 | 105 | 75.9 | 11.8 | 6.4 |
| allocation, 3 | 3.0 | 70 | 75.5 | 8.5 | 8.2 |
| trainable SH | params/Gauss. | params+Adam (MB) | GPU working set (GB) | iteration (s) |
|---|---|---|---|---|
| degree 3 (45 AC) | 59 | 1033 | 8.8 | 9.19 |
| degree 1 (9 AC) | 23 | 403 | 4.5 | 8.79 |
| degree 0 (none) | 14 | 245 | 4.5 | 8.83 |
| weight | deg. 0 | deg. 1 | deg. 0 | deg. 1 | ||
|---|---|---|---|---|---|---|
| truncation | 24.56 | 25.83 | 25.60 | 28.13 | ||
| (ours) | 25.60 | 28.09 | 25.60 | 28.12 | ||
| 25.55 | 28.05 | 25.60 | 28.09 | |||
| pixel count | 25.29 | 27.85 | 25.60 | 27.98 | ||
| hit (0/1) | 24.99 | 27.56 | 25.58 | 27.69 | ||
| 25.29 | 27.15 |
| pruned | method | PSNR before | PSNR after | SSIM after | time (s) |
| 0% | Adam, 1500 iterations | 27.32 | 27.39 | 0.867 | 111 |
| 50% | Adam, 1500 iterations | 26.96 | 27.26 | 0.864 | 65 |
| 50% | Adam, 2500 iterations | 26.96 | 27.24 | 0.864 | 108 |
| 50% | Adam, 2500 iterations (MSE) | 26.97 | 27.36 | 0.862 | 102 |
| 50% | Adam, 6000 iterations | 26.96 | 27.26 | 0.864 | 256 |
| 50% | PCG, 12 3 iterations | 26.97 | 27.48 | 0.862 | 184 |
| Configuration | zlib (MB) | rANS (MB) | PSNR | SSIM | LPIPS |
| garden | |||||
| appearance pipeline only, 50% pruning (fp16 container) | 103.3 | – | 26.57 | 0.846 | 0.129 |
| + geometry 16/8 bit, no pruning | 87.9 | 79.9 | 26.86 | 0.853 | 0.123 |
| + geometry 16/8 bit | 45.7 | 41.7 | 26.51 | 0.844 | 0.130 |
| + geometry 16/6 bit | 38.0 | 33.7 | 26.43 | 0.839 | 0.135 |
| + geometry 14/8 bit | 42.6 | 39.2 | 26.10 | 0.821 | 0.145 |
| Scene | their VQ | , Lloyd | , Lloyd | , Lloyd | , 2048 | , 1024 | , 512 | ||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| MB | pre | post | MB | pre | post | MB | pre | post | MB | pre | post | MB | pre | post | MB | pre | post | MB | pre | post | |
| bicycle | 47.3 | 24.44 | 25.04 | 48.3 | 24.53 | 25.00 | 48.3 | 24.55 | 25.00 | 49.9 | 24.78 | 25.01 | 49.1 | 24.73 | 25.01 | 48.5 | 24.68 | 24.95 | 47.9 | 24.62 | 24.96 |
| bonsai | 12.8 | 30.35 | 31.38 | 13.1 | 30.62 | 31.41 | 13.0 | 30.63 | 31.43 | 13.0 | 31.03 | 31.60 | 12.7 | 30.95 | 31.45 | 12.6 | 30.87 | 31.55 | 12.6 | 30.77 | 31.32 |
| counter | 13.8 | 27.90 | 28.66 | 14.2 | 28.16 | 28.74 | 14.2 | 28.14 | 28.73 | 13.5 | 28.34 | 28.79 | 13.3 | 28.30 | 28.66 | 13.3 | 28.24 | 28.68 | 13.3 | 28.17 | 28.68 |
| flowers | 31.2 | 21.00 | 21.22 | 32.0 | 21.09 | 21.25 | 31.9 | 21.11 | 21.29 | 32.6 | 21.23 | 21.32 | – | – | – | – | – | – | 31.4 | 21.13 | 21.22 |
| garden | 46.4 | 25.88 | 26.85 | 47.6 | 26.15 | 26.97 | 47.5 | 26.15 | 26.90 | 48.5 | 26.67 | 27.01 | 47.8 | 26.60 | 26.97 | 47.3 | 26.52 | 26.94 | 46.6 | 26.42 | 26.87 |
| Scene | colour VQ | codes used | index entropy (bit) | index stream (MB) | container (MB) |
|---|---|---|---|---|---|
| bicycle | their VQ | 85856 | 9.72 | 6.49 | 47.27 |
| bicycle | their sensitivity in generalised Lloyd | 86960 | 11.53 | 7.49 | 48.25 |
| bicycle | our weight in generalised Lloyd | 86960 | 11.42 | 7.45 | 48.26 |
| bicycle | our matrix in generalised Lloyd | 86960 | 11.84 | 9.32 | 49.89 |
| bicycle | our matrix, 2048-entry codebook | 84912 | 10.89 | 8.67 | 49.15 |
| bicycle | our matrix, 1024-entry codebook | 83888 | 9.92 | 8.01 | 48.54 |
| Configuration | Size (MB) | PSNR | SSIM | LPIPS |
|---|---|---|---|---|
| 3DGS-30K reproduced (fp32) | 793.5 | 27.29 | 0.812 | 0.218 |
| fp16 attributes | 416.9 | 27.29 | 0.812 | 0.218 |
| + allocation (9 AC floats) | 175.7 | 27.26 | 0.812 | 0.219 |
| + Gram VQ | 118.1 | 27.02 | 0.806 | 0.227 |
| + importance VQ (instead) | 118.1 | 26.74 | 0.797 | 0.236 |
| prune 50% (fp16) | 208.5 | 27.12 | 0.810 | 0.221 |
| Scene | geometry quantisation | Size (MB) | PSNR | SSIM | LPIPS |
|---|---|---|---|---|---|
| garden | |||||
| uniform 16/8 bit | 41.7 | 26.51 | 0.844 | 0.130 | |
| uniform 14/8 bit | 39.2 | 26.10 | 0.821 | 0.145 | |
| uniform 16/6 bit | 33.7 | 26.43 | 0.839 | 0.135 | |
| uniform 14/6 bit | 31.1 | 26.03 | 0.817 | 0.149 | |
| uniform 12/5 bit | 25.4 | 22.90 | 0.595 | 0.285 | |
| Configuration | garden : PSNR near / mid / far | kitchen : PSNR near / mid / far | ||||
|---|---|---|---|---|---|---|
| uncompressed | 22.65 | 22.66 | 21.02 | 28.41 | 22.89 | 19.27 |
| truncation, degree 1 | 21.92 | 22.40 | 21.58 | 25.46 | 22.18 | 19.47 |
| projection, degree 1 | 22.40 | 22.19 | 20.74 | 27.09 | 22.99 | 19.70 |
| truncation, degree 0 | 21.22 | 21.90 | 21.31 | 24.43 | 21.54 | 19.14 |
| projection, degree 0 | 21.46 | 21.74 | 20.90 | 25.24 | 22.07 | 19.38 |
| allocation (truncated), 9 floats | 22.71 | 22.84 | 21.38 | 27.88 | 22.86 | 19.40 |
| degree 3 | degree 2 (24 AC floats) | degree 1 (9 AC floats) | degree 0 (0 AC floats) | |||||
|---|---|---|---|---|---|---|---|---|
| Dataset | Metric | full | truncation | OGC (ours) | truncation | OGC (ours) | truncation | OGC (ours) |
| Mip-NeRF 360 (9/9) | PSNR | 27.29 | 26.16 | 27.15 | 25.08 | 26.71 | 24.22 | 25.07 |
| SSIM | 0.812 | 0.797 | 0.811 | 0.777 | 0.804 | 0.756 | 0.777 | |
| LPIPS | 0.218 | 0.232 | 0.219 | 0.249 | 0.224 | 0.264 | 0.245 | |
| Tanks&Temples (2/2) | PSNR | 23.39 | 22.65 | 23.34 | 21.80 | 23.05 | 21.22 | 21.77 |
| SSIM | 0.842 | 0.830 | 0.842 | 0.814 | 0.837 | 0.799 | 0.813 | |
| coefficients | VQ metric | PSNR | SSIM | LPIPS | pred. ( ) |
|---|---|---|---|---|---|
| degree 3 (45) | none (uncompressed) | 28.96 | 0.893 | 0.119 | – |
| degree 3 (45) | Euclidean | 27.96 | 0.875 | 0.143 | 156.5 |
| degree 3 (45) | importance-weighted | 28.20 | 0.877 | 0.141 | 129.3 |
| degree 3 (45) | Gram (ours) | 28.55 | 0.886 | 0.130 | 52.1 |
| allocated (9) | none | 28.89 | 0.892 | 0.120 | – |
| allocated (9) | importance-weighted | 28.02 | 0.874 | 0.143 | 145.7 |
| Scene | #Gaussians | full | trunc. 2 | ours 2 | trunc. 1 | ours 1 | trunc. 0 | ours 0 |
|---|---|---|---|---|---|---|---|---|
| bicycle | 6.13M | 25.03 | 24.36 | 24.95 | 23.67 | 24.60 | 23.06 | 23.69 |
| bonsai | 1.24M | 32.06 | 29.34 | 31.78 | 27.64 | 30.84 | 26.57 | 28.06 |
| counter | 1.22M | 28.91 | 27.13 | 28.70 | 25.69 | 27.87 | 24.64 | 25.52 |
| flowers | 3.64M | 21.51 | 21.24 | 21.48 | 20.77 | 21.31 | 20.22 | 20.57 |
| garden | 5.83M | 27.20 | 26.06 | 27.04 | 24.85 | 26.60 | 23.74 | 24.62 |
| kitchen | 1.85M | 30.72 | 28.69 | 30.52 | 26.81 | 29.59 | 25.37 | 26.59 |