Rigging

Tips

modoのアクションレイヤー

前回に引き続きチャンネルについて書いてみたいと思います。

modoのチャンネルは複数の値を格納することができます。SDKのページを見ると「アクションレイヤー」という仕組みのようです。このアクションレイヤーを使用している代表的な機能が「アクション」「レンダーパス」「セットアップモード」です。
3dsMaxでは「ステートセット」、Mayaでは「アニメーションレイヤ」「レンダーレイヤ」に該当する仕組みです。modo 11.2 では格納された値をブレンドするノンリニアアニメーションエディタのような機能が提供されていないため、シンプルなレイヤーのON/OFFスイッチとしてのみ利用可能です。

「アクション」「レンダーパス」「セットアップモード」と専用に名前がついていると「アクション」はアニメーション専用のように感じるかもしれませんが、仕組みとしては使用するチャンネルは制限されていません。
例えばアクションやセットアップモードでマテリアルの色を変更したり、レンダーパスでアニメーションを切り替えるようなこともできます。セットアップモードでアイテムの表示を切り替えるような使い方は、リギングで便利に使えると思います。

 

アクションレイヤーの階層構造

modoには「アクション」「パス」「セットアップモード」の他にも、いくつかアクションレイヤーが存在します。以下の図はレイヤーの階層構造です。この図はUIから見た動作をまとめたもので、実際の動作とは異なる可能性があります。
マニュアルでは「セットアップアクションステート」「セットアップレベル」「シーンレベル」など断片的に用語や図が出てきますが、残念ながら全体をまとめた解説がありません。

全てのチャンネルのベースとして「初期状態」が存在していて、その上に初期値から変更された値を格納する「Setup」レイヤー、デフォルトでキーを格納する「Scene」レイヤー、一番上にアクション / レンダーパスを格納するレイヤーという構造になっています。アクション / レンダーパスは数を自由に増やすことができます。
チャンネルのレイヤー情報はチャンネルビューポートの「ソース」から確認することができます。


レイヤーの動作は Action / Render Pass レイヤーの値を編集すると、下にある Scene、Setup 、初期状態の値を上書きします。レイヤーで値を変更しないチャンネルは下のレイヤーの値が使用されます。
Scene でキーが作成されているチャンネルを、Action で編集したときは Scene のキーが Action に追加されます。

特殊なレイヤーとして「Edit」があります。「Edit」はテンポラリのようなレイヤーで、ユーザーが編集した値を一時的に格納します。タイムラインの移動、レイヤーの切り替え、キーの作成、「適用」ボタンを押したときなど編集が確定したタイミングで本来のレイヤーに値を反映します。ソースが Edit のときは「破棄」ボタンで編集をキャンセルすることができます。この動作はmodoのダイレクトモデリングツールがアクティブのときは編集や設定の変更をくりかえしテストできるのと同じ仕組みだと思います。

 

アクションレイヤーの種類

各レイヤーについ少し詳しく解説してみたいと思います。

初期状態

アイテムの初期状態です。チャンネルの○アイコンが灰色の状態です。
メッシュ、カメラ、ライト、マテリアルなどアイテムを新規に作成したとき、全てのチャンネルは 初期状態 に置かれます。

 

Setup

パラメータを初期値から変更した場合に値を格納するレイヤーです。

 

セットアップモード

セットアップモードはリギング用の特殊な空間です。セットアップタブのセットアップボタンを押すとビューポートに黄色の枠が表示されセットアップモードに切り替わります。

セットアップモードは他のレイヤーと異なりチャンネルにキーを作成してアニメーションすることはできませんが、チャンネルに「セットアップ/静止値」を設定することができます。
「セットアップ/静止値」はmodoの標準機能だとバインドしたスケルトン、トランスフォームデフォーマ、スプラインデフォーマなどメッシュを変形するために使用するアイテムの初期位置を格納するために使用されています。

「セットアップ/静止値」はセットアップモードでチャンネル右クリックメニューにある「セットアップ/静止値を設定」から設定することができます。「セットアップ/静止値」を設定したチャンネルはセットアップモードのとき○アイコンがライトグレーで表示され、セットアップモード OFF のときはパス同様にライトグリーンのアイコンが表示されます。チャンネルを編集した場合はソースが Scene になります。

 

Scene

デフォルトでキーを格納するレイヤーです。アクター や レンダーパス を使用していいない場合は Scene に値が格納されます。「セットアップ/静止値」が設定されているチャンネルを編集したときも  Scene が使用されます。

 

Action / Render Pass

アクター や レンダーパス で使用されるレイヤーです。パスやアクションに追加されているチャンネルの○アイコンはライトグリーンが表示されます。
アクター や レンダーパス は「グループ」として機能が提供されています。グループの順番や、グループ内のアクター / レンダーパスの順番はグループビューポートのリストで変更することができます。

 

アクションレイヤーの仕組みはこんな感じです。こんなチャンネルの仕組みが modo 601の時点で完成していたなんて驚きですね。
余談ですが、アクションを選択するとタイムラインのドープシート部分に Action Clip という行が表示されます。現在は何も機能しないようですが、今後アクション機能が拡張されるのが楽しみです。

 

どうしてチャンネルの話を書いてるかと言うと、この仕組みが理解できていないとデフォーマを使用したリグを構築できなからです。特に「セットアップ/静止値」は重要です。
よくある失敗として「セットアップ/静止値」が設定されているチャンネルを、別のチャンネルとリンクするという操作があります。「セットアップ/静止値」をリンクで上書きしてしまうため、セットアップモードでもアイテムの位置が変わってしまいます。
そんなときはリンクするアイテムの位置に「セットアップ/静止値」を設定することで問題を解決する事ができます。チャンネルのリンクだけでなくコンストレイントを使用した場合も同じなので、覚えておくとリギングがはかどるかと思います。

 

 

参考資料

https://help.thefoundry.co.uk/modo/content/help/pages/rendering/render_passes.html
https://help.thefoundry.co.uk/modo/content/help/pages/animation/channels.html
https://community.foundry.com/discuss/topic/80813/what-exactly-does-apply-to-setup-do?mode=Post&postID=757873
http://modo.sdk.thefoundry.co.uk/wiki/File_Formats#ACTN

Tips

modoのチャンネル

チャンネルについて基本的なことを書いてみます。チャンネルはアニメーションやリグを作る場合はもちろんですが、静止画用途でも知ってると便利なことが多いです。

チャンネルとは?

チャンネルとはマニュアルによると「簡単に言えばアイテムのアニメーション可能なアトリビュートのことです」と書かれています。チャンネルビューポートに表示される項目は全てチャンネルなのですが、パラメータ(アトリビュート)の右に○アイコンがついてるものはキーを設定してアニメーション可能なチャンネルです。○アイコンは色でチャンネルの状態をあらわしています。

初期状態

チャンネルは初期値のとき、背景色と同じ灰色で表示されています。

変更状態

値を変更した場合はライトグレーになります。
WEBでプロパティの画像が公開されていた場合や昔のシーンファイルを開いたとき、どのパラメータを変更したのかアイコンを見れば一発でわかるデザインになっています。凄く便利でお気に入りの機能です。

アニメーション

チャンネルは○アイコンをクリックすることでキーを作成することができ、パラメータの値をタイムラインに沿ってアニメーションさせることができます。カレントフレームにキーがある場合は赤色になります。カレント以外のフレームでは緑色になります。

ちなみにキー作成のショートカットはトランスフォームツール起動中、またはチャンネル選択状態で S キーです。チャンネル選択してCtrl+C、Ctrl+Vでキーフレームをコピーペーストすることができて便利です。
作成したキーを全て削除したい場合や初期値に戻したい場合は、パラメータラベル右クリックして「全て除去」を実行します。「キーの除去」はカレントフレームのキーを削除し、キーが1個だけの状態のときは値を残したままキーを削除します。

ドリブン

他のチャンネルから入力されている場合は青色のギア アイコンになります。チャンネルの入力と出力には矢印が表示されます。

アクション/ パス

アクション、レンダーパス機能によってチャンネルに複数の値が格納されているとき、パラメータが初期値から変更がない場合はライトグリーンのアイコンになります。値を編集した場合はライトグレーになります。アニメーションの緑色と少しまぎらわしいですね。

modoで使用頻度の高いチャンネルは以上です。次の記事では1つのチャンネルに複数の値を格納するしくみ「アクション/ パス」について書いてみたいと思います。

CG News

Fabric Engine が開発終了

Fabric EngineはAutodeskから抜けた元XSI開発者らが開発していた、DCCツールに依存しないツールプラットフォームを目指していたソフトです。Max、Maya、modo、Unity、UE4など複数のソフト向けにプラグインを開発していました。
アイディアや技術力が素晴らしかっただけに残念ですね。
http://fabricengine.com

Fabric Engineに関心をお寄せいただきありがとうございます。私たちはもはやソフトウェアプラットフォームとツールを開発していないことに注意してください。

ファブリックエンジンとは何ですか?
Fabric Engineは、ビジュアルエフェクト、ゲーム、リアルタイムビジュアライゼーション、VR / AR作業用の高性能カスタムツールを開発するためのプラットフォームです。

ファブリックは多くの一般的なアプリケーションと統合されているため、使い慣れた環境で作業することができます。ファブリックはスタンドアロンアプリケーションを構築する機能も提供します。選択肢はあなたのものです。

ファブリックコードはC ++を記述する必要なく、最適化されたC ++と同じ速さで実行されます。私たちはマルチスレッドコード作成に関わるローレベルのプログラミング作業を担当するので、必要なプロダクションツールの構築に集中することができます。これは、JavaScriptのようなカーネル言語(KL)によって可能です。また、KLの上に構築されたCanvasビジュアルプログラミングシステムを使用して、純粋に視覚的に作業することもできます。

ファブリックは、現代の制作作業に関わる大規模なデータセットや複雑さに取り組むために必要な力で、より速く、より簡単にツールを書く方法を提供します。

CG News

DynamicRenderRegion for Modo

アニメーションのレンダリングで一部だけレンダリングしたい場合に、レンダーリージョンを使って部分だけレンダリングするアセットらしい。アイディアが面白い。
レンダーリージョンの設定はスケマティックでリグを組めるので自分で作れそう。
https://gumroad.com/l/bHLD

Tips

modoの情報タブ

情報と状態ビューポートの情報タブについて小ネタを書いてみたいと思います。
状態タブはメッシュのポリゴンや頂点選択で頻繁に利用すると思いますが、情報タブもパラメータをスプレッドシートのように一覧表示することができて便利なときがあります。

例えば頂点のウェイトを3dsMaxのウェイト テーブルのように一覧表示して編集したり、アイテムのレンダー設定などを確認することができます。


ウェイトのようなコンポーネントモードの値は一括で編集できるのですが、残念ながらアイテムモードでは一括編集することができません。
プロパティでまとめて編集できるので問題ありませんが、情報タブで編集できたらもっと便利かもしれません。今後のバージョンアップに期待したいですね。

参考資料

Muscle Training to Joint reconstruction

アングルモーフとマッチするジョイント、スキニング、リギングを生成するデモ映像。
機械学習を使ってるっぽい?以前もクロスをジョイントにするスクリプトがありましたが、似たような用途でしょうか。

CG News

Akeytsu 1.0 発表

バージョン1が10月25日にリリースされるそうです。現在早期アクセス割引中で、Indy版 $179が$79、Pro版$589が$279で販売中です。

Akeytsuは2年以上ベータ版として開発していた、スタンドアロンのアニメーションソフト。スケルトン作成、ウェイト設定、アニメーションレイヤーなど近代的な機能が搭載されています。

以前少しさわってみましたが、UIが独特でサクッと良いところどりできるような感じではなかったですね。

https://www.nukeygara.com/akeytsu

参考資料

Snappers Advanced Facial Rig for Maya and Unreal Engine

MayaとUnreal Engineを使用したフェイシャルリグのデモ映像。凄いリアル。

特長

-FACSベースのリグ
-Adaptive rig:最適化されたブレンドシェイプのリストを使用して、任意の数のエクスプレッションを組み合わせることができる。
-リアルな顔の筋肉コンストレイント:高度なリグのロジックは、実際の顔の筋肉の制約をシミュレート。
– 高度なスキンシェイダー(MayaとUnreal用):微細な細部と細孔のストレッチを備えた最大16個のしわマップと16個の動的ディフューズマップを保持。
-顔のコントローラやGUIを使用して操作するのは簡単。
-すべてのゲームエンジンとアニメーションパッケージと互換性があります。
-すべてのクスプレッション間の滑らかな遷移。
-調整レイヤー:顔の複数の領域を自由に操作して、同じ表現の無制限のバリエーションを作成。

Tips

modoのマトリクス計算順

modoのアイテムは幾つかのマトリクス チャンネルを持っています。
3D座標計算の知識があれば理解出来るのかも知れませんが、マニュアルには特に説明がないためよく理解出来てませんでした。
各マトリクスチャンネルについてmodoの開発者のMattさんがコメントしていたのでメモっておきます。
マトリクスの計算順はチャンネルモディファイヤの接続や、値を取り出す場合に知っておきたい情報です。

http://community.foundry.com/discuss/post/1099604

  1. トランスフォームチャンネルは、各トランスフォーム アイテムのトランスフォーム行列に格納される。
  2. トランスフォーム行列はボトムアップから乗算され、ローカル行列に書き込まれる。
  3. ローカル行列に親行列のワールド行列が乗算され、アイテムのワールド行列に書き込まれる。
  4. ワールド行列は、ワールド位置、ワールド回転、ワールドスケール行列に分解される。
Tips

ACS2のパフォーマンスを上げる方法


アドバンスドビューポートでACSのパフォーマンスが上がるのに気がつきました。環境は modo 10.2v3 サブディビジョンはOFFです。
はじめデフォルト表示だと6FPS程度ですが、アドバンスド表示に切り替えてしばらくアイテムを動かすと何かをキャッシュしてリグのレスポンスが20FPSまで上がる気がります。
modo 11.1でリグの操作が早くなったと思いましたが、10.2でも早くなったので以前からの仕様のようです。PC環境に依存した問題かもしれませんが、アニメーションを作成する場合はとりあえず表示をデフォルト→アドバンス→デフォルトと切り替えてから作業開始するといいかもしれません。

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では面倒で普通にモデリングした方が簡単かもしれません。

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

参考