Maya Script Python テクスチャのリロード

突然ですが、気が向いたのでMayaでのテクスチャリロードについて調べました。
以前発見した、melで書かれたものをPythonに翻訳するとこんな感じです。

import maya.cmds as cmds
import maya.mel

maya.mel.eval('eval("source AEfileTemplate.mel");')
for x in cmds.ls(type="file"):
	maya.mel.eval('AEfileTextureReloadCmd("{0:}.ftn");'.format(x))

で、そこに使われているmelを探してみました。
C:\Program Files\Autodesk\Maya2013\scripts\AETemplates\
※バージョンによって多少異なります。
に、AEfileTemplate.melというmelが存在し、その中のAEfileTextureReloadCmdという関数を使用しているのが分かります。
なので、それをPythonに翻訳してみました。

import maya.cmds as cmds

files1 = [cmds.getAttr(x+".ftn") for x in cmds.ls(type="file")]
files2 = cmds.ls(typ="file",type="mentalrayTexture")
if files1 != []:
	for file1 in files1:
		for file2 in files2:
			if file1==cmds.getAttr(file2+".ftn"):
				cmds.setAttr(file2+".ftn",file1,type="string")

こんな感じでしょうか。
さらに、それをリスト内包表記で書くと、

import maya.cmds as cmds

[cmds.setAttr(y+".ftn",z,type="string") for y in cmds.ls(typ="file",type="mentalrayTexture") for z in[cmds.getAttr(x+".ftn") for x in cmds.ls(type="file")]if z==cmds.getAttr(y+".ftn")]

というような感じになります。
うーん、どうも変だなぁ、と

import maya.cmds as cmds

[cmds.setAttr(y+".ftn",cmds.getAttr(y+".ftn"),type="string") for y in cmds.ls(typ="file",type="mentalrayTexture")]

と書いてみると、やはり動きます。
自身のアトリビュートを取得し、自身のアトリビュートにセットする。
気付け薬のようなものでしょうか?

 

面白いのは、lsコマンドのtypeはひとつしか使えないフラグでどちらともロングネームやショートネームでは怒られてしまい、使うことができません。
それを使い分けると、使えるようです。良くわからない。で、そこで取得されているファイルの違いも良くわからない。
そもそも、Maya自体構造も機能も良くわからない。興味が無い。

 

それで、modoの頂点スムースのような機能はないのか、と探していましたが見つかりませんでした。
しかし、コマンドが見つかったので、スクリプトを作ってみました。今度はそれを載せます。

コメントする

post date*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

トラックバックする

トラックバック用URL:

アニメーションが親切に解説されております

レンダリング、ライティングの基本が分かります

図版が見やすい美術解剖書です