2016年7月26日火曜日

sourceのアレコレ

sourceについていくつか。

mayaの再起動をしないとsourceできない(ことはない)

mayaが起動している最中に.melファイルを追加した場合、mayaを再起動をしないとsource しても

// Error: Line 1.18: Cannot find file "hogehoge.mel" for source statement. // 

と、追加した.melファイルは見つからないようなエラーが出てしまいますが、コマンドラインで

rehash

を実行するとMELのスクリプトパスをチェックするので、新しいファイルが読み取られsource が
実行できるようになります。

ただし、global procの引数の量や型を変えた場合、sourceやrehashを行っても更新されないので、
こういったケースの場合には再起動が必要です。

けっきょくは再起動するんかーいっ!


ファイル名の前にパスを付けるとスクリプトパス以外のフォルダも読み込める

たとえば、Dドライブのhogeフォルダにhoge.melがある場合、

source "d:/hoge/hoge.mel";

と絶対パスの指定が可能。自分は有効な手段を見出せていないですが、使い方はあなた次第。

本来の使い方と思しき、相対パスも可能。
MAYA_SCRIPT_PATH の中にサブフォルダを掘り、リグ関係のスクリプトをまとめるとします。
そんな場合、

source "RIG/tryRigCreaterCore.mel";

とすることでコンパイルが可能。
"../"でさかのぼることも出来ます。

もちろん/(スラッシュ)ではなく\(バックスラッシュ・円マーク)も使えますが、エスケープ
しないといけないので、スラッシュのほうが無難でしょう。


source した.melファイル内にsourceが記述されていると不安定になる

最悪mayaがクラッシュ

ループ処理の中にsource を使ったプロシージャが含まれていると、スクリプトのコンバートが
終了する前に呼び出してしまいmayaが強制終了してしまうことがあります。
乱用は要注意。



2016年7月14日木曜日

プロシージャのオブジェクト風表記。その2

mayaが.melファイル内のグローバルプロシージャを認識するタイミングは、起動時。
みたいな事でしたが、ここでも注意する事がひとつ。


起動時に行うスクリプトのコンバートでは、ファイル名と同じグローバルプロシージャまでしかコンバートされません。

なので、GUIなんかのコールバックはメインプロシージャの後ろに書くと初回エラーが出ます。
ボタンを押した瞬間にとか。
これは、AUTODESK AREA JAPAN の記事でも書かれていました。

とりあえずファイル名と同じ名前のメインプロシージャは最後に書いとけと言う事ですか。



前振りが長かったですが、本題。

.melファイルをクラスっぽく作成しようとした場合、メインプロシージャが無いのでコンバートされない問題が出てきます。
その場合の対処方法。

まずは、コンソールアプリで、引数が必要なプログラムがヘルプのエラー出力を出すみたいに、
メインプロシージャでグローバルプロシージャのリストをプリントする方法。

グローバルプロシージャを全部書きだすのは面倒ではある。
ま、空のプロシージャでも良いんですけど・・・。


このほかには、source を使用する方法もあります。
指定した.melファイルの内容全てをコンパイルするので、ファイル内の全てのグローバルプロシージャへアクセスする事ができるようになります。
なかなか便利な命令です。

デバッグ中は、シェルフに

{
    source "スクリプト名.mel";
    メインプロシージャ;

}

を追加しておくと重宝します。


本題みじかっ!


2016年7月12日火曜日

プロシージャのオブジェクト風表記。その1

プロシージャ名として使える文字に .(ドット)が有ることは意外と盲点。

けっこう前にAUTODESK AREA JAPAN の記事で読んでからは偶に使っていたりしますが、
記事に足りない Tips が有るので補足(みたいなこと)。

まず、MEL でローカルにスコープされたプロシージャを前方に参照することは許可されていません。
ローカルにスコープされたプロシージャの定義は、これらを呼び出す前に出現させる必要があります。

な・・・何を言ってるのか わからねーと思うが
おれも何をされたのかわからなかった・・・

頭がどうにかなりそうだった・・・


要は、呼び出されるローカルプロシージャは、呼び出す行よりも前に記述されていないといけない
という事です。
たとえば、

proc string _getHoge()
{
    return "hoge";
    
}


global proc printHoge()
{
    print(`_getHoge`+"\n");
    
}


は大丈夫ですが、

global proc printHoge()
{
    print(`_getHoge`+"\n");
    
}


proc string _getHoge()
{
    return "hoge";
    
}


となっていると、呼び出しているprint(`_getHoge`+"\n");よりも後ろに
_getHoge()を定義しているために、

// Error: file: ~~/scripts/printHoge.mel line 3: Cannot find procedure "_getHoge". //

と出て止まります。

記事には、1度実行すると解消されると云うような事が書かれていると思いますが、ローカル
プロシージャには通用しません。

結構このルールに嵌って全てをグローバルプロシージャにしてしまい、オーバーライドでバグっ!
をやってしまうようです。


で、mayaが.melファイル内のグローバルプロシージャを認識するタイミングですが、
起動時、MAYA_SCRIPT_PATH に配置されている.melファイルを手当たり次第にコンバート
(コンパイル)し、ファイル名と同じグローバルプロシージャが見つかった時にメモリへ
常駐します。

ここでもまた注意する事が有るのですが、長くなったので次回に続く。

2016年6月15日水曜日

TortoiceSVNで設定しておきたいこと

バックアップバッチ作ったけどやっぱ不便ですね。
なので、TortoiceSVN をインストールしました。

サンプルコードのテストなんかをする場合には、簡単に復帰できるので便利です。
時代は Git なのでしょうけども・・・。


とりあえず個人で使用するだけなので、外部ストレージにリポジトリを作成し、fttpプロトコルで使用中。
ファイルロックの同期が怪しいらしいので複数人で使用する場合には、サーバー立ててhttpやhttpsを使うのが良いみたいです。


インストール時、svn.exeをインストールすることをオススメします。
tortoiceProc.exeよりも取得できる情報が格段に上がり、バッチから色々出来て捗ります。

忘れた場合は、コントロールパネルのプログラムのアンインストールから、TortoiseSVNを選択し、変更を実行するとセットアップウィザードが立ち上がるので、Modify から command line client tools のチェックを入れて Next>
※windows7の場合



仕事で使う場合なんかは、インストール後、設定に *.mayaSwatches や *.swatch を追加しておくのが良いと思います。
環境によっては、こいつら隠しファイルになっているので、ゴミをコミットすることになりかねません。



大抵、新規加入のルーキー様がコミットあそばされるので、見つけた場合には魅上照ばりに
削除、削除、削除です。


2016年6月10日金曜日

hIkノードは自動キーが利かない

だいぶ前に、humanIk のノードがリグに使えるんじゃないかと書きましたが、なんと、
humanIk のノードは自動キーをオンにしていてもキーが打たれないらしい。


では、本家の humanIk はどうなっているか確認してみると・・・。

自動キー、利いているんですね~。


ノードをたどっていくと、怪しいノードを発見。



ジョブで監視して、この keyingGroup ノードに登録されているアトリビュートへキーを
打っている様子。


自前のリグにhikノードを使いたい場合は、keyingGroupを設定し、且つ監視するスクリプトを
実行させないといけない。

手間が掛かるので使えませんな。



調べていて気づいたのだけれど、mayaLTにはキャラクターセットが無かった・・・。
ま、キャラクターセットなんてほとんど使わないから良いんだけど。


しかし、Extension 3 で追加された「Quick Rig」がスゴイ!