HairDeck: карточки волос и spring-кости из одного фото
HairDeck генерирует стилизованные карточки волос как единый набор из одного изображения, добавляет цепочки spring-костей, которые их анимируют, и экспортирует аватары GLB или VRM.
Волосы это та часть 3D-персонажа, которую конвейеры image-to-3D воспроизводят неправильнее всего. Реконструкция прядей даёт реалистичную причёску, которую тяжело рендерить, а реконструкция сетки даёт один слитый ком, который художник не может перечесать, изменить по стилю или анимировать. В стилизованном продакшене реально используется причёска из карточек, и её делают вручную, ленту за лентой.
HairDeck трактует причёску так, как её видит художник: как неупорядоченный набор примитивов. Каждая карточка волос это один токен, а set diffusion transformer денойзит все карточки вместе, поэтому модели никогда не приходится решать, в каком порядке идут волосы. В результате сохраняются отдельные карточки с собственными UV, а также цепочки spring-костей, которые приводят их в движение.
Пайплайн: токены карточек волос, set diffusion с обусловливанием изображением или облаком точек, и сгенерированные карточки с цепочками spring-костей.
Карточки как набор
Единственный предыдущий генератор стилизованных карточек волос, CHARM, декодирует причёску авторегрессивно как одну длинную последовательность контрольных точек. Из-за этого порядок последовательности важен, и ошибка в её начале распространяется на остальные волосы.
HairDeck делает наоборот. Card VAE кодирует каждую карточку в токен, set transformer смотрит на все токены сразу, а Card VAE декодирует каждый токен обратно в геометрию с собственными UV-координатами. По умолчанию карточки обусловлены изображением, либо облаком точек через четвёртую выпущенную модель.
Spring-кости идут вместе с волосами
Геометрия сама по себе ещё не ассет. Причёска из карточек в игровом движке или в аватаре VRM выглядит живой только потому, что spring-кости тянут каждую карточку с небольшой физикой, а эти цепочки обычно строят вручную и раскрашивают веса уже после того, как сетка готова.
Модель диффузии цепочек генерирует их напрямую, с обусловливанием на токены карточек, поэтому экспорт несёт в себе не только геометрию, но и скиннинг. На вход подаётся одно изображение, а на выходе получается причёска, которая качается.
Кадр из демо проекта: сгенерированные карточки на предоставленном теле аватара.
Демо-видео проекта: одно входное изображение, четыре сгенерированных варианта и предпросмотр поворота головы в VRM.
Что поставляется
| Модель | Роль | Чекпойнт |
|---|---|---|
| Image DiT | Генерирует токены карточек с обусловливанием на изображение | ckpt/image_model/model.safetensors |
| Card VAE | Декодирует латентный вектор токена карточки в геометрию карточки | ckpt/card_vae/model.safetensors |
| Chain DiT | Генерирует цепочки spring-костей с обусловливанием на токены карточек | ckpt/chain_model/model.safetensors |
| Point-cloud DiT | Генерирует токены карточек с обусловливанием на облако точек | ckpt/pointcloud_model/model.safetensors |
Путь по изображению задействует Image DiT, Card VAE и Chain DiT. Модель для облака точек используется в пути генерации и оценки по облаку точек. Репозиторий также поставляется со статистиками нормализации, канонической системой координат головы, шаблонным аватаром VRoid Studio для экспорта в VRM и 100 тестовыми примерами с их оригинальной геометрией карточек, так что оценку можно воспроизвести без обучающего набора.
Для вывода требуется Linux x86-64, Python 3.12 и один GPU NVIDIA CUDA, тестировалось с PyTorch 2.8 и CUDA 12.8. Стек предобработки тяжелее самих моделей: SAM 3 и DINOv3 ViT-L/16 это загрузки с ограниченным доступом, требующие принятия лицензий, BiRefNet-matting выполняет вырезание, а экспорт в VRM управляет Blender 4.2 LTS с аддоном VRM, который скрипт установки может скачать самостоятельно. Путь VRM по-прежнему остаётся пайплайном Python и Blender, а не пользовательской нодой ComfyUI.
Одна команда генерирует от одного до четырёх вариантов, а --no-chains отключает модель spring-костей, когда нужны только карточки:
python scripts/image_to_hair.py character.png --out results/my_character --n 4
python -m hairdeck.vrm.export results/my_character/character 0Цифры из статьи
На собственном тестовом наборе CHARM HairDeck сообщает о на 44% меньшем расстоянии Chamfer и более чем вдвое меньшей ошибке ориентации карточек, работая при этом в 33 раза быстрее. По single image авторы сообщают о превосходстве над CHARM, конвейерами image-to-3D и методами на основе прядей, а это именно то сравнение, которое важно для всех, кто подаёт на вход сгенерированного персонажа, а не отрендеренного.
Доступность
- hyz317/HairDeck на Hugging Face: четыре чекпойнта, вспомогательные данные, 100 тестовых примеров, Apache-2.0
- hyz317/HairDeck на GitHub: код вывода, локального демо, оценки и обучения, на данный момент единственный поддерживаемый путь
- Размещённое демо Space, которое генерирует волосы и экспортирует VRM прямо из браузера
- Официальной интеграции с ComfyUI нет. Очень новый пакет от сообщества, FengLairh/ComfyUI-HairDeck, оборачивает те же чекпойнты в три ноды (загрузка, генерация, сохранение), которые работают внутри собственного процесса Python в ComfyUI и подготавливают портативный Blender для экспорта в VRM; он появился 1 ноября и здесь не проверялся
Комментарии
Войдите через GitHub, чтобы участвовать в обсуждении.