0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【ArtistでもMELが書きたい】Maya MEL入門(6)【setAttrとgetAttr】

Last updated at Posted at 2023-01-29

はじめに

この記事は、3DCG業界で働くArtist向けのMEL入門記事です。
普段の業務を効率化したいけど、MELの書き方が分からない、調べたけどイマイチ分からなかった、そんな方向けに書きました。
本記事は「setAttrとgetAttrを使う」をゴールとします。

環境

Autodesk Maya 2022.2

前回のあらすじと今回へのつなぎ

前回はスクリプトエディタのヒストリを使い効率的にコマンドを調べました。
コマンドの調べ方も楽になり、ログをコピペするだけでである程度のMELを記述できるようになったわけですが、
最後の方でsetAttrというコマンドが出てきましたよね。キューブを移動させるコマンドのように思えますが、フラグにつけなければいけない-(ハイフン)がついていなかったりと謎が多いです。
setAttrは何かと使う機会が多いので、使い方を調べていきましょう。

setAttrの動作を振り返る

よくわからないコマンドが出てきたときは、とにかくコマンドリファレンスを参照しましょう、といいたいところですが、setAttrは少し特殊なため、前回のMELを参考に見ていきましょう(コメントや余計なフラグは取り除いています)

polyCube;
setAttr "pCube1.translateX" 1;

現時点では文法に関しては謎だらけです。

setAttr "謎1.謎2" 謎3

とりあえず、振り返りがてら実行します。
MEL_learning01.png
MEL_learning02.png
MEL_learning03.png
キューブが生成されて、「移動X」が1に設定されています。

ここからは色々とMELを書き換えて実験していきます。
MELを書き換えて、結果がどう変化したかを観察することで文法を探っていきます。

setAttrの文法を探る(1)

現時点で判明している文法は以下です。

setAttr "謎1.謎2" 謎3

謎3に関しては、なんとなく移動させる値なのかなという予想がつくかと思います。
その予想が本当なのか、実験してみましょう。

試しに、謎3の部分が1となっている部分を3にしてどう変化するか見てみます。

polyCube;
setAttr "pCube1.translateX" 3;

MEL_learning04.png
MEL_learning05.png
MEL_learning06.png
キューブの「移動X」が3になりましたね。
予想は正しかったわけです。

文法的には、

setAttr "謎1.謎2" 設定する値

こんな感じでしょうか?

setAttrの文法を探る(2)

"謎1.謎2""pCube1.translateX"となっています。

pCube1というのは、キューブを生成した際につけられるデフォルトの名前です。
シーンに何もない状態でpolyCubeを実行すると、生成されるキューブの名前はpCube1になるかと思います。
もしかしたら謎1移動させるオブジェクトの名前なのかもしれません。
早速検証してみましょう。

polyCube -name henohenomoheji;
setAttr "henohenomoheji.translateX" 3;

名前が「henohenomoheji」のキューブを生成し、
そのキューブの「移動X」を3に設定するMELです。
これで試してみましょう。
MEL_learning10.png
MEL_learning12.png
MEL_learning11.png
うまくいきました!

文法的には、

setAttr "オブジェクト名.謎2" 設定する値

こういうことですね。

間話 アトリビュート

謎2に取り掛かる前に、一つMayaのアトリビュートについて見ていきます。

アトリビュートとは簡単にいうと、オブジェクトが保持できる値1のことです。
具体例をあげると、pCube1オブジェクトは「移動X」と「移動Y」、「移動Z」といったアトリビュートを持っている、という感じです。

チャネルボックスでは可視化されていますね。
MEL_learning13.png
当然ですが、チャネルボックスで移動Xに5と入力すると、pCube1のX座標は5になります。
アトリビュートはそのオブジェクトの状態を表現しているわけなんですね。

ちなみにですが、アトリビュートは英語で書くとAttributeです。
Attribute...どこかでみたことがありますね。
Attr...そう、setAttrです!

もしかすると、setAttrはアトリビュートに値を設定するコマンドなのかもしれません。

setAttrの文法を探る(3)

現在明らかになっている文法は、

setAttr "オブジェクト名.謎2" 設定する値

です。
もし仮に、setAttrはアトリビュートに値を設定するコマンドなのだとしたら、
謎2アトリビュート名なのかもしれません。
値を設定する際に、アトリビュートの名前を指定しないのは不自然です。

となると、アトリビュート名を知りたいです。
これまでMELを書いてきて感じる傾向として、日本語は受け付けてくれませんよね?(コメントを除く)
ですので「移動X」というアトリビュート名では、良くないことは予想できるかと思います。

ノードエディタで英語のアトリビュート名を知る

幸いにも、簡単に英語のアトリビュート名を知る方法があります。
シーン上のキューブの「移動X」アトリビュートの英語名の発見を目標にしてみます。

まずは、ウィンドウ→ノードエディタでノードエディタウィンドウを開きましょう。
MEL_learning14.png
MEL_learning15.png
キューブを選択した状態で、下図のアイコンを押すと、ノードが表示されます。
MEL_learning16.png
MEL_learning17.png
デフォルト状態ではアトリビュートたちは隠されています。ノードのハンバーガーボタンをクリックして展開していきます。
MEL_learning18.png
移動アトリビュートは更に詳細が隠されています。こちらもクリックで展開します。
MEL_learning23.png
MEL_learning19.png
「移動X」を発見しました。

緑の丸ちょぼにマウスカーソルを合わせるとポップアップが出てきます。
MEL_learning20.png

translateX Type: doubleLinear Value: 3

translateXというのがまさにアトリビュート名になります。
Type: doubleLinearは型というものです。現状は無視して構いません。
Value: 3は値が3ということです。先程のMELで「移動X」を3に設定したので、それがそのままになっているようですね。

あれ、translateXというと、今実験しているMELと全く同じテキストですね、
...これはもう正解な気がしますが、念のために最後の確認と行きましょう。

setAttrの文法を探る(完)

現在明らかになっている文法は、

setAttr "オブジェクト名.謎2" 設定する値

です。

謎2の箇所にtranslateXを当てはめると以下のようになります。

polyCube;
setAttr "pCube1.translateX" 1;

動く可能性は非常に高いと思いますが、念のため実行します。
MEL_learning21.png
MEL_learning22.png
大丈夫でしたね。

せっかくなので、試しにほかのアトリビュートも試してみましょう。
「回転Y」なんてどうでしょうか?
MEL_learning24.png

rotateY
polyCube;
setAttr "pCube1.rotateY" 30;

MEL_learning25.png
実行してみます。
MEL_learning26.png
MEL_learning27.png
大成功です!

最終的なsetAttrの文法はこうなりますね。

setAttr "オブジェクト名.アトリビュート名" アトリビュートに設定する値

せっかく明らかになったところ言い出しにくのですが、setAttrはフラグを使うこともできるため、文法はこの限りではありません。
しかし、アトリビュートに値を設定するMELであれば、上記の書き方で概ねカバーできると思います。

getAttrを知る

setAttrで大ボリュームだったかと思うのですが、
setAttrと対をなすgetAttrも合わせて覚えておくと大変便利です。

setAttrはアトリビュートに値を設定するコマンドなのに対し、
getAttrはアトリビュートの値を取得するコマンドです。

文法は以下です。

getAttr "オブジェクト名.アトリビュート名"

値を取得するコマンドなので、設定する値がありません。スッキリしていますね。
実際のMELだと下記のような感じでしょうか。

getAttr "pCube1.rotateY";

getAttrを使う

試しに、回転値が入ったキューブが存在するシーンで、
MEL_learning28.png
「回転Y」の値を取得してみましょう。
MEL_learning29.png
実行結果は、スクリプトエディタのヒストリに表示されます。
MEL_learning30.png

// 結果: 30 // 

うまくいきましたね。「回転Y」は30だという情報を取得できています。

おわりに

いかがでしたか?
アトリビュートを操作することはMELでスクリプトを書く上で非常に大切になってきます。
今回は「移動」や「回転」など基本的なアトリビュートを設定・取得しましたが、Mayaの便利な内部設定としてアトリビュートは数多くのものが実装されています。
ノードエディタを見たり、有志のMELを読んでみると、知らなかったアトリビュートが発見できるかも知れません。

次回はこちら→【ArtistでもMELが書きたい】Maya MEL入門(7)

  1. 正確な言い回しは異なりますが、本件を解決するためには、ざっくりとその認識でも問題ありません。正確な定義を知りたい方はAutodesk公式のドキュメントをご参照ください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?