我想为我的玛雅项目中的每个渲染层获得渲染分辨率。我使用玛雅2016与SP 5。
我知道,您可以使用以下命令获得当前选定的渲染层的分辨率:
width = maya.cmds.getAttr("defaultResolution.width")
height = maya.cmds.getAttr("defaultResolution.height")现在,我要所有渲染者的决议。您可能会认为,编写循环、递归函数或处理事件"renderLayerManagerChange“或条件"isCurrentRenderLayerChanging”都很简单,但它不起作用,或者,我也找不到它是如何工作的。
假设我有两个渲染者。"defaultRenderLayer“具有默认决议960x540,层"layer1”覆盖其分辨率设置,因此具有第1920x1080号决议。
这就是我使用for循环得到的结果:
renderlayers = cmds.ls(type="renderLayer")
for layer in renderlayers:
print layer
#select the render layer
cmds.editRenderLayerGlobals(crl=layer)
#get resolution values
w = cmds.getAttr("defaultResolution.width")
h = cmds.getAttr("defaultResolution.height")
print str(w),"x",str(h)输出(取决于我已经通过Maya手动选择的Renderlayer ):
defaultRenderLayer
1920 x 1080
layer1
1920 x 1080对于递归函数也是如此,所以我将跳过这一部分。
现在,处理事件/条件似乎更有希望了。我假设选择RenderLayer需要花费一些时间,这意味着for循环/递归函数太快了。
下面是一个来自docs的建议条件的示例:
def updateClicked(self):
print "update"
self.layerchanged_event = cmds.scriptJob(ct=["isCurrentRenderLayerChanging", self.onLayerChange])
self.renderlayers = cmds.ls(type="renderLayer")
self.index = 0
self.updating = True
cmds.editRenderLayerGlobals(crl=self.renderlayers[0])
def onLayerChange(self):
if self.updating == True:
currentlayer = cmds.editRenderLayerGlobals(q=True,crl=True)
print currentlayer
w = cmds.getAttr("defaultResolution.width")
h = cmds.getAttr("defaultResolution.height")
print str(w),"x",str(h)
next = self.index+1
if next == len(self.renderlayers):
print "done"
self.updating = False
else:
cmds.editRenderLayerGlobals(crl=self.renderlayers[next])我从这里得到的输出:
update
defaultRenderLayer
1920 x 1080对于这个例子,我选择了"layer1“层。正如您所看到的,尽管正确地显示当前呈现层是"defaultRenderLayer",而"layer1“甚至根本没有被选中,但还是返回了错误的分辨率。
每次选择渲染层时,我也尝试调用cmds.refresh(),但都没有效果。调用mel命令layerEditorLayerButtonSelect 0 layer1 (实际上是任何其他层)只会给出一个错误layerEditor.mel line 5366: Invalid layer type: Render
无论我如何尝试,我似乎无法得到每个渲染层的决议列表。但是为什么呢?我还能做什么呢?
发布于 2016-07-13 11:48:21
您可以尝试使用evalDeferred()命令。
def test():
renderlayers = cmds.ls(type="renderLayer")
for layer in renderlayers:
print layer
#select the render layer
cmds.editRenderLayerGlobals(crl=layer)
#get resolution values
w = cmds.getAttr("defaultResolution.width")
h = cmds.getAttr("defaultResolution.height")
print str(w),"x",str(h)
cmds.evalDeferred('test()')https://stackoverflow.com/questions/38346542
复制相似问题