0

有没有办法在命令行渲染期间基本上打印我自己的输出?

假设我不需要/想要默认情况下 Maya 吐出的所有其他输出,我知道您可以更改详细程度,但是我想输出非常具体的内容,但我无法弄清楚。我目前将详细输出渲染到文件中,所以我想在终端(我正在使用 MAC)中打印渲染当前达到的帧。

这可能只是头脑简单,但这是我尝试过的:

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

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

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

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

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

干杯,香农

4

2 回答 2

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);

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

于 2014-01-15T21:33:32.670 回答
0

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

它需要 MEL,所以你要么需要用 MEL 编写它,要么需要用 MEL 包装你的 python。对于这样一个简单的用途,我会说只需用 MEL 编写它:

print `currentTime -q`

在此处输入图像描述

于 2014-01-15T04:37:15.777 回答