Render.ru

Mel обрабатывается раз в секунду

Ro

Знаток
Рейтинг
38
#1
Добрый день, подскажите, пожалуйста, как заставить mel скрипт выполняться раз в секунду? Если это возможно через scriptJob, то какой параметр отвечает за время?
Заранее благодарю
 

Ro

Знаток
Рейтинг
38
#2
Вот засада, никто не знает... Может, кто-нибудь знает, как найти код, по которому майя производит автосохранение? Там-то все по таймеру
 

Dark™

Модератор форума
Команда форума
Рейтинг
431
#3
Раз в секудну чего? Времени анимации или реального времени? Для анимации у scriptJob'а нужный флаг есть, а для реального времени две полезные команды: pause и timerX.
 

Ro

Знаток
Рейтинг
38
#4
Dark, спасибо. Раз в секунду реального времени
Pause во время остановки скрипта блокирует программу. Не подходит
TimerX только отсчитывает время, но не выполняет функции
Это все я знаю, мне нужен скрипт, который бы без участия юзера выполнял функцию при каждом увеличении TimerX на 1
Единственный пример, который я встречал - это встроенный Autosave, который выполняется через определенное время, даже если пользователь ничего не делает
 

Dark™

Модератор форума
Команда форума
Рейтинг
431
#5
В обычном mel'e в реализациях автосейва используется комбинация из scriptJob'а на ивент смены выделения + timerX на проверку пройденного времени. Конечно, это не будет происходить секунда в секунду, но для данной задачи этого хватает. Еще флаг idleEvent можно попробовать для scriptJob.
 

Ro

Знаток
Рейтинг
38
#6
Спасибо, что предлагаете варианты. Принимаются любые. Мне нужно, что бы каждую, допустим, секунду, майя проверяла, работает Batch render или нет, и, если нет, то запускала его заного
Идеально было бы, если б сам Batch по мере своей работы постоянно сигнализировал об этом (например, появляющиеся строки в Script editor'e о ходе выполнения рендера как сигнал), и, если программа молчит в течении какого-то времени, майя снова его запускает
Такой возможности не нашел, остается запускать скрипт, проверяющий, появляются в папке новые изображения или нет, и если нет - запускает новый Batch. Для этого и нужна функция, запускающая скрипт проверки через определенное время
Idle, если не ошибаюсь, грузит комп и работает только когда программа простаивает. Если юзер работает в программе, idle, вроде, молчит
Внутренний Autosave не зависит от смены выделения, он срабатывает секунда в секунду вне зависимости от того, работает юзер в программе или пьет кофе на кухне. Если бы найти код этого Autosave'a. Пробовал использовать этот автосейв как ивент для saveScene для scriptJob, но так не работает
Или еще один фантастический вариант - может ли питон запускать mel-скрипт?
 

Dark™

Модератор форума
Команда форума
Рейтинг
431
#7
работает Batch render или нет, и, если нет, то запускала его заного
Зачем его заново запускать? Если только, чтобы выполнить другую задачу. Тогда batch render надо запускать из командной строки batch файлом, где каждая строка будет выполняться поочередно. Тут велосипед изобретать не надо. Лучше скажи, что в итоге надо.

Внутренний Autosave не зависит от смены выделения, он срабатывает секунда в секунду вне зависимости от того, работает юзер в программе или пьет кофе на кухне
Это нативный автосейв, я же говорил про старые реализации на mel'e.

Или еще один фантастический вариант - может ли питон запускать mel-скрипт?
В pyMel и в стандартных библиотеках есть множество майских функций. Если же надо именно мел файл со скриптом запустить, то есть maya.mel.eval("source sc.mel").
Но и питоновский скрипт запущенный из майи, ставит ее на ожидание, пока не выполнится.
 

Ro

Знаток
Рейтинг
38
#8
На ночь ставится вирейский batch-рендер. Рендер вылетает с ошибкой раз в 2-4 часа. Скрипт выполняет следующее:
1. Каждые n минут мониторит папку с готовыми изображениями
2. Если с последней проверки ни одного изображения не добавилось (т.е. рендер закончился с ошибкой), скрипт узнает, какой последний кадр отрендерен и запускает batch-рендер со следующего кадра.
В идеале с этим скриптом можно будет оставить рендер на длительное время не боясь, что рендер прервется в самое неподходящее время и оставит всего пару готовых кадров
 

Dark™

Модератор форума
Команда форума
Рейтинг
431
#9
Опять же Batch файл подойдет:
Код:
@echo off
:start_render
set count=0
for %%x in (.\images\*) do set /a count+=1
echo %count%
render -s %count% scene.mb
if %ERRORLEVEL% NEQ 0 goto start_render
exit
Но, как по мне, надо решать саму проблему с рендером и его оптимизацией.
 

Ro

Знаток
Рейтинг
38
#10
Выглядит как язык, в котором я не силен...
Dark, спасибо. Скрипт написал, взял за основу Idle, хоть он и вешает комп на 12%. Написать бы отдельную программу, не зависящую от Maya, запускающую рендер из bat-файла
 
Сверху