为5月份导入的.OBJ文件指定多个着色器

2024-10-05 10:10:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要将多个文件导入Maya并为每个文件指定多个材质。

我用Python编写了以下代码:

import maya.cmds as cmds
import glob

def importFile(i):
    cmds.file(i, i=True, groupReference=True, groupName="myobj")

def moveFile():
    cmds.select("myobj")

    cmds.scale(1,1,1, r=True)
    cmds.move (0, 14, 0, r=True)
    cmds.rotate (-90, 0, 0, r=True)

def materialFile():
    cmds.select("myobj")
    myMaterial = "blinn1"
    cmds.sets( e=True, forceElement= myMaterial + 'SG' ) 

def renderFile(i):
    cmds.setAttr("defaultRenderGlobals.imageFilePrefix", i, type="string")
    cmds.render(batch=True)

def deleteFile():
    cmds.select("myobj")
    cmds.delete()

myglob = glob.glob("/The/path/of/your/Obj_files/*.obj") 

for i in myglob:
    importFile(i)
    moveFile()
    materialFile()
    renderFile(i)
    deleteFile()

使用此代码,我只能为整个几何体指定一个着色器。

可以为同一个几何体指定不同的着色器吗?


Tags: 文件代码importtruedefselectglobcmds
1条回答
网友
1楼 · 发布于 2024-10-05 10:10:17

当然,您可以为同一个几何体以及多个三维模型的任何可访问着色器指定不同的着色器。在

import maya.cmds as mat

d = 0

shader_node1 = mat.shadingNode( "anisotropic", asShader = True, n = 'ani' )
shader_node2 = mat.shadingNode( "phong", asShader = True, n = 'pho' )
shader_node3 = mat.shadingNode( "lambert", asShader = True, n = 'lam' )
mat.setAttr( (shader_node1 + '.color'), 1.0, 0.0, 0.0, type = 'double3' )
mat.setAttr( (shader_node2 + '.color'), 0.0, 1.0, 0.0, type = 'double3' )
mat.setAttr( (shader_node2 + '.transparency'), 0.25, 0.25, 0.25, type = 'double3' )
mat.setAttr( (shader_node3 + '.color'), 0.0, 0.0, 1.0, type = 'double3' )

shading_group1 = mat.sets( renderable = True, noSurfaceShader = True, empty = True )
shading_group2 = mat.sets( renderable = True, noSurfaceShader = True, empty = True )
shading_group3 = mat.sets( renderable = True, noSurfaceShader = True, empty = True )

mat.connectAttr( '%s.outColor' %shader_node1, '%s.surfaceShader' %shading_group1 )
mat.connectAttr( '%s.outColor' %shader_node2, '%s.surfaceShader' %shading_group2 )
mat.connectAttr( '%s.outColor' %shader_node3, '%s.surfaceShader' %shading_group3 )

mat.polySphere( radius = 5 )
mat.polySphere( radius = 7 )
mat.polySphere( radius = 3 )

mat.select( 'pSphere1' )
mat.move( 7, 6, 0, r = True )
mat.hyperShade( assign = shader_node1 )

mat.select( 'pSphere2' )
mat.hyperShade( assign = shader_node2 )

mat.select( 'pSphere3' )
mat.move( -7, -2, 0, r = True )
mat.hyperShade( assign = shader_node3 )

d += 1

enter image description here

也可以使用random函数访问数组中的着色器:

^{pr2}$

相关问题 更多 >

    热门问题