Maya

アニメーション制作にスクリプトを活用しよう!~中級編~

はじめに

こんにちは。モノリスソフト テクニカルアーティストの本部です。

「アニメーション制作にスクリプトを活用しよう!」と題しまして、アニメーション制作に便利なスクリプト・ツールなどを紹介します。
今回のみではなく、何度か連載形式にできればと思います。

さて、今回は「中級編」の内容として、
MELスクリプトを使用したGraphEditorでのキーフレームの選択補助機能「THAddPickWalkKeyframeCommand」を紹介します。

こちらは、私がアニメーションを制作する時に実際に使用している機能で、ホットキーに登録してすぐにアクセスできるようにしています。
個人的には「これがないとアニメーション制作できない!」くらい便利な機能ですので、興味がある方はぜひ試してみてください。

このページでできるようになること

このページの内容を実践することで、Mayaでできるようになることを簡単にまとめました。
あくまでも一例で、他にもいろいろな使い方ができます。

  1. MayaのGraphEditorでのキーフレーム選択の効率化
  2. 複雑なアニメーションカーブ・重なったアニメーションカーブの編集時に、狙ったキーフレームを簡単に選択する
  3. ロジカルなキーフレームの選択など、使い方によっていろいろな使い方ができます!

MayaのGraphEditorでのキーフレーム選択の効率化

キーの選択の拡張や縮小、カレントキーフレームの選択などが簡単に行えるようになります。tech_03_02.gif

複雑なアニメーションカーブ・重なったアニメーションカーブの編集時に、狙ったキーフレームを簡単に選択する

複数のアニメーションカーブを選択時、キーフレームが重なってしまい選択しづらいことがあると思います。
そんな時には、選択しやすいキーフレームを選択してから、「カレントキーフレームの選択機能」や「キーフレームのピックウォーク機能」を使用することで、狙ったキーフレームを選択しやすくなります。tech_03_03.gif

ロジカルなキーフレームの選択など、使い方によっていろいろな使い方ができます!

一例として、「極端に近いキーフレームの削除方法」について説明します。
下記のように、隣同士のキーフレームがほとんど重なってしまった状態のことで、時間方向へスケーリングした際などに、よく起きてしまうと思います。tech_03_04.png

上記画像ならキーフレーム同士が離れているため選択しやすいですが、ベイクしてスケーリングすると大体以下のような感じに・・・。
これを手作業で選択・修正するのはなかなか骨が折れます。
tech_03_05.png

そんなときは、「カレントキーフレームの選択機能」で一括選択・削除できます。tech_03_06.gif

方法は以下の通りです。

  1. 「<」または「>」で削除したいフレームにカレントフレームを移動します。
    ※これはMayaのデフォルト機能です。
  2. 削除したい重なったキーフレームがあるアニメーションカーブの、適当なキーフレームを選択します。
  3. 「カレントキーフレームの選択機能」を実行します。選択されているキーフレームを持つアニメーションカーブから、カレントフレームにあるキーフレームが再選択されます。

この手順の便利なところは、削除したいフレームにあるキーフレームのみを選択することができ、正常なキーフレームは選択や削除がされないという点です。
怪しいアニメーションカーブを一旦すべて選択して実行することで、おかしなところにキーフレームのみを選択し、削除することができます。

この項では本機能の便利だと思えるところを説明しました。
それでは、以下で実際に使えるようにする手順を説明していきます。

THAddPickWalkKeyframeCommandをMayaで使えるようにする

ここでは、MayaでTHAddPickWalkKeyframeCommandを使えるようにするために必要な準備について説明します。
具体的には以下の手順が必要です。

  1. MELスクリプトファイルをMayaのスクリプトパスが通っているフォルダに配置する
  2. MayaにMELプロシージャを登録する

MELスクリプトファイルをMayaのスクリプトパスが通っているフォルダに配置する

tech_03_07.jpg

ってなった方も大丈夫。詳しい説明はひとまず置いておいて、以下の「配置するファイル」をダウンロードして「配置するパス」に配置してください。

配置するファイル THAddPickWalkKeyframeCommand.mel
配置するパス %userprofile%\Documents/maya/scripts

DOWNLOAD

詳しく知りたい方は、以下を展開してください。

ひとまず置いておかれた詳しい説明

スクリプトパスとは?

Mayaが自動でMELスクリプトを読みに行ってくれるフォルダのことです。
最初から設定されているパスや、プロジェクトによって追加で設定する場合があります。

以下のスクリプトで、現在設定されているパスを確認できます。

// 設定されているスクリプトパスを表示するスクリプト。MayaのスクリプトエディタのMELタブで実行してみてください。
getenv MAYA_SCRIPT_PATH

以下が実行結果です。一行で表示されますが、パスごとに[;(セミコロン)]で区切られています。
MAYA_SCRIPT_PATHに含まれているパスであれば、どこにMELスクリプトファイルを配置しても、Mayaが自動で認識してくれます。tech_03_08.png

注意

!スクリプトパスは、うかつに変更しないでください!
プロジェクトごとに設定が失われて開発環境が上手く動かなくなったり、Maya自体の動作がおかしくなる可能性があります。

上記のスクリプトは内容を表示するだけなので安全ですが、むやみに改変して変更などをしてしまわないようご注意ください。


MayaにMELプロシージャを登録する

上記手順で、大本のスクリプトファイルを配置し、Mayaで使用する準備ができました。
本項目では、実際にMayaで使用するためのコマンド(MELプロシージャ)について使い方を説明します。

MELプロシージャとは?

複数のコマンドを何度も実行するような場合に、それらのコマンドに名前をつけておいて、その名前で実行できるようにしておくと便利です。
MELではこのひとまとまりのコマンドのことをプロシージャーと呼びます。

今回のツールでは、MELスクリプトファイルで定義したプロシージャを、Mayaで呼び出すことで処理を実行します。tech_03_09.png

機能と呼び出すプロシージャ

今回のツールを導入することで使えるようになる機能と、そのプロシージャの呼び出し方を以下に記載します。
プロシージャは、参考Gifのようにスクリプトエディタで呼び出して実行することもできますが、ホットキーに登録したり、シェルフに入れたり、マーキングメニューに追加するなど、お好みでアクセスしやすいようにすると便利です。

選択したアニメーションカーブのカレントタイムのキーフレームを選択

選択されたキーの選択を拡張

キーフレームの選択を、前後に拡張する機能です。tech_03_10.gif

// 前フレーム方向へ選択を拡張
THAddPickWalkKeyframeCommand("addPre");
 
// 後フレーム方向へ選択を拡張
THAddPickWalkKeyframeCommand("addPos");

選択されたキーの選択を縮小

キーフレームの選択を、前後に縮小する機能です。tech_03_11.gif

// 前フレーム方向の選択を縮小
THAddPickWalkKeyframeCommand("desPre");
 
// 後フレーム方向の選択を縮小
THAddPickWalkKeyframeCommand("desPos");

選択されたキーのピックウォーク

キーフレームの選択を、前後に移動(ピックウォーク)する機能です。tech_03_12.gif

// 前フレーム方向へのピックウォーク
THAddPickWalkKeyframeCommand("addPre");
THAddPickWalkKeyframeCommand("desPos");
 
// 後フレーム方向へのピックウォーク
THAddPickWalkKeyframeCommand("addPos");
THAddPickWalkKeyframeCommand("desPre");

カレントキーフレームの選択(選択されたキーフレームからカレントフレームのキーフレームを選択する機能)

選択中のキーフレームを持つアニメーションカーブから、カレントフレームにあるキーフレームを選択しなおします。
※カレントフレームにキーフレームがないアニメーションカーブは非選択状態になります。tech_03_13.gif

// 選択されたキーフレームからカレントフレームのキーフレームを選択
source "THAddPickWalkKeyframeCommand.mel";
THSelectCurrentKeyframeCommand(0);

MELスクリプト本体

MELスクリプトのソースを記載しておきますので、興味がある方はどうぞ。
「MELスクリプトファイルをMayaのスクリプトパスが通っているフォルダに配置する」の項でダウンロードできるMELファイルと同じものです。

MELスクリプト本体 ソースを展開 ソースを折りたたむ


global proc THAddPickWalkKeyframeCommand(string $direct)
 {
    string $attrList[] = `keyframe -query -selected -name`;
    float $frameList[];
    string $selectKey,$evalCommand;
 
    $evalCommand = "";
    for($attr in $attrList)
     {
        $frameList = `keyframe -selected -query $attr`;
 
        switch($direct)
         {
            //前のキーフレームを拡大選択
            case "addPre":
                    $selectKey = `findKeyframe -time $frameList[0] -which "previous" $attr`;
                    break;
            //前のキーフレームを選択縮小
            case "desPre":
                    $selectKey = $frameList[0];
                    print $selectKey;
                    break;
            //後ろのキーフレームを拡大選択
            case "addPos":
                    print "Add Pos\n";
                    $selectKey = `findKeyframe -time $frameList[size($frameList)-1] -which "next" $attr`;
                    print($selectKey + "\n");
                    break;
            //後ろのキーフレームを選択縮小
            case "desPos":
                    $selectKey = $frameList[size($frameList)-1];
                    print $selectKey;
                    break;
         }
        $evalCommand += "selectKey -toggle -keyframe -time " + $selectKey + " " + $attr + ";\n";
     }
/// print $frameList;
    print $evalCommand;
    eval($evalCommand);
 
 }
 
global proc THSelectCurrentKeyframeCommand(int $add)
 {
    string $attr;
    string $attrList[] = `keyframe -query -selected -name`;
    float $time = `currentTime -query`;
 
    if(!size($attrList)) return;
 
    if(!$add)
        selectKey -clear;
    for($attr in $attrList) selectKey -add -keyframe -time $time $attr;
 }

まとめ

「アニメーション制作にスクリプトを活用しよう!~中級編~」と題して、MayaのGraphEditorでキーフレームの選択を便利にする方法について説明しました。いかがでしたでしょうか?

プロシージャの組み合わせ次第で、他にもいろいろな選択の仕方ができると思いますので、試してみてください。
みなさまのアニメーション制作の一助になれば幸いです。

AUTHOR:本部

アニメーターとしてモノリスソフトへ入社後、現在はテクニカルアーティストを務める。 好きな動物はねこ。