[初心者]MAYAアーティストが0から始めるpythonスクリプト入門

maya_python_frst_topimage
アーティスト デザイナー はプログラムを覚えた方がよいと思っています。
作業効率は上がるし、プログラマーとのコミュニケーションがスムーズになるし

ケアレスミスも減る。覚えて無駄になることはまず考えられない。

決してプログラマーに成るレベルまで習得する必要はないですが

自分が楽に成る程度には覚えても良いし、お勧めします。

今回はMAYAアーティストが0から始めるpythonスクリプトと題してプログラム初心者のMAYAアーティストに向けたPythonスクリプトでMAYAを操ってみる内容にしたいと思います。

プログラムのめんどくさいコウシャクは置いといて、こんな感じのコマンド描いたら、あんな感じに動いた。みたいなノリで読んでもらえたらと思います。

スクリプトエディター

MAYAを立ち上げ全画面の右下にある
を押すと
スクリプトエディターが立ち上がります。
テキストが表示されている窓が上と下に何も書かれていない窓の2分割になっています、

スクリプトを書くのは下の窓、上の窓には結果が表示されます。

ちなみにMAYAのメニューから Create>Polygon primitives>Cube

でポリキューブを生成すると
この上の窓に生成されるコマンドと結果がMELスクリプトで表示されます。
polyCube -w 1 -h 1 -d 1 -sx 1 -sy 1 -sz 1 -ax 0 1 0 -cuv 4 -ch 1;
// Result: pCube1 polyCube1 //

※当然MAYAなのでMELでスクリプトは書けますが今回はPythonに集中。

下窓にMEL Python のタブがあるでしょうか?

あればPythonタブを選んでください。

なければ、タブの右にあるプラスマークを押してください。

MELとPythonどちらか選ぶよう促されるのでPythonを選んでください。

そうすると、Pythonタブが追加されます。

Pythonタブを選択した窓にこれからスクリプトを書いていきます。

Pythonで書きます宣言

ここから実際にスクリプトを書いていきます。
まず最初に以下のスクリプトを書いてください。
import maya.cmds as cmds

ここで MAYAのコマンド使います宣言します。

maya.cmds

で、MAYAのコマンド集?(語弊がありそうだけど無視)

をインポートすることで、PythonでMAYAを操作する事ができる様になります。

そんな感じの内容です。

as cmds

スクリプトを何行も書いてくときに

maya.cmds.XXXX
maya.cmds.ZZZZ
maya.cmds.YYYY
.
.
.

といちいち書くのはめんどくさい。

なので、as cmds
とすれば、

cmds.XXX
cmds.ZZZ
cmds.YYY

と少し楽になる。
何行も書く事を考えると、この少しが大事です。
あとasの後は cmds じゃなくても大丈夫です。

as cmd
as mayacmd
as mayamaya

でもcmdsをお勧めします。
多くの人がcmdsを使っているので、参考にするとかした時に分かりやすくて良いと思います。

ポリキューブを生成

つづけてポリゴンキューブのコマンド
cmds.polyCube()
と書きます。
import maya.cmds as cmds
cmds.polyCube()
この2行を選択した状態で

[Ctrl]を押しながら[Enter]を押すと実行されます。

うまく生成されたでしょうか?
生成されない場合は、スペルが間違ってないか、2行選択してるか、確かめて
もう一度実行してみてください。

maya_python_frst_codesel

[Enter]だけで押すと、せっかく書いたスクリプトが消えてしまうので気を付けてください。

ポリキューブを移動する

cmds.polyCube()
は消す、もしくは
#cmds.polyCube()
と#を先頭に追加してコメントアウト(只のテキスト化)してください。
 cmds.move(-0.5, 0, 1) 
移動するコマンドです数字は左から順番にX,Y,Zの数字をいれて移動する座標を書きます。
ポリキューブが選択されて緑枠になっているのを確認して
先ほどと同じく、スクリプトを選択して
[Ctrl]を押しながら[Enter]
移動しました。
 cmds.move(-0.5,0,1, relative=True ) 
relative=True
を付け足すと、オブジェクトに対して相対的に移動します。
なので実行するたびにその方向に移動し続けます。
ポリキューブが選択されて緑枠になっているのを確認して

スクリプトを選択して、

[Ctrl]を押しながら[Enter]

移動し続けると思います。

ポリキューブを拡大する

 cmds.scale(2,1,3) 
拡大縮小スケールのコマンドです。
これも同じくスクリプトを選択して、 [Ctrl]を押しながら[Enter]で
拡大しました。

ポリキューブの名前を取得

生成したポリキューブをこれからスクリプトで操作します。
 cmds.ls(sl=True) 
と書いて、ポリキューブが選択されて緑枠になっているのを確認して
先ほどと同じく、スクリプトを選択して

[Ctrl]を押しながら[Enter]

するとスクリプトエディターの上の窓に
# Result: [u’pCube1′] #
と表示されるはずです。
このポリキューブの名前は pCube1 と分かりました。
(選択されているオブジェクトの名前が違ってたらその名前になります)

ポリキューブの名前を格納する

ここからプログラムっぽくなります。
 cube_name = cmds.ls(sl=True) print(cube_name[0]) 
cmds.ls(sl=True) は先ほどと同じで名前を取得しています。
その名前を
[cube_name]と名札を付けた箱に格納しました。
(箱の名札の名前は基本的に自由です。わかりやす名前にしましょう。)

print(cube_name[0])
printはスクリプトエディターの上窓に()の中の文言を出力するコマンドです。

そして、cube_name[0]ですが先ほど名前を出力したときの表示

# Result: [u’pCube1′] #
[]の中に入っています。
[]にはたくさんのモノが順番で入れられますが、今は pCube1 しか入っていません。

この[u’pCube1′]をcube_nameと名前を付けた箱と考えます。

 cube_name = cmds.ls(sl=True) 

[]には[u’pCube1′,u’pCube2′,u’pCube3′,u’pCube4′,u’pCube5′,]
と沢山モノを入れることが出来ます。

今は[u’pCube1′]一つしか入っていません

cube_nameの一番目のモノを取り出したいので

cube_name[1]

と書きたいところですが、プログラムの世界は往々にして気難しいところがありまして。

一番目は0
二番目は1
三番目は2

と考える事が非常に多い、プログラム言語は基本的にはこの考え方です。

なので

cube_name[0]

と書くのが正解

 
cube_name = cmds.ls(sl=True) 
print(cube_name[0]) 
それではポリキューブを選択して、スクリプトを選択して

[Ctrl]を押しながら[Enter]

pCube1
スクリプトエディターの上窓に[]が外れてpCube1と表示されたら成功です。

ポリキューブの名前を変更する

 cmds.rename("pCube1","newname") 
名前を変更するコマンドです。()の中は、最初が今の名前、後が変更したい名前
ポリキューブの名前は”pCube1″だとわかっているので選択しなくてもよいです。

スクリプトを選択して

[Ctrl]を押しながら[Enter]
Outlinerのポリキューブの名前が
newname
に変わっていると思います。

ポリキューブの名前を取得するスクリプトと組み合わせてみましょう

cube_name = cmds.ls(sl=True)
cmds.rename(cube_name[0],"newname2")
ポリキューブの名前を取得して、取得した名前をrenameの最初の項目に入れて、

変更したい名前を”newname2“にしました。

ポリキューブが選択されて緑枠になっているのを確認して
先ほどと同じく、スクリプトを選択して

[Ctrl]を押しながら[Enter]

変更されたでしょうか?

シェルフに登録

スクリプトエディターで書いたスクリプトを
いちいち選択して[Ctrl]を押しながら[Enter]で
実行するのは面倒なので、よく使うスクリプトが出来たら

シェルフに登録してしまえば楽です。

方法は簡単で、スクリプトを選択してスクリプトエディターのメニューの

File > Save Script to Shelf..

シェルフに登録する超短い名前を付けてOKボタンで追加できます。

まとめ

いかがだったでしょうか?
後半はもしかしたら難しく感じたかもしれません。

でも理解しがたい程の難しさではなかったのではないでしょうか

cmds.polyCube()と書いたらポリキューブが生成され

cmds.move(-0.5, 0, 1)と書いたら移動して
cmds.scale(2,1,3)と書いた拡大し

cmds.ls(sl=True)と書いたら選択してるオブジェクトの名前がわかる

これらのコマンドを組み合わせるだけで簡単なものなら直ぐに便利スクリプトは出来てしまいます。

すごく複雑なスクリプトを目指さないで、最初は簡単なモノから始めれば後に難なく書けるようになるはずです。
制作環境を良くするためにも是非覚えてみてください。

少しでも有益な情報であればうれしいです。


 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください