Fancy123
[CVPR2025]Fancy123: One Image to High-Quality 3D Mesh Generation via Plug-and-Play Deformation
Install / Use
/learn @YuQiao0303/Fancy123README
Fancy123
This is the official repository for the CVPR2025 paper: ''Fancy123: One Image to High-Quality 3D Mesh Generation via Plug-and-Play Deformation'' by Qiao Yu, Xianzhi Li, Yuan Tang, Xu Han, Long Hu, Yixue Hao, and Min Chen.
Fancy123 generates a high-quality textured 3D mesh given a single RGB image:
https://github.com/user-attachments/assets/470f1244-197a-472a-98d6-599775638ac7
Fancy123's core idea is to utilize 2D image deformation to address the multiview inconsistency issue, and 3D mesh deformation to address the low fidelity issue:
https://github.com/user-attachments/assets/6700ac0d-7331-4097-8cf3-3a3e7ede6b70
🎉 News
- 2025.07.21: Code Released! 🌟
- 2025.02.27: Fancy123 is accepted by CVPR2025!🎊 We currently plan to release code in July 2025.
🛠️Install & Model Download
Please refer to scripts/install.md.
✅Training
Fancy123 works during inference and is training-free!
🎬Inference
First, put your images under `examples', then run InstantMesh to get an initial mesh:
python run_init.py
You'll see generated multiview images in outputs/instant-mesh-large/images and initial meshes in outputs/instant-mesh-large/meshes.
Then, run Fancy123's enhancement steps:
python main_fancy123_refine.py
You'll see results in outputs/instant-mesh-large/fancy123_meshes. You can use tools like MeshLab or Blender to visualize the final result named `final_mesh.obj'.
Tips for better results
- Check
unproject_wo_2D_deform.obj: if its geometry seems bad, try settinggeo_refine=Falseinmain_fancy123_refine.pyL105. - if
2D_deform_deformed.objseems ok but3D_deformed_mesh.objlooks smaller or shrunk, you can try settinglap_weightsmaller or even to 0 inconfigs/instantmesh.yaml. We found that a larger laplacian weight makes the mesh shrink. - if
2D_deform_deformed.objseems ok but3D_deformed_mesh.objlooks bad, it may be that no suitable camera parameters are found. If your input image is almost 0-elevation, you can try settinginput_all_0_elevationto True inconfigs/instantmesh.yaml. In this way we don't try to find the best camera parameters but use the default settings. - If something seems wrong with the texture projecting, try
use_vertex_wise_NBF: Falseinconfigs/instantmesh.yaml. If you still cannot get a good result, try other random seeds, or leave an issue so that I can see if there's anything that I can help.
🤝Acknowledgement
We have intensively borrowed code from the following repositories. Many thanks to the authors for sharing their code.
📝Citation
If you find Fancy123 helpful, please cite our paper:
@InProceedings{Yu_2025_CVPR,
author = {Yu, Qiao and Li, Xianzhi and Tang, Yuan and Han, Xu and Hu, Long and Hao, Yixue and Chen, Min},
title = {Fancy123: One Image to High-Quality 3D Mesh Generation via Plug-and-Play Deformation},
booktitle = {Proceedings of the Computer Vision and Pattern Recognition Conference (CVPR)},
month = {June},
year = {2025},
pages = {595-604}
}
