UPDATE: Dieses Repository ist veraltet. Bitte verwenden Sie Meshfinity oder das offizielle TripoSR-Repo, wenn Sie lediglich texturierte Netze generieren müssen. Der Inhalt dieses Repos bleibt online, falls Sie die generierte Netzgeometrie vor dem Backen der Textur speziell ändern müssen – viele Benutzer werden diese Funktionalität jedoch nicht benötigen.
TripoSR ist ein hervorragendes Open-Source-Modell zum Ableiten von 3D-Form- und Texturdaten aus 2D-Netzen. Wie viele neuere, auf maschinellem Lernen basierende Modelle für generative 3D-Grafiken verwendet TripoSR für seine 3D-Daten eine volumetrische NeRF-Darstellung (Neural Radiance Field) im Gegensatz zu einem herkömmlichen Polygonnetz. Das TripoSR-Repository enthält Code zum Konvertieren seines generierten NeRF in ein Netz mithilfe des Marching Cubes-Algorithmus, speichert Farbdaten jedoch in Scheitelpunktfarben anstelle von Texturen, was die Auflösung erheblich einschränkt und eine weitere Manipulation der Geometrie (z. B. Netzvereinfachung) verhindert, ohne Farbdaten zu zerstören.
TripoSR Bake teilt den Prozess des Netzexports in zwei Teile. In 01-mesh.py
wird eine Näherung des Netzes mithilfe von Marching Cubes extrahiert und in .obj
geschrieben (wie im ursprünglichen TripoSR-Repo), es wird jedoch auch eine .pkl
Datei gespeichert, die die NeRF-Vorhersage aus der TripoSR-Modellinferenz enthält. Die .obj
Datei kann dann manuell bearbeitet werden (z. B. geglättet oder vereinfacht), solange die Grenzen des Netzes erhalten bleiben (dh das Netz als Ganzes nicht skaliert, gedreht oder verschoben wird). Nach der Netzbearbeitung wird das Skript 02-texture.py
verwendet, um einen UV-Atlas für das Netz zu generieren und die NeRF-Daten auf dieser UV-Karte zu backen. Mit dieser Methode kann sogar ein Low-Poly-Netz die hochauflösenden Farbdetails der ursprünglichen NeRF-Ausgabe enthalten. Beachten Sie, dass die Texturqualität abnimmt, wenn die Netzscheitelpunkte weiter vom ursprünglichen Netzvolumen entfernt verformt werden. Wie üblich variieren die Ergebnisse je nach Eingabebild, der Qualität des generierten Netzes, den vor der Texturierung des Netzes angewendeten Filtern/Bearbeitungen und der Effizienz des gepackten UV-Atlas.
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
Für eine vollständige Erläuterung der verfügbaren Optionen führen Sie bitte python 01-mesh.py --help
und python 02-texture.py --help
aus.
# 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