数値を表示しようとしたとき、少数をある桁数で区切りたいと思う事があります。いわゆるROUND関数というヤツです。
以前にも mayaを起動するバッチを紹介していますが、mayaが LTだったり公開したのが2015年と、かなり情報が古い感じがしたので、今作るなら、こんな風な maya起動用.batファイルになるのかなぁというのを改めて。
mayaはプラグインを使って機能を追加することがあります。
バージョンアップでの新機能の中にも、新機能専用のノードやアトリビュートがプラグインによって作成されて実装されているものもあります。
Mayaを使っていると現在開いているシーンの名称を使用したいときが、たまにあります。
例えば、こんなような場面
Game Exporterを使って FBXを出力するとき、出力ファイル名にシーン名を使いたいときなどです。
ゲーム用の素材としてアニメーションを出力する場合、修正や仕様変更などで何度も同じシーンを出力して素材の更新をします。そんな時、前回の出力状態と異なっていたらバグになってしまいます。作業者だけで完結していてもバグを引き起こしてしまうような設定がいくつかありますが、そんなことは無いかもしれません。
キャラクターリグの場合、武器などの装備品を切り替えてモーション付けをしたいという要望の挙がるってくる場合があるかもしれません。
ツールなどを作成しなくとも、Reference Editorを使いプロップのモデルシーンの参照先を変更すれば簡単に入れ替えることができるので、ちょっと面倒だけど良いかなぁ、とか思うかもしれません。けれども、これでは次に同じシーンを開いたときに問題が出てきてしまいます。
リファレンスファイルが見つからなかったとき、ダイアログで [Ignore Reference] を指定した場合、mayaはどう処理するのか・・・。
検証してみます。
アニメーションを作成するときなどはモデルやリグを参照する
reference機能を使っているケースが多いかと思います。
メッシュやジョイントなどファイル容量の多いものを別ファイルから参照しているのでアニメーションのシーンファイル自体を軽量化できます。
ただ作業を引き継いだりしてシーンを開いた場合、参照しているファイルが見つからない場合があり、こんなダイアログが出てきます。
アニメーションを正確な再生速度でプレビューするために
Playblastという機能があります。
難解なレンダリング設定をしなくても、ビュー画面をそのままレンダリングしてくれるのでとても便利です。
大量のシーンに同じ処理を行う場合に便利なのが mayabatch.exeです。
ただ使用するには、ちょっとしたバッチの知識が必要になるみたいです。
バッチ処理に使用できる言語はいくつか有るようですが、超古典のMS-DOSで書いてみようと思います。
2022年の4月も終わるころ、GitHubにバンダイナムコ研究所よりモーションキャプチャのデータが公開されたようです。※ニュースリリース
そのキャプチャデータのファイル形式が今では珍しい(?)BVH形式を採用していました。
10年くらい昔、Perfumeのダンスモーションが配布された頃には色んなツールへのインポートスクリプトの記事が見られましたが、今回はどうでしょうかね、BVHは古い規格なのでそんなに需要もなさそうですし、当時のものを使う感じになるんでしょうか。
いつの頃からなのか、腕や脚などのIKを使う部分ではIK用のジョイント階層とFK用のジョイント階層、それらを合成するジョイント階層を使ってリグを組む方法を紹介しているのをよく見かけます。
合成するジョイントへ回転を転送する方法に、コンストレイントを使うのか、pairBlendノードを使うのか、または別のユーティリティノードで代用するのか、マトリクスで計算するのかなどでちょっとした派生があったりしますが、ユーティリティノードのウェイトアトリビュートとIK/FKを切り替えるコントローラのカスタムアトリビュートを接続してFKとIKのブレンド率を変化させる感じのリグになっています。
しかし、この方法のリグを覚えてしまうと、IKハンドル自体にIKとFKを切り替える機能がある事を忘れてしまう瞬間があります。
splineIkを操作するためには、普通のIKのようにIKハンドルを移動させたりするのではなく、splineIk のNURBSカーブの Control Vertex を移動させて操作します。
ただ、Control Vertex を選択したりするのは難があるため、クラスターで拘束してコントローラー代わりにします。
こちらの方が操作しやすいですね。
最近
splineIkをいくつも作っていて、このクラスターを作るのがとても面倒くさく感じました。
インストール直後のような初期状態の mayaでは Construction History というフラグが有効になっています。
この機能のおかげでプリミティブを作成したとき、シェイプの分割数や大きさを作成後でも編集することが出来るようになっています。
ただ、調整できるは出来るのですが、大きさがオブジェクトの中心を基準にして変化するようになっていたりるのです。
最初のうちはドキュメントが難解に感じるため、手っ取り早くオブジェクトを2つ選択して 初期状態の設定で aimConstraint を実行したり、たまに Aim Vector や Up Vector、World up vector のどれかをいじるくらいの感じだったりするのでしょうか。
ただ、aimConstraintを掛けているオブジェクト全体がひっくり返るようなアニメーションを作る場合、回ってほしくない軸がクルクルと回ってしまう場面が出てきます。
そんな時には、ちょっと面倒な「World up type」を使ったコンストレイントを使う必要がでてきます。
前回のスクリプトで作成したカプセルには"extentCurve"というカーブオブジェクトが存在しています。
今回は、このカーブオブジェクトを使った小技というか、備忘録。
エフェクトで、剣とか槍とか武器の軌道が欲しい場合に使えるかもしれません。
リグコントローラを選択するためのツールとして「ピッカー」というものが有るようです。
「シノプティックビュー」とか「セレクター」とか、いろいろ呼び方が有るようで、どれが一般的な呼び方なんでしょうかね?
でも、HumanIkの「キャラクタ
リプリゼンテーション」は意味不明すぎます・・・。
mayaで自作のリグを組むと、たいていピッカーも自作しないといけないので、リグを組んだら何となく流れで作成してしまいます。
「カプセル型のコントローラを作成してみる」で作ったようなリグの場合、複数の制御用コントローラがあるわけなのですが、アニメーションさせるとなると、関連したコントローラ全部にキーフレームを設定するときなどでかなり面倒に思うはずです。
キーフレームの設定を忘れるノードも出そうなので、できれば1つのノードで集中管理したい。
そんなことを実現してくれる機能が addAttrコマンドに存在します。
最終的には、こんな感じのノードグラフになります。
むかし、MELの保存先を調べるとか書いたのですが、スクリプトごとに記述しているため、なんか冗長なんですよねぇ。
なので、もう少し簡略化できないかと書き換えてみることにしました。