Главная » Autodesk Maya 2011 » Толкаем вверх, тянем вниз


Толкаем вверх, тянем вниз

Толкаем вверх, тянем вниз
Как анимировать два связанных между собой объекта, один из которых должен двигаться вверх, а другой при этом падать?
Тема:
Динамика.
Используемые техники и инструменты:
Dynamic Constraints (Динамические Ограничения), Gravity (Гравитация), Fire (Огонь), Particle Cloud (Облако Частиц), Expressions if…Else (Условные Выражения).
Мы чувствуем себя легче в воде не из-за уменьшения силы тяготения, а потому, что существует противоположная сила, которая выталкивает нас вверх. Эта плавучесть в действительности обусловливается массой тела и плотностью и объемом вытесненной нашим телом жидкости. Все это может быть симулировано в трехмерной анимации, просто путем использования поля гравитации, работающего в противоположном направлении. Механически соединив два объекта с конфликтующими силовыми полями (одно толкает вверх, другое тянет вниз), мы получим в результате движение настолько сложное, что эту сложность невозможно получить с помощью обычной анимации по ключевым кадрам. В этом уроке мы создадим такую ситуацию и немного насладимся нашей работой, глядя на конфликт полей. Затем подожжем оба объекта, заставим первый объект гореть голубым пламенем, а второй погаснуть, когда он опустится ниже линии горизонта в воду.

  1. Создайте два объекта: тор и конус.
  2. Расположите их рядом друг с другом.
  3. Выделите оба объекта и откройте окно настроек. Нажмите F4, выберите Soft/Rigid Bodies / Create Constraint Option box (Мягкие/Твердые Тела / Создать принудительное согласование Окно Настроек).
  4. В выпадающем меню выберите Pin (Булавка) в качестве Constraint Type (Тип принудительного согласования) и выполните команду.
  1. Переместите немного Pin Constraint (Принудительное согласование Булавка) вверх и в сторону. Это добавит движению дополнительный поворот, когда начнется симуляция.

Принудительное согласование типа Nail (Гвоздь), кстати, не является альтернативой для Pin Constraint (Принудительное согласование Булавка). Nail (Гвоздь) работает только с одним объектом, как гвоздь в рамке для картины, мы же скрепляем два объекта [Имеется в виду, что Nail Constraint позволяет прикрепить объект к какой-то точке в пространстве, «прибить гвоздем», Pin Constraint позволяет скрепить два объекта друг с другом - Примеч. ред. ]. При воспроизведении анимации на этом этапе вы ничего не увидите, поскольку ни на тор, ни на конус не воздействуют никакие силы.

  1. Выделите тор и добавьте к нему гравитацию. Для этого выберите Fields / Gravity (Поля / Гравитация).

При воспроизведении анимации вы увидите, как тор стремительно уносится вниз, увлекая за собой конус, на который не действует ни одно силовое поле.

  1. Выделите конус и тоже добавьте к нему гравитацию.
  1. В окне Channel Box (Окно Каналов) измените значение атрибута Magnitude (Величина) нового поля тяготения с 9,8 на-9,8.

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

  1. Выделите тор и зажгите его. Для этого выберите Effects /.Create Fire (Эффекты / Создать Огонь).
  2. Выделите конус и тоже зажгите его.
  3. В окне Channel Box (Окно Каналов) измените значение атрибута Fire Direction Y (Направление Огня по оси Y) для конуса с 1 на -1.

Анимация остается прежней, однако мы придали ей особенный шарм. Пламя на конусе и торе — в окнах modeling view (окно Моделирования) оно представлено в виде широко разбрасываемых зеленых сфер — горит сверху и снизу объектов, легко следуя их движению, как хвост кометы.

  1. В окне Hypershader найдите материал пламени конуса. Его имя particleCloud3.

Номер 3 в имени рarticleCloud3, кстати, обусловлен тем, что в каждой новой сцене Мауа создается шейдер Облака Частиц и он, по умолчанию, имеет имя particleCloudl. В действительности же это второе созданное нами облако частиц [Когда мы применяем эффект огонь, мы, помимо всего прочего, создаем систему частиц типа particle cloud и создаем для нее новый экземпляр шейдера. Поскольку один шейдер (с номером 1) создается автоматически при создании новой сцены, то новые шейдеры (а мы дважды применили эффект огонь и, следовательно, создали два шейдера) будут иметь порядковые номера 2 и 3. - Примеч. ред. ].

  1. В окне Attribute Editor (Редактор Атрибутов) для particleCloud 3 найдите атрибуты Color (Цвет) и Incandescence (Самосветимость). К обоим атрибутам присоединены ramp-текстуры. Измените красные цвета текстуры на голубые.

Теперь конус сопровождается красивым хвостом из голубого огня.
Наконец, введя три строки программного кода, мы добавим еще один штрих, погашая пламя тора, когда он опускается ниже линии горизонта. Для того чтобы адекватно записать уравнение, вам нужно знать точное имя объекта. Его вы увидите, щелкнув по объекту мышкой, а также в окне Channel Box (Окно Каналов): nurbsTorml.

  1. Выделите огонь тора и откройте для него Attribute Editor (Редактор Атрибутов). Щелкните мышкой по вкладке emitterl и найдите поле Rate (Particle/Sec).

Этот атрибут определяет, сколько частиц пламени вылетит из конуса в единицу времени. Значение атрибута по умолчанию запрограммировано в эффекте огня.

  1. Щелкните правой кнопкой мыши по атрибуту Emission Rate (Интенсивность Испускания), для того чтобы открыть Expression Editor (Редактор Выражений).

Здесь вы увидите несколько строк программы, которые определяют динамику выброса огня. Мы не будем менять эти сложные выражения, а просто кое-что добавим в самом их начале. Наше добавление изменит интенсивность испускания огня до нуля, когда тор погрузится ниже линии горизонта (когда значение его атрибута Translate Y (Значение перемещения по оси Y) будет меньше нуля).
Для записи новых строчек вам нужно знать полные имена для значений перемещения по оси Y и интенсивности испускания. Значение перемещения по оси Y объекта nurbsTorusl — nurbsTorusl.translateY. Полное имя для интенсивности испускания вы можете найти в первой строке уже существующего выражения; это emitter!.rate.

  1. Добавьте следующие три строки перед уже существующими выражениями . Не забудьте о точке с запятой:

if (nurbsTorusl.translateY < 0)
emitterl.rate = 0;
else.
С этого места выражение продолжится исходным кодом. Введите изменения, нажав кнопку Edit (Редактирование).
В примерном переводе эти строки означают для MAYA следующее: «Если значение атрибута Translate Y (значение перемещения по оси Y) меньше нуля, убавьте интенсивность испускания до нуля; в противном случае делайте то, что вы обычно делаете».
Теперь, при воспроизведении анимации, хвост пламени оторвется от тора, как только тор опускается слишком низко, и появится снова, как только тор поднимается над горизонтом.

А теперь кое-что новенькое. Приходилось ли вам выделять камеру, используя меню View (Вид)?

Comments are closed.