株式会社デジタル・フロンティア-Digital Frontier

Header

Main

  • TOP
  • DF TALK
  • スクリプトのススメ mayaの場合

スクリプトのススメ mayaの場合

2011/2/28

Tag: ,,

はじめまして。こんにちは。アシスタントTDのとしお[@1null4null]です。
DFではMayaのレンダリング設定の自動構築、モブキャラ周りのサポート、Rigging系のツール、Massive、たまにClothSimulationしたりしてます。

・スクリプトを書きたいけど書いたことない。
・少し書いた経験があるけど続かない。
・どうやってみんな勉強してきたの?
そんな方たちの参考になればと思い私個人の事例ですが投稿させて頂きます。
私の場合はMELとPythonになります。
Maya以外の方にも参考になるかわかりませんが、もしなれば幸いです。

■初心者のためのスクリプト学習
もともとスクリプトが得意だったとか言うわけではなく、学生の頃にMELを習ったくらいでしたが結果はさっぱりでした。
便利なのは分かってるけど、いざ使うとなると何をどうしていいかわからず。
まぁ、いいや。いつか覚えよう。。。そんな感じでした。

そしてデザイナーとしてDFに入りまして、そこからMELをちょっとずつ勉強していきました。

書こうと思った理由は、便利だから覚えたほうがいいよ。
と先輩に言われたからです。ありきたりですね。

最初はwebや参考書など見て上の行から順番にscriptEditerにコピペ実行でした。
しかし、どんどんやる気がなくなってくるんですね。
変数とif文、for文を覚えてsphereいっぱい作ってsetAttrすれば満腹です。
漠然と目標もなく学習すればこんなもんです。

スクリプトはただ読んでいても身に付かないので、ちょっと頭を切り替えて、簡単なツール目標を設定した上でスクリプトを作成してみました。

目標があるために途中でダレることなく進み、初ツールはなんとか完成。
学習方法も至って普通。web、参考書に書かれてる必要そうなスクリプトを拝借したり
手作業の羅列だったり、scriptEditerのコマンド結果をコピペして自分なりに書き直したものでした。
正直、コマンドの意味は全てわかっておらず、なんか動くからいいや!(゚∀゚)が最初の一歩目でした。

webや参考書をまず読むのではなく作りたいツール(目標)を決めてから必要なコマンドを探してスクリプトを書いたほうがゴールが明確なので身に付きやすいです。
自分で作ったという実感も湧きます。
教科書嫌いな人にオススメ!!

■スクリプト書いた事あるけど次に繋がらない、続かない場合。
これ、多いですね。
いろんな人に最初の一歩を進ませようと教えてきましたが必ず完成はしてました。
楽しんで書いても貰えたようです。が…次の二歩目で挫折する傾向にあります。
理由を聞いてみると

・忙しい。書く暇がない。仕事があるので空き時間に書くしかない。
・初スクリプトから時間があいて忘れちゃったw
・知識が少ない、コマンド調べるのにも時間掛かる。

私も上記の理由でなかなか次へ続かず。気持ちはわかる。
ハードルだらけですね!!

ぶっちゃけ、継続無しに上の問題を解決する方法はありません!
人間だもの!

それでも書くに至った理由は、
同じ作業ばっかり!!メンドクサイ!!(´Д`)~ハァー

CGは面倒な作業のオンパレードです。
面倒な作業でスクリプトで出来るものは極力書いていきました。
内容はコネクション設定、アトリビュート入力、RIG、配置、データ整理、シーン設定などなど。
面倒な作業するより面倒なスクリプト書いたほうが早いってだけなんです。

慣れてくれば作業効率UP間違い無し!!
スクリプトで空いた時間を利用してクオリティを詰める事もできる!!
などメリットはたくさんあります。

簡単なものでもいいので面倒な作業があればスクリプトで処理してみて下さい。
最初は時間が掛かりますが続けて書いていくうちにコマンドも覚えて早く書けるようになります。

■ちょっと便利なネタ教えます
smoothBindしてある程度weight調整をした後にjoint位置を修正したい時ってありますよね?
それをするには
Skin>DetachSkin>History>KeepHistory
でjoint調整後に再Bindだと思います。最近Bind作業してないので今どうやってるのか分からなかったり…。

手順が多いので面倒です。ハイ来たメンドクサイ。
この手順をスクリプトで、てのもOKだと思います。
ですが、それ以外にも方法があるのです。
今のところ不具合はありませんが活用の際には自己責任でお願い致します。

smoothBindした時のjointの初期値がどこかにある筈ですよね。
この初期値をjoint移動後に再設定しますとDetachSkinせずともリセットできます。
それがskinClusterNodeのbindPreMatrixアトリビュートです。
手順は以下
1、joint位置移動
2、joint.worldInverseMatrix を skinCluster.bindPreMatrix に入力

mel文例(かなり省略)
getAttr "joint1.worldInverseMatrix";
setAttr "skinCluster1.bindPreMatrix[1]" -type "matrix" getAttrしたのを入れる;

これをfor文で回しますと全jointの再設定が出来ます。
試しにスクリプトを書いてこれを機会に習得してみてください!
ちょっと難しいですかね…。
個人的にはpythonがオススメです。

Pocket

コメント

はじめまして。AnimationメニューセットのSkin > Edit Smooth Skin > Move Skinned Joint Tool でジョイントの移動はできますよー。

はじめまして!
こんな機能があったのですね。
しかも2008からですか…。知りませんでしたorz
機会があれば使用してみます!ありがとうございます!

2 thoughts on “スクリプトのススメ mayaの場合”

  1. おがわ より:

    はじめまして。AnimationメニューセットのSkin > Edit Smooth Skin > Move Skinned Joint Tool でジョイントの移動はできますよー。

  2. toshio より:

    はじめまして!
    こんな機能があったのですね。
    しかも2008からですか…。知りませんでしたorz
    機会があれば使用してみます!ありがとうございます!

コメントフォーム

コメントは承認制ですので、即時に反映されません。ご了承ください。

*