Maya Script Python – PS Script – フォトショップで保存を行うと同時にMayaでテクスチャリロード
またまた更新が滞っておりました。
Mayaではコマンドを実行しないとテクスチャはリロードされない。
ファイルの更新を監視してリロードする。というのも考えましたが、面倒くさそうなのと、
環境によっては色々と必要になりそうなので、他にいい方法はないのか、と探しておりました。
どうやらフォトショップから他のツールに対して信号を送ることができるらしく、
それを経由すればMayaにコマンドを送ることができるのではないか、ということでやってみました。
まずは下準備。
import maya.cmds as cmds cmds.commandPort(n=':30000',stp='python')
Mayaで上記のコマンドを実行し、ポートを開いておきます。
userSetup.py等に書いておくと良いかと思います。
で、フォトショップスクリプト
if (app.documents) { try{ activeDocument.path; activeDocument.save(); fileObj = new File("※注 フォトショップのスクリプトパス"); fileObj.execute(); }catch(e){ alert("一度名前を付けて保存してください") } }
※環境に応じたフォトショップのスクリプトパス
例
fileObj = new File("C:/Program Files/Adobe/Adobe Photoshop CS5 (64 Bit)/Presets/Scripts/texreload_send.py"); fileObj = new File("C:/Program Files (x86)/Adobe/Adobe Photoshop CS2/プリセット/スクリプト/texreload_send.py");
上記の物を適当な名前を付けて、「.js」の拡張子で保存します。
フォトショップのスクリプトパスにそれを移動します。
フォトショップを起動し、適当な画像を作成し、名前を付けて保存します。
始めに保存をしていないと、スクリプトは動作しません。
同じディレクトリに、以下のコードを、「texreload_send.py」という名前で保存します。
import socket import sys sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect(('localhost', 30000)) com = "import maya.cmds as cmds;[cmds.setAttr(x+'.ftn',cmds.getAttr(x+'.ftn'),type='string') for x in cmds.ls(typ='file',type='mentalrayTexture')]" sock.send(com) sock.close()
Mayaでその画像を貼り付け、フォトショップでスクリプトを実行すれば効果を確認できます。
フォトショップのスクリプトを実行すると画像が保存され、コマンドの送信が始まります。
ただ、Python2.6をインストールする必要がある。
やはり環境を選ぶことになる。なので、色々と探していると、「py2exe」というモジュールを発見。
Pythonスクリプトをexeにしてくれるものらしい。
それで作ったexeがこちら
texreload_send
先ほどのフォトショップスクリプト、注の部分を
fileObj = new File("C:/Program Files/Adobe/Adobe Photoshop CS5 (64 Bit)/Presets/Scripts/texreload_send.exe"); fileObj = new File("C:/Program Files (x86)/Adobe/Adobe Photoshop CS2/プリセット/スクリプト/texreload_send.exe");
といったように拡張子をexeに置き換えれば使えます。
しかし、確認はしておりませんが、VC2008のランタイムがインストールされていないとそれでも動かないかもしれない。
まぁ、そんな方法もあるんだ。ということで、
コメントする
トラックバックする
トラックバック用URL: