過去2回のセミナーの再配信が終了しました。
ご視聴いただいたみなさま、大変ありがとうございました!
引き続きMaya Pythonを学習される方にとって役立つ情報を発信していきますので
今後ともどうぞよろしくお願いいたします。

ツール作成の全体フローを最短距離で体験できます。スクリプト未経験の方におすすめ!
https://tutorials.cgworld.jp/set/2050

Mayaのオペレーションの自動化について徹底解説。様々な操作を自動化できるようになります
https://tutorials.cgworld.jp/set/2041
こんにちは!ビーバー@ゲーム業界歴約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”) を選択します。

スクリプトを書いたら、その部分をハイライトして右クリック→そのままシェルフにドラッグ&ドロップすれば、立派なツールになるよ!

シェルフに登録しておけば、毎度スクリプトを書かなくても繰り返し使えるね!
まとめ
今回学習した内容のポイントをまとめます。
- lsコマンドで、ノード名を取得する
- フラグでフィルタをかけて欲しいノードタイプだけを取得する
- 取得したものを変数として定義する
- 変数に対してselectコマンドを実行する
この回では、ノード名の取得、変数について学びました。
次回は、複数オブジェクトに対してリネームを行う処理を通して学習を進めたいと思います。
はじめてプログラミングを勉強するとき、エラーはつきものですよね。
何時間もスクリプトが動かないこともしばしば。。
そんな時、くわしい人に教えてもらいたい、と思うことはありませんか?
侍テラコヤは、はじめてpythonを学習する方にピッタリのサービスです。
サブスク型オンラインスクールで、月¥2980~の良心的なお値段!
現役エンジニアのサポートが充実しており、
オンラインのマンツーマンレッスンとQ&A掲示板で即座に悩みを解決することができます。
本サイトの【まとめ】 maya python 基礎 入門!では、
10回シリーズでmaya pythonの基礎が習得できるコンテンツを発信しています。
- ちまたのスクリプトを読んで、内容を理解したい
- mayaのスクリプトリファレンスの読み方を習得したい
- 自分で簡単なツールを書きたい
- 基礎的なmayaコマンドをpythonで使えるようになりたい
など、mayaでpython基礎を身に着けたい方は、ぜひご活用ください♪
オススメの本。pythonが楽しく学べます☆


コメント