ATUALIZAÇÃO: Este repositório está obsoleto. Use o Meshfinity ou o repositório oficial TripoSR se você simplesmente precisar gerar malhas texturizadas. O conteúdo deste repositório permanecerá online caso você precise modificar especificamente a geometria da malha gerada antes de preparar a textura - mas muitos usuários não precisarão dessa funcionalidade.
TripoSR é um excelente modelo de código aberto para inferir dados de forma e textura 3D a partir de malhas 2D. Como muitos modelos recentes baseados em aprendizado de máquina para gráficos 3D generativos, o TripoSR usa uma representação volumétrica NeRF (campo de radiação neural) para seus dados 3D, em oposição a uma malha poligonal tradicional. O repositório TripoSR inclui código para converter seu NeRF gerado em uma malha usando o algoritmo Marching Cubes, mas armazena dados de cores em cores de vértices em vez de texturas, limitando severamente a resolução e evitando manipulação adicional da geometria (por exemplo, simplificação de malha) sem destruir os dados de cores.
TripoSR Bake divide o processo de exportação de uma malha em duas partes. Em 01-mesh.py
, uma aproximação da malha é extraída usando Marching Cubes e gravada em .obj
(como no repositório TripoSR original), mas também salva um arquivo .pkl
contendo a previsão NeRF da inferência do modelo TripoSR. O arquivo .obj
pode então ser editado manualmente (por exemplo, suavizado ou simplificado), desde que os limites da malha sejam preservados (ou seja, não dimensione/gire/traduza a malha como um todo). Após a edição da malha, o script 02-texture.py
é usado para gerar um atlas UV para a malha e preparar os dados NeRF neste mapa UV. Usando este método, mesmo uma malha de baixo polígono pode conter detalhes de cores de alta resolução da saída NeRF original. Tenha em mente que a qualidade da textura diminuirá à medida que os vértices da malha forem deformados, afastando-se do volume original da malha. Como de costume, os resultados irão variar dependendo da imagem de entrada, da qualidade da malha gerada, dos filtros/edições aplicados antes de texturizar a malha e da eficiência do atlas UV compactado.
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 uma explicação completa das opções disponíveis, execute python 01-mesh.py --help
e 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