userSetupスクリプト

     自分で独自に作ったスクリプトを、Maya起動時に実行して欲しい場合はuserSetupスクリプトを用意してやります。Windowsの場合は
     ユーザー名¥(マイ)ドキュメント¥maya¥バージョン¥scripts
    の下にuserSetup.melまたはuserSetup.pyファイルを作成し、その中に実行したいコマンドを記述すると、Mayaを起動した時に実行してくれます。
     例えば、Maya上でPythonを使用する場合、毎度毎度
    import maya.cmds as mc
    と打つのが面倒い人も多数いるんではないでしょうか。そんな時に上記コマンドをuserSetup.pyに記述してやれば、Mayaを起動してすぐに使えるようになります。



    ■実行するタイミングが違う・・・

     さて、ここまでは基本としてサラっと終了、問題はここから。
    userSetup.melとuserSetup.pyは実は実行するタイミングが全然違うんですよね・・・userSetup.pyの方が全然早い段階で実行してしまいます。
     感覚的ですが、たぶん全体の流れはこんな感じだとおもいます。
    Maya本体
    ↓
    userSetup.py
    ↓
    GUIの構築
    ↓
    userSetup.mel
     そう、なんとGUI構築よりも前にuserSetup.pyが実行されているのです!
     何が困るって、Maya立ち上げた時に自分用メニューを追加したくても、そもそもGUIがないから作れないと言う、恐ろしい仕打ちを受けます。
     でも今更melで書き直すなんてナンセンスですし、userSetup.melの方でpythonコマンドを使うのも美しくない・・・どうしたものかと困ってマニュアル読んだら、こんなコマンドが載ってました。
    maya.utils.executeDeferred() 


     このコマンドはMayaがアイドル状態(つまり何も処理がない状態)になるまでこれで指定したコマンドの実行を遅らせてくれるというシロモノです。executeDeferred()の中には呼び出し可能オブジェクト(要は関数)を入れておけばOK!
    import maya.cmds as mc
    def buildMyMenu():
        mc.menu( l='My Menu', p='MayaWindow' )
        mc.menuItem( l='test' )
    
    import maya.utils
    maya.utils.executeDeferred( buildMyMenu )
     これをuserSetup.pyで指定しておけば、ちゃんとMayaの初期動作が終了してからこのコマンドが実行されるため、しっかりGUIにメニューが追加されます。よかった良かった(^^)・・・って昔これやったなぁ。やっぱメモっとかないと忘れますわ・・・



    ■モチロンメリットもありますよ


     一見すると大変面倒な仕様ですが、これはこれでメリットがあります。例えば環境変数を指定する場合(MentalRayシェーダのパスとか)をuserSeteup.pyで環境変数を設定しれやれば、バッチで指定するような感覚で環境変数を設定できそうです。(細かく試してないから違うかも)
    import os
    os.environ['MI_CUSTOM_SHADER_PATH'] = 'C:/mentalray/include'
    os.environ['MI_LIBRARY_PATH'] = 'C:/mentalray/lib'
    

     上記コマンドをMaya起動後に実行すると、mentalrayカスタムシェーダを手動でロードする必要があるのですが、userSetup.pyに記述しておけばMaya起動時に自動的に上記で指定したパスに格納されているカスタムシェーダをロードしてくれます。
    (上記コマンドの実行 → Maya起動 → プラグインのロードの順番のため)
     逆に、mrFactoryコマンドなどはプラグインがロードされるまで使えないようで、userSetup.py中に使用するとエラーではじかれてしまいます。


     色々ややこしいですねー
    スポンサーサイト

    コメントの投稿

    非公開コメント

    すばらし。

    おー、すげー。これすばらしいです。
    userSetup.melは一個しか読めないし、
    userSetup.pyは先読みするから微妙だなぁと思ってました。

    > モチロンメリットもありますよ
    これってmaya.rayrcを編集(または追加)しなくてもShderがロードされるんですね。
    これであのメンドクサイ登録作業がなくなりました。
    非常に感謝です。

    No title

     どうもこんにちわ。
     喜んで頂ければ幸いです!

     色々とPythonOnMayaはMelのようには行かない部分があり面倒ですが、一応逃げ道も作ってくれてるようなのでそれを駆使して頑張るしかないですね(^^;(友達のプログラマーさん曰くMayaはそんなもんらしいです・・・)

     maya.rayrcを初め環境変数はMaya.envで指定できますが、Pythonの方で指定した方が色々他にもできる事が多いんで、もっぱらこっち使ってますー
    プロフィール

    Eske

    Author:Eske
    萌えイラストレーターを目指す3DCGイラストレーター。
    現在ポケモンカードゲーム、ガンダムトライエイジ、ガンダムコンクエスト、妖怪ウォッチとりつきカードゲームなどで3DCGを使用したイラストレーターとして参加中。

    主にここでは日々気づいたメモなんかを残してます。
    イラストのお仕事も受け付けております。ココのメールアドレスからご連絡できますので、お気軽にご相談下さい。

    最新記事
    最新コメント
    カテゴリ
    最新トラックバック
    月別アーカイブ
    検索フォーム
    リンク
    QRコード
    QR