Во-первых, совершенно непонятно, как должны выглядеть expressions, создающие, например, процедурные примитивы типа polySphere. Как написать формулу на MEL, которая берет на входе радиус и количество граней, а на выходе выдает полигональную геометрию, остается только догадываться. Можно, конечно, вычислить на основе этих данных координаты всех вершин для сферы и дальше, через команду polyCreateFacet, пересоздавать всю поверхность, однако делать это надо будет в каждом кадре или при изменении любого входа (ну, хотя бы радиуса сферы). Боюсь, это, возможно, даже будет работать. Но, как уже догадались читатели, работать чудовищно медленно. Отсюда вытекает основное ограничение expressions - низкая производительность.
Во-вторых, поскольку expressions пишут на языкеМЕ!. (который является интерпретируемым), выполняются они медленно. Конечно, -медленно» - понятие условное, так что вычисление положения сферы между двумя кубиками займет время, которое вы едва ли сможете заметить на экране, визуально. Однако когда это касается не одной, а сотен или тысяч вычислительных операций в каждом кадре, производительность expressions становится ощутимо недостаточной (в главе, посвященной MEL, есть пример попытки создать деформер, и там обозначены границы применения MEL с точки зрения производительности).
Ноды написаны на языке C++ и откомпилированы для каждой операционной системы.
Скорость вычисления данных внутри них (то есть производительность нод) в десятки, а то и в сотни раз быстрее, чем выполнение команд для expressions. Поэтому их главное преимущество
- скорость, тогда как главное ограничение - тот факт, что пользователь никак не может изменить алгоритм работы конкретной ноды. Точнее, может… Но для этого надо изучить язык C++, запрограммировать на нем новую формулу, скомпилировать ее под имеющуюся операционную систему и затем подключить к MAYA как плагин…
Области применения expressions и нод можно приблизительно обрисовать так.
Когда речь идет об анимации, вычисления производятся, как правило, в отношении десятков или сотен объектов. Но формулы, используемые в процедурной анимации, как правило, несложные, поэтому применение expressions в данном случае более чем оправдано. Связывание атрибутов анимируемых объектов друг с другом или со временем не требует интенсивных вычислений.
Когда требуется осуществлять деформации (в этом случае надо перебирать тысячи точек) или работать с материалами (там потребуется вычислять цвет поверхности в каждой точке на экране), лучше использовать наборы нод, каждая из которых выполняет свою функцию.
Конечно, можно нарушать эти «обывательские» правила и вместо expressions собирать нужную формулу при помощи соответствующих нод.
Откройте, например, файл noExpressionStart.ma.
В нем вместо expressions используется нода plusMinusAveragel, которая вычисляет среднее значение для двух входящих атрибутов (для этого атрибут operation для нее установлен в Average). Вы можете рассмотреть сцену подробнее в Hypergraph и убедиться, что она работает точно так же, как сцена expressionStart.ma, использующая expression.