Замена Child Of констрейнта

Список разделов Blender 3D Анимация

Описание: Вопросы и обсуждения аспектов анимации в Blender
Модератор: exooman

Сообщение #1 Pavel » 30.08.2019, 12:50

Всем привет.

Это сообщение обещает быть длинным :)

В этой теме предлагаю решить проблему с констрейнтом Child Of. Пока эта проблема мною не до конца побеждена.

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

Для таких целей служит констрейнт Child Of. Но его я не спешу использовать, так как есть три проблемы:

1 - если этот констрейнт выключен, а в следующем кадре его нужно включить, то при включении кость владелец начнёт перемещаться при изменении параметра Influence. Приходиться вручную эту перемещённую кость ставить на прежднее место.

2 - если всё таки удалось кость поставить на место, то возникает вторая проблема. Анимация выглядит дёрганной. Если запечь анимацию, то в анимационных кривых можно увидеть переломы в точках включения/отключения Child Of. Или кривая может идти выгнутой, а в после включения Child Of становиться вогнутой. В общем сложно сделать плавную анимацию. Например, есть два магазина. Один выбивается другим при перезарядке. Для этого нужно кость магазина несколько раз присоединить/отсоединить от оружия. И при отсоединении будут как бы фризы в анимации и анимация будет не плавной.

3 - при включении Motion Blur, на рендере будут артефакты в момент включения/отключения Child Of.

Из-за этих проблем я не использую Child Of. Я его заменил на констрейнт Copy Transforms. Для его использования нужно, например, к кости оружия привязать родительской связью новую кость и к этой новой кости уже привязать кость руки с помощью констрейнта Copy Transforms. В итоге получается тот же эффект, что и при использовании Child Of, но без двух проблем:

1 - нету артефактов на рендере при включённом Motion Blur.

2 - при включении/выключении Copy Transform констрейнта, не нужно перемещать кость обратно на место, как это делается при использовании Child Of.

Но проблема с плавностью анимации остаётся. При включении Motion Path на кривой иногда появляются петли или острые углы. Это заметно тогда, когда констрейнт выключается за один кадр.

Если у вас есть лучшее решение, то пишите в эту тему. А пока я скажу про третий способ, который не до конца рабочий:

Я написал аддон для 2.79, который заменяет констрейн Child Of. Во вкладке Bone добавлена панель Child Of. Можно выбрать кость цель (всего доступно 4 цели) и анимировать кость владелец, параллельно ставя ключи на Offset нужной кости и на параметре Link. Вся суть в том, что при включении/отключении Link кость остаётся на месте. И анимация вроде бы плавная получается (но это нужно ещё проверить на сложных примерах). И аддон физически меняет позицию кости владельца (в отличии от констрейнтов), и нужно анимировать только одну кость вместо двух (в случае использования Copy Transforms).

https://github.com/PavelBlend/blender-child-of-addon

Но в этом аддоне есть проблемы. Я не могу сделать свойстов Link и Offset доступными для различных Action'нов. Можно только создать одну общую анимацию этих параметров для всей сцены. Как сделать эти параметры равноправными с location и rotation?

Если вы можете предложить лучшее решение, чем мой аддон, то пишите. Или если знаете как его улучшить.

Добавлено спустя 5 минут 36 секунд:
Вот сцена для тестов:
https://drive.google.com/file/d/18dJ11L6CGGbefeuHyotfrmtIN_XxjHV1/view?usp=sharing

Нужно привязать кости hand_ik_l и hand_ik_r к магазину (mag_rig), оружию (wpn_body), затвору (zatvor).
Pavel M
Аватара
Сообщения: 924

  • 1

Сообщение #2 Pavel » 31.08.2019, 20:40

Фух. После нескольких дней поисков решения, удалось побороть проблему. Написал аддон:
https://github.com/PavelBlend/blender-copy-transforms-helper-addon

Позже опишу как им пользоваться.
Pavel M
Аватара
Сообщения: 924

Сообщение #3 stark » 31.08.2019, 21:41

Pavel писал(а):Фух. После нескольких дней поисков решения, удалось побороть проблему. Написал аддон:
https://github.com/PavelBlend/blender-copy-transforms-helper-addon

Позже опишу как им пользоваться.
Главное, что ты свою задачу решил :) Но, конечно, welcome!
stark M
Сообщения: 2140


Сообщение #4 Pavel » 01.09.2019, 18:20

Такссс... Оказывается я зря писал аддон :facepalm: Есть способ получить плавную траекторию с помощью встроенных средств блендера. Но если бы я не писал бы аддон, то вряд ли до этого додумался бы.
В общем нужно по другому отключать/включать констрейнт Copy Transforms. До этого я делал это не правильно. Не знаю, как попроще объяснить. Наверное придётся записывать видео. В общем идея такая: использовать вставку ключевых кадров I > Visual LocRotScale, вместо I > LocRotScale в момент отключения/включения констрейнта. Ну ещё есть пара нюансов.
Pavel M
Аватара
Сообщения: 924

  • 2

Сообщение #5 Pavel » 02.09.2019, 20:46

Если кому интересно, как я заменил констрейнт Child Of, то сейчас опишу:

есть такой риг:
Изображение
В нём есть два IK контроллера (для левой и правой руки) и кость оружия, с помощью которой перемещается оружие целиком (вместе с затвором, предохранителем, так как они являются потомками этой кости). Если перемещать ИК контроллеры, то руки будут следовать за ними и сгибаться.

Но чтобы руки следовали за оружием (были привязаны управляемой родительской связью), нужно к ИК контроллерам добавить констрейнт Copy Transforms. Но если в качестве цели указать главную кость оружия, то руки будут иметь туже позицию и вращение, что и главная кость оружия. Нам этого не нужно, поэтому добавляем новую кость (я такие кости называю хэлперами, на скриншоте они жёлтого цвета), и привязываем эту новую кость обычной родительской связью к главной кости оружия. Теперь эту новую созданную кость указываем в качестве цели (Target) в констрейнте Copy Transform у ИК контроллера руки. Теперь, при трансформации главной кости оружия, руки будут следовать за оружием.

Но вторая часть проблемы: как делать плавную анимацию в момент включения/отключения констрейнта Copy Transforms:

Как отвязать привязанный ИК контроллер:

Для начала нужно поставить ключ Visual LocRot (именно Visual LocrRot, а не просто LocRot). В чём разница? ключи Visual ставят ключи в визуальных трансформациях. То есть значения позиции и вращения будут такими, какими мы видим их во вьюпорте. Вот пример:

Изображение

слева LocRot и в полях трансформаций стоят нули, хотя кость не находится в нулевых координатах. Просто когда кость имеет констрейнты, то реальные значения трансформаций просчитываются на лету. А вот справа ключ VisualLocRot. И видно, что трансформации не нулевые, а реальные.

Далее в этом же кадре, в котором установили Visual LocRot, ставим ключ на параметре Influence (который должен быть равен 1.0) констрейнта Copy Transforms. Потом переходим в следующий кадр, меняем значение Influence на 0.0 и снова ставим ключ на Influence. На позиции и вращении кости ставить ключ в этом кадре не нужно.

Всё. Мы выключили констрейнт.

Далее переходим на несколько десятков кадров вперёд и включаем констрейнт. Это делается так:

Устанавливаем параметр Influence на 1.0. Ставим ключи на этом параметре и на позиции и вращении кости (используя Visual LocRot). Возвращаемся на один кадр назад и меняем Influence на 0.0 и ставим ключ на Influence. Далее возвращаемся ещё назад на несколько кадров и ставим промежуточные ключи, сколько нужно. В итоге получатся такие ключи:
Изображение

Но есть проблема. Кривая Motion Path плавная, но в момент отключения кость замедляется. Точки на кривой Motion Path располагаются более плотно:

Изображение

Чтобы этого не было, нужно либо вручную поправить анимационную кривую, либо перейти на один кадр назад и вставить ещё один ключ Visual LocRot. После этого анимационные кривые будут такими:


Изображение

Кривая Motion Path теперь выглядит так:

Изображение

Если вам не нужен резкий переход в момент отключения/включения констрейнта, то включать/отключать его можно не за один кадр, а за несколько. Вот картинки:

Изображение

Изображение

Скачать риг можно здесь:

https://drive.google.com/file/d/16wrxV_z5Zu_T5haugoC3PJt_JRU6GbXm/view?usp=sharing
Pavel M
Аватара
Сообщения: 924


Вернуться в Анимация

Кто сейчас на форуме (по активности за 5 минут)

Сейчас этот раздел просматривают: 1 гость

cron