Skip to content

Instantly share code, notes, and snippets.

@cgside
Created December 24, 2022 19:01
Show Gist options
  • Save cgside/f3dfd3beed339477bc032285b41c3423 to your computer and use it in GitHub Desktop.
Save cgside/f3dfd3beed339477bc032285b41c3423 to your computer and use it in GitHub Desktop.
Materials from max vray to Maya arnold
import os
mapsPath = 'path/to/textures'
def createFileTexture(fileTextureName, p2dName):
tex = cmds.shadingNode('file', name=fileTextureName, asTexture=True, isColorManaged=True)
#if not cmds.objExists(p2dName):
#p2d = cmds.shadingNode('place2dTexture', name=p2dName, asUtility=True)
p2d = cmds.shadingNode('place2dTexture', asUtility=1, n =p2dName)
cmds.setAttr(tex+'.filterType',0 )
cmds.connectAttr(p2d+'.outUV', tex+'.uvCoord')
cmds.connectAttr(p2d+'.outUvFilterSize', tex+'.uvFilterSize')
cmds.connectAttr(p2d+'.vertexCameraOne', tex+'.vertexCameraOne')
cmds.connectAttr(p2d+'.vertexUvOne', tex+'.vertexUvOne')
cmds.connectAttr(p2d+'.vertexUvThree', tex+'.vertexUvThree')
cmds.connectAttr(p2d+'.vertexUvTwo', tex+'.vertexUvTwo')
cmds.connectAttr(p2d+'.coverage', tex+'.coverage')
cmds.connectAttr(p2d+'.mirrorU', tex+'.mirrorU')
cmds.connectAttr(p2d+'.mirrorV', tex+'.mirrorV')
cmds.connectAttr(p2d+'.noiseUV', tex+'.noiseUV')
cmds.connectAttr(p2d+'.offset', tex+'.offset')
cmds.connectAttr(p2d+'.repeatUV', tex+'.repeatUV')
cmds.connectAttr(p2d+'.rotateFrame', tex+'.rotateFrame')
cmds.connectAttr(p2d+'.rotateUV', tex+'.rotateUV')
cmds.connectAttr(p2d+'.stagger', tex+'.stagger')
cmds.connectAttr(p2d+'.translateFrame', tex+'.translateFrame')
cmds.connectAttr(p2d+'.wrapU', tex+'.wrapU')
cmds.connectAttr(p2d+'.wrapV', tex+'.wrapV')
return tex
mapsChannels = ['albedo','glossiness','normal','opacity','translucency']
selected_plant = cmds.ls(sl=1)[0].split("[")[0] # remember a token for comparison below
cmds.hyperShade(smn=1) # that will select the shader
materials = cmds.ls(sl=1)
#print(materials)
for i, mat in enumerate(materials):
#print(i,mat)
# select object or face
b = selected_plant # remember a token for comparison below
sg = cmds.listConnections(mat+".oc", s=0, d=1)[0] # figure out the shading group
# select the faces of the same object with same shader attached
l = []
for o in cmds.sets(sg, q=1):
if b not in o: continue
l.append(o)
shader = cmds.shadingNode( 'aiStandardSurface', asShader=True, n=mat+'_MAT' )
cmds.select(l)
cmds.hyperShade(a=shader)
for channel in mapsChannels:
texturePath = mapsPath+'/'+mat+'_'+channel+'.jpg'
fileExists = os.path.exists( texturePath )
#create connections
if channel is 'albedo' and fileExists:
fileCreated = createFileTexture('fileOne_'+str(channel), 'p2dOne_'+str(channel))
cc = cmds.shadingNode('aiColorCorrect', asUtility=1)
cmds.connectAttr(fileCreated + '.outColor', cc + '.input')
cmds.connectAttr(cc + '.outColor', shader + '.baseColor')
cmds.setAttr(fileCreated+'.fileTextureName', texturePath ,type="string")
elif channel is 'glossiness' and fileExists:
fileCreated = createFileTexture('fileOne_'+str(channel), 'p2dOne_'+str(channel))
#cmds.connectAttr(fileCreated + '.outColorR', shader + '.specularRoughness')
cc = cmds.shadingNode('aiColorCorrect', asUtility=1)
cmds.setAttr(cc+'.invert',1)
cmds.connectAttr(fileCreated + '.outColor', cc + '.input')
cmds.connectAttr(cc + '.outColorR', shader + '.specularRoughness')
cmds.setAttr(fileCreated+'.fileTextureName', texturePath ,type="string")
cmds.setAttr(fileCreated + '.colorSpace', 'Raw', type='string')
cmds.setAttr(fileCreated + '.ignoreColorSpaceFileRules', 1)
elif channel is 'normal' and fileExists:
fileCreated = createFileTexture('fileOne_'+str(channel), 'p2dOne_'+str(channel))
#cmds.connectAttr(fileCreated + '.outColorR', shader + '.specularRoughness')
normalMap = cmds.shadingNode('aiNormalMap', asUtility=1)
cmds.connectAttr(fileCreated + '.outColor', normalMap + '.input')
cmds.connectAttr(normalMap + '.outValue', shader + '.normalCamera')
cmds.setAttr(fileCreated+'.fileTextureName', texturePath ,type="string")
cmds.setAttr(fileCreated + '.colorSpace', 'Raw', type='string')
cmds.setAttr(fileCreated + '.ignoreColorSpaceFileRules', 1)
elif channel is 'opacity' and fileExists:
fileCreated = createFileTexture('fileOne_'+str(channel), 'p2dOne_'+str(channel))
cmds.connectAttr(fileCreated + '.outColor', shader + '.opacity')
cmds.setAttr(fileCreated+'.fileTextureName', texturePath ,type="string")
cmds.setAttr(fileCreated + '.colorSpace', 'Raw', type='string')
cmds.setAttr(fileCreated + '.ignoreColorSpaceFileRules', 1)
elif channel is 'translucency' and fileExists:
fileCreated = createFileTexture('fileOne_'+str(channel), 'p2dOne_'+str(channel))
cmds.setAttr(shader+'.subsurface', 0.3)
cmds.setAttr(shader+'.thinWalled', 1)
cmds.connectAttr(fileCreated + '.outColor', shader + '.subsurfaceColor')
cmds.setAttr(fileCreated+'.fileTextureName', texturePath ,type="string")
else:
print('other channel')
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment