Терминологический комментарий. Во избежание полной путаницы, я не буду употреблять для expression термин «выражение». Тем более, что в русскоязычной майской среде никто и никогда так не говорит, а если вы вдруг заявите, что заставили своего персонажа работать с помощью «выражений», то окружающие подумают в первую очередь о крепких выражениях. … Устная майская традиция предполагает употребление термина «экспрешен», обеспечивая стопроцентную однозначность трактовки. Я же ограничусь непереведенным написанием «expression» (так же, как loft или trim), предполагая, что произносить вы его будете, как положено, так что все вас поймут при общении.
Формулы для expression пишутся на языке MEL. Вы можете прочитать обсуждение синтаксиса и правил написания кода на MEL в соответствующей главе. В этом же разделе я сосредоточусь на практическом аспекте использования различных expressions и возможных вариантах их применения. А также на том, каким образом они взаимодействуют с объектом. Дополнительную информацию о «внутренностях» expressions и об их реализации в дереве зависимостей майской сцены вы можете почерпнуть из главы про изнанку MAYA.
Напомню: главная концепция анимации в MAYA основана на том, что анимируются не сами объекты, а их атрибуты. Поэтому среди прочих связей на атрибутах объекта могут «висеть» expressions, определяющие процедурную анимацию объекта.
Среди всевозможных вариантов использования expressions можно выделить два основных типа.
К первому относятся expressions, связывающие атрибуты объекта со временем. Например: pTorusI .rotateX=noise (time)
Такие expressions - явные «посредники» между временем и атрибутами объекта, задавая вместо анимационной кривой формулу, по которой будет меняться тот или иной атрибут. Такие формулы задают «бесконечное» движение и применяются в тех случаях, когда не обязательно устанавливать точное состояние объекта в определенном кадре, а надо лишь задать характер или тип движения. Например «хаотическая тряска» или «движение по спирали». Задавать беспорядочное движение в диапазоне из пятисот кадров с помощью сотни-другой ключей - занятие довольно утомительное, а вот посредством expressions такая задача решается моментально.
Этот тип expressions часто используется для задания вторичных движений: например, дыхание персонажа, покачивание хвоста, бегающие зрачки и пр. Такую анимацию еще называют «амбиентной» (то есть неявной или вторичной).
Второй тип expressions задает связь атрибутов объекта не со временем, а с атрибутами других объектов. Например:
pTorusI .rotateX = pTorusI .translateZ * 180/3.1415926/(polyTorusl.radius + polyTorusI .sectionRadius); В этом случае expressions выступают в роли обобщенных констрейнов, не создавая непосредственно анимацию, а согласовывая атрибуты различных объектов. Этот тип expressions используется для «конструирования» взаимодействий между объектами. Он часто используется для автоматического преобразования одного типа движения в другой (например, перемещения во вращение), вычисления средних значений и пр.