やりたい処理のコマンドを見つける5つの方法を徹底解説!

コマンド解説
過去セミナー再配信のお知らせ

過去2回のセミナーが期間限定でアンコール配信中です!
「MayaPython習得に苦しんだ過去の自分に教えてあげたい。。」調べてもわからなかったこと、教えて欲しかったことを、とことん詰め込みました。初心者の方はぜひご覧ください!

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

Mayaのオペレーションの自動化について徹底解説。様々な操作を自動化できるようになります
https://tutorials.cgworld.jp/set/2041

こんにちは!python勉強中の、ビーバー@ゲーム業界歴約20年 です。
CG・ゲーム制作系の3Dデザイナーさんに向けて、maya python のコンテンツを発信しています。

ピヨちゃん
ピヨちゃん

分かりやすいmaya pythonのコマンド一覧ってないのかな?
どう検索すればお目当てのコマンドにたどりつけるのかわからないんだ。。

目的のコマンドを知るにはmaya helpか、あるいは書籍か。そもそもコマンド名さえ分からない場合はどうしたらいいんだと感じませんか(笑)

今回は、そんな私自身が探り探りやってきた方法や書籍で学んだ方法、youTubeや人から教えてもらった方法をまとめて紹介します!

調べ方を知るだけで、スクリプトを書くスピードが断然速くなりますよ!

>> Pythonの勉強方法を知りたい方はこちらをどうぞ

※当サイトで紹介する商品は、アフィリエイトプログラムを利用しています。

前準備

…と、その前に。コマンドを調べる前に欲しい処理を分解して考えてみましょう。

ピヨちゃん
ピヨちゃん

え?いきなりコマンドを調べていくほうが早いんじゃないの?

ハムちゃん
ハムちゃん

ひとつのコマンドですむ?と思っていたことが、
実はいくつかの操作の組み合わせだったりするからね。
前準備で調べたいことをはっきりさせておくと、ゴールまでの道のりが短縮できるよ!

コントロールリグを作る例をあげます。
たとえば、こんなシーンで、、

骨とボックスのシーン

まずどのようなリグにするのか要件を考えると思います。

ピヨちゃん
ピヨちゃん

コントロールリグだから、骨を動かすコントローラ群を作るんだよね。
要件っていうと、、、こんな感じ?

【要件】

  • メッシュは骨にスキンバインドされてて
  • コントローラはロケータで
  • コンストレインノードは邪魔だから、アトリビュートをコネクトして動かしたい
ハムちゃん
ハムちゃん

そうそう!
要件が決まれば、次に手作業の場合の手順を考えてみよう。
きっとこんな感じでしょ?

【作業手順】

  • 骨とメッシュをバインドして
  • ロケータを作って骨の位置に配置して
  • ノードエディタでTrans,Rotのアトリビュートをコネクトする

ここで大事なのは、どんなコマンドを使ったか、どんな操作を行ったかを具体化することです。

ハムちゃん
ハムちゃん

手順を具体化したら、、必要なコマンドと操作の目星をつけてみよう!

【必要なコマンドと操作】

  • スキンバインドコマンド
  • ロケータ作成コマンド
  • ロケータを骨位置に合わせる操作
  • アトリビュートのコネクトコマンド
ピヨちゃん
ピヨちゃん

そうか!このコマンド名を調べていけばいいんだね!

ハムちゃん
ハムちゃん

そうだよ!調べるものがはっきりしていると、効率もあがるでしょ?
それでは本編いってみましょ~!!

やりたい処理を見つける方法

mayaのpythonコマンドを探すアプローチは、5つあります。

①maya help から検索
②melのヒストリから探す
③ググる
④pythonコマンドとして存在しない場合、melを呼び出して使う

⑤py友に聞く

それぞれ具体的な例を挙げながら、調べ方を紹介していきます。

①maya help から検索

公式のリファレンスで、網羅性高く、個々のコマンドのフラグ情報まで詳しく解説されています。
また、コマンド解説のページ下部には、コマンド使用のサンプルスクリプトもあり、
そこから具体的な使い方を知ることもできます

ハムちゃん
ハムちゃん

鉄板だよね。まずはヘルプから当たってみよう!

アニメーションキーのあるフレーム数を取得したい場合

この場合は、どのようにコマンドを調べるでしょうか?

ピヨちゃん
ピヨちゃん

キーフレーム関連のコマンドだろうから、、、helpから「key」で検索してみるね
いろいろ出てくるけど「keyframe」これじゃない(喜)?

ヘルプの概要を読んでほしい処理に近づきそうかどうか判断、、

  • コマンド(python) keyframe
    このコマンドは、指定されたオブジェクトまたはパラメータ カーブにおける
    キーの時間または値を編集します。

    別途、「-query」フラグで指定されていない限り、このコマンドは
    既定でキーフレームを編集します。

イケそうな感じです。続いてフラグを確認します。

  • フラグ selected(sl)
    このフラグが照会で使われた場合、どんなアクティブなキーに対しても要求された値を返します。

これかもしれません。5f目に打ったキーを選択して試してみます。

ハムちゃん
ハムちゃん

やったね!欲しい結果がゲットできたよ!

今回はまっすぐにヘルプから答えを見つけることができました。
当たり前と言えばそうですが、最初に頼るのはやはり公式のヘルプではないでしょうか。

②melのヒストリから探す

しかし、、そんなmayaヘルプでも、目的のコマンドにたどり着けないこともあると思います。
そんな時、GUIからのコマンドを知っているなら、
それを実行して、ヒストリからコマンド名を探す手もあります

「トランスフォームのフリーズ」の例

フリーズのpythonコマンドを使いたい場合はどうすればいいのでしょう?

ピヨちゃん
ピヨちゃん

フリーズっていうと、transを0,0,0にするアレだね。
さっそくヘルプで検索してみるよ!
「freeze」、、、っと。あれ?これはノードをフリーズするコマンド?なんか違う。。

ハムちゃん
ハムちゃん

こんな時はGUIからコマンドを実行して、
スクリプトエディタで、melヒストリを確認してみるといいよ!

さっそくやってみましょう。適当なboxを作成し、フリーズをかけます。
実行した内容がmelで返ってきました。

「makeIdentity」がそれっぽいです。これをヘルプで検索してみます。

  • コマンド(python) makeIdentity
    選択したトランスフォーム、およびシェイプレベルまでのすべての子を
    ID 変換でリセットする、高速な方法です。
  • フラグ apply(a)
    true にすると、トランスフォーム ピボットのワールド空間での位置が保持されて
    シェイプが移動しないように、トランスフォームが ID になった後で、
    累積されたトランスフォームがシェイプに適用されます。既定は false です。

内容がわかりにくいですが、たぶんビンゴです。
pythonスクリプトの書式で打ち込んでみます。

pythonスクリプトからフリーズできたところ

欲しい結果が得られました!

ピヨちゃん
ピヨちゃん

おお、できたああ!
melヒストリからコマンドを探す方法、わかったよ~!

ハムちゃん
ハムちゃん

いい調子!じゃあ次の方法だ!

③ググる

ヘルプでも、ヒストリからも手掛かりがつかめない場合もありますよね。。
そんな時はどうしたらいいのでしょうか?

ハムちゃん
ハムちゃん

なんだかんだ言って、やっぱり頼りになるのはGoogle先生だよ。

ポリゴンの頂点のワールド位置を取得したいとき

ちょっと手の込んだ(?)コマンドを探したいときは、
Google先生にお世話になることが多いでしょう。

「Maya Python 頂点 取得」 などのキーワードで検索します。

一番目のページから「pointPosition」というコマンドがあることを知ります。
そのページを読みこんでみたり、ヘルプで詳細確認してみましょう。

  • コマンド (Python) pointPosition
    あらゆるタイプのポイント オブジェクトのワールド空間位置か
    ローカル空間位置を返します。

それっぽいですね!
適当に作った、ボックスの頂点を選択して実行してみます。

ズバリ欲しかった結果が得られました!

ピヨちゃん
ピヨちゃん

たいていのコマンドはGoogle先生が教えてくれそうだね♪

うまく目的のコマンドにたどり着けなかったとしても、
GUIから目的の処理を行っているページを見つけられることがあります。

そこで手掛かりを得たら、そのmayaコマンド名をヘルプから検索してみたり、
maya上で実行してmelヒストリ見てみると答えに当たったりします。

ハムちゃん
ハムちゃん

ヘルプと、melヒストリと、ググる作戦を組み合わせて探していくといいよ。

④pythonコマンドとして存在しない場合、melを呼び出して使う

ピヨちゃん
ピヨちゃん

え、何?どういうこと??

ハムちゃん
ハムちゃん

そもそもpythonコマンドとして存在しない処理もあるんだよ。
そういった処理はmelでしか存在しないんだ。

なんぼ探してもpythonコマンドがみつからん、、
そんな時はpythonからmelを呼び出して使いましょう!具体的なケースで見ていきます。

たとえば、「小さなウェイトの値を削減(Prune Small Weights)」したいとき

スキンバインドされたメッシュから、設定した値より小さいウェイトを削除するコマンドです。
このコマンドの例でみていきましょう。

最初に、pythonコマンドあるかどうかを確認します。
「②melのヒストリから探す」手順と同様、
GUIから実行したコマンドのヒストリを見てみましょう。

GUIメインメニューから
スキン>小さいウェイトを削減 を実行

実行時のヒストリ

ヒストリに doPruneSkinClusterWeightsArgList 1 { “0.01” };
と表示されました。どうやら、「doPruneSkinClusterWeightsArgList」というのが
今、探しているコマンド(?)のようです。

Prune や SkinCluster などめぼしいキーワードで、mayaヘルプを検索します。

ピヨちゃん
ピヨちゃん

検索検索、、っと。。
SkinCluster はヒットするけど、どうも違うみたいだなあ。
melコマンドでもヘルプを検索してみたけど、ヒットしないみたいだよ。

ハムちゃん
ハムちゃん

オッケーOK!もちょっと深掘りしてみよう。
maya python には 「helpコマンド」があるんだ。これを使って調べていくよ。

maya python の helpコマンド

maya pythonには、helpコマンドというものがあります。
helpコマンドでは、スクリプトエディタにコマンドのクイック ヘルプを表示したり、
ブラウザでオンラインマニュアルを呼び出すことができます。

help( ”コマンド名”, フラグ=○○ )

例)クイックヘルプの表示

cmds.help('polySphere')

例)オンラインマニュアルの表示

cmds.help( 'polySphere', language='python', doc=True )
クイックヘルプを表示させた例

画像ではhelpコマンドで、polySphere()のクイックヘルプを表示しています。
今回、注目すべきは最下段

Command Type: Command
コマンドタイプがコマンドである内容の記述があります。

これは「polySpher は mayaコマンドである」
とヘルプが返してきている、ということです。

ピヨちゃん
ピヨちゃん

「polySphereはmayaコマンドである」って、あえて書いてるってことは、
ほかに何かあるの?

ハムちゃん
ハムちゃん

いいところに気が付いたね!
では、くだんの「doPruneSkinClusterWeightsArgList」をhelpしてみよう。
理由がわかるよ。

さっそくhelpで問い合わせてみます。

長すぎてヒストリが見切れます(笑)が、何やら出てきました。

# 結果: "doPruneSkinClusterWeightsArgList" は
ファイル C:/ProgramFiles/Autodesk/Maya2020/scripts/others/doPruneSkinClusterWeightsArgList.mel 
に定義された MEL プロシージャです。 #

「MEL プロシージャです」と帰ってきました。
プロシージャ = 関数です。この処理はコマンドではなく関数だったのですね。

ピヨちゃん
ピヨちゃん

関数!!! …ってコマンドとどう違うん?

ハムちゃん
ハムちゃん

関数のパスが返ってきているから、中身をみてみよう

C:/ProgramFiles/Autodesk/Maya2020/scripts/others/doPruneSkinClusterWeightsArgList.mel
31行目以降
ハムちゃん
ハムちゃん

「小さなウェイトの値を削減」の処理がmelで書かれているよ。

こういった特定の動作を行うプログラムが関数だよ。

ピヨちゃん
ピヨちゃん

そっか!なんとなく(?)わかったよ!

mayaの「コマンド」であるなら、pythonコマンドもありそうですが、
mel関数となると、この例の場合対応するpython関数、、はないようです。

こんな時はどうすればいいのでしょうか?
そう、今こそ、pythonからmelを呼び出すのです!

pythonからmelを呼びだすには、先にimport でmelを読み込んでおく必要があります。

pythonからmelを呼びだす1行

import maya.mel as mm

これは、melを「mm」として読みこむという宣言です。
melコマンドは、「mm」の後に 「mm.○○○(melコマンド名)」の形で書くことで
pythonから呼び出すことができます。

例えば、ポリゴン球を作成するmelをpythonから呼び出す場合はこのように書きます。

import maya.mel as mm
mm.eval("polySphere;")
ピヨちゃん
ピヨちゃん

eval、、エバる、、、?

ハムちゃん
ハムちゃん

なんか違うの想像したでしょう。。。
「eval」はmelスクリプトをpythonで使うためのコマンドだよ。

melコマンドをpythonで実行するコマンド

mm.eval( “melコマンド” )

pythonコマンド「eval」はmelスクリプトを実行します。
ヘルプにはこう書いてあります

  • コマンド (Python) eval (maya.mel モジュール)
    Python でのみ使用可能
    「この関数は MEL コードを含む文字列を取り、MEL インタプリタを使用して、
    この文字列を評価します。結果は Python データ型に変換され、返されます」

要するに、
mm.eval(“○○”)
○○のところにmelスクリプトをコピーしたら、
「その挙動をpythonとして実行しまっせ」ということです。

ピヨちゃん
ピヨちゃん

melは分からないんだけど、コピーで大丈夫なの?

ハムちゃん
ハムちゃん

melの行末は必ず「;」セミコロンで終わるルールがあるから、そこに注意しよう。
書き方を詳しくいていくよ。


「小さなウェイトの値を削減」のヒストリを思い出します。

doPruneSkinClusterWeightsArgList 1 { "0.01" };

そのままevalのカッコ内に貼り付けて実行してみましょう。

// エラー: doPruneSkinClusterWeightsArgList 1 { '0.01' }; //
// エラー: Line 1.38: Syntax error //
エラー: RuntimeError: file line 1: MEL スクリプトの実行時にエラーが発生しました
Line 1.38: Syntax error #
ピヨちゃん
ピヨちゃん

めちゃくちゃ怒られたよ(泣)!!

ハムちゃん
ハムちゃん

「0.01」の部分が文字列じゃなくって、数値になってる って怒っているみたいだね。
文字列に変換するstr()を使って、前後の文字列と連結しよう

書き直します。

これでどうだ!

ピヨちゃん
ピヨちゃん

成功した~~~~~~(喜)!!

ハムちゃん
ハムちゃん

やったね!!これで無事
pythonから「小さなウェイトの値を削減」の mel関数を実行できました!

pythonコマンドの探し方の記事のはずなのに、melを呼び出して使おうなんて、
なんか卑怯な気もしましたが、コマンドがないんだから仕方ありません(笑)

⑤py友に聞く

コマンドを見つける奥の手です。

ピヨちゃん
ピヨちゃん

「py友」?

ハムちゃん
ハムちゃん

「ぱいとも」!こころざしを同じくするpython仲間のことだよ。

というかもう人に聞いちゃう(笑)
もし、一緒にmaya pythonを学習する仲間がいるなら、聞いてみるのも良いと思います。
テクニカルアート職の方だったり、その手のプロが身近にいるなら、最高の先生です。

たとえば、ロケータから骨のtrans,rotを動かすリグを作りたいとき

前準備で、作ろうとしているものの要件と手順が具体的になっているなら、
それを伝えてみると、py友も答えやすいと思います。

ハムちゃん
ハムちゃん

ひとつの要件に対して、いくつかの解決方法があるかもしれないからね!

ピヨちゃん
ピヨちゃん

じゃあハムちゃん、僕コントロールリグを作りたいんだけど、どうやったらいいのかな、、?
ロケータから骨のtrans,rotを動かす仕組みにしたいんだ。

ハムちゃん
ハムちゃん

ロケータで骨を動かせればいいんだね。

それだと、
・parentConstraint()でロケータから骨をうごかす
・connectAttr()でアトリビュートを接続する
どっちかでいけるんじゃないかな?

ピヨちゃん
ピヨちゃん

connectAttr() っていうコマンドもあるんだね!知らなかった~
ありがとう!ヘルプを見てみるよ。

思いがけない方法を教えてもらえるかもしれません。
詳細はぜひヘルプを見たり、ググってみたりして、使い方を自分の血肉にしましょう。

そして、py友へ絶大な感謝を述べましょう。
いつの日か、自分もpy友へお返しができるくらい上達したいものです。

まとめ

今回はやりたい処理のpythonコマンドを見つける方法をご紹介しました!

pythonコマンドを見つける方法

①maya help から検索
②melのヒストリから探す
③ググる
④pythonコマンドとして存在しない場合、mel関数を呼び出して使う
⑤py友に聞く

どんなコマンドもドキュメントだけではわかりづらく、
結局は調べて、試して、地道な学習の繰り返しで覚えていくのかな、と思いますが、
それでもこの記事が皆さんのお役にたてればうれしいです!

はじめてpython学習するなら!

はじめてプログラミングを勉強するとき、エラーはつきものですよね。
何時間もスクリプトが動かないこともしばしば。。
そんな時、くわしい人に教えてもらいたい、と思うことはありませんか?

侍テラコヤは、はじめてpythonを学習する方にピッタリのサービスです。
サブスク型オンラインスクールで、月¥2980~の良心的なお値段!

現役エンジニアのサポートが充実しており、
オンラインのマンツーマンレッスンとQ&A掲示板で即座に悩みを解決することができます

maya python基礎

本サイトの【まとめ】 maya python 基礎 入門!では、
10回シリーズでmaya pythonの基礎が習得できるコンテンツを発信しています。

  • ちまたのスクリプトを読んで、内容を理解したい
  • mayaのスクリプトリファレンスの読み方を習得したい
  • 自分で簡単なツールを書きたい
  • 基礎的なmayaコマンドをpythonで使えるようになりたい

など、mayaでpython基礎を身に着けたい方は、ぜひご活用ください♪

コメント

タイトルとURLをコピーしました