HairDeck: tarjetas de pelo y huesos elásticos desde una imagen
HairDeck genera tarjetas de pelo estilizadas como un conjunto a partir de una sola imagen, añade las cadenas de huesos elásticos que las animan y exporta avatares GLB o VRM.
El pelo es la parte de un personaje 3D que los pipelines de imagen a 3D suelen equivocar con más frecuencia. La reconstrucción de hebras produce un peinado realista que es pesado de renderizar, y la reconstrucción de malla produce una única masa fusionada que el artista no puede volver a peinar, reestilizar ni animar. Los peinados de tarjetas son los que realmente entrega la producción estilizada, y se hacen a mano, cinta a cinta.
HairDeck trata el peinado como lo que es para un artista: un conjunto no ordenado de primitivas. Cada tarjeta de pelo es un único token, y un transformer de difusión de conjuntos elimina el ruido de todas las tarjetas a la vez, de modo que el modelo nunca tiene que decidir en qué orden viene el pelo. El resultado conserva tarjetas individuales con UVs por tarjeta, además de las cadenas de huesos elásticos que las hacen moverse.
El pipeline: tokens de tarjetas de pelo, difusión de conjuntos condicionada por imagen o por nube de puntos, y tarjetas generadas con cadenas de huesos elásticos.
Tarjetas como conjunto
El único generador previo de tarjetas de pelo estilizadas, CHARM, decodifica un peinado de forma autorregresiva como una larga secuencia de puntos de control. Eso hace que el orden de la secuencia importe, y un error al principio de la secuencia se propaga por el resto del pelo.
HairDeck lo invierte. Un VAE de tarjetas codifica cada tarjeta en un token, el transformer de conjuntos los observa todos a la vez, y el VAE de tarjetas decodifica cada token de vuelta a geometría con sus propias coordenadas UV. Las tarjetas se condicionan con una imagen de forma predeterminada, o con una nube de puntos mediante un cuarto modelo publicado.
Los huesos elásticos vienen con el pelo
La geometría por sí sola no es un recurso. Un peinado de tarjetas en un motor de juego o en un avatar VRM solo parece vivo porque los huesos elásticos tiran de cada tarjeta con un poco de física, y esas cadenas normalmente se construyen a mano y se pintan sus pesos después de terminar la malla.
Un modelo de difusión de cadenas las genera directamente, condicionado por los tokens de las tarjetas, de modo que la exportación incluye el skinning además de la geometría. Entra una imagen y lo que sale es un peinado que se balancea.
Un fotograma de la demo del proyecto: tarjetas generadas sobre el cuerpo del avatar proporcionado.
El vídeo de demostración del proyecto: una imagen de entrada, cuatro variaciones generadas y la vista previa del giro de cabeza en VRM.
Qué se publica
| Modelo | Rol | Checkpoint |
|---|---|---|
| DiT de imagen | Genera tokens de tarjetas condicionados por una imagen | ckpt/image_model/model.safetensors |
| VAE de tarjetas | Decodifica el latente de un token de tarjeta en geometría de tarjeta | ckpt/card_vae/model.safetensors |
| DiT de cadenas | Genera cadenas de huesos elásticos condicionadas por los tokens de las tarjetas | ckpt/chain_model/model.safetensors |
| DiT de nube de puntos | Genera tokens de tarjetas condicionados por una nube de puntos | ckpt/pointcloud_model/model.safetensors |
La ruta de imagen ejecuta el DiT de imagen, el VAE de tarjetas y el DiT de cadenas. El modelo de nube de puntos se usa en la ruta de generación y evaluación con nube de puntos. El repositorio también incluye las estadísticas de normalización, el marco canónico de la cabeza, un avatar de plantilla de VRoid Studio para la exportación a VRM y 100 casos de prueba con su geometría de tarjetas original, de modo que la evaluación puede reproducirse sin el conjunto de entrenamiento.
La inferencia necesita Linux x86-64, Python 3.12 y una GPU NVIDIA CUDA, probada con PyTorch 2.8 y CUDA 12.8. La pila de preprocesamiento es más pesada que los modelos: SAM 3 y DINOv3 ViT-L/16 son descargas con acceso restringido que requieren aceptar sus licencias, BiRefNet-matting se encarga del recorte, y la exportación a VRM maneja Blender 4.2 LTS con el complemento VRM, que el script de configuración puede descargar por sí solo. La ruta de VRM sigue siendo un pipeline de Python y Blender, no un nodo personalizado de ComfyUI.
Un solo comando genera de una a cuatro variaciones, y --no-chains descarta el modelo de huesos elásticos cuando solo se quieren las tarjetas:
python scripts/image_to_hair.py character.png --out results/my_character --n 4
python -m hairdeck.vrm.export results/my_character/character 0Cifras del artículo
Sobre el propio conjunto de prueba de CHARM, HairDeck reporta una distancia de Chamfer un 44% menor y más de la mitad del error de orientación de tarjetas, mientras se ejecuta 33 veces más rápido. A partir de imágenes individuales, los autores reportan que supera a CHARM, a los pipelines de imagen a 3D y a los métodos basados en hebras, que es la comparación que importa para cualquiera que le pase un personaje generado en lugar de uno renderizado.
Disponibilidad
- hyz317/HairDeck en Hugging Face: cuatro checkpoints, datos de apoyo, 100 casos de prueba, Apache-2.0
- hyz317/HairDeck en GitHub: código de inferencia, demo local, evaluación y entrenamiento, actualmente la única ruta compatible
- Una demo en Space alojada que genera pelo y exporta VRM desde el navegador
- No hay integración oficial de ComfyUI. Un paquete de la comunidad muy reciente, FengLairh/ComfyUI-HairDeck, envuelve los mismos checkpoints en tres nodos (cargar, generar, guardar) que se ejecutan dentro del propio proceso de Python de ComfyUI y preparan un Blender portátil para la exportación a VRM; apareció el 1 de noviembre y no se ha validado aquí
Comentarios
Inicia sesión con GitHub para unirte a la conversación.