ACTUALIZACIÓN: Este repositorio está en desuso. Utilice Meshfinity o el repositorio oficial de TripoSR si simplemente necesita generar mallas texturizadas. El contenido de este repositorio permanecerá en línea en caso de que necesite modificar específicamente la geometría de malla generada antes de hornear la textura, pero muchos usuarios no necesitarán esta funcionalidad.
TripoSR es un excelente modelo de código abierto para inferir datos de formas y texturas 3D a partir de mallas 2D. Al igual que muchos modelos recientes basados en aprendizaje automático para gráficos generativos 3D, TripoSR utiliza una representación volumétrica NeRF (campo de radiación neuronal) para sus datos 3D, a diferencia de una malla poligonal tradicional. El repositorio TripoSR incluye código para convertir su NeRF generado en una malla usando el algoritmo Marching Cubes, pero almacena datos de color en colores de vértice en lugar de texturas, lo que limita severamente la resolución y evita una mayor manipulación de la geometría (por ejemplo, simplificación de la malla) sin destruir los datos de color.
TripoSR Bake divide el proceso de exportar una malla en dos partes. En 01-mesh.py
, se extrae una aproximación de la malla usando Marching Cubes y se escribe en .obj
(como en el repositorio TripoSR original); sin embargo, también guarda un archivo .pkl
que contiene la predicción NeRF de la inferencia del modelo TripoSR. El archivo .obj
se puede editar manualmente (por ejemplo, suavizarlo o simplificarlo), siempre y cuando se conserven los límites de la malla (es decir, no escale, gire o traslade la malla en su conjunto). Después de editar la malla, el script 02-texture.py
se utiliza para generar un atlas UV para la malla y hornear los datos NeRF en este mapa UV. Con este método, incluso una malla de baja poli puede contener el detalle de color de alta resolución de la salida NeRF original. Tenga en cuenta que la calidad de la textura disminuirá a medida que los vértices de la malla se deformen alejándose del volumen original de la malla. Como es habitual, los resultados variarán dependiendo de la imagen de entrada, la calidad de la malla generada, los filtros/ediciones aplicados antes de texturizar la malla y la eficiencia del atlas UV empaquetado.
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
Para obtener una explicación completa de las opciones disponibles, ejecute python 01-mesh.py --help
y 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