MISE À JOUR : Ce référentiel est obsolète. Veuillez utiliser Meshfinity ou le dépôt officiel TripoSR si vous avez simplement besoin de générer des maillages texturés. Le contenu de ce dépôt restera en ligne au cas où vous auriez spécifiquement besoin de modifier la géométrie du maillage généré avant de cuire la texture - mais de nombreux utilisateurs n'auront pas besoin de cette fonctionnalité.
TripoSR est un excellent modèle open source pour déduire des données de forme et de texture 3D à partir de maillages 2D. Comme de nombreux modèles récents basés sur l'apprentissage automatique pour les graphiques 3D génératifs, TripoSR utilise une représentation volumétrique NeRF (champ de radiance neuronale) pour ses données 3D, par opposition à un maillage polygonal traditionnel. Le référentiel TripoSR inclut du code pour convertir son NeRF généré en maillage à l'aide de l'algorithme Marching Cubes, mais stocke les données de couleur dans des couleurs de sommet au lieu de textures, limitant considérablement la résolution et empêchant toute manipulation ultérieure de la géométrie (par exemple, simplification du maillage) sans détruire les données de couleur.
TripoSR Bake divise le processus d'exportation d'un maillage en deux parties. Dans 01-mesh.py
, une approximation du maillage est extraite à l'aide de Marching Cubes et écrite dans .obj
(comme dans le dépôt TripoSR original), mais elle enregistre également un fichier .pkl
contenant la prédiction NeRF de l'inférence du modèle TripoSR. Le fichier .obj
peut ensuite être édité manuellement (par exemple lissé ou simplifié), à condition que les limites du maillage soient préservées (c'est-à-dire ne pas mettre à l'échelle/faire pivoter/traduire le maillage dans son ensemble). Après l'édition du maillage, le script 02-texture.py
est utilisé pour générer un atlas UV pour le maillage et intégrer les données NeRF sur cette carte UV. Grâce à cette méthode, même un maillage low-poly peut contenir les détails de couleur haute résolution de la sortie NeRF originale. Gardez à l’esprit que la qualité de la texture diminuera à mesure que les sommets du maillage seront déformés plus loin du volume d’origine du maillage. Comme d'habitude, les résultats varient en fonction de l'image d'entrée, de la qualité du maillage généré, des filtres/modifications appliqués avant de texturer le maillage et de l'efficacité de l'atlas UV emballé.
git clone https://github.com/iffyloop/TripoSR-Bake.git
cd TripoSR-Bake
# TripoSR requires a real virtualenv environment,
# not the built-in venv that comes with Python
pip install virtualenv
python -m virtualenv venv
# Now we install dependencies for this repo
source venv/bin/activate # venvScriptsactivate.bat on Windows
pip install torch # For CUDA support, follow the instructions at https://pytorch.org/get-started/locally/
pip install -r requirements.txt
Pour une explication complète des options disponibles, veuillez exécuter python 01-mesh.py --help
et python 02-texture.py --help
.
# Generate Marching Cubes mesh
python 01-mesh.py --input input/chair.png --output-mesh output/chair.obj --output-scene-codes output/chair.pkl --no-remove-background --density-threshold 15.0 --marching-resolution 512 --marching-oversampling 1 --tsr-chunk-size 8192 --device cpu
# Bake texture
# Before this stage, you probably want to smooth and remesh the generated chair.obj mesh in MeshLab,
# then use that as the --input-mesh below instead of the raw Marching Cubes mesh.
# Editing the mesh is merely a suggestion, not a requirement. The original mesh can also be textured.
python 02-texture.py --input-mesh output/chair.obj --input-scene-codes output/chair.pkl --output-mesh output/chair-textured.obj --output-texture output/chair-textured.png --texture-resolution 1024 --texture-padding 2 --tsr-chunk-size 8192 --device cpu