Настройка ограничений (Constraints) для костей в играх
Constraints — механизм, который управляет поведением кости в пространстве: куда она смотрит, за кем следует, в каких пределах может вращаться. Без грамотно настроенных Constraints риг либо требует постоянного ручного вмешательства аниматора, либо ломается при крайних позах.
Типы Constraints и где они нужны в игровом риге
Copy Rotation / Copy Transform — основа IK/FK switch-систем. Результирующая кость копирует трансформацию от IK или FK цепочки в зависимости от веса. Influence = 0 или 1 переключает режим; дробные значения дают плавный бленд. Критичная настройка: Space — Local или World. Для копирования вращения суставов — Local Space. Для позиционных ограничений с учётом родительской кости — Pose Space в Blender.
Stretch To / Maintain Volume — для конечностей, которые должны немного растягиваться при приближении IK Target к пределу длины цепочки. В игровых ригах используется осторожно: слишком сильный stretch выглядит неестественно, но небольшое значение (Rest Length + 5–10%) убирает жёсткое ощущение при крайних позах.
Damped Track / Track To — голова и глаза следят за целью. Damped Track плавнее, меньше артефактов при быстром движении цели. Track To точнее, но при определённых углах даёт gimbal flip. Для глаз — Copy Location на цель, ограничение вращения через Limit Rotation ±30° по X и Y.
Limit Rotation — ограничение диапазона вращения сустава. Обязательно для любого анатомически корректного рига: локоть не вращается назад, колено не гнётся вперёд. В Blender: Limit Rotation Constraint с включёнными осями и явными Min/Max. Пример: LeftElbow, Limit Y: -150° to 0°.
Floor Constraint — кость не опускается ниже заданного объекта. Используется для ступней при простой Foot IK без raycast: пята не проваливается сквозь плоскость пола. Менее гибко чем Animation Rigging IK, но значительно проще в настройке для мобильных проектов без Physics.
Copy Scale и Squash/Stretch для стилизованных персонажей
Для стилизованных игр с cartoon-деформациями Squash & Stretch реализуется через Copy Scale с инвертированием одной оси. При масштабировании кости по Y (растяжение) оси X и Z уменьшаются пропорционально для сохранения объёма. Формула: Scale.X = 1 / sqrt(Scale.Y).
В Blender это реализуется через Driver: 1 / sqrt(scale.y) на X и Z Scale целевой кости. Maintain Volume Constraint делает то же самое нативно без дополнительных костей. Для игрового экспорта: все Constraints нужно бейкировать в ключевые кадры перед экспортом в FBX — движок читает только трансформации костей, не Blender-специфичные Constraints.
Child Of Constraint и динамические родительские связи
Child Of позволяет кости временно стать дочерней для другого объекта. Применение: персонаж подбирает оружие — кость оружия становится дочерней для кости руки. Кладёт оружие — возвращается в мировое пространство или крепится к объекту окружения.
Важная тонкость: при включении Child Of нужно нажать Set Inverse — это сохраняет текущую мировую позицию кости при изменении родителя. Без Set Inverse кость телепортируется в локальное начало координат нового родителя.
Для экспорта в Unity: бейкируем анимацию с переключением пространств через NLA Editor → Bake Action с опцией Clear Constraints. Результирующий FBX содержит чистые World Space ключи без зависимости от Constraints.
Constraints в Unity Animation Rigging
Animation Rigging пакет реализует часть Blender/Maya Constraints как компоненты Unity:
-
Multi-Parent Constraint— аналог Child Of, с несколькими источниками и весами -
Multi-Aim Constraint— аналог Track To -
Multi-Rotation Constraint— аналог Copy Rotation -
Twist Correction— распределение вращения по Twist-костям, аналог Twist Deformer -
Override Transform— полное переопределение трансформации кости с весом бленда
Все компоненты работают в runtime и могут управляться через C# — это и делает их мощным инструментом. Twist Correction с TwistAxis = X и SourceObject = forearm даёт корректный Twist без дополнительных анимационных ключей. Достаточно одной Constraint-настройки на весь проект.
Типичные ошибки при настройке Constraints
Circular Dependency. Кость А через Constraint зависит от кости Б, которая через другой Constraint зависит от кости А. Blender и Maya обнаруживают это как Cyclic Dependency Warning и дают непредсказуемый результат. Решается перестройкой иерархии или использованием промежуточных Driver-переменных.
Constraint Stack Order. В Blender несколько Constraints на одной кости выполняются сверху вниз. Limit Rotation должен стоять последним — иначе другие Constraints могут вывести кость за лимит после ограничения. IK override всё нижестоящее — особенность, которую часто игнорируют.
World vs Local Space в Copy Rotation. Copy Rotation в World Space копирует абсолютные углы, что ломается при любом вращении родительской кости. Для передачи вращения внутри иерархии — Local Space или Pose Space.
Сроки
| Задача | Ориентировочный срок |
|---|---|
| Базовые Limit Rotation для humanoid | от 2 до 4 часов |
| IK/FK switch с Constraints | от 4 до 8 часов |
| Динамическое Space Switching | от 1 до 2 дней |
| Полная Constraint-система с Unity Animation Rigging | от 2 до 4 дней |
Стоимость рассчитывается индивидуально в зависимости от сложности рига и требований к анимационному пайплайну.





