Как анимировать два связанных между собой объекта, один из которых должен двигаться вверх, а другой при этом падать?
Тема:
Динамика.
Используемые техники и инструменты:
Dynamic Constraints (Динамические Ограничения), Gravity (Гравитация), Fire (Огонь), Particle Cloud (Облако Частиц), Expressions if...Else (Условные Выражения).
Мы чувствуем себя легче в воде не из-за уменьшения силы тяготения, а потому, что существует противоположная сила, которая выталкивает нас вверх. Эта плавучесть в действительности обусловливается массой тела и плотностью и объемом вытесненной нашим телом жидкости. Все это может быть симулировано в трехмерной анимации, просто путем использования поля гравитации, работающего в противоположном направлении. Механически соединив два объекта с конфликтующими силовыми полями (одно толкает вверх, другое тянет вниз), мы получим в результате движение настолько сложное, что эту сложность невозможно получить с помощью обычной анимации по ключевым кадрам. В этом уроке мы создадим такую ситуацию и немного насладимся нашей работой, глядя на конфликт полей. Затем подожжем оба объекта, заставим первый объект гореть голубым пламенем, а второй погаснуть, когда он опустится ниже линии горизонта в воду.
Рис. 20.1. Принудительное согласование объединит тор и конус
Рис. 20.2. Перед началом симуляции переместите Pin Constraint (Принудительное согласование Булавка) немного вверх и в сторону
Принудительное согласование типа Nail (Гвоздь), кстати, не является альтернативой для Pin Constraint (Принудительное согласование Булавка). Nail (Гвоздь) работает только с одним объектом, как гвоздь в рамке для картины, мы же скрепляем два объекта [Имеется в виду, что Nail Constraint позволяет прикрепить объект к какой-то точке в пространстве, «прибить гвоздем», Pin Constraint позволяет скрепить два объекта друг с другом - Примеч. ред. ]. При воспроизведении анимации на этом этапе вы ничего не увидите, поскольку ни на тор, ни на конус не воздействуют никакие силы.
При воспроизведении анимации вы увидите, как тор стремительно уносится вниз, увлекая за собой конус, на который не действует ни одно силовое поле (рис. 20.3).
Рис. 20.3. Тор падает под влиянием гравитации и тянет за собой в бесконечность конус, на который не действуют никакие поля
Рис. 20.4. Второе, развернутое в противоположном направлении поле тяготения поднимает конус вверх
Теперь тор продолжает тянуть оба объекта вниз, а конус старается поднять их вверх - в результате мы получаем сложное движение пары (рис. 20.5). Если вы хоть немного усилите одно из полей тяготения, движение потеряет равновесие, и объекты моментально исчезнут из вида, увлекаемые большим силовым полем.
Рис. 20.5. Конус летит вверх, тор вниз. Объединенные с помощью Pin Constraint (Принудительное согласование Булавка), они вынуждены держаться на одном уровне, создавая, таким образом, сложное, но сбалансированное движение
Анимация остается прежней, однако мы придали ей особенный шарм (рис. 20.6). Пламя на конусе и торе - в окнах modeling view (окно Моделирования) оно представлено в виде широко разбрасываемых зеленых сфер - горит сверху и снизу объектов, легко следуя их движению, как хвост кометы.
Рис. 20.6. Мы подожгли объекты. При движении огонь создает пылающий хвост
Номер 3 в имени рarticleCloud3, кстати, обусловлен тем, что в каждой новой сцене Мауа создается шейдер Облака Частиц и он, по умолчанию, имеет имя particleCloudl. В действительности же это второе созданное нами облако частиц [Когда мы применяем эффект огонь, мы, помимо всего прочего, создаем систему частиц типа particle cloud и создаем для нее новый экземпляр шейдера. Поскольку один шейдер (с номером 1) создается автоматически при создании новой сцены, то новые шейдеры (а мы дважды применили эффект огонь и, следовательно, создали два шейдера) будут иметь порядковые номера 2 и 3. - Примеч. ред. ].
Рис. 20.7. Изменяем цвет пылающего хвоста конуса с оранжевого на голубой
Теперь конус сопровождается красивым хвостом из голубого огня (см. рис. 20.8).
Наконец, введя три строки программного кода, мы добавим еще один штрих, погашая пламя тора, когда он опускается ниже линии горизонта. Для того чтобы адекватно записать уравнение, вам нужно знать точное имя объекта. Его вы увидите, щелкнув по объекту мышкой, а также в окне Channel Box (Окно Каналов): nurbsTorml.
Этот атрибут определяет, сколько частиц пламени вылетит из конуса в единицу времени. Значение атрибута по умолчанию запрограммировано в эффекте огня.
Рис. 20.8. Отрендеренное изображение в кадре 100
Рис. 20.9. Emission Rate (Интенсивность Испускания) огня - это атрибут источника частиц
Здесь вы увидите несколько строк программы, которые определяют динамику выброса огня. Мы не будем менять эти сложные выражения, а просто кое-что добавим в самом их начале. Наше добавление изменит интенсивность испускания огня до нуля, когда тор погрузится ниже линии горизонта (когда значение его атрибута Translate Y (Значение перемещения по оси Y) будет меньше нуля).
Для записи новых строчек вам нужно знать полные имена для значений перемещения по оси Y и интенсивности испускания. Значение перемещения по оси Y объекта nurbsTorusl - nurbsTorusl.translateY. Полное имя для интенсивности испускания вы можете найти в первой строке уже существующего выражения; это emitter!.rate.
if (nurbsTorusl.translateY < 0)
emitterl.rate = 0;
else.
Рис. 20.10. Три новые строки программного кода в окне Expression Editor (Редактор Выражений) погасят пламя тора, когда тот опустится ниже линии горизонта. Когда он снова поднимется, введенные строки уже не будут к нему применяться, и пламя зажжется снова
В примерном переводе эти строки означают для MAYA следующее: «Если значение атрибута Translate Y (значение перемещения по оси Y) меньше нуля, убавьте интенсивность испускания до нуля; в противном случае делайте то, что вы обычно делаете».
Теперь, при воспроизведении анимации, хвост пламени оторвется от тора, как только тор опускается слишком низко, и появится снова, как только тор поднимается над горизонтом (рис. 20.11).
Рис. 20.11. Пылающий хвост отрывается от тора, как только тор опускается слишком низко. Слева - изображение, полученное в результате рендеринга с помощью полупрозрачной Checkerboard (Шахматная доска), служащей поверхностью горизонта
А теперь кое-что новенькое. Приходилось ли вам выделять камеру, используя меню View (Вид)?
Назад | Начало | Вперед |