|
Это руководство, написанное Чесом
Джарретом, посвящено анимации йо-йо на
бечевке, обматывающейся вокруг пальцев
изгибающейся руки. Оно содержит
некоторые интересные технические
приемы для решения проблемы
реалистичного изображения движения
бечевки между рукой и йо-йо, а также
остроумное решение, благодаря которому
бечевка закручивается и оборачивается
вокруг модели пальцев. В конце можно
скачать анимацию,- для придания ролику
подобающего вида обычного рендеринга
недостаточно.
Это руководство основано на работе,
которую я недавно делал для 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.
Ну вот и все. Теперь неплохо бы
заставить бечевку колебаться. Я даже
придумал, как это сделать, но клиенты
сказали, что они хотели бы иметь
натянутую бечевку, так что я не стану
сейчас это описывать.
|