如何通过 MEL 命令保存多幅图像
how to save multi images by MEL command
我是 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('renderWindowSaveImageCallback "renderView" ("D:/render/abc") "image";')
但是也没用。
Maya 给出消息 "ImageFormats instance has no attribute 'oldOutf' # "。
有什么命令可以同步渲染图像吗?
谢谢
您可能不想使用 RenderIntoNewWindow,因为这是一个批处理脚本。您可以只使用 cmds.render() 并传入要渲染的相机。这是一个非常简单的例子:
cmds.setAttr("defaultRenderGlobals.imageFormat", 32)
result = cmds.render('persp', x=512, y=512)
第一行设置渲染格式为PNG,第二行渲染图像并将文件名放入变量'result'。
Maya 使控制诸如文件结束位置、文件格式等事情变得烦人笨拙。最简单的做法是在 render globals window 中设置适合你的选项,并检查你的脚本侦听器的设置更改,或者查阅 node reference for renderGlobals 例如,指定一个文件name 而不是在渲染时仅重复 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。对于简单的情况(尤其是文件已经正确设置并且您要做的就是渲染它们)上面应该没问题。
我是 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('renderWindowSaveImageCallback "renderView" ("D:/render/abc") "image";')
但是也没用。 Maya 给出消息 "ImageFormats instance has no attribute 'oldOutf' # "。
有什么命令可以同步渲染图像吗? 谢谢
您可能不想使用 RenderIntoNewWindow,因为这是一个批处理脚本。您可以只使用 cmds.render() 并传入要渲染的相机。这是一个非常简单的例子:
cmds.setAttr("defaultRenderGlobals.imageFormat", 32)
result = cmds.render('persp', x=512, y=512)
第一行设置渲染格式为PNG,第二行渲染图像并将文件名放入变量'result'。
Maya 使控制诸如文件结束位置、文件格式等事情变得烦人笨拙。最简单的做法是在 render globals window 中设置适合你的选项,并检查你的脚本侦听器的设置更改,或者查阅 node reference for renderGlobals 例如,指定一个文件name 而不是在渲染时仅重复 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。对于简单的情况(尤其是文件已经正确设置并且您要做的就是渲染它们)上面应该没问题。