忍者ブログ
2024/04/19

【MAYA】ノード以下のテクスチャを指定フォルダにコピー→パスの切り替え

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

コメント

ただいまコメントを受けつけておりません。

2015/03/14

【MAYA】ノード以下のテクスチャを指定フォルダにコピー→パスの切り替え

ノード以下のテクスチャファイルを外部のフォルダにコピー、コピー後にテクスチャパスを書き換えるpymelです。
テクスチャファイルの一覧を取得する関数はいつもお世話になっている

逆引きmayaCommand辞典 | Reincarnation+

さんから拝借しました~。
((“(人ω・)ありがたや~(・ω人)”))

#!/usr/bin/env python
#!/usr/bin/env python # -*- coding: utf-8 -*- import pymel.core as pm import os import shutil #指定ノード以下に接続されている全テクスチャノードを取得 def get_all_texture_node(root_node): if isinstance(root_node, str) == True: root_node = pm.PyNode(root_node) shapes = root_node.listRelatives(ad=True, type="mesh") file_nodes = [] for i in shapes: shading_engines = i.connections(type="shadingEngine") for s in shading_engines: shader_list = s.surfaceShader.connections() for shader in shader_list: file_node = shader.connections(type="file") file_nodes += file_node return file_nodes #指定ノード以下に接続されているテクスチャパスのリスト def get_use_texture_list(root_node): file_nodes = get_all_texture_node(root_node) files = [] for tex in file_nodes: files.append(tex.fileTextureName.get()) files = list(set(files)) return files #指定ノード以下に接続されているテクスチャを指定のディレクトリに接続し直し def set_texture_to_specified_dir(root_node, dir): file_nodes = get_all_texture_node(root_node) for tex in file_nodes: def_path = tex.fileTextureName.get() base_name = os.path.basename(def_path) new_path = os.path.join(dir, base_name) if os.path.isfile(new_path): tex.fileTextureName.set(new_path) #ファイルリストを指定のディレクトリにコピーする def copy_filelist(list ,copy_dir): os.makedirs(copy_dir) for e in files: shutil.copy(e, copy_dir) dir = r"c:\temp\test\test2" node = pm.selected()[0] files = get_use_texture_list(node) copy_filelist(files ,dir) set_texture_to_specified_dir(node ,dir)

拍手[4回]

PR

コメント

プロフィール

HN:
モチオ
性別:
非公開
自己紹介:
テクニカルアーティスト(アニメーション出身)サポート対象Softimage/MotionBuilder/Mayaなど 言語 javascript / PHP / Python / VBAなど Webアプリも少しだけ作れる

P R