久しぶりの

    ■久しぶりのモデリング
     今日はクライアントチェック待ちで久しぶりに時間に空きができたんで、トラックモデリングを。

     今まで放置していたインテリアを追加。
    peterbilt_interior001.jpg
     トラックは物凄い数の機器類があるので超燃えます。作るのは大変ですけど。

     ついで扉もモデリング。まだ窓枠とロック部位が出来てないです。
    peterbilt_interior002.jpg
     ほんと車ってのはパーツが多くて大変だ。趣味でも仕事でも車をポンポン作ってる人尊敬しますわ(’Д`)

     ついでにレンダリング。フルHDで6時間。それでも若干ノイズが残ってますね。室内をパストレでレンダリングするとやっぱり時間がかかりますねぇ。CPU早く新しくしたいですな。
    ginraiInterior8bit_2011_0926.jpg
     扉とか歪みがなくて気持ち悪いですな、後で直さないと。



     などと色々考えながら、いや考え無しにモデリングしてたら問題発生・・・
    ginraiInterior_001.jpg
    ginraiInterior_002.jpg
     うぎゃー、変形したら追加したパーツがめり込んでる! ぬぅ~、パーツのレイアウトを変更しなくては・・・



    ■Pymel
     昨日たまたま話題でPymelの話があがったのですが、恥ずかしながら今までPymelを使ったことがありませんでした。
     で、話題ついでに簡単に調べてみたんですが、これは超便利じゃないですか~!
     Pymelとは、MayaPython(所謂maya.cmds)がMelの書式をPythonで模倣するだけのものに対し、PymelはPythonの書式でMayaにアクセスできるってモンらしいです。

    例えば、maya.cmdsの場合
    import maya.cmds as mc
    t1 = mc.createNode( 'transform', n='trs1' )
    t2 = mc.createNode( 'transform', n='trs2' )
    mc.parent( t2, t1 )
    t3 = mc.createNode( 'transform', n='trs2' )
    上記例ではt2とt3は同じ名前のノードを作成しているので、t2には'trs2'と言うstr文字列が、t3には'|trs2と言う文字列がそれぞれ入っています。しかし、t2はt1の子にしたので最終的にMayaで扱うには'|trs1|trs2'じゃないとダメです。つまり上記例では、t2を見失ってしまう事になります。
     ところがPymelの場合
    import pymel.core  as pm
    t1 = pm.createNode( 'transform', n='trs1' )
    t2 = pm.createNode( 'transform', n='trs2' )
    t1.addChild( t2 )
    t3 = pm.createNode( 'transform', n='trs2' )
    とした場合、ちゃんとt2はアクセス可能なパス'trs1|trs2'を保持してくれます。maya.cmdsはノードの名前をだけを返すのに対し、pymelはノードのIDを持っているっぽく、階層や名前の変更をちゃんと追うようになっているようです。これは素晴らしい!
     余談ですが、上記スクリプトを実行後、GUI上でt2のノード(trs1|trs2)をリネームした後に変数t2にアクセスすると、ちゃんとリネーム後の名前が返ってきます。スゲェェェェ!
     今まで名前のブッキングに注意を払いながらスクリプトを記述する必要があったのに、これで相当手間が省けます。

     もう一点、一番のポイントはPymelはオブジェクト指向でスクリプティングできる事!
     mayaPythonの場合
    mc.ls( type='transform' )

    この場合、戻り値はシーンに存在するtransformノードの文字列のリストが帰ってくるだけです。つまりMelと一緒なんですね。ところがPymelの場合
    pm.ls( type='transform' )
    とした場合、帰ってくるのはnt.Transformと言う、transformノードにアクセスするためのメソッドをもったクラスの配列が返ってきます。
     最初の各例文の4行目が、mayaPythonだと「mc.parent( t2, t1 )」だったのがpymelは「pm.t1.add( t2 )」になっている、ここが最大の違いですね。

     うーむ、なんと魅力的な。今まで何故スルーしてたんだろう。今後のスクリプトはPymelで書いていこうかな・・・
    スポンサーサイト
    プロフィール

    Eske

    Author:Eske
    萌えイラストレーターを目指す3DCGイラストレーター。
    現在ポケモンカードゲーム、ガンダムトライエイジ、ガンダムコンクエスト、妖怪ウォッチとりつきカードゲームなどで3DCGを使用したイラストレーターとして参加中。

    主にここでは日々気づいたメモなんかを残してます。
    イラストのお仕事も受け付けております。ココのメールアドレスからご連絡できますので、お気軽にご相談下さい。

    最新記事
    最新コメント
    カテゴリ
    最新トラックバック
    月別アーカイブ
    検索フォーム
    リンク
    QRコード
    QR