Переключатель прямой/обратной кинематики (FK/IK)

Материал из Blender3D.

Перейти к: навигация, поиск

Автор: Lance Flavell
Перевод: Striver

Содержание

Введение

Существуют два метода для оснастки руки: Прямая Кинематика (FK) и Обратная Кинематика (IK). Каждый из них настраивается и является предпочтительным при различных обстоятельствах. Прямая Кинематика хороша для взмахов руками при перемещениях по большим окружностям, тогда как Обратная Кинематика лучше подходит для эффективного позиционирования руки. Цель этого урока в том, чтобы показать Вам, как сделать собственный переключатель, который позволит Вам использовать оба вида перемещения.

Предварительные сведения

Этот урок не для начинающих. Хотя я немного расскажу о том, что такое IK и FK, я ожидаю, что большинство читателей уже знают о них, и здесь они потому, что хотят узнать, как настроить переключатель, дающий возможность аниматору управлять персонажами обоими способами. Следовательно, я только кратко опишу различия IK и FK.

Читатели должны знать:

Рисунок 1. “Нормальная” рука была настроена с легким поворотом в локте.
Рисунок 1. “Нормальная” рука была настроена с легким поворотом в локте.
  • Различия между режимами (Режим Редактирования, Режим Объектов, Режим Позы)
  • Как изменять тип окна с помощью кнопки слева в заголовке каждого окна.
  • Как создавать новые кости арматуры, включая то, как использовать режим Зеркала, чтобы оснащать как левую, так и правую стороны одновременно, и как раскрашивать веса арматуры у меша.
  • Привязка к центру вращения (Pivot point) (напр. [SHIFT][S] >> Snap to cursor и т.п.)
  • Как управлять различными слоями, включая слои костей.
  • Как работает Центральная точка (большая оранжевая точка внутри каждого меш-объекта)
  • Как анимация по ключу работает на временной шкале.
  • IK не работает хорошо с очень прямыми руками. Я принимаю, что читатель знает, что обычная поза для оснастки - "T-поза", а при подготовке к IK, эта поза включает в себя немного изогнутые локти, как показано на Рисунке 1.

Что такое перемещение FK?

Рисунок 2. FK-перемещение руки вращает целую руку от плеча.
Рисунок 2. FK-перемещение руки вращает целую руку от плеча.

По умолчанию, оснастки имеют перемещения Прямой кинематики (или FK для краткости). Этот тип настройки означает, что кости соединены одна за другой в иерархии родитель-потомок, так что если Вы изгибаете локоть, целое предплечье переместится от локтевого шарнира вниз, вплоть до кончиков пальцев. Это как будто рука является негнущейся частью проволоки. Перемещение руки влияет на кости в направлении "вперёд" от плеча вниз, как видно на Рисунке 2.

Что такое перемещение IK?

Рисунок 3. IK движение руки от перемещаемой ладони.
Рисунок 3. IK движение руки от перемещаемой ладони.

Обратная Кинематика (или настройка IK), противоположна FK. В то время как FK означает управление перемещением от плеча вниз, IK принимает движение от конца руки, который определяет, как должна перемещаться вся рука.

Настройка IK подобна гибкой руке марионетки из ткани (где ладонь обычно прикреплена к палке, которую держит кукловод). Когда ладонь перемещается, рука изгибается так, чтобы это компенсировать, как показано на Рисунке 3.

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

Базовые кости руки и раскраска весов

Сначала настройте кости руки и тщательно раскрасьте их веса, чтобы рука меша персонажа изгибалась правильно, при перемещении костей руки режиме Позы. Личные предпочтения в сторону, этот урок предполагает, что начиная от кости shoulder_L (плечо), оснастка вашей руки будет состоять из следующих костей:

  • bicep_L
  • forearm_L
  • hand_L

Взгляните снова на Рисунок 1 для иллюстрации позиционирования этих костей.

Буква L присутствует в конце имен костей, поскольку это кости с левой стороны тела, и у Вас также должны быть противоположные кости с правой стороны с аналогичными именами, заканчивающимися на R (напр. shoulder_R). В основном в этом уроке Я ссылаюсь на кости левой стороны и верю, что Вы знаете, как применить аналогичные шаги для правой. Другие кости, которые я не упоминаю (как например, пальцы) - остаются за Вами.

Раскрасить веса необходимо перед настройкой переключателя IK/FK, так что сделайте это прежде, чем продолжить остальную часть урока. Постарайтесь избавиться от любых странных выпуклостей, которые могут появиться при изгибании руки. Для сохранения краткости этого урока я не буду рассказывать, как добиться реалистичных искривлений запястья, хотя такие настройки могут быть добавлены в то, что Вы собираетесь здесь делать.

Как IK / FK переключатель будет работать?

Как правило, обычно вы должны заранее решить, настроить оснастку руки для работы через Прямую Кинематику (FK) или Обратную Кинематику (IK), но не через обе сразу, поскольку Вы не можете иметь одновременно руку, ведомую концом плеча (FK), и также руку ведомую ладонью (IK). Одним из решений для этого парадокса является наличие переключателя IK/FK, как видно на Рисунке 4, который переключает тип перемещения руки, IK или FK, в любой момент.

Рисунок 4. Переключатель IK/FK.
Рисунок 4. Переключатель IK/FK.
Рисунок 5. Три пары рук.
Рисунок 5. Три пары рук.

По умолчанию, кости руки имеют FK перемещение в тот момент, когда Вы только войдёте в режим Позы.

В настройке, которую мы собираемся сделать, мы больше не будем анимировать руки непосредственно (аниматору будет только казаться, что мы это делаем). Как только Вы сделаете переключатель IK/FK, аниматор не будет непосредственно перемещать кости с раскрашенным весом. Взамен появится два дополнительных набора рук (всего получим три набора, как видно на Рисунке 5), и дополнительные два набора будут действовать в качестве контроллеров для использования аниматором. Один набор будет иметь перемещение FK, другой набор будет настроен на IK. Ролью переключателя будет сообщить "реальной" руке привязаться к любому из этих наборов, позволяя аниматору использовать оба типа перемещения.


Это почти концепция, но это действительно сердце техники этого урока, так что позвольте мне проиллюстрировать это как точки пули (bullet points ???). Наша окончательная настройка будет иметь:
  • Нормальный набор рук с раскрашенными весами для меша (руки, существующие в данный момент).
  • Дополнительный набор рук, настроенный для перемещения FK, но без прямого влияния на меш. Эти руки будут контроллером FK.
  • Другой дополнительный набор рук, настроенный для перемещения IK, но без прямого влияния на меш. Эти руки будут использоваться, как контроллеры IK.

Переключатель IK/FK, который заставляет "нормальные" руки соответствовать позе любой из двух других рук-контроллеров.

С этим размещением, всякий раз, когда переключатель IK/FK установлен на FK, "нормальные" руки, которые через раскраску веса влияют на меш-руки, становятся привязанными к рукам контроллера FK, и перемещение этих рук-контроллеров FK (аниматором) эффективно перемещает всю руку FK-способом. Наоборот, когда переключатель установлен в IK, тогда "нормальные" руки привязываются, следуя за руками контроллера IK, давая аниматору также использовать перемещения IK. Мы эффективно создаём иллюзию "нормальной" руки, выполняющей перемещение IK или FK по щелчку переключателя.

С учетом понимания указанного выше, и с наличием "реальной" руки с раскрашенными весами, пришло время для создания IK и FK контроллеров.

Создание руки контроллера FK

Если по умолчанию перемещение "реальной" руки настроено на FK, Вы можете просто продублировать существенные кости этой руки (bicep_L, forearm_L и hand_L), чтобы быстро создать кости контроллера FK.

Рисунок 6. Переключение на слой костей 2
Рисунок 6. Переключение на слой костей 2
  • Убедиться что поза руки находится в изначальном положении (к ней не приложено никаких перемещений). Это можно сделать посредством выбора всех костей в режиме Позы и выбрав меню Pose >> Clear Transform>> All
  • Перейти в режим Редактирования
  • Выбрать с [SHIFT] кости bicep_L, forearm_L, и hand_L (не пальцы)
Рисунок 7. Отключение у кости свойства “Deform”
Рисунок 7. Отключение у кости свойства “Deform”
  • С помощью [SHIFT][D] продублировать выбранные кости, но не отменять выбор (не производите нигде клик правой кнопкой мыши (ПКМ))
  • С выбранными продублированными костями нажмите [M], а затем клавишу с цифрой [2], чтобы послать их на слой костей 2
  • Теперь мы хотим перейти в слой костей 2. Эти слои отличаются от обычных слоёв 3D-сцены. Вы можете найти нужное место, перейдя на панель Object Data (когда выбрана кость арматуры, эта панель будет иметь сходство с фигуркой из палочек). Вы должны увидеть слои костей в области “Skeleton” непосредственно ниже, как видно на Рисунке 6.
  • Переименуйте продублированные кости, добавив буквы FK (напр., переименуйте копию кости bicep_L.000 в bicepFK_L). Не забудьте переименовать обе стороны (правая сторона должна иметь имена, заканчивающиеся на R.)

Когда кости руки продублированы таким образом, они наследуют родительские отношения (так что копия bicep - все еще является ребенком shoulder (плеча), которое не было продублировано), но они обычно теряют влияние весовой раскраски на меш. Это хорошо, поскольку мы не хотим, чтобы кости контроллера непосредственно влияли на меш. В качестве меры предосторожности, чтобы гарантировать, что они не влияют на меш, перейдите на вкладку Bone и с помощью ПКМ выбирайте каждую кость по очереди (одну за раз). Всякий раз снимайте галочку опции “Deform” внизу панели Bone, как показано на Рисунке 7.

Рисунок 8. Ограничение Copy Rotation
Рисунок 8. Ограничение Copy Rotation

Следующим шагом нужно сделать "нормальные" кости (с раскрашенными весами из первого слоя костей) привязанными к этим костям контроллера FK, чтобы они находились в соответствии с любой позой костей контроллера FK. Для этого Вы используете Ограничения костей, поскольку их можно позже включать/выключать по заказу, как нам и требуется.

Чтобы настроить ограничение Copy Rotation, связывающее вместе кости bicep_L и bicepFK_L:

Возвращайтесь к первому слою костей.

  • В режиме позы, выберите правой кнопкой кость bicep_L.
  • В панели Bone Constraints, нажмите кнопку “Add constraint” (добавить ограничение) и выберите добавление ограничения “Copy Rotation”.
  • В области “Target”, выберите Armature (или что-то другое, что является полным именем арматуры).
  • Когда Вы сделаете это, в новом поле “Bone” выберите BicepFK_L
  • В данное время, область “Space” переводится из позиции "World Space” в "World Space”. Это - вероятно хорошо, хотя если Вы привередливы, Вы могли бы изменить отношение, чтобы отразить “Pose Space” в “Pose Space”. Заметьте также, что все оси X, Y и Z задействованы в ограничении, это означает, что вращение охватывает все направления.
Рисунок 9.  Движок Влияния
Рисунок 9. Движок Влияния

В этот момент, свойства ограничения Copy Rotation должны иметь сходство с Рисунком 8.

Теперь, всякий раз, когда Вы вращаете кость bicepFK_L, кость bicep_L "нормальной” руки (на слое костей 1), копирует это движение. Сила ограничения может быть настроена посредством движка influence (влияние) внизу панели управления Copy Rotation (смотри Рисунок 9). Если Вы сдвинете движок влияния до 0, руки больше не будут сочетаться.

Используйте тот же процесс, чтобы добавить ограничения Copy Rotation к другим костям руки. У Вас должны быть эти кости... bicep_L >> должна следовать за (Ограничение Copy Rotation) bicepFK_L (Вы уже это сделали) forearm_L >> должна следовать за (Ограничение Copy Rotation) forearmFK_L hand_L >> должна следовать за (Ограничение Copy Rotation) handFK_L

…и, конечно, проделайте то же с костями правой руки, заменяя L в конце имени каждой кости на R

Когда Вы закончите, Вы должны видеть, что позирование костей FK-контроллера (в режиме Позы), передает перемещение "реальной" руке. Теперь Вы готовы настроить IK-контроллер.

Создание IK-контроллера руки

Итак, хорошо. Контроллер FK руки работает так, как должен. Теперь мы сделаем IK контроллер руки. Сначала не забудьте выключить влияние контроллера FK. В противном случае контроллер FK, который Вы уже сделали, не отпустит удерживаемые им "нормальные" руки, и это создаст помехи для любого испытания, которое Вы захотите провести при создании костей контроллера IK. Для того, чтобы сделать это, выберите поочередно кости bicep_L, forearm_L и hand_L, и сдвиньте движок влияния внизу каждого ограничения Copy Rotation полностью влево, устанавливая их величины в нуль.

Так же, как Вы продублировали кости руки, чтобы сделать новый набор костей FK-контроллера, Вам нужно проделать то же с новым набором для костей контроллера IK. Оригинальные "нормальные" кости теперь имеют ограничения вращения, которые мы не хотим копировать в новые руки контроллера IK. Вместо этого, эффективнее просто продублировать новый набор IK-рук из рук контроллера FK.

Рисунок 10. Основное IK ограничение
Рисунок 10. Основное IK ограничение

В панели Object Data, включите слой костей 2 (где находятся кости контроллера FK), но не слой костей 1, чтобы Вы могли видеть только кости контроллера FK. Убедитесь, что Вы находитесь в режиме Редактирования. Теперь Вы можете выбрать все кости (bicepFK, forearmFK и handFK), нажав клавишу [A].

С этими выбранными костями, нажмите [SHIFT][D], чтобы продублировать их, затем нажмите [M], после этого цифру [3], чтобы послать эти дубликаты в слой костей 3. Переключитесь на слой костей 3, чтобы Вы видели только эти новые кости.

Прежде, чем Вы перейдете к большой массе изменений, переименуйте кости должным образом. Например, вместо названия bicepFK_L.000, Вы должны переименовать эту кость в bicepIK_L. Подходящими именами должны быть bicepIK_L, forearmIK_L и handIK_L. Убедитесь, что кости этого нового контроллера IK не имеют включенного “Deform”, и если это не так, отключите его.

Если Вы уже знаете, как изменять кости из FK в IK с настройками, как показано на Рисунке 10, продолжайте. Для тех, кому нужно резюме:

  • Оторвите (отключите связь родитель-потомок) ладони от руки в запястье. Вам нужно сделать это, поскольку, если рука подключена, тогда она наследует движения FK от предплечья. Это даст ей возможность перемещаться независимо, что необходимо для IK-движения. Чтобы сделать это, Вы должны быть в режиме Редактирования. Выберите кость handIK_L, и под панелью Bone в области Relations, Вы увидите, что она была потомком кости forearmIK_L. Удалите этот связующий элемент.
  • Войдите в режим Позы и выберите правой кнопкой кость forearmIK_L. Через панель Bone Constraints добавьте ограничение Inverse Kinematics. Измените свойство Chain Length (длина цепочки) этого ограничения на 2 (это сделает работу ограничения влияющей на две кости: forearm и bicep)
  • Измените поле Target на Armature (или на что-то другое, как называется ваша арматура) и введите handFK_L в поле Bone:, которое появится. При нахождении в режиме Позы это заставит конец кости IK-контроллера руки прикрепиться к руке, как будто он намагничен.
Рисунок 11. Удалите кость, ведущую к elbow pole.
Рисунок 11. Удалите кость, ведущую к elbow pole.

Рука будет теперь брать за основу IK-движение, так что, когда Вы сдвинете ладонь (в режиме Позы), рука последует за перемещением. Обратите внимание, что если Вы перемещаете руку внутрь к плечу, локоть изгибается, чтобы позволить перемещение. Старайтесь не двигать рукой настолько далеко, что она начнёт отрываться от запястья. Рука отделится, поскольку она отвязана (не является потомком), но вытягивание её дальше от руки просто должно заставить выглядеть любые анимации нереальными.

Действие IK от ладони пока прекрасно работает, но соответствующая установка IK должна также включить контроллер локтя, чтобы при изгибе локтя, аниматор был способен определить направление, в котором локоть будет указывать. Например, когда ладонь перемещается к плечу, локоть будет изогнут вверх в воздух или будет указывать вниз к полу?

Рисунок 12. IK-ограничение с настройками цели полюса локтя.
Рисунок 12. IK-ограничение с настройками цели полюса локтя.
  • Выберите шар в конце локтя.
  • Выдавите от него наружу кость (наиболее вероятно, это будет по направлению оси Y), совсем недалеко от руки.
  • Отсюда выдавите другую небольшую кость вверх (по направлению Z), и задайте имя этой новой кости "elbowpoleIK_L" (полюс локтя IK)
  • Удалите кость, которая ведёт к новой кости elbowpoleIK_L, как показано на Рисунке 11.
  • Выберите кость elbowpoleIK_L и отсоедините её (удалите родительский элемент, который к настоящему времени будет bicepIK_L). Она не должна быть потомком, чтобы её свободно можно было перемещать по окрестностям.
  • Возвращайтесь в режим Позы. Выберите кость forearmIK_L. В поле Pole Target кости, введите Armature (или другое имя арматуры) и когда появится новое поле Bone, введите elbowpoleIK_L
Рисунок 13. Настройка угла Полюса
Рисунок 13. Настройка угла Полюса

Ваша настройка ограничения IK должна теперь выглядеть похоже на Рисунок 12. Когда Вы перемещаете кость ладони к плечу, рука изгибается и локоть "предполагает" указывать на свободно плавающую кость elbowpoleIK_L. Есть вероятность, что направление и, следовательно, компенсирующий “Pole Angle” (Угол Полюса), должны быть скорректированы (эта величина присутствует среди настроек IK-ограничения кости forearmIK_L, как видно на Рисунке 13).

Право, получение этого значения является обычно наиболее кропотливой частью создания IK-руки, хотя оно станет довольно простым, как только Вы уловите суть. Вы должны знать, что восстановление поворота кости повлияет на компенсацию, так что будет хорошей практикой применить Armature >> Bone Roll >> Recalculate Roll >> Z Axis непосредственно до назначения угла компенсации IK (сделайте это в режиме Редактирования, с выбранными IK костями руки).

Легкий путь получения правильного угла компенсации состоит в том, чтобы войти в режим Позы и подвигать руку к плечу, то есть, очевидно, согнуть. Затем, подвигайте вашу мышь над величиной компенсации, чтобы локоть указывал непосредственно на начало IK_elbow_L. Нередко, правильной величиной бывает 0, 90, -90 или 180 градусов.

Когда это сделано правильно, IK-рука должна изгибаться при перемещении ладони к плечу (в режиме Позы), и изгибаться в локте в направлении свободно плавающей кости elbowpoleIK_L сзади.

Придание формы костям

Даже если они находятся в различных слоях, кость IK-ладони и кость FK-ладони - расположены, тем не менее, к настоящему времени на одном и том же месте. Это создаёт проблему, как выбирать контроллер руки, который нам нужен, если отображаются оба набора. Один из способов для этого - придать костям различную форму, которая облегчает различение.

Для придания кости формы, сделайте меш-объект с формой, которая, по Вашему мнению подходит кости, и дайте ему ясное имя (напр. “shape_hand”). С выбранной костью в режиме Позы, введите имя меш-формы в поле Custom Shape (под областью Display панели Bone). Также полезно включить “wireframe” под областью Display панели Object Data, гарантируя, что опция X-ray включена, чтобы кости можно было легко видеть даже под кожей меша персонажа.

Для IK-оснастки, первичными контроллерами костей являются контроллеры handIK и elbowploeIK, так что разумно сделать заказные формы для костей, которые непосредственно не используются аниматором (кости forearmIK и bicepIK), они будут скрыты позже в этом уроке до того, как мы закончим.

Другой полезной техникой будет прятать кости контроллера FK в то время, когда используются контроллеры IK и наоборот. Мы затронем то, как это сделать, в конце урока.

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

Так же как и раньше, но на этот раз для IK, используйте тот же процесс добавления ограничений Copy Rotation на все кости руки. У вас должны быть эти кости...

  • bicep_L >> должна следовать за (ограничение Copy Rotation) bicepIK_L
  • forearm_L >> должна следовать за (ограничение Copy Rotation) forearmIK_L
  • hand_L >> должна следовать за (ограничение Copy Rotation) handIK_L

Строго говоря, чтобы заставить "нормальную" руку точно следовать за перемещением контроллера IK-руки, Вы могли бы также решить отсоединить родительскую связь кости hand_L от forearm_L и добавить ограничение Copy Location к hand_L, чтобы чтобы он следовал положению handIK_L в Мировом пространстве.

На практике, однако, в этом нет необходимости, потому что нет никакой причины для аниматора нереально растягивать руки от запястья, и этот шаг обычно пропускают из-за необходимости добавления дополнительных ограничений Copy Location. Это работает лучше просто, если иметь такие руки, как теперь. Пришло время работы по созданию IK / FK переключателя.

Создание IK/FK переключателя

Наконец, теперь мы готовы сделать волшебный IK/FK переключатель.

Первая задача состоит в том, чтобы сделать форму переключателя, который будет состоять из двух формированных костей, чтобы выглядеть похожим на круглый движок в прямоугольной границе. Круглый движок будет сам иметь ограничения, чтобы он был не в состоянии перемещаться за пределы границы. Предпочтительно, чтобы перемещение до любого предела (верхняя и нижняя позиции в переключателе), соответствовало одному BU, то есть позиция "выключено" имеет локальную позицию кости Y=0, и позиция "включено" имеет локальную позицию кости Y=1. Это упростит написание формул позже, когда мы будем генерировать управляющий элемент (driven key), который обслуживает переключатель.

Переключатель будет сделан из пары костей с заказной формой.

Сначала подготовьте заказные объекты форм для использования переключателем. В режиме Объектов, выполните [SHIFT][A]>>Add>>Mesh>>Plane. В панели Object Data, назовите плоскость “switchborder_shape”. Затем, добавьте круг с помощью [SHIFT][A]>>Add>>Mesh>>Circle, и на этот раз назовите его “switchslider_shape”.

Не беспокойтесь, что эти формы пока не окончательные, Вы отрегулируете их, как только установите кости, которые будут их использовать. С созданными заказными объектами формы, пора делать сам IK/FK переключатель.

Рисунок 14. Настройки отображения кости.
Рисунок 14. Настройки отображения кости.

На виде спереди, выберите Арматуру и войдите в режим Редактирования. Вы могли бы теперь использовать [CTRL][A], чтобы добавить новую кость, но лучше воспользоваться преимуществом зеркального отражения Арматуры, чтобы Вы могли иметь симметричные кости на другой (правой) стороне. Для этого выберите конец кости шеи и нажмите [SHIFT][E], чтобы выдавить кость над плечом. Отсюда, нажмите [E],[Z],[1], затем [ENTER], чтобы выдавить другую кость ровно вверх, на размер одного Blender Unit. Назовите эту новую кость switch_border_L, и удалите кость, связывающую её с шеей.

В режиме Позы, выберите кость switch_border_L, затем перейдите в панель Bone и назначьте полю Custom Shape форму switchborder_shape. Вы должны также включить его отображение в Wireframe. Так как это контроллер, в отличие от кости персонажа, уберите галочку со свойства Deform, см. Рисунок 14. Убедитесь что Вы также назвали противоположную кость switch_border_R или зеркальное отражение кости перестанет работать.

Теперь, когда форма переключателя применена и он выглядит как контроллер над плечом, Вы можете обратить внимание, что он слишком большой. Не меняйте размеры кости, так как это осложнит связанные с ней ограничения, если Вы позже решите назначить персонажу изначальную позу . Лучший путь поменять размеры формы кости - отредактировать оригинальный меш самой формы.

Выберите объект switchborder_shape, и войдите в режим Редактирования. Выберите все вершины, используя клавишу [A], затем масштабируйте форму вплоть до разумного рабочего размера (примерно [S] 0.2[ENTER]). Сделайте то же с мешем switchslider_shape.

Теперь, когда у вас есть кость, представляющая границу переключателя (в данный момент квадрат), Вам нужно сделать движок, управляемый в пределах переключателя.

  • В режиме редактирования, выберите switch_border_L и продублируйте его с помощью [SHIFT][D].
  • Переименуйте новую кость в switch_slider_L
  • Сделайте switch_slider_L ребенком switch_border_L, изменив поле parent кости switch_slider_L в switch_border_L (эта настройка находится в области Relations панели bone. Убедитесь, что опция “Connected” отключена, т.к. иначе в тот момент, когда Вы сделаете это, кость перепрыгнет в другое место).
Рисунок 15. Ограничение направлений движения IK/FK переключателя.
Рисунок 15. Ограничение направлений движения IK/FK переключателя.

Когда Вы войдёте в режим Позы, движок ключа будет выглядеть похожим на большой круг в квадрате того же самого размера. Не меняйте пока размеры костей, или следующие вычисления придётся корректировать. Более важно откорректировать форму до изменения размера.

В данный момент круглый движок может перемещаться со своего места повсюду. Вам нужно его зафиксировать, чтобы круг мог перемещаться только вертикально, и только до края границ.

  • Добавьте ограничение Limit Location к кости switch_slider_L.
  • Измените поле Convert с “World Space” на “Local”.
  • Проверьте поле “For Transform”. Оно делает предел остановки полноценным в этой точке. Без этого, движок может казаться остановившимся на нужном пределе, но внутреннее значение может отражать, что он сдвинулся на самом деле дальше.
  • Проверьте значения Min и Max для осей X, Y and Z.
  • Для всех осей X, Y и Z установите значения в 0, круг теперь стал неподвижен в режиме Позы.
  • Измените величину MaximumY на 1, сопоставляя ваши настройки с теми, что на Рисунке 15. Вы должны теперь быть способны сдвигать switch_slider_L вверх на короткое расстояние. Если Вы обнаружите, что правильная ось - не Y, а X или Z, тогда ваши кости, возможно ориентированы иначе, чем у меня, и Вам тогда нужно будет использовать другую ось в будущих инструкциях.
Рисунок 16. Ограничение перемещений границы переключателя.
Рисунок 16. Ограничение перемещений границы переключателя.

Вам нужно сделать границы переключателя так, чтобы он устанавливал границы того, где движок может перемещаться.

В режиме Позы, переместите движок вверх насколько, насколько он сможет сдвинуться, принимая его за пределами текущей границы.

Затем, отредактируйте объект switchborder_shape, перемещая один из краев, чтобы переключатель был правильно переформирован.

Наиболее вероятно, вам понадобится переместить верхний край на один юнит вдоль оси Y. Предположим, Вы - на виде сверху [Numpad 7], выберите ребро, затем нажмите [G],[Y],[1],[Enter].

Теперь когда Вы находитесь в режиме Позы, управление движком должно быть возможным только в пределах границы. Если Вы нажмёте клавишу [N], открыв панель свойств, Вы должны обратить внимание, что в области Transform величина для позиции Y имеет дипазон от 0 до 1, в зависимости от того, как далеко его переместить вдоль переключателя.

Для того, чтобы предотвратить аниматору возможность, перемещать движок или границу контроллеров переключателя в неразумных направлениях, Вы можете добавить другие предельные ограничения, предотвращающие незаконное перемещение, хотя достаточно (и проще) просто запереть величины позиции, поворота или масштаба костей контроллера (нажав кнопку с висящим замком около этих величин в панели Свойств, как показано на Рисунке 16). Не забудьте, что вам понадобится проделать эту работу (заказная форма, ограничения, и т.п.) и для правого переключателя тоже. После этого Вы готовы для последнего этапа, который заставит переключатель работать на самом деле.

Управляющие ключи (Driven Keys)

Рисунок 17. Добавление управляющего элемента к полю «влияние»
Рисунок 17. Добавление управляющего элемента к полю «влияние»

Теперь вы имеете набор движков и дополнительных комплектов рук IK и FK контроллеров, которые способны манипулировать мешем, как только их ограничение влияния будет включено. Последним шагом в этом будет создание управляющих ключей (driven keys), которые соединят ограничения контроллера с переключателем, чтобы IK или FK движение было активизировано в зависимости от положения переключателя.

В режиме Позы, выберите поочерёдно каждую кость "нормальной" руки, (bicep_L, forearm_L и hand_L), и выключите все ограничения, как IK, так и FK контроллеров, сдвинув влияние каждого ограничения до нуля. Это будет означать, что мы увидим эффект движков только тогда, когда они будут активизированы, и мы будем в состоянии сказать, что всё работает.

Выберите кость bicep_L.

Внизу панели ограничений кости, щелкните правой кнопкой мыши по полю “influence” (влияние) ограничения Copy Rotation (которое связано с костью bicepFK_L). Затем двигайтесь по меню вплоть до “Add Driver” (добавить управляющий элемент, как показано на Рисунке 17). Поле влияния станет пурпурным, указывая, что Вам больше не нужно непосредственно набирать величины в это поле, поскольку вместо этого на него будет воздействовать что-нибудь еще. Все, что остаётся, это установить управляющий ключ, чтобы он брал величину из движка.

Измените имя ограничения Copy Rotation (которое называется “Copy Rotation” по умолчанию) на CopyRotationFK . Вам не нужно определять точное имя кости, так как оно автоматически будет принято во внимание в метке Редактора Графов (Graph Editor). Перейдите в новое окно Редактора Графов и измените режим в заголовке с “F-Curve Editor” на “Drivers”.

Слева Вы увидите действие, соответственно названное “Influence (bicep_L : CopyRotationFK)”. Выберите это действие, и его значения должны появиться на [N]-панели Свойств с правой стороны окна Редактора Графов. В этих настройках измените имя переменной с var на FKbicep (заметьте, что этот шаг необязателен, Вы можете оставить его как var, если Вам это нравится. Я просто люблю присваивать имена, поскольку это может быть полезным при попытке идентифицировать проблемы, когда что-то идет неправильно).

В полях Ob/Bone, выберите “Armature” (или то, как на самом деле называется ваша арматура) и затем "switch_slider_L" в поле bone, которое появится. Для того, чтобы связать вращение bicep с позицией движка по оси Y, выберите “Y Location” из выпадающего списка, и удостоверьтесь, что включено “Local Space”. Теперь все, что нужно - это создать формулу, вычисляющую величину влияния, исходя из позиции Y движка switch_slider_L.

В поле Expr: (выражение формулы), наберите имя вашей переменной (в данный момент это ”FKbicepL”, хотя если Вы не переименовывали её ранее, она все еще может быть “var”). Делая это, Вы на самом деле говорите, что управляющий ключ воздействует на Влияние ограничения вращения кости IKbicep в зависимости от величины позиции движка switch_slider_L по оси Y.

По существу, Вы говорите: Влияние вращения (FKbicepL) = позиция по Y движка switch_slider_L

Когда switch_slider_L находится внизу (Y=0), влияние FK не будет иметь эффекта, а если switch_slider_L переместить вверх (Y=1), тогда FK станет действовать с полным влиянием. Настройки для управляющего элемента должны сейчас выглядеть примерно как на Рисунке 18.

Рисунок 18. Управляющий элемент для кости FK bicep.
Рисунок 18. Управляющий элемент для кости FK bicep.

Вы теперь можете протестировать правильность оснастки руки, перейдя в слой костей 2 (где находится FK-рука). В режиме Позы, поверните FKbicep_L чтобы она ушла от центра.

Затем вернитесь к управлению движком и подвигайте движок вверх и вниз. Вы должны видеть, как плечо/бицепс привязывается и отвязывается от FKbicep в зависимости от перемещения движка.

Теперь, когда движок работает для активации / отключения привязки диспетчера FK, Вы также захотите иметь такую же обработку для контроллеров IK. Различие здесь в том, что Вам нужна противоположная формула; поскольку диспетчер FK активен, когда движок сверху, а IK должен вступать в силу, когда движок наоборот, внизу переключателя.

Поскольку пределы перемещения движка - от 0 до 1 (местоположение по Y), то все, что Вам нужно сделать, чтобы сгенерировать противоположный эффект - вычесть его из 1. Так, поскольку раньше мы разработали FK как;

Влияние вращения (FKbicepL) = позиция по Y движка switch_slider_L

Теперь для IK противоположным эквивалентом должно быть:

Влияние вращения (IKbicepL) = 1 – ( позиция по Y движка switch_slider_L)

Достаточно теории. Вот шаги:

  • Выберите кость bicep_L.
  • В Ограничениях костей для bicep_L, щёлкните правой кнопкой по движку Influence внизу ограничения Copy Rotation для bicepIK_L и выберите “Add Driver”. Движок станет пурпурным.
  • В окне Редактора Графов (с включенным режимом “Drivers”), выберите правой кнопкой новую управляющую функцию (в списке слева), чтобы её свойства отобразились на правой стороне окна Редактора Графов (включаемой по клавише [N])
  • Измените имя переменной с “var” на “IKbicepL”
  • Установите поля Ob/Bone в “Armature” и “switch_slider_L” с настройкой “Y Location” и Local Space.
  • В поле Expression дальше вверху, введите формулу: 1 – IKbicepL

Переключатель IK/FK теперь должен работать полностью, по крайней мере для кости bicep. Я обычно использую простейший способ искать неисправности, проверять всё ли работает, размещая контроллеры IK-руки и FK-руки в совершенно разных местах в режиме Позы (одна рука направлена вверх, другая вниз).

Затем, когда Я смещаю движок вверх и вниз, "нормальная" рука с раскрашенным весом должна сдвигаться между этими двумя. Когда движок вверху, "нормальная" рука следует за контроллером FK-руки, а когда движок внизу, "нормальная" рука повторяет IK-перемещение.

Теперь, когда кость bicep работает, Вам нужно, повторяя этот процесс, добавить IK/FK управляющие элементы к костям forearm и hand. Конечно, это нужно также сделать для руки на правой стороне.

Это скучный процесс, но ваш аниматор будет Вам благодарен за то, что ваша оснастка позволяет ему использовать любое из типов движения рук - FK или IK, и наличие переключателя, как средства изменить тип перемещения.

Наведение порядка и автоматическое скрытие неиспользуемых костей контроллера

С тремя наборами рук, у нас теперь много костей в настройке этой оснастки. Аниматор не должен переключать слои для того, чтобы иметь доступ к костям контроллеров FK или IK, кроме того, есть некоторые кости (например, IK forearm или все кости, не являющиеся контроллерами), которые не используются аниматором напрямую, и ему не нужно их видеть. Кости "нормальной" руки (с раскрашенными весами для меша) не нужны аниматору, так что Вы должны спрятать их, переместив на другой слой.

Затем, переместите каждую из костей контроллера FK-руки (bicepFK_L, forearmFK_L и handFK_L) в слой костей 1. Точно так же переместите кость ладони (handIK_L) и контроллер полюса локтя (elbowpoleIK_L) в слой 1. Таким образом, аниматору нужно иметь активным только первый слой костей для доступа к костям, которые на самом деле используются им.

В качестве дополнительной вежливости, Вы можете также использовать управляющий ключ, чтобы прятать кости FK или IK контроллеров, когда они не используются. Например, когда аниматор включает FK-перемещение, почему бы не сделать так, чтобы кости IK-контроллера автоматически становились невидимыми?

Рисунок 19. Все управляющие элементы
Рисунок 19. Все управляющие элементы

Одним из преимуществ Блендера 2.5, которое он имеет перед предыдущими версиями, - идея о том, что "всё является анимируемым". Это включает в себя практически любой элемент управления в свойствах объекта. Нажмите правой кнопкой мыши, и в появившемся меню можно будет выбрать добавление ключа анимации. Если можно установить ключи... то так же можно добавить и управляющие элементы (drivers).

  • В режиме Позы выберите кость bicepFK_L (ту, которая контролирует левый бицепс при FK-движении)
  • В панели Bone, посмотрите в низ секции Display. Вы увидите опцию “Hide”, которую можно использовать для переключения видимости выбранной кости. *Щелкните правой кнопкой по этой опции и выберите “Add Driver” из меню, которое появится.
  • В окне Редактора Графов, щелкните правой кнопкой по новому управляющему элементу “Hide (bicepFK_L)”.
  • Переименуйте переменную с “var” на “hidebicepFK”
  • Настройте поля Ob/Bone в “Armature” и “switch_slider_L” с настройками “Y Location” и Local Space.
  • Наконец, измените выражение на “1 - hidebicepFK”
  • Когда Вы сдвинете движок полностью вниз (для IK-движения), кость контроллера FK-руки должна исчезнуть.
  • Сделайте тоже самое для контроллеров FK forearm и FK hand.
  • Повторите процесс для двух IK-контроллеров: handIK_L и elbowpoleIK_L, кроме последнего шага, не вычитайте из 1. Выражения должны быть просто “hidehandIK” и “hideelbowpoleIK” (а не “1 - hidehandIK” или “1 – hideelbowpoleIK”).
  • Конечно, проделайте снова всё то же для другой руки.

Принимая во внимание ограничения IK, FK и сокрытия-костей, у Вас получится большое количество управляющих ключей для создания, как показано на Рисунке 19, но, зато, по-окончании результат должен получиться стоящим.

После завершения, при использовании IK / FK переключателя, должны появляться соответствующие кости контроллера, давая вам тот тип движения (IK или FK), который Вам нужен.

Переключение посреди анимации

Я оставлю Вам краткое примечание по анимации с настройками IK/FK. IK и FK руки никогда не выстраиваются точно, так что если Вы выполняете анимацию, где перемещение смещается от одного типа к другому (напр. подбирание мяча должно работать с IK, но бросать его с большим радиусом вращения лучше с FK-движением), тогда будет плохой идеей добавлять ключ на внезапное переключение, так как, вероятно, получится видимый перескок руки во время этого изменения.

Движок IK/FK переключателя должен менять положение за несколько кадров, и анимироваться должны как IK, так и FK наборы рук, чтобы соответствовать движению в течение перехода. Результат должен быть плавным и не замечаться зрителями.


Личные инструменты