2017-03-07 7 views
0

シーンをシンプルで読みやすいファイルに出力するためのPythonスクリプトを作成しています。Mayaのpythonスクリプトからテクスチャファイル名を取得しますか?

位置、回転、スケール、メッシュ名は正常に出力されましたが、メッシュに適用されるテクスチャのファイル名はどのように取得できますか?

import maya.cmds as cmds 
meshesWithoutShape = [] 
meshes = cmds.ls("mesh_*") 
for mesh in meshes: 
    if("Shape" not in mesh): 
     meshesWithoutShape.append(mesh) 

shapesInSel = cmds.ls(dag=1,o=1,s=1) 
shadingGrps = cmds.listConnections(shapesInSel,type='shadingEngine') 
shaders = cmds.ls(cmds.listConnections(shadingGrps),materials=1) 
fileNode = cmds.listConnections('%s.color' % (shaders[0]), type='file') 
currentFile = cmds.getAttr("%s.fileTextureName" % fileNode[0]) 

for mesh in meshesWithoutShape: 
    print("\n" + mesh.rstrip('1234567890')) 

    print round(cmds.getAttr("%s.translateX" % mesh), 2), round(cmds.getAttr("%s.translateY" % mesh), 2), round(cmds.getAttr("%s.translateZ" % mesh), 2) 

    print cmds.getAttr("%s.rotateX" % mesh), cmds.getAttr("%s.rotateY" % mesh), cmds.getAttr("%s.rotateZ" % mesh) 

    print cmds.getAttr("%s.scaleX" % mesh), cmds.getAttr("%s.scaleY" % mesh), cmds.getAttr("%s.scaleZ" % mesh) 

    fileNode = cmds.listConnections('%s.color' % (shaders[0]), type='file') 
    currentFile = cmds.getAttr("%s.fileTextureName" % fileNode[0]) 
    print currentFile 

答えて

4

lsを使用してすべてのファイルノードを一覧表示し、テクスチャパスを取得できますか?

allFileNodes = cmds.ls(et="file") 
for eachFile in allFileNodes: 
    currentFile = cmds.getAttr("%s.fileTextureName" % eachFile) 

あなたが選択または特定のメッシュ

shapesInSel = cmds.ls(dag=1,o=1,s=1,sl=1) 
shadingGrps = cmds.listConnections(shapesInSel,type='shadingEngine') 
shaders = cmds.ls(cmds.listConnections(shadingGrps),materials=1) 
fileNode = cmds.listConnections('%s.color' % (shaders[0]), type='file') 
currentFile = cmds.getAttr("%s.fileTextureName" % fileNode[0]) 

からあれば取得したい場合はアップデート

ここでは、あなたのニーズに合わせて

import maya.cmds as cmds 
meshesWithoutShape = [] 
meshes = cmds.ls("mesh_*", tr = True) 

for mesh in meshes: 
    print("\n" + mesh.rstrip('1234567890')) 

    print round(cmds.getAttr("%s.translateX" % mesh), 2), round(cmds.getAttr("%s.translateY" % mesh), 2), round(cmds.getAttr("%s.translateZ" % mesh), 2) 

    print cmds.getAttr("%s.rotateX" % mesh), cmds.getAttr("%s.rotateY" % mesh), cmds.getAttr("%s.rotateZ" % mesh) 

    print cmds.getAttr("%s.scaleX" % mesh), cmds.getAttr("%s.scaleY" % mesh), cmds.getAttr("%s.scaleZ" % mesh) 
    shadingGrps = cmds.listConnections(mesh,type='shadingEngine') 
    shaders = cmds.ls(cmds.listConnections(shadingGrps),materials=1) 
    fileNode = cmds.listConnections('%s.color' % (shaders[0]), type='file') 
    currentFile = cmds.getAttr("%s.fileTextureName" % fileNode[0]) 
    print currentFile 
+0

あなたが仕事をしたいコードがあります2番目のコードブロックは、私が必要とするものとほとんど同じですが、唯一の問題は毎回同じテクスチャを取得します。私はこのコードが何を誤解していると思います、私は現在のコードで私の質問を更新しました。 –

+0

私はちょうど私の答えも更新しましたが、慎重に見れば、かなり簡単になっているはずです:) – Achayan

+0

私はこのフォーマットも試してみましたが、問題にぶつかりました: "警告: "これがシェーディングを起こそうとしているところです.Grps –

関連する問題