ON-BLOG

CGのこと、あれこれ書いてます。

SOFTIMAGEとMAYAで使用するPythonスクリプト超入門②~前編~※改訂版

では前回に引き続きPythonのお勉強を。
今後は一週間おきに更新できればと思います。


早速スクリプトを作成していきたいと思います。
一番簡単な所から今回はキューブを出してみます。
コマンド的にはこんな感じ↓

Application.CreatePrim("Cube", "MeshSurface", "Cube_TEST", "")

f:id:tommy_on:20140513222617j:plain


初心者だとこの様なコマンドでも?となるかと思います。

※私もなってました。。。。
この様なコマンドは一回処理を実行して、スクリプトエディタ内のログに出力するのが一番の近道です。※SI版に限るかも…
SOFTIMAGEにはGUI上で実行した処理をコマンドとしてログに残すことができます。
それを有効に使用するんですね。
※これもSI版に限るかも…

では、実際下記のフローで実行してみます。
MODEL→取得→プリミティブ→ポリゴンメッシュ→立方体
すると下記のログが出力されるかと思います。

Application.CreatePrim("Cube", "MeshSurface", "", "")

f:id:tommy_on:20140513222720j:plain


もう上記とほぼ一緒ですよねw
こんな感じで、入門時は、実際に実行してログを参照するのが一番良いと思います。


ちなみにこのコマンドの違いは

「"Cube_TEST"」が足されている事です。

これはSDKを参照すると、この""の部分では作成したオブジェクトの名前を指定するとあります。
ここに入力することでオブジェクトの名前を指定できます。
f:id:tommy_on:20140513222744j:plain

では「一応」簡単に説明。
「Application.CreatePrim」でプリミティブを作成します。というコマンドになります。
この「CreatePrim」という文字列を選択し、F1キーを押すとこのコマンドについてSDKガイドが開かれます。
※上記の画像
そこを参照すると
各()内の説明が記述されています。
ひとつひとつみていきましょう。

("Cube", "MeshSurface", "Cube_TEST", "")

まずは一つ目の括弧""でジオメトリを指定します。
現状は「Cube」ですが、ここを「Sphere」にすると球が作成されます。
他にも
「cone」
「disc」
等の種類があります。


2つ目の括弧""でジオメトリのタイプを指定します。
ここを「NurbsSurface」にすればNURBSの立方体を作成します。



3つ目の括弧""で作成するオブジェクトの名前を指定します。
今回は「Cube_TEST」です。2バイト(日本語は)も「u」を付ける事で使用可能ですが、
なるべく英文字で作業して下さい。


4つ目の括弧""は今回は未記述ですが、
作成するオブジェクトの親を指定します。
ここを「Camera_Root」とすると、この子供に立方体が作成されます。
f:id:tommy_on:20140513222813j:plain

複数階層以下に作成する場合は
"Model.1.2"
みたいに「.」コンマで区切って指定してくださいね。


何回も記述しますが、このようにSDKガイドを見ながらコマンドを理解して、
記述して下さい。

ちなみにJscriptではこんな感じ↓

CreatePrim("Cube", "MeshSurface", "Cube_TEST", null);

Applicationが省略された事と、
Pythonでは最後の括弧が空白だったのに対して、
Jscriptでは同じ空白という意味の「null」を使用しています。
まぁそれ以外ほとんど違いはありませんね。


ではログを使いながらスクリプトを記述する方法は、これで大丈夫だと思います。

ではここからはMAYA編に入ります。
maya版では前回のものを踏襲してますね。

まずはコード。
立方体を作成します。

import maya 
maya.cmds.polyCube()

これだけです。
printからは少し変わってますね。
maya.cmdsがキーです。
そのコマンドの後にpolyCube()という、コマンドを呼び出しています。
これだけですね。
ちなみに、スフィアなら
「polySphere()」
円柱なら
「polyCylinder()」
というようにコマンドが変わります。

またオブジェクトの名前を指定して、モデルを作成することもできます。

import maya
maya.cmds.polySphere()

Sel = maya.cmds.ls( sl=True )[0]
maya.cmds.rename(Sel,'kyuuu')

少し長くなりましたね。
※ちょっと悩みました。。
「Sel = maya.cmds.ls( sl=True )[0]」
ここので変数「Sel」に1番目に選択したオブジェクトを格納し、
※オブジェクト作成後は強制的に作成したオブジェクトが選択されます。
「maya.cmds.rename(Sel,'kyuuu')」
ここで変数「Sel」のオブジェクトをリネームしております。
こんな感じでオブジェクトの名前も変更できますね。

あと、上のコードだと、少し文字が多くなりますよね?
特に「maya.cmds」辺りがめんどうなんですが、これ変数?として、
割り当てて、文字数減らせますね。
こんな感じ。

import maya as mc
mc.polySphere()

Sel = mc.ls( sl=True )[0]
mc.rename(Sel,'kyuuu')

短くなりました。

import maya as mc
mc.polySphere()

ここで「maya.cmds」を「mc」として扱ってます。
これ地味ですが、何百行のコードになってくると
大きいですよ。。

次は条件文である、「IF文」について書いていきたいと思います。

では。。