Распечатать текущий кадр во время рендеринга командной строки?

Есть ли способ в основном распечатать мой собственный вывод во время рендеринга командной строки?

Допустим, мне не нужен/не нужен весь остальной вывод, который Maya выдает по умолчанию. Я знаю, что вы можете изменить уровень детализации, но есть очень специфические вещи, которые я хотел бы вывести, но не могу понять. В настоящее время я визуализирую вывод подробностей в файл, поэтому я хотел напечатать в терминале (я использую MAC) кадр, до которого в данный момент выполняется рендеринг.

Это может быть просто глупо, но вот что я пробовал:

Render -preFrame "print `currentTime -q`;" -s 1 -e 20 -rd /render/directory/ maya_file.mb 

Очевидно, что -preFrame ожидает строку, согласно документам, это может принимать команды mel, но, очевидно, это ограничено определенными командами, я предполагаю, что команда currentTime извлекает информацию из временной шкалы в Maya, а не запрашивает ее из рендерера. self... Когда я запускаю приведенную выше команду, она сразу же выдает это: -bash: currentTime: command not found и вскоре после этого рендеринг завершается сбоем/не запускается.

В идеале я хотел бы напечатать следующее, начиная с каждого кадра:

"Started rendering frame XXXX at TIME GOES HERE", таким образом, я могу быстро просмотреть терминал и посмотреть, произошел ли сбой рендеринга, зависание или где он находится и когда он его запустил.

Итак, мой вопрос: если currentTime — это команда mel, используемая из Maya, есть ли другой способ распечатать эту информацию?

Привет, Шеннон


person Shannon Hochkins    schedule 15.01.2014    source источник


Ответы (2)


После многих часов поиска этого ответа я обнаружил, что вы можете запустить Maya как интерактивную оболочку. Сделав это, я смог получить сценарий, когда открыл его, и запустить все, что захочу, в память, как если бы у меня была открыта Maya в то время.

/Applications/Autodesk/maya2014/Maya.app/Contents/MacOS/maya -prompt -script "/Volumes/raid/farm_script/setupRender.mel"

В файле setupRender.mel я смог назначать переменные, содержащие параметры рендеринга и т. д. При этом я также смог создать глобальную переменную для номера кадра и увеличить ее во время обратного вызова preFrame, например:

int $startFrame                 = 100;
int $endFrame                   = 1110;
global int $frameCount         = 0;
string $preRenderStatistics    = "'global int $frameCount; $frameCount = " + $startFrame + ";'";
string $preFrameStatistics     = "'print(\"Rendering frame: \" + $frameCount++)'";
string $additionalFlags         = "";
string $sceneFilePath           = "'/Volumes/path/to/file/intro_video_001.mb'";

system("Render -preRender " + $preRenderStatistics + " -preFrame " + $preFrameStatistics + " -s " + $startFrame + " -e " + $endFrame + " -x " + $additionalFlags + " " + $sceneFilePath);

Это очень упрощенная версия того, что у меня сейчас есть, но, надеюсь, это поможет другим, если они наткнутся на нее.

person Shannon Hochkins    schedule 15.01.2014

Взгляните на раздел pre render layer MEL и/или pre render frame MEL настроек рендеринга.

Он ожидает MEL, поэтому вам нужно либо написать его на MEL, либо обернуть свой питон в MEL. Для такого простого использования я бы сказал, просто напишите это в MEL:

print `currentTime -q`

введите здесь описание изображения

person mhlester    schedule 15.01.2014
comment
Разве это не то же самое, что я делаю? или это будет работать по другому? - person Shannon Hochkins; 15.01.2014
comment
Попробуйте и отчитайтесь :) - person mhlester; 15.01.2014
comment
К сожалению, это не сработало, в основном потому, что из терминала я указываю разные команды запуска, а флаг preRender переопределяет то, что находится в текстовом поле. Однако отличное предложение! - person Shannon Hochkins; 16.01.2014