Уроки: Maya

Анимация йо-йо

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

Это руководство основано на работе, которую я недавно делал для Credit Suisse. Надо было представить два ролика с рукой и кистью руки, играющей с йо-йо. Общий вид проекта был точно задан руководством и основывался на раскрашенном моментальном рентгеновском снимке, но здесь я остановлюсь на анимационной стороне дела.

Сперва мы хотели заснять движение руки, ладони и йо-йо на фоне зеленого экрана, а затем наложить на изображение руки модель скелета. По сюжету движущаяся рука, йо-йо и бечевка будут в аду, поэтому для завершения иллюзии они должны выглядеть как на рентгеновском снимке, со встроенной моделью скелета. К сожалению, при съемке возникли сложности, которые сделали такой подход нереальным, поэтому весь рекламный ролик был сделан в 3D c использованием Maya 1.5 и Renderman. В целом, это не представляло никакой проблемы, за исключением скрипта для того снимка, когда йо-йо замирает и в ответ рука наматывает бечевку на пальцы. Здесь я подробно остановлюсь на том, как я реализовал движение йо-йо и деформацию бечевки.

Настроив и анимировав руку (рука NURBS привязанная к суставам, и соответствующие каждому суставу кости скелета), я перешел к йо-йо. В начале и в конце ролика из 160 кадров йо-йо должен буть находиться в руке, и два раза подпрыгнуть в промежутке. Чтобы удостовериться в том, что в эти моменты йо-йо будет точно находиться в руке, я воспользовался в Maya возможностью "point constraint", когда определенный объект перемещается в определенное положение.

Сначала в меню "primitives" я создал локатор, и назвал его "handLocation". Я установил его на ладони руки и привязал к одному из ее суставов. Затем я сделал еще один локатор и назвал его "yoyoLocation". Затем я привязал верхний узел йо-йо к обоим локаторам, выбрав сначала локатор, потом йо-йо, а затем нажав "point constraint" в меню "constraints".

Затем, когда я выбираю верхний узел йо-йо, веса обоих ограничений выводятся в панели "channel". По умолчанию они оба равны 1.0, что означает, что оба локатора одинаково влияют на положение йо-йо. Это значит, что йо-йо занимает положение как раз между двумя локаторами (см. рис. 1) Чтобы упростить анимацию, я оба этих веса установил в 0.5, что дает абсолютно тот же результат (так как веса равные), но дает диапазон весов от 0 до 1.

Теперь, уменьшая вес "yoyoLocation" до 0, и увеличивая вес "handLocation" до 1, йо-йо перемещается в ладонь руки и движется вместе с нею. Я зафиксировал эти веса до того момента, когда рука должна отпустить йо-йо. В этом кадре я переместил локатор "yoyoLocation" в точку положения йо-йо, зафиксировал его каналы трансляции и поменял местами веса ограничений таким образом, что локатор "yoyoLocation" получил полный контроль над йо-йо. С этого момента для анимации движения йо-йо мне надо было перемещать локатор "yoyoLocation". Затем, в момент, когда рука должна схватить йо-йо, веса ограничений возвращаются к противоположным значениям и йо-йо снова оказывается зажатым в руке.

Такое использование нескольких ограничений натолкнуло меня на решение для анимации бечевки йо-йо и создания иллюзии, что она вьется вверх и вниз из йо-йо, когда оно подпрыгивает, а затем - на решение для того, чтобы обмотать бечевку вокруг пальцев, когда сценарий реагирует на остановку йо-йо.

Бечевка была реализована в виде цилиндра NURBS с множеством промежуточных точек, для того, чтобы он мог деформироваться в любом месте. Для управления его деформацией я решил поместить внутрь этого цилиндра каркасный деформатор. Каркасные деформаторы создаются из NURBS-кривых, к которым привязывается геометрия. Затем, перемещая CV кривые, изменяется и геометрия.

Чтобы сделать правильную деформацию, я сделал кривую с 6-ю CV и поместил ее в центр цилиндра. Каждая CV была преобразована в кластер, что была сделано выбором их по одной и применением опции "cluster" из меню "deformation". Благодаря этому каждую CV стало можно зафиксировать и наложить на нее ограничения. В целях этого руководства пронумеруем кластеры от 1 до 6 сверху вниз (см. рис. 2) Затем, выбрав "create wire" в меню "deformation" и следуя подсказкам help'а, я выбрал кривую, а затем цилиндр/бечевку и нажал ввод, чтобы привязать бечевку к каркасу.

На следующем шаге надо было соединить один конец каркаса с указательным пальцем руки (там, где обычно проходит петля йо-йо), а другой- с йо-йо. Для этого были созданы относительные локаторы "fingerConstraint" и "yoyoConstraint", и поставлены в соответствие с требуемыми объектами/узлами. 1-й кластер был привязан(point constraint) к "fingerConstraint", а 6-й - к "yoyoConstraint" (см. рис. 3). Теперь оба конца бечевки следовали за теми объектами, которыми надо.

Теперь надо было заставить остальную часть бечевки (кластеры 2-5) оставаться между пальцем и йо-йо при ее движении. Для этого каждый из оставшихся кластеров бал привязан к обоим локаторам- "fingerConstraint" и "yoyoConstraint" с весами, соответствующими их расстоянию до каждого из локаторов, как показано на рис. 4.

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

Затем я должен был заставить бечевку обернуться вокруг большого и указательного пальцев. Я снова сделал локаторы, поместив один из них в ту точку большого пальца, через которую должна была перехлестнуться бечевка, а второй- на указательный палец внутрь последней фаланги, где палец должен был схватить бечекву. Эти локаторы были названы "thumbConstraint" и "indexConstraint", и привязаны к ближайшим к ним суставам.

Кластеры 2 и 3 были привязаны (point constraint) к "indexConstraint", а кластеры 4 и 5- к "thumbConstraint". Рука и йо-йо были уже анимированы и выполняли требуемые движения, так что мне оставалось лишь заставить бечевку прилипнуть к правому краю каждого из пальцев, включая и выключая веса ограничений в момент, когда пальцы касались бечевки. Причина, по которой на каждый локатор отведено по 2 кластера состоит в том, чтобы соответствовать степени кривизны кривой NURBS (каркасного деформатора), потому как если бы я взял лишь по одному CV для каждой точки, то дуга получилась бы слишком широкой, как видно из рис. 5.

Ну вот и все. Теперь неплохо бы заставить бечевку колебаться. Я даже придумал, как это сделать, но клиенты сказали, что они хотели бы иметь натянутую бечевку, так что я не стану сейчас это описывать.

Посмотреть анимацию yoyo_shd.avi (1M).

30955 Автор:
Актуальность: 69
Качество: 52
Суммарный балл: 121
Голосов: 14 оценки
Зарегистрируйтесь, чтобы добавить комментарий.
Эту страницу просмотрели: * уникальных посетителей