我是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;。
有没有可以用同步方式渲染图像的命令? 感谢。
答案 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。对于简单的情况(特别是文件已经正确设置并且你想要做的就是渲染它们),上面应该没问题。