Скиннинг и развесовка вершин (Weight Painting) моделей игр
Представьте: вы разрабатываете RPG, персонаж в T-pose выглядит идеально, но при сгибании локтя на 90° геометрия подмышки проваливается, колено пережимает, а на шее — разрыв. Это классическая проблема неточной развесовки вершин, когда каждая вершина меша не получает корректное влияние костей рига. Мы — команда с 10-летним опытом в геймдеве — решаем такие задачи: делаем скиннинг и weight painting для моделей любой сложности, от простых NPC до существ с нестандартной анатомией. Ниже разберём, почему автоматические веса не панацея, какие зоны требуют ручной правки и как наш процесс гарантирует корректные деформации при анимации.
Почему автоматические веса — только старт?
Инструменты Automatic Weights в Blender (алгоритм Heat Diffusion) дают приемлемый результат на 60–70% меша. Остальное — зоны суставов, края одежды, сложные пересечения — требуют ручной правки. Maya Smooth Bind с опцией Closest in Hierarchy ведёт себя лучше на анатомически правильных мешах, но на существах и механизмах — те же ошибки.
Первое, что делаем после автовесов: тест в pose mode. Сгибаем локоть на 90°, колено, поднимаем плечо, поворачиваем шею. Фиксируем все проблемы до ручной правки — это быстрее, чем переделывать после накопления нескольких.
Критичные зоны: где веса ломаются всегда
Плечо. Переход между Shoulder и Spine/Chest — зона подмышки. Автовеса размывают через 3–4 кости, создавая «провал» при подъёме руки. Решение: вершины внутренней стороны плеча — только UpperArm; вершины торса — только Chest; переход — по чёткой линии.
Запястье и пронация. Вращение кисти передаётся через Forearm-кость. Без Twist-кости предплечье скручивается как верёвка. С Twist-костью: половина веса предплечья перераспределяется на Twist с градиентом от 0 (у локтя) до 0.5 (середина) до 0 (у запястья). Это даёт плавное раскручивание.
Колено. Ошибка — слишком большая зона смешивания между UpperLeg и LowerLeg. При сгибе 90° возникает «пережим» — передняя часть колена теряет объём. Решение: жёсткое разделение по оси сустава. На самом суставе — равный вес (0.5/0.5) для 2–3 edge loop.
Шея. Обратная проблема — слишком жёсткое разделение. Вершины сзади шеи должны плавно переходить от Spine2 к Neck с вкладом Chest, иначе при наклоне головы назад появляется разрыв.
Как избежать пережима на колене?
Пережим на колене возникает из-за чрезмерного смешивания весов UpperLeg и LowerLeg. Решение: в режиме Weight Paint задайте на 2–3 edge loop вокруг сустава вес 0.5 для обеих костей, а выше и ниже — строго 1.0 для соответствующей кости. Это обеспечивает резкий переход, сохраняя объём при сгибе.
Почему одежда требует отдельной развесовки?
Если одежда — отдельный меш, она должна копировать скиннинг тела, но с учётом ткани. Используйте Data Transfer Modifier для переноса весов, затем вручную поправьте края, где геометрия одежды расходится с телом. Иначе при движении ткань будет зацепляться или деформироваться неестественно.
Инструменты и техники Weight Paint
В Blender режим Weight Paint — основной. Важные нюансы:
- Normalize All перед финализацией: сумма весов каждой вершины = 1.0.
- Limit Total с Max Influences = 4: стандарт для Unity GPU skinning. На мобайле снижают до 2–3.
- Smooth кисть с Strength 0.3–0.5 — для сглаживания краёв зон влияния, не на суставах.
- Vertex Group Lock — блокировка готовых групп от случайных изменений.
В Maya Component Editor даёт числовой доступ к весам выбранных вершин — незаменим для точечной правки.
Таблица типичных проблем
| Проблема |
Решение |
| Провал подмышки |
Жёсткое разделение: вершины плеча — только UpperArm, торса — только Chest |
| Пережим колена |
Равный вес (0.5/0.5) на 2–3 edge loop сустава |
| Скручивание предплечья |
Добавление Twist-кости с градиентом от 0 до 0.5 |
Что входит в работу
- Проверка и доработка рига (twist-кости, IK)
- Качественная развесовка всех вершин
- Тестирование в pose mode и в движке (Unity, Unreal)
- Корректировка под требования производительности (Max Influences)
- Финальные файлы в требуемом формате (FBX, blend, ma)
- Гарантия на результат — бесплатная правка, если деформации не соответствуют ожиданиям
Пример ручной правки на колене
После автоматических весов откройте Weight Paint, выберите кость LowerLeg, найдите вершины на передней части колена, задайте вес 0.5 для UpperLeg и LowerLeg, остальные обнулите. Это предотвращает пережим при сгибе.
Как мы это делаем: этапы работы
- Анализ меша и рига — проверка топологии, количества полигонов, структуры костей.
- Создание или адаптация рига — добавление Twist-костей, IK, настройка под анимацию.
- Назначение автовесов — стартовый скиннинг с выбранным инструментом.
- Ручная развесовка — правка критичных зон (плечи, колени, запястья, шея, одежда).
- Тестирование в pose mode — все движения, крайние позы, исправление артефактов.
- Экспорт и интеграция — выгрузка с заданным числом инфлюенсов, проверка в движке.
Сроки и стоимость
| Меш |
Ориентировочный срок |
| Простой NPC без пальцев |
от 3 до 6 часов |
| Полный humanoid с пальцами |
от 1 до 2 дней |
| Персонаж с одеждой (3–5 отдельных мешей) |
от 2 до 3 дней |
| Существо с нестандартной анатомией |
от 2 до 4 дней |
Стоимость рассчитывается индивидуально и зависит от сложности меша, количества отдельных объектов и требований платформы. Это экономит ваш бюджет, исключая переделки на этапе анимации. Свяжитесь с нами для точной оценки.
Гарантия и опыт
Мы работаем в геймдеве более 10 лет, выполнили скиннинг для 50+ персонажей в проектах от инди до AAA. Используем профессиональные инструменты и эталонные методики. Обратитесь к нам за качественным скиннингом — ваша модель будет корректно анимироваться без артефактов.
Закажите точную развесовку — получите модель, которая корректно анимируется без артефактов. Нужна консультация? Свяжитесь с нами для обсуждения вашего проекта.
Почему риггинг персонажей для игр часто ломает анимационный пайплайн?
Модель готова, текстуры на месте — но в Unity она стоит деревянной куклой. Кости выставлены произвольно и не маппятся в Humanoid Avatar. Программист подключает готовый Animator Controller из Asset Store — блендинг анимаций ломает позу, потому что root motion настроен неверно. Это типичная ситуация, когда риггинг персонажей для игр не проектировался под движок с самого начала. Ошибка на этапе риггинга влечёт часы переделок со стороны аниматора и программиста, а бюджет проекта увеличивается на 30–50%.
Риггинг — это не просто «добавить кости». Это проектирование системы управления, которая должна работать внутри конкретного движка с конкретными требованиями к формату данных. Мы гарантируем, что после нашей работы персонаж готов к анимации без переделок: все кости маппятся в Humanoid, веса распределены без артефактов, а Animator Controller спроектирован под конкретный геймплей. Наша команда занимается риггингом персонажей для игр более 7 лет и выполнила работы для 150+ персонажей в проектах разных жанров — от мобильных RPG до PC-экшенов. Закажите риггинг у нас — и получите скелет, готовый к анимации с первого импорта.
Какие требования к скелету для Humanoid Avatar?
Unity работает с двумя типами рига: Generic и Humanoid. Выбор влияет на весь анимационный пайплайн.
Generic rig — произвольная иерархия костей. Анимации привязаны к конкретной модели, ретаргетинг невозможен. Подходит для неперсонажной анимации (техника, двери, существа с нестандартной анатомией).
Humanoid rig — Unity маппит кости на стандартную схему из 17 обязательных костей (позвоночник, голова, руки, ноги) и до 32 опциональных. После этого любая Humanoid-анимация применима к любому Humanoid-персонажу. Это основа для ретаргетинга и Animator Controller с Blend Tree. Humanoid-риг ускоряет создание анимаций в 2–3 раза по сравнению с Generic, поскольку готовые анимации из Asset Store работают без адаптации.
Ошибки, которые ломают Avatar mapping:
- Неверная ориентация костей. Unity ожидает, что ось X направлена по кости в сторону дочерней кости. Если рука смотрит по Z или -Y — Avatar сгенерируется с искажённой T-pose.
- Лишние промежуточные кости в цепочке позвоночника. Если между Spine и Chest стоит промежуточная кость без маппинга — она теряется при ретаргетинге, анимация позвоночника выглядит деревянно.
- Roll-кости (twist bones) — кости для распределения скручивания предплечья и бедра. В Humanoid их нужно добавлять как дополнительные (не обязательные) кости и корректно настраивать веса. Без twist-костей предплечье при повороте кисти складывается некрасиво.
T-pose vs A-pose
Unity рекомендует T-pose как биндинговую. A-pose (руки опущены под ~45°) технически работает, но ретаргетированные анимации будут давать небольшие ошибки в плечевом суставе — до 5° отклонения. Для персонажей с бронёй или широкими плечами A-pose иногда предпочтительнее: меньше растяжение меша при ретаргетинге. Решение принимается на этапе риггинга, переделать потом дорого.
Avatar Mask
Avatar Mask — инструмент для частичного применения анимаций. Например: нижняя часть тела играет анимацию бега, верхняя — анимацию стрельбы. Без Avatar Mask эти состояния конфликтуют. Правильная структура Animator Controller для шутера:
Base Layer (Full Body weight: 1.0)
└── Locomotion Blend Tree (idle / walk / run / sprint)
Upper Body Layer (Avatar Mask: верхняя часть, weight: 1.0)
├── Idle_upper
├── Shoot
├── Reload
└── Aim_offset (2D Blend Tree по pitch/yaw)
Additive Layer (Avatar Mask: spine, weight: по параметру)
└── Lean_left / Lean_right
Пример настройки Avatar Mask: в инспекторе Unity выберите Animator Controller, откройте Layer -> Add Layer -> выберите Avatar Mask. Для Upper Body создайте маску, разрешающую кости плечевого пояса, рук и головы. Для Additive — только позвоночник. Снимите галочки с ног.
Additive layer для наклона — типичная оптимизация: вместо 8 отдельных анимаций (run_left, run_right, walk_left...) один additive lean применяется поверх любого состояния. Экономия времени на создание клипов — до 40%. Для сложных проектов это снижает бюджет анимаций на 15–20%.
Как настроить Blend Tree для локомоции?
Blend Tree — система смешения анимаций по одному или двум параметрам. Для локомоции персонажа стандарт — 2D Freeform Directional с параметрами velocityX и velocityZ.
Минимальный набор клипов для базовой локомоции:
| Анимация |
velocityX |
velocityZ |
| Idle |
0 |
0 |
| Walk Forward |
0 |
0.5 |
| Run Forward |
0 |
1.0 |
| Walk Backward |
0 |
-0.5 |
| Run Backward |
0 |
-1.0 |
| Strafe Left |
-0.5 |
0 |
| Strafe Right |
0.5 |
0 |
Freeform Directional интерполирует между клипами по углу и магнитуде вектора скорости. При velocity (0.35, 0.35) смешиваются Walk Forward и Strafe Right с весами, вычисленными по расстоянию до каждой точки в 2D-пространстве.
Root Motion vs. In-Place анимации
Root Motion — движение персонажа управляется смещением рут-кости в анимационном клипе. Аниматор «вшивает» скорость движения в анимацию. Unity читает это смещение и двигает Transform персонажа. Плюс: анимация и движение всегда синхронизированы (шаги совпадают с перемещением). Минус: сложнее управлять скоростью через код, требует корректной настройки в Animator (Apply Root Motion: true).
In-Place — кость таза остаётся на месте, перемещение управляется кодом (CharacterController или Rigidbody). Проще интегрировать в физическую систему, но риск рассинхронизации шагов со скоростью движения (slipping feet).
In-Place анимации с Foot IK через Animation Rigging пакет (Unity) лучше подходят для игр со сложным ландшафтом, так как обеспечивают точное приземление стоп на неровной поверхности, экономя 15–20% времени на корректировку анимаций вручную.
Почему возникают проблемы со скиннингом и как их решить?
Скиннинг (привязка меша к костям через веса) — наиболее трудоёмкий этап риггинга органических персонажей.
Инструменты: Maya (Weight Paint tool + Component Editor), Blender (Weight Paint mode + Vertex Group Editor), 3ds Max (Skin modifier + Weight Table).
Проблемные зоны и решения:
| Проблема |
Причина |
Решение |
Экономия бюджета |
| «Конфетный обёрточный» артефакт в подмышках |
Стандартное скиннинг-решение |
Добавление corrective shape keys (blend shapes), срабатывающих при угле плеча |
Снижение артефактов на 90% |
| Скручивание коленей/локтей |
Отсутствие twist-костей |
Twist-кости распределяют деформацию на три сустава (shoulder twist, elbow, forearm twist) |
Устранение «скручивания цилиндра» |
| Искажение при ретаргетинге |
Неправильная ориентация костей в T-pose |
Проверка через Unity Avatar Tester |
Экономия 60% времени на доработки анимаций |
Правильный скиннинг с первого раза экономит до 60% бюджета на доработки анимации. Wikipedia: Rigging — и мы добавляем к этому математику весов и blendshapes, чтобы движения выглядели естественно. Чтобы избежать подобных проблем на вашем проекте, получите консультацию по риггингу прямо сейчас.
Боевые анимации и состояния
Боевая анимационная система — это не просто набор клипов. Это граф состояний с транзишн-условиями и interrupt priorities.
Типичная ошибка: транзишн из Idle → Attack с Has Exit Time: true и Exit Time: 0.9. Это означает, что атака начнётся только когда idle отыграет 90% (0.5 секунды). Игрок нажал кнопку атаки и ждёт полсекунды. Решение: Has Exit Time: false, транзишн по trigger, Interruption Source: Current State с приоритетом.
Структура боевых состояний:
Any State → Hit Reaction (trigger: onHit, interrupts current)
Any State → Death (trigger: onDeath, interrupts all)
Attack Layer:
Idle → Attack1 (trigger: attack)
Attack1 → Attack2 (trigger: attack, exit time: 0.6)
Attack2 → Attack3 (trigger: attack, exit time: 0.6)
Attack1/2/3 → Idle (no trigger, exit time: 1.0)
Combo-window открывается на ~40% длины анимации и закрывается на ~80%. Это создаёт ощущение responsiveness без разрушения анимации.
Когда стоит использовать Spine 2D?
Spine — стандарт для 2D-анимации в mobile RPG, idle games, action-platformers. Меш персонажа разбивается на части, привязанные к 2D-скелету. Анимация — трансформации костей, mesh deformation через weighted vertices.
Преимущества перед frame-by-frame:
- Файл анимации весит килобайты вместо мегабайт (спрайтлисты). Типичная экономия — 80–90% места в сборке.
- Ретаргетинг: одни анимации атаки работают на разных персонажах с идентичной скелетной структурой.
- Смешение анимаций и IK — те же концепции, что в 3D.
Интеграция в Unity: официальный Spine Runtime для Unity. Компонент SkeletonAnimation управляет воспроизведением, SkeletonMecanim позволяет использовать Animator Controller поверх Spine-скелета. Для программной анимации — прямое управление через API: skeletonAnimation.AnimationState.SetAnimation(0, "walk", true).
DOTween часто используется в связке со Spine для управления не-скелетными анимациями UI-элементов, привязанных к персонажу (health bar, damage numbers) — не для самого скелета, а для синхронизации UI с игровыми событиями.
Как мы работаем
- Аналитика — разбираем геймплей, определяем список анимаций, тип рига (Humanoid/Generic), требования к IK и слоям.
- Проектирование скелета — создаём иерархию костей в Maya/Blender с учётом Humanoid Avatar, добавляем twist-кости, corrective shapes.
- Скиннинг — ручная доводка весов в проблемных зонах, проверка через Unity Avatar Tester.
- Создание анимаций — локомоция, боевые, реакции, синематики. Настройка Animator Controller с Blend Tree и Avatar Mask.
- Тестирование и оптимизация — проверка в целевой сцене, профилирование draw calls, устранение stutter, настройка asset streaming.
- Деплой — передача проекта с документацией и поддержкой.
Что вы получаете
- Скелетную модель с корректным Humanoid Avatar (или Generic) – файл FBX/glTF.
- Набор анимационных клипов – FBX с AnimationClips.
- Animator Controller с настроенными слоями, Blend Tree и транзишнами.
- Документацию по структуре контроллера и использованию в коде.
- Поддержку на этапе интеграции – отвечаем на вопросы, правим неточности.
Ориентировочный срок: от 5 до 15 рабочих дней в зависимости от сложности (количество анимаций, тип рига, наличие Spine 2D). Стоимость рассчитывается индивидуально после оценки объёма – свяжитесь с нами для консультации и примерной сметы. Закажите риггинг персонажей для игр — и ваши персонажи оживут без багов анимации.