Home

Awesome

CharacterGen: Efficient 3D Character Generation from Single Images with Multi-View Pose Calibration

<a href="https://huggingface.co/spaces/VAST-AI/CharacterGen"><img src="https://img.shields.io/badge/%F0%9F%A4%97%20Gradio%20Demo-Huggingface-orange"></a>

This is the codebase of SIGGRAPH'24 (TOG) CharacterGen.

teaser

Quick Start

1. Prepare environment

Use python3.9 and then pip install -r requirements.txt

2. Run the script

Run the whole pipeline

python webui.py

This script will download the weight automatically. You can also use huggingface-cli to download the weight manually.

huggingface-cli download --resume-download zjpshadow/CharacterGen --include 2D_Stage/* --local-dir .
huggingface-cli download --resume-download zjpshadow/CharacterGen --include 3D_Stage/* --local-dir .

If you find mistakes on download, you can download all the reporitory and move to the right folder.

Only Run 2D Stage

cd 2D_Stage
python webui.py

Only Run 3D Stage

cd 3D_Stage
python webui.py

Get the Anime3D Dataset

Due to the policy, we cannot redistribute the raw data of VRM format 3D character. You can download the vroid dataset follow PAniC-3D instruction. And the you can render the script with blender or three-js with our released rendering script.

Blender

First, you should install Blender and the VRM addon for Blender.

The you can render the VRM and export the obj of VRM under some fbx animation.

blender -b --python render_script/blender/render.py importVrmPath importFbxPath outputFolder [is_apose]

The last input argument represents whether you use apose; if used, output apose; otherwise, output the action of any frame in the fbx.

three-vrm

Much quicker than blender VRM add-on.

Install Node.js first to use the npm environment.

cd render_script/three-js
npm install three @pixiv/three-vrm

If you want to render depth-map images of VRM, you should replace three-vrm with my version.

Fisrt, run the backend to catch the data from the frontend (default port is 17070), remember to change the folder path.

pip install fastapi uvicorn aiofiles pillow numpy
python up_backend.py

Second, run the frontend to render the images.

npm run dev

The open the website http://localhost:5173/, it use 2 threads to render the image, which costs about 1 day.

Our Result

Single Input Image2D Multi-View Images3D Character
<img alt="threestudio" src="./materials/videos/1.gif" width="100%">
<img alt="threestudio" src="./materials/videos/2.gif" width="100%">
<img alt="threestudio" src="./materials/videos/3.gif" width="100%">

Acknowledgements

This project is built upon Tune-A-Video and TripoSR. And the rendering scripts is build upon three-vrm and VRM-Addon-for-Blender. Thanks very much to many friends for their unselfish help with our work. We're extremely grateful to Yuanchen, Yangguang, and Yuan Liang for their guidance on code details and ideas. We thank all the authors for their great repos and help.

Citation

If you find our code or paper helps, please consider citing:

@article{peng2024charactergen,
  title   ={CharacterGen: Efficient 3D Character Generation from Single Images with Multi-View Pose Canonicalization}, 
  author  ={Hao-Yang Peng and Jia-Peng Zhang and Meng-Hao Guo and Yan-Pei Cao and Shi-Min Hu},
  journal ={ACM Transactions on Graphics (TOG)},
  year    ={2024},
  volume  ={43},
  number  ={4},
  doi     ={10.1145/3658217}
}