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()