Управляем велосипедом (и отвлекаем внимание)
Как сделать так, чтобы персонаж одной рукой управлял велосипедом, а другой одновременно рисовал в воздухе знак @?
Тема:
Анимация.
Используемые техники и инструменты:
Joint Tool (Сустав), ik Handle (ИК-манипулятор), Point Constraint (Принудительное согласование позиций), Motion Path (Путь Движения).
Анимация персонажей не сводится к цифровому изображению мимики, реалистичной ходьбе и синхронизированной с движениями губ речи. Персонаж также должен взаимодействовать с окружающим миром. Хотя в реальной жизни это предполагает огромное количество различных действий - прикасание, хватание, отпускание, взгляд, приближение, - в компьютерной анимации все это может быть сведено к Constraint (Принудительное согласование). Самое главное согласование - это то, которое связывает персонаж с другими элементами окружающего мира: с другим объектом или персонажем. В этом уроке мы рассмотрим основные процедуры при использовании такого вида ограничений. Мы создадим анимацию персонажа, управляющего велосипедом и одновременно рисующего другой рукой в воздухе знак @.

Рис. 8.1. Руль велосипеда с ручками состоит из трех NURBS-цилиндров

Рис. 8.2. Моделируем скелет: несколькими щелчками мыши в соответствующем окне мы создаем левое плечо и руку

Рис. 8.3. Теперь создадим зеркальное отражение руки и плеча для другой половины (здесь относительно плоскости YZ)

Рис. 8.4. Два ik Handles (ИК-манипулятор) упрощают анимацию рук
Используя два ik Handles (ИК-манипулятор), вы сможете управлять движением рук в соответствии с законами инверсной кинематики. Вам только нужно взять ik Handle (ИК-манипулятор) и перемещать его туда, куда вам нужно: две кости руки будут вращаться соответственно перемещению ik Handle (ИК-манипулятор). Мы прикрепим ik Handles к ручкам руля.
Выберите правую ручку руля и добавьте к выделенному объекту (с нажатой клавишей shift) правый IK Handle (ИК-манипулятор). Нажмите F2, выберите Constrain / Point (Принудительное согласование / Положение), для того чтобы принудительно связать ik Handle (ИК-манипулятор) с ручкой руля.Лучезапястный сустав правой ладошки встанет в центр ручки руля, как только вы установите ограничение. Через минуту мы снова поднимем руку.
-
Используя Point Constraint (Принудительное согласование позиций), свяжите левую ладошку с левой ручкой руля.
Выберите обе ручки руля и в режиме Insert mode (Режим редактирования опорных точек) переместите их опорные точки вверх так, чтобы лучезапястные суставы находились немного выше ручек руля (рис. 8.5).

Рис. 8.5. Перемещение опорных точек ручек руля вверх поднимает и запястья персонажа
Теперь давайте немного подвигаем рулем.
Выделите группу руля (в которую входят и обе ручки). В окне Outliner (Схема сцены) выделите Rotate Z (Угол поворота по оси Z) и, используя контекстное меню, вызовите окно Expression Editor (Редактор Выражений). С помощью средней кнопки мыши скопируйте имя из поля Selected Obj & Attr и вставьте его в пустое поле для выражений (см. рис. 8.6). Завершите ввод функцией= sin (time) ;
-
Создайте новое выражение, нажав Create (Создать).
В качестве аргумента функции синус можно использовать любое число, в нашем случае это будет количество секунд времени анимации. Однако значение функции синус ограничено. Оно может находиться только в промежутке между 1 и -1. Поэтому, когда вы воспроизведете анимацию, руль будет вращаться только между -1 и 1 градусами, что, конечно, едва заметно.

Рис. 8.6. Математическое равенство заставляет двигаться руль велосипеда
-
Отредактируйте выражение (для этого, как и раньше, следует вызвать Expression Editor (Редактор Выражений), увеличив амплитуду синуса в 20 раз
= 20 * sine (time);
-
Сохраните изменения, нажав Edit (Редактирование).
Это выражение позволяет рулю медленно вращаться между -20 и 20 градусами вокруг оси Y, как если бы велосипед двигался по слалому. Поскольку Point Constraint (Принудительное согласование позиций) все еще активно, руки движутся в унисон с ручками руля. Выглядит это так, будто руки (а вовсе не математическое выражение) управляют велосипедом (см. рис. 8.7). Если длины рук недостаточно во время увеличения амплитуды управляющих движений, ни в коем случае не удлиняйте их - помогите им дотянуться до ручек, подвинув плечи или ключицу немного вперед.
Если вы хотите исключить одну руку из управления велосипедом, попробуйте сделать так: щелкните мышкой по ее ik Handle (ИК-манипулятор) и в окне Channel Box (Окно Каналов) в секции Shapes (Форма) установите Node State (Состояние Узла) с Normal (Нормальное) на Blocking (Блокированное) (рис. 8.8). Эта команда дезактивирует ограничение. Если хотите, можете установить здесь ключ.

Рис. 8.7. Обе руки, крепко держась за ручки, управляют велосипедом

Рис. 8.8. Переключите Node State (Состояние Узла) с Normal (Нормальное) на Blocking (Блокированное). Привязка дезактивируется, и рука может снова свободно вращаться
Мы продвинемся еще немного вперед и вместо того, чтобы полностью исключить руку из управления велосипедом, добавим для нее еще одно принудительное согласование - Locator (Локатор). Затем, вместо того чтобы менять Node State (Состояние Узла) принудительного согласования, мы изменим его Weight (вес).
Создайте Locator (Локатор) - объект, который не рендерится. Его можно найти в меню Create (Создать). Переместите локатор немного правее правой руки. Оставляя локатор выделенным, выберите правый ik Handle (ИК-манипулятор) и свяжите его с локатором. Для этого выберите Constrain / Point (Принудительное согласование / Положение).Запястье моментально реагирует на это изменение и перепрыгивает в точку между ручкой руля и локатором. Если вы передвинете локатор в другую область сцены, ik Handle (ИК-манипулятор) последует за ним. Определяющими параметрами такого поведения являются Weights (Веса) двух принудительных согласований. Их вы найдете в окне Channel Box (Окно Каналов) прямо под полем Node State (Состояние Узла). Первое значение - это вес ручки руля, второе - вес локатора. Поскольку оба значения в данный момент равны, ладошка располагается между ними (рис. 8.9).

Рис. 8.9. Веса WO (для локатора) и W1 (для ручки руля) равны. Следовательно, запястье руки располагается между ними
Задайте длительность анимации 1000 кадров. Идите в кадр 300. Установите вес правой ручки руля на 1, а вес локатора на 0.
Рис. 8.10. Когда вес для ручки руля меняется на WO = 1, а вес для локатора на W1 = 0, запястье руки возвращается к ручке руля
-
Задайте ключевые кадры для обоих параметров.
Передвиньтесь вперед на 50 кадров, в кадр 350.
Измените вес: 0 - для ручки руля и 1 - для локатора.
Снова задайте ключевые кадры для обоих параметров.
Меняя веса для двух принудительных согласований позиции, вы создали анимацию движения руки. Она отпускает руль в кадре 300 и через 50 кадров перемещается к локатору - там и остается все оставшееся время.

Рис. 8.11. Со значениями WO = 0 и W1 = 1 запястье руки перепрыгивает к локатору
-
Верните руку к ручке руля между 500 и 600 кадрами,
задав еще два ключевых кадра для значений веса ограничения.
Отредактируйте анимацию в Graph Editor (Редактор Анимационных Кривых) на ваш вкус. Задайте касательным тип Flat (Горизонтальная) в точках начала и окончания движения.
Между 350 и 500 кадрами рука находится в статичном положении. Если вы создадите анимацию локатора в этом промежутке, например придав ему машущее движение, рука повторит его, поскольку она больше не привязана к ручке руля. Мы зададим руке совершенно определенное движение: пусть она нарисует в воздухе знак @. Это мы сможем получить путем установления ограничивающей связи локатора (но не для ik Handle (ИК-манипулятор) и пути рисования знака.
Переключитесь на окно Side View (Вид Сбоку) или Front View (Вид Спереди) и с помощью инструмента Pencil. Curve Tool (Карандаш) нарисуйте знак @ (рис. 8.12). Передвиньте полученную кривую поближе к локатору. Выделите локатор и добавьте к выделенному кривую. Откройте окно настроек команды Motion Path (Путь Движения), выбрав Animate / Motion Paths / Attach to Motion Path Option Box (Анимация / Пути Движения / Присоединить к Пути Движения Окно Настроек). В окне Option Window (Окно Настроек) команды Attach to Motion Path (Присоединить к Пути Движения) установите Time Range (Временной Диапазон) на Start / End (Начало / Конец). Задайте Start Time (Начальное Время) на 400, a End Time (Конечное Время) на 470. Выполните команду, нажав Attach (Присоединить) (рис. 8.13).
Рис. 8.12. Пишем знак @ в окне Side View (Вид Сбоку)

Рис. 8.13. Между кадрами 400 и 470 локатор оказывается «привязанным» к пути рисования знака @
Теперь рука, бросив руль, рисует в воздухе знак @, после чего возвращается к рулю и продолжает управление велосипедом (рис. 8.14). Взгляните на анимационные кривые для Motion Path (Путь Движения) в Graph Editor (Редактор Анимационных Кривых), для того чтобы убедиться, что движение не будет слишком поспешным. Вы также можете задать тип Flat (Горизонтальный) касательным ключевых кадров, используя контекстное меню временной шкалы.

Рис. 8.14. Персонаж управляет велосипедом только одной рукой. Руль продолжает двигаться. Правая рука рисует в воздухе знак @. После этого она возвращается к ручке руля и продолжает спокойно управлять
Если вы создадите велосипед и велосипедиста, не забудьте объединить локатор в одну группу с другими элементами. Было бы даже неплохо добавить небольшую анимацию знака @ в этой точке. Плечу тоже можно придать небольшое движение. А как насчет функции синус?
А теперь кое-что новенькое. Приходилось ли вам расчесывать мех?