Tips

Tips

modoで数値チェッカーの作り方

リグを作ったりノードの機能を調べてるときに、チャンネルが出力してる値を確認したいことがあると思います。今回はそんなときに便利な数値チェッカーの作り方について書いてみます。

ノードの出力チャンネルを「チャンネルセット」に追加してビューポートに表示する方法もありますが、アセンブリプリセットとして再利用できるようにロケータの「注記」表示を使います。作り方は簡単です。

作成手順です。

  1. ロケータを作成して、表示タブから「注記を追加」します。
    注記は「ライン1~8」に入力した文字列をビューポートに表示するメモ機能です。「表示」をオンにして、アイテムを選択していない状態でも注記が表示されるようにします。「不透明度」を100%にして見やすくしました。
  2. チャンネルビューポートに「ライン」チャンネルをスケマティックに追加します。
  3. Encode String ノードを追加してラインチャンネルにリンクします。
    Encode String は「値」を「文字列」 に変換するノードです。ラインチャンネルを見ると「abc」アイコンがついてますが、これはチャンネルタイプが「文字列」であることをあらわしています。「値」と「文字列」ではチャンネルタイプが異なるので、「位置X」を直接「ライン1」にリンクすることができません。そんなときはチャンネルタイプを合わせる必要があります。
  4. Encode String の「値」に「位置」チャンネルをリンクすると、文字列として値が表示されます。
    値の桁数は Encode String の「小数桁数」で変更できます。見た目はロケータの「シェイプ」や「ワイヤフレームの色」でカスタマイズすると見やすくなります。

こんな感じでアセンブリプリセット保存すれば、いつでもシーンに読み込んで使用できます。

ロケータを削除したときシーンに Encode String ノードが残らないよう、Encode String ノードは「item.parent」コマンドでロケータの子にしておくと便利です。

出力値が確認できると複雑なリグを作る場合でもデバッグしやすくて便利なのでおすすめです。

Tips

modoでスライダーコントローラーを作る方法

今回はキャラクターリグでよく見かけるスライダーコントローラーの作り方を書いてみます。
作り方は簡単で前回の記事で紹介した Channel Relationship と Clamp ノードを使用します。アセンブリプリセットとして保存したとき便利なように、いくつか追加のステップがあります。

作成手順です。

  1. スライダーバーと、スライダーノブを準備します。スライダーバーとスライダーノブは移動しやすいように親子関係を設定しています。
    スライダーはアイテム位置を取得できれば基本的にどんなアイテムを使用しても問題ありません。今回はロケータのカスタム シェイプを使用してスライダーバーとスライダーノブにしました。
    スライダーバーには平面の「サイズY」は1mです。サイズは好きに設定して問題ありません。
  2. スライダーノブの「位置X」「位置Z」チャンネルをロックします。
    プロパティで「位置X」「位置Z」チャンネルを選択して、右クリックメニューから「ロック/ロック解除」を設定します。これでノブが左右に移動することはありません。
  3. スライダーノブの「位置Y」をスケマティックに追加します。
  4. Clamp ノードを追加し、「入力」と「出力」を「位置Y」にリンクします。
    Clamp のプロパティで「最小」を-0.5、「最大」を0.5に設定します。位置チャンネルでは 0.5=500mm としてあつかわれます。スライダーバーの高さは1mに設定しているので、ノブの移動範囲を-500mm~500mmに制限したことになります。
  5. スライダーバーアイテムに「ユーザーチャンネル」を追加します。
    好きな名前をチャンネルを追加します。チャンネルタイプは「浮動小数点」を使用しましたが、数値をあつかえればどのタイプでも大丈夫だと思います。「ユーザーチャンネル」を追加するアイテムも好みで選んで問題ないです。
  6. Channel Relationship ノードを追加し、「入力」を「位置Y」とリンクします。「出力」を作成した「ユーザーチャンネル」にリンクします。
    なぜ Channel Relationshipを「ユーザーチャンネル」にリンクしたかというと、スライダーを「アセンブリプリセット」として再利用するためです。
    ノードのチャンネルを直接「アセンブリ出力」にリンクした場合、アセンブリのロードで出力チャンネルが消えてしまうことがあります。消える理由は謎ですが、「ユーザーチャンネル」を経由させることでアセンブリの保存と読み込みが正常にできるようになります。
  7. Channel Relationship と Clampノードをアイテムにペアレントします。
    アイテムツリーで Channel Relationship 、 Clamp 、スライダーバーアイテムの順番選択して、コマンド行に「item.parent」を入力してEnter。チャンネル モディファイヤノードの親子関係を設定します。こうすることでアセンブリプリセットとして他のシーンにアイテムを読み込んだ場合に便利になります。modoのチャンネル モディファイヤはデフォルトでシーンアイテム(カチンコ)以下にノードを生成します。チャンネルモディファイヤをアイテムにペアレントしておくことで、スライダーバーアイテムを削除したとき同時にチャンネルモディファイヤも削除されるためシーンに未使用ノードを残さずに済みます。

 

ノードが組み上がったら「スケマティックアセンブリ」を新規に追加して、スケマティックのマウス右クリックメニューから「ノードの移動先」を使ってアセンブリ内にノードを移動します。

上の画像にはグループロケータが含まれています。個人的な好みですが、アイテムツリーではスケルトンもロケータも同じアイコンで見づらいので、アセンブリを保存するときはアイテムをグループロケータにまとめています。グループロケータはアセンブリ内に入れておくことで、親子関係を維持したままアセンブリを読み込むことができます。

アセンブリに「サムネイルを置換」でサムネイルを追加して、「アセンブリプリセットの保存」すると、いつでもシーンにスライダーを読み込んで再利用することができます。

 

最後に指をスライダーで制御するデモです。
スライダーバーの高さを1mで作りましたが、スケールを使ってシーンで見やすいようにサイズを調整できます。なかなか便利なんじゃないかと思います。

次回は引き続きボックス型のスライダー?トラックパッド コントローラの作り方について書いてみたいと思います。

Tips

modoのチャンネル リレーションシップ

リギングで凄く便利な最強ノード、Channel Relationshipについて書いてみます。Channel Relationshipは入力されたチャンネルの値にもとづいて、出力の値を変えることができる便利なノードです。

例えばロケータの位置を使用して別のアイテムを回転することができます。

上の画像ではロケータがY軸に1mに移動しとき円柱は180°回転しています。
それの何が便利かというと、Relationshipはチャンネルタイプによって単位の異なる値をリマップすることができるからです。
Relationshipを使用せずに「位置Y」を「回転Z」に直接リンクした場合は、1m=1 という値が回転に出力されるため 1° しか回転しません。Relationshipを使用することで、1m=180°という異なる単位の値を簡単に変換して制御することができるようになります。

さらにRelationshipが便利なのは、入力と出力のマッピングにグラフエディタを使用できることです。
値をマッピングするためのカーブはベジェハンドルで編集できるので、位置が移動するにつれて徐々に回転数が上がっていくという設定が手軽にできます。
グラフエディタでは「入力」が横軸、「出力」が縦軸で表示されます。

 

Channel Relationshipの使用例として、角度によってスケルトンが移動するリグを作ってみました。簡単に作れて便利です。

作成手順です。

  1. バインド済みのモデルとスケルトンを準備します。
  2. スケルトンを選択して、「回転Y」「位置Z」チャンネルをスケマティックにドラッグアンドドロップします。
  3. Channel Relationship を追加し、「回転Y」を「入力」にリンクします。
  4. スケルトンの「位置Z」の値をコピーします。
  5. Channel Relationshipの「出力」を「位置Z」にリンクします。
  6. グラフエディタの「値」チャンネルでキーを選択し、キーにコピーした「位置Z」の値を設定します。
  7. -90°にキーを作成し値を調節します。
    これはスケルトンが-90°に回転したとき、スケルトンの位置Zをどのくらい移動するかを指定しています。

 

この例ではFKを使用してますが、IKを使用したい場合には「ワールド回転からローカル角度を計算する方法」または「角度測定ノードで360°測定する方法」が参考になると思います。
もしスケルトンはスライドさせず回転の基点になる位置を変えたい場合は、ピボットを使うとよいです。

Channel Relationshipを使うと手の回転にあわせて腕をひねったり、アイテムの位置でライトの色を変えたり、アイテムの回転でパーティクルの放出量を制御したり、アイデアしだいでいろんなリグを作ることができて楽しくなりますね。

 

おまけ

modoは1ノードまでのループなら「依存ループ」にならず機能するという便利な特長があります。「依存ループ」というのはチャンネルの値を他のノードで計算して、その計算結果が同じチャンネルに戻ってループした状態を言います。値がループしてるので通常は計算不能でエラーになる処理なのですが、modoでは1ノードのループ限定で動作するようです。

下の画像のように自分の「位置Y」から「位置Y」にループしてリンクすると、Y軸の移動範囲を制限することができます。同じ事は Clamp ノードでもできるので好きな方を使ってみてください。

 

カーブを1m間隔のステップにすると、1m感覚でナップ移動するような動作になります。昔の2Dゲームにあったマップチップ単位で移動するような動きですね。モーショングラフィックなんかにも使える気がします。

次はRelationshipを使って「ホーミングミサイル」や「Sculpt Layer」の記事で使ってる、スライダーのようなコントローラの作り方について書いてみます。こういうコントローラがあると一気にリグ作ってる感じがしますね。

Tips

modoで参照アイテムを統合する方法

参照アイテムをシーンに統合する方法について書いてみます。参照は便利な機能ですが、アイテムの参照をやめたいときがあります。

参照アイテムをシーンに統合したいときは、「参照アイテムを統合」をONにしてファイルを保存します。ファイルを開き直すと参照アイテムがシーンに含まれた状態に変わります。
ファイルを保存したら「参照アイテムを統合」をOFFに戻さないと、参照が使えなくなるので注意が必要です。

  • 初期設定 / デフォルト / シーンの保存/書き出し / 参照アイテムを統合

 

参照とは

modoには「参照」というシーンの構築に便利な機能があります。
例えばアニメーションを作成するとき、カット単位でファイルを保存していたとします。「Cut_01.lxo、Cut_02.lxo、Cut_03.lxo… 」みたいな感じです。シーン内では全て同じ椅子や机を使用していますが、カット作成が進んだ段階で椅子のデザインを変更したい時があります。
当然すべてのカットの椅子に変更を加えたいと思います。カット数が少なければファイルを開いてポリゴンのペーストを繰り返せばいいのですが、数が多いと大変です。そんな問題を解決する機能が「参照」です。

あらかじめシーン内のアイテムを「Chair.lxo」「Desk.xlo」のように個別のファイルとして保存しておき、「参照を読み込み」を使用してシーンを構築することで、「Chair.lxo」に加えた変更が各カットのファイルに反映される仕組みです。

多くの3Dソフトには参照機能があります。ソフトによって機能は様々ですがMayaの参照機能が強力で有名です。例えばMayaではほとんどの機能や設定がノードとして管理されているのですが、チャンネルのキーフレームも個別のノードとして存在しているので、必要であればキーフレームを参照するような使い方ができます。
modoの参照には制限があるのでキャラクターリグのような複雑な構造やアクションの参照にはお勧めしませんが、モデルの参照は使えるかもしれません。

Tips

modoのチャンネルタイプ

チャンネルの基本の続きで、チャンネル タイプについて書いてみたいと思います。

modoのチャンネルには下の画像のように様々なタイプが存在しています。正数、浮動小数点数、パーセント、色、チェックボックス、リストボタンなどプロパティに表示されてるので、普段から何気なく使ってると思います。
プロパティに表示されないチャンネル タブには「行列」と「クォータニオン」がありますが、これらのチャンネルはチャンネル ビューポートから確認することができます。

○アイコンのあるチャンネルは全て数値で制御することができます。
数値のチャンネル通しはもちろんですが、例えばブーリアンタイプ(チェックボックス)のチャンネルは「0」のときはOFF、「1」のときはONのように制御することができます。
下の画像はChannel Relationshipを使用して、ロケータの位置 0~1mの範囲をTrueとFalseに設定しています。

アイテムの「可視性」のようなリストも、リストの順番で0~4のような値で制御することができます。

数値のチャンネルだけでなくチェックボックスやリストも制御できるのは便利ですね。数値で制御できないチャンネルタイプとして「行列」「クォータニオン」「文字列」があります。これらのチャンネルは専用のノードを使用することで値を取り出したり、値を文字列に変換することができます。
アイテムの「ユーザーチャンネル」タブでは、これらのチャンネルを自由に追加してリグで利用することができます。
この仕組みはMayaの「追加のアトリビュート」と同じなので、興味があればMayaのサイトを見てみるといかもしれません。

次回はリギングに欠かせない便利ノード、Channel Relationship について書いてみます。

Tips

modoのスケルトンをダイナミクスで動かす方法

スケルトンによる変形と物理演算を併用する方法について書いてみます。
結論から言うとそれっぽく動くけど、スケルトンのフリップを回避できませんでした。用途によっては使えるかもしれないので問題点を含め手順を書いておきます。

今回試した方法はソフトボディ計算したメッシュに、スケルトンを「ポリゴンの位置」「ポリゴンの法線」コンストレイントする方法です。

作成手順です。

  1. スケルトン、バインド済みのメッシュ、ソフトボディ計算用のメッシュを準備します。
    ソフトボディはあらかじめ「シミュレーションを演算」でキャッシュを作成しています。
  2. セットアップモードをONにして、スケルトン、メッシュの順に選択して「ポリゴンの位置」コンストレイントを適用します。このとき補正オプションはONです。
  3. 同じ要領で「ポリゴンの法線」コンストレイントを適用します。
    「ポリゴンの位置」コンストレイントは位置をポリゴンにくっつけてくれますが、スケルトンに回転の情報は伝わりません。「ポリゴンの法線」コンストレイントを使用することで位置と回転をスケルトンに与えています。
  4. セットアップモードをOFFにしてアニメーションを再生すると、スケルトンによってバインドしたメッシュが変形します。
    ここでスケルトンは動くのにバインドしたメッシュが変形しない場合は、シーンを「保存」した後に「ファイル / 復帰 」を使用してシーンをリロードすると正しく動くようになります。おそらくダイナミクスのキャッシュとデフォーマの評価順に問題があって、シーンロード時にだけ正しく動作してる気がします。

一見それっぽく動いてる用に見えますが、よく見るとスケルトンがフリップしてるのがわかります。ソフトボディの計算でポリゴンがゆがんでるのが原因だと思いますが、ソフトボディでポリゴンを安定させるのは大変な気がします。

ポリゴンにスケルトンをコンストレイントする方法はスカートのように厚みのないメッシュに向いてると思います。厚みのあるモデルはチェーンの作り方のように、パスコンストレイントしたカーブに「ダイナミックカーブ」を使用すると、メッシュの「半径グラディエント」を衝突判定に使用することができるので便利かも知れません。

 

スケルトンとダイナミクスの問題点

modoのダイナミクスはメッシュかカーブがないと衝突判定の範囲を制御できません。スケルトンに「アクティブリジッドボディ」を適用して「衝突実行」をONにすると物理計算はできますが、コリジョンサイズが 1m 固定になってしまいます。
どこかでコリジョンサイズを変更できれば、ピンやスプリングコンストレイントを使ってスケルトンを物理計算できるようになる気がします。下の画像はシーン全体を1mのコリジョンにあわせたものです。

スケルトンを使うとアニメーションをベイクできるので、他のソフトにモーションを出力できるというメリットがあります。modo内で完結するならラップデフォーマのケージメッシュにソフトボディを適用する方法が手軽かもしれません。

Tips

modoで親アイテムの回転をキャンセルする方法

今回はアイテムが親子関係にありながらも、観覧車のゴンドラのように子アイテムが親アイテムの回転をキャンセルする方法をいくつか紹介します。

親アイテムの回転キャンセルはキャラクターリグやメカニカルな物のアニメーションで便利に使えます。
たとえばキャラクターリグでは、3dsMaxのBipedは胸を回転しても頭や腕に回転が影響しないようなリグになってます。modoのACSもデフォルト設定では胸の回転から頭が独立しています。メカニカルな物だと観覧車のゴンドラや自転車のペダル、ジャイロスコープのような表現に使えると思います。

 

トランスフォームの継承

modoは位置、回転、スケールごとに継承するトランスフォームをキャンセルすることができます。ソフトによって動作は異なりますが、MaxやMayaも同じようにトランスフォームの継承に関する設定があります。歴史的に古くからある方法の1つだと思います。
「回転コンストレイント」を使用した場合と違い、ゴンドラを直接回転して編集することができます。

作成手順です。

  1. 円盤にゴンドラが4機ペアレントされているシーンを準備します。
  2. グループロケータを4つ作成します。
    グループロケータを1つ追加したら、残りはCtrl+Dで複製します。
  3. グループロケータを円盤にペアレントします。
  4. グループロケータをゴンドラの位置に配置します。
    ドロップアクションから「一致」を選択し、グループロケータをゴンドラにドラッグアンドドロップします。ドロップアクションはアイテムをドラッグアンドドロップしたときの動作を指定する機能です。ポリゴンやセンターにアイテムを配置するときは、スナップ機能よりもドロップアクションが便利です。
  5. ゴンドラをグループロケータの子にします。
    アイテムツリーでゴンドラをグループロケータにドラッグアンドドロップします。modoのトランスフォーム継承は、親が継承するトランスフォームを子のアイテムがキャンセルするような動作になっています。このためゴンドラと回転する円盤の間にロケータをはさむ必要があります。
  6. ゴンドラアイテムを全て選択して「回転継承」を 「False」 に設定します。
    チャンネルビューポートで「回転継承」を探して、「True」をクリックして「False」に変更します。modoにはプロパティに表示されないチャンネルビューポート専用のパラメータがいくつか存在します。このトランスフォームの継承はそんな隠れた機能の1つです。

円盤を回転すると、ゴンドラが円盤の回転の影響を受けていないのを確認することができると思います。
位置継承や回転継承は、スケルトン変形とアイテムのトランスフォームが2重に掛かってしまう場合にも便利に使えます。たとえばスケルトンとバインドしたメッシュが同じ親に属してるとき、親アイテムを移動するとメッシュが2倍移動します。そんなときは位置継承を「False」にすると解決します。

 

回転コンストレイント

ゴンドラを別のアイテムの回転にコンストレイントする方法です。3Dソフトでよく使用されるのがこの方法だと思います。1つのアイテムで複数のアイテムの回転を制御したい場合にも使えます。「出力オプション」で回転のブレンド量を設定できるのも便利です。

コンストレイントを使用するとアイテムの「ワールド回転」が上書きされるため、トランスフォームの回転は無視されます。ゴンドラに個別の動きをつけたい場合は、「トランスフォームの継承」と同じくロケーターにゴンドラをペアレントして、ロケーターに対して回転コンストレイントを設定するのが一般的な使い方だと思います。

作成手順です。

  1. 円盤にゴンドラが4機ペアレントされているシーンを準備します。
  2. ゴンドラを全て選択します。最後に回転コンストレイントの参照元になるアイテムを選択します。
  3. 回転コンストレイントを適用します。
    Ctrlキーを押しながら回転コンストレイント(複数)を実行します。

手順が簡単ですね。

 

リプリケータ

リプリケータを使用して、頂点にゴンドラを複製する方法です。キャラクターリグなんかには活用できませんが、おまけです。
ゴンドラのように同じアイテムを複製するには手軽で便利ですが、ゴンドラを個別に制御したい場合には向いてません。

作成手順です。

  1. 円盤にゴンドラが4機ペアレントされているシーンを準備します。
  2. 円盤からリプリケータが参照するための頂点をコピー(Ctrl+C)します。
  3. 新しいメッシュを作成(Nキー)し、円盤アイテムにペアレントします。
    新しいメッシュが原点に作成されるので、ペアレント後にアイテム位置を0に変更して円盤と重なるようにします。アイテムの作成位置はアイテムの選択状態によって変わるので適当に合わせてください。
  4. 新しいメッシュに頂点をペースト(Ctrl+V)します。
  5. リプリケータを追加します。
    「原型となるアイテム」にゴンドラ、「ポイントソース」に頂点をペーストしたアイテム、「ソースモード」を「パーティクルデータ」に設定します。またリプリケータの位置がずれていたため、円盤と重なるように位置を0に変更しました。

この他にもスケマティックで親の回転値に-1かけたものをゴンドラの回転にリンクする方法や、ゴンドラの「ワールド回転」チャンネルに0を設定する方法もあります。例によってどれが一番いい方法かは場合によるので、好みの方法を試してみるといいかと思います。

Tips

modoのトランスフォーム配列ツールでアニメーション作成

今回はトランスフォーム配列ツールを使用して、複数のアイテムに手軽にキーを設定する方法を紹介します。

modoはメッシュ生成ツール以外は、アイテムモードでも同じツールを使用することができるという特長があります。
例えば変形タブの「ジッター」「ツイスト」「ベンド」などのツールを使用してアニメーションを作成することができます。その中でも複製タブにある「スキャッタ トランスフォーム」「カーブ トランスフォーム」「トランスフォーム ラディアル 配列」を使うと幾何学的にアイテムを配置出来るので、手軽にフライングロゴっぽいアニメーションを作成することができます。

作成手順です。

  1. テキストツールで適当に文字を入力します。
  2. 「厚み」ツールでテキストに厚みをつけます。
  3. アイテムツリーのメッシュで右クリックして「選択メッシュの統合解除」します。
    「選択メッシュの統合解除」は連結したポリゴン単位を、別のアイテムに分解する機能です。
  4. アルファベット単位に分かれたアイテムを全て選択し、メッシュの中心に「センター」を移動します。
    ファイルメニュー / 編集 / センターをバウンディングボックスへ / センター
    これでアニメーションを作成する準備が整いました。
  5. 全てのアイテムに位置と回転キーを作成します。
  6. 今回は最後にロゴが決まるようにしたいので、綺麗にアルファベットが並んだ状態でタイムラインで後ろのほう、とりあえず90フレームにキーを作成しました。
  7. タイムラインを0フレームに設定します。全てのアイテムを選択して「スキャッタ トランスフォーム」を実行します。
    「スキャッタ トランスフォーム」は指定した範囲内に、アイテムをランダムに配置するツールです。
  8. タイムラインを15フレームに移動して「カーブ トランスフォーム」を実行します。
    「カーブ トランスフォーム」はカーブ状にアイテムを配置するツールです。ツールがアクティブなときは、自由にカーブを編集することができます。
  9. 15フレームのキーをコピーします。タイムラインでキーを選択してCtrl+Cでキーをコピーします。
  10. タイムラインを30フレームに移動して、キーをペーストします。
    タイムラインをスクラブして正しくキーがペーストされたか確認します。今回はキーを設定しやすいように、15フレーム単位で移動と停止を繰り返すように設定しました。
  11. タイムラインを45フレームに移動して「トランスフォーム ラディアル 配列」を実行します。
    「トランスフォーム ラディアル 配列」はアイテムを円状に配置するツールです。位置がずれてるので調節します。配置が決まったらアイテムの回転にキーを作成します。
  12. 45フレームのキーをコピーします。タイムラインでキーを選択してCtrl+Cでキーをコピーします。
  13. タイムラインを60フレームに移動して、キーをペーストします。
    タイムラインをスクラブして正しくキーがペーストされたか確認します。modoは移動ツールがアクティブのときにキーをコピーすると、位置のキーのみがペースト対象になります。タイムラインスクラブして回転のコピーがミスってたのに気がついたので、回転ツールをアクティブにしてペーストしました。
  14. 最後のテキストが完成するキーが90フレ-ムにあるので、タイミングを変更します。
    タイムラインでキーを選択して、タイムラインでマウス右ドラッグしてキーを75フレーム移動します。ちなみに複数のキーをセント無くしている場合は、Ctrl+マウス右ドラッグ でキーをスケールすることができて便利です。これだけでも十分アニメーションしてますが、「ソフトラグ」デフォーマを使用して自動で揺れる動きを設定してみます。
  15. スケマティックビューの「追加」メニューを表示し、アイテムを選択してから「Soft Lag」をダブルクリックします。
    この作業はアイテム1個ずつおこなう必要があります。複数のアイテムを選択した状態で「Soft Lag」を実行すると、なんか上手く動きません。あと必ずスケマティックビューの「追加」メニューを使用してください。アイテムツリーにも同じようなメニューがありますが、アイテムツリーのメニューからはメッシュに「Soft Lag」が適用されません。

アニメーションを再生すると、アイテムがスプリングのように振幅しているのが確認できると思います。ソフトラグの「強さ」は値が大きいと揺れが停止するまでの時間が早く、低いと長く揺れ続けます。ソフトラグは「デフォーマキャッシュ」と相性がよくないので、必ずデフォーマキャッシュをOFFにした状態で調節するといいです。

画面キャプチャだとフレーム数が足りないので、フレームレートの高い画像も貼っておきます。簡単にそれっぽいアニメーションが作成できたのではないでしょうか?
単純なキーフレーム制御なので細かな微調整も簡単です。「Soft Lag」の変わりに「Lag Effector」を使ってみるのも面白いかも知れません。

今回はテキスト使ってフライングロゴっぽくしてみましたが、同じ手法で機械的な物が組み上がるようなアニメーションも作れるんじゃないかと思います。直線的に配列したアイテムをベンドして~とか、ツールの組み合わせでいろんなアニメーションが作れると思います。

たとえば「スキャッタ トランスフォーム」と「カーブ トランスフォーム」を交互に使用して、カーブで文字を書くと下の画像のようにカウントダウンのようなアニメを作れます。ボックスなので寂しい感じですが、ちゃんとしたモデルを使用すると面白い画面になると思います。

下の画像は「トランスフォーム配列」を使用して立体的に並べた例です。最初の下から上にアイテムがスケールして現れる動きはトランフォームデフォーマとリニアフォールオフをアイテムインフルエンスに接続して表現しています。揺れはソフトラグの「強さ」を何パターンか値を変えてランダムさを設定してみました。

パーティクルを使用して同じようなアニメーションを作成することもできますが、MoGraph的な使い方はまたの機会に書いてみたいと思います。

Tips

modoでスプラインIKの作り方

キャラクターリグに欠かせないスプラインIKの作り方について書いてみたいと思います。
基本的にはチェーンの作り方と同じで、スケルトンをパスコンストレイントするだけと簡単です。

作成手順です。

  1. スケルトンとカーブを準備します。
    スケルトンは円柱にバインド済みでメッシュを変形できる状態です。
  2. 全てのスケルトンとカーブメッシュを選択し、セットアップモードをONの状態でCtrlキーを押しながらパスコンストレイント(複数)を適用します。このとき補正オプションもONにする必要があります。
    セットアップモードでパスコンストレイントする理由はバインド済みのスケルトンだからです。バインドされたスケルトンはセットアップ/静止値が設定されているため、セットアップモードOFFの状態でパスコンストレイントを実行するとセットアップモード内のスケルトン位置がおかしくなります。
  3. カーブメッシュを選択してスプラインデフォーマを適用します。
    このとき「選択メッシュを使用」をONにして、カーブのポイントの数だけロケータを作成します。
  4. スプラインデフォーマのロケータを動かすと、円柱にねじれが発生してるのが確認できます。
  5. パスコンストレイント モディファイヤの「上方ベクトル」を設定します。
    シーンアイテムの+アイコンをクリックし、パスコンストレイント モディファイヤを全て選択します。このシーンの場合は「上方ベクトル」 Zを1に設定します。

これでスプラインIKの完成です。ロケータを極端に移動するとフリップが発生する事もあると思います。その場合はチェーンの作り方と同様にアップベクトルを設定すると細かく制御できるようになると思います。

Tips

modoで自転車のチェーンを作るデフォーマ版

前回と同様に自転車のチェーンの作り方について書いてみます。今回はスプラインデフォーマを使用した方法です。

デフォーマを使用したチェーン作成 1

まずはメッシュ全体を変形する古典的なチェーンの作り方です。他の3Dソフトでも定番的に使用される方法です。

作成手順です。

  1. チェーンとカーブを用意する。
    カーブはスプラインデフォーマのターゲットカーブとして使用するので、ポイントが少ないと変形が破綻するので注意が必要です。
  2. チェーンをコンポーネントモードで「ラディアル配列」で円環状に複製します。
    プロシージャルモデリングの「Radial Array」を使ってもいいけど、次の工程のセンターをメッシュ中心に移動するのが面倒なので直接ポリゴンを複製しました。
  3. チェーンアイテムのセンターをメッシュの中心に移動します。
  4. スプラインデフォーマのソースカーブを作ります。
    真円のカーブが必要なので、プロシージャルモデリングの「Cycle」を追加してチェーンに沿うようにあわせます。
    スプラインデフォーマはプロシージャルモデリングのカーブを参照できないっぽいので、アイテムツリーから「メッシュメッシュオペレーションをフリーズ」します。
  5. チェーンアイテムに「スプラインデフォーマ」を適用します。
    スプラインエフェクタのプロパティで「ソースカーブ」と「ターゲットカーブ」を設定します。
    ソースカーブとターゲットカーブの長さの違いによってチェーンが崩れてるので、「伸縮」でメッシュの変形を調節します。
  6. チェーンアイテムを回転すると、チェーンがスプラインに沿って回転します。

これでデフォーマを使用したチェーンを作ることができました。デフォーマを設定したメッシュのトランスフォームを使用してアニメーションするのは「modoでアニメ風の眼球制御」と同じですね。

はじめはチェーンを直線状に並べようかと思いましたが、modoのスプラインデフォーマは残念なことに閉じたスプラインとして変形することができません。綺麗に回転させるには真円のソースカーブを使用するのが最適なようです。
このアイデアはWilliam Vaughanさんのビデオによる物です↓。

 

デフォーマを使用したチェーン作成 2

デフォーマとリプリケータを使用したチェーンの作り方も紹介してみます。全メッシュをデフォーマで変形する方法に比べて動作が軽く、手続き的にチェーン数を変更することができます。

作成手順です。

  1. チェーンとカーブを用意する。
    今回は真円のカーブをあらかじめ作りました。
  2. シリンダーを作成する。
    プロシージャルモデリングの「Cylinder」を追加して上下のキャップを消して、シリンダーの直径をカーブに合わせます。
  3. リプリケータを作成します。
    「原型となるアイテム」にチェーン、「ポイントソース」にシリンダー、「ソースモード」を「ポリゴンを使用」に設定します。これでポリゴンの中心にチェーンが複製されます。
    プロシージャルモデリングの「Cylinder」を使うことで、後から「サイド」の分割数を変更できるのが便利です。
  4. シリンダーメッシュに「スプラインデフォーマ」を適用します。
    スプラインエフェクタのプロパティで「ソースカーブ」と「ターゲットカーブ」を設定し、「伸縮」でメッシュの変形を調節します。
  5. シリンダーアイテムを回転するとチェーンがスプラインに沿って回転します。

 

カーブの長さに応じてチェーンの数を増やす

ついでにターゲットカーブにスプラインデフォーマを適用して、カーブの長さに応じて自動的にチェーンの数を増やすリグの作り方を紹介します。カーブの長さに応じて、シリンダーの分割数を変えるだけなので手軽に作れます。

作成手順

  1. ターゲットカーブにスプラインデフォーマを適用する。
    ロケータを移動してカーブを変形するとチェーンにすき間ができてしまいます。パスの長さが変わっているので当然ですね。
    すき間を自動的に埋めるために 「パスの長さ ÷ チェーンの長さ = サイドの数」という計算をスケマティックで構築していきます。
  2. ターゲットカーブの「メッシュ」チャンネルをスケマティックに追加します。
    メッシュオペレータ Cylinder の「サイド」をスケマティックに追加します。
  3. 「パスコンストレイント」を追加し、カーブの「メッシュ」を「長さ」チャンネルにリンクします。
    パスコンストレイントはパスの長さを出力するために使用することができます。
  4. 「乗算」「除算」ノードを追加します。
  5. パスコンストレイントの「長さ」を乗算ノードで100倍にします。
    「長さ」はメートルを出力するので100倍して値をセンチにします。単位を統一したほうが感覚的にわかりやすい気がするので100倍しましたが、無くても問題ないです。
  6. 「乗算」の出力をチェーンの長さで割ります。
    チェーンの長さを定規ツールで計って「除算」に入力します。今度はミリメートルで表示されたので、センチに直した値を入力しています。
  7. 「除算」の出力を「サイド」にリンクします。

これでパスの長さに応じて自動的にチェーンの数が変わるようになりました。微妙なすき間や、閉じたパス変形ができないため一部がフリップしてしまうところは微調整が必要です。
プロシージャルモデリングはこういった使い方ができるので便利ですね。

 

まとめ

パスコンストレイントを使用した方法は実際のチェーンのように一つ一つ別アイテムでした。自由度の高いリグを構築できますが、実用上不便なところもあります。
例えばパスの長さを変えるとアイテムにすき間ができたり重なったりします。後からチェーンの数を変更しようとすると、パスコンストレイントからやり直しになり面倒です。
効率化のためスクリプトを書けば気にならないかも知れませんが、私のようにスクリプトが書けない人はお手上げです (´Д`υ)

今回のスプラインデフォーマを使用した方法はチェーンが変形してしまいますが、パスの長さが変わってもチェーンにすき間ができるようなことはありません。極端にターゲットパスを変形しなければ、ある程度フリップを抑えることができますしチェーンの数も比較的簡単に変更できます。欠点はmodoのデフォーム処理が重いことですね。他のソフトでは気にならない変形でもmodoではストレスに感じます。

スプラインデフォーマとリプリケータを使用した方法は、変形も軽くてチェーンの数も手続き的に増やせるので調整が楽かも知れません。

チェーンという同じような表現でもアプローチが複数あり、それぞれメリットとデメリットがあります。作りたい物によってどの方法が適しているかも変わるので、色々試して好みの法を選択するのがいいと思います。

Tips

modoで自転車のチェーンを作る

前回のコンストレイントの補正オプションの実用的な使用方法として、自転車のチェーンや戦車の履帯に使えそうなリグの作り方について書いてみます。

modoは複数のアイテムにいちどにコンストレイントを適用できるので、補正オプションと組み合わせると効率的にリグを組むことができて便利です。

チェーンリグ作成手順の解説です。

  1. チェーン用のアイテムとカーブアイテムを用意します。 上の画像では説明を簡略化するためチェーンの赤と青の部分を1アイテムにしてますが、分けた方がよいです。
  2. 「カーブでインスタンス」を使用して、チェーンアイテムをカーブ上に複製します。デフォルトではアイテムの位置にかたよりがあるので、「長さ優先」をONにして均等にします。
  3. 複製したアイテムを全て選択した後に、ようnアイテムを選択しまにして移動がループするようす。modoのコンストレイントのルールとして、最後に選択したアイテムがターゲットになります。
  4. Ctrl キーを押しながらパスコンストレイントを適用します。
    このときコンストレイントの「補正オプション」をONにしておきます。
  5. シーンアイテム(カチンコ)の + ボタンをクリックして、シーン内のパスコンストレイント モディファイヤを全て選択します。
  6. プロパティで「パスパーセンテージ」を編集するとアイテムがパスに沿って移動します。チェーンがループするように「繰り返し」をONに設定します。このままでもアニメーションに使用できますが、毎回モディファイヤを全選択するのは面倒です。そこで全ての「パスパーセンテージ」を1つのチャンネルで操作するためのリグを組みます。
  7. 「パスパーセンテージ」をスケマティックビューにドラッグアンドドロップします。
  8. チェーンを全選択して、Ctrl+G を押して「グループ ロケータ」にまとめます。
  9. グループ ロケータに「ユーザーチャンネル」を追加します。
    「ユーザー名称」には適当にチャンネル名を設定します。ここでは「offset」にしました。チャンネルのタイプは「パーセンテージ」にします。ユーザーチャンネルはユーザーが自由に追加することができるチャンネルです。チャンネルを追加しただけでは意味のあるパラメータではありませんが、他のノードとリンクすることで複数のノードをまとめて制御することができるようになります。Mayaのカスタムアトリビュートと同じような機能ですね。ユーザーチャンネルはどのアイテムにでも自由に追加することができますが、ある程度アイテムと関連性があるほうがよいためグループ ロケータに追加しました。
  10. 「offset」をスケマティックビューにドラッグアンドドロップします。
  11. パスコンストレイント モディファイヤを全選択した後に、プロパティで「パスパーセンテージ」のラベルをクリックしてチャンネルを選択します。スケマティックの「パスパーセンテージ」チェンネルをShiftドラッグします。すると全てのチャンネルから線を引っ張ることができます。
  12. グループ ロケータの「offset」にリンクします。

これで「offset」を1つ編集するだけで、全てのチェーンの位置を制御することができるようになりました。ですがこれだけでは設定が不十分です。

このチェーンアイテムは上下が対称の形状をしているので気がつきにくいですが、カーブの上下でアイテムがフリップしています。一般的にパスコンストレイントのような機能はアイテムの方向を一定に保つことが難しいようです。フリップを回避するために「アップベクトル」を設定します。

アップベクトル設定手順の解説です。

  1. ロケータを追加し「ワールド位置」をスケマティックビューにドラッグアンドドロップします。このロケータがアップベクトル制御用のアイテムになります。
  2. パスコンストレイント モディファイヤを全選択した後にチャンネル ビューポート タブを右クリックして「ビューポート設定 → 結合表示」をONにし、「up」チャンネルをスケマティックビューにドラッグアンドドロップします。「結合表示」は同じタイプのノードが複数選択されたときに、チャンネルをまとめて表示するオプションです。選択中の全ノードの「up」チャンネルを選択するために「結合表示」を使用しています。
  3. 「up」チャンネルをShiftドラッグして、ロケータの「ワールド位置」にリンクします。
  4. フリップしているアイテムのパス コンストレイント モディファイヤを選択して、「ロール」を180°に設定します。
    上の画像ではフリップしているモディファイヤを特定するため、フリップの始点と終点のアイテムを選択してモディファイヤの番号を確認しています。アイテムツリーで F キーを押すこと、選択しているアイテムにリストをスクロールできるので便利です。

これでアニメーションしてもフリップの発生しないチェーンリグの完成です。標準機能だけで手軽にリグが作れるのが便利ですね。

ちなみに静止画用途ならプロシージャルモデリングの「Curve Clone」を使うのが手軽でお勧めです。少し重いですが、カーブの編集や複製する数をいつでも調節できて便利です。
本当は「Curve Clone」でアニメーション用のリグを作れればいいのですが、modo 11.2ではアップベクトルを設定できないのでフリップを回避する手段がないように思います。もっと軽くてフリップしにくい動作してくれたらもっと便利なんですけどね。そのあたりは今後のバージョンアップに期待したいですね。

他の手段としてパスジェネレータで生成した頂点にリプリケータを使う方法も考えましたが、パスに沿わせる部分が上手く行かなかったのであきらめました。

カーブにスプラインデフォーマを適用すると、こんな↓感じの履帯リグも作れるかもしれません。

この戦車のリグを作った Richard Hurrey 氏はPixarで活躍されてるキャラクターモデラー&リガーの方ですが、Foundryからトレーニングビデオをリリースしているmodoのヘビーユーザーでもあります。
この戦車のデータは公開されているので必見です。履帯を複雑な変形に対応するため、履板1つ1つに異なるアップベクトルが設定されてます。他にも細かな制御ができて凄いです。modoはどの程度のリグを構築できるか興味ある方にも参考になるのではないでしょうか。

今回は王道的な方法でチェーンを作ってみました。次はせっかくなのでスプラインデフォーマを使用したチェーンの作り方を書いてみたいと思います。

Tips

modoでアニメ風の眼球制御

Twitterでアニメ系キャラで使用する平たい眼球について話題になっていました。方向コンストレイントを使用して眼球を制御したいときは、トランスフォームデフォーマを使用する方法もあるのでご紹介します。
手順は簡単です。球にトランスフォームデフォーマを適用してスケールします。次ぎに球に方向コンストレイントを適用します。

3Dソフトは同じような表現でも複数のアプローチがあります。正解は状況によって変わるので、色々試して好みの方法方を使うのがいいと思います。

 

参考

ちなみに、この眼球の変形はトランスフォーム計算で発生するシアーを利用したものです。シアーについて正確な説明はできないので、詳細を知りたい方は他のサイトを検索してみてください(^^;
ざっくりと説明すると、親子関係にある親アイテムを不均等にスケールした場合、子のアイテムを回転すると斜めにゆがむことをシアーと言います(均等にスケールされている場合はシアーは発生しません)。上の例では回転トランスフォームの順番を変更することで、親子関係を設定せずにシアー変形させています。

シアーは3DCGのトランスフォーム計算で一般的に発生する現象なので、親子関係を設定してスケールと回転できるソフトであれば、どのソフトで同じような目の表現ができます。
この目のような場合は上手く機能しているケースですが、シアーはキャラクターリグのような場合は問題になることが多いので注意が必要です。シアーが問題になるケースとして手にオブジェクトを持たせた状態で、手をスケールした場合はシアーが発生しがちかもしれません。

この現象をはじめて経験したのがLWで、しばらくのあいだLWのバグか何かだと思ってました。

Tips

modoのコンストレイント補正オプション

modoの補正オプションについて書いてみます。
補正オプションはコンストレイントを適用するときに、アイテムの見た目の位置や角度を維持してくれる機能です。リギングでコンストレイントを使用するときに知ってると便利です。

補正オプションはセットアップ タブの上のUIメニューに配置されていて、ボタンをONにすると関連するボタンアイコンが切り替わります。

 

補正オプション OFF

コンストレイント先のトランスフォーム(位置、回転、スケール)にそろいます。

 

補正オプション ON

現在のトランスフォームの見た目を維持した状態でコンストレイントすることができます。

動作としてはコンストレイントノードのオフセットに値を入れることで見た目を維持しています。


modo使い始めたときは補正オプション知らなくて不便だーと思ってましたが、補正オプションに気がついてからはコンストレイントが便利に使えてます。初心者トラップな気がするのでデフォルトONにして欲しいですね。
次回は補正オプションを使ってチェーンやキャタピラのようなリグの作り方を書いてみます。

Tips

modoのセットアップモード

今回はセットアップモードについて書いてみます。セットアップモードはメッシュ変形(デフォーマ)に欠かせない特殊なシーン状態です。
セットアップモードの概念自体は珍しいものではなく、3Dソフトには何かしら同じような仕組みがあります。他の3Dソフトでは機能が分かれてたりしますが、modoはセットアップモードとしてまとめられてるのが便利です。

 

セットアップモードとは?

セットアップモードはデフォーマやIK計算の基準となるアイテムの「初期位置」を格納する特殊なシーン状態です。

3Dソフトではスケルトン(ボーン)を配置して、スケルトンを移動や回転させることでポリゴンメッシュを変形してアニメーションするのが一般的です。例えばスケルトンを90°回転してメッシュを変形したとき、どの位置からスケルトンが回転したのか基準となる情報が必要になります。この「どの位置?」を格納しているのがセットアップモードです。

セットアップ ボタンを押すとビューポートに黄色の枠が表示されセットアップモードに切り替わります。セットアップモードではデフォーマに関連したアイテムが初期位置に移動します。デフォーマによるメッシュの変形は全て無効になりますが、コンストレイントやIKなどのチャンネルモディファイヤは動作します。

 

セットアップモードのメリット

セットアップモードで便利なのがスケルトンの位置調整です。キャラクターリグを作成してポーズをつけてみたものの、動かしてみたら間接の位置に違和感があることがあります。セットアップ段階ではこの調整が頻繁に発生しますが、modoはセットアップボタンでアニメーションとセットアップモードを行き来しながらスケルトン位置を調整できるので便利です。

3ds MaxだとBipedの「フィギュア モード」や CATの「設定/アニメーションモード切替」と、 スキンモディファイヤの「常に変形」と同じ感じです。LWだと「ボーン編集モード」、MayaのHumanIKだとReference用のスケルトンを「スキンされたジョイントの移動」する感じかな?

 

セットアップモードのアイテム位置

セットアップモードに切り替えたときアイテムの位置や角度が変わります。これはチャンネルに複数の値を格納する仕組みを利用しています。チャンネルに「セットアップ/静止値」を設定すると、セットアップモードで値が切り替わります。

少し複雑そうですが General Influence の「エフェクタ」に接続されているアイテムは、トランスフォーム(移動、回転、スケール)を編集すると自動的に「セットアップ/静止値」が設定されます。この仕様によりデフォーマを使う場合は「セットアップ/静止値」を意識することなくセットアップモードを使用することができます。
バインドしたスケルトン、トランスフォームデフォーマ、スプラインデフォーマ等のロケータはこの仕組みで初期位置が設定されます。

自作のリグを作成する場合は「セットアップ/静止値」の仕組みを理解しておくと便利です。「セットアップ/静止値」は全てのチャンネルに設定できるので、セットアップモードでチャンネルモディファイヤを無効にしたり、「セットアップ/静止値」が設定されているトランスフォームにリグを構築することができるようになります。

セットアップモードの仕組みがわかると、デフォーマを多用するキャラクターリグも構築しやすくなるのではないでしょうか。

Tips

modoのトランスフォームアイテム

引き続きチャンネルの基本について書いてみます。
modoの設計思想にはレイヤーという概念が深く根づいています。メッシュレイヤー、シェーダーツリー、アクションレイヤー。今回紹介するトランスフォームアイテムもレイヤーとして動作します。

 

トランスフォームアイテムとは?

トランスフォームアイテムとは「移動」「回転」「スケール」チャンネルのことです。アニメーションやリギングで欠かせないチャンネルですが、modoはこのトランスフォームアイテムを好きな数だけレイヤーのように追加することができます。これはリギングする上でとても便利な仕組みです。
3ds Maxだと「リスト コントローラ」が同じような機能だった気がします。

 

トランスフォームアイテムのメリット

トランスフォームを加算(オフセット)のように使用できます。具体的な例としてはコンストレイントやエクスプレッションで計算された値と、ユーザー操作のトランスフォームを組み合わせることができます。これはリギングでとても便利な機能です。

例えば以下の画像では位置トランスフォームを追加し、 Channel Noise を使用してランダムな動きを加えていますが、アイテムの移動は通常通り移動ツールで操作することができます。

アイテムをロケータにペアレントしても同じ事ができますが、トランスフォームアイテムを使用することでアイテムリストの階層構造が深くならずに済みます。
また modoは ロケータの表示数が多いとビューポートのパフォーマンスが低下するため、ロケータを使用しなくていい場合はトランスフォームアイテムかグループロケータを使用するのがお勧めです。(11.0 からは「アイテム表示 キャッシュ」がおこなわれロケータのアニメーション再生が高速化されているらしい)

 

トランスフォームアイテムの追加方法

チャンネルビューポートで「位置の追加」「回転の追加」「スケールの追加」をクリックするとトランスフォームが追加されます。太字で表示されるのがプライマリのトランスフォームで、トランスフォームツールで動かすために使用されます。

これら複数のトランスフォームアイテムはリストの下から上へ順番に計算されます。詳細は「modoのマトリクス計算順」参照のこと。

modoはアイテム追加時はトランスフォームアイテムがありません。トランスフォームツールで編集したとき自動で追加されます。これは何千ものアイテムが存在するシーンで余計なチャンネルデータを扱わずに済むための仕様で、ファイルのサイズや処理時間を大幅に節約できるようです。この仕様が気にくわない場合は初期設定で変更するこができます。

  • ファイルメニュー / システム / 初期設定 / デフォルト / メッシュアイテム / アイテムトランスフォームの自動作成

 

トランスフォームアイテムの種類

トランスフォームアイテムは「移動」「回転」「スケール」の他にもいくつか種類があります。ピボットを移動や回転したときに追加される「ピボット位置補正」「ピボット回転補正」、XYZの一軸だけスケールした状態で「同位置でペアレント」した場合に追加される「シアー」の全6種類です。

「transform.add」コマンドを使うと好きなトランスフォームアイテムを追加できます。

 

トランスフォームの結合

右クリックメニューの「結合」を使用して、複数のトランスフォームの値を1つのトランスフォームにまとめることができます。

 

トランスフォーム ゼロ

トランスフォームアイテムの仕組みを使用した機能が「ゼロ」です。プロパティのトランスフォームに「ゼロ」というプルダウンがありますが、実はこれはトランスフォームアイテムを追加して「結合」までを自動で処理してくれる便利機能です。

「ゼロ」は LightWave の機能だと「中心点回転記録」と同じです。Mayaだと回転に「トランスフォームのフリーズ」をすると「ジョイント方向」に値が入るようなやつだと思います。たぶん。

例えばキャラクターリグを作る場合、TスタンスやAスタンスでスケルトンを作成して初期姿勢にすると思います。このとき移動や回転に値が入ってると、初期姿勢に戻したい場合はアイテム毎に異なる値を入力しないと初期姿勢に戻すことができません。
ゼロはトランスフォームアイテムに値を格納することで、プライマリのトランスフォーム値を全て 0 にすることができます。

初期姿勢のトランスフォームを全て 0 にしておくと、「リセット」の「全て」をクリックするだけでアイテムを初期姿勢に戻すことができるので便利です。

回転したスケルトンがジンバルロックしている場合も「ゼロ」を実行することで、ジンバルロックしていない状態を初期姿勢にすることができます。FKで操作するアイテムは、スケルトンの位置調節が終わってポーズやアニメーション作成をはじめる前に「ゼロ」を実行しておくと色々便利です。

modoはスケマティックが使いやすく、トランスフォーム関連もリグが組みやすいのがいいですね。