# particulate **Repository Path**: zxmh/particulate ## Basic Information - **Project Name**: particulate - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-01-26 - **Last Updated**: 2026-01-26 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Particulate: Feed-Forward 3D Object Articulation
 ## 🌟 Overview Particulate is a feed-forward approach that, given a single static 3D mesh of an everyday object, directly infers **all** attributes of the underlying articulated structure, including its 3D parts, kinematic structure, and motion constraints. - **Ultra-fast Inference**: our model recovers a fully articulated 3D object with a single forward pass in ~10 seconds. - **SOTA Performance**: our model significantly outperforms prior methods on the task of 3D articulation estimation. - **GenAI Compatible**: our model can also accurately infer the articulated structure of AI-generated 3D assets, enabling full-fledged generation of articulated assets from images or texts when combined with an off-the-shelf 3D generator. ## 🔧 Installation Our implementation is tested on pytorch==2.4.0 with cuda 12.4 on Ubuntu 22.04. ```bash conda create -n particulate python=3.10 conda activate particulate pip install -r requirements.txt ``` ## 🚀 Inference To use our model to predict the articulated structure of a custom 3D model (alternatively, you can try our [demo](https://huggingface.co/spaces/rayli/particulate) on HuggingFace without local setup): ```bash python infer.py --input_mesh ./hunyuan3d-examples/foldingchair.glb ``` The script will automatically download the pre-trained checkpoint from Huggingface. Extra arguments: - `up_dir`: The up direction of the input mesh. Our model is trained on 3D models with up direction +Z. To achieve optimal result, it is important to make sure the input mesh follow the same convention. The script will automatically rotate the input model to be +Z up with this argument. You can use the visualization in the [demo](https://huggingface.co/spaces/rayli/particulate) to determine the up direction. - `num_points`: The number of points to be sampled as input to the network. Note that we uniformly sample 50% of points and sample the remaining 50% from *sharp* edges. Please make sure the number of uniform points is larger than the number of faces in the input mesh. - `min_part_confidence`: Increasing this value will merge parts that have low confidence scores to other parts. Consider increasing this value if the prediction is over segmented. - `no_strict`: By default, the prediction will be post-processed to ensure that each articulated part is a union of different connected components in the original mesh (i.e., no connected components are split across parts). If the input mesh does **not** have clean connected components, please specify `--no_strict`. ## 💾 Data Preprocessing Please refer to [DATA.md](https://github.com/RuiningLi/particulate/blob/main/DATA.md). ## 🔎 Evaluation To perform quantitative evaluation with our proposed protocol, during inference, enable `--eval` flag to save the results: ```bash python infer.py --input_mesh /path/to/an/asset/in/the/evaluation/set.obj --eval --output_dir /output/path/for/infer/asset_name/ ``` This will save a `pred.obj` and a `pred.npz` under `$output_dir/eval`. Run inference for all assets. Then, use the `cache_gt.py` script under `particulate/data` to convert all the preprocessed ground-truth assets(refer to [DATA.md](https://github.com/RuiningLi/particulate/blob/main/DATA.md)) to the same format, serve as ground truth for later evaluation: ```bash python -m particulate.data.cache_gt --root_dir /path/to/directory/of/preprocessed/assets/ --output_dir /path/to/save/cached/ground/truths/ ``` With the GT and predicted files ready, we can obtain the evaluation results by: ```bash python evaluate.py --gt_dir /directory/of/all/preprocessed/gt/file/ --result_dir /directory/of/all/prediction/ --output_dir /directory/of/evaluation/output/ ``` Where: - **`--gt_dir`**: directory produced by `python -m particulate.data.cache_gt ...` containing cached GT `.npz` files named `