2017年6月26日月曜日

10進数を16進数に変換する

10進数を16進数にしたい場合、MELでは計算しないと駄目なんですよねぇ。
まぁ、普通の人には全く不要なんでしょうけど。

作成してみました。
NUM2HEX.mel

一応、それらしい数値はでてくるな。
こうなると、16進数から10進数にするMELも欲しいところ。
あとは、2進数とかね。
HEX2NUM,BIN2HEX,HEX2BIN,NUM2BIN,BIN2NUMあたりか。


2017年6月12日月曜日

ノードを作成する時のTips

createNodeコマンドで作成されたノードは、nodeGraphEditorInfoの削除で一緒に削除されてしまいますが、GUIを使った場合は無事。
裏でmayaが何かしている訳なのです。

これを確認するにはマテリアルを作ってみるのが手っ取り早い。

・HyperShadeのメニューから Create > Materials > Phong
・コマンドラインから createNode "phong"

と、2つの手段で phongマテリアルを追加します。

すると、HyperShadeで変な事が起きます。

createNodeで作成した「phong3」がHyperShadeに表示されません。
この辺に秘密がありそうです。

NodeEditorで接続を見てみます。

メニューから作成された「phong2」には、いろいろ繋がっています。
この中からHyperShadeに関連するノードを調べるために、初期ノードの「phong1」も追加してみます。


「defaultShaderList1」と言うのが怪しそうですね。


「phong2」にならって「phong3」も接続してみます。


無事、HyperShadeに「phong3」が表示されました。
めでたし、めでたし。
とはいかず、createNodeを使う場合、ココまでしないといけない訳ですね。

mayaのメニューではこの一連の工程を、shadingNodeコマンドで行っているようです。
ただ、shadingNodeコマンドには幾つかオプションがあって、作るノードとオプションが合致していないとおかしな事が起こるわけです。

shadingNode -asUtility "phong"

とコマンドラインで実行すると、HypherShadeにはこんな感じでUtiliesタブに登録されてしまいます。


2014とかでは、気にせずcreateNodeを使用してマテリアルなんかを作成していましたが、nodeGraphEditorInfoが出来たせいで面倒くさくなったみたいです。
迷惑なノードだ。

2017年6月1日木曜日

nodeGraphEditorInfoノード。その2

nodeGraphEditorInfoノードを削除したい場合、

{
    string $NGEIs[]=`ls -typ "nodeGraphEditorInfo"`;
    delete $NGEIs;

}


みたいにすると思います。
普通に Node Editor や HyperShade の GUI からノードを作成しているぶんには別段気にすることはないのですが、MELで createNode を使用した場合、nodeGraphEditorInfo ノードの扱いには注意が必要です。


たとえば、

createNode "condition";

で condition ノードを幾つか作成します。
続いて

createNode "locator";

を実行して コレも Node Editor へ表示させます。

そしたら condition ノードの一つと locator の transform ノードを適当に接続します。
こんな感じで。


output側に nodeGraphEditorInfo が接続されているので、選択して削除します。
すると、locator に接続されていない condition ノードが道連れで削除されてしまいました。


utility ノードは、何かに接続されていないとふとした切っ掛けで削除されてしまうようです。

nodeGraphEditorInfoに関して言えば、input側を disconnectAttr してから削除するべきでしょう。

-------------------------------------------------------
回避方法はこちら

2017年5月30日火曜日

nodeGraphEditorInfoノード。その1

nodeGraphEditorInfo なるノードが maya2016くらいから追加されたようです。
ノードエディタの配置を記憶するノードなのですが、なかなかゴミっぽくて邪魔です。

まずは、このノードを作るところから。
Node Editor もしくは HyperShade でノードを表示させます。
で、軽くノードを移動させて閉じます。
すると、channelBox のOUTPUTS にノードエディタ用っぽい名称のノードがあらわれます。

これがnodeGraphEditorInfoノードです。
maya ASCIIでノードを見てみると、ノードの配置座標や表示状態が記録されています。


次に、このノードをOutlinerで確認する方法。
とりあえず、Outlinerの DAG Objects Only のチェックを外します。

ただ、nodeGraphEditorInfoノードはコレだけでは Outliner に表示されません。

さらに Show → Show Auxiliary Node にチェックを入れる必要があります。

ここまでして、ようやく nodeGraphEditorInfoノードが見えるようになります。


けっこう下のほうにあります。
このノードも、ふつうにノードなので削除する事が可能です。
ファイルサイズの軽減やリファレンスさせる時のために削除しておきたいですね。

Outlinerで探すのが面倒なら、コマンドラインで

select -r (`ls -type "nodeGraphEditorInfo"`)

とすれば選択できます。
この状態で[Delete]ボタンで削除する事ができるのですが、何も考えずに削除すると困った事が起きてしまうのです。


つづく

2017年5月18日木曜日

WinMergeのフィルタ

maya2016だったか、ノードにUUIDなるアトリビュートが追加されました。

こんな感じの文字の羅列。
unityなんかでも似たようなユニークIDがあったと思ったけど、似たようなもんかな?

で、スクリプトでリグを組んでいる場合、ノードのUUIDが頻繁に入れ替わったりするので、SVNで差分比較なんかすると、UUIDの存在がとても目障り。

ちなみに、TortoiseUDiff.exeじゃなくてWinMergeを使っています。
なのでWinMergeでの対処方法。

WinMergeには、特定の文字を比較対象に含めないようにするフィルタ機能があるようです。
メニューから、ツール(T)フィルタ(F) を選びます。


するとフィルタを設定するダイアログが開くので、行フィルタのタブを選びます。
あとは以下のように設定。


これでSVNで差分を確認した時に rename -uid の行の比較が省かれます。