Rigging

Tips

modoの角度測定ノードで360°測定する方法

modoにはリギングに必要な多くのノードが搭載されています。
ノードの応用例として「条件式」ノードを使用した角度の測定について書いてみたいと思います。
modoでFBIKで制御されたスケルトン角度でモーフを制御する方法」では、Measure Angle ノードを使用してIK制御されたスケルトンの角度を測定しました。

Measure Angle ノードの問題点

Measure Angle ノードの問題点として、3個のオブジェクトの座標を使用して角度を測定するため 0~180°の範囲の角度出力に限定されていることです。ヒジやヒザをIKで制御する場合は、間接の曲がる角度が0~180°の範囲であるため概ね問題になることはありません。
ですが肩や股関節のようにIKの始点となるオブジェクトは360°回転するため、Measure Angle ノード単体では0~360°の範囲を測定できません。

Measure Angle ノードで0~360°の範囲を測定する方法

360°回転するオブジェクトの角度を測定する場合は、条件式ノード と Measure Angle ノードで組み合わせて使用します。

スケマティックの解説です。
Measure Angle ノードはオブジェクトの位置関係で測定する方向が変わってしまうのが問題です。現在どの方向にオブジェクトがいるか判定できれば、0~360°の範囲で角度を測定することができます。
このスケマティックでは緑色と黄色のロケータを2個配置して、Measure Distance ノードを使用してスケルトンがどちらのロケータに近いかで方向を判定しています。

Measure Distance の「距離出力」を 条件式ノードに接続して、操作を「AはBより大きい」に設定しました。
条件式ノードは入力されたチャンネルの値を比較して、接続されたチャンネルの値をそのまま出力したり、任意の値を出力することができるノードです。処理の分岐に使用したりできる便利なノードです。

条件式ノードでは「Trueの場合」を「出力 True 値」に変更し、「True の値」を「1.0」に設定します。
同様に「False の場合」を「出力 False 値」に変更し、「False の値」を「-1.0」に設定します。
この値を Measure Angle の「角度出力」の値と掛けることで、-180°~180°の範囲の角度を測定することができます。

-180°~180° の値でも問題ないのですが、0~360°の範囲のほうがわかりやすい場合は、
最後に180を足すことで値を180オフセットしています。

以上で0~360°の範囲で角度を測定することができました。
modo 901からQuaternion モディファイヤが追加されているので、Quaternionを理解していればもっと便利な方法があるかもしれません。Quaternion覚えたら何か記事を書いてみたいと思います。

Tips

modoでワールド回転からローカル角度を計算する方法

IKのようにチャンネルモディファイヤによって制御されているアイテムから、リギングのためローカル座標を取得したいことがあると思います。ローカル角度は「自分のワールド回転と、親オブジェクトの逆行列をかける」と求めることができます。

画像では親アイテム(スケルトン)のWorld RotationをMatrix Invertで逆行列を求めています。
Matrix InvertのOutputを、ローカル角度を求めたいアイテムのWorld RotationとMatrix Composeを使用して掛けます。
Matrix Composeはチャンネルにリンクした順で計算します。(マトリクスの計算はかけ算の順番で結果が変わるので注意が必要です)
最終的にマトリクスをMatrix To Euler を使用してXYZの角度に変換します。

一般的にマトリクスからオイラー変換する場合には複数の解があり、Matrix To Euler ノード1つで3軸分の角度をユーザーが望む形でまるっと出力すのは数学的に難しいらしい。「回転順序」を適切に使用して軸ごとに角度を出力するのがいいみたいです。

測定ノードの Measure Angle で角度を求めることもできます。

Tips

modoでFBIKで制御されたスケルトン角度でモーフを制御する方法

アニメーションで筋肉の動きを表現したい場合や、肘や膝がゴムホースのように曲がってしまうのを補正したい場合にモーフを使用する事があります。
FBIKのようにマトリクスを使用して動きを制御するチャンネルモディファイヤを使用すると、プロパティのトランスフォームの角度が変化しなくなります。FBIKでトランスフォームが変化しないのは計算の優先順位によるもので、マトリクスの計算がトランスフォームより優先的に使用さてるためです。

このような場合に測定ノードの Measure Angle で角度を取得する方法を紹介します。

スケルトンとMeasure Angleを使用して角度を取り出しています。
角度とモーフの強さを調節するため、Relationship を使用して任意の角度における強さをマッピングします。

同様の方法で、太ももの角度をスカートのスケルトンに連動させるような使い方もできます。
測定ノードには角度の他にも距離、速度、スピードの測定ノードが用意されているので、様々なリグを作る事ができます。

Measure Angleを使用せず「ワールド回転からローカル角度を計算する」こともできます。

Tips

modoでファイルパスを切り替える方法


アクションごとのシミュレーションや放射照度キャッシュの保存先を変えたり、レンダリング画像の保存先をフレーム数で変更したりしたい場合があります。modoではファイルパスは文字列タイプのチャンネルとして扱われていて、文字列ノードを使用する事でリグを構築することができます。

上記の画像はアセンブリとして再利用できるようにするためロケータに文字列タイプのユーザーチャンネルを追加し、ファイルパスとファイル名を入力用のチャンネルにしていいます。※
StringComposeノードでファイルパスとファイル名を結合し、結合した文字列をStringSwitchノードで切り替えています。

StringComposeはパターンに$[s:1]$[s:2]のように入力することで、「C:\Temp\」と「Cut1.LXI」のような文字列を「C:\Temp\Cut1.LXI」のように結合する事ができます。入力チャンネルには複数のチャンネルを接続することができます。
$[s:1]は文字列チャンネルの1接続目、$[s:2]は文字列チャンネルの2接続目を意味しています。パターンで整数入力する場合は$[i:1]、浮動小数点数入力の場合は$[f:3]のように入力します。詳細はマニュアル参照。

StringSwitchは入力された複数の文字列を、切り替えチャンネルの値で切り替えることができるノードです。例えば切り替えの値が2の場合は、2個目に接続されたチャンネルの文字列を出力します。
StringSwitchの出力を任意の文字列チャンネルに接続して使用しますが、レンダー出力のファイル名チャンネルのように、出力先の文字列行が(Empty)と表示されているようなチャンネルの場合は、あらかじめ仮のファイルパスを設定しておく必要があります。

文字列タイプのチャンネルはプロシージャルモデリングのSelect By Selection SetやSelect By Polygon Tagでも使用されているので、StringSwitchを使うと表現の幅が広がりそうです。

※modoのアセンブリはノードのチャンネルを直接公開すると、アセットロード時に公開チャンネルが消えたりすることがあります。パーティクル関連のノードは直接入力しても値を無視することがあるため、ロケーターのユーザーチャンネルを経由するとバグっぽい動作につまずかずにすむのでお勧めです。

Tips

modoのプロシージャルで手続へアー

modo のプロシージャル駆使すれば、xismoと同じように手続へアー作れるかも?と思って試してみた。作れるけど細かく制御しようとするとmodoでは面倒で普通にモデリングした方が簡単かもしれません。

プラグインのPolyStrips From Curvesを使用すると、modoでもひとふさごとに髪をモデリングすることができます。

 

アニメっぽい短冊形の手続きヘアー作成というと、LightWaveのプラグインにHairBladeを思い出した。懐かしいです。
FoundryのフォーラムではプロシージャルモデリングのUIがわかり難いというコメント見かけますが、個人的にはMaxライクのスタック表示で、自由度も高いので好きです。

 

参考

参考資料

Enriching Facial Blendshape Rigs with Physical Simulation

物理シミュレーションを使用したフェイシャルブレンドシェイプのリグ。

多くの場合、顔のアニメーションは体全体の動作とは別に作成されます。
魅力的な顔のアニメーションはそれ自体では挑戦的なので、アーティストは孤立して顔の動きを作成して編集する傾向があります。
また、顔のアニメーションがモーションキャプチャから派生したものである場合、これは通常静止している間はモーフキャップのブースで行われます。
どちらの場合でも、身体と頭の動きと孤立した顔のアニメーションを再結合することは簡単ではなく、体の動態が顔に正しく反映されていないと(例えば、走っているときの顔組織のバウンスなど)、珍しい結果を招くことがあります。
私たちは顔のブレンドシェイプアニメーションに物理学を追加することができるシンプルで直感的なシステムを導入することで、この問題に取り組んでいます。

参考資料

The New Pioneers: Animation Tools and Techniques

映像向けのセルルックはこういうリグがいいんだろうな。
3Dソフトに付属のリグはモーキャプやゲーム用途の物がベースなので、アヌメ用途はカメラスクリーンに特化したリグが必要な気がします。

CG 日記

MicaRig 207

modoを使用したショートフィルムプロジェクト「TROLL BRIDGE」で使用されているリグが公開されています。
https://www.dropbox.com/sh/8jz429tnx732htj/AABf1N0DV2n2xO1NuLzBCis-a

MicaRig はACSをカスタマイズしたものです。
DLしてみたけどデフォーマキャッシュで30FPS越えることはなかった。ACS使うと基本フレームレート良くならないんだけど、もしかしてMac版の方がパフォーマンスいいのかな。。

Tips

modoでアイテムの編集を速くする方法

modoのアイテム編集で体感2〜3倍速くする方法見つけました。
初期設定 / リマッピング / 入力デバイス で「タブレット」にする。またはマウスではなくタブレットを使用するといいです。
環境依存かもしれないけど、Win+ロジクールマウス+modo10の環境では結構速く感じます。

ビューポートが遅い原因はいくつかありますが、たぶんビューポートの再描画が遅い場合に有効です。ACSとかキャラクターリグは顕著に速くなりました。

modoはマウスの移動量とアイテムの移動量が、ビューの重さによって変わります。
重いシーンはアイテムは移動しづらくなり体感的に重くなる。
ペンタブやタブレット入力にすると画面の絶対値で座標を処理するらしく、ビューポートの重さの影響を受けずにアイテムを編集出来るようになるようで体感速度が速くなったように感じます。
ビューポートのFPSは早いのにアイテムの移動が遅く感じるときには、この方法で体感速度が改善されると思います。

プロシージャルのカーブスイープにスプラインデフォーマ設定して、ロケータをアニメーションしようとしたらすごく重い。 気まぐれでペンタブ使ったらグリグリ滑らかに移動出来るようになってマウス入力が原因と気がつきました。

参考資料

Kraken 1.2

FabricEngineのKrakenはCATベースなのかと思ってたけど、Hybride Technologies とUbisoftで開発された物が、他スタジオの拠出金で開発継続してた物なんだね。
今オープンソースプロジェクトらしい。
http://fabricengine.com/kraken-1-2/