ОБНОВЛЕНИЕ: этот репозиторий устарел. Используйте Meshfinity или официальный репозиторий TripoSR, если вам просто нужно создавать текстурированные сетки. Содержимое этого репозитория останется онлайн на тот случай, если вам понадобится изменить сгенерированную геометрию сетки перед запеканием текстуры, но многим пользователям эта функция не понадобится.
TripoSR — отличная модель с открытым исходным кодом для вывода данных о трехмерной форме и текстуре из двухмерных сеток. Как и многие недавние модели на основе машинного обучения для генеративной 3D-графики, TripoSR использует объемное представление NeRF (поле нейронного излучения) для своих 3D-данных, в отличие от традиционной полигональной сетки. Репозиторий TripoSR включает код для преобразования сгенерированного NeRF в сетку с использованием алгоритма Marching Cubes, но сохраняет цветовые данные в цветах вершин вместо текстур, что сильно ограничивает разрешение и предотвращает дальнейшие манипуляции с геометрией (например, упрощение сетки) без разрушения цветовых данных.
TripoSR Bake делит процесс экспорта сетки на две части. В 01-mesh.py
аппроксимация сетки извлекается с помощью Marching Cubes и записывается в .obj
(как и в исходном репозитории TripoSR), однако он также сохраняет файл .pkl
содержащий прогноз NeRF на основе вывода модели TripoSR. Затем файл .obj
можно редактировать вручную (например, сглаживать или упрощать), при условии сохранения границ сетки (т. е. не масштабировать/поворачивать/перемещать сетку в целом). После редактирования сетки скрипт 02-texture.py
используется для создания UV-атласа сетки и запекания данных NeRF на эту UV-карту. Используя этот метод, даже низкополигональная сетка может содержать детали цвета исходного вывода NeRF с высоким разрешением. Имейте в виду, что качество текстуры будет ухудшаться по мере того, как вершины сетки будут деформироваться дальше от исходного объема сетки. Как обычно, результаты будут различаться в зависимости от входного изображения, качества сгенерированной сетки, фильтров/редактирований, примененных перед текстурированием сетки, и эффективности упакованного UV-атласа.
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
Для полного объяснения доступных опций запустите python 01-mesh.py --help
и 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