MCPcopy Index your code
hub / github.com/amap-cvlab/MV-Painter

github.com/amap-cvlab/MV-Painter @main

Chat with this repo
repository ↗ · DeepWiki ↗ · + Follow
547 symbols 1,795 edges 68 files 92 documented · 17% updated 11mo ago★ 2448 open issues
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

MVPainter

   

MVPainter is a fully open-source system for 3D texture generation, providing a comprehensive solution including data, models, and evaluation tools.

Pipeline

  • [ ] Release gradio demo.
  • [x] Release technical report.
  • [x] Release training code.
  • [x] Release data processing code.

✨Key Features

  • 🔓 Fully Open-Source Texture Generation Pipeline

  • 🧩 Compatible with Mainstream 3D Geometry Generation Methods

  • 🎨 High-Fidelity, Geometry- and Image-Aligned PBR Texture Generation

🔥 News

  • [2025-04-30] We have released our technical report!
  • [2025-04-30] We have released model weights, data processing, trainning, inference scripts.

🔧Installation

Installation guides can be found in INSTALL.md.

💡Infererence

Generate multi-view images

  1. Prepare the input images and glbs in /data/test/imgs and /data/test/glbs.

  2. Run the following command to infer: python infer_multiview.py --input_glb_dir ./data/test/glbs --input_img_dir ./data/test/imgs --output_dir ./outputs/test --geo_rotation 0

    Mesh generated from TripoSG, use --geo_rotation 0

    Mesh generated from Hunyuan-2, use --geo_rotation -90

    Mesh generated from TRELLIS,use --geo_rotation -90

    Mesh generated from Hi3dGen --geo_rotation -90

Extract PBR (Optional)

Extract PBR attributes from generated mul-view images.

python infer_pbr.py --mv_res_dir ./outputs/test

The extracted PBR maps will be saved in --mv_res_dir directory.

Painting

Run the following command to paint 3d model with multi-view generations:

python infer_paint.py --mv_res_dir ./outputs/test/mvpainter --output_dir ./results/test/mvpainter

If use PBR:

python infer_paint.py --mv_res_dir ./outputs/test/mvpainter --output_dir ./results/test/mvpainter --use_pbr

--mv_res_dir is the directory of the generated multi-view images.

🏋️Training

Multi-View Generation Model

Train UNet

python train.py --base=./configs/mvpainter-train-unet.yaml --gpus 0 --num_nodes 32 --logdir=./logs

Train controlnet

python train.py --base=./configs/mvpainter-train-controlnet.yaml --gpus 0 --num_nodes 32 --logdir=./logs

PBR Model

Our pbr model is improved based on IDArb. The specific improvements can be found in our technical report. Our training script is similar to IDArb:

accelerate launch --config_file configs/acc/8gpu.yaml train_pbr.py --config configs/train.yaml

📊Data Processing

Dataprocess guides can be found in here

📝Evaluation

Our human-aligned evaluation system can be found in here

Citation

If you found this repository helpful, please cite our report:

@article{shao2025mvpainter,
  title={MVPainter: Accurate and Detailed 3D Texture Generation via Multi-View Diffusion with Geometric Control},
  author={Shao, Mingqi and Xiong, Feng and Sun, Zhaoxu and Xu, Mu},
  journal={arXiv preprint arXiv:2505.12635},
  year={2025},
  url={https://arxiv.org/abs/2505.12635}
}

⭐️Acknowledgment

In this project we use parts of the implementations of the following works: - Hunyuan3D-1 - Hunyuan3D-2 - IDArb - MaterialAnything

We thank these work's contributors for open sourcing their research and exploration.

Core symbols most depended-on inside this repo

to
called by 117
MVPainter/mvpainter/differentiable_renderer/mesh_render.py
from_pretrained
called by 20
MVPainter/mvpainter/mvpainter_pipeline.py
to
called by 19
MVPainter/pbr/pipelines/pipeline_idarbdiffusion.py
save_image
called by 12
MVPainter/infer_pbr.py
raster_interpolate
called by 9
MVPainter/mvpainter/differentiable_renderer/mesh_render.py
fetch_seq
called by 7
MVPainter/mvpainter/custom_rasterizer/lib/custom_rasterizer_kernel/grid_neighbor.cpp
rank_zero_print
called by 6
MVPainter/train.py
zero_module
called by 6
MVPainter/mvpainter/controlnet.py

Shape

Function 252
Method 250
Class 45

Languages

Python95%
C++5%

Modules by API surface

MVPainter/mvpainter/mvpainter_pipeline.py41 symbols
MVPainter/mvpainter/differentiable_renderer/mesh_render.py36 symbols
data_process/blender_script.py30 symbols
MVPainter/evaluation/blender_render_eval.py27 symbols
MVPainter/mvpainter/controlnet.py26 symbols
MVPainter/scripts/blender_render_ortho.py24 symbols
MVPainter/pbr/data/mv_dataset_arbobjaverse.py22 symbols
MVPainter/mvpainter/model_unet.py21 symbols
MVPainter/mvpainter/model_controlnet.py21 symbols
MVPainter/src/data/mvpainter_dataset.py20 symbols
MVPainter/pbr/models/unet_dr2d_condition.py16 symbols
MVPainter/pbr/models/transformer_dr2d.py16 symbols

For agents

$ claude mcp add MV-Painter \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact