首页 > 解决方案 > 渲染到帧缓冲区的 Maya 脚本不断将焦点放在窗口上

问题描述

我在 Maya (python) 中有一个脚本,它将一系列帧渲染到 V-ray 帧缓冲区,每个渲染层一个。它运行良好,但在切换渲染层并启动下一个渲染时,Maya 会抓住焦点,打断艺术家在脚本运行时继续执行的任何任务。我希望这是一项后台任务。Maya 在 Windows 上运行。

import maya
import maya.cmds as cmds
import re
from functools import partial
import sys
from datetime import datetime

global cancel
cancel = 0

print 'batch_review'

def no_cam_window_popup(no_cam_set_list):
    #print no_cam_set_list
    cmds.window(title = 'WARNING: NO CAMERAS LINKED TO LAYERS', width = 300, height = 75, sizeable = False)
    cmds.columnLayout("mainColumn", adjustableColumn = True)
    cmds.rowLayout("nameRowLayout01", numberOfColumns = 15, parent = "mainColumn")
    cmds.text(label = ("no cam set for layers:"))
    for layer in no_cam_set_list:
        cmds.text(label = ('' + layer + ', '),font = 'boldLabelFont')
    cmds.showWindow()

def renderThumbs(checkBoxLow,checkBoxMid,checkBoxHigh,checkBoxRenderRegion,intField_res,floatField_thrhld,*args):
    global cancel
    cams = cmds.ls(type = "camera")
    cancel = 0
    popup_win = 0
    no_cam_set_list = []
    cmds.loadPlugin('vrayformaya', quiet=True)
    cmds.pluginInfo('vrayformaya', edit=True, autoload=True)
    cmds.setAttr("defaultRenderGlobals.ren", "vray", type = "string")

    curLay = cmds.editRenderLayerGlobals( currentRenderLayer = True, query = True )
    changeLay = curLay

    rls = cmds.ls(type = "renderLayer")
    renCams = cmds.ls(type = "camera")
    renCam = "persp"

    lowBut = cmds.checkBox(checkBoxLow,value = True, query = True)
    midBut = cmds.checkBox(checkBoxMid,value = True, query = True)
    highBut = cmds.checkBox(checkBoxHigh,value = True, query = True)
    globopt_cache_geom_plugins = cmds.getAttr('vraySettings.globopt_cache_geom_plugins')
    #print 'globopt_cache_geom_plugins = ',globopt_cache_geom_plugins

    print " "
    print "-- batch_review --"

    res = cmds.intField(intField_res, v = True, query = True)
    thr = cmds.floatField(floatField_thrhld, v = True,query = True)

    if lowBut == 1:
        cmds.setAttr("vraySettings.dmcThreshold",thr)
        cmds.setAttr("vraySettings.width", res)
        cmds.setAttr("vraySettings.height", res)
        cmds.setAttr("vraySettings.globopt_cache_geom_plugins",1)
        cmds.setAttr("vraySettings.globopt_ray_maxIntens_on",1)
        #cmds.setAttr('vraySettings.globopt_cache_geom_plugins',globopt_cache_geom_plugins)
        print " "
        print "---"
        print "quality = %s, dmcThreshold = %s"%(res,thr)
    if midBut == 1:
        cmds.setAttr("vraySettings.dmcThreshold",thr)
        cmds.setAttr("vraySettings.width", res)
        cmds.setAttr("vraySettings.height", res)
        cmds.setAttr("vraySettings.globopt_cache_geom_plugins",1)
        cmds.setAttr("vraySettings.globopt_ray_maxIntens_on",1)
        #cmds.setAttr('vraySettings.globopt_cache_geom_plugins',globopt_cache_geom_plugins)
        print " "
        print "---"
        print "quality = %s, dmcThreshold = %s"%(res,thr)
    if highBut == 1:
        cmds.setAttr("vraySettings.dmcThreshold",thr)
        cmds.setAttr("vraySettings.width", res)
        cmds.setAttr("vraySettings.height", res)
        cmds.setAttr("vraySettings.globopt_cache_geom_plugins",1)
        cmds.setAttr("vraySettings.globopt_ray_maxIntens_on",1)
        #cmds.setAttr('vraySettings.globopt_cache_geom_plugins',globopt_cache_geom_plugins)
        print " "
        print "---"
        print "quality = %s, dmcThreshold = %s"%(res,thr)

    print "--- "
    print " "

    for rl in rls:
        found_cam = 0
        if rl != "defaultRenderLayer" and cancel == 0:
            rlState = cmds.getAttr(rl + ".renderable")
            if rlState == 1:
                print ' '
                print "rende layer = ",rl
                cmds.editRenderLayerGlobals( currentRenderLayer = rl )
                for cam in cams:
                    camState = cmds.getAttr(cam + ".renderable")
                    if camState == 1:
                        rrState = cmds.checkBox(checkBoxRenderRegion,value = True,query = True)
                        reg = cmds.vray("vfbControl","-getregion")
                        if  rrState == 0:
                            cmds.vray("vfbControl","-setregion","reset")
                        if  rrState == 1:
                            cmds.vray("vfbControl","-setregionenabled",1)
                            cmds.vray("vfbControl","-setregion",reg[0],reg[1],reg[2],reg[3])
                        mayaString = "renderWindowRenderCamera render renderView " + cam
                        print 'using ' + cam + ' for ' + rl
                        maya.mel.eval(mayaString)
                        cmds.vray("vfbControl", "-historysave")
                        cmds.vray("vfbControl", "-historyselect",0)
                        dte = datetime.now().strftime('%H:%M:%S')
                        editStr = dte + " ,render layer: " + rl + " , " + "cam: " + cam
                        cmds.vray("vfbControl", "-historycomment", editStr)
                        print " "
                        found_cam = 1
                if found_cam == 0:
                    print 'no camera link found, using persp cam for ',rl
                    cam = 'persp'
                    rrState = cmds.checkBox(checkBoxRenderRegion,value = True,query = True)
                    reg = cmds.vray("vfbControl","-getregion")
                    if  rrState == 0:
                        cmds.vray("vfbControl","-setregion","reset")
                    if  rrState == 1:
                        cmds.vray("vfbControl","-setregionenabled",1)
                        cmds.vray("vfbControl","-setregion",reg[0],reg[1],reg[2],reg[3])
                    mayaString = "renderWindowRenderCamera render renderView " + cam
                    maya.mel.eval(mayaString)
                    cmds.vray("vfbControl", "-historysave")
                    cmds.vray("vfbControl", "-historyselect",0)
                    dte = datetime.now().strftime('%H:%M:%S')
                    editStr = dte + " ,render layer: " + rl + " , " + "cam: " + cam
                    cmds.vray("vfbControl", "-historycomment", editStr)
                    popup_win = 1
                    no_cam_set_list.append(rl)
    #if popup_win == 1:
        #no_cam_window_popup(no_cam_set_list)


def checkBoxCheckLow(checkBoxLow,checkBoxMid,checkBoxHigh,intField_res,floatField_thrhld,*args):
    global cancel
    lowButVal = cmds.checkBox(checkBoxLow,value = True, query = True)
    midButVal = cmds.checkBox(checkBoxMid,value = True, query = True)
    highButVal = cmds.checkBox(checkBoxHigh,value = True, query = True)

    cmds.checkBox(checkBoxMid,value = False, edit = True)
    cmds.checkBox(checkBoxHigh,value = False, edit = True)
    cmds.intField(intField_res, v = 800,edit = True)
    cmds.floatField(floatField_thrhld, v = .1,edit = True )
    cancel = 0

def checkBoxCheckMid(checkBoxLow,checkBoxMid,checkBoxHigh,intField_res,floatField_thrhld,*args):
    global cancel
    lowButVal = cmds.checkBox(checkBoxLow,value = True, query = True)
    midButVal = cmds.checkBox(checkBoxMid,value = True, query = True)
    highButVal = cmds.checkBox(checkBoxHigh,value = True, query = True)

    cmds.checkBox(checkBoxLow,value = False, edit = True)
    cmds.checkBox(checkBoxHigh,value = False, edit = True)
    cmds.intField(intField_res, v = 1000,edit = True)
    cmds.floatField(floatField_thrhld, v = .5,edit = True )
    cancel = 0

def checkBoxCheckHigh(checkBoxLow,checkBoxMid,checkBoxHigh,intField_res,floatField_thrhld,*args):
    global cancel
    lowButVal = cmds.checkBox(checkBoxLow,value = True, query = True)
    midButVal = cmds.checkBox(checkBoxMid,value = True, query = True)
    highButVal = cmds.checkBox(checkBoxHigh,value = True, query = True)

    cmds.checkBox(checkBoxLow,value = False, edit = True)
    cmds.checkBox(checkBoxMid,value = False, edit = True)
    cmds.intField(intField_res, v = 2000,edit = True)
    cmds.floatField(floatField_thrhld, v = .008,edit = True )
    cancel = 0

def checkBoxAOVchange(checkBoxAOV,*args):
    checkBoxAOVval = cmds.checkBox(checkBoxAOV,value = True,query = True)
    if checkBoxAOVval == 1:
        cmds.setAttr("vraySettings.relements_enableall", 1)
    if checkBoxAOVval == 0:
        cmds.setAttr("vraySettings.relements_enableall", 0)

def rrCheckbox(checkBoxRenderRegion,reg,*args):
    global gReg
    zeroes = ['0','0','0','0']
    tRes = cmds.vray("vfbControl","-getregion")
    if tRes != zeroes:
        gReg = tRes
    rrstate = cmds.checkBox(checkBoxRenderRegion,value = True,query = True)
    if rrstate == 0:
        if gReg != zeroes:
            cmds.vray("vfbControl","-setregion",gReg[0],gReg[1],gReg[2],gReg[3])
        else:
            cmds.vray("vfbControl","-setregion",reg[0],reg[1],reg[2],reg[3])
        cmds.vray("vfbControl","-setregion","reset")
    if rrstate == 1:
        cmds.vray("vfbControl","-setregionenabled",1)
        if gReg != zeroes:
            cmds.vray("vfbControl","-setregion",gReg[0],gReg[1],gReg[2],gReg[3])
        else:
            cmds.vray("vfbControl","-setregion",reg[0],reg[1],reg[2],reg[3])
    return(reg)

def cancelOPs(*args):
    global cancel
    cancel = 1
    raise Exception("quitting renders")

def set_threshhold(floatField_thrhld,*args):
    threshhold_value = cmds.floatField(floatField_thrhld,value = True,query = True)
    cmds.setAttr('vraySettings.dmcThreshold',threshhold_value)

def set_resolution(intField_res,*args):
    intField_res_value = cmds.intField(intField_res,value = True,query = True)
    cmds.setAttr('vraySettings.width',intField_res_value)
    cmds.setAttr('vraySettings.height',intField_res_value)

def renthumbsWin():
    name = "Batch_Review"
    global gReg
    gReg = ('0','0','0','0')
    zeroes = ('0','0','0','0')
    windowSize = (200,100)
    if (cmds.window(name, exists = True)):
        cmds.deleteUI(name)
    window = cmds.window(name, title = name, width = 350, height = 50,bgc = (.2,.2,.2), s = False)
    cmds.columnLayout("mainColumn", adjustableColumn = True)
    cmds.rowLayout("nameRowLayout01", numberOfColumns = 15, parent = "mainColumn")
    cmds.text(label = "preset quality:  ")
    checkBoxLow = cmds.checkBox(label = "low", value = False)
    checkBoxMid = cmds.checkBox(label = "mid", value = True,)
    checkBoxHigh = cmds.checkBox(label = "high", value = False)
    cmds.text(label = "                             ")
    cmds.text(label = "resolution:  ")
    intField_res = cmds.intField(v = 1000,width = 45)
    #print 'intField_res = ',intField_res
    cmds.intField(intField_res, changeCommand = partial(set_resolution,intField_res),edit = True)
    cmds.text(label = "  ")
    cmds.text(label = "threshold:  ")
    floatField_thrhld = cmds.floatField(v = .5,width = 45)
    cmds.floatField(floatField_thrhld, changeCommand = partial(set_threshhold,floatField_thrhld),edit = True)
    cmds.checkBox(checkBoxLow, changeCommand = partial(checkBoxCheckLow,checkBoxLow,checkBoxMid,checkBoxHigh,intField_res,floatField_thrhld), edit = True)
    cmds.checkBox(checkBoxMid, changeCommand = partial(checkBoxCheckMid,checkBoxLow,checkBoxMid,checkBoxHigh,intField_res,floatField_thrhld),edit = True)
    cmds.checkBox(checkBoxHigh, changeCommand = partial(checkBoxCheckHigh,checkBoxLow,checkBoxMid,checkBoxHigh,intField_res,floatField_thrhld),edit = True)
    cmds.rowLayout("nameRowLayout02", numberOfColumns = 10, parent = "mainColumn")
    cmds.text(label = "  ")
    cmds.rowLayout("nameRowLayout03", numberOfColumns = 5, parent = "mainColumn")
    renderButton = cmds.button(label = "render",width = 100, bgc = (.6,.8,1) )
    cmds.text(label = "  ")
    cmds.button(label = "cancel renders", command = partial(cancelOPs),bgc = (1,.3,.3) )
    cmds.rowLayout("nameRowLayout04", numberOfColumns = 10, parent = "mainColumn")
    cmds.text(label = "  ")
    cmds.rowLayout("nameRowLayout05", numberOfColumns = 10, parent = "mainColumn")
    checkBoxRenderRegion = cmds.checkBox(label = "use render region", value = False)
    cmds.text(label = "  ")
    cmds.text(label = "  ")
    reg = cmds.vray("vfbControl","-getregion")
    if reg != gReg and reg != zeroes:
        gReg = reg
    cmds.vray("vfbControl","-setregion","reset")
    cmds.checkBox(checkBoxRenderRegion,changeCommand = partial(rrCheckbox,checkBoxRenderRegion,reg),edit = True)
    cmds.rowLayout("nameRowLayout06", numberOfColumns = 10, parent = "mainColumn")
    AOVstate = cmds.getAttr("vraySettings.relements_enableall")
    checkBoxAOV = cmds.checkBox(label = "elements", value = AOVstate)
    cmds.checkBox(checkBoxAOV,changeCommand = partial(checkBoxAOVchange,checkBoxAOV),edit = True)
    cmds.button(renderButton,command = partial(renderThumbs,checkBoxLow,checkBoxMid,checkBoxHigh,checkBoxRenderRegion,intField_res,floatField_thrhld),edit = True)
    cmds.showWindow()

def main():
    renthumbsWin()

main()

标签: pythonmaya

解决方案


推荐阅读