Render.ru

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

Bipper

Активный участник
Рейтинг
8
#41
Здравствуйте Дмитрий. У меня есть следующий вопрс: в Ваших видео я увидел, что в Ваших маркинг меню вместо боксов с подписью команды иконки. Каким образом это релизовать? Спасибо.
 

fm4

Активный участник
Рейтинг
15
#44
Выглядит интересно. Вот только не понятно вы его распространяете - на серваке линейки.

Вам бы проект на sourceforge или любом подобном хостинге.
И гугль там индексирует и место для сайта с документацией есть и SVN. А там глядишь, и линукс версия появится. ;)
 
#45
коммент прикольный, спасибо =)

Хостинг мне дает админстратор данного форума. Лично мне не важно, где лежит сам файл - это реально мелочи. Заводить проект на sourceforge интересно, но пока слишком дорого по времени.

Линукс ... дался он вам =) буду думать
 

fm4

Активный участник
Рейтинг
15
#46
Хостинг мне дает админстратор данного форума
вот этот? http://bc6.ru/scripts

Мне - да. Кроме того от линукса до макинтошевского леопарда всеж ближе чем от винды.

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

Только если вы согласны выложить исходники в общий доступ под какой нибудь опенсорсной лицензией. Кстати с sourceforge-м и портирование могу помочь, есть опыт.
 
#47
про хостинг: я постил на рапиду, админ перекладывает туда, где ему удобно/у него есть место

про луникс - шутка. там же смайл стоял

про плагин - он на Highend3d живет уже несколько лет, с описаниями и т.д.

исходники выложить пока не могу - авторы не согласны были.
 
#48
Всем привет!

Периодически на форумах проскальзывают просьбы от нескриптующих пользователей написать какой-нибудь очередной тоглер/переключатель. Чтобы просьб было меньше, а общего понимания пакета и профессионализма больше, давайте разберемся, как писать тоглеры. В качестве примера возьмем переключатель 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 //
Команда выполняется одна и та же: window. Флаг (параметр) используется тоже один: titleBar, смысл значений true и false тоже понятен. Название ”gMainWindow” достаточно говорящее. Непонятным остается только флаг “-e”. Если немного почитать хелп или любую книгу/статью про основы mel-скриптования, можно узнать, что этот флаг означает режим редактирования (edit), т.е. в этом режиме мы меняем свойства, конкретно в данном случае – наличие Title Bar у главного окна . Итак, теперь мы знаем, как изменить параметр. Двигаемся дальше!

Надо узнать, в каком состоянии находится окно. Для этого есть другой режим – query (запрос), который выводит информацию по указанному параметру. Работает он так:

Код:
window -q -titleBar $gMainWindow;
// Result: 0 //
Прошу заметить, что изменился не только флаг –e. Я убрал значение после флага –titleBar, потому что в режиме запроса значения выводит сама Maya. В данном случае мы получили результат 0, который эквивалентен логическому значению false.
Итак, мы умеем узнавать текущее значение параметра, а так же менять его. Осталось свести воедино две этих шага, как изначально было задумано в нашем алгоритме. Для этого нам потребуется условный оператор 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;
3. Самые внимательные скорее всего заметили, что во второй строке есть скобки, которые. Для MEL это означает выполнение отдельной команды в рамках другой, в данном случае – это инверсия полученного значения. Еще полезно знать, что количество таких вложений неограниченно, поэтому мы можем написать и так:

Код:
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];
Тогглер настройки Up Axis – помогает при работе со сценами из других пакетов и компаний:
Код:
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;
Моя замена майской команды по ctrl+space (включение/выключение элементов интерфейса):

Код:
toggleAllMainWindowComponentsVisible;
if (`isUIComponentVisible("Command Line")`==0) {
  toggleUIComponentVisibility "Command Line";
  setMainMenubarVisible 0;
  toggleMenuBarsInAllPanels 0;
  updateMainWindowComponentState();
 }
else {
  setMainMenubarVisible 1;
  toggleMenuBarsInAllPanels 1;
 }
Разница в том, что в отключенном режиме также отключаются меню, при этом Command Line остается видимой, и пользователь видит все ошибки и предупреждения. При наличии Xumi данный режим быстро становится основным, предоставляя вам все место на экране.

Тройной тогглер:

Код:
if(`isAttributeEditorVisible`) {
 setChannelBoxVisible(1); 
}
else {
 if (`isChannelBoxVisible`) {
  setChannelBoxVisible(0);
 }
 else {
  openAEWindow;
 }
}
Тоглер на изолирование объектов и выделенных фейсов. Работает на базе майского Isolate Selected, но более удобно для пользователя.

Код:
 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"); 
   } 
        }
   }
}
Hope it helps!
 

Bipper

Активный участник
Рейтинг
8
#49
Дмитрий, а не могли бы Вы выложить xumi 2009x64bit? Или Вы не пользуетесь?
 
#50
дело в том, что у меня скомпилированной версии под x64, потому что бесплатная версия MS Studio этого не поддерживает. Если есть желающие скомпилировать из исходников версию для х64, могу все выслать - авторы недавно дали согласие на публикацию в Open Source.
 

Лексей

Активный участник
Рейтинг
8
#51
Поддерживаю, умельцы скомпилируйте под x64.
Дима молодец, по возможности продолжай, очень полезная информация.
 
#53
В тихом омуте ... =)

На этих выходных был в Белорусии на мероприятии Притяжение 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/ До реального наполнения пока не дошли руки, но, надеюсь, скоро дойдут.

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

Так что не так все и тихо =) Спасибо за проявленный интерес
 

Dark™

Модератор форума
Команда форума
Рейтинг
1 406
#54
Чтобы каждый все посмотрел, дал "Спасибку" и оставил коммент! =) Дима все толково объяснил, респект
 

don Jao

Активный участник
Рейтинг
10
#55
Дмитрий damat Астапкович, спасибо большое за столь полезную информацию. Уже использую твой скрипт. Не мог бы ты пожалуйста, рассказать как ты сделал себе такой UI? Очень заинтересовало. Я в Майе совсем новичок, поэтому ещё толком ничего не знаю. Но вот интерфейс твой - прямо глаз не отвести. Особенно эта всплывающая во вьюпорте меню!

Спасибо за ранее.
 
#56
don Jao, какой конкретно скрипт ты используешь (для статистики)? Про всплывающее меню меню написано в этой теме, надо просто внимательно прочитать ее сначала. Все, что использую, выкладываю в свободный доступ, а тема заведена для того, чтобы планомерно объяснить, как всем этим пользоваться.

Dark™, спасибо за спасибо. Надеюсь, что когда-нибудь наберу их достаточно для добавления аватарки =)
 

don Jao

Активный участник
Рейтинг
10
#57
Дмитрий damat Астапкович, использую скрипт из 1ого поста, natHUD. Т.к. дальше не читал. Прошу прощения за невнимательность, и спасибо за подсказку. Впредь буду бдительнее.
 

Dark™

Модератор форума
Команда форума
Рейтинг
1 406
#58
Администрация сайта выражает признательность за старания и столь полезный труд Дмитрия. Автор получает 10 баллов рейтинга и большую прибавку к карме.
 

Slavenin

Активный участник
Рейтинг
12
#59
здорово! только вот от себя хочу добавить совет, что скриптам стоит учится прежде всего у самой майки и для начала почаще открывать скрипт эдитор и смотреть какие результаты дает выполнение простых щелчков мыши :)
 
#60
Dark™, большое спасибо!

Slavenin, про подсматривание за Maya есть несколько упоминаний в моих постах, об этом также пишет и Сергей Цыпцин в Книге, и многие другие авторы из майской среды. Я к тому, что совет, конечно, дельный, но слишком очевидный, чтобы акцентировать на этом внимание. И в целом, эта тема, как и выступление, не про, как писать скрипты. Надеюсь, что смогу это когда-нибудь донести.
 
Сверху