Суть проекта: AI для 3D-анимации
SkinTokens.cpp — это библиотека на C++23, портирующая модель SkinTokens / TokenRig на фреймворк GGML. Главная задача инструмента — автоматизация рутинного этапа в 3D-продакшене: привязки вершин сетки к костям скелета (skin weighting). Без точных весов движение скелета приводит к искажениям поверхности персонажа. Проект позволяет генерировать скелет и веса «с нуля» или переназначать веса для существующей анимации, выдавая на выходе стандартный skinned GLB-файл.
Технические детали и метрики точности
Модель использует стек Qwen3 (TokenRig policy), энкодер Michelangelo для сетки и декодер SkinVAE. Система обрабатывает 54 000 поверхностных точек, ограничивая запросы плотного декодера 16K вершин за один проход графа. Точность реализации проверена на эталонных PyTorch-моделях с использованием метрики относительной L2-нормы.
| Компонент / Режим | Backend | Метрика (Relative L2) | Примечание |
|---|---|---|---|
| Qwen Stack (полный) | CPU | 8.1e-6 | Высокая точность вычислений |
| Qwen Stack (полный) | Vulkan | 7.1e-4 (hidden state) 1.4e-3 (logits) |
Ускорение за счет GPU |
| Michelangelo Encoder | Vulkan | 6.5e-4 | Совпадение с F32 PyTorch референсом |
| SkinVAE Decoder | CPU | 3.6e-6 | 100% совпадение топ-4 костей для вершин |
| SkinVAE Decoder | Vulkan | 9.1e-4 | 99.96% совпадения топ-4 слотов |
Ключевые возможности
- Полный авто-риггинг (rig): Вход: статическая сетка (.glb). Выход: сетка + сгенерированный скелет + веса. Алгоритм предсказывает топологию скелета, хотя результаты наиболее стабильны на формах, близких к обучающей выборке.
- Переназначение весов (skin): Вход: сетка + готовый скелет. Алгоритм игнорирует старые веса и рассчитывает новые. Поддерживает режимы подгонки масштаба:
--fit global(универсальный),--fit articulated(экспериментальный, для гуманоидных цепей рук с использованием обратной кинематики). - Гибкость бэкендов: Поддержка CPU и Vulkan. Включить/выключить Vulkan можно через флаг
-DSKINTOKENS_ENABLE_VULKAN=OFFпри сборке или--device cpu/vulkanпри запуске. - Профилирование: Переменная окружения
SKINTOKENS_PROFILE=1выводит детальную статистику по времени预处理, передачи данных между хостом и устройством, и времени вычислений графов.
Как запустить
Для работы требуется C++23 компилятор, CMake 3.25+, Ninja и (опционально) Vulkan SDK. Модель весов доступна в формате GGUF (рекомендуется F16) через Hugging Face.
Пример команды для риггинга персонажа с использованием GPU:
./build/release/bin/skintokens-cli rig \
models/SkinTokens-GGUF/F16 \
character.glb character-rigged.glb \
--device vulkan
Проект позиционируется как инструмент для ускорения пайплайна анимации, позволяя художникам и разработчикам избегать ручной расстановки весов, особенно для сложных или нестандартных форм.
Источник: Github ↗
