python - 在 Maya 中将多个着色器分配给导入的 .OBJ 文件

标签 python import textures maya

我需要将多个文件导入 Maya 并为每个文件分配多个 Material 。

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

使用这段代码,我可以只为整个几何体分配一个着色器。

是否可以将不同的着色器分配给同一 block 几何体?

最佳答案

当然,您可以为同一 block 几何体分配不同的着色器,也可以为多个 3d 模型分配任何可访问的着色器。

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 函数访问数组中的着色器:

import random as random

myArray = [shader_node1, shader_node2, shader_node3]

for i in myArray :

    mat.select( 'pSphere1' )
    mat.move( 7, 6, 0, r = True )
    mat.hyperShade( assign = myArray[int(random.uniform(0,3))] )

    mat.select( 'pSphere2' )
    mat.hyperShade( assign = myArray[int(random.uniform(0,3))] )

    mat.select( 'pSphere3' )
    mat.move( -7, -2, 0, r = True )
    mat.hyperShade( assign = myArray[int(random.uniform(0,3))] )

关于python - 在 Maya 中将多个着色器分配给导入的 .OBJ 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39785693/

相关文章:

python - django mysql 给出页面未找到(404)而 sqlite 工作正常

python - Django - 无法发布 Linux 服务器

python - 使用 Python 和 win32com 从 Outlook GAL 获取联系信息

android - 在 AndEngine 中加载大纹理

ios - ASyncDisplayKit (Texture) - 调整可见节点的大小

python - python的dict构造函数是如何处理Mappings的?

python - 为什么 google.protobuf 的导入在 ipython 中可以正常工作,但在 python 中却不行?

python - 从 Python 中的文本文件导入 3-D 列表变量

python - 如何从另一个 .py 文件调用函数?

ios - 如何在 textField 上方实现/显示以下弹出窗口?