CAT риг с небольшим колдунством.

Давненько я не захламлял интернеты. К модам сей текст никакого отношения не имеет. Речь пойдет о багах CAT-рига и примере его фикса.

Проблемма с CAT-ом вылезла не то чтобы неожиданно. Нет. Такое как раз и ожидалось рано или поздно. Пример:

На примере задняя лапа некого существа и ошибка САТ-рига при движеннии IK-цепочки из 3 сегментов (+1 конечный). Суть этого явления лежит в самых глубоких корнях САТ-а. В базовом контроллере вращения Euler XYZ. У меня был уже небольшой разбор нескольких ригов для анимации. В двух словах: врашение у Эйлера последовательно - повернуть на нужный угол в локальной системе координат по оси X, из новой позиции повернуть по оси Y и опять из новой позиции довернуть по оси Z. В результате такой акробатики углы поворота в Эйлере могут по ходу анимации зашкаливать за over9000 градусов в Track View.

Свою роль играет и длинна IK-цепочки. С двумя сегментами ошибок с щелчком костей как на примере практически нет (хотя сделать можно если постараться :). С тремя уже начинается геморой. И из-за Эйелера и из-за того, что кости не лежат в одной плоскости, а немного подвернуты по другим, не основным, осям сгиба. Почему так сделано? А Бдо их знает. Скорее всего отголоски былых времен, как коды MS-DOS остались в Windows XP. А еще ноги в этой бинд-позе стоят в FK-режиме. И при переключении в IK конечная кость цепочки (та что выделена на гифке) меняет свой угол и позицию. И еше больше ошибок со щелчком костей.

С этой ошибкой надо что-то было делать. Ведь неудобно. Первое и главное требование к решению задачи - простота. Как можно меньше зауми, которая развалится в самый неподходящий момент или начнет работать не так, как предполагается. Второе требование - интуитивность управления. Можно было пробейкивать через обычные думики, но это снова неудобно, утяжеляет анимацию и ее редактирование и наконец нужно двигать руками каждый раз. Третья задача - как можно меньше дополнительных элементов которые нужно анимировать. Четвертая по порядку, но пожалуй первая поважности - возможность загружать уже имеющуюся анимацию и чтоб корректирующие ногу элементы работали на ней без головной боли.

Саму идею я родил минут за 10, потом часа два доводил до ума. Чтоб понимать дальнейшее мое словоблудие нужно хотя бы в азах владеть максом.

Элементарное решение - сделать дополнительную цепочку костей и применить IK HI Solver на перые два сегмента. Сам IK хелпер привязывается к платформе ноги (ниже по тексту покажу), платформа эта IK эффектор ноги САТ-рига. Для ног создается автоматически при создании самой ноги. Может выглядеть как перекрестие осей или как прямоугольник. Не суть важно.

Отсюда первые два сегмента управляются инверсной кинематикой автоматически, а IK хелпер рулит вращением третьего сегмента. В принципе большего и не нужно, т.к. на IK хелпер можно бейкать позицию с третьей CAT-косточки из любой загруженной анимации и потом уже фиксить если нужно. А колено смотрит на родной CAT-вский хелпер ноги (в IK Solver Plane указывается таргет). Можно ли сказать о недостатках? Да. При создании новой анимации IK хелпер будет двигатся за платформой ноги, а поэтому третий сегмент цепочки будет сохранять свой угол относительно нее.

Можно сделать HI Solver на все три сегмента. Тогда вся IK цепочка будет двигатся автоматически. Но теряется управление над третьим сегментом, а без него никак.

Поехали...

Вот так выглядит база на которой будет произведена операция. А и В - платформы ног, C и D хелперы для IK указывающие направление куда должно быть обращено колено (они называются обычно UpVectorNode). Стандартные САТ-овские хелперы.

Для того, чтоб все дополнительные кости не входили в иерархию основного скелета нужно сделать хелпер-пустышку в координатах таза и прикрепить к нему через контроллеры Position Constraint и Orientation Constraint. А уже к этой пустышке линковать все остальное. Это делается чтоб все новые элементы были собраны компактно в Schematic View и их можно было бы быстро удалить перед передачей файлов заказчку.

К платформам тоже крепятся поинты. Первый через констрейны в точку пивота, второй линком к первому в точке где заканчивается IK ноги. Оси выравниваются в соответствии с костями, так проще.

Первая цепочка костей. Выравниваются по костям САТ-а. Перед назначением HI Solver на нее кости нужно подвернуть, первая градусов по 45 вниз, две следующие под углом 20 градусов друг к другу. По остальным, не главным, осям поворот должен быть ноль. Даже если оригинальные кости под небольшим углом. Делается это вот для чего. Если взять длинную пружину и начать ее сдавливать - она без стержня внутри изогнется. В то же время если ее растягивать, она растянется по совершенной прямой. Тут такой же принцип, хотя это в корне не так. Если будет достаточно большой угол между сегментами, то IK может начать поворачивать цепочку в ее основании, а не равномерно уменьшать угол между нужными костями. А вот если цепочка уже сложена, то HI Solver будет ее равномерно растягивать. Эта позиция при назначении как-то запоминается, потому что разное действие контроллера видно на глаз без всяких доказательств.

После установки HI Solver вернуть сами IK хелперы (IK Chain называются) в начальные позиции ног.

Это будет первая управляющая IK цепочка. Поверх нее нужно сделать точно такую же, выровненную по первой. Сгибать ноги уже не нужно, без этого работает. А да. Забыл совсем. Для IK хелперов указать в IK Solver Plane таргетом CAT хелперы UpVectorNode ног (на гифке выше, справа внизу, видно где это).

Для второй IK цепочки HI Solver сделать только на первые два сегмента.

Пока все идет не плохо. Следующие на очереди кости для третьего сегмента цепочки. Только они делаются в обратную сторону и на них тоже назначается HI Solver.

Крепятся они к поинтам на платформах. К к концам этих, обратных, костей линкуются IK хелперы от второй (фиолетофой) цепочки, те что на 2 сегмента. А IK хелперы от первой цепочки линкуются к поинтам на платформах. И последние IK хелперы от обратных костей линкуются на третий сегмент первой цепочки.

Мощно задвинул. Понимаю.

Теперь третий сегмент второй цепочки... =))) Ему на вращение нужно поставить контроллер Look At на поинт на платформе. А на самую конечную косточку кинуть Orientation Constraint с первого поинта платформы.

После всей этой работы в САТ нужно добавить Adjustment Layer +L, что означает локальный. И в нем кости ног через Orientation Constraint прилинковать ко второй фиолетофой цепочке. Не забывая, что нога должна быть включена в FK режим. После все кости кроме IK хелперов с обратных костей можно скрыть. И нужно, чтоб не мешались под рукой.

Получится вот это.

При этом основные управляющие элементы остаются за CAT-ом. Это его родные платформы и UpVectorNode указывающие направление колена. Дополнительный хелпер с третьей цепочки автоматически движется при помощи первой и второй и имеет возможность дополнительного управления. Его можно пробейкать с существующей анимации и профиксить рывки и щелчки. Нога находится в режиме FK, а работает как бы в IK. Ловкость рук и хауноу. Точнее ноухау.

После завершения работы слои в CAT-е запекаются в новый, Adjustment Layer +L удаляется, дополнительный мини-риг тоже удаляется и передается заказчику.

 

Термины мной использованные, которые может быть непонятны:

Щелчок костей - быстрый переворот костей в IK кинематики. Такое может быть по причине все того же Эйлера, в первом кадре угол достигает этак градусов трехсот пятидесяти в глобальных координатах, а в третьем кадре 370-и, но максимыч может вместо этого записать 370-360=10. И во втором кадре будет резкий переворот с 350 до 10. Если бы использовались кватернионы как в Biped там был бы небольшой поворот 370-350=20 градусов.

Бейкать - запекание анимации, когда в каждом кадре созается ключ Позиция/Вращение/Масштаб. Масштаб не обязателен, но просто так в нагрузку создается, так как с объекта А на объект В копируется вся матрица трансформации целиком.