こんにちは!ビーバー@ゲーム業界歴約20年 です。maya python初心者の方のために、カンタン・わかりやすい解説サイトを作っています。
maya pythonの学習情報って少ないですよね。(最初のころは本当に苦労しました。。)自分が骨を折った経験をもとに、maya python基礎を最速で習得できる10回のチュートリアルを作ってみたので参考にしていただければ幸いです。
今回は、4回目。骨だけを選択するスクリプトの作成を通して、シーンのノードを任意にフィルタリングして取得する方法をまなびます。
※当サイトで紹介する商品は、アフィリエイトプログラムを利用しています。
階層内の骨だけを選択してみよう
まず実際のスクリプトを見てみよう。そのあとに解説をしていくね。
ジョイントとメッシュが複数あるシーンで試してみましょう。
ジョイントだけを選択するには、下記のように書きます。
joints =cmds.ls(selection=True,dag=True,type="joint")
cmds.select(joints)
トップノードを選んで実行。
ジョイントだけが選択できました!
すっごおおおおい!こういうのがやりたかったんだよー-! どうなってるの?どうやったの?!
いいリアクションですねぇ~!それではひとつずつ見ていこう
ジョイントを取得する
先ほどのスクリプトの1行目、cmds以降の部分からひも解いていきましょう。
赤字の部分です。
joints =cmds.ls(selection=True,dag=True,type="joint")
cmds.select(joints)
「cmds.ls」(エルエス)というmayaコマンドを使っています。
フラグは、selection, dag, type の3つです。
lsコマンドとは
lsコマンドとは、シーンのノードを取得するコマンドです。
取得は、選択とは異なります。
「mayaが対象のノードを一時的におぼえている状態」ととらえるとよいでしょう。
例えば、何も選択せず print(cmds.ls()) を実行すると、
シーンにあるすべてのノードがヒストリに表示されます。
名前の取得≠選択 勘違いしやすいから気を付けて!
lsのフラグ
取得するノードをフィルタしたい場合は、フラグを使います。
フラグ名 | 挙動 | 引数タイプ |
selection | 現在選択中のノードに対して ls を実行します。 | boolean |
dag | selectionフラグとの併用で、 「選択したノード以下の階層すべて」に対して DAGノードを取得します。 | boolean |
type | ノードタイプで取得をフィルタリングすることができます。 例)ジョイントを選択したい場合 type=”joint” | string |
今回は、階層のトップノードを選んで実行するスクリプトのため、
3つのフラグを使って
「選択中のノード以下のジョイントを取得する」挙動を作りました。
joints =cmds.ls(selection=True,dag=True,type="joint")
フラグ自体の解説は3限目にあるよ!
取得したジョイントを変数にする
お次は赤字のこの部分です。
joints =cmds.ls(selection=True,dag=True,type="joint")
cmds.select(joints)
joints?これもmayaのコマンドなのかな?
違うんだよ。これは「変数」と言って、ユーザが任意に命名・使用できるものなんだ
ヘンスー?????
変数とは
変数とは、「箱のようなもの」としてよく例えられています。
上記の例では、lsコマンドで取得された複数のジョイントを「joints」という箱にまとめて入れたと考えればよいでしょう。
変数だよ!よろしくね。
ぼくの中に入った複数のものは、ひとまとめにして扱えるよ♪
箱の名前はユーザが任意に決められるので、中身がわかりやすいように
「bones」でも「honehone」でもなんでも構いません。
左辺 = 右辺
の、=(イコール)は、「右辺の中身を左辺に入れてね」という意味なんだよ。
変数の中に何が入っているのかは、スクリプトの変数部分のみをハイライトして実行すると
わかります。もしくは、printコマンドを使ってprint(変数名)と記述します。
ジョイントを選択する
最後は赤字のこの部分です。
joints =cmds.ls(selection=True,dag=True,type="joint")
cmds.select(joints)
mayaコマンドはselectです。
selectコマンド
selectコマンドをヘルプで調べてみましょう。
このコマンドを使用して、オブジェクトをアクティブ リストに追加、
またはリストからオブジェクトを削除します。
5 つのフラグ [-add, -af, -r, -d, -tgl] を指定していない場合、
既定ではアクティブ リストのオブジェクトが指定したリストのオブジェクトに置き換えられます。
ちょっとわかりにくい(汗)ですが、内容は普通の選択コマンドです。
select() の()の中に選択するノード名や変数を記入します。
cmds.select(joints)で、jointsの変数内に入っているものcmds.ls(selection=True,dag=True,type=”joint”) を選択します。
スクリプトを書いたら、その部分をハイライトして右クリック→そのままシェルフにドラッグ&ドロップすれば、立派なツールになるよ!
シェルフに登録しておけば、毎度スクリプトを書かなくても繰り返し使えるね!
まとめ
今回学習した内容のポイントをまとめます。
この回では、ノード名の取得、変数について学びました。
次回は、複数オブジェクトに対してリネームを行う処理を通して学習を進めたいと思います。
オススメの本。pythonが楽しく学べます☆
コメント