Постоянно пополняющаяся коллекция моих MEL сценариев и плагинов к Майя:

createImage

createImage.rar
cgtalk.mel

Для создания картинки средствами MEL. На вход нужно подавать массив float. Элементы будут располагаться по образу UV:


Код:

float $floatArray[] = {0.5,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1};
createImage -wh 3 3 -colors $floatArray -path "c:/image.bmp" -type "bmp" ;
//флаг -type не обязателен если используется формат bmp
Для изменения картинки необходим массив с координатами нужных пикселей (int array) и массив с цветами (float array):

Код:

int $intArray[] = {5,0,0,2};
float $floatArray[] = {0,1,0,1,0,0};
createImage -add $intArray $floatArray -path "c:/image.bmp" -type "bmp" ;

Для возврата размеров картинки по пути:

Код:

int $sizeArray[] = `createImage -getSize "c:/test.bmp"`;
Для возврата float array цветов какой-либо картинки по пути:

Код:

float $newImage[] = `createImage -getColors "c:/test.bmp"`;

т.е. эту переменную можно потом использовать в создании новой картинки.

Для примера вложен скрипт, который создаёт новогоднюю шапку сайта cgtalk.ru
В архиве плагин для Maya 7 и исходник


fPolyTools

fPolyTools.mel

Версия 3.5
Немного исправил. Добавил возможность выделение граней через заданный шаг. И поиск короткого пути между двумя выделенными гранями.Выделение граней вокруг выделенных полигонов. Duplicate и Extract Face теперь работают чисто на скрипте (в виду не сильной разницы между плагином и скриптом).


fPolyTools (old)

fPolyTools.mel
f
PolyTools.mll

Версия 3.0
Исправил замеченные баги. Починил и ускорил Duplicate Face, Extract Face написав их на API. Расширил возможности подгона выделенных вершин к максимальным или минимальным позициям (по образу UV едитора). Добавил Invert Topology, сохраняющий исходные UV (или не сохраняющий по желанию). Добавил Make Clone, для быстрого создания дубликата, который наследует историю родителя

Установка:
fPolyTools.mll - Должен быть загружен как плагин (help fPolyTool; - информация о флажках) Плагин только для Maya 7
fPolyTools.mel - должен лежать в папках со скриптами (\maya\7.0\scripts)
fPolyTools; - команда для запуска. Повторная команда уберёт меню из основного интерфейса.

Версия 2.15
Немного исправлено. Добавлена возможность создвать кривые в виде (или объекты) Instance для Curve From Normal.
Добавлен Edge Loop Part для выделения короткого пути Loop Part относительно двух выделенных edge, который работает и на внешних гранях. Next Loop Edge теперь тоже работает на внешних гранях.

Версия 2.11. Исправлены баги и добавлены новые функции. Работа скриптов значительно ускорена. Интерфейс в виде всплывающего меню в основном окне.

fPolyTools; - команда для запуска. Повторная команда уберёт меню из основного интерфейса.

Comnine - это почти стандартный майский комбайн. Но этот сохраняет имя первого выделенного объекта, не мусорит, сохраняет трасформ первого объекта (только перемещения).

Duplicate Face - дублирует только выделенные полигоны в выделенный объект с сохранением трасформа исходного объекта (без всяких separate). Не заносит в массив весь объект, только выделенные полигоны и работает относительно быстро.

Extract Face - вырезает выделенные полигоны в новый объект с сохранением трасформа исходного объекта (без всяких separate). Тоже работает относительно быстро.

Extrude - это экструд одновременно для edge и face в зависимости от маски выделения.

Collapse - коллапс в центр выделенных компонент любого типа (по образу 3dsmax).

Select Shell - выделает изолированные полигоны в объекте. Т.е. выделаешь одну компоненту, запускаешь скрипт и выделятся нужные компоненты.

Select Shell Border - выделяет внешние грани Shell.

Select Shape Border - выделяет внешние грани всей модели.

Select UV Shell - выделяет UV Shell.

Select Hard Edges - выделяет все Hard Edges

Select Face Materials - выделяет материал выделенного полигона.

Select Unused Materials - выделяет все неиспользуемые материалы.

Next Loop Edge - выделяет соседние edge.

Next Ring Edge - выделяет параллельные edge.

Symmetry Part - интерфейс для быстрого и корректного выделения половины симметричного объекта. Иногда с этим бывают проблемы.

Edge Loop Faces - выделяет меньшую часть модели по edge loop. Например, чтобы быстро выделить палец руки, выделением одной edge.

Scale Zero - скалирует выделенные компоненты в ноль.

to Grid - двигает выделенные компоненты к нулевой плоскости.

Mirror Face - зеркально отображает выделенные полигоны.

Mirror Shape - зеркально отображает выделенный shape.

to Shape - двигает выделенные компоненты к ближайшей точке на другой поверхности. Имеет настройки для высоты над поверхностью и возможность отмены Undo. Работает с полигонами и NURBS. (скриншоты ниже, но интерфейс изменился)

to Edge Line - выстраивает в одну ровную линию выделенные edge, относительно крайних вершин в выделения.

World Space Obj - для просмотра мировой координаты выделенного объекта и подгона объекта, по какой либо оси (или подгона пивота).

World Space Vertex - тоже для вершин.

Kill Freeze - <размораживает> объект. Т.е. возвращает выделенным объектам мировые координаты.

Memory Selected - заносит в память выделенные объекты.

Add to Memory Select - добавляет к запомненным выделенные объекты.

Del from Memory Select - удаляет выделенные объекты из памяти.

Select From Memory - выделяет запомненные объекты.

Clear Memory - чистит память.

List Memory

Curve From Normal - создаёт кривую из нормали выделенной компоненты на поверхности объекта. (скриншоты ниже, но интерфейс изменился)

Smooth Edge Ring - гладкий Split Edge Ring

Cut XYZ - Cut по нулевой координате.

Smooth Edge Ring (смотрите ниже, алгоритм изменён)

Poly Count - статистика для всех полигонов (не только для тех которые попадают в камеру)

Distance From Camera - расстояние до камеры выделенной вершины.

Bounding Box Size - показывает размеры сцены (только полигонов) и показывает радиус.

Pixel Move - двигает выделенное на пиксель относительно камеры.

Calculator - калькулятор простейший

Create Shading Network - для автоматического создания шейдера SSS для ментала, без возни лайтмапами. Лайтмап автоматически подстраивается под разрешение рендера.

Show Free Memory - показывает кол-во свободного места в оперативной памяти. Отрисовывает его как heads Up Display

Show Frame - Отрисовывает кадр как heads Up Display

Clear Undo - очищает список отмен. Иногда очень сильно освобождает память.

Foreach - для каждого выделенного объекта применяет написанные в поле команды. Может показывать список атрибутов и имеет интерфейс для быстрой вставки основных команд. Например для того чтобы каждый выделенный объект подвинуть на случайное расстояние или расставить случайные атрибуты или выполнить какую-либо команду, которая может быть выполнена только с одним объектом: применений много.

Replace Instance - убивает инстанс связи.

Всё разбито по вкладкам. Тестировал на Maya 7


Slide Vertex Tool
slideTool.mel
Мне очень нравится XSI в плане персонажного моделирования. А основная фича в этом плане там это отдельный тул для скольжения компоненты по поверхности. Это очень сокращает время на выравнивание геометрии. Просто можно двигать вершины по самой же поверхности и не знать бед.
В точности я повторить этот тул не могу, да и работать такой тул вряд ли будет быстро (на MEL). Я написал его для вершины. Т.е. выбираешь вершину, зажимаешь хот кей (у меня, например, это <9>), и двигаешь выбранную вершину, а она не вырвется за переделы соседних граней и за пределы исходной геометрии. Потом отпускаешь хот кей и никаких следов действия скрипта не остаётся.
У меня прекрасно работает на модели в 15 000 поликов. Больше я не пробовал =) да и, кажется незачем.
Просто выбираешь вершину, зажимаешь хот кей и двигаешь (не забывая, что двигать можно только при заранее выбранном moveTool). Двигать можно по выбранной оси или просто относительно экрана будет скольжение. Потом отпускаешь. В момент зажимания можно вертеть камеру.
Хот кей проставляете сами //// SlideTool; //// на Press и Release или просто на Press (так нужно будет нажать второй раз, чтобы покинуть тул, но больше шансов загромоздить сцену). Ну а сам скрипт должен лежать в папке со всеми (\maya\7.0\scripts).

Работает только с одной выбранной вершиной!!!

Конечно немного не кси по скорости, но всёже что-то. Мне в принципе нравится =)

Если что и произошло, то повторный запуск скрипта почистит сцену от ненужных объектов.

Ps Тестировал только на maya 7: но предположительно работает везде


My Average Vertices
VAver.mel (Old)

Мне часто очень не нравится стандартный Average Vertices тем, что он делает сглаженные вершины плоскими. А иногда очень хочется, чтобы у тебя все полигоны стали ровными и модель осталась той же, что и была. Я написал скрипт, который в начале сильно расслабляет сетку, а потом двигает расслабленные вершины на оттеселированную поверхность дубликата, чтобы не менялась форма объекта, а только лишь выравнивались нужные полигоны.

FNDVAverage; - нужная команда, для запуска диалогового окна.
Это не является панацеей от кривой сетки =) Но может иногда помочь. Т.к. скрипт отжирает очень много памяти, я добавил возможность отключения Undo. Но я бы не советовал по началу доверять скрипту и разглаживать без возможности откатить. Удачно работает на более плоских поверхностях: ну вобщем: посмотрите сами =) если нужно.


Vertex Line
vertexLine.mel (Old)

Выстраивает вершины в одну линию, относительно первой и последней выделенной вершины. Т.е. выделяешь по очереди вершины, команда FNDvertexLine; и они выстроятся по линии, начинающейся в первой выделенной вершине и заканчивающейся в последней.


Shape To Shape Move
STSMove.mel (Old)

Когда моделируешь прилегающую к телу одежду, то очень тяжко контролировать расстояние вершин до поверхности. Так же иногда очень нужно подогнать примерно одинаковые модели с разной топологией друг под друга.
Этот скрипт перебирает все выбранные вершины и двигает их к ближайшей точке на выбранной поверхности. А потом перемещает эту точку на заданное расстояние по нормали к поверхности. Скрипт имеет довольно удобный интерфейс. Нужно один раз выделить нужную цель, а потом когда нужно выравнивать нужные вершины, относительно этой цели.
В maya 8 есть довольно громоздкий инструмент для этого. Он более функционален, но этот за то простой и удобный =) и работать должен во всех майках.
Тестировал в maya 7. Делал для себя: но может кому нужен.
Вот скрины:

Положите скрипт в директорию со скриптами. Активизация инструмента:
STSMove;

С помощью этой штуки, как выяснилось, очень удобно выравнивать выбранные компоненты по выбранный плоскости. Make Planar весьма навороченный получился =): очень удобно и наглядно... как мне кажется.


Smooth Split Edge Ring
smoothEdgeRing.mel (Old)
Мне иногда очень не нравится стандартный Split Edge Ring тем, что он просто режет геометрию, делая её немного угловатой. И порой уходит довольно много времени, чтобы его сгладить.
И вот я написал для себя инструментик (скрины):

Писал я для себя и пофиксил только некоторые баги, которые меня очень сильно бесили. Но много осталось =) : Код кривой: я особо не заморачивался.
Использую стандартную smooth ноду, только без <лишних> сечений.
Тестил я на maya 7.

Для запуска:
скопируйте его в папку со скриптами (\maya\7.0\scripts) и сделайте ему source : или перезапустите майя.
и после этого команда
smoothEdgeRing(0);

будет запускать это безобразие на выделенных вами edge. Если в скобках будет единица, то крайние вершины останутся на месте (smoothEdgeRing(1));

Если вам нужно, то используйте на свой страх и риск. Иногда почему-то не с первого раза срабатывает =( Может быть потом соберусь как-нибудь и напишу нормальное решение этой проблемы... хотя работает и так =)

Ну ещё могу добавить что на дальнейшем Smooth этой сетки разницы почти невидно: даже более гладко.
Но удобнее контролировать скручивания при анимации. Ручное добавление этого отняло бы много сил.


Component normal to Curve
curveNormal.mel (Old)

Для удобства выдавливания по кривой.

Скрипт перебирает все выбранные компоненты и создаёт кривую в центре в не зависимости от количества вершин в компоненте. Потом скрипт двигает кривую, непосредственно на поверхность, без зависимости от того плоская компонента или нет. Так же скрипт умеет двигать любые объекты. Может не использовать нормаль.
Вот такие дела.
Два бага которые есть :
(и которые мне влом править: хотя можно было бы)
Первый - это то, что коренное название кривой или объекта не должно иметь в конце цифр: а то будет небольшая бажня.
Второй - скрипт нужно вписывать целиком в шелфу или хот кей: или запускать из скрипт эдитора.
Как использовать: компилишь его целиком из скрипт эдитора. Выбираешь компонеты и нажимаешь Create "normal" : так же настраивается высота и число сегментов.
Имя, при создании только <нормалей>, желательно не менять (на случай внезапного появления цифр в конце): ну или менять только без цифр : Ничего, конечно, страшного не будет, если там будут цифры =)
Кнопкой Pick Name From Scene скрипт автоматически запоминает имя выделенного объекта и тусует его в интерфейс скрипта.

Количество сегментов у NURBS кривой не должно быть меньше четырёх.