Created
December 24, 2022 19:01
-
-
Save cgside/f3dfd3beed339477bc032285b41c3423 to your computer and use it in GitHub Desktop.
Materials from max vray to Maya arnold
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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