2025-05-12 14:08:21 +08:00
2025-05-07 16:51:22 +08:00
2025-05-07 16:51:22 +08:00
2025-05-07 16:51:22 +08:00
2025-05-07 16:51:22 +08:00
2025-05-07 16:51:22 +08:00
2025-05-07 16:51:22 +08:00
2025-05-07 16:51:22 +08:00
2025-05-12 14:08:21 +08:00
2025-05-11 22:40:41 +08:00
2025-05-07 16:51:22 +08:00
2025-05-07 16:51:22 +08:00

PrimitiveAnything: Human-Crafted 3D Primitive Assembly Generation with Auto-Regressive Transformer

Jingwen Ye1*, Yuze He1,2*, Yanning Zhou1†, Yiqin Zhu1, Kaiwen Xiao1, Yong-Jin Liu2†, Wei Yang1, Xiao Han1†

1Tencent AIPD 2Tsinghua University

*Equal Contributions Corresponding Authors

🔥 Updates

[2025/05/07] test dataset, code, pretrained checkpoints and Gradio demo are released!

🔍 Table of Contents

⚙️ Deployment

Set up a Python environment and install the required packages:

conda create -n primitiveanything python=3.9 -y
conda activate primitiveanything

# Install torch, torchvision based on your machine configuration
pip install torch==2.1.0 torchvision==0.16.0 --index-url https://download.pytorch.org/whl/cu118

# Install other dependencies
pip install -r requirements.txt

Then download data and pretrained weights:

  1. Our Model Weights: Download from our 🤗 Hugging Face repository (download here) and place them in ./ckpt/.

  2. Michelangelos Point Cloud Encoder: Download weights from Michelangelos Hugging Face repo and save them to ./ckpt/.

  3. Demo and test data:

    Download from this Google Drive link, then decompress the files into ./data/; or you can download from our 🤗 Hugging Face datasets library:

from huggingface_hub import hf_hub_download, list_repo_files

# Get list of all files in repo
files = list_repo_files(repo_id="hyz317/PrimitiveAnything", repo_type="dataset")

# Download each file
for file in files:
    file_path = hf_hub_download(
        repo_id="hyz317/PrimitiveAnything",
        filename=file,
        repo_type="dataset",
        local_dir='./data'
    )

After downloading and organizing the files, your project directory should look like this:

- data/
    ├── basic_shapes_norm/
    ├── basic_shapes_norm_pc10000/
    ├── demo_glb/                   # Demo files in GLB format
    └── test_pc/                    # Test point cloud data
- ckpt/
    ├── mesh-transformer.ckpt.60.pt # Our model checkpoint
    └── shapevae-256.ckpt           # Michelangelo ShapeVAE checkpoint

🖥️ Run PrimitiveAnything

Demo

python demo.py --input ./data/demo_glb --log_path ./results/demo

Notes:

  • --input accepts either:
    • Any standard 3D file (GLB, OBJ, etc.)
    • A directory containing multiple 3D files
  • For optimal results with fine structures, we automatically apply marching cubes and dilation operations (which differs from testing and evaluation). This prevents quality degradation in thin areas.

Testing and Evaluation

# Autoregressive generation
python infer.py

# Sample point clouds from predictions  
python sample.py

# Calculate evaluation metrics
python eval.py

📝 Citation

If you find our work useful, please kindly cite:

@article{ye2025primitiveanything,
  title={PrimitiveAnything: Human-Crafted 3D Primitive Assembly Generation with Auto-Regressive Transformer},
  author={Ye, Jingwen and He, Yuze and Zhou, Yanning and Zhu, Yiqin and Xiao, Kaiwen and Liu, Yong-Jin and Yang, Wei and Han, Xiao},
  journal={arXiv preprint arXiv:2505.04622},
  year={2025}
}
Description
[SIGGRAPH 2025] PrimitiveAnything: Human-Crafted 3D Primitive Assembly Generation with Auto-Regressive Transformer
Readme GPL-3.0 1.4 MiB
Languages
Python 100%