Инструменты1 сентября 2026 г., 13:46 МСК🤖 Auto

SkinTokens.cpp: Авто-риггинг 3D-моделей на CPU/Vulkan через GGML

LocalAI выпустила C++23-порт модели SkinTokens для автоматической генерации скелетов и весов кожи (skin weights) в GLB-файлах. Решение работает на CPU и Vulkan, используя архитектуру Qwen3 и GGML.

Баннер новости 6490

Суть проекта: 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 ↗