Chenjunjie Wang*, Shashank N. Sridhara*, Eduardo Pavez*, Antonio Ortega*, Cheng Changβ
*University of Southern California, Los Angeles, CA,
β Meta, Menlo Park, CA
We present a novel compression framework for 3D Gaussian splatting (3DGS) data that leverages transform coding tools originally developed for point clouds. Contrary to existing 3DGS compression methods, our approach can produce compressed 3DGS models at multiple bitrates in a computationally efficient way. Point cloud voxelization is a discretization technique that point cloud codecs use to improve coding efficiency while enabling the use of fast transform coding algorithms. We propose an adaptive voxelization algorithm tailored to 3DGS data, to avoid the inefficiencies introduced by uniform voxelization used in point cloud codecs. We ensure the positions of larger volume Gaussians are represented at high resolution, as these significantly impact rendering quality. Meanwhile, a low-resolution representation is used for dense regions with smaller Gaussians, which have a relatively lower impact on rendering quality. This adaptive voxelization approach significantly reduces the number of Gaussians and the bitrate required to encode the 3DGS data. After voxelization, many Gaussians are moved or eliminated. Thus, we propose to fine-tune/recolor the remaining 3DGS attributes with an initialization that can reduce the amount of retraining required. Experimental results on pre-trained datasets show that our proposed compression framework outperforms existing methods.
-
Conda Environment 1 (gaussian_splatting)
π graphdeco-inria/gaussian-splatting -
Conda Environment 2 (c3dgs)
π KeKsBoTer/c3dgs -
Geometry-based Point Cloud Compression (GPCC) Codec
π MPEGGroup/mpeg-pcc-tmc13
π project_root/
βββ π attributes_compressed/
βββ π code_Adaptive/
β βββ π Lossless_covar/
β β βββ extract_all_pq.py
β β βββ postprocess.py
β β βββ encoder.py
β β βββ decoder.py
β β βββ codec.py
β βββ π Lossless_covar/
β β βββ extract_all_pq.py
β β βββ postprocess.py
β β βββ encoder.py
β β βββ decoder.py
β β βββ codec.py
β βββ π Retrain_3DGS/
β β βββ train.py
β β βββ render.py
β β βββ metrics.py
β β βββ adapt_voxel_recolor.py
β βββ π Retrain_PC/
β β βββ train.py
β β βββ render.py
β β βββ metrics.py
β βββ π VQ_script/
β β βββ compress.py
β β βββ render.py
β β βββ metrics.py
β βββ plot_RD.py
β βββ voxelization.py
βββ π colmap_dataset/
β βββ π bicycle/
β βββ π bonsai/
β βββ π counter/
β βββ π drjohnson/
β βββ π flowers/
β βββ π garden/
β βββ π kitchen/
β βββ π playroom/
β βββ π room/
β βββ π stump/
β βββ π train/
β βββ π treehill/
β βββ π truck/
βββ π original_model/
β βββ π bicycle/
β βββ π bonsai/
β βββ π counter/
β βββ π drjohnson/
β βββ π flowers/
β βββ π garden/
β βββ π kitchen/
β βββ π playroom/
β βββ π room/
β βββ π stump/
β βββ π train/
β βββ π treehill/
β βββ π truck/
βββ π test_model/
β βββ π bicycle/
β βββ π bonsai/
β βββ π counter/
β βββ π drjohnson/
β βββ π flowers/
β βββ π garden/
β βββ π kitchen/
β βββ π playroom/
β βββ π room/
β βββ π stump/
β βββ π train/
β βββ π treehill/
β βββ π truck/
βββ π RDO/
β βββ π bpp/
β βββ π Meta_data/
β βββ π PSNR/
β βββ π PSNR_per_view/
βββ π reconstructed_3DGS/
βββ π retrain_model/
βββ π voxelized_adapt/
βββ π VQ_model/
βββ README.md
Set up two Conda environments:
gaussian_splatting
: used for retraining the 3DGS model and renderingc3dgs
: used for lossy covariance compression
Clone and compile the GPCC codec (TMC13) from the official repo:
π https://github.com/MPEGGroup/mpeg-pcc-tmc13
We compiled it using Visual Studio 2019 on Windows 10.
The compiled binary (tmc3.exe
) is located in: /build/tmc3/Release/tmc3.exe
Download the pre-trained 3D Gaussian Splatting models and COLMAP dataset from the official repository:
π https://github.com/graphdeco-inria/gaussian-splatting?tab=readme-ov-file
-
Download the "Pre-trained Models (14 GB)" from the repository.
Place two copies in yourproject_root
directory:- Rename the first copy to
original_model
- Rename the second copy to
test_model
- Rename the first copy to
-
Download the "Evaluation Images (7 GB)" and place them in the
project_root
directory.
Rename the folder tocolmap_dataset
.
Run voxelization and configure retraining parameters:
conda activate gaussian_splatting
cd code_Adaptive
python voxelization.py --depth_start 15 --voxel_thr 30 --dataset_name train --retrain_mode 3DGS --use_adaptive false --iterations 15000
conda deactivate
Quantization parameters are defined inside encoder.py
and decoder.py
scripts for both lossless and lossy compression pipeline
Default QP combination is what we used in our paper at ICIP2025:
(f_rest_qp, f_dc_qp, opacity_qp) =
(40, 4, 16), (40, 4, 34), (40, 4, 40),
(40, 16, 16), (40, 16, 34), (40, 16, 40),
(40, 20, 16), (40, 20, 34), (40, 20, 40),
(40, 24, 16), (40, 24, 34), (40, 24, 40),
(40, 28, 16), (40, 28, 34), (40, 28, 40),
(38, 4, 4), (38, 16, 4),
(34, 4, 4), (34, 16, 4),
(31, 4, 4), (31, 16, 4),
(28, 4, 4), (28, 16, 4),
(38, 4, 16), (38, 16, 16),
(34, 4, 16), (34, 16, 16),
(31, 4, 16), (31, 16, 16),
(28, 4, 16), (28, 16, 16),
(38, 4, 28), (38, 16, 28),
(34, 4, 28), (34, 16, 28),
(31, 4, 28), (31, 16, 28),
(28, 4, 28), (28, 16, 28),
(16, 4, 4), (16, 16, 4),
(4, 4, 4), (4, 16, 4),
(16, 4, 16), (4, 4, 16),
For a voxelized 3DGS model, launch the compression pipeline using the lossy codec.
conda activate c3dgs
cd code_Adaptive/Lossy_covar
python codec.py --depth_start 15 --voxel_thr 30 --dataset_name train --retrain_mode 3DGS --use_adaptive false
conda deactivate
For a voxelized 3DGS model, launch the compression pipeline using the lossless codec.
Quantization parameters are defined inside encoder.py
and decoder.py
scripts
conda activate gaussian_splatting
cd code_Adaptive/Lossless_covar
python codec.py --depth_start 15 --voxel_thr 30 --dataset_name train --retrain_mode 3DGS --use_adaptive false
conda deactivate
Render the compressed 3DGS and evaluate rate-distortion performance under different compression ratios:
conda activate gaussian_splatting
cd code_Adaptive
python plot_RD.py --depth_start 15 --voxel_thr 30 --dataset_name train --retrain_mode 3DGS --use_adaptive false --comp_mode lossless
conda deactivate
This work has been submitted to ICIP 2025 and is available as a preprint on arXiv:
If you find this work useful in your research, please cite it using the following BibTeX:
@INPROCEEDINGS{11084522,
author={Wang, Chenjunjie and Sridhara, Shashank N. and Pavez, Eduardo and Ortega, Antonio and Chang, Cheng},
booktitle={2025 IEEE International Conference on Image Processing (ICIP)},
title={Adaptive Voxelization for Transform Coding of 3D Gaussian Splatting Data},
year={2025},
volume={},
number={},
pages={2414-2419},
keywords={Point cloud compression;Image coding;Three-dimensional displays;Codecs;Vector quantization;Bit rate;Transform coding;Streaming media;Rendering (computer graphics);Spatial resolution;3D Gaussian Splatting;Adaptive Voxelization;3D Data Compression;Point Cloud Compression},
doi={10.1109/ICIP55913.2025.11084522}}