その他
    ホーム 技術発信 DoRuby プログラムが苦手でもコピペで簡単 MelでMayaの効率化
    プログラムが苦手でもコピペで簡単 MelでMayaの効率化
     

    プログラムが苦手でもコピペで簡単 MelでMayaの効率化

    この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

    一通りの作業に慣れてきたら次は作業の効率化に挑戦してみましょう。 Mayaではプログラミングの知識がなくても簡単にMelスクリプトを使って作業を効率化することが出来ます。 本記事ではそのやり方を紹介しています。

    はじめに

    Mayaのいくつかの機能の目的や使い方を理解し、だんだんと「自分流」のモデリングやアニメーションの作業が身についてくると、
    作業の中で繰り返し行わなければならない単調なアクションがとにかく多いことに気づいてきます。

    例えば私がモデリング作業の中でなにかとよく行うのが、オブジェクトの左右反転コピーです。
    顔や体など対称軸がY軸上にあれば「ジオメトリのミラー」で反転コピーできますが、このコピーはオブジェクトを中心としたミラーしかできないので、猫耳だったりイヤリングなどミラーの基準軸から離れているパーツに関しては思っている結果になりません。

    この左右反転コピーを行うには

    オブジェクトを複製(Ctrl+D) 
     ↓
     ピボットをワールドの中心に合わせる(「修正」→「トランスフォームのフリーズ」+「トランスフォームのリセット」)
     ↓ 
    チャネルボックス上でオブジェクトのスケールXの値を-1にしてもう一度「トランスフォームのフリーズ」
    

    という3段階の手順を踏まなくてはなりません。(自分が知る限りでは)

    Mayaには左右対称のモデリングをする際に便利な機能として「シンメトリの軸」を指定できたり、「特殊な複製」で複製して反面だけモデリングすればもう一方にも作業が反映されるというものがあります。
    シンメトリのミラー

    特殊な複製
    しかし、いまいち冒頭で述べた「自分流」に合わないということもあり、結局左右対称のモデリングをするときに私がよく使うのが「左右反転コピー」になります。
    15秒程度のちょっとした作業ですが、一日に何度も行う日もあるのでできればワンクリックで済ませたいですよね。

    Mayaはスクリプトで自由にカスタマイズできる

    Mayaは一つ一つの機能がMelという言語で制御されており
    頂点一つ一つの移動からノードの接続関係までそのほとんどがMelで動いており使い手からもスクリプトでの実行が可能です。
    保存時によく見かける保存形式の「.MB」(Mayaバイナリ)と「.MA」(Mayaアスキー)という2種類の内の「.MA」という種類では
    複雑な3DシーンがすべてMelスクリプトで記述して保存されているようです。

    感覚的に3D制作ができるイメージが強いMayaですが実はかなり論理的でお堅いソフトみたいです。

    参考 チュートリアル / 読んで触ってよくわかる!Mayaを使いこなす為のAtoZ 第70回:Maya
    ASCIIとMayaBinaryの違い

    左右反転コピーをワンクリックでできるようにしよう

    説明が長くなってしまいましたが、さっそくMelスクリプトの力を借りてこれまで行ってきた単調な作業に終止符を打ちたいと思います。

    ただ私自身プログラミングの知識がほぼありません。
    きっとこの記事にたどり着いた方の多くも同じかと思います。
    でも安心してください。
    Mayaでは「スクリプトエディタ」上からすべての実行されたスクリプトが見られるようになっているので自分のアクションに対応したスクリプトがわかりやすいです。

    まずさっそくオブジェクトを選択して複製してみましょう
    するとスクリプトエディタ上には
    複製実行後
    と表示されます。複製のスクリプトは

    duplicate -rr;
    

    みたいなので、ひとまずメモ帳などにコピペしておきましょう。
    続けてトランスフォームのフリーズとリセットを行います。
    エコー前
    スクリプトエディタ上にはこのように出ますが見る限り今のアクションの実行文ではなさそうですね。
    実行されたスクリプトが表示されていないみたいなのでスクリプトエディタ上のこの「すべてのコマンドのエコー」というボタンを押して再度同じアクションを行ってみます。
    エコー後

    フリーズ、リセット実行後
    すると上の画像の通り新しく実行文が表示されました。

    FreezeTransformations;
    ResetTransformations;
    

    この二つがそれっぽいですね。メモ帳に追加でコピペしておきましょう。
    最後にスケールXを-1にします。
    スケール実行後

    setAttr "pCube2.scaleX" -1;
    

    これも同じくコピペして
    抽出した文が以下になります。

    duplicate -rr;
    FreezeTransformations;
    ResetTransformations;
    setAttr "pCube2.scaleX" -1;
    FreezeTransformations;
    

    ただこのままだと”pCube2″というオブジェクトの名前が入ってしまっているので他の名前のオブジェクトでは機能しなさそうです。
    少し調べてみると、選択中のオブジェクトのスケールXを変えるには
    setAttr .scaleX -1;
    だけで十分みたいです。

    というわけで出来上がったのが以下の実行文になります。

    duplicate -rr;
    FreezeTransformations;
    ResetTransformations;
    setAttr .scaleX -1;
    FreezeTransformations;
    

    試しにこの寄せ集めで作ったスクリプトで左右反転を実行してみます。
    スクリプトを実行する際はスクリプトエディタ上の縦に2分割されている下の空白に打ち込んでこのボタンで実行できます。
    実行ボタン
    実行前
    実行前
    実行後
    実行後

    無事に左右反転コピーができましたね!
    では、あとはこのスクリプトをボタンとしてシェルフに登録してあげるだけでワンクリック左右反転が実現します。

    シェルフに登録

    スクリプトを登録する手順を紹介します。
    「ウィンドウ」→「設定/プリファレンス」→「シェルフエディタ」
    でシェルフエディタを開きます。

    シェルフエディタ説明1
    シェルフエディタ説明2
    「コマンド」タブを開いて先ほどの左右反転コピースクリプトをコピペ。
    このボタンの名前やツールヒントなど自分に分かりやすいように入力してすべての「シェルフを保存」で登録完了です。

    正常に動いていますね。
    動作確認GIF

    これで単調な作業におさらばして、作業の効率化と、省いた時間でクオリティ向上に注力していけますね。

    まとめ

    MayaではMelスクリプト以外にもPythonで動かすことが可能です。
    今回の記事ではプログラミングの知識がない人でもMelスクリプトをコピペして簡単に作業の効率化を実現する方法を紹介しました。
    ほかにも頭身の違う複数のキャラクターのセットアップ(コントロール作成等)をボタン一つで行うツールであったり、自分用にUIを作成してツールを使いやすくしたりと様々な事例があるみたいです。

    人それぞれ作り方に「自分流」があって、ほしい機能もやはり個々によって異なります。
    まずは自分の作業周りで困ったことやめんどくさいと感じたことを効率化していく努力をして、
    徐々にチームでも重宝されるような開発ツールが作れるようになれば、一段と価値の高いデザイナーになれるのではと思います。

    あなたも「テクニカルアーティスト」を目指してみてはいかがでしょうか。

    Mel・Pythonコマンド一覧