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

CGworldの本に続き、Web版も掲載されました。こちらもぜひご覧ください。

さて3か月ぶりですが、「文系デザイナーのためのmaya MEL/Python基礎の基礎」の連載を再開です。前回⑫までいきましたので、今回から第2章ということで「2-1」からスタートです。
(実は夏に暑さでマシンが壊れてしまい、過去のデータが消滅してしまいました涙)

さて、心機一転、MayaでPythonを作るにあたり、まずは道具から選びましょう。
Mayaで直接プログラムを書くのは危険なので、エディタで書いて、そこからMayaへペーストする、という流れです。
前回、Python-IDLEで書いていましたが規模が大きくなる場合や説明で行番号がないと場所を説明しにくい、という弱点があるのです。

そこで「Visual Studio Code」です。
Micirosoftのツールですが、ちゃんとMac版もLinux版もありますので、どの環境でMayaをお使いでもOKです。ダウンロードしてインストーラーから入れてください。

windowsだとこんなアイコンから起動です。


起動したら、左にあるアイコンの5番目の「拡張機能」をクリックし、上の検索項目に「python」と入力します。Visual Studio Codeはいろいろなプログラミング言語があるのでPythonで使いやすいようにプラグインを追加します。
たくさんあるのですが、まずここでは上2つを選んでおきましょう。「インストール」をクリックすれば自動で入ります。
  
拡張機能ボタンを再度押し、「新しいファイル」をクリックします。

以下のPythonのプログラムを入力してください。内容は気にせずOKです。

import pymel.core as pm
pm.polyCube()
tx = 0
for i in range (0,10):
  pm.duplicate(rr=1)
  pm.cmds.move(tx,0,0)
  tx= i*2
入力できたら。~.pyで保存します。

Visual Studio CodeからMayaのスプリプトエディタへコピー/ペーストします。


実行すると、キューブが10個並ぶと思います。


Visual Studio Codeでコメントを書きます。命令や変数などちゃんと色分けした表示になって見やすいですね。今後の連載ではこの流れで作業していきます。

今回はここまでです。次回から新しい命令をやりますので、過去の連載を復習しておくと楽ですよ。

CGWORLD vol.231で執筆させていただきました!

本日10/10発売の月刊CGWORLDで記事を執筆させていただきました。

詳細はこちらからご覧ください。P30から6ページもあります!

「UnityとUE4、ノンゲームにおける活用動向」という特集で、ゲームエンジンで映像制作する手段について説明しています。

このページの下にインフォーメションでも書いてありますが、表紙の放送中のアニメ「宝石の国」にも制作協力させていただいております。

月刊CGWORLD vol.231

しばらくお休みしておりましたブログですが、以前の毎日ペースではありませんが再開させていただきます。お楽しみに!

 

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

では、前回の続きで「if」をMayaでやってみましょう。

前回のコメントアウトしたMaya命令をALT+4で元に戻して、最後のifの処理内に
「#m プレーンを表示する」というコメントを入れます。

MayaでPlaneプリミティブを出す命令をMELで探します。


例によってコンバータでPython化します。

pm.polyPlane(cuv=2, sy=10, sx=10, h=1, ch=1, w=1, ax=(0, 1, 0))
pm.cmds.scale(5, 1, 5, r=1)
pm.cmds.move(9, 0, 0, r=1, ls=1, wd=1)

これをPython IDLEへペーストします。move命令のYをtyに変更します。
では、それをMayaへコピペして実行してみましょう!

あれ?・・・・なんか大変なことになってます!でも各階のフロアはできてますね。
実はこれはダメなんです。ちょっとイジワルしました。ごめんなさい・・・
下の箇所を見てください。

「コピーする」という命令を書きましたね。この場合のコピー元は、上にあるCubeです。しかし、今回はその下のif命令でPlaneを作ってしまったので、コピーする対象が変わってしまった、なのでこういう結果が出るのです。
でも、ちゃんと螺旋状にPlaneが並ぶのも美しいじゃありませんか・・・

では。ちゃんと直しましょう。

どこが変わったかよく見てください。コピーをやめて毎回Cubeを作成しているように改造しました。
「#m コピーする」を削除し、上にあったCubeを作成して移動、グループ化に入れ替えただけです。

では実行してみましょう。

できました!

これで完成でもいいのですが、上にCubeが2個中途半端に作られています。
階段なのですから、段数をしていするより、階数の方が人間側としてはやりやすいですね。このように使いやすさも追求すべきです。

★階段は30度づつ回転している→360/30=12で12回の繰り返しで1階分

であれば、下のように書き換えます。

kaiとdanという変数を作り、kaiを12倍した値をdanに入れます。
1足しているのは0から始まるからです。復習ですが、プログラムでは数学でやったように、右の計算結果を左に入れる、という方式なので注意です。

では、実行すると・・・

いい感じですが、3階なのに4階めの床が出てしまっています。
またもバグ(エラー)・・・落ち着いて考えてみましょう。

プログラムは上から下に処理しますね?
その前までの処理は、
 1.ブロックを作って、Y移動、Y回転する
 2.tyを0.5倍する
 3.ryを30倍する
 4.もしryが360の倍数なら、床を作る
 5.繰り返す
どうですか?何かおかしいですよね?
ryを30倍してから、床を作る確認をしています。ということは、
30倍増えた値でifが判断するので間違った結果になるのは当然です!

 1.もしryが360の倍数なら、床を作る
 2.ブロックを作って、Y移動、Y回転する
 3.tyを0.5倍する
 4.ryを30倍する
 5.繰り返す

が正しいですね。では書き換えてみます。

実行すると・・・

今度は正しい結果になりました!おめでとうございます!

このようにプログラムはエラーとの戦いです。コンピュータに正しく指示しないと、思った通りに動いてくれないのです。
焦らず冷静に流れを読み返して修正していけば、必ずできるようになります。

では今日はここまでです。