### SPAGHETTI: Editing Implicit Shapes through Part Aware Generation
![](./assets/readme_resources/teaser-01.png)
### Installation
```
git clone https://github.com/amirhertz/spaghetti && cd spaghetti
conda env create -f environment.yml
conda activate spaghetti
```
Install [Pytorch](https://pytorch.org/). The installation during development and testing was pytorch==1.9.0 cudatoolkit=11.1
### Demo
- Download pre-trained models
```
python download_weights.py
```
- Run demo
```
python demo.py --model_name chairs_large --shape_dir samples
```
or
```
python demo.py --model_name airplanes --shape_dir samples
```
- User controls
- Select shapes from the collection on bottom.
- right click to select / deselect parts
- Click the pencil button will toggle between selection / deselection.
- Transform selected parts is similar to Blender short-keys.
Pressing 'G' / 'R', will start translation / rotation mode. Toggle axis by pressing 'X' / 'Y' / 'Z'. Press 'Esc' to cancel transform.
- Click the broom to reset.
### Adding shapes to demo
- From training data
```
python shape_inversion.py --model_name --source training --mesh_path --num_samples
```
- Random generation
```
python shape_inversion.py --model_name --source random --mesh_path --num_samples
```
- From existing watertight mesh:
```
python shape_inversion.py --model_name --mesh_path
```
For example, to add the provided sample chair to the exiting chairs in the demo:
```
python shape_inversion.py --model_name chairs_large --mesh_path ./assets/mesh/example.obj
```
### Training
Coming soon.