import maya.cmds
as
cmds
import re
layer_List = cmds.ls(type = ' renderLayer ' )
layer_Nuke = [u ' color ' , u ' occ ' , u ' shadow ' ,u ' specular ' ]
myIntersector = cmds.stringArrayIntersector()
cmds.stringArrayIntersector(myIntersector, edit = True, intersect = layer_List)
cmds.stringArrayIntersector(myIntersector, edit = True, intersect = layer_Nuke)
check_List = cmds.stringArrayIntersector(myIntersector, query = True)
if (layer_Nuke == check_List):
cmds.deleteUI(myIntersector)
else :
cmds.deleteUI(myIntersector)
cmds.error( " There must be four renderable layers named color specular occ shadow " )
#Define nuke file by maya ' s render setting
defRes = cmds.listConnections( ' defaultRenderGlobals.resolution ' ) #Maya render resolution
reslWidthAtr = str(cmds.getAttr(defRes[ 0 ] + ' .width ' ))
reslHeightAtr = str(cmds.getAttr(defRes[ 0 ] + ' .height ' ))
nukeFormat = ' \" ' + reslWidthAtr + ' ' + reslHeightAtr + ' 0 0 ' + reslWidthAtr + ' ' + reslHeightAtr + ' 1 ' + ' \" ' #Nuke ' s project setting
renStartFrame = cmds.getAttr( ' defaultRenderGlobals.startFrame ' )
renEndFrame = cmds.getAttr( ' defaultRenderGlobals.endFrame ' )
renRange = str(renEndFrame - renStartFrame + 1 )
#Get maya file name
currentScen = cmds.file(q = True, sn = True)
if (None == currentScen):
cmds.error( ' Save scene first! ' )
else :
pass
currentScenSplit = re.split( ' / ' , currentScen)
mayaFile = currentScenSplit[ - 1 ]
mayaFileName = mayaFile[ 0 : - 3 ]
#create nuke project and put it into maya ' s scenes folder
nukeFile = currentScen[ 0 : - 3 ] + ' .nk ' #named with maya project name
imageName = cmds.getAttr( ' defaultRenderGlobals.imageFilePrefix ' ) #File name prefix below File output of the Render Setting in maya
if (None == imageName):
imageName = mayaFileName
else :
pass
#Get project path
imageFolderPath = re.split( ' scenes ' , currentScen)[ 0 ] + ' images '
#Get image format
imageType = cmds.getAttr( ' defaultRenderGlobals.imageFormat ' )
ext = ''
if ( 19 == imageType):
ext = ' .tga '
elif( 8 == imageType):
ext = ' .jpg '
elif( 7 == imageType):
ext = ' .iff '
elif( 31 == imageType):
ext = ' .psd '
else :
print ( ' File format is not in tga jpg iff psd ' )
#Define nuke framePadding
if (cmds.getAttr( ' defaultRenderGlobals.extensionPadding ' ) < 2 ):
framePadding = imageName + ' .% ' + ' d '
imageNameFull = framePadding + ext
else :
framePadding = imageName + ' .%0 ' + str(cmds.getAttr( ' defaultRenderGlobals.extensionPadding ' )) + ' d '
imageNameFull = framePadding + ext
#Read node file path
colorImagePath = imageFolderPath + ' /color/ ' + imageNameFull
occImagePath = imageFolderPath + ' /occ/ ' + imageNameFull
shadowImagePath = imageFolderPath + ' /shadow/ ' + imageNameFull
specularImagePath = imageFolderPath + ' /specular/ ' + imageNameFull
nukeFileStr = """
# ! D: / Program Files / Nuke6.0v1 / Nuke6. 0 .exe - nx
version 6.0 v1
define_window_layout_xml { <? xml version = " 1.0 " encoding = " UTF-8 " ?>
< layout version = " 1.0 " >
< window x = " 350 " y = " 51 " w = " 1478 " h = " 949 " screen = " 0 " >
< splitter orientation = " 1 " >
< split size = " 929 " ></ split >
< splitter orientation = " 1 " >
< split size = " 40 " ></ split >
< dock id = "" hideTitles = " 1 " activePageId = " Toolbar.1 " >
< page id = " Toolbar.1 " ></ page >
</ dock >
< split size = " 885 " ></ split >
< splitter orientation = " 2 " >
< split size = " 446 " ></ split >
< dock id = "" activePageId = " Viewer.1 " >
< page id = " Viewer.1 " ></ page >
</ dock >
< split size = " 446 " ></ split >
< dock id = "" activePageId = " DAG.1 " >
< page id = " DAG.1 " ></ page >
< page id = " Curve Editor.1 " ></ page >
</ dock >
</ splitter >
</ splitter >
< split size = " 537 " ></ split >
< dock id = "" activePageId = " Properties.1 " >
< page id = " Properties.1 " ></ page >
</ dock >
</ splitter >
</ window >
</ layout >
}
Root {
inputs 0
name """ + nukeFile + """
frame 3
first_frame 3
last_frame 4
lock_range true
format """ + nukeFormat + """
proxy_type scale
proxy_format " 1024 778 0 0 1024 778 1 1K_Super_35(full-ap) "
}
Read {
inputs 0
file """ + shadowImagePath + """
format """ + nukeFormat + """
last 10
name Read4
label shadow
xpos - 188
ypos - 159
}
Read {
inputs 0
file """ + specularImagePath + """
format """ + nukeFormat + """
last 10
name Read2
label specular
xpos - 494
ypos - 261
}
Read {
inputs 0
file """ + colorImagePath + """
format """ + nukeFormat + """
last 10
name Read1
label color
xpos - 713
ypos - 248
}
Merge2 {
inputs 2
operation screen
name Merge1
xpos - 586
ypos - 103
}
Read {
inputs 0
file """ + occImagePath + """
format """ + nukeFormat + """
last 10
name Read3
label occ
xpos - 330
ypos - 196
}
Merge2 {
inputs 2
name Merge2
xpos - 471
ypos - 49
}
Merge2 {
inputs 2
name Merge3
xpos - 342
ypos 16
}
Viewer {
frame 3
channels rgb
input_process false
name Viewer1
xpos - 244
ypos 77
} """
fileHandle = open(nukeFile, ' w ' )
fileHandle.write(nukeFileStr)
fileHandle.close()
import re
layer_List = cmds.ls(type = ' renderLayer ' )
layer_Nuke = [u ' color ' , u ' occ ' , u ' shadow ' ,u ' specular ' ]
myIntersector = cmds.stringArrayIntersector()
cmds.stringArrayIntersector(myIntersector, edit = True, intersect = layer_List)
cmds.stringArrayIntersector(myIntersector, edit = True, intersect = layer_Nuke)
check_List = cmds.stringArrayIntersector(myIntersector, query = True)
if (layer_Nuke == check_List):
cmds.deleteUI(myIntersector)
else :
cmds.deleteUI(myIntersector)
cmds.error( " There must be four renderable layers named color specular occ shadow " )
#Define nuke file by maya ' s render setting
defRes = cmds.listConnections( ' defaultRenderGlobals.resolution ' ) #Maya render resolution
reslWidthAtr = str(cmds.getAttr(defRes[ 0 ] + ' .width ' ))
reslHeightAtr = str(cmds.getAttr(defRes[ 0 ] + ' .height ' ))
nukeFormat = ' \" ' + reslWidthAtr + ' ' + reslHeightAtr + ' 0 0 ' + reslWidthAtr + ' ' + reslHeightAtr + ' 1 ' + ' \" ' #Nuke ' s project setting
renStartFrame = cmds.getAttr( ' defaultRenderGlobals.startFrame ' )
renEndFrame = cmds.getAttr( ' defaultRenderGlobals.endFrame ' )
renRange = str(renEndFrame - renStartFrame + 1 )
#Get maya file name
currentScen = cmds.file(q = True, sn = True)
if (None == currentScen):
cmds.error( ' Save scene first! ' )
else :
pass
currentScenSplit = re.split( ' / ' , currentScen)
mayaFile = currentScenSplit[ - 1 ]
mayaFileName = mayaFile[ 0 : - 3 ]
#create nuke project and put it into maya ' s scenes folder
nukeFile = currentScen[ 0 : - 3 ] + ' .nk ' #named with maya project name
imageName = cmds.getAttr( ' defaultRenderGlobals.imageFilePrefix ' ) #File name prefix below File output of the Render Setting in maya
if (None == imageName):
imageName = mayaFileName
else :
pass
#Get project path
imageFolderPath = re.split( ' scenes ' , currentScen)[ 0 ] + ' images '
#Get image format
imageType = cmds.getAttr( ' defaultRenderGlobals.imageFormat ' )
ext = ''
if ( 19 == imageType):
ext = ' .tga '
elif( 8 == imageType):
ext = ' .jpg '
elif( 7 == imageType):
ext = ' .iff '
elif( 31 == imageType):
ext = ' .psd '
else :
print ( ' File format is not in tga jpg iff psd ' )
#Define nuke framePadding
if (cmds.getAttr( ' defaultRenderGlobals.extensionPadding ' ) < 2 ):
framePadding = imageName + ' .% ' + ' d '
imageNameFull = framePadding + ext
else :
framePadding = imageName + ' .%0 ' + str(cmds.getAttr( ' defaultRenderGlobals.extensionPadding ' )) + ' d '
imageNameFull = framePadding + ext
#Read node file path
colorImagePath = imageFolderPath + ' /color/ ' + imageNameFull
occImagePath = imageFolderPath + ' /occ/ ' + imageNameFull
shadowImagePath = imageFolderPath + ' /shadow/ ' + imageNameFull
specularImagePath = imageFolderPath + ' /specular/ ' + imageNameFull
nukeFileStr = """
# ! D: / Program Files / Nuke6.0v1 / Nuke6. 0 .exe - nx
version 6.0 v1
define_window_layout_xml { <? xml version = " 1.0 " encoding = " UTF-8 " ?>
< layout version = " 1.0 " >
< window x = " 350 " y = " 51 " w = " 1478 " h = " 949 " screen = " 0 " >
< splitter orientation = " 1 " >
< split size = " 929 " ></ split >
< splitter orientation = " 1 " >
< split size = " 40 " ></ split >
< dock id = "" hideTitles = " 1 " activePageId = " Toolbar.1 " >
< page id = " Toolbar.1 " ></ page >
</ dock >
< split size = " 885 " ></ split >
< splitter orientation = " 2 " >
< split size = " 446 " ></ split >
< dock id = "" activePageId = " Viewer.1 " >
< page id = " Viewer.1 " ></ page >
</ dock >
< split size = " 446 " ></ split >
< dock id = "" activePageId = " DAG.1 " >
< page id = " DAG.1 " ></ page >
< page id = " Curve Editor.1 " ></ page >
</ dock >
</ splitter >
</ splitter >
< split size = " 537 " ></ split >
< dock id = "" activePageId = " Properties.1 " >
< page id = " Properties.1 " ></ page >
</ dock >
</ splitter >
</ window >
</ layout >
}
Root {
inputs 0
name """ + nukeFile + """
frame 3
first_frame 3
last_frame 4
lock_range true
format """ + nukeFormat + """
proxy_type scale
proxy_format " 1024 778 0 0 1024 778 1 1K_Super_35(full-ap) "
}
Read {
inputs 0
file """ + shadowImagePath + """
format """ + nukeFormat + """
last 10
name Read4
label shadow
xpos - 188
ypos - 159
}
Read {
inputs 0
file """ + specularImagePath + """
format """ + nukeFormat + """
last 10
name Read2
label specular
xpos - 494
ypos - 261
}
Read {
inputs 0
file """ + colorImagePath + """
format """ + nukeFormat + """
last 10
name Read1
label color
xpos - 713
ypos - 248
}
Merge2 {
inputs 2
operation screen
name Merge1
xpos - 586
ypos - 103
}
Read {
inputs 0
file """ + occImagePath + """
format """ + nukeFormat + """
last 10
name Read3
label occ
xpos - 330
ypos - 196
}
Merge2 {
inputs 2
name Merge2
xpos - 471
ypos - 49
}
Merge2 {
inputs 2
name Merge3
xpos - 342
ypos 16
}
Viewer {
frame 3
channels rgb
input_process false
name Viewer1
xpos - 244
ypos 77
} """
fileHandle = open(nukeFile, ' w ' )
fileHandle.write(nukeFileStr)
fileHandle.close()