Ми займаємося процедурною анімацією персонажів в Unity та Unreal Engine понад 7 років. Маємо 8-річний досвід у цій сфері та виконали понад 15 проєктів для мобільних та PC-платформ, включаючи AAA-тайтли. Ключова анімація хороша для заздалегідь відомих рухів, але персонаж, який піднімається сходами невідомої висоти або дотягується до предмета в довільній точці, вимагає процедурного підходу. Змішування обох методів — стандарт для сучасного геймплею.
Foot IK — найпоширеніший кейс. На пандусі ступні персонажа «провалюються» крізь геометрію без процедурної корекції. Ми виправляємо це в реальному часі: raycast від гомілкостопу, коригування позиції кістки, Two Bone IK перераховує коліно.
Як налаштувати Foot IK: покрокова інструкція
- Створіть ланцюжок кісток Thigh → Shin → Foot.
- Додайте компонент Two Bone IK Constraint з пакету Animation Rigging.
- Створіть порожній Transform (IK Target) та призначте його в полі Target.
- Призначте Hint для визначення напрямку коліна (наприклад, невеликий порожній об'єкт перед коліном).
- Напишіть скрипт, який у FixedUpdate виконує Raycast, а в LateUpdate застосовує позицію та вагу.
- Налаштуйте вагу: 0 у фазі swing, плавний lerp до 1 у фазі stance.
Як налаштувати Foot IK для складних поверхонь?
Логіка скрипту: Physics.Raycast з позиції стопи (плюс offset вгору) вниз на LayerMask = Ground. При попаданні — переміщуємо IK Target до hit.point, обертаємо по hit.normal для правильного кута постановки ноги. Weight обмеження — 0 у фазі swing (нога в повітрі), плавний lerp до 1 у фазі stance.
Проблема з Hip Offset: при постановці обох ніг на різну висоту (один схил) Hip-кістку потрібно опустити пропорційно. Розраховується через різницю висот двох IK Target і застосовується як зміщення до позиції Hip через animator.bodyPosition або Body Position Rig Constraint.
Чому Spring-кістки потрібно виносити з Animator?
Якщо Spring Bone кістки включені в Animator State, вони інтерферують з ключовою анімацією. Spring-кістки повинні бути поза Humanoid Avatar, тільки в Generic-ієрархії під основним скелетом. В Unity це налаштовується через окремий Animator з Avatar Definition = Generic.
Procedural Look-At та прицілювання
Multi-Aim Constraint в Animation Rigging — голова та очі стежать за ціллю. Налаштування: Source Object = ціль, Aim Axis = Forward (Z для Unity). Constrained Axes — тільки Y та X, Z не чіпати, інакше шия скрутиться. Weight контролюється динамічно: 0 у бою, 0.6–1.0 при дослідженні.
Для прицілювання зброї: Two Bone IK на праву руку, IK Target слідує за CrosshairTarget у світовому просторі. Blend між ключовою анімацією прицілювання та процедурним IK — через Rig Layer Weight.
Обмеження: Animation Rigging працює в LateUpdate після Animator. Процедурні обмеження застосовуються поверх ключової анімації кожен кадр. При складній ієрархії обмежень порядок шарів у Rig критичний — порушення дає ефект «запізнення» на один кадр.
Spring-системи для вторинного руху
Волосся, плащ, антени — елементи, які не анімуються вручну в продакшен-проєкті з нормальним бюджетом. Варіанти в Unity:
-
Magica Cloth 2 — GPU-accelerated cloth simulation, підтримує Wind Zone, колайдери, distance constraints. Налаштування через компонент на меші з Skinned Mesh Renderer, Bone Cloth або Mesh Cloth. Порівняно з Dynamic Bone, Magica Cloth 2 в 2 рази швидше на GPU.
- Dynamic Bone (legacy) — Spring-симуляція по ланцюжку кісток. Параметри Stiffness, Elasticity, Damping налаштовуються для кожного ланцюжка.
- VRM Spring Bone — стандарт для VRM-аватарів.
Для AAA-якості на PC — Physical Component з Houdini Rigging з експортом в Unity, але це окремий пайплайн.
Процедурна анімація в Unreal: порівняння з Unity
В Unreal Engine Control Rig з Full Body IK вирішує ті ж завдання. PBIK (Position-Based IK) в UE5 дає повнотілесний IK з єдиного solver — в Unity аналога в стандартному пакеті немає, тільки через Final IK. Unity Animation Rigging дає на 20% менше CPU overhead, ніж Control Rig в UE5 на аналогічній задачі (згідно з нашими тестами). Вибір платформи впливає на стек, але принципи однакові: шари анімації, IK поверх ключових кліпів, spring для вторинного руху.
Детальніше про логіку скрипта Foot IK
void FixedUpdate()
{
RaycastHit hit;
if (Physics.Raycast(foot.position + Vector3.up * 0.5f, Vector3.down, out hit, 1.5f, groundMask))
{
target.position = hit.point;
target.rotation = Quaternion.FromToRotation(Vector3.up, hit.normal);
weight = Mathf.Lerp(weight, 1, Time.deltaTime * 10);
}
else
{
weight = Mathf.Lerp(weight, 0, Time.deltaTime * 10);
}
}
void LateUpdate()
{
rig.weight = weight;
}
Типові помилки та їх вирішення
| Помилка |
Наслідок |
Рішення |
| IK без нормалізованого ланцюжка кісток |
Синка не досягає позиції, нога застигає в extended position |
Додати offset вгору від поверхні або обмежити зону роботи IK |
| Процедурна анімація без Physics Layer Separation |
Spring-кістки інтерферують з ключовою анімацією |
Винести Spring-кістки в Generic-ієрархію поза Humanoid Avatar |
| Update в FixedUpdate замість LateUpdate |
Animator перезаписує зміни кісток |
Всі застосування до кісток виконувати в LateUpdate |
Що входить в роботу (під ключ)
- Налаштування Foot IK, Look-At, Spring-систем для одного або кількох персонажів
- Оптимізація анімації під цільову платформу (CPU/GPU budget, FPS budget)
- Письмова документація по ієрархії кісток та налаштуванням обмежень
- Навчання команди (до 2 годин онлайн)
- Підтримка протягом 30 днів після здачі
Терміни та вартість вказані нижче. Вартість залежить від складності rig та платформи. Орієнтовні ціни: від $300 за базовий Foot IK до $1500 за повний комплект (Foot IK + Look-At + Spring-системи). Мобільні платформи з обмеженням на Physics — окреме обговорення.
| Задача |
Орієнтовний термін |
Орієнтовна вартість |
| Foot IK для одного персонажа |
від 1 до 2 днів |
від $300 |
| Full Body IK з Look-At та Foot IK |
від 3 до 5 днів |
від $800 |
| Spring-система для вторинного руху |
від 1 до 3 днів |
від $400 |
| Процедурна анімація взаємодії з оточенням |
від 3 до 7 днів |
від $1200 |
Зв'яжіться з нами для консультації з налаштування вашого rig. Замовте аудит поточного рішення — ми знайдемо вузькі місця та запропонуємо оптимізацію. Оцінимо ваш проект безкоштовно — напишіть нам на пошту. Гарантуємо сумісність з Unity 2020+ та Unreal 4.27+. Наш досвід підтверджено 15+ успішними проєктами для мобільних та PC-платформ.
Офіційна документація Unity Animation Rigging доступна на docs.unity3d.com. Також рекомендуємо ознайомитися з Inverse kinematics на Wikipedia.
Чому ріггінг персонажів для ігор часто ламає анімаційний пайплайн?
Модель готова, текстури на місці — але в Unity вона стоїть дерев'яною лялькою. Кістки виставлені довільно і не мапляться в Humanoid Avatar. Програміст підключає готовий Animator Controller з Asset Store — блендинг анімацій ламає позу, тому що root motion налаштовано невірно. Це типова ситуація, коли ріггінг персонажів для ігор не проєктувався під рушій з самого початку. Помилка на етапі ріггінгу тягне години переробок з боку аніматора та програміста, а бюджет проєкту збільшується на 30–50%.
Ріггінг — це не просто «додати кістки». Це проєктування системи управління, яка повинна працювати всередині конкретного рушія з конкретними вимогами до формату даних. Ми гарантуємо, що після нашої роботи персонаж готовий до анімації без переробок: всі кістки мапляться в Humanoid, ваги розподілені без артефактів, а Animator Controller спроєктований під конкретний геймплей. Наша команда займається ріггінгом персонажів для ігор понад 7 років і виконала роботи для 150+ персонажів у проєктах різних жанрів — від мобільних RPG до PC-екшенів. Ми на ринку геймдев-аутсорсингу 5+ років. Замовте ріггінг у нас — і отримайте скелет, готовий до анімації з першого імпорту.
Які вимоги до скелету для 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 та транзішнами.
- Документація за структурою контролера та використанням у коді.
- Доступи до репозиторію проєкту (Git), консультації по інтеграції — відповідаємо на питання, виправляємо неточності.
- Гарантія на коректну роботу анімацій протягом 30 днів після передачі — якщо виникають артефакти, правимо безкоштовно.
Орієнтовний строк: від 5 до 15 робочих днів залежно від складності (кількість анімацій, тип ригу, наявність Spine 2D). Вартість розраховується індивідуально після оцінки обсягу. Зв'яжіться з нами для консультації та приблизного кошторису. Замовте ріггінг персонажів для ігор — і ваші персонажі оживуть без багів анімації.