文系デザイナーのためのmaya MEL/Python基礎の基礎 Step2-8

不定期ですが、便利なMayaツールの紹介もしていきます。今回はダイキン工業様のSUITE User Noteというサイトのスクリプトのご紹介です。
http://www.comtec.daikin.co.jp/DC/UsersNotes/Ritaro/tutorial/maya_07/
ページの一番下に「ri_rig_icons.zip」というのでダウンロードし、解凍すると「ri_rig_icons.py」というPythonスクリプトになります。

これを例によってMayaのScriptフォルダへ入れて起動して、スクリプトエディタで「ri_rig_icons_menu()」コマンド起動するだけです。

このツールはリギングの際にコントローラを作成してくれるツールです。
「2D」,「3D」というタブからで図のようなカーブで作成したモデルを作成できます。
 
さらに「Arrow」でよく見る矢印などを作成でき、「Others」で手足のアイコン、「Tools」でアイコンの方向を反転したり、色を付けたりできます。

これだけでも便利ですが、もう一つこのサイトにあるスクリプトも紹介します。「カスタム アウトライナ」です。
http://www.comtec.daikin.co.jp/DC/UsersNotes/Ritaro/tutorial/maya_11/

これは、アウトライナにPythonで機能追加して、ワイヤーフレームと同じ色を付けることができるだけでなく、同じ色のオブジェクトを選択することが可能です。
注意点ですが、このスクリプトはMaya2016以降でないと動きません。
そもそも2016以前にアウトライナに色が付かないようです。

まず、上のベージの一番下まで行って、「CustomOutliner_V3_2.zip」スクリプトをダウンロードし解凍します。

これを例によって、
C:\Users\ユーザ名\Documents\maya\Mayaのバージョン\scripts
にコピーします。
日本語Mayaを使っている場合は、 ja_JP\scripts です。

Mayaを起動したら、スクリプトエディタを起動して、以下の2行をシェルフ登録します。
import CustomOutliner
CustomOutliner.custom_outliner()

起動して、ReRigツールと一緒に使ってみました。

スライダーで色を付けて「Apply」で設定できます。「Change Color in Viewport」のチェックをONすれば、アウトライナとオブジェクトのワイヤーフレームを同じ色にできます。
色で判断できるのでリギング操作のミスや効率が上がります。

「Up」「Down」キーでアウトライナ上で上下に移動ができます。
腕、足、など操作をしやすい順番をアニメーターが自由に変えられます。

スライダで色を決めて、「Select」で同じ色を付けたものを選択できますので、両腕IKを同時に移動したい、とか、背骨3つを同時に回転したい場合、同じ色にしておけば、Shiftキーで複数選択しないで済むという便利さもあります。

リガーを目指す方はとても便利です。ぜひお試しください。

このサイトが凄いのが、ツールのソースコードの仕組みを解説しながら、ツールを公開しているところです。初心者には敷居が高いですが、とても勉強になります。

CGWORLD Vol.238に記事を書かせていただきました。

昨年の11月号(すでに品切れ)に続き、Brosで記事を書かせていただきました。
本日5/10発売です。https://cgworld.jp/magazine/238.html

「Unity 2018最新事情」特集ということで、「汎用性も多様性も将来性もピカイチゲームエンジンがもたらす可能性について」という2ページです。

ぜひご覧いただければと思います。

文系デザイナーのためのmaya MEL/Python基礎の基礎 Step2-7

さて、前回はPythonでGUIを作成しましたが、今回はその続きです。

ちょっと脱線しますが、MayaでGUIをPythonで作るには「PySide」という方法もありますが、ちょっと文系では難しいので、まずは普通のPythonだけで行います。
実は新しいMayaのUIはPySideで作ってあるので、UIを細かく設定できるのです。ただし、Mayaのバージョンによって動かないこともあり、ちょっと困るので、ここの連載では後半にします。

では、前回のプログラムをちょっと改造した例です。

import pymel.core as pm
window=str(pm.window(widthHeight=(250, 100),title=”MyTools”))
pm.columnLayout(adjustableColumn=True)
pm.button(command=”pm.polyCube()”, label=”BOX”)
pm.button(command=”pm.polyCylinder()”, label=”CYLINDER”)
pm.button(command=”pm.polySphere()”, label=”BALL”)
pm.button(command=lambda *args: pm.mel.eval((“deleteUI -window ” + window)), label=”CLOSE”)
pm.setParent(‘..’)
pm.showWindow(window)

実行すると、以下のウインドウが出て、それぞれのボタンを押すとプリミティブが生成される、というものです。
前回と違うのは、ボタンが4つに増やしたのと、2行目の

widthHeight=(250, 100),title=”MyTools”)
ボタンが増えただけ、ウインドウの幅を大きくして、タイトルを付けました。これを改造してみましょう。

まず、pm.columnLayout(adjustableColumn=True)

pm.columnLayout()
にして再実行してみます。


adjustableColumn=Trueでウインドウの幅に合わせてボタンの幅がピッタリに
なる仕組みにしていたんですね。
このように、サンプルの命令を削除してみて、何をやっているのか?を調べることができます。
もし、動かなくなっても、元のプログラムが残っていれば問題ないので、
修正したプログラムは上書き保存しないことです。
(これはデザイナーでも一般的ですよね)

colummLayoutという命令のHELPをもう一度確認みましょう。

右上に「カテゴリ内:ウインドウ、レイアウト」というのがあります。


と、このようにGUIに関する命令がすべて出てきます。こんなにあるんですね!「M」のアイコンがあるのはMelでしか使えないので注意です。
では、よく使う命令を紹介します。
まずrowLayoutです。ここを見ると「水平一列に配置できる」とあります。
下のサンプルプログラムに
rowLayout -numberOfColumns 3;
という記載がありますね。これは「3つ横に並べる」という意味のようです。
Pyhtonに変換すると
pm.rowLayout(numberOfColumns=3)
です。そこで、以下のように書き換えます。

import pymel.core as pm
window=str(pm.window(widthHeight=(250, 100),title=”MyTools”))
pm.columnLayout()
pm.rowLayout(numberOfColumns=3)
pm.button(command=”pm.polyCube()”, label=”BOX”)
pm.button(command=”pm.polyCylinder()”, label=”CYLINDER”)
pm.button(command=”pm.polySphere()”, label=”BALL”)
pm.setParent(‘..’)
pm.button(command=lambda *args: pm.mel.eval((“deleteUI -window ” + window)), label=”CLOSE”)
pm.setParent(‘..’)
pm.showWindow(window)

その前のプログラムの書き換えた箇所だけ太字にしてあります。

実行すると

こんな感じです。ボタン3つ横に並べることに成功しました。
pm.setParent(‘..’)をいれることで、rowLayoutで横に並べる範囲を決めます。

「Close」ボタンはそれ以降になるのでcolumnLayoutの機能で縦に並びます。

それ以外にも、
pm.text(label=”表示したい文字”)
を使うと、ボタン以外のタイトルをつけることもできます。
でもプリミティブを出したりしてもあまり面白くないので、よく使うウインドウなどを登録しておくといいでしょう。これは最初のころやりましたがシェルフに登録してみて、コマンドをチェックするのです。
たとえば、アウトライナを出す命令を「Ctrl+Shift」で実行し、シェルフ登録したものを右クリックで「Edit」します。


ここでMelとPythonのどちら選んでも同じです。この「OutlinerWindow」という命令です。これは困ったことにMelしかない命令のようです。先ほどマニュアルにも「M」マークがありましたね。
この場合、Pythonで実行するには、
pm.mel.OutlinerWindow()
と書きます。mel.Mel命令()という形です。
Cubeを出す行を以下のように書きかえてみます。pm.button(command=”pm.mel.OutlinerWindow()”, label=”OutLiner”)

実行すると、

ちゃんと、ボタンをクリックすれば、アウトライナが表示されます。
このようにUIを組み立てて、自分の良く使うコマンドだけのウインドを作ってしまうと便利ですよ。