マントやスカートのリグを組んでいたりするとき、重力みたいなものを手軽に表現するために、回転の拘束にスキップフラグを付けて適用する。みたいな方法を使う場合があります。
ただ、軽くテストしているときはには気にならないのですが、豪快にアニメーションをさせるようになってくると、フリップしてしまうような場面に出くわすことがあるのです。
そんな時に確認するポイントをいくつか。
マントやスカートのリグを組んでいたりするとき、重力みたいなものを手軽に表現するために、回転の拘束にスキップフラグを付けて適用する。みたいな方法を使う場合があります。
ただ、軽くテストしているときはには気にならないのですが、豪快にアニメーションをさせるようになってくると、フリップしてしまうような場面に出くわすことがあるのです。
そんな時に確認するポイントをいくつか。
uiConfigurationScriptNode を作らせなくするためには、Preferences の UI Elements から、Panel Configurations の項目を編集しなければいけません。※参照
このノードを作成させなくするために、スクリプトで対処しようとしてグローバル変数なんかをいじったりもしていましたが、もっと簡単に回避する方法があったようです。
各種コンストレインを適用したとき、コンストレイントノードには W0みたいなアトリビュートがあることに気が付きます。コンストレイントの影響度を設定するアトリビュートですが、なんだか挙動が思っていたようなものと違う印象を持ちます。
Translate を拘束する pointConstraint、Rotate を拘束する
orientConstraint。
そして、Translate と Rotate を拘束する
parentConstraint。
移動と回転の両方を拘束するからと parentConstraintで拘束している人も多かったりするのかなと思ったりします。1回のコマンドで移動も回転も拘束できるので、なんか、お得な感じですが、違いを理解して使用しないと罠に嵌まってしまう事にもなりかねません。
jointOrient は、Orient Joint
ツールで設定できるとはいえ、全てのジョイントがワールド軸に沿って配置されているわけではありません。
そんな場合、orientJoint の値を決めるのは、なかなか面倒な作業になります。
MELで計算するのは大変なので、代替案的な値の取得方法なんかを紹介しようと思います。
キャラクター、特にロボット系の場合、バインドするジョイントの階層構造を作成するとき、プロップや装備品かなにかをアタッチする為のジョイントを追加する場合があります。
そういったジョイントはウェイト値をゼロにするので、バインド対象に含めないことにする場合があるようです。
リグの組み方は色々あると思うんですが、どういった作り方をしていたとしても、基本的にはリグコントローラからバインドしているジョイントへは、コンストレイントを使ってアニメーションを転送するというのが簡単で広く知れ渡っているという感じでしょうか。
ただ、scaleConstraint だけは上手くスケールを拘束できないようで、worldMatrix から decomposeMatrixを使ってアトリビュートを接続することがあったりします。
pickWalk と聞いてピンと来ない人も居るかもしれませんが、mayaのDAG階層は「矢印キー」で選択を変更することができるようになっています。
プレビューウィンドウだけで作業が完結するようなモデラーさんには馴染みはないかもしれませんが、アウトライナを使うような古いアニメーターさんなんかは知っている人が居るかもしれません。
勤め先では、伝統的に、モーションファイルをBVHフォーマットで取り回していたため、ジョイントを回転させる文化が無かったりします。
ジョイントは、配置するだけで良いので、誰でも作業できるというメリットもありますが、関節の構造や動かし方なんかを理解していないと問題のある骨格が出来上がってきたりはします・・・。
けれども、ことリグを作る場合には知っておいた方が良い、もしくは必須の知識だと思います。
ゲームエンジンとかで、ジョイントのスケールをゼロにすると条件によってはエラーになる場合があります。
子階層の無いジョイントは、まぁ、大丈夫そうなんですが、子階層があると行列計算が爆発するのでエラーになるんだったような気がします。
ゲームエンジンによって癖が違うようなので、そうならないようにリグのほうでアトリビュートにリミットを掛けたりするのですが・・・。
廉価な mayaとして
LTが存在しているわけなのですが、本格的に使おうとすると、機能が対応していなかったりしている事があります。
そんな、やりたい事というのはMELスクリプトを使ったリギングだったりするんですが、最近、プラグインはあるのに、使えない?ノードが存在していることに気が付きました。
FBXファイルの出力に便利な Game Exporter ですが、当然、FBXExport コマンドを使用しています。 Model Export なら問題ありませんが、Animation Clips を出力するとなると問題が出てきます。こちらを参照。
タイムレンジを設定できたり、複数クリップを1ファイルに保存するとか、自前で用意するのは中々大変なので有効活用したいところです。
なにより、シーンファイルに FBXの出力設定を保存できるのでヒューマンエラーが格段に減らせられるのは魅力的です。