Мускулы вашего тела прикреплены к костям, то есть скелет, грубо говоря, представляет собой внутренний каркас, на который «налеплено» все остальное.
По этому же принципу стоятся модели персонажей в компьютерной графике, только здесь скелет является еще и движущей частью модели. Оболочка персонажа соединяется с системой костей и повторяет все ее движения. Использование системы костей позволяет деформировать и сгибать оболочку в местах расположения суставов. Система костей используется не только при моделировании персонажей. С ее помощью можно создать, например, клонящееся под порывами ветра дерево или кнут.
Скелет представляет собой иерархическую цепочку. Создаваемые кости сразу связываются друг с другом соотношением «предок — потомок», при этом наверху оказывается корневой сустав (root joint), который становится предком для всех ниже расположенных костей. В качестве примера рассмотрим ногу (рис. 9.1). Корневым является бедренный сустав. Коленный сустав является по отношению к нему потомком, в свою очередь являясь предком расположенного ниже голеностопного сустава. В самом низу иерархической цепочки находятся пять суставов, управляющих сгибанием пальцев ноги.
Рис. 9.1. Иерархическая цепочка костей, формирующих ногу
Скелет позволяет немедленно получить пригодную для анимации иерархическую цепочку, которая повторяет форму геометрической оболочки. Соответственно, в процессе соединения скелета с оболочкой деформировать последнюю не требуется. Оболочка становится дочерним объектом по отношению к системе костей, то есть ее преобразования повторяют преобразования элементов скелета. Скелет представляет собой всего лишь набор сгруппированных и корректно размещенных опорных точек, называемых суставами (joints). Именно с их помощью осуществляется перемещение, а в некоторых случаях и деформация геометрической оболочки. Кости (bones) всего лишь задают расстояние между двумя суставами. Кроме того, они делают систему более наглядной.
Для анимации системы костей используются методы прямой и обратной кинематики. В первом случае нужная поза придается поворотом самого старшего в иерархической цепочке сустава. Этот метод применялся при создании покадровой анимации, в которой положение кукол менялось и фиксировалось в каждом кадре. Изменение положения куклы достигалось непосредственным поворотом суставов (рис. 9.2).
Рис. 9.2. Анимация по методу прямой кинематики осуществляется непосредственным
поворотом суставов
Поворот сустава влияет на положение всех дочерних по отношению к нему членов иерархической цепочки. Поворот бедренного сустава вверх заставит колено и голеностопный сустав совершить такое движение, как будто нога бьет по мячу. Поворот коленного сустава вниз заставит лодыжку повернуться так, как будто человек садится. Такая форма реакции на преобразования свойственна обычной иерархической цепочке. Именно поэтому данный метод называется методом прямой кинематики (forward kinematics).
В методе обратной кинематики (inverse kinematics (IK)) движением управляет сложная система присоединенных к конечным суставам цепочек IK-манипуляторов (IK-handles). Основа IK-системы присоединяется к суставу, который выбран корневым для данного IK-сегмента. Это может быть произвольный сустав иерархической цепочки.
Кости и суставы в методе обратной кинематики двигаются только под действием IK-манипуляторов. При этом IK-решатель определяет, как повернуть суставы цепочки, чтобы они соответствовали изменившемуся положению манипулятора. Поворот суставов, в свою очередь, приводит к изменению положения костей.
Представьте, что кто-то взял кисть вашей руки и перемещает ее. Этот кто-то, держащий вас за руку, является аналогом IK-манипулятора. Перемещение кисти заставляет остальные кости руки поворачиваться в плечевом и локтевом суставах, а также в области запястья. Анимация начинается с самого младшего члена иерархии (рис. 9.3). Именно поэтому данный метод называется методом обратной кинематики.
Рис. 9.3. При анимации системы костей по методу обратной кинематики суставы вращаются в ответ на перемещение ИК-манипулятора
Рассмотрим систему костей на примере скелета простого двуногого персонажа, созданного из примитивных блоков (рис. 9.4). Каждый блок соответствует определенной части тела, а зазоры между ними соответствуют местам сгибов.
Опорная точка каждого из блоков помещена в том месте, где у обычного скелета располагался бы сустав. Например, опорная точка голени находится в области колена. Блоки сгруппированы таким образом, что ступня движется вместе с голенью, которая, в свою очередь, приводит в движение бедро и тазовую область.
Рис. 9.4. Фигурка человека, созданная из блоков
Кисти рук сгруппированы с предплечьем и далее с плечом, иерархия восходит к позвоночнику и завершается тазовой областью. Голова является дочерним объектом по отношению к шее. Этот участок также входит в состав иерархической цепочки позвоночника. Центром тела, а следовательно корневым суставом, является тазовая область.
Опорная точка скелета
Традиционно корневым суставом в скелетах двуногих персонажей является тазовая область. Именно тут располагается опорная точка фигуры персонажа и его центр тяжести, что обусловлено физическим строением человеческого тела. В компьютерной графике тазовая область становится родительским узлом по отношению ко всей системе костей, и именно она определяет положение персонажа в пространстве и его ориентацию.
Выделить определенную часть персонажа проще всего в окнах диалога Outliner (Структура) и Hypergraph (Просмотр структуры). Здесь особенно ярко проявляется важность присвоения элементам объекта значимых имен.
Вид иерархической цепочки блочной фигуры показан на рис. 9.5. Легко заметить, что все части тела соединены друг с другом связью вида «предок — потомок».
Чтобы лучше рассмотреть структуру этого объекта, загрузите файл block_man_ vOZ.mb, расположенный в папке ChapterFiles\Block_Man\scenes прилагаемого к книге компакт-диска.
Откройте окно диалога Hypergraph (Просмотр структуры) и выберите в меню Options (Параметры) команду Layout > Freeform Layout (Конфигурация > Свободная конфигурация), чтобы получить возможность перемещать узлы удобным для вас способом. Например, можно расположить их в соответствии с формой тела (рис. 9.6). Если при этом перейти в автоматический режим компоновки, выбрав в меню Options (Параметры) команду Layout > Automatic Layout (Конфигурация > Автоматическая конфигурация), заданная вами конфигурация узлов сохранится.
Рис. 9.5. Размещение опорных точек и иерархическая цепочка состоящей из блоков фигуры
Рис. 9.6. Вариант свободной компоновки узлов в окне диалога Hypergraph
Строение фигуры человека, состоящей из блоков, аналогично структуре скелета. Поэтому мы используем его в качестве отправной точки для создания системы костей. Загрузите файл block_man_v01.mb с прилагаемого к книге компакт-диска. Эта сцена также содержит состоящую из блоков фигуру, но, в отличие от предыдущего случая, ее части пока независимы друг от друга.
1. Разверните окно проекции Front (Вид спереди) на весь экран и нажмите клавишу F2 для перехода в режим Animation (Анимация).
2. Выберите в меню Skeleton (Скелет) команду Joint Tool (Сустав) и обратите внимание на то, как при этом изменится форма указателя мыши.
3. Щелкните в центре тазовой области. Здесь будет располагаться первый сустав скелета.
4. При нажатой клавише Shift щелкните в пространстве между тазом и талией.
Нажатие клавиши Shift одновременно со щелчком гарантирует, что сустав будет расположен на соединяющей таз и талию прямой линии. Соединяющие суставы кости являются визуальными направляющими скелета. При этом расположение суставов в пространстве зависит от того, в каком окне проекции оно выполняется.
5. Создайте дополнительные суставы между блоками, составляющими туловище.
6. Перейдем к созданию остальных ветвей иерархической цепочки. Три раза нажмите клавишу Т, чтобы выделить кости вплоть до сустава, расположенного между шеей и грудью.
ПРИМЕЧАНИЕ
Клавиша ↑ позволяет вам подниматься вверх по иерархической цепочке, клавиша
↓ управляет движением вниз.
7. Щелкните в верхней части правого бицепса, чтобы создать там новый сустав. Затем щелчками создайте суставы в областях локтя, запястья и на кончиках пальцев.
8. Нажимайте клавишу Т до тех пор, пока снова не подниметесь до сустава, расположенного между шеей и грудью. Затем повторите шаг 7, чтобы создать вторую руку.
9. Для создания ног вам потребуется опуститься в область таза, то есть выделить корневой сустав.
10. Щелкните в верхней части бедра, а затем в областях колена и лодыжки. Голеностопный сустав должен располагаться посередине между голенью и ступней. Нажмите клавишу Пробел для возвращения к четырехоконной конфигурации, а затем разверните на весь экран окно проекции Side (Вид сбоку). Щелчком создайте суставы на кончиках пальцев.
11. Активизируйте окно проекции Front (Вид спереди) и с помощью клавиши Т вернитесь к корневому суставу. Повторите шаг 10 для создания второй ноги. Закончив формирование цепочки, нажмите клавишу Enter.
Итак, скелет для персонажа готов. Его соединение с оболочкой представляет собой создание иерархической связи между частями тела и соответствующими суставами. Но перед тем как заниматься этим, откройте окно диалога Outliner (Структура) и присвойте всем суставам значимые имена (рис. 9.7). Впрочем, вы можете просто загрузить файл block_ man_skeleton_v01.mb с прилагаемого к книге компакт-диска. Вот как выглядит процесс соединения системы костей с оболочкой:
1. Начните с правой ступни. Сделайте объект r_foot дочерним по отношению к суставу rt_ ankle. Для этого в окне диалога Outliner (Структура) выделите объект r_foot, затем раскройте дерево иерархии объекта Pelvisl и при нажатой клавише Ctrl выделите сустав rt_ankle. Выберите в меню Edit (Правка) команду Parent (Сделать родителем). В данном случае предком становится голеностопный сустав rt_ankle, а не расположенный ниже сустав rt_foot, так как требуется, чтобы ступня наследовала преобразования голени. Проделайте аналогичную операцию для левой ступни.
Рис. 9.7. Присвоение суставам
значимых имен упрощает работу
с системой костей
2. Сгруппируйте остальные части оболочки с соответствующими суставами (рис. 9.8).
Объекты r_shin и l_shin нужно сделать дочерними по отношению к узлам rt_knee и lt_knee соответственно. Объекты r_bicep и Lbicep нужно сделать дочерними по отношению к узлам rt_shoulder и lt_shoulder соответственно.
Рис. 9.8. Вид иерархии системы костей и геометрической оболочки объекта в окнах диалога Hypergraph и Outliner
Объект headl нужно сделать дочерним по отношению к узлу head. Объект neck_2 нужно сделать дочерним по отношения к узлу neck_2, который соответствует суставу, расположенному между двумя шейными отделами. Объект neck_l нужно сделать дочерним по отношению к узлу neck_l, который соответствует суставу, расположенному между грудью и шеей. Объект chest нужно сделать дочерним по отношению к узлу chest, который соответствует суставу, расположенному между грудью и животом. Объект belly нужно сделать дочерним по отношению к узлу belly, который соответствует суставу, расположенному между животом и талией. Объект pelvis нужно сделать дочерним по отношению к корневому суставу pelvisl.
Циклом ходьбы называется анимация нескольких шагов персонажа. Повторяя ее раз за разом, можно заставить персонаж пройти сколь угодно длинный путь. При создании цикла важно, чтобы положение объекта в первом и последнем кадрах полностью совпадало. В противном случае при переходе от одного цикла к другому персонаж будет скачкообразно менять позу.
Попытаемся смоделировать цикл ходьбы методом прямой кинематики. Последовательность действий в данном случае очевидна и напоминает управление конечностями куклы.
Загрузите файл block_man_skeleton_v02.mb с прилагаемого к книге компакт-диска. Он содержит полностью подготовленную к анимации модель. Все ключевые позы вы сможете увидеть на рисунках в соответствующих разделах. Основная анимация разбита на интервалы по пять кадров. Помните о возможности редактирования временных интервалов и углов поворота суставов в окне диалога Graph Editor (Редактор анимационных кривых). Окрашенные в белый цвет конечности показывают удаленную от камеры сторону персонажа.
Начало ходьбы: кадры с первого по пятый
Исходное положение персонажа показано на рис. 9.9. Именно для этой позы будут созданы первые ключи анимации, и именно с нее вы начнете работу над циклом ходьбы.
1. Убедитесь в том, что ползунок таймера анимации установлен на отметку кадра № 1, и создайте ключи анимации для преобразования Rotate (Поворот) всех суставов одновременно. Для выделения суставов используйте окно диалога Outtiner (Структура) или Hypergraph (Просмотр структуры). При анимации персонажа этим способом нужно проверять наличие всех нужных ключей в каждом из ключевых кадров, даже если вы работаете в режиме Auto keyframe (Автоматическая установка ключевых кадров). Затем выделите корневой сустав и создайте ключ анимации для преобразования Translate (Переместить).
СОВЕТ
Для удобства выделения суставов имеет смысл в окне диалога Outliner (Структура) скрыть имена объектов остальных типов. Для этого достаточно выбрать в меню Show (Показать) этого окна команду Objects > Joints (Объекты > Суставы). Вернуться к полному списку объектов можно с помощью команды Show All (Показывать все) из меню Show (Показать).
2. Установите ползунок таймера анимации на отметку кадра № 5. С помощью преобразования Rotate (Повернуть) отведите правую ногу (она окрашена в белый цвет) назад, а затем поверните ступню в обратном направлении, чтобы она опять оказалась параллельна поверхности. Выделите корневой сустав и опустите тело немного вниз, чтобы пятка «задней» ноги касалась поверхности.
3. С помощью преобразования Rotate (Повернуть) переместите левую ногу вперед, согните ее в колене и слегка поверните ступню вверх.
4. С помощью преобразования Rotate (Повернуть) отведите назад правую руку, а левую выдвиньте немного вперед. В данном случае руки должны располагаться в противофазе с ногами. Слегка согните руки в локтях.
5. Слегка согните фигуру в области талии, немного наклоните шею и голову. Полученная таким способом поза показана на рис. 9.10.
Рис. 9.9. Исходная поза персонажа
Рис. 9.10. Положение персонажа в кадре № 5
Рис. 9.11. Третья поза персонажа (кадр № 10)
6. Выделите все суставы персонажа в окне диалога Outliner (Структура) и создайте ключ анимации для преобразования Rotate (Повернуть). Создание ключей анимации для всех суставов одновременно гарантирует синхронность движения всех частей тела.
ВНИМАНИЕ
Если сейчас пренебречь созданием ключей анимации для всех суставов, в дальнейшем создание ключей анимации с помощью функции Auto keyframe (Автоматическая установка ключевых кадров) для отдельных частей модели может выполняться некорректно.
Кадр № 10
На рис. 9.11 показана поза модели в кадре № 10. Это, фактически, центральная стадия шага.
1. Установите ползунок таймера анимации на отметку кадра № 10. Еще немного поверните «заднюю» ногу и выровняйте ступню с поверхностью. Переместите персонаж в отрицательном направлении оси У, чтобы опустить его обратно на поверхность.
2. Поверните «переднюю» ногу вперед и выпрямите колено. Поверните ступню так, чтобы она снова оказалась на поверхности. Слегка поверните руки вперед и немного согните корпус. Создайте ключи анимации для всех суставов.
Кадр № 15
На рис 9.12 показано положение персонажа в кадре № 15. В этот момент он начинает переносить вес тела на «переднюю» ногу. При этом «задняя» нога отрывается от опоры.
Рис. 9.12. Четвертая поза персонажа (кадр № 15)
Рис. 9.13. Пятая поза персонажа (кадр № 20)
Рис. 9.14. Шестая поза персонажа (кадр № 25)
1. Установите ползунок таймера анимации на отметку кадра № 15. Поверните «переднюю» ногу в направлении тела и переместите тело вверх, чтобы вернуть персонаж на опорную поверхность. Колено «задней» ноги поверните вверх, чтобы нога слегка приподнялась, а ступню поверните вниз. Она должна касаться опоры только кончиками пальцев.
2. Начните движение рук в обратном направлении. Корпус практически выпрямите, но пока оставьте наклон головы. Создайте ключи анимации для всех суставов.
Кадр № 20
В кадре № 20 вес тела целиком переносится на «переднюю» ногу, а тело перемещается вверх (рис. 9.13).
1. Поверните «переднюю» ногу таким образом, чтобы она оказалась практически перпендикулярна опорной поверхности, и поднимите тело вверх. Поверните «заднюю» ногу вперед и согните ее в колене.
2. Выпрямите корпус и приведите руки в почти вертикальное положение. Создайте ключи анимации для всех суставов.
Кадр № 25
Теперь пришло время перенести тело вперед, сместив центр тяжести для следующего шага. Поза, которую персонаж должен принять в кадре № 25, показана на рис. 9.14.
1. Установите ползунок таймера анимации на отметку кадра № 25.
2. Поверните левую ногу назад, а правую вынесите вперед для следующего шага. Опустите тело персонажа вниз, чтобы опорная (левая) нога оказалась на плоскости. Создайте ключи анимации для всех суставов.
Кадр № 30
В качестве опорного изображения для создания следующей позы используйте рис. 9.15. Обратите внимание на то, что, по сути, это поза, которую персонаж принимал в кадре № 10, только на этот раз вперед вынесены другая нога и другая рука. Чтобы сделать анимацию более интересной, можно слегка поменять позу персонажа.
Рис. 9.15. Седьмая поза персонажа (кадр № 30)
Завершение работы над циклом ходьбы
Итак, основной набор поз для цикла ходьбы уже создан, осталось создать позы для шага другой ногой. Однако рассмотрим нашу анимацию более внимательно. Например, вы заставили персонаж сделать левой ногой шаг вперед. Теперь нужно, чтобы он сделал шаг правой. Поза в кадре № 35 соответствует позе в кадре № 15, а поза в кадре № 40 — позе в кадре № 20. С этого вы можете начать серию поз для левой ноги.
После завершения работы над 30-кадровым отрывком приходит время инструмента Graph Editor (Редактор анимационных кривых). Меняя положение ключей анимации, можно сделать движение персонажа более естественным. Пока что у нас есть только ключевые позы персонажа, разделенные одинаковыми 5-кадровыми интервалами.
Но ведь для перехода в некоторые позы требуется намного меньше заданных пяти кадров. Например, перейти из исходного положения в первую позу можно всего за четыре кадра. Следующая поза тоже может быть получена за четыре кадра, в то время как для перехода в следующую позу достаточно трех кадров. Вот как выглядит редактирование временных интервалов:
1. Выделите узел pelvis и откройте окно диалога Graph Editor (Редактор анимационных кривых). Раскройте дерево иерархии узла pelvisl на панели Outliner (Структура), щелкнув на квадратике со знаком «плюс», расположенном справа от названия узла. Справа появятся анимационные кривые всех суставов.
2. Выделите рамкой все ключи анимации, кроме расположенных в кадре № 1, и нажмите клавишу w, чтобы активизировать инструмент Move (Переместить). Нажмите клавишу Shift и средней кнопкой мыши перетащите выделенные ключи на один кадр влево. Теперь персонаж принимает вторую позу в кадре № 4.
3. Нажмите клавишу Ctrl и нарисуйте выделяющую рамку вокруг ключей анимации, расположенных в кадре № 4. В результате выделенными окажутся только ключи, расположенные после четвертого кадра. При нажатой клавише Shift переместите их влево на один кадр. Теперь персонаж принимает третью позу в кадре № 8.
4. Снимите выделения с ключей анимации, расположенных в кадре № 8, и при нажатой клавише Shift переместите остальные ключи на два кадра влево. Затем снимите выделение с ключей анимации, расположенных в кадре № 11, и переместите оставшиеся ключи на два кадра влево. Этот участок анимации будет занимать промежуток с кадра №11 по кадр № 14. Следующий участок анимации должен занимать с 14-го по 18-й кадры. Завершающий отрезок анимации занимает с 18-го по 22-й кадры.
5. Создайте ключи анимации для еще одного или двух циклов ходьбы. Основное время в этом случае уйдет на редактирование временных интервалов, ведь именно этот аспект делает анимацию достоверной. Попытайтесь также сместить ключи анимации, управляющие движением рук, на кадр влево или вправо, чтобы сделать эти перемещения не такими монотонными.
Чтобы увидеть готовый цикл ходьбы, загрузите файл block_man_skeleton_walk_ vOl.mb с прилагаемого к книге компакт-диска. Это довольно грубая ацимация, и при желании вы можете усовершенствовать ее, отредактировав анимационные кривые. Результат анимации был визуализирован и сохранен в двух разных форматах. Вы найдете эти файлы в папке ChapterFiles\Block_Man\images.
В процессе анимации персонажа сложнее всего было сохранять его контакт с опорной поверхностью. Избежать подобных проблем позволяет метод обратной кинематики, с которым вы познакомитесь в следующем разделе данной главы.
Подведем итоги
Основной целью упражнения по созданию цикла ходьбы было получение практических навыков работы с системой костей и ключами анимации. Это превосходный способ отточить свои способности аниматора. Подробное описание техник анимации персонажей выходит за рамки данной книги. Вы можете найти сведения о них в специальной литературе.
Изучение принципов работы с системами костей мы продолжим на примере рисования руки. Скелет будет использован для деформации геометрии и моделирования обычных движений руки.
Загрузите файл poly_hand_sketeton_v01.ma из папки ChapterFiles\Poly_Hand_ Anim\scenes прилагаемого к книге компакт-диска. Сцена содержит полигональную модель руки.
Вам предстоит создать систему костей для этой руки и соединить ее с рукой. Этот процесс называется сборкой персонажа (rigging).
Вот как выглядит процесс создания системы костей для руки:
1. Разверните на весь экран окно проекции Тор (Вид сверху) и нажмите клавишу F2 для перехода в режим Animation (Анимация).
2. Выберите в меню Skeleton (Скелет) команду Joint Tool (Сустав) и обратите внимание на то, как при этом изменится форма указателя мыши.
3. Первый сустав поместите в основании запястья. Это будет корневой сустав иерархической цепочки.
Рис. 9.16. Система костей руки
Рис. 9.17. Результат размещения суставов во всех окнах проекции
4. При нажатой клавише Shift щелкните в нижней части ладони.
5. Создайте ответвление иерархической цепочки для большого пальца (рис. 9.16).
6. Чтобы продолжить создание суставов ладони, вернитесь ко второму от начала суставу, несколько раз нажав клавишу ↑.
7. Следующий сустав нужно создать в центре ладони. Чуть ниже должен оказаться следующий сустав, от которого начнут ответвляться иерархические цепочки остальных пальцев. Результат этих действий показан на рис. 9.16. С помощью созданной системы костей вы и анимируете пальцы.
Вернитесь к стандартному четырехоконному представлению и посмотрите, как выглядит созданная система в остальных окнах проекции. Положение отдельных участков цепочки нужно отредактировать, поместив их внутрь оболочки (рис. 9.17).
Для перемещения суставов в Maya используется как обычный режим преобразования Move (Переместить), так и режим перемещения опорной точки. Сначала активизируйте инструмент Move (Переместить) и выделите сустав, расположенный на кончике мизинца. Переместите его вниз таким образом, чтобы он оказался внутри оболочки. Затем переместите верхний сустав мизинца. Обратите внимание на то, что это действие сопровождается перемещением остальной части цепочки.
Если же вам требуется изменить положение сустава, не затрагивая всю цепочку, воспользуйтесь режимом перемещения опорной точки, для активизации которого достаточно нажать клавишу Insert. Перемещайте суставы цепочки, пока не получите систему, показанную на рис. 9.18 и 9.19.
Рис. 9.18. Корректное размещение системы костей руки
Неотъемлемой частью сборки персонажей является процесс связывания системы костей с геометрической оболочкой (skinning) — особый способ соединения скелета и геометрии. Если в предыдущем случае вы непосредственно присоединяли части объекта к участкам иерархической цепочки за счет формирования связей вида «предок — потомок», то теперь вам предстоит иметь дело с кластерами (clusters), то есть группами вершин или управляющих точек, отвечающих за деформацию модели. Именно так скелеты используются для анимации персонажей.
Рис. 9.19. Другая проекция руки с системой костей
По своей сути техника связывания довольно проста. Однако она дает почти полный контроль над деформацией геометрии.
Связывание: общие сведения
В теории связывание идентично деформатору Lattice (Решетка), знакомому вам по главе 6. Как вы помните, присоединенная к объекту решетка может влиять на различные части модели. Каждый ее участок воздействует на определенные управляющие точки NURBS-поверхности или вершины полигональной сетки и в процессе перемещения изменяет вид объекта.
Связывание оболочки со скелетом приводит к аналогичному результату. Точки модели соединяются с костями, в результате чего перемещения костей вызывают преобразования оболочки.
Соединив вершины или управляющие точки модели со скелетом, вы получаете возможность деформировать оболочку. При перемещении кости или при ее повороте в суставе оболочка следует за скелетом, принимая новые очертания.
Непосредственно связать геометрию с оболочкой можно двумя способами — жестким и мягким. При этом у вас остается возможность влиять на вид геометрии с помощью присоединенных к скелету деформаторов и решеток, но в данном случае мы используем прямые методы. На рис. 9.20 показан результат действия команды Rigid Bind (Жесткое связывание), а на рис. 9.21 — результат действия команды Smooth Bind (Мягкое связывание).
Создайте NURBS-цилиндр, разбитый по высоте на 16 или даже более интервалов. В данном случае чем выше степень разбиения, тем лучше будет гнуться модель. Продублируйте цилиндр и сдвиньте копию в сторону. Затем в окне проекции Front (Вид спереди) создайте простой скелет, состоящий из пяти суставов, начинающийся в нижней части цилиндра и заканчивающийся у верхнего основания. Продублируйте цепочку костей и поместите ее в центр второго цилиндра.
Рис. 9.20. Результат жесткого связывания цилиндра. Складка четко выражена
Рис. 9.21. Результат мягкого связывания цилиндра. В данном случае мы имеем
более гладкую складку
Жесткое связывание
Жесткое связывание является более простым, так как в этом случае каждый сустав в единицу времени воздействует только на одну точку поверхности. Команда Rigid Bind (Жесткое связывание) группирует управляющие вершины NURBS-no-верхности или вершины полигональной сетки в кластеры, которые, в свою очередь, присоединяются к костям. Совместное воздействие нескольких суставов на управляющие вершины невозможно. Именно поэтому модель будет иметь более выраженную складку, чем при мягком связывании.
Для выполнения жесткого связывания выделите первую систему костей, а затем при нажатой клавише Shift выделите цилиндр. Выберите в меню Skin (Оболочка) команду Bind Skin (Связать с оболочкой) и щелкните на квадратике, расположенном справа от команды Rigid Bind (Жесткое связывание).
Появится окно диалога с параметрами жесткого связывания. Сейчас нас вполне устроят значения, заданные по умолчанию. Раскрывающийся список Bind To (Связать с) определяет, будет ли с геометрией связан весь скелет или же только указанные вами суставы. Выбрав вариант Selected Joints (Выделенные суставы), вы сможете задать степень влияния системы костей на модель. Впрочем, в данном случае мы оставим заданный по умолчанию вариант Complete Skeleton (Co всем скелетом).
Установите флажок Color Joints (Окрашивание суставов), чтобы каждый связанный сустав был окрашен в свой цвет. В некоторых случаях это облегчает рабочий процесс. Переключатель Bind Method (Способ связывания) определяет способ соединения с оболочкой модели. Например, когда он установлен в положение Closest Point (К ближайшей точке), объединение точек поверхности в кластеры происходит в зависимости от ближе всего расположенного сустава. Если же установить его в положение Partition Set (Распределенный набор), вы сможете самостоятельно выбирать точки поверхности, которые будут связаны с тем или иным суставом.
Если пользователь определяет наборы точек поверхности для каждого имеющегося сустава, программа в итоге назначает каждый из наборов ближайшему суставу. Например, можно указать, что точки в верхней части поверхности входят в набор, которым управляет сустав, расположенный снизу.
В данном случае мы оставляем для всех параметров заданные по умолчанию значения, поэтому просто щелкните на кнопке Bind Skin (Связать оболочку) в окне диалога Rigid Bind Skin Options (Параметры жесткого связывания). В итоге выделенным окажется корневой сустав связанной с первым цилиндром системы костей, а цилиндр приобретет пурпурный цвет, что показывает наличие входных связей.
Мягкое связывание
При мягком связывании один сустав может влиять на несколько точек оболочки модели. Это позволяет при повороте суставов сгибать довольно далеко расположенные от них области. Суставы влияют на точки поверхности в различной степени, убывающей по мере удаления от сустава и выражаемой числом от 0 до 1. Величина суммарных воздействий всех суставов не может превышать 1. Maya автоматически вычисляет величины воздействий при связывании, хотя пользователь позднее может изменить их.
Выделите вторую цепочку костей и второй цилиндр, выберите в меню Skin (Оболочка) команду Bind Skin (Связать с оболочкой) и щелкните на квадратике, расположенном справа от команды Smooth Bind (Мягкое связывание). В появившемся окне диалога вы увидите уже знакомый раскрывающийся список Bind To (Связать с). В расположенном ниже раскрывающемся списке Bind Method (Способ связывания) по умолчанию выбран вариант Closest Joint (С ближайшим суставом). Это означает, что точки оболочки связываются с ближайшим к ним суставом цепочки костей. Такой вариант чаще всего используется в работе с персонажами, так как в этом случае уделяется внимание компоновке скелета.
Скажем, бедренный сустав левой ноги не будет влиять на поверхность правой ноги, несмотря на то что он расположен на небольшом расстоянии от этой поверхности. Если же вы выберете в раскрывающемся списке Bind Method (Способ связывания) вариант Closest Distance (По ближайшему расстоянию), суставы будут воздействовать на ближайшие точки поверхности без учета своего положения в иерархии.
Параметр Max Influence (Максимальное влияние) определяет количество суставов, которые могут воздействовать на одну точку поверхности. Атрибут Dropoff Rate (Уровень спада) задает уменьшение влияния сустава с увеличением расстояния. Скажем, плечевой сустав может в различной степени влиять на натяжение мышц руки, грудной клетки и живота. Ограничивая значения указанных параметров, вы можете управлять воздействием на модель отдельных суставов. В данном случае также лучше оставить заданные по умолчанию значения параметров, поэтому просто щелкните на кнопке Bind Skin (Связать оболочку) в окне диалога Smooth Bind Skin Options (Параметры мягкого связывания). Теперь согните оба цилиндра и внимательно рассмотрите, чем именно они различаются. Разница между сгибами цилиндров проиллюстрирована на рис. 9.22.
Рис. 9.22. Цилиндр меньшего размера демонстрирует результат изгиба при жестком связывании, а цилиндр большего — результат изгиба при мягком связывании
Разрыв связи со скелетом
Чтобы разрушить связь между системой костей и геометрической оболочкой объекта, достаточно выделить скелет и оболочку и выбрать в меню Skin (Оболочка) команду Detach Skin (Отсоединить оболочку). Модель вернется к исходной форме. Иногда в процессе поиска оптимальной конфигурации операции связывания и разрыва связи приходится повторять несколько раз.
Впрочем, существует возможность вернуть объект в исходное состояние и без разрыва связи между скелетом и оболочкой. Достаточно выделить скелет и выбрать в меню Skin (Оболочка) команду Go to Bind Pose (Перейти к позе привязки). Скелет и оболочка вернутся в положение, которое они имели до связывания. К этой операции имеет смысл прибегать, например, при редактировании весов влияния суставов на вид оболочки.
Создание изгибов и складок
Существует простой способ создания изгибов и складок на поверхности модели. Достаточно связать модель с системой костей и деформировать ее нужным образом. Затем можно разорвать связь между скелетом и оболочкой, зафиксировав результат деформации. Для этого достаточно установить флажок Bake History (Завершение работы с историей конструирования) в окне диалога Detach Skin Options (Параметры разрыва связи с оболочкой), которое вызывается щелчком на квадратике, расположенном справа от команды Detach Skin (Отсоединить оболочку) в меню Skin (Оболочка). Затем остается щелкнуть на кнопке Detach (Отсоединить), и модель потеряет связь с системой костей, сохранив тем не менее форму.
Аналогичный способ применялся при удалении деформаторов. Впрочем, при разрыве связи с оболочкой история конструирования, не касающаяся операции связывания, сохраняется. При необходимости ее можно удалить отдельно с помощью команды меню Edit (Правка).
Так как складки в местах сгиба пальцев выражены достаточно четко, для начала мы используем жесткое связывание.
Загрузите файл poly_hand_skeleton_v02.ma с прилагаемого к книге компакт-диска и выполните следующие действия:
1. Выделите корневой сустав системы костей (он располагается в области запястья), а затем при нажатой клавише Shift выделите объект polySurface2.
2. Выберите в меню Skin (Оболочка) команду Bind Skin (Связать с оболочкой) и щелкните на квадратике, расположенном справа от команды Rigid Bind (Жесткое связывание). В появившемся окне диалога установите флажок Color Joints (Окрашивание суставов) и щелкните на кнопке Bind Skin (Связать оболочку). Это свяжет геометрическую оболочку руки и систему костей.
3. Выделите несколько суставов в области костяшек и поверните их. Обратите внимание на то, как при этом сгибаются пальцы. При повороте на большой угол, особенно в случае полигональной модели, возможны самопересечения геометрии.
Редактирование результатов жесткого связывания
Жесткое связывание оболочки с системой костей вовсе не обязано сопровождаться появлением резких складок. Специальные инструменты, называемые флексорами (flexors), позволяют сглаживать нужные вам области, добиваясь более приемлемого вида. Наиболее часто они применяются в области плечевых или бедренных суставов, в которых, в отличие от локтевого сгиба, появление складок нежелательно. Флексоры также позволяют избежать самопересечений геометрии:
1. Выберите в меню Skin (Оболочка) команду Go to Bind Pose (Перейти к позе привязки), чтобы вернуть руку в исходное положение.
2. Выделите центральный сустав указательного пальца и выберите в меню Skin (Оболочка) команду Edit Rigid Skin > Create Flexor (Правка жесткой оболочки > Создать флексор). Появится окно диалога с параметрами флексора.
3. Обратите внимание на то, что параметры флексора аналогичны параметрам уже знакомого вам по главе 6 деформа-тора Lattice (Решетка). Как вы помните, количество секций решетки можно установить позднее в окне диалога Attribute Editor (Редактор атрибутов), поэтому в данном случае не имеет смысла заранее указывать этот параметр. Его можно выбрать позднее, исходя из практической необходимости. Щелкните на кнопке Create (Создать), и вокруг выделенного сустава появится решетка (рис. 9.23).
Рис. 9.23. Результат создания флексора для центрального сустава указательного пальца
4. В окне диалога Outliner (Структура) выделите строчку jointFfdlLatticeGroup. Для поиска этого узла вам потребуется раскрыть дерево иерархии объекта jointl. Измените размер флексора таким образом, чтобы он совпал с суставом пальца (рис. 9.24).
Рис. 9.24. Результат изменения размера флексора в соответствии с размерами пальца
5. Правильно размещенный флексор сглаживает результат деформации объекта. Слегка растянув флексор по длине пальца, вы избежите самопересечений геометрии при сгибе. При этом складка в районе сгиба будет довольно ярко выражена (рис. 9.25).
Рис. 9.25. Несмотря на резкую складку в области сгиба пальца, самопересечений
геометрии не возникает
6. Создайте флексоры для остальных пальцев, разместив их в местах сгибов. Отмасштабируйте решетки флексоров в соответствии с размерами суставов. Результат сгиба пальца под действием флексоров показан на рис. 9.26.
Модель руки с созданными для указательного пальца флексорами находится в файле poly_hand_skeleton_v03.ma. Создайте флексоры для остальных пальцев и анимируйте руку, заставив пальцы взять карандаш или нажать кнопку.
Теперь попробуем связать оболочку с системой костей другим способом.
Продолжим работу с файлом poly_hand_skeleton_v02.ma с прилагаемого к книге компакт-диска. Выполните следующие действия:
Рис. 9.26. Результат сгиба указательного пальца под действием трех флексоров
1. Выделите корневой сустав, расположенный в области запястья, и верхний узел полигональной оболочки. Выберите в меню Skin (Оболочка) команду Bind Skin > Smooth Bind (Связать с оболочкой > Мягкое связывание).
2. Поверните пальцы в области суставов и посмотрите, как на это преобразование реагирует оболочка. Затем верните в позу привязки.
3. Выделите центральный сустав указательного пальца и поверните его вниз. Обратите внимание на то, как утончается оболочка в месте сгиба. Выделите верхний сустав указательного пальца и поверните его. Форма ладони при этом изменится. Эта преувеличенная деформация связана с тем, что рука была создана на основе сетки полигонов. Реакция на аналогичное воздействие NURBS-руки была бы менее выраженной. Результат сгиба указательного пальца показан на рис. 9.27.
Рис. 9.27. Сгиб указательного пальца приводит к появлению лишних деформаций
Редактирование результатов мягкого связывания
Результаты мягкого связывания обычно редактируются путем раскраски весов оболочки. Как вы помните, каждая точка оболочки испытывает на себе воздействие нескольких суставов, поэтому крайне важно правильно указать влияние каждого из этих воздействий, по-другому, его вес.
1. Нажмите клавишу 5 для перехода в режим показа тонированных оболочек объектов. Выделите руку, выберите в меню Skin (Оболочка) команду Edit Smooth Skin (Правка гладкой оболочки) и щелкните на квадратике, расположенном справа от команды Paint Skin Weight Tool (Инструмент раскраски весов оболочки).
ПРИМЕЧАНИЕ
Инструмент Paint Skin Weight Tool (Инструмент раскраски весов оболочки) влияет только на состояние геометрической оболочки, не затрагивая самих суставов. Поэтому перед применением этого инструмента выделить нужно весь объект, а не только систему костей.
Рука окрасится в черный цвет, переходящий в серый в области запястья. Кроме того, появится окно диалога с параметрами выбранного инструмента и списком всех суставов, соединенных с рукой.
Цветовое значение (между белым и черным цветами) определяет силу влияния выбранного сустава на выбранный участок геометрии. Желательно присваивать суставам значимые имена, чтобы ускорить рабочий процесс и сделать его более интуитивным. Проделайте эту операцию, если вы пользуетесь файлом с компакт-диска.
2. Убедитесь в том, что переключатель Paint Operation (Операция) в разделе Paint Weight (Раскраска весов) установлен в положение Replace (Заменить). Введите в поле Value (Величина) значение 0. Параметры Radius (U) (Радиус (Верхний)) и Radius (L) (Радиус (Нижний)) из раздела Brush (Кисть) отвечают за размер кисти. В данном случае важно, чтобы параметр Opacity (Непрозрачность) имел значение 1.
3. При нажатой левой кнопке мыши указателем раскрасьте области руки и ладони, на которые не должен воздействовать сустав jointl при сгибе указательного пальца (рис. 9.28).
Рис. 9.28. Раскраска весов позволяет избежать ненужных деформаций при сгибе суставов
ПРИМЕЧАНИЕ
При мягком связывании веса" оболочки должны быть нормализованы. Это означает, что сумма всех весов не может превышать 1. Соответственно, понижение веса одного из суставов автоматически увеличивает влияние остальных суставов иерархической цепочки, относящейся к рассматриваемой области оболочки.
4. Сгладьте область перехода от белого к черному. Для этого в окне диалога Tool Settings (Параметры инструмента) установите переключатель Paint Operation (Операция) в положение Smooth (Сгладить). Для сглаживания области вокруг сустава используйте правую кнопку мыши. После этого указательный палец будет сгибаться совершенно корректно.
Для завершения работы с инструментом Paint Skin Weight Tool (Инструмент раскраски весов оболочки) достаточно активизировать любой другой инструмент, например, нажав клавишу w. Это вернет вас в обычный режим показа тонированных оболочек объектов.
Определите таким же способом силу воздействия остальных суставов, а затем анимируйте руку методом прямой кинематики, заставив ее сделать какой-либо жест или, например, взять карандаш.
ВНИМАНИЕ
При раскраске весов полигональной оболочки нужно помнить о том, что этот процесс задействует проекционные координаты. Поэтому в некоторых случаях вам не обойтись без создания новых проекционных координат. Особенно важно это при импорте и экспорте карт весов. Впрочем, с последней процедурой вам вряд ли предстоит столкнуться на начальном этапе изучения Maya.
Модель руки с раскрашенными весами указательного пальца находится в файле poly_hand_skeleton_v04.ma. По аналогии раскрасьте веса остальных суставов.
ПРИМЕЧАНИЕ
Для получения хорошей анимации крайне важно правильно произвести оснастку персонажа. В профессиональных студиях эта задача входит в обязанности технического директора. Потраченное на оснастку время окупается, когда наступает момент анимации.
Метод обратной кинематики позволяет размещать конечности персонажа в строго определенных местах, то есть избавляет от необходимости перемещать скелет или модель, чтобы сохранить соприкосновение с опорой.
Для анимации ног используется исключительно метод обратной кинематики. В то же самое время для анимации рук не существует однозначно предпочтительной последовательности действий. Многие применяют и в этом случае метод обратной кинематики, но обычно имеет смысл использовать его только для задания движений ног, а остальные части тела анимировать по методу прямой кинематики. Это связано с необходимостью привязать ноги к опорной поверхности. В то же время руки во время цикла ходьбы двигаются свободно, а создание для них IK-манипуляторов увеличивает рабочую нагрузку на стадии анимации.
Вернемся к составленной из блоков фигуре человека. Загрузите файл block_man_ skeleton_v02.mb из папки ChapterFiles\Block_Man\scenes прилагаемого к книге компакт-диска. Вам предстоит создать IK-цепочку от бедра до лодыжки. В данном случае IK-цепочка от бедра до пальцев ноги будет работать некорректно.
Так как при анимации по методу обратной кинематики цепочка суставов будет автоматически изгибаться в соответствии с расположением концевого эффектора (он же называется IK-манипулятором), вам нужно указать направление сгиба конкретных суставов. Для этого потребуется слегка согнуть колени персонажа.
1. Выделите коленные суставы и нажмите клавишу Insert для перехода в режим редактирования опорной точки. Слегка переместите эти суставы вперед, чтобы сформировать сгиб в колене.
2. Выберите в меню Skeleton (Скелет) команду IK Handle Tool (IK-манипулятор). В результате указатель мыши примет форму креста.
3. Щелкните на бедренном суставе левой ноги (это будет корневой сустав IK-цепочки), а затем — на суставе в области пятки. Повторите этот процесс для второй ноги. Полученный результат показан на рис. 9.29.
Рис. 9.29. IK-манипуляторы ног, корневые суставы которых располагаются в области бедер
Если по какой-то причине вы не в состоянии выделить сустав для 1К-цепочки, убедитесь в том, что в меню Show (Показать) окна проекции рядом с командой Pivots (Опорные точки) стоит галочка. Кроме того, если вам сложно рассмотреть манипуляторы, вы можете увеличить их размер, выбрав в меню Display (Отображение) команду IK Handle Size (Размер 1К-манипулятора).
4. Подвигайте IK-манипуляторы, чтобы увидеть реакцию ног. Затем верните ноги в исходное положение.
5. Выделите корневой сустав скелета и переместите его. Это вызовет перемещение всей системы. Выделите оба IK-манипулятора и нажмите комбинацию клавиш Shift+w, чтобы создать ключи анимации для атрибутов преобразования перемещения. В результате ступни будут жестко закреплены на опорной плоскости. Попытка опустить вниз тазовый сустав приведет к сгибу коленей. При этом ступни погрузятся в опорную плоскость.
6. Верните тазовый сустав в исходное положение. Теперь нужно создать ПС-манипуляторы для ступней, закрепив их тем самым на опорной плоскости. Активизируйте инструмент IK Handle Tool (IK-манипулятор). Первый щелчок сделайте в районе пятки, а второй — на кончиках пальцев. Повторите операцию для второй ноги.
СОВЕТ
Для повторной активизации только что использовавшегося инструмента достаточно нажать клавишу
y.
7. Создайте ключи анимации для атрибутов преобразования перемещения новых IK-манипуляторов. Теперь перемещение вниз тазового сустава будет приводить к сгибу ног не только в коленях, но и в области лодыжки.
Так как теперь ноги принудительно сохраняют контакт с опорной поверхностью, создание цикла ходьбы будет более простой задачей, чем при анимации методом прямой кинематики. Впрочем, для создания достоверного и красивого движения методом обратной кинематики все равно требуется довольно большой опыт.
Загрузите файл block_man_IK_v01.mb из папки ChapterFHes\Block_Man\scenes прилагаемого к книге компакт-диска или продолжите выполнение предыдущего упражнения. Как и раньше, выделенные белым рука и нога располагаются дальше от камеры. Программирование основных движений персонажа снова будет заключаться в создании ключей анимации, разделенных промежутками по пять кадров. Чтобы сократить упражнение, мы ограничимся заданием положений ноги. Анимировать руки при желании вы можете самостоятельно, воспользовавшись инструкцией из упражнения, посвященного моделированию цикла ходьбы методом прямой кинематики.
1. Установите ползунок таймера анимации на отметку кадра № 1 и создайте ключи для преобразования Translate (Переместить) корневого сустава и всех 1К-ма-нипуляторов.
2. Установите ползунок таймера анимации на отметку кадра № 5 и переместите корневой сустав на одну клеточку вперед. Ноги и ступни слегка приподнимутся и растянутся, чтобы сохранить связь с опорной поверхностью. Слегка опустите корневой сустав, чтобы убрать это натяжение. Создайте ключ анимации для тазового сустава. У вас должна быть включена функция Auto keyframe (Автоматическая установка ключевых кадров), поэтому ключи для остальных частей тела персонажа будут созданы автоматически.
3. Выделите IK-манипулятор, расположенный в области левой пятки, и переместите его вперед и вверх. Персонаж должен принять позу, показанную на крайнем левом рисунке.
4. Установите ползунок таймера анимации на отметку кадра № 10. Поставьте переднюю ногу на опорную поверхность, а затем переместите тазовый сустав на три четверти клеточки вперед. Создайте ключи анимации для атрибутов преобразования перемещения IK-манипулятора ступни «задней» ноги, фиксируя ее положение. При этом тазовый сустав должен находиться на такой высоте, чтобы «задняя» нога практически стояла на опорной поверхности, как показано на центральном изображении.
5. Установите ползунок таймера анимации на отметку кадра № 15. Переместите тазовый сустав почти на две клетки вперед. Нужно, чтобы центр тяжести оказался над опорной ногой. Поднимите «заднюю» ногу, согнув ее в колене, как показано на изображении справа.
6. Установите ползунок таймера анимации на отметку кадра № 20. Переместите тазовый сустав на одну клетку вперед и вынесите вперед выделенную белым ногу, как показано на изображении слева.
7. Переместите тазовый сустав на три четверти клетки вперед и поставьте «переднюю» ногу на опорную плоскость, как показано на изображении справа. Создайте ключи анимации для ступни «задней» ноги, фиксируя ее положение.
Следующая поза должна совпасть с позой из кадра № 10, только на этот раз вперед будет вынесена другая нога. Продолжите создание цикла ходьбы самостоятельно. При этом каждая следующая поза должна быть симметрична положению тела, установленному 15 кадрами ранее. Методом прямой кинематики анимируйте руки, чтобы придать движениям персонажа большую достоверность.
Многие аниматоры применяют IK-цепочки не столько для анимации персонажей, сколько для получения определенных эффектов. Эти цепочки позволяют убедительно сымитировать движения кнута и веревки, трепещущий на ветру флаг, подпрыгивающий хвост пони и поршень насоса. Например, воспользовавшись другим решением метода обратной кинематики (оно называется Spline [Сплайн]), вы получите возможность контролировать форму скелета с помощью NURBS-сплайна. Это требуется, например, при моделировании змей или других длинных деформируемых объектов.
Для создания манипулятора IK-сплайна выберите в меню Skeleton (Скелет) команду IK Spline Handle Tool (Манипулятор IK-сплайна) и дважды щелкните на суетавах скелета, указывая положение верхнего сустава и концевого эффектора. Это приведет к появлению сплайна по всей длине цепочки суставов. Редактирование кривизны сплайна заставляет двигаться кости, которые, в свою очередь, заставляют двигаться связанную с ними геометрию. Пример манипулятора IK-сплайна показан на рис. 9.30.
Рис. 9.30. Состояние сплайновой IK-цепочки определяется кривизной лежащего в ее основе
NURBS-сплайна. Редактирование положения управляющих точек этого
сплайна вызывает перемещение суставов
Как вы уже знаете, работа в Maya связана с созданием связей между узлами различных объектов. Это позволяет вам получить анимацию одного объекта на основе анимации другого. Подобную задачу можно решить не только формированием уже знакомых вам иерархических цепочек, но и с помощью ограничений (constraints).
Ограничения создают прямую связь между различными атрибутами объекта-источника и объекта-мишени. В этом разделе мы поговорим о шести различных ограничениях: Point (Точка), Orient (Ориентация), Scale (Масштабирование), Aim (Цель) Geometry (Геометрия) и Normal (Нормаль).
Чтобы заставить один объект изменять свое положение вслед за изменением положения другого (мишени), применяется ограничение Point (Точка). При этом соединяются только атрибуты, отвечающие за преобразование перемещения. Выделите мишень, а затем — при нажатой клавише Shift — ограничиваемый (соединяемый с ней) объект и щелкните на квадратике, расположенном справа от команды Point (Точка) в меню Constrain (Ограничить).
В окне диалога с параметрами создаваемого ограничения можно вручную указать, например, расстояние между ограничиваемым и ограничивающим объектом. Действие ограничений привязано к положению опорных точек участвующих во взаимодействии объектов. Ограничение Point (Точка) связывает опорную точку ограничиваемого объекта с опорной точкой мишени. Следовательно, атрибут Offset (Смещение) указывает расстояние между этими опорными точками относительно соответствующих осей.
Для ограничения одного объекта можно использовать несколько мишеней. В результате положение ограничиваемого объекта будет вычислено как среднее арифметическое воздействия всех мишеней. Силу воздействия каждой из них задает параметр Weight (Вес).
На рис. 9.31 показан результат ограничения конуса с помощью сферы по типу Point (Точка). Теперь перемещение сферы будет вызывать аналогичное перемещение конуса. Основное отличие подобной системы от обычной иерархической цепочки заключается в том, что влияние сферы распространяется только на преобразование перемещения. Поворот или масштабирование сферы не вызовет аналогичного поворота или масштабирования конуса.
Рис. 9.31. Результат ограничения типа Point, при котором в роли ограничиваемого объекта выступает конус, а в роли мишени — сфера
Разумеется, объекты, находящиеся под действием ограничений, могут быть ани-мированы по методу ключевых кадров. Нужно помнить только о том, что после создания ограничения вы уже не сможете управлять атрибутами преобразования перемещения ограниченного объекта, так как ими будет управлять мишень.
Ограничения типа Point (Точка) замечательно подходят для моделирования, например, персонажа, несущего трость или меч. Вы сохраните возможность запрограммировать вращение меча, но вместе с тем он будет совершать те же перемещения, что и держащая его рука.
Ограничение Orient (Ориентация) соединяет атрибуты преобразования поворота мишени и ограничиваемого объекта. Для его создания сначала выделите мишень или мишени, а затем — ограничиваемый объект и щелкните на квадратике, расположенном справа от команды Orient (Ориентация) в меню Constrain (Ограничить).
Параметр Offset (Смещение), как и в предыдущем случае, позволяет задать смещение объектов относительно друг друга по любой оси. Если оставить ему заданные по умолчанию нулевые значения, положения мишени и ограничиваемого объекта совпадут. При наличии нескольких мишеней ориентация ограничиваемого объекта определяется как среднее арифметическое их ориентации. На рис. 9.32 показан пример ограничения типа Orient (Ориентация). Ориентацией конуса управляет ориентация удлиненной сферы.
Рис. 9.32. Ориентация конуса
всегда будет совпадать
с ориентацией сферы
Ограничение Orient (Ориентация) позволяет сэкономить силы и время в случаях, когда требуется заставить два объекта поворачиваться в одном направлении. Например, если два быстроходных катера несутся по реке нос к носу, поворот одного должен сопровождаться поворотом другого, чтобы сохранить общий курс. В данном случае можно задать небольшое смещение между катерами и смоделировать сцену так, чтобы второй катер как бы реагировал на действия первого. В этом случае анимация будет более убедительной.
Ограничение Scale (Масштабирование) соединяет атрибуты преобразования масштабирования ограничиваемого объекта и мишени или мишеней. Для создания этого ограничения, как и в предыдущих случаях, сначала требуется выделить мишень или их набор, а потом — ограничиваемый объект. Затем остается щелкнуть на квадратике, расположенном справа от команды Scale (Масштабирование) в меню Constrain (Ограничить).
Параметр Offset (Смещение) в данном случае определяет разницу масштабов ограничиваемого объекта и мишени относительно каждой из координатных осей. При заданных по умолчанию единичных значениях размер ограничиваемого объекта полностью совпадет с размером мишени. При наличии нескольких мишеней размер объекта определяется как среднее арифметическое их вкладов. Пример ограничения типа Scale (Масштабирование) показан на рис. 9.33. Размер конуса по каждой из координатных осей определяется размером сферы.
Рис. 9.33. Масштаб конуса определяется масштабом сферы
Ограничение Scale (Масштабирование) обычно применяется для того, чтобы добиться совпадения размеров объектов. Например, если пневматический шланг надувает одновременно несколько аэростатов, имеет смысл «привязать» размер всех шаров к размеру одной и той же мишени. Это избавит вас от необходимости анимировать атрибуты преобразования масштабирования всех шаров. Или, скажем, если персонаж мультфильма смотрит на что-то выпученными глазами, достаточно ограничить размер одного глаза по размеру другого, и глаза будут вылезать из орбит одновременно.
Ограничение Aim (Цель) регулирует ориентацию ограничиваемого объекта таким образом, что он всегда оказывается нацеленным на мишень. В данном случае для создания ограничения сначала выделите мишень или мишени и только в конце — ограничиваемый объект. Затем остается щелкнуть на квадратике, расположенном справа от команды Aim (Цель) в меню Constrain (Ограничить).
Это ограничение имеет дополнительные параметры, так как вам требуется указать, например, какая из осей ограничиваемого объекта будет нацелена на мишень. Для этого применяются атрибуты Aim Vector (Вектор цели) и Up Vector (Вектор вертикали).
В примере с конусом и сферой (рис. 9.34) атрибут Aim Vector (Вектор цели) имеет значение (О, 1, 0). Соответственно, на опорную точку сферы нацелена ось У, то есть вершина конуса. Если же присвоить параметру Aim Vector (Вектор цели) значение (1,0, 0), на опорную точку сферы будет нацелена боковая часть конуса.
Рис. 9.34. Конус, нацеленный на сферу
Параметр Offset (Смещение) задает атрибут преобразования поворота ограничиваемого объекта, заставляя этот объект наклоняться в ту или другую сторону. Параметр Up Vector (Вектор вертикали) определяет, в какую сторону будет обращена указывающая на сферу вершина конуса.
Ограничение Aim (Цель) замечательно подходит для анимации нацеленной на определенный объект камеры.
Ограничения Geometry (Геометрия) и Normal (Нормаль) связывают указанный пользователем объект с поверхностью мишени.
В результате применения ограничения Geometry (Геометрия) на поверхности объекта-мишени оказывается опорная точка ограничиваемого объекта. При этом его атрибуты не блокируются, что позволяет этому объекту скользить вдоль поверхности мишени. Процесс создания данного ограничения все так же включает в себя выделение мишени, ограничиваемого объекта и выбор в меню Constrain (Ограничить) команды Geometry (Геометрия).
Это ограничение крайне полезно, если требуется «привязать» объект к деформируемой поверхности. В качестве примера в данном случае можно привести лодку, скользящую по волнам. На рис. 9.35 показан результат создания ограничения Geometry (Геометрия) для конуса, расположенного на NURBS-поверхности, на которую действует деформатор Wa ve ( Вол на). Для вызова этого деформатора используйте одноименную команду меню Deform > Create Nonlinear (Деформация > Создать нелинейную деформацию). Вне зависимости от прохождения ряби конус останется на поверхности, сохраняя первоначальную ориентацию.
Рис. 9.35. В результате действия ограничения Geometry конус остается на NURBS-поверхности
даже при ее деформации
Если же требуется, чтобы ориентация конуса повторяла все изгибы поверхности, используйте ограничение Normal (Нормаль). В этом случае ориентация конуса повторяет ориентацию нормалей, соответственно, конус все время будет оставаться перпендикулярным поверхности.
ПРИМЕЧАНИЕ
Нормалью называется воображаемый отрезок, исходящий из центра грани перпендикулярно ее поверхности и указывающий, под каким углом грань располагается в пространстве.
Параметры ограничений Aim (Цель) и Normal (Нормаль) во многом похожи друг на друга. Атрибут Aim Vector (Вектор цели) позволяет указать ориентацию объекта, но не ограничивает положения объекта по отношению к мишени. Соответственно, если вам требуется, чтобы ориентация объекта повторяла изгибы поверхности, например, как показано на рис. 9.36, используйте ограничение Normal (Нормаль).
Рис. 9.36. Благодаря совместному действию ограничений Geometry и Normal движение конуса повторяет все изгибы NURBS-поверхности
В Maya существуют еще три вида ограничений: Parent (Иерархическая связь), Tangent (Касательная) и Pole Vector (Вектор полюса). Ограничение Parent (Иерархическая связь) связывает атрибуты преобразований перемещения и поворота двух объектов, имитируя формирование иерархической цепочки. Это позволяет избежать создания групп вручную. Ограничение Tangent (Касательная) применяется только в случаях, когда в качестве объекта-мишени используется NURBS-кривая. Оно позволяет направить вектор ограничиваемого объекта вдоль касательной кривой-мишени и применяется в случаях, когда требуется ограничить ориентацию объекта NURBS-кривой. Ограничение Pole Vector (Вектор полюса) предназначено для случаев, когда в качестве ограничиваемого объекта фигурирует плоскость вращения IK-манипулятора. Благодаря этому вектор полюса манипулятора всегда нацелен в направлении объекта-мишени. В результате вектор полюса будет контролировать направление центрального сочленения в цепочке, например направление локтя при сгибе руки.
Одной из самых любимых функций у аниматоров, занимающихся оснасткой персонажей, является создание управляемых ключей. Эта функция предназначена для установки между объектами сцены связей, позволяющих создать элементы управления различными частями персонажа.
Работа по настройке управляемых ключей начинается с создания дополнительных атрибутов, которые присоединяются к верхнему узлу персонажа. Именно эти атрибуты отвечают за анимацию его отдельных частей. В данном случае термин «персонаж» употребляется в широком смысле. Так можно назвать, например, автомобиль, вращение колес которого создано методом управляемых ключей.
Начнем с установки простого соотношения между двумя объектами. Вам предстоит связать между собой шар и конус. При перемещении шара в положительном направлении оси Y конус должен двигаться по кругу относительно оси X. Затем изученная техника будет использована для анимации руки.
Чтобы создать простую анимацию методом управляемого ключа, выполните следующие действия:
1. Откройте новую сцену и создайте два NURBS-примитива — сферу и конус. Поместите конус сбоку от сферы и положите его на бок.
2. Убедитесь в том, что вы находитесь в режиме Animation (Анимация), в противном случае нажмите клавишу F2. Выберите в меню Animate (Анимация) команду Set Driven Key (Создать управляемый ключ) и щелкните на квадратике, расположенном справа от команды Set (Создать). Появится окно диалога (рис. 9.37), в нижнем левом окне которого будет имя выделенного объекта nurbsSpherel, a в правом нижнем окне — перечень его атрибутов.
3. Нужно, чтобы сфера управляла движением конуса; соответственно, сфера должна стать управляющим, а не управляемым ключом. Щелкните на кнопке Load Driver (Загрузить управляющий объект), и имя сферы появится в верхнем левом окне.
4. Выделите конус и щелкните на кнопке Load Driven (Загрузить управляемый объект). В правом верхнем окне выделите строчку translateY, а в правом нижнем — строчку rotateX. Щелкните на кнопке Key (Ключи), чтобы создать отношение.
Рис. 9.37. Окно диалога Set Driven Key
В итоге сфера в данный момент находится на опорной плоскости (ее F-координата равна нулю), и положение конуса относительно оси X также определяется нулевой координатой. Атрибут rotateX конуса в окне диалога Channel Box (Окно каналов) будет выделен оранжевым цветом, что указывает на создание управляющего ключа.
5. Выделите сферу и поднимите ее вверх, введя в поле Translate Y (Смещение по оси Y) значение 5. Выделите конус и введите в поле RotateX (Поворот относительно оси X) значение 180°. Щелкните на кнопке Key (Ключи), фиксируя, что при поднятии сферы на высоту 5 единиц конус должен повернуться на 180°.
Любому аниматору рано или поздно приходится сталкиваться с анимацией персонажей. Одним из наиболее предпочтительных методов анимации руки является создание управляемого ключа. К этому этапу переходят после оснастки модели.
Загрузите файл poly_hand_skeleton_v05.ma из папки ChapterFHes\Poly_Hand_ Anim\scenes прилагаемого к книге компакт-диска или воспользуйтесь собственной версией руки, связанной со скелетом. При этом рука не должна быть аними-рована. Перед началом работы верните ее в позу привязки.
Создание нового атрибута
Начнем с создания нового атрибута index_pull, который будет отвечать за сгибание пальца.
1. Выделите руку. Проще всего сделать это в окне диалога Outliner (Структура), выделив строчку polySurface2. Обратите внимание на раздел Extra Attributes (Дополнительные атрибуты) на вкладке polySurface2 окна диалога Attribute Editor (Редактор атрибутов). В данный момент он пуст.
2. Выберите в меню Attributes (Атрибуты) окна диалога Attribute Editor (Редактор атрибутов) команду Add Attribute (Добавить атрибут), чтобы открыть показанное на рис. 9.38 окно диалога. Введите в поле Attribute Name (Имя атрибута) имя index_pull. Убедитесь в наличии флажка Make Attribute Keyable (Допустить назначение ключа анимации), а также в том, что переключатель Data Type (Тип данных) стоит в положении Float (С плавающей точкой). В разделе Numeric Attribute Properties (Численные свойства атрибута) введите в поле Minimum (Минимальное значение) значение 0, а в поле Maximum (Максимальное значение) — значение 10. В поле Default (Значение по умолчанию) введите значение 0.
Рис. 9.38. Окно диалога Add Atribute
Остается щелкнуть на кнопке ОК, и в разделе Extra Attributes (Дополнительные атрибуты) появится новый атрибут. Он предназначен для управления положением указательного пальца. Альтернативным способом доступа к нему является окно диалога Channel Box (Окно каналов).
Назначение управляющего ключа
Применим метод управляющего ключа:
1. Не снимая выделения с узла polySurface2, откройте окно диалога Set Driven Key (Создать управляемый ключ), щелкнув на квадратике, расположенном справа от команды Set (Создать) в меню Animate > Set Driven Key (Анимация > Создать управляемый ключ). Щелкните на кнопке Load Driver (Загрузить управляющий объект).
2. Так как анимация заключается в сгибании указательного пальца, управляемым объектом должны стать верхние три сустава. Выделите их при нажатой клавише Shift и щелкните на кнопке Load Driven (Загрузить управляемый объект).
3. Выделите в верхнем правом окне атрибут index_pull, а в нижнем левом — атрибут rotateY (рис. 9.39).
Рис. 9.39. Окно диалога Set Driven Key для руки
4. В данный момент угол поворота суставов, как и значение атрибута index_pull, равен 0. Щелкните на кнопке Key (Ключи), чтобы создать первое соотношение.
5. Выделите узел polySurfaceZ и присвойте атрибуту index_pull значение 5.
6. Выделите ближайший к кончику пальца сустав (если вы используете файл с компакт-диска, он называется jointll) и поверните его на 20° вокруг оси Y. Выделите следующий сустав (jointlO) и поверните его на 35° вокруг оси Y. Выделите ближайший к ладони сустав (joint9) и поверните его вокруг оси Уна 5°. Щелкните на кнопке Key (Ключи). В результате присвоения атрибуту index_ pull значения 5 палец будет сгибаться.
7. Выделите узел polySurface2 и присвойте атрибуту index_pull значение 10.
8. По очереди выделяйте три сустава указательного пальца и присваивайте атрибуту Rotate Y (Поворот относительно оси Y) значения 65, 60 и 50 соответственно. Щелкните на кнопке Key (Ключи). В итоге присвоения атрибуту index_pull значения 10 палец придет в положение, показанное на рис. 9.40.
Теперь для анимации положения указательного пальца не потребуется вручную поворачивать суставы. Достаточно анимировать атрибут index_pull. При этом вы можете создать управляющие ключи как для всех пальцев вместе, так и для каждого пальца по отдельности.
Рис. 9.40. Сгибание указательного пальца
Чтобы посмотреть на готовый вариант анимации указательного пальца, загрузите файл poly_hand_skeleton_v06.ma с прилагаемого к книге компакт-диска.
Работа по анимации начинается с постановки задачи и поиска путей ее решения. В Maya для этой цели имеется обширный инструментарий, и чем лучше вы с ним знакомы, тем проще будет выбрать наиболее подходящий для конкретного случая инструмент. Не ограничивайтесь этой информацией, данной в этой главе. Самостоятельно исследуйте не упомянутые здесь функции и смотрите, что происходит.
Анимация связана с умением наблюдать и интерпретировать свои наблюдения. Аниматор должен понимать, как и почему двигаются объекты, и как можно достоверней воспроизводить это движение на экране компьютера.