Skip to content

CMLab-Korea/CVPR26-MoRel

Repository files navigation

[CVPR'26 πŸ…Highlight] MoRel: Long-Range Flicker-Free 4D Motion Modeling via Anchor Relay-based Bidirectional Blending with Hierarchical Densification

Sangwoon Kwak1*, Weeyoung Kwon2*, Jun Young Jeong1, Geonho Kim2, Won-Sik Cheong1, Jihyong Oh2†

1Electronics and Telecommunications Research Institute (ETRI) 2Chung-Ang University
*Equal contribution, †Corresponding author

Project Page arXiv Stars

This repository is the official PyTorch implementation of "MoRel: Long-Range Flicker-Free 4D Motion Modeling via Anchor Relay-based Bidirectional Blending with Hierarchical Densification."

teaser


News

  • 2025.12.10: MoRel ArXiv and Project page are initially released.
  • 2026.02.21: MoRel is accepted to CVPR 2026! πŸ”₯
  • 2026.03.26: MoRel ArXiv is updated (camera-ready version).
  • 2026.04.09: MoRel is selected as a Highlight at CVPR 2026! ✨
  • 2026.04.10: MoRel codebase is initially released.

Abstract

Recent advances in 4D Gaussian Splatting (4DGS) have extended the high-speed rendering capability of 3D Gaussian Splatting (3DGS) into the temporal domain, enabling real-time rendering of dynamic scenes. However, one of the major remaining challenges lies in modeling long-range motion-contained dynamic videos, where a naΓ―ve extension of existing methods leads to severe memory explosion, temporal flickering, and failure to handle appearing or disappearing occlusions over time.

To address these challenges, we propose a novel 4DGS framework characterized by an Anchor Relay-based Bidirectional Blending (ARBB) mechanism, named MoRel, which enables temporally consistent and memory-efficient modeling of long-range dynamic scenes. Our method progressively constructs locally canonical anchor spaces at key-frame time indices and models inter-frame deformations at the anchor level, enhancing temporal coherence.

By learning bidirectional deformations between Key-frame Anchors (KfA) and adaptively blending them through learnable opacity control, our approach mitigates temporal discontinuities and flickering artifacts. We further introduce a Feature-variance-guided Hierarchical Densification (FHD) scheme that effectively densifies KfAs while preserving rendering efficiency.

Method Overview

framework

MoRel proceeds through four stages:

Stage Name Description
GCA Global Canonical Anchor Trains a single globally consistent anchor scaffold over the entire sequence
KfA Key-frame Anchor Periodically placed local canonical spaces, initialized from GCA and refined per key-frame
PWD Progressive Windowed Deformation Each KfA learns forward/backward deformation fields within a local temporal window
IFB Intermediate Frame Blending Learns temporal opacity weights to smoothly blend neighboring KfAs

Environment Setup

git clone <repository_url>
cd MoRel

# Install dependencies and create conda environment
bash install.sh

# Activate the environment
conda activate morel

The install script creates a conda environment named morel and installs all required packages including submodules (depth-diff-gaussian-rasterization, simple-knn).


Dataset Preparation

SelfCapLR

Multi-camera synchronized capture dataset. Each scene contains per-frame multi-view images and per-frame sparse point clouds (from COLMAP triangulation).

Dataset: First, obtain the original SelfCap dataset from FreeTimeGS, then locate the data as described below.

data/selfcap/
└── <scene>/                       # e.g. bike, corgi, yoga, dance
    β”œβ”€β”€ images/
    β”‚   β”œβ”€β”€ 0000/                  # camera 0000
    β”‚   β”‚   β”œβ”€β”€ 000000.jpg
    β”‚   β”‚   β”œβ”€β”€ 000001.jpg
    β”‚   β”‚   └── ...
    β”‚   β”œβ”€β”€ 0001/                  # camera 0001
    β”‚   └── ...
    β”œβ”€β”€ colmap/
    β”‚   β”œβ”€β”€ <frame_id>/            # 6-digit frame index (e.g. 000000)
    β”‚   β”‚   β”œβ”€β”€ images/            # per-frame images (symlinked)
    β”‚   β”‚   β”œβ”€β”€ sparse/
    β”‚   β”‚   β”‚   β”œβ”€β”€ cameras.txt
    β”‚   β”‚   β”‚   └── images.txt
    β”‚   β”‚   └── masks/             # foreground masks
    β”‚   └── ...
    └── dense_pcds/
        β”œβ”€β”€ 000000.ply             # dense point cloud at frame 0
        β”œβ”€β”€ 002000.ply
        └── ...

Note: Scenes are available in three temporal lengths β€” short (~300 frames), medium (~1200 frames), long (~3600 frames).

Custom Dataset

Custom multi-camera dataset. Run scripts/run_colmap_custom.sh once per scene to obtain camera parameters, then scripts/run_colmap_custom_all_frames.sh to generate per-frame sparse point clouds.

data/custom/
└── <scene>/                       # e.g. Makeup, RX0_251029_s01t01
    β”œβ”€β”€ frames/                    # (or images/)
    β”‚   β”œβ”€β”€ cam01/
    β”‚   β”‚   β”œβ”€β”€ 000001.jpg
    β”‚   β”‚   β”œβ”€β”€ 000002.jpg
    β”‚   β”‚   └── ...
    β”‚   β”œβ”€β”€ cam02/
    β”‚   └── ...
    β”œβ”€β”€ cameras.txt                # COLMAP camera intrinsics (generated once)
    β”œβ”€β”€ images.txt                 # COLMAP camera extrinsics (generated once)
    β”œβ”€β”€ points3D.txt               # Sparse 3D points from frame 0
    β”œβ”€β”€ pcds/
    β”‚   β”œβ”€β”€ frame_000001.ply       # Per-frame sparse point clouds
    β”‚   β”œβ”€β”€ frame_000002.ply
    β”‚   └── ...
    └── colmap_frame0/             # Working directory from run_colmap_custom.sh
        └── ...                    # (can be deleted after cameras.txt is generated)

COLMAP preparation steps for Custom dataset:

# Step 1: Run full SfM on the first frame to get camera parameters
bash scripts/run_colmap_custom.sh

# Step 2: Triangulate sparse point clouds for all frames
bash scripts/run_colmap_custom_all_frames.sh
Other Supported Datasets (HyperNeRF, Dycheck, DyNeRF)

HyperNeRF

Download from the HyperNeRF dataset page.

data/hypernerf/
└── <scene>/                       # e.g. 3dprinter, chickchicken
    β”œβ”€β”€ camera/
    β”‚   β”œβ”€β”€ <frame_id>.json        # per-frame camera parameters
    β”‚   └── ...
    β”œβ”€β”€ rgb/
    β”‚   β”œβ”€β”€ 1x/
    β”‚   β”‚   β”œβ”€β”€ <frame_id>.png
    β”‚   β”‚   └── ...
    β”‚   └── 2x/                    # half resolution
    β”œβ”€β”€ colmap/
    β”‚   β”œβ”€β”€ sparse/
    β”‚   └── dense/
    β”œβ”€β”€ dataset.json
    └── points.npy

Dycheck (iPhone)

Download from the Dycheck dataset page.

data/dycheck/
└── <scene>/                       # e.g. apple, block, spin
    β”œβ”€β”€ camera/
    β”‚   β”œβ”€β”€ <frame_id>.json
    β”‚   └── ...
    β”œβ”€β”€ rgb/
    β”‚   β”œβ”€β”€ 1x/
    β”‚   └── 2x/
    β”œβ”€β”€ depth/
    β”‚   β”œβ”€β”€ 1x/
    β”‚   └── 2x/
    β”œβ”€β”€ colmap/
    β”‚   β”œβ”€β”€ sparse/
    β”‚   └── dense/
    └── dataset.json

Note: Dycheck uses masked metrics (mPSNR, mSSIM, mLPIPS) as reported in the paper. Refer to Dycheck's evaluation modules for masked evaluation.

DyNeRF

Download from the Neural 3D Video dataset page.

data/dynerf/
└── <scene>/                       # e.g. flame_steak, coffee_martini
    β”œβ”€β”€ cam00/
    β”‚   └── images/
    β”‚       β”œβ”€β”€ 0000.png
    β”‚       β”œβ”€β”€ 0001.png
    β”‚       └── ...
    β”œβ”€β”€ cam01/
    β”œβ”€β”€ ...
    └── colmap/
        β”œβ”€β”€ sparse/
        └── dense/

Training & Rendering

Pre-written run scripts are located in run_scripts/. Each script interactively prompts for options.

SelfCapLR

cd run_scripts
bash run_selfcap.sh

Example session:

Enter the GPU ID (default: 0): 0
Enter the port (default: 5000): 5000
Enter the config number (default: 1.0): 1.0

Select the scene to run:
  [bike_1]   0: short  1: medium  2: long
  [bike_2]   3: short  4: medium  5: long
  [corgi]    6: short  7: medium  8: long
  [yoga]     9: short  10: medium 11: long
  [dance]    12: short 13: medium 14: long
  [all]      short_all: 15  medium_all: 16  long_all: 17

Enter your choice (default: 0): 6
Skip training? (rendering only) [y/n, default: n]: n
Fine-tuning? [y/n, default: n]: n

This will train on corgi_short and then render train/test/interpolation views automatically.

Custom Dataset

cd run_scripts
bash run_custom.sh

Example session:

Enter the GPU ID (default: 0): 0
Enter the port (default: 5000): 5000
Enter the config number (default: 1.0): 1.0
Enter the scene name: {your_scene_name}
  (e.g. /path/to/MoRel/data/custom/{your_scene_name})
Enter the scene data path: /path/to/MoRel/data/custom/{your_scene_name}
Skip training? (rendering only) [y/n, default: n]: n
Fine-tuning? [y/n, default: n]: n

Manual Commands

You can also run each step individually:

# Training
PYTHONPATH='.' CUDA_VISIBLE_DEVICES=0 python train.py \
    -s data/selfcap/bike_short \
    --port 5000 \
    --expname "selfcap_1.0/bike_short" \
    --configs arguments/selfcap/config_1.0.py

# Rendering
PYTHONPATH='.' CUDA_VISIBLE_DEVICES=0 python render.py \
    --model_path "output/selfcap_1.0/bike_short" \
    --configs arguments/selfcap/config_1.0.py \
    --render_frame_end 300 \
    --streaming_video \
    --skip_test --skip_interpolation

# Evaluation
PYTHONPATH='.' CUDA_VISIBLE_DEVICES=0 python metrics.py \
    --model_path "output/selfcap_1.0/bike_short"

# Aggregate metrics across scenes
python collect_metric.py \
    --output_path "output/selfcap_1.0" \
    --dataset selfcap

Configuration

Configs are located in arguments/<dataset>/. The default configuration for all datasets is config_1.0.py.

To experiment with different hyperparameters, simply create a new config file (e.g., config_2.0.py) in the same folder and specify the version number when running the script:

Enter the config number (default: 1.0): 2.0

To override parameters for a specific scene only, create a file named <scene_name>.py in the same folder β€” only the parameters defined in it will overwrite the base config.


Results

Please visit our project page for video demos, qualitative comparisons, and quantitative results.


Acknowledgement

This source code is built upon prior excellent works (3DGS, 4DGS, Scaffold-GS). We sincerely appreciate the authors for their outstanding contributions.

We also sincerely thank EasyVolcap, Long Volumetric Video, and FreeTimeGS for providing the excellent raw dataset that made our long-range video experiments possible.


Citation

@InProceedings{kwak2026morel,
  title={MoRel: Long-Range Flicker-Free 4D Motion Modeling via Anchor Relay-based Bidirectional Blending with Hierarchical Densification},
  author={Sangwoon Kwak and Weeyoung Kwon and Jun Young Jeong and Geonho Kim and Won-Sik Cheong and Jihyong Oh},
  booktitle={Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR)},
  year={2026},
}

⭐ Star History

Star History Chart

About

[CVPR 2026 πŸ…Highlight] Official repository of MoRel

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors