Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ponimayka1

.pdf
Скачиваний:
131
Добавлен:
07.06.2015
Размер:
37.11 Mб
Скачать

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

Говоря формально, надо установить зависимость между атрибутом blendShape1.nurbsSphere2 и атрибутами цвета и прозрачности материала phong1.

Доберемся до атрибутов материала. Выберите брюхо, откройте Attribute Editor, перейдите в последнюю закладку phong1. Нажмите правую кнопку мыши над атрибутом Color и выберите в выпавшем меню Set Driven Key...

Таким образом, материал phong1 загрузится в нижнюю панель открывшегося окна Set Driv­ en Key. Осталось загрузить в верхнюю часть ноду blendShape1, отвечающую за деформацию.

В окне Attribute Editor перейдите в закладку blendShape1 и нажмите внизу кнопку Select, чтобы выбрать ноду blendShape1 как отдельный объект.

Теперь в окне Set Driven Key нажмите кнопку Load Driver и в верхней панели появится blendShape1 со всеми своими атрибутами.

Разыщите среди них атрибут nurbsSphere2, отвечающий за морфинг, и выделите его.

В нижней панели выделите атрибуты colorR, colorG, colorB, transparencyR, transparencyG, transparencyB.

Теперь можно устанавливать зависимость между формой и цветом.

Выберите в верхней панели blendShape1 и удостоверьтесь в Attribute Editor, что атрибут nurbsSphere2 равен нулю, то есть брюхо пустое.

Выберите в нижней панели phong1 и задайте в Attribute Editor наиболее подходящий с вашей точки зрения цвет голодного комариного брюха.

Нажмите кнопку Key.

Далее выберите blendShape1, задайте nurbsSphere2=1, надув тем самым брюхо.

Затем задайте цвет и прозрачность материала, наиболее соответствующие наполненному кровью брюху комара.

Снова нажмите кнопку Key.

641

Теперь выберите снова blendShape1 и задайте nurbsSphere2=2, раздув тем самым брюхо до недопустимых размеров.

Задайте затем цвет и прозрачность материала, соответствующие лопающемуся брюху. Снова нажмите кнопку Key.

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

И хотя это не очень хорошая идея - редактировать анимационные кривые для каналов цвета, вы можете заглянуть в Graph Editor, чтобы поправить, если необходимо, тангенсы.

Выбрать при этом нужно, очевидно, материал phong1.

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

Сохраните сцену (komar_Final.ma).

Set Driven Key некоторые замечания

Несложно заметить, что один атрибут может управлять несколькими атрибутами разных объектов. Все эти объекты можно одновременно загрузить в нижнюю часть окна. Если выбрать их там все вместе, то справа будут показаны только общие для всех выбранных объектов атрибуты. Поэтому если вы хотите одновременно задавать зависимость для разных атрибутов разных объектов, то выбирайте их по очереди и так же, по очереди, ставьте ключи.

Очевидно, что в верхней панели можно выбрать только один управляющий атрибут, ведь было бы странно, если бы на один управляемый (driven) атрибут влияли сразу два управляющих (driver). Однако это возможно организовать, если по очереди выполнить операцию Set Driven Key для одного и того же управляемого (driven), но для разных управляющих (driven) атрибутов.

Например, в предыдущем примере с комаром, вы можете дополнительно проделать операцию Set Driven Key, выбрав в качестве управляющего атрибута, например, scaleX, а в качестве управляемых по-прежнему оставить атрибуты материала phongl. В таком случае на цвет материала будут влиять сразу два управляющих атрибута.

Пытливые умы сразу спросят, а как тогда будет выглядеть дерево зависимостей? Не может же один атрибут иметь две входящие связи! Действительно, не может. Небольшое исследование Hypergraph показывает, что в этом случае возникает специальная нода (blendWeighted), смешивающая результат влияния двух управляющих атрибутов.

642

Таким образом, с помощью операции Set Driven Key можно делать так, чтобы один управляемый объект (а точнее, атрибут) зависел от сразу нескольких управляющих объектов (а точнее, их атрибутов). Индивидуальное воздействие каждого управляющего объекта будет при этом «Смешиваться» с другими. Например, уши вашего персонажа должны немного шевелиться, когда персонаж широко открывает рот, и в тоже время они должны немного двигаться, когда персонаж приподнимает брови.

Одно из наиболее частых применений операции Set Driven Key - задание мышечных деформаций. Форма или размер мышцы выступают в таких случаях в качестве управляемых атрибутов, а угол сгиба костей в локте или колене - в качестве управляющих. К этому мы еще вернемся в разделе про анимацию персонажей.

Шутка для взрослых. Выберите произвольный объект и загрузите его в нижнюю часть окна Set Driven Key. А в качестве управляющего объекта выберите глобальное время t i m e l , загрузите его в верхнюю панель и в качестве управляющего атрибута выберите атрибут outTime. Теперь поставьте анимацию, пользуясь только перемещением по временной шкале и кнопкой Key. Вы получите ключи-невидимки, их не будет видно на временной линейке, и ваши друзья будут долго ломать голову, как вам удалось заставить MAYA так сильно глючить.

643

Смешивание различных типов анимаций: Animation Blending

Теперь, когда изнанка основных типы анимации разобрана, я хотел бы остановиться на способах комбинирования или смешивания разных видов анимации. Animation Blending применяется чаще всего для стыковки или плавного перехода одного вида анимации в другой. Например, вот муха, она летела на мед (анимация по пути или по ключам), но прилипла к поверхности банки (констрейны) и следует в дальнейшем за этой поверхностью. Или описанная выше тарелка спокойно катится по столу (анимация по ключам), а потом начинает падать и бешено вращаться (expression). Перепрыгивание Брюса Виллиса из кабины вертолета на крыло Боинга - тоже пример смешивания анимаций: сначала этот «крепкий орешек» был «приконстрейнен» к кабине вертолета, а затем уже следовал за крылом самолета.

Как я уже говорил, смешивание анимаций всегда, начиная с версии 1.0, могло быть реализовано в MAYA с помощью системы констрейнов. И может до сих пор.. Тот же Брюс Виллис мог быть одновременно приконстрейнен и к кабине вертолета, летящего по пути, и крылу самолета, двигающегося по ключам, в соответствии с указаниями диспетчеров. Смешивание анимации в этом случае сводится к анимации весов констрейна, определяющих, какую долю анимации Брюс Виллис унаследует от вертолета, а какую от Боинга.

Однако пользователи MAYA не желали плодить констрейны для каждого прыжка Брюса

итребовали возможности «наваливать» разные типы анимации на один и тот же объект, не «приконстрейнивая» его к вспомогательным «болванкам». В конце концов пользователи победили,

ив MAYA появилась новая возможность, так что в третьей серии «Крепкого орешка» Брюс Виллис был уже полностью трехмерный и скакал с невиданной прытью.

Всоответствии в основной концепцией M A Y A 0 6 анимации атрибутов, а не объектов, следует сразу внести ясность: когда мы говорим о смешивании различных типов анимации на одном объекте, на вход анимированного атрибута поступает результат усреднения или смешивания двух (или нескольких) значений, вычисляемых, например, анимационной кривой и констрейном.

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

На практике для того, чтобы получить смешивание анимаций, достаточно просто проанимировать один и тот же атрибут объекта двумя разными способами: например, сначала поставить ключи на атрибуты translate, а затем применить к объекту Point Constraint; или сначала создать для атрибута expression, а потом поставить на этот же атрибут ключи.

Чтобы быстро увидеть пример смешивания анимаций, возьмите любой объект, например куб, и сначала хорошенько потрясите его с помощью expression:

644

А затем поставьте на атрибут translateY несколько ключей, задающих движение по вертикали. Результирующее движение будет определяться поставленными ключами, однако в Channel Box можно будет увидеть дополнительный атрибут blendExpressionl и дополнительную ноду с названием pairBlend1.

Цвет атрибута translateY станет зеленым, что свидетельствует о том, что он зависит теперь не от анимационной кривой или от expression, а от ноды pairBlend1.

Новый атрибут blendExpressions1 определяет, в каких пропорциях смешиваются две анимации: ключевая и процедурная.

Установите значение blendExpressions1=0.5, и вы увидите, как объект движется по ключам, одновременно хаотически вздрагивая.

Поэкспериментируйте с эти атрибутом, чтобы убедиться, что с его помощью можно переходить от одного типа анимации к другому.

Примечание. Атрибут blendExpressions 1 - динамический. Он создается при попытке поставить ключи на уже анимированный другим способом объект. Он управляет атрибутом weight ноды pairBlendl, который определяет степень смешивания двух входящих значений. Кстати, величина этого атрибута может быть больше единицы и меньше нуля. Попробуйте понять методом тыка, как смешиваются анимации в этом случае.

Порядок смешивания анимаций

Если поглядеть на устройство смешанной анимации в Hypergraph, можно предположить, что совершенно безразлично, в каком порядке создавать разные анимации для выбранных атрибутов: ведь для ноды pairBlend абсолютно все равно, какие данные приходят на первый вход, а какие на второй. Однако на практике это не так и надо помнить про ряд особенностей.

645

Можно ставить ключи и создавать констрейны, влияющие на одни и те же атрибуты объекта в произвольном порядке. Однако, если вы поставите ключи на какой-нибудь атрибут, а потом для него же напишете expression, то при попытке создать такой expression вы получите сообщение об ошибке:

Error: Attribute already controlled by an expression, keyframe, or other connection.

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

Если вы контролируете анимацию атрибута с помощью операции Set Driven Key, вы не сможете поставить обычные ключи на этот же атрибут. Однако если сначала поставите ключи на этот атрибут, а затем зададите его зависимость от других атрибутов с помощью окна Set Driven Key, влияние двух анимационных кривых будет корректно усреднено (правда, в этом случае будет использоваться нода blendWeighted).

Если у вас уже есть активное твердое тело, при постановке ключей на атрибуты trans­ late или rotate будет создано смешивание анимации с помощью ноды pairBlend. Однако если вы сначала поставите ключи на эти атрибуты объекта, а потом превратите его в активное твердое тело, никакого смешивания не возникнет. Тут следует вспомнить, что активные тела игнорируют ключи, и в этом случае единственный способ заставить твердое тело «вспомнить» про ключи - это превратить его в пассивное твердое тело, то есть установить атрибут active равным нулю. Или поставить новые ключи.

Если объект движется по пути, можно ставить ключи на атрибуты translate или rotate, MAYA будет смешивать повороты и перемещения от анимационных кривых и от движения по пути. Если сначала поставить ключи, а затем запустить объект по пути, у вас ничего не выйдет. Проверьте сами.

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

Для взрослых. Если MAYA вам не позволяет накладывать одну анимацию поверх другой (например, создавать expression для атрибутов translate активного твердого тела), вы всегда можете сделать это вручную, пересоединив в Hypergraph входящие связи к ноде pairBlend от остальных нод, обеспечивающих анимацию.

Кватернионы, эйлеровские углы, синхронизация вращений и прочие ужасы

Некоторые пытливые умы, заглянувшие в Attribute Editor для ноды pairBlend, наверняка обнаружили там загадочный атрибут Rot Interpolation, по умолчанию имеющий значение Euler Аn-

646

gles, но имеющий также опцию Quarternions. Совсем уж любознательные археологи обнаружили упоминание об этих пугающих явлениях в Graph Editor (Curves=> Change Rotation Interp) или в общих настройках анимации Preferences=>Settings=>Animation=>Rotation Interpolation.

Так что же это за «вращательная интерполяция»? Попробуем разобраться «на пальцах». Создайте конус и поверните его на 175 градусов вокруг оси X.

Поставьте ключ в первом кадре. Перейдите в двадцатый кадр.

Задайте в Channel Box значение rotateX = -175 и снова поставьте ключ.

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

По умолчанию вращение интерполируется формально, то есть от одного значения угла до другого, вне зависимости, какие пируэты выписывает при этом конус. Такая формальная интерполяция задана в установках анимации по умолчанию и называется Euler-Angles (эйлеровские углы). Попробуем изменить ее для существующей анимационной кривой.

Выберите конус, откройте Graph Editor, отметьте анимационную кривую и выполните операцию Curves=> Change Rotation lnterp=>Synchronized Quarternions.

MAYA бодро поприветствует вас сообщением об ошибке

Error: Can only synchronize rotations on objects with all three rotation channels keyed. Skipped: pCone1_rotateX

647

Это означает, что вращение вокруг оси X было анимировано независимо от остальных вращений. Опять же по умолчанию, в MAYA принято анимировать вращения независимо друг от друга, хотя имеется возможность включить режим согласованной или синхронной анимации вращений. Это можно сделать в окне глобальных установок Preferences в категории Settings=>Animation.

В случае выбора New Curve Default=Synchronized Euler-Angles Curves все ключи, создаваемые для атрибутов rotate будут синхронизированы. Это значит, что если вы поставите, например, ключ только на атрибут rotateX, автоматически возникнут также ключи для rotateY и rotateZ. Если вы откроете в этом случае Graph Editor и передвинете ключ на анимационной кривой для rotateY вправо или влево, ключи на анимационных кривых для rotateZ и rotateX также передвинутся на то же расстояние. Ключи в этом случае оказываются «сцеплены» и не могут быть отредактированы независимо друг от друга. Синхронизация поворотов может быть полезна для работы с анимацией сложных вращательных движений, в частности при работе с прямой кинематикой и интенсивными вращениями костей друг относительно друга во всех плоскостях.

Вернемся теперь к нашим кватернионам. Если формальная интерполяция Euler-Angles может быть независимой (Independent Euler) или синхронизированной (Synchronized Euler), то интерполяция с помощью кватернионов работает только с синхронизированными ключами.

Поэтому встаньте в первый кадр и просто поставьте ключ на атрибуты rotateY и rotateZ.

Теперь снова откройте Graph Editor, выберите снова анимационную кривую для rotateX и выполните Curves=> Change Rotation lnterp=>Synchronized Quaternions.Теперь ошибки быть не должно и анимационная кривая примет довольно замысловатый вид.

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

Итак, кватернионы используются только для задания альтернативного типа интерполяции анимационных кривых между ключевыми кадрами. Они применяются только для вычисления вращений. В результате использования Quaternion Interpolation объект будет вращаться (между соседними ключевыми кадрами) так, чтобы совершить кратчайший поворот от одного положения к другому, даже если цифры в Channel Box имеют совершенно безумные значения.

Примечание. В Channel Box всегда отображаются эйлеровские углы, независимо от типа интерполяции анимационных кривых.

Очевидно, что применять Quaternion Interpolation имеет смысл только в тех случаях, когда величины вращений принимают «экстремальные» значения (то есть внезапно переходят через значения 180 или 180 градусов), либо когда объект начинает неожиданно бешено крутиться в непонятном направлении.

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

648

автоматически, в результате вычислений. Одним из примеров может служить использование данных от систем захвата движений или соответствующих библиотек. Как правило, вращения всех костей, «приехавших» к вам от системы motion capture, находятся в диапазоне от -180 до +180 градусов и весело перекручиваются, проходя через границы диапазона, если предварительно никто не принял никаких усилий - типа эйлеровской фильтрации. Другим примером может быть вышеупомянутое смешивание анимаций, когда от одного вращательного движения объект плавно переходит к другому. При этом вы вполне контролируете значения вращений, когда ставите ключи, однако значения, вычисляемые констрейнами или движением по пути, получаются автоматически, и вы не можете их предугадать или контролировать. Поэтому может возникнуть ситуация, когда объект, вместо того, чтобы плавно повернуться от текущего положения (определяемого, например, Aim Constraint) к новой ориентации, задаваемой ключами и визуально очень близкой в пространстве, начинает описывать большие дуги, поворачиваясь в новое положение совсем не так, как вы этого ждете. В этом случае имеет смысл отредактировать значение атрибута Rot Interpolation ноды pairBlend, установив его в Quaternions, чтобы смешивание вращений происходило по кратчайшему пути в пространстве.

Еще одним примером может служить сложная настройка персонажа, когда каждый сустав имеет собственное расположение локальных вращательных осей. При использовании управления с помощью Set Driven Key углы поворота будут вычисляться автоматически, а вращение не всегда будет происходить предсказуемо.

Несмотря на то, что кватернионы довольно ловко решают задачу внезапных перекручиваний, я видел очень мало людей, делавших внятные попытки ими пользоваться. Это в основном связано с тем, что анимационные кривые такого типа имеют довольно ограниченные возможности редактирования тангенсов в ключевых кадрах и, как следствие, несколько сужают свободу управления анимацией. Поэтому основная часть аниматоров мучается, колется, но продолжает использовать традиционные эйлеровские углы. Им на помощь приходит, время от времени, операция эйлеровской фильтрации, позволяющая выбрать анимационную кривую и перераспределить ключи таким образом, чтобы избежать перекручиваний. Эта операция располагается в меню Graph Editor по адресу Curves=>Euler Filter.

Примечание. Леонард Эйлер - один из

величайших

математиков XVIII

века.

Широта

его научной эрудиции

просто потрясает.

Небесная механика

и

баллистика,

теория

корабля и

морская наука,

прочность

материалов,

навигация

и

магнетизм,

оптика

и теория

музыки,

гидродинамика

и

работа

ветряных

мельниц,

астрономия,

картография,

теорияшахматнойигры,

магическиеквадраты.

Современные

учебники

математики,

механики,

астрономии

содержат

многочисленные упоминания его

имени: эйлеровы углы, подстановки, функции, интегралы, уравнения, теоремы,

постоянная

Эйлера

и

пр.

Кто-то

подсчитал:

только

для

того,

 

чтобы

просто

переписать

труды

Эйлера,

работая по восемь часов ежедневно,

понадобилось

бы не менее

полувека.

Многие из его удивительных открытий

были

сделаны в

Петербургской

Академии

наук,

где

Леонард Эйлер проработал

тридцать

один

год.

Жизнь Эйлера была неразрывно связанная с Россией, где он

начал

свою

научную

карьеру, где

скончался

и

был

похоронен. Эйлер

женился

также

в

Петербурге

в

1733

году. Он был отцом 13

 

детей и дедом 38 внуков. Многие из

его

потомков

тоже

стали учёными, они

жили

и продолжают жить

в России.

 

 

 

 

 

 

 

Бесплатный гхостинг, или классическая фазовка

Речь идет о полезном сервисе, который MAYA предоставляет аниматорам для симуляции техники, применяемой в классической рисованной анимации, когда вы можете видеть не только текущую позу персонажа или объекта, но и фазы его движения в предыдущих или последующих кадрах. Все это одновременно, в одном кадре. Для того, чтобы визуализировать фазы движения объекта, нужно прежде всего его анимировать, а затем воспользоваться операцией Animate=>Ghost Selected.

В Option Box этой операции находится исчерпывающее количество параметров, позволяющих задать количество предыдущих и последующих фаз, отступ их по времени друг от друга и другие.

649

Для того, чтобы поэкспериментировать, можете открыть файл plateFinal.ma и, выбрав анимированную рюмку, применять к ней операцию Animate=>Ghost Selected с различными параметрами. Чтобы отменить отображение дополнительных фаз движения, достаточно воспользоваться операцией Animate=>Unghost Selected.

Для того, чтобы задать цвета дополнительных фаз, надо очевидно сходить в Window=> Settings/Preferences=>Color и там найти соответствующий раздел.

Playblast: предварительный просмотр анимации

Вы можете предварительно просмотреть нужный диапазон анимации, воспользовавшись операцией Window=>Playblast. Ее основное предназначение просмотр анимации в реальном времени, то есть независимо от сложности сцены и производительности видеокарты. В Option Box этой операции вы можете указать диапазон анимации и размер изображения, после чего MAYA покадрово проиграет указанный диапазон и произведет захват экрана в каждом кадре.

По умолчанию, копии экрана собираются в Avi-файл, причем вы можете выбрать кодек и степень компрессии так же, как вы делаете это в Adobe Premiere. Иногда бывает полезно получить не один файл, а последовательность изображений (например, для печати), и в этом случае надо выбрать опцию Viewer=fcheck, включив там галку Save to File.

Примечание.

Захватить

или

проиграть

последовательность «разрозненных-

кадров (например, ключевых

фаз,

номера которых вам известны) можно с помощью

соответствующей MEL-команды с

флагом

-frame

playblast -frame

13 -frame 24

-frame 65 -frame 84 -frame 99;

Поскольку операция Playblast использует захват экрана, не стоит перетаскивать окна по экрану или смотреть неприличные обучающие фильмы во время ее работы. Все ваши лихорадочные манипуляции с окнами попадут в результирующее изображение. К счастью, курсор мыши можно бесстрашно возить по экрану во время проигрывания, даже если он очень большой.

650

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]