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の頂点スムースのような機能はないのか、と探していましたが見つかりませんでした。
しかし、コマンドが見つかったので、スクリプトを作ってみました。今度はそれを載せます。
コメントする
トラックバックする
トラックバック用URL: