1行で書けるそこそこ便利なmel
社内の仕事術コーナーより、mayaの作業時、ディレクターが個人的によく使っているmelスクリプトを紹介します。
スクリプトの紹介記事…というと敷居の高い内容になりがちなので、
今回は、“1行で書ける”、且つ、”そこそこ便利”なmelスクリプト…というテーマで紹介してみたいと思います。
【1. タイプや名前を指定してノード選択】
非常によく使う機能なので、会社やプロジェクト内でツール化されているケースも多いと思います。
…が、手動で打ち込んでも案外短く書けてしまうので、スクリプト未経験の方も丸暗記してみても良いのではないかと思います。
select `ls -typ "joint" -sn "*hair*"`;
↑の例を実行すると、名前に”hair”という文字列を含むジョイントだけが選択されます。
–typ “joint” …が、ノードタイプがジョイントに一致するものの選別、
-sn “*hair*” …が、名前に”hair”を含むものの選別に対応しているので、書き換えながら実行してみると機能を理解しやすいのではないでしょうか。
下にもいくつか使用例を載せてみます。
//Lambertシェーダーだけ選択
select `ls -typ "lambert";
//名前が"_grp"で終わるトランスフォームノードだけ選択
select `ls -typ "transform" -sn "*_grp"`;
【2. HyperShadeのサムネ(スウォッチ)更新停止】
renderThumbnailUpdate 0;
HyperShadeの↓このボタンをOffにするのと同じ機能です。
大量のマテリアル・テクスチャを含むデータを扱う場合、HyperShadeを開いた瞬間からサムネイルの計算が始まってしまい、しばらくmayaが操作できない…という状況に陥ってしまいます。
(更新を止めるボタンはあるものの、サムネの計算が終わるまでボタンを押せない…という仕組みにそもそも問題がありますが…)
コマンドで実行することで、あらかじめサムネイル更新を止めた状態でHypershadeを開くことができます。
シェルフやstartupに登録しておくのがおススメです。
【3. ViewPort2.0のリセット】
ogs -r;
ViewPort2.0とanimationPreferenceのParallel計算を併用していると、ノードの計算結果とビューポートの表示が一致しない状況が稀に起こります。(Parallel計算については割愛)
…文章だと状況がイメージしづらいので、“ジョイントとスキンオブジェクトがずれてしまう状況”を簡単に再現してみました。↓
①スキンオブジェクトを非表示 → ②別のフレームへ移動 → ③オブジェクトを再表示 …という順で操作していますが、スキンオブジェクトが①の状態で固まってしまい、ジョイントとずれてしまっています。
ogsコマンドを使うと、このような事態でViewPort2.0の描画をリセットすることができます。
上の例以外にもテクスチャーやオブジェクトの描画が意図しない状態になってしまうケースはあるので、リセットする手段を知っておくと少しだけ安心して作業できるのではないでしょうか。。
(個人的にはmaya2016~2018で使う機会が多かったようにおもいます。)
以上、1行で書けるそこそこ便利なmelスクリプトでした!