Render.ru

Ускоряя Maya, послесловие. Скрипты для ускорения работы в Maya.

Sarko3D

Активный участник
Рейтинг
15
я на маркинг меню и сажу команды. Ну и горячие клавиши ессесно)) А вообще этот иснтрумент я у Денисыча и нашел на известном ресурсе, там скрипт пак 130 free)) вот с него и понадобились только 3 инструмента, дубрирование поликов, переключение камеры, и выделение это)))) только лимит в 500 закончился быстро, Динисыч грит надо покупать мол))) (чет жалко за одну команду, не самую необходимую 40 баков) ну я вот по частям скрипты и собрал почти , первые два есть, а с выделением хрен с ним) впринципе на горчую клавишу повесил переключение выделения с marque на Drag и теперь полюбому быстро все выделяется, и переключается)))

P.S. НА счет скрипта сделал запрос, может маэстро сам выложит
 

Strahovid

Активный участник
Рейтинг
11
По поводу дропбокс - у меня всё в порядке, нормально открывает.
Но на всякий случай вот ссылка на сам скрипт http://narod.ru/disk/60481038001.789629eb471a8e83bcbefab276dca0cf/bezierWindowV6.mel.html
И сайт с которого скачивал http://www.creativecrash.com/maya/downloads/scripts-plugins/modeling/c/bezier-curve-tube-generator
Там же описание и демонстрационное видео.
Когда пытаюсь у себя запустить, на майа 2009, пишет что не может найти процедуру. Вот такие дела. А скрипт реаль, судя по видео, очень полезный.
 

Strahovid

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

Sarko3D

Активный участник
Рейтинг
15
Вот скриптик от доброго парня GT40 для удобного дублирования выделенных полигонов. Только главное что бы была включенна история, а то долго тупили, почему у него работает, а у меня нет. Дело было в выключенной истории ))

//Simple duplicate face by GT40

DuplicateFace;
string $selAfDup[] = `ls -sl`;
$size = `size ($selAfDup)`;
select -cl;
for ($parts=1;$parts<($size-1);$parts++)
{

select -add $selAfDup[$parts];

}
string $selDupParts[] = `ls -sl`;
$size = `size ($selDupParts)`;
if ($size!=1)
{
polyUnite -ch 1 -mergeUVSets 1 ($selDupParts);
}
else
{
CenterPivot;
setToolTo $gMove;
parent -w;
}
CenterPivot;
setToolTo $gMove;
 

Лекс Дарлог (DRL)

Активный участник
Рейтинг
14
чет жалко за одну команду, не самую необходимую 40 баков
В соседнем топике (давал ссылку в прошлом посте) есть старая версия пака. У меня, собственно, она и стоит. Команду с выделением до хард эджей я брал оттуда. А сегодня как раз протестировал её в полевых условиях. Работает медленно, да (задача по определению медленная). Но работает, и притом исправно.

Опаньки, а разве пак от Дениса "0-1" сейчас платный?
Я так понял, Денис всего-навсего запилил туда нормальный ГУЙ. Ну плюс собрал весь пак из тьмы мелких файлов в один большой. Может, какие мелкие вещи там поправил - и всё. Из ощутимого - я заметил, что он туда ещё добавил скрипт views, который публиковался ранее в этом топике. И туторы записал. Сам пак принципиально ничем не отличается, ссылка на старую верию - выше.
И, повторюсь, если так уж сильно хочется самую-пресамую новую версию - курим МЕЛ и находим, каким образом новый скрипт-пак определяет, сколько раз его запускали. Мне кажется, к тому времени, как человек разберётся с МЕЛом на соответствующем уровне, он сам уже чего-нибудь на нём да напишет, и уже поделится с общественностью. Так что я эту версию воспринял как "бесплатная для тех, кто сам делится наработками". А если ну ооочень лень разбираться в МЕЛе - не жопимся и выделяем заслуженные 40 баксов за гигантский труд. По-моему, всё справедливо.
Ну, это я так думаю. Может, сам Денис другого мнения.
В любом случае, лично я пользуюсь старым скрипт-паком, порядочно переделанным. Меню "Scripts" из оригинала я практически не использую (у меня в принципе майское меню вырублено), всё раскидано по хоткеям/маркин-менюшкам/дефолтным контекстным менюхам. Мне новый пак (ради его гуя) просто не нужен.

Вот скриптик от доброго парня GT40
Спасибо, что поделился. Только не мешало бы теперь объяснить, что этот скрипт делает и как его применять (что должно быть выделено, в каком порядке и т.п.). И лучше скрипты публиковать не копированием кода, а ссылкой на файл - так отступы сохраняются.
 

Sarko3D

Активный участник
Рейтинг
15
Цитата Sarko 3D #481:чет жалко за одну команду, не самую необходимую 40 баков
В соседнем топике (давал ссылку в прошлом посте) есть старая версия пака. У меня, собственно, она и стоит. Команду с выделением до хард эджей я брал оттуда. А сегодня как раз протестировал её в полевых условиях. Работает медленно, да (задача по определению медленная). Но работает, и притом исправно.

Я качал там по ссылке, это оказался текстовый документ на ресурс где фри версия на 500 запусков, а потом покупать)) Да проблема решена, проще было убрать ограничение да и все, скрипт пак прекрасно теперь работает)))

Цитата Sarko 3D #489:Вот скриптик от доброго парня GT40
Спасибо, что поделился. Только не мешало бы теперь объяснить, что этот скрипт делает и как его применять (что должно быть выделено, в каком порядке и т.п.). И лучше скрипты публиковать не копированием кода, а ссылкой на файл - так отступы сохраняются.
со скриптом просто все, копируем его на полку, или вешаем на клавишу, ну или кому еще как удобно. Дальше выделяем полигоны которые хотим продублировать, да выполняем скрипт. Все просто))
 

Лекс Дарлог (DRL)

Активный участник
Рейтинг
14
  1. Данный скрипт делает следующее: в отличие от обычного Duplicate Face, он потом:
    • все сдублированные фэйсы объединяет в один объект,
    • выделяет его
    • и выставляет текущий инструмент в Move tool.

    Я имел в виду это. Ладно, я могу понять назначение скрипта по его коду. Но не все могут. Именно для этого и нужно текстовое описание.
  2. В этой строке:
    polyUnite -ch 1 -mergeUVSets 1 ($selDupParts);
    есть флаг, которого нет в 2009 версии Майи (-mergeUVSets 1). Соответственно, в этой и предыдущих версиях скрипт работать не будет.
    Кроме того, в скрипте используется процедура DuplicateFace, которая является run time command. Это значит 2 вещи:
    Во-первых, не факт, что оно будет работать в Майе, запущенной в batch mode. Это уже изыски, ведь никто не станет пользоваться этим скриптом в таком режиме. Но всё же.
    Во-вторых, этот скрипт всегда будет отрабатывать с теми настройками, которые сейчас выставлены в окне настроек операции Duplicate Face. Т.е., ели ты там случайно поставил какой-нить мелкий оффсет - то можешь очень долго работать, а потом не понимать, почему у тебя ничего не стыкуется. Причём, если оффсет меньше, чем 0.00005 - он даже в окошке сеттингсов будет отображаться, как сплошные ноли. По-хорошему, надо не к процедуре DuplicateFace обращаться, а напрямую к тем командам, которые в ней используются. С жёстким заданием нужных параметров.
    Я посмотрел через runTimeCommand, что же выполняется при запуске DuplicateFace, и оказалось следующее:
    Код:
    performPolyChipOff 0 1;
    Глянул процедурку performPolyChipOff - она должна возвращать исполняемый код.
    Запустил напрямую "performPolyChipOff 0 1;" - и вот что мне было возвращено в скрипт эдитор:
    Код:
    select -r polySurface5.f[34:35] polySurface5.f[44] polySurface5.f[55] ;
    polyChipOff -ch 1 -kft 1 -dup 1 -off 0 polySurface5.f[34:35] polySurface5.f[44] polySurface5.f[55];
    // Result: polyChipOff3 // 
    polyPerformAction ("polySeparate -rs 1", "o", 0);
    polySeparate -rs 1 -ch 1 polySurfaceShape5;
    // Result: polySurface10 polySurface11 polySeparate3 // 
    // Result: polySeparate -rs 1 -ch 1 polySurfaceShape5 //
    Очевидно, процедура DuplicateFace сперва выделяет всё нужное, потом использует polyChipOff и polySeparate.
    С флагами сейчас разбираться времени нет, да и мне этот скрипт не нужен. Но если кто хочет довести его до ума - направление я задал.
 

Александр Иванов 97779

Активный участник
Рейтинг
5
Всем привет! Раз это тема для полезностей, то делюсь своим скриптиком.
Делает он следующее:
Создаёт uvSnapshot, сохраняет по указанному пути, и открывает в программе по умолчанию (у меня это Photoshop).

uvSnapshot -aa -n "C:/Users/a_ivanow/Desktop/outUV.psd" -xr 2048 -yr 2048 -r 255 -g 255 -b 255 -o -ff psd;
system ("load C:/Users/a_ivanow/Desktop/outUV.psd");

Пользуясь случаем хотел узнать можно ли указать в какой конкретно программе должен открыться файл? Не всем нравится ставить для .psd файлов Photoshop по умолчанию, многие предпочитают различные просмотровщики. А uvSnapshot должен открываться именно в Photoshop, это крайне удобно при текстурировании, если, например, немного подправили развёртку, и нужно быстро её закинуть в Photoshop.

С интерфейсом скрипта тоже не всё просто - пока есть задумка оформить в виде кнопок с разными разрешениями, но это не очень элегантно. В общем если подскажите как доработать скрипт, буду благодарен!
 

Dark™

Модератор форума
Команда форума
Рейтинг
431

Александр Иванов 97779

Активный участник
Рейтинг
5
Вместо load прописываете полный путь до нужной программы.
Dark, разъясните пожалуйста подробнее, если прописываю

system ("C:/Program Files/Adobe/Adobe Photoshop CS3/Photoshop.exe C:/Users/a_ivanow/Desktop/outUV.psd");

то ничего не происходит =(
 

Лекс Дарлог (DRL)

Активный участник
Рейтинг
14
Проблема с синтаксисом.
Команда system - это, по сути, пересылка команды в операционную систему. Т.е., в винде - то же самое, что вы ввели бы в её командной строке или окошке "выполнить".
Поскольку командная строка винды использует пробелы для разделения команд/аргументов - то все пути, которые могут содержать пробелы или другие спецсимволы, надо заключать в кавычки.
Т.е., если бы вы выполняли эту команду там - она выглядела бы так:
Код:
"C:/Program Files/Adobe/Adobe Photoshop CS3/Photoshop.exe" "C:/Users/a_ivanow/Desktop/outUV.psd"
Обратите внимание, здесь - 2 пары кавычек. В первой - один путь, во второй - другой, между ними - пробел.

Теперь вернёмся к Майской команде system. Работает она следующим образом: мы ей скармливаем строковое значение, а она перенаправляет его как команду в командную строчку винды.
Соответственно, чтобы скормить то, что мы тут наворотили, это тоже надо заключить в кавычки. (потому что для Майи это и не команда вовсе, а последовательность символов).
Т.е., привести майский код к такому виду:
Код:
system "команда";
Поскольку и тут, и там кавычки, то Майе надо знать, какие из них задают начало и конец строкового значения, а какие - собственно символы внутри строки.
Для этого кавычки внутри строки надо экранировать, т.е. подставить перед каждой кавычкой одинарный символ обратного слэша: \
Т.е., в итоге наша команда будет выглядеть так:
Код:
system "\"C:/Program Files/Adobe/Adobe Photoshop CS3/Photoshop.exe\" \"C:/Users/a_ivanow/Desktop/outUV.psd\"";
Сам символ обратного слеша является т.н. escape character, т.е. символом экранирования. Т.е., передача всяких спецсимволов в строку (вроде кавычки или разрыва строки) делается через него. Чтобы записать в строку его самого, надо писать не одинарный, а двойной слэш: \\. Т.е., он как бы экранирует сам себя, и Майя понимает, что мы хотели передать ей бэкслэш.
Именно поэтому не рекомендуется использовать в майе стандартные пути винды: в них используются не прямые, а обратные слэши. Чтоб записать такой путь в строку, надо каждый одиночный слэш заменить двойным, после чего код станет совершенно не удобочитаемым. Так что вы правильно сделали, что сперва привели все пути к unix-виду.
 

Александр Иванов 97779

Активный участник
Рейтинг
5
DRL Спасибо за чудесный пост!
Покопался в документации к команде system, вроде как ещё можно запустить таким образом:

string $filename = "C:/Users/a_ivanow/Desktop/outUV.psd";
system("C:/Program Files/Adobe/Adobe Photoshop CS6 (64 Bit)/Photoshop.exe " + $filename);
Но вот беда - скрипт эдитор и на ваш вариант, и на мой отвечает кучей абракадабры какой-то...(см. картинку)
Помогите пожалуйста докопаться-таки до истины =)
 

Вложения

Лекс Дарлог (DRL)

Активный участник
Рейтинг
14
Абракадабра - это потому, что сообщение возвращает винда. Винда у тебя, судя по всему, русская. А Майя никакие символы кроме ASCII - не любит. Ой как не любит. Там беда с кодировками. Автостол за столько лет так и не научил Майю читать юникод, и везде изо всех сил настоятельно рекомендуют избегать кириллицы, всеми правдами и неправдами.
Но это тебе никак не поможет понять, на что ругается винда. А что поможет -
Код:
вот это
. Скармливаешь туда возвращённую в скрипт эдитор "абракадабру" - и должно показать тебе, что там было написано на самом деле. Если бы ты не картинку вставил, а скопировал сюда результат из скрипт эдитора - я мог бы сразу глянуть в чём беда и помочь с решением. А так - придётся ждать твой следующий ответ.
 

Лекс Дарлог (DRL)

Активный участник
Рейтинг
14
А вообще этот иснтрумент я у Денисыча и нашел на известном ресурсе, там скрипт пак 130 free))
Я, как упоминал ранее, на днях благодаря тебе обратил внимание на команду Grow selection to hard edges... Сам удивился, насколько часто я стал её использовать. Настолько часто, что сразу решил добавить её в быстродоступную маркинг-менюшку. Конечно, можно создать свою ММ и запихнуть команду туда, но гораздо уместнее она будет смотреться на Ctrl+RMB при выделенных полигонах.
Так что, думаю, многим понравится сделать так же.
Увы, готовый скрипт для этой цели кинуть не могу: там надо модифицировать стандартные майские файлы. Но сейчас опишу как можно сделать это самим. Я это уже описывал ранее для другой дефолтной маркинг-менюхи, но если кто хочет готовую инструкцию без знания МЕЛа, то вот. Естественно, идущая следом инструкция предполагает, что сам скрипт (на выделение шелла софт-эджей) уже установлен.

Менюха, которая возникает по Ctrl+RMB на полигональных объектах - это процедура polyConvertMM. Живёт она в одноимённом файле polyConvertMM.mel, который лежит тут:
Код:
<папка_установки_Майи>\scripts\others\
Итак:
  • Находим этот файл
  • Копируем его в папку scripts внутри папки префов Майи.
    ВНИМАНИЕ! Этот скрипт практически наверняка в разных версиях Майи - разный. Вам нужно убедиться, что скрипт вы скопировали именно в папку префов для соответствующей версии Майи. Т.е., для 2009 версии Майи (x86) надо его копировать в:
    Код:
    <папка_префов>/2009/scripts
    Копируем мы его для того, чтобы не модифицировать оригинал. При каждом запуске Майя сперва будет читать оригинальный файл, а потом наш, модифицированный, из папки префов. Так что мы заменяем стандартную майскую процедуру своей, при этом в самой Майе ничего не модифицируя. Если что-то пойдёт не так - мы всегда можем переустановить Майю без риска потерять нашу кастомизацию. И, с другой стороны, если нам потребуется убрать все наши изменения, достаточно будет удалить наш скопированный файл (или просто вынести его из папки префов).
  • Открываем скопированный файл любым текстовым редактором (не Word, естественно; рекомендую Notepad++).
  • Находим в нём следующий текст:
    Код:
    -command "ConvertSelectionToContainedFaces"
  • После этого текста на следующей строке должна быть точка с запятой. После неё добавляем переход строки (ставим после неё курсор и нажимаем Enter).
  • И с новой строки копируем следующий код:
    Код:
    				// Added by DRL: {
    				menuItem
    					-label "Grow to hard edges"
    					-annotation "Converts selection to faces and grows it to select the entire soft-edged shell."
    					-radialPosition "E"
    					-command (
    						"ConvertSelectionToFaces;" +
    						"hilite; selectType -ocm -alc false;" +
    						"selectType -ocm -polymeshFace true;" +
    						"growToHards;"
    					)
    					-itl 1
    					;
    				// } End of added
    Как всегда, местный форумный движок запорол все отступы, но код от этого работать хуже не станет.
  • Сохраняем файл, перезапускаем Майю.
Если хотите скопировать код с отступами - можете взять его из моего файла polyConvertMM.mel.
Только не копируйте весь файл. Во-первых, он для 2009 версии Майи (дя, я работаю на ней - есть веские причины). Во-вторых, там есть и другие модификации, привязанные к моим скриптам (которых у вас точно нет).
Найти нужную строку можно, поискав "by DRL". Я всегда, когда модифицирую стандартные файлы, оставляю подобный коммент.

Теперь, чтобы выделить шелл фэйсов, ограниченных хард эджами, не нужно лезть в Меню Scripts Денисыча. Достаточно выбрать любой компонент в шелле -> Ctrl+RMB -> To faces -> Grow to hard edges. По идее, пункт должен быть курсивным.
Сам скрипт Дениса требовал, чтоб были выделенны фейсы. С моим пунктом меню это желательно, но не обязательно: прежде, чем расширять выделение, оно сперва будет отконвертированно в полигоны. Но будьте аккуратны: если выбрать вертексы или эджи на границе между шеллами, то мой вариант выделит не только нужный шелл, но и соседний тоже.
Повторюсь, это всего лишь усовершенствование скрипта, который написал Денис "0-1". Мой код - это в лучшем случае 1% от его работы. Один процент, который просто повышает юзабельность.
 
Сверху