Jiahao Wu*1,2, Jie Liang*1,2, Die Hu1, Jiayu Yang2, Kaiqiang Xiong1,2, Xiaoyun Zheng2, Xiang Li1,2, Chao Wang ✉2, Ronggang Wang ✉1,2
1 Peking University 2 Pengcheng Laboratory
ATGS represents long volumetric video with anchored temporal Gaussian splatting. A spacetime encoder (Hash or HexPlane) models dynamics over time clips and can be swapped by changing the config (hash=True/False).
conda env create --file env.ymlAfter that, you need to install tiny-cuda-nn (1.7) and gsplat.
We use the VRU dataset as an example. First, download the VRU Long dataset (1400 frames) from Hugging Face. Follow the step-by-step instructions in utils/multiview_data_process/readme.md to process the data. Preprocessed cameras are available here.
You can also download our processed ply files from Google Drive and place them under data/ (or your own path and pass it via --base_path).
Long-sequence training entry point: train_long.py. Experiment switches live in config files under arguments/vru/ or arguments/vrugz/.
Hash encoder (hash=True):
python train_long.py \
-s /path/to/vru_long/ \
-m output/exp_name/ \
--frames_start_end 0 250 \
--configs arguments/vru/basketball.py \
--base_path /path/to/250_points_enhanced.plyHexPlane encoder (hash=False): use arguments/vru/basketball_plane.py or arguments/vrugz/basketball_plane.py instead.
Other training options (iterations, encoder levels, balanced accumulation, etc.) are set in those config files.
| Flag / env | Meaning |
|---|---|
CUDA_VISIBLE_DEVICES |
GPU id (set in shell before running) |
-s |
Source multi-view images |
-m |
Output / checkpoint directory |
--frames_start_end |
Frame window [start, end) |
--configs |
Config file (mmcv-style) |
--base_path |
Initial PLY |
--restore_iteration N |
Resume from point_cloud/iteration_N |
Entry point: render.py. Keep -s, -m, --frames_start_end, --configs, and --base_path consistent with the training run.
python render.py \
-s /path/to/images/ \
-m output/exp_name/ \
--frames_start_end 0 250 \
--configs arguments/vru/basketball.py \
--base_path /path/to/init_points.ply \
--iteration -1 \
--skip_train \
--skip_videoOutputs are written to <model_path>/test/ours_<iteration>/renders/<view_id>/*.jpg (and matching gt/).
Entry point: metrics.py. Set --input_dir_path to the folder that contains both renders/ and gt/ (not the renders/ folder itself), e.g. output/exp_name/test/ours_<iteration> for render.py, or testall/ours_<iteration> for training-time eval.
python metrics.py \
--input_dir_path output/exp_name/test/ours_<iteration>It evaluates every view under renders/, writes per-image and average PSNR / DSSIM / LPIPS to <input_dir_path>/<view_id>.csv, and prints the averages.
If you find this work useful, please cite:
@article{wu2026atgs,
author = {Wu, Jiahao and Liang, Jie and Hu, Die and Yang, Jiayu and Xiong, Kaiqiang and Li, Xiang and Zheng, Xiaoyun and Wang, Chao and Wang, Ronggang},
title = {ATGS: Anchored Temporal Gaussian Splatting for Long Volumetric Video Representation},
journal = {ACM Transactions on Graphics},
volume = {45},
number = {4},
pages = {110:1--110:13},
year = {2026},
doi = {10.1145/3811306},
publisher = {Association for Computing Machinery}
}This codebase builds upon LocalDyGS and related 3D Gaussian Splatting research. We thank the authors for open-sourcing their work.