如何通过MEL命令保存多个图像

时间:2015-02-13 18:25:13

标签: python maya mel

我是MEL脚本的新手,正在处理使用MAYA批量渲染海量文件(超过10000个),基本原型是这样的:



import maya.mel as mel
import maya.cmds as mc
mc.file("D:/render/abc.mb",i=True)
mel.eval('RenderIntoNewWindow;')
mc.renderWindowEditor('renderView' , e=True , wi='D:/render/abc')




这是一个简单的脚本,包含三个命令:import,render,saveimage。

这是问题所在。 RenderIntoNewWindow似乎是一个异步方法,因此脚本将在渲染过程中继续进行。 然后Maya将保存类似于不完整图像的内容。

我还尝试了一种回调方法' renderwindowssaveimagecallback'。

mel.eval(&#39; renderWindowSaveImageCallback&#34; renderView&#34;(&#34; D:/ render / abc&#34;)&#34; image&#34 ;;&#39;)< / p>

但它也没有用。 Maya给出了消息&#34; ImageFormats实例没有属性&#39; oldOutf&#39; #&#34;。

有没有可以用同步方式渲染图像的命令? 感谢。

1 个答案:

答案 0 :(得分:1)

您可能不想使用RenderIntoNewWindow,因为这是一个批处理脚本。您可以使用cmds.render()并传入要渲染的相机。这是一个非常小的例子:

cmds.setAttr("defaultRenderGlobals.imageFormat", 32)
result = cmds.render('persp', x=512, y=512)

第一行将渲染格式设置为PNG,第二行渲染图像并将文件名放入变量'result'。

Maya让控制诸如文件最终位置,格式等等之类的东西变得非常笨拙。最简单的方法是在渲染全局窗口中设置适合您的选项,并检查脚本侦听器的设置更改,或参考node reference for renderGlobals例如,指定文件名而不是仅仅在渲染时重复maya文件的名称,您可以这样做:

 cmds.setAttr("defaultRenderGlobals.ifp",  "your_filename_here",type='string')

执行批处理部件很简单,只需循环遍历文件列表并对每个

执行相同的操作
filenames = ['c:/batch/a.mb', 'c:/batch/b.mb']
results = []
for eachfile in filenames:
    cmds.file(eachfile, open =True, force=True)
    cmds.setAttr("defaultRenderGlobals.imageFormat", 32)
    # other render settings would go here
    result.append( cmds.render('persp', x=512, y=512))

print results # prints out the names of all the rendered files

需要注意的是,渲染设置(因为它支持许多具有各自设置的不同渲染器,从Maya到OpenGL再到MentalRay到Turtle)非常复杂。如果您希望对文件进行复杂的配置,那么最好投资商业批量渲染管理器,该管理器具有适用于您需要使用的所有众多选项的良好UI。对于简单的情况(特别是文件已经正确设置并且你想要做的就是渲染它们),上面应该没问题。