Ускоряя Maya, послесловие. Скрипты для ускорения работы в Maya.
- Автор темы Дмитрий damat Астапкович
- Дата создания
Хостинг мне дает админстратор данного форума
Линукс ... дался он вам
Лично мне не важно, где лежит сам файл - это реально мелочи.
Заводить проект на sourceforge интересно
- Рейтинг
- 51
Всем привет!
Периодически на форумах проскальзывают просьбы от нескриптующих пользователей написать какой-нибудь очередной тоглер/переключатель. Чтобы просьб было меньше, а общего понимания пакета и профессионализма больше, давайте разберемся, как писать тоглеры. В качестве примера возьмем переключатель Title bar майского окна.
Начнем с самого важного – алгоритма работы:
ЕСЛИ (Title Bar включен)
Выключить Title Bar
ИНАЧЕ
Включить Title Bar
Написано на корявом псевдокоде, но общий смысл должен быть понятен: сначала узнаём, в каком состоянии находится Title Bar, после чего любо включаем, либо выключаем его.
После того, как с алгоритмом стало все ясно, переходим к написанию тоглера. Начнем с того, что внимательно понаблюдаем за тем, как Maya включает и выключает этот элемент. Для этого откроем Sccript Editor и включим режим Echo all commands, в котором Maya начнает писать в лог большинство вызываемых команд. Далее идем в Preferences и начинаем переключать галку Show title bar in main window, внимательно наблюдая за тем, что пишется в Script Editor. Мы увидим там следующее:
Команда выполняется одна и та же: window. Флаг (параметр) используется тоже один: titleBar, смысл значений true и false тоже понятен. Название ”gMainWindow” достаточно говорящее. Непонятным остается только флаг “-e”. Если немного почитать хелп или любую книгу/статью про основы mel-скриптования, можно узнать, что этот флаг означает режим редактирования (edit), т.е. в этом режиме мы меняем свойства, конкретно в данном случае – наличие Title Bar у главного окна . Итак, теперь мы знаем, как изменить параметр. Двигаемся дальше!
Надо узнать, в каком состоянии находится окно. Для этого есть другой режим – query (запрос), который выводит информацию по указанному параметру. Работает он так:
Прошу заметить, что изменился не только флаг –e. Я убрал значение после флага –titleBar, потому что в режиме запроса значения выводит сама Maya. В данном случае мы получили результат 0, который эквивалентен логическому значению false.
Итак, мы умеем узнавать текущее значение параметра, а так же менять его. Осталось свести воедино две этих шага, как изначально было задумано в нашем алгоритме. Для этого нам потребуется условный оператор if, про который можно так же почитать в хелпе. Получается такой код:
Тоглер готов к употреблению. Несколько замечаний по общему виду полученного кода:
0. Отступы в начале строк игнорируются движком форума, но это не значит, что их нет =)
1. синтаксис (способ написания) команды if позволяет не ставить фигурные скобки, если после условия выполняется только одна команда, т.е. можно было написать так:
Такой код будет так же хорошо работать, но нередко приходится дописывать дополнительные команды, которые просто не будут корректно работать, если их не заключить в скобки. Поэтому я ставлю скобки всегда, чтобы не тратить свое время на следующих итерациях.
2. Написанный код очень хороший с точки зрения восприятия и понимания, но его можно написать более компактно. По сути своей тоглер – это переключение с одного логического значения на противоположное. MEL позволяет делать логическую инверсию логического значения с помощью символа «!». Код становится короче – всего две строчки:
3. Самые внимательные скорее всего заметили, что во второй строке есть скобки, которые. Для MEL это означает выполнение отдельной команды в рамках другой, в данном случае – это инверсия полученного значения. Еще полезно знать, что количество таких вложений неограниченно, поэтому мы можем написать и так:
Все три варианта абсолютно равноценны, разница в скорости их исполнения микроскопически мала. Но очевидно, что краткость – сестра таланта, а в записях чужих талантов разбираться непросто. Чем короче и изящнее код, тем сложнее его понять и дольше править.
Закончить сегодняшний пост я бы хотел несколькими тоглерами, которые можно рассмотреть в качестве более продвинутых примеров.
Тоглер wireframe для текущего viewport, по аналогии с которым можно дописать все остальные вариации на тему режима отображения путем замены флага в четвертой и пятой строках:
Тоглер показа нормалей на полигональных объектах, обратите внимание, что в режиме запроса результат получается в виде массива:
Тогглер настройки Up Axis – помогает при работе со сценами из других пакетов и компаний:
Моя замена майской команды по ctrl+space (включение/выключение элементов интерфейса):
Разница в том, что в отключенном режиме также отключаются меню, при этом Command Line остается видимой, и пользователь видит все ошибки и предупреждения. При наличии Xumi данный режим быстро становится основным, предоставляя вам все место на экране.
Тройной тогглер:
Тоглер на изолирование объектов и выделенных фейсов. Работает на базе майского Isolate Selected, но более удобно для пользователя.
Hope it helps!
Периодически на форумах проскальзывают просьбы от нескриптующих пользователей написать какой-нибудь очередной тоглер/переключатель. Чтобы просьб было меньше, а общего понимания пакета и профессионализма больше, давайте разберемся, как писать тоглеры. В качестве примера возьмем переключатель Title bar майского окна.
Начнем с самого важного – алгоритма работы:
ЕСЛИ (Title Bar включен)
Выключить Title Bar
ИНАЧЕ
Включить Title Bar
Написано на корявом псевдокоде, но общий смысл должен быть понятен: сначала узнаём, в каком состоянии находится Title Bar, после чего любо включаем, либо выключаем его.
После того, как с алгоритмом стало все ясно, переходим к написанию тоглера. Начнем с того, что внимательно понаблюдаем за тем, как Maya включает и выключает этот элемент. Для этого откроем Sccript Editor и включим режим Echo all commands, в котором Maya начнает писать в лог большинство вызываемых команд. Далее идем в Preferences и начинаем переключать галку Show title bar in main window, внимательно наблюдая за тем, что пишется в Script Editor. Мы увидим там следующее:
Код:
window -e -titleBar true $gMainWindow;
// Result: MayaWindow //
window -e -titleBar false $gMainWindow;
// Result: MayaWindow //
Надо узнать, в каком состоянии находится окно. Для этого есть другой режим – query (запрос), который выводит информацию по указанному параметру. Работает он так:
Код:
window -q -titleBar $gMainWindow;
// Result: 0 //
Итак, мы умеем узнавать текущее значение параметра, а так же менять его. Осталось свести воедино две этих шага, как изначально было задумано в нашем алгоритме. Для этого нам потребуется условный оператор if, про который можно так же почитать в хелпе. Получается такой код:
Код:
if (`window -q -titleBar $gMainWindow`) {
window -e -titleBar 0 $gMainWindow;
}
else {
window -e -titleBar 1 $gMainWindow;
}
0. Отступы в начале строк игнорируются движком форума, но это не значит, что их нет =)
1. синтаксис (способ написания) команды if позволяет не ставить фигурные скобки, если после условия выполняется только одна команда, т.е. можно было написать так:
Код:
if (`window -q -titleBar $gMainWindow`)
window -e -titleBar 0 $gMainWindow;
else
window -e -titleBar 1 $gMainWindow;
2. Написанный код очень хороший с точки зрения восприятия и понимания, но его можно написать более компактно. По сути своей тоглер – это переключение с одного логического значения на противоположное. MEL позволяет делать логическую инверсию логического значения с помощью символа «!». Код становится короче – всего две строчки:
Код:
$value= `window -q -titleBar $gMainWindow`;
window -e -titleBar (!$value) $gMainWindow;
Код:
window -e -titleBar (!(`window -q -titleBar $gMainWindow`)) $gMainWindow;
Закончить сегодняшний пост я бы хотел несколькими тоглерами, которые можно рассмотреть в качестве более продвинутых примеров.
Тоглер wireframe для текущего viewport, по аналогии с которым можно дописать все остальные вариации на тему режима отображения путем замены флага в четвертой и пятой строках:
Код:
string $currentPanel = `getPanel -withFocus`;
string $panelType = `getPanel -typeOf $currentPanel`;
if ($panelType == "modelPanel") {
$value = !(`modelEditor -q -wireframeOnShaded $currentPanel`);
modelEditor -e -wireframeOnShaded $value $currentPanel;
}
Код:
int $values[] = `polyOptions -q -displayNormal`;
$values[0] = !$values[0];
polyOptions -displayNormal $values[0];
Код:
string $axis = `upAxis -q -axis`;
switch ($axis) {
case "z":
upAxis -axis y -rv;
break;
case "y":
upAxis -axis z -rv;
break;
}
viewSet -animate `optionVar -query animateRollViewCompass` -home;
Код:
toggleAllMainWindowComponentsVisible;
if (`isUIComponentVisible("Command Line")`==0) {
toggleUIComponentVisibility "Command Line";
setMainMenubarVisible 0;
toggleMenuBarsInAllPanels 0;
updateMainWindowComponentState();
}
else {
setMainMenubarVisible 1;
toggleMenuBarsInAllPanels 1;
}
Тройной тогглер:
Код:
if(`isAttributeEditorVisible`) {
setChannelBoxVisible(1);
}
else {
if (`isChannelBoxVisible`) {
setChannelBoxVisible(0);
}
else {
openAEWindow;
}
}
Код:
string $currentPanel = `getPanel -withFocus`;
string $panelType = `getPanel -typeOf $currentPanel`;
if ($panelType == "modelPanel") {
if ((size(`ls -sl`)!=0) && !(`isolateSelect -q -state $currentPanel`)) {
enableIsolateSelect $currentPanel 1;
isolateSelect -state 1 $currentPanel;
isoSelectAutoAddNewObjs $currentPanel 1;
}
else {
if (`isolateSelect -q -state $currentPanel`) {
enableIsolateSelect $currentPanel 0;
isolateSelect -state 0 $currentPanel;
}
else {
warning("Nothing to isolate! \n");
}
}
}
}
- Рейтинг
- 51
В тихом омуте ... =)
На этих выходных был в Белорусии на мероприятии Притяжение cg (http://gravity.cgtalk.by/).
Так как dvd с мастерклассами летнего Эвента еще не вышли, решил прочитать укороченную под формат Притяжения версию. Получилось неплохо, можно посмотреть ниже. За запись огромное спасибо Юре Рыбакову - это брат Дениса 0-1, который руководит студией Proper Graphics (http://propergraphics.com/). Полная эвентовская версия будет доступна на dvd на зимнем Эвенте. Так, по крайней мере, сказал сегодня в письме Сергей Цыпцин.
Видео в пяти частях, заранее прошу прощение за не очень качественное разрезание. Сегодня уже не успел вписать вопросы из зала в аннотации, буду признателен, если отпишитесь, в каком видео и на какой минуте надо добавить текстовый комментарий.
По Xumi на этой неделе рассчитываю получить версии х64 под винду. С версией под линукс взялся помочь fm4, который сейчас, как и я, увяз в основной работе. Возникла проблема со скоростью отрисовки иконок, о которой он написал тут: http://www.render.ru/forum/viewtopic.php?topic_id=130584
Под Xumi с его подачи и его силами был заведен проект на Source Forge: http://sourceforge.net/projects/xumi-for-maya/ До реального наполнения пока не дошли руки, но, надеюсь, скоро дойдут.
В поездке накидал план следующей министатьи про работу с текстурами, в течение пары недель надеюсь ее написать.
Так что не так все и тихо =) Спасибо за проявленный интерес
На этих выходных был в Белорусии на мероприятии Притяжение cg (http://gravity.cgtalk.by/).
Так как dvd с мастерклассами летнего Эвента еще не вышли, решил прочитать укороченную под формат Притяжения версию. Получилось неплохо, можно посмотреть ниже. За запись огромное спасибо Юре Рыбакову - это брат Дениса 0-1, который руководит студией Proper Graphics (http://propergraphics.com/). Полная эвентовская версия будет доступна на dvd на зимнем Эвенте. Так, по крайней мере, сказал сегодня в письме Сергей Цыпцин.
Видео в пяти частях, заранее прошу прощение за не очень качественное разрезание. Сегодня уже не успел вписать вопросы из зала в аннотации, буду признателен, если отпишитесь, в каком видео и на какой минуте надо добавить текстовый комментарий.
По Xumi на этой неделе рассчитываю получить версии х64 под винду. С версией под линукс взялся помочь fm4, который сейчас, как и я, увяз в основной работе. Возникла проблема со скоростью отрисовки иконок, о которой он написал тут: http://www.render.ru/forum/viewtopic.php?topic_id=130584
Под Xumi с его подачи и его силами был заведен проект на Source Forge: http://sourceforge.net/projects/xumi-for-maya/ До реального наполнения пока не дошли руки, но, надеюсь, скоро дойдут.
В поездке накидал план следующей министатьи про работу с текстурами, в течение пары недель надеюсь ее написать.
Так что не так все и тихо =) Спасибо за проявленный интерес
Дмитрий damat Астапкович, спасибо большое за столь полезную информацию. Уже использую твой скрипт. Не мог бы ты пожалуйста, рассказать как ты сделал себе такой UI? Очень заинтересовало. Я в Майе совсем новичок, поэтому ещё толком ничего не знаю. Но вот интерфейс твой - прямо глаз не отвести. Особенно эта всплывающая во вьюпорте меню!
Спасибо за ранее.
Спасибо за ранее.
- Рейтинг
- 51
don Jao, какой конкретно скрипт ты используешь (для статистики)? Про всплывающее меню меню написано в этой теме, надо просто внимательно прочитать ее сначала. Все, что использую, выкладываю в свободный доступ, а тема заведена для того, чтобы планомерно объяснить, как всем этим пользоваться.
Dark™, спасибо за спасибо. Надеюсь, что когда-нибудь наберу их достаточно для добавления аватарки =)
Dark™, спасибо за спасибо. Надеюсь, что когда-нибудь наберу их достаточно для добавления аватарки =)
- Рейтинг
- 51
Dark™, большое спасибо!
Slavenin, про подсматривание за Maya есть несколько упоминаний в моих постах, об этом также пишет и Сергей Цыпцин в Книге, и многие другие авторы из майской среды. Я к тому, что совет, конечно, дельный, но слишком очевидный, чтобы акцентировать на этом внимание. И в целом, эта тема, как и выступление, не про, как писать скрипты. Надеюсь, что смогу это когда-нибудь донести.
Slavenin, про подсматривание за Maya есть несколько упоминаний в моих постах, об этом также пишет и Сергей Цыпцин в Книге, и многие другие авторы из майской среды. Я к тому, что совет, конечно, дельный, но слишком очевидный, чтобы акцентировать на этом внимание. И в целом, эта тема, как и выступление, не про, как писать скрипты. Надеюсь, что смогу это когда-нибудь донести.