Mayaのmelスクリプトに関するいろいろ

自分でmelスクリプトを書いてて気づいたこと、困ったこと、解決法や成果についてをまとめました。備忘録的な意味合いが強く、あまり高度な内容でもないです。せいぜい初級~中級向け程度? Twitterモーメントでまとめていましたが、編集機能が停止された為こちらに移行します。 業務のモノが映りこむ可能性がある為、画像での説明がほぼ無いです。
1
夏馬 @natsuma_e

昨日melを書いてて衝撃をうけたこと。 bakeResultの-atフラグ後に対象のアトリビュートを一個ずつ書かなきゃいけないと思いこんでたけど、ふと思いついてフラグを付けずに対象アトリビュートの配列をまんま食わせたらすんなり動きよった。

2021-02-17 11:19:50
夏馬 @natsuma_e

昔作った機能がアトリビュート数が変動するものだったので、 「配列のsizeがx個だったらこっちのbakeResultを実行せよ(←-atフラグと一緒に配列の0~xを逐次記載)」 とif文でひとつずつ分岐するという力技で解決してたけど、ンなめんどいことしないで一行で済んでたじゃん…orz

2021-02-17 11:19:50

記述例

 string $temp[] ; //ベイクしたいノード名+アトリビュート名を入れる配列
 ~~
 bakeResults -at $temp -t "xx:xx";

これで実行可能。


アトリビュートをロック/解除する際の混乱

→ 「.tx」と「.translate」は別のアトリビュート扱いになる

夏馬 @natsuma_e

melスクリプトで「一時的にsetAttrでロックしたアトリビュートをロック解除」しようとして、 setAttr -lock 0 "AAA.tx"; をやったらエラーすら吐かずにスルーされてて憮然としている 俺の一時間を返せ

2021-04-01 13:32:13
夏馬 @natsuma_e

setAttr -lock 0 "AAA.translate"; は通った… なんでやねん… 全解除してから、ロック残したいところは再ロックしろってか

2021-04-01 13:35:26
夏馬 @natsuma_e

本腰入れてMayaを再起動しつつ確認した結果、 CBunlockAttr:起動直後はプロシージャ読み込みミスってる模様、チャネルエディタ上でアトリビュートロック解除すれば読み込まれる setAttr:「~.tx」と「~.translate」は別管理っぽい。ロック時と解除時の書式を統一する必要あり まで解って一応解決

2021-04-05 16:17:00
夏馬 @natsuma_e

追記。 チャネルエディタ上で、手動でロック(と解除)をした場合は「CBunlockAttr」が処理する。 これは操作の都合上アトリビュートごとに実行しているようで、 【手動でロックしたアトリビュートを『setAttr -lock 0 AAA.translate』では解除できない】。 「.tx」等で個別に解除する必要がある。

2021-11-18 17:28:00

実は出来ること/実は出来ないこと

夏馬 @natsuma_e

MELで機能作ってて、 1・複数(※固定数ではない)のオブジェクト名を保管しておきたい 2・ロケータにstringArrayアトリビュートを作って入れ込んでみよう 3・addAttr出来た。複数の文字列を入れ込むことも出来た 4・配列変数に文字列格納した上でsetAttr→変数からの読み取り不可っぽい orz

2021-02-12 15:14:57
夏馬 @natsuma_e

Mayaの選択セットに「アトリビュートの追加」が出来るのでは?とふと思い立つ。 …ホントに出来た。 いやまあ「どんなノードにもアトリビュートを好きに付けられる」のがMayaの基本ルールなんだけどさ。 まあでもこれでリグシステムに「思い付き」を実装出来そうだ。

2021-07-13 21:21:40
夏馬 @natsuma_e

なんでMayaは選択した頂点情報を丸めやがるんだよ選択順でリストさせろや! …と思っていたら4年前の記事に遭遇してひっくり返っている その設定最初っからtrueにしとけよ… kiwamiden.com/acquire-compon…

2021-11-04 15:31:35

blendShapeノードから情報を取得する

夏馬 @natsuma_e

blendShapeノードから、アトリビュート名を(melで)取得する方法が見当たらなくて途方に暮れている… なんで「表示されているもの」の文字列を取得することが出来ねえんだよ!

2021-07-15 19:41:39
夏馬 @natsuma_e

畜生たどりついてやったぞざまあみろ!!(小躍り) blendShapeノード内、「weight」アトリビュートのマルチとして格納されてるから、直接名前が出てこなかった。  listAttr -m 【ノード名】.weight; とすれば、「weight」の子アトリビュート名がstringの配列で出てくる。

2021-07-15 20:00:55
夏馬 @natsuma_e

リファレンス元で消したアトリビュート(ブレンドシェイプノードのターゲットウェイト)が、リファレンス先で「weight[4]」みたいな形式で残りやがる…なんでや…

2021-09-09 16:48:15
夏馬 @natsuma_e

根本的な解決策は無く、結局アトリビュート名リストを逐次チェックして 「weight[2]」等の表記名は【前はあったけど今はもう無いアトリビュート】なので対象から排除 という力技で解決したった

2021-09-09 17:52:18

ノードエディタを今更触ってみた

夏馬 @natsuma_e

手首足首の捻り回転のフリップ問題にぶち当たり、あれこれ調べた結果、今更Mayaのノードエディタを覚えねばならなくないとわかって気が遠くなりかけている

2021-05-11 15:47:00
夏馬 @natsuma_e

・解説記事を見ながら ・Maya上でノードエディタの操作を再現しつつ ・スクリプトエディタのログを外部テキストエディタにコピペして ・整形+melスクリプト化(※ツール化が前提なので) ・スクリプトエディタ上で再再現 おッ案外いけるぞ

2021-05-11 16:37:22
夏馬 @natsuma_e

存外いけるな、という結論>ノードエディタ UI操作が微妙にMayaの法則から外れてる?ような感じが多少扱いづらくはあるものの、変なクセがあるのはMayaの新機能あるあるだしな… なにより、特別な手段無しで「クォータニオンで回転値をコントロールする手段」を確保出来たのが嬉しい

2021-05-14 21:50:05
夏馬 @natsuma_e

最初はMayaのノードエディタ触るのに「ええ… 今更機能を覚えなきゃいけないの…」なんて思ってたけど、今では「もっと早く触っとけばよかった」と思うくらいには活用している。 というか、tabキーからの関数呼び出しが面倒くさくなってきて「ノードエディタの作業補助機能作りたい…」ってなってる

2021-09-21 17:14:28

スクリプトのUIを作る