在命令行渲染期间打印当前帧?

时间:2014-01-15 01:14:05

标签: terminal rendering maya mel

有没有办法在命令行渲染过程中基本打印我自己的输出?

假设我不需要/想要默认情况下可能吐出的所有其他输出,我知道你可以改变详细级别,但是我想输出非常具体的东西,但是我无法想象它出。我目前将详细程度输出呈现给文件,所以我想在终端(我正在使用MAC)中打印渲染当前所在的帧。

这可能只是一个简单的想法,但这是我尝试的:

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

显然,-preFrame需要一个字符串,根据文档可以采用mel命令,但显然这仅限于某些命令,我​​假设currentTime命令是从maya的时间轴中提取信息,不要自己从渲染器中排队...当我立即运行上面的命令时,它会吐出这个:-bash: currentTime: command not found并且在渲染失败后不久/不会启动。

理想情况下,我想在每帧开始时打印以下内容:

"Started rendering frame XXXX at TIME GOES HERE",就这样,我可以快速查看终端,看看渲染器是否出现故障,卡住或者出现在何处以及何时启动它。

所以我的问题是,看到currentTime是在Maya中使用的mel命令,还有另一种方法可以打印这些信息吗?

干杯, 香农

2 个答案:

答案 0 :(得分:1)

经过几个小时的搜索,我最终发现你可以将maya作为一个交互式shell启动。通过这样做,我可以在打开脚本时获取脚本,然后在内存中运行我想要的任何内容,如果我当时打开了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);

这是我目前拥有的一个非常简化的版本,但希望如果他们偶然发现它,这将有助于其他人。

答案 1 :(得分:0)

查看渲染设置的pre render layer MEL和/或pre render frame MEL部分。

它需要MEL,因此您需要在MEL中编写它或将您的python包装在MEL中。对于这么简单的用法,我只想把它写在MEL中:

print `currentTime -q`

enter image description here